{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "_yz-QM1sLt0C" }, "source": [ "# Rock Paper Scissors (using MobileNetV2 network)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "vnXA-hb9cY4a" }, "source": [ "> - 🤖 See [full list of Machine Learning Experiments](https://github.com/trekhleb/machine-learning-experiments) on **GitHub**

\n", "> - ▶️ **Interactive Demo**: [try this model and other machine learning experiments in action](https://trekhleb.github.io/machine-learning-experiments/)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-VlBnVc7cY4e" }, "source": [ "## Experiment overview" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-tjHQwKDcY4h" }, "source": [ "In this experiment we will build a [Convolutional Neural Network](https://en.wikipedia.org/wiki/Convolutional_neural_network) (CNN) model using [Tensorflow](https://www.tensorflow.org/) to recognize Rock-Paper-Scissors signs (gestures) on the photo.\n", "\n", "Instead of training the model from scratch we will use an [MobileNetV2](https://keras.io/applications/#mobilenetv2) model which is pre-trained on the [ImageNet](http://www.image-net.org/) dataset, a large dataset of 1.4M images and 1000 classes of web images.\n", "\n", "![rock_paper_scissors_cnn.jpg](../../demos/src/images/rock_paper_scissors_mobilenet_v2.jpg)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "EDCyec_7nbMx" }, "source": [ "_Inspired by [Getting started with TensorFlow 2.0](https://medium.com/@himanshurawlani/getting-started-with-tensorflow-2-0-faf5428febae) article._" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "LoT5RmjYkt4J" }, "source": [ "## Importing dependencies" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 1920, "status": "ok", "timestamp": 1584117432262, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "BhMhFCmtNCpW", "outputId": "8f0cc352-e022-41f3-9d47-ae78de4903d8" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TensorFlow 2.x selected.\n" ] } ], "source": [ "# Selecting Tensorflow version v2 (the command is relevant for Colab only).\n", "%tensorflow_version 2.x" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "executionInfo": { "elapsed": 12222, "status": "ok", "timestamp": 1584117442583, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "nWnwUtAmLt1B", "outputId": "f54e8586-cd64-4ddf-d89f-b5d1225b2d5a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python version: 3.6.9\n", "Tensorflow version: 2.1.0\n", "Keras version: 2.2.4-tf\n" ] } ], "source": [ "import tensorflow as tf\n", "import tensorflow_datasets as tfds\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import platform\n", "import datetime\n", "import os\n", "import math\n", "import random\n", "\n", "print('Python version:', platform.python_version())\n", "print('Tensorflow version:', tf.__version__)\n", "print('Keras version:', tf.keras.__version__)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "eARhRY8PLt1u" }, "source": [ "## Configuring TensorBoard\n", "\n", "We will use TensorBoard as a helper to debug the model training process." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "OLxzq_peLt1z" }, "outputs": [], "source": [ "# Load the TensorBoard notebook extension.\n", "# %reload_ext tensorboard\n", "%load_ext tensorboard" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "-2ms5YLpLt13" }, "outputs": [], "source": [ "# Clear any logs from previous runs.\n", "!rm -rf ./logs/" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "s9YXAy5kLt18" }, "source": [ "## Loading the dataset\n", "\n", "We will download Rock-Paper-Scissors dataset from [TensorFlow Datasets](https://github.com/tensorflow/datasets) collection. To do that we loaded a `tensorflow_datasets` module.\n", "\n", "`tensorflow_datasets` defines a collection of datasets ready-to-use with TensorFlow.\n", "\n", "Each dataset is defined as a [tfds.core.DatasetBuilder](https://www.tensorflow.org/datasets/api_docs/python/tfds/core/DatasetBuilder), which encapsulates the logic to download the dataset and construct an input pipeline, as well as contains the dataset documentation (version, splits, number of examples, etc.)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "colab_type": "code", "executionInfo": { "elapsed": 16188, "status": "ok", "timestamp": 1584117446579, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "k2zZOCweLt1-", "outputId": "97e2da78-158d-4966-936b-9bdeaf614e7a" }, "outputs": [ { "data": { "text/plain": [ "['abstract_reasoning',\n", " 'aeslc',\n", " 'aflw2k3d',\n", " 'amazon_us_reviews',\n", " 'arc',\n", " 'bair_robot_pushing_small',\n", " 'big_patent',\n", " 'bigearthnet',\n", " 'billsum',\n", " 'binarized_mnist',\n", " 'binary_alpha_digits',\n", " 'c4',\n", " 'caltech101',\n", " 'caltech_birds2010',\n", " 'caltech_birds2011',\n", " 'cars196',\n", " 'cassava',\n", " 'cats_vs_dogs',\n", " 'celeb_a',\n", " 'celeb_a_hq',\n", " 'chexpert',\n", " 'cifar10',\n", " 'cifar100',\n", " 'cifar10_1',\n", " 'cifar10_corrupted',\n", " 'citrus_leaves',\n", " 'cityscapes',\n", " 'civil_comments',\n", " 'clevr',\n", " 'cmaterdb',\n", " 'cnn_dailymail',\n", " 'coco',\n", " 'coil100',\n", " 'colorectal_histology',\n", " 'colorectal_histology_large',\n", " 'cos_e',\n", " 'curated_breast_imaging_ddsm',\n", " 'cycle_gan',\n", " 'deep_weeds',\n", " 'definite_pronoun_resolution',\n", " 'diabetic_retinopathy_detection',\n", " 'dmlab',\n", " 'downsampled_imagenet',\n", " 'dsprites',\n", " 'dtd',\n", " 'duke_ultrasound',\n", " 'dummy_dataset_shared_generator',\n", " 'dummy_mnist',\n", " 'emnist',\n", " 'esnli',\n", " 'eurosat',\n", " 'fashion_mnist',\n", " 'flic',\n", " 'flores',\n", " 'food101',\n", " 'gap',\n", " 'gigaword',\n", " 'glue',\n", " 'groove',\n", " 'higgs',\n", " 'horses_or_humans',\n", " 'i_naturalist2017',\n", " 'image_label_folder',\n", " 'imagenet2012',\n", " 'imagenet2012_corrupted',\n", " 'imagenet_resized',\n", " 'imagenette',\n", " 'imdb_reviews',\n", " 'iris',\n", " 'kitti',\n", " 'kmnist',\n", " 'lfw',\n", " 'lm1b',\n", " 'lost_and_found',\n", " 'lsun',\n", " 'malaria',\n", " 'math_dataset',\n", " 'mnist',\n", " 'mnist_corrupted',\n", " 'movie_rationales',\n", " 'moving_mnist',\n", " 'multi_news',\n", " 'multi_nli',\n", " 'multi_nli_mismatch',\n", " 'newsroom',\n", " 'nsynth',\n", " 'omniglot',\n", " 'open_images_v4',\n", " 'oxford_flowers102',\n", " 'oxford_iiit_pet',\n", " 'para_crawl',\n", " 'patch_camelyon',\n", " 'pet_finder',\n", " 'places365_small',\n", " 'plant_leaves',\n", " 'plant_village',\n", " 'plantae_k',\n", " 'quickdraw_bitmap',\n", " 'reddit_tifu',\n", " 'resisc45',\n", " 'rock_paper_scissors',\n", " 'rock_you',\n", " 'scan',\n", " 'scene_parse150',\n", " 'scicite',\n", " 'scientific_papers',\n", " 'shapes3d',\n", " 'smallnorb',\n", " 'snli',\n", " 'so2sat',\n", " 'squad',\n", " 'stanford_dogs',\n", " 'stanford_online_products',\n", " 'starcraft_video',\n", " 'sun397',\n", " 'super_glue',\n", " 'svhn_cropped',\n", " 'ted_hrlr_translate',\n", " 'ted_multi_translate',\n", " 'tf_flowers',\n", " 'the300w_lp',\n", " 'titanic',\n", " 'trivia_qa',\n", " 'uc_merced',\n", " 'ucf101',\n", " 'vgg_face2',\n", " 'visual_domain_decathlon',\n", " 'voc',\n", " 'wider_face',\n", " 'wikihow',\n", " 'wikipedia',\n", " 'wmt14_translate',\n", " 'wmt15_translate',\n", " 'wmt16_translate',\n", " 'wmt17_translate',\n", " 'wmt18_translate',\n", " 'wmt19_translate',\n", " 'wmt_t2t_translate',\n", " 'wmt_translate',\n", " 'xnli',\n", " 'xsum']" ] }, "execution_count": 5, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "# See available datasets\n", "tfds.list_builders()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 352, "referenced_widgets": [ "67006125aa3b4a8faaec714cd3ba57cc", "3d732048e4d7458c944ffd0faacfc66f", "ad501cd5b9484b5a9917ada0cb2f6cd2", "14e8fec9c1b040e6a6aca1878f0cdeaf", "f315767212d6477f94b686c121d4d67a", "20fd145da4ba4141b44e549eb1f4fa27", "6392a0e04bfc452cbbc93b70ed00c5c7", "840d9097d98145dbb59bcf470db7e58a", "0f0826db891d4eb1a77533de55e4c6fc", "00a09ba3e0de46a3818399470bd7c19f", "fd3fdb34abd943e3ae840d07873faba9", "a63f4f5993c94b46b1ca4c3a8a0323b3", "a8c696788cc245a19c08bf6185a1480f", "c2c4c37e60a248ff88067301ea9cc088", "ec810ee9725a49d3ba02d3ecee57dbd4", "41f9a4d62caf4e30b7bf10a6ad463b46", "80af9e52ac7c4f328cc944d6c8697576", "8d31026d3d3b4b1aa323074e82c3e1ea", "68790bf886fe4f929ccf89a63f09ec79", "17574ae6f50f4131b2814ab12d0bf442", "fe73783974624d9bbffd1c1d0b7877b7", "ea2ea82b60f0429bb6e7af5a70eeba52", "c14a6cb079234b4bbfb2c7f91386c449", "bb7ae99cbd5d4e89b54b190fb45d1bf4", "2d2dbe480be74566810a5cec6b26471b", "6e19550e5035461eb0ad74878f5e2d15", "0950600f286d48ff9a35337b24ef64fc", "0400652843724f3d91ee66aacc95ea33", "a8f5f1bf4a674eafa87ce8f0552834d7", "23987fe99ee7401eb203550810823ca4", "4331985d1b764aaea1c72a8638a7fa37", "8287a895bd704525bdfd015c3f70d49c", "a8556c8709264236b55f84a7bb5f7ffb", "74b70ec5faee459991a8f2c956bc8891", "67f7e7806e574c9ab980e12a79690007", "c486cd27a1214e4186ad812991921982", "a41b19880c5246e3a8dcc0f29201d309", "3462c60f830745ff8e0621b9c65f79c7", "84589bf2c0f74a8c946093c0c86c4549", "68ad524d13c44d5d950b451fee3ea659", "57d02334fa254873acf6eb57f1896232", "d3a49253898a44eaad302e3cf136a97d", "eb5694548f7a483dbf5ea87df52a53d9", "78ae713c8edc489bae2c3fd68a22aa3d", "83ca399984644746a0b691b19c084f95", "8759d32acbd04874b6aae214f643cb6a", "06e128690421459ebd8a39222a488e98", "364c48648e58428d8499906786ac054b" ] }, "colab_type": "code", "executionInfo": { "elapsed": 24163, "status": "ok", "timestamp": 1584117454561, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "FxDymXbpLt2D", "outputId": "6c23c329-fa71-4c07-bbb5-a6b0b737e93a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1mDownloading and preparing dataset rock_paper_scissors (219.53 MiB) to tmp/rock_paper_scissors/3.0.0...\u001b[0m\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "67006125aa3b4a8faaec714cd3ba57cc", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=1, bar_style='info', description='Dl Completed...', max=1, style=ProgressStyl…" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0f0826db891d4eb1a77533de55e4c6fc", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=1, bar_style='info', description='Dl Size...', max=1, style=ProgressStyle(des…" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n", " InsecureRequestWarning)\n", "/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n", " InsecureRequestWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "80af9e52ac7c4f328cc944d6c8697576", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=1, bar_style='info', max=1), HTML(value='')))" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "Shuffling and writing examples to tmp/rock_paper_scissors/3.0.0.incompleteCGWESG/rock_paper_scissors-train.tfrecord\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2d2dbe480be74566810a5cec6b26471b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=2520), HTML(value='')))" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\r" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a8556c8709264236b55f84a7bb5f7ffb", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=1, bar_style='info', max=1), HTML(value='')))" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "Shuffling and writing examples to tmp/rock_paper_scissors/3.0.0.incompleteCGWESG/rock_paper_scissors-test.tfrecord\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "57d02334fa254873acf6eb57f1896232", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=372), HTML(value='')))" ] }, "metadata": { "tags": [] }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "\u001b[1mDataset rock_paper_scissors downloaded and prepared to tmp/rock_paper_scissors/3.0.0. Subsequent calls will reuse this data.\u001b[0m\n" ] } ], "source": [ "DATASET_NAME = 'rock_paper_scissors'\n", "\n", "(dataset_train_raw, dataset_test_raw), dataset_info = tfds.load(\n", " name=DATASET_NAME,\n", " data_dir='tmp',\n", " with_info=True,\n", " as_supervised=True,\n", " split=[tfds.Split.TRAIN, tfds.Split.TEST],\n", ")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "colab_type": "code", "executionInfo": { "elapsed": 30975, "status": "ok", "timestamp": 1584117461418, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "JMRaImcqLt2H", "outputId": "f325ac80-df51-4bd2-f88d-54bef56736c4" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Raw train dataset: \n", "Raw train dataset size: 2520 \n", "\n", "Raw test dataset: \n", "Raw test dataset size: 372 \n", "\n" ] } ], "source": [ "print('Raw train dataset:', dataset_train_raw)\n", "print('Raw train dataset size:', len(list(dataset_train_raw)), '\\n')\n", "\n", "print('Raw test dataset:', dataset_test_raw)\n", "print('Raw test dataset size:', len(list(dataset_test_raw)), '\\n')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 425 }, "colab_type": "code", "executionInfo": { "elapsed": 30945, "status": "ok", "timestamp": 1584117461421, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "w5pZ7fwnLt3V", "outputId": "f22821ac-8b3f-4a8a-e9d5-5151efc7f077" }, "outputs": [ { "data": { "text/plain": [ "tfds.core.DatasetInfo(\n", " name='rock_paper_scissors',\n", " version=3.0.0,\n", " description='Images of hands playing rock, paper, scissor game.',\n", " homepage='http://laurencemoroney.com/rock-paper-scissors-dataset',\n", " features=FeaturesDict({\n", " 'image': Image(shape=(300, 300, 3), dtype=tf.uint8),\n", " 'label': ClassLabel(shape=(), dtype=tf.int64, num_classes=3),\n", " }),\n", " total_num_examples=2892,\n", " splits={\n", " 'test': 372,\n", " 'train': 2520,\n", " },\n", " supervised_keys=('image', 'label'),\n", " citation=\"\"\"@ONLINE {rps,\n", " author = \"Laurence Moroney\",\n", " title = \"Rock, Paper, Scissors Dataset\",\n", " month = \"feb\",\n", " year = \"2019\",\n", " url = \"http://laurencemoroney.com/rock-paper-scissors-dataset\"\n", " }\"\"\",\n", " redistribution_info=,\n", ")" ] }, "execution_count": 8, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "dataset_info" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "executionInfo": { "elapsed": 30921, "status": "ok", "timestamp": 1584117461434, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "rvRfxFpN67yh", "outputId": "64c74ba3-e595-4b51-b2bd-b12131508c4b" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of TRAIN examples: 2520\n", "Number of TEST examples: 372\n", "Number of label classes: 3\n" ] } ], "source": [ "NUM_TRAIN_EXAMPLES = dataset_info.splits['train'].num_examples\n", "NUM_TEST_EXAMPLES = dataset_info.splits['test'].num_examples\n", "NUM_CLASSES = dataset_info.features['label'].num_classes\n", "\n", "print('Number of TRAIN examples:', NUM_TRAIN_EXAMPLES)\n", "print('Number of TEST examples:', NUM_TEST_EXAMPLES)\n", "print('Number of label classes:', NUM_CLASSES)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 187 }, "colab_type": "code", "executionInfo": { "elapsed": 30848, "status": "ok", "timestamp": 1584117461436, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "yuvV63gyLt3b", "outputId": "72e583e6-367f-475a-fb9a-7877de9e381a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Input image size (original): 300\n", "Input image shape (original): (300, 300, 3)\n", "\n", "\n", "Input image size (reduced): 128\n", "Input image shape (reduced): (128, 128, 3)\n", "\n", "\n", "Input image size: 128\n", "Input image shape: (128, 128, 3)\n" ] } ], "source": [ "INPUT_IMG_SIZE_ORIGINAL = dataset_info.features['image'].shape[0]\n", "INPUT_IMG_SHAPE_ORIGINAL = dataset_info.features['image'].shape\n", "\n", "# For Mobilenet v2 possible input sizes are [96, 128, 160, 192, 224].\n", "INPUT_IMG_SIZE_REDUCED = 128\n", "INPUT_IMG_SHAPE_REDUCED = (\n", " INPUT_IMG_SIZE_REDUCED,\n", " INPUT_IMG_SIZE_REDUCED,\n", " INPUT_IMG_SHAPE_ORIGINAL[2]\n", ")\n", "\n", "# Here we may switch between bigger or smaller image sized that we will train our model on.\n", "INPUT_IMG_SIZE = INPUT_IMG_SIZE_REDUCED\n", "INPUT_IMG_SHAPE = INPUT_IMG_SHAPE_REDUCED\n", "\n", "print('Input image size (original):', INPUT_IMG_SIZE_ORIGINAL)\n", "print('Input image shape (original):', INPUT_IMG_SHAPE_ORIGINAL)\n", "print('\\n')\n", "print('Input image size (reduced):', INPUT_IMG_SIZE_REDUCED)\n", "print('Input image shape (reduced):', INPUT_IMG_SHAPE_REDUCED)\n", "print('\\n')\n", "print('Input image size:', INPUT_IMG_SIZE)\n", "print('Input image shape:', INPUT_IMG_SHAPE)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "FbSOb5p4Lt3q" }, "outputs": [], "source": [ "# Function to convert label ID to labels string.\n", "get_label_name = dataset_info.features['label'].int2str" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 68 }, "colab_type": "code", "executionInfo": { "elapsed": 30878, "status": "ok", "timestamp": 1584117461555, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "fef-jl8qLt3u", "outputId": "f8605201-1324-4fe2-bad9-7343befbb59a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "rock\n", "paper\n", "scissors\n" ] } ], "source": [ "print(get_label_name(0));\n", "print(get_label_name(1));\n", "print(get_label_name(2));" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "--UTznQZLt5r" }, "source": [ "## Exploring the dataset" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "Y_MA0RMTLt5s" }, "outputs": [], "source": [ "def preview_dataset(dataset):\n", " plt.figure(figsize=(12, 12))\n", " plot_index = 0\n", " for features in dataset.take(12):\n", " (image, label) = features\n", " plot_index += 1\n", " plt.subplot(3, 4, plot_index)\n", " # plt.axis('Off')\n", " label = get_label_name(label.numpy())\n", " plt.title('Label: %s' % label)\n", " plt.imshow(image.numpy())" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 670 }, "colab_type": "code", "executionInfo": { "elapsed": 34051, "status": "ok", "timestamp": 1584117464794, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "_-0-ntBmLt5x", "outputId": "22ba2879-9fc8-4853-d231-f9489ae24f02" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAKNCAYAAAAj960aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOy9ebxtWVXf+52r2Xuf5nZVtwqKVkCE\nkAZURJOHaBCb+HwxMU+jxigmPl4a4zMYA9G8JyYam9gQezBElEZQeAiCIlEpkE4oi4JqkKK6W83t\n29PtvVczZ/7Ye54aZ5wx1z731r33nCr3+Hz2Z6+91mzGHHM0vznXWGu7EAJzmtOc5jSnOc1pTnOa\n0191ynabgTnNaU5zmtOc5jSnOc1pL9AcGM9pTnOa05zmNKc5zWlOzIHxnOY0pznNaU5zmtOc5gTM\ngfGc5jSnOc1pTnOa05zmBMyB8ZzmNKc5zWlOc5rTnOYEzIHxnOY0pznNaU5zmtOc5gTMgfElkXPu\nRufc91ztujts/9ecc//vlWp/To9umuvunB7rtJd1fK/1O6fdo0ejnv5Vob/SwNg5d59z7iW7zcfl\npBDCvwgh/Ofd5mNOV5bmujunxzo9FnV8To89muvpY4/+SgPjOT0ycs4Vu83DnOZ0KTTX3Tldbprr\n1JzmlKZHk33MgbFBzrlDzrl3O+dOOefOTY+fpIo9wzn3cefcinPunc65a0T9L3POfcQ5d9459ynn\n3FdeIh8vcM7dNO3jhHPu58S1F4o+HnDOvXR6/vXOuR+bHh+e8n7eOXfWOfdnzrlseu0VzrmHnHOr\nzrnPOue+anq+75x7tXPu6PTzaudcf3rtK51zD07rHgd+o6uPOV19muvuXHcf67SHdPxVzrm3Oefe\n6JxbAV7apYPTOt/onLtlytfdzrmvM9q9wTn3aefcD14KX3PaG7QH9fStU595s3PuueL6K6e6uOqc\nu8M59w/FtZc65z7snPsl59wF59xfRn87vX7AOfc659yxqU/+Medcrur+vHPuDPCqS+F/N2geBGzK\ngN8Ango8BRgCv6TKfCfwz4AbgAb4BQDn3BOB9wA/BlwD/Dvg7c6563QnzrmnTJX+KQk+/hvw30II\n+4FnAL8zrfdU4A+BXwSuA54H3GLU/wHgwWmZxwE/BATn3LOA7wW+JISwD/ha4L5pnR8Gvmza5nOB\n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\n0IVO4AqhpQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# Explore raw training dataset images.\n", "preview_dataset(dataset_train_raw)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 918 }, "colab_type": "code", "executionInfo": { "elapsed": 33928, "status": "ok", "timestamp": 1584117464795, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "ADqRAQ2YLt6E", "outputId": "85feab9b-8263-486d-f63a-9675f162edca" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Label: 2 \n", "\n", "Image shape: (300, 300, 3) \n", "\n", "[[[254 254 254]\n", " [253 253 253]\n", " [254 254 254]\n", " ...\n", " [251 251 251]\n", " [250 250 250]\n", " [250 250 250]]\n", "\n", " [[254 254 254]\n", " [254 254 254]\n", " [253 253 253]\n", " ...\n", " [250 250 250]\n", " [251 251 251]\n", " [249 249 249]]\n", "\n", " [[254 254 254]\n", " [254 254 254]\n", " [254 254 254]\n", " ...\n", " [251 251 251]\n", " [250 250 250]\n", " [252 252 252]]\n", "\n", " ...\n", "\n", " [[252 252 252]\n", " [251 251 251]\n", " [252 252 252]\n", " ...\n", " [247 247 247]\n", " [249 249 249]\n", " [248 248 248]]\n", "\n", " [[253 253 253]\n", " [253 253 253]\n", " [251 251 251]\n", " ...\n", " [248 248 248]\n", " [248 248 248]\n", " [248 248 248]]\n", "\n", " [[252 252 252]\n", " [253 253 253]\n", " [252 252 252]\n", " ...\n", " [248 248 248]\n", " [247 247 247]\n", " [250 250 250]]]\n" ] } ], "source": [ "# Explore what values are used to represent the image. \n", "(first_image, first_lable) = list(dataset_train_raw.take(1))[0]\n", "print('Label:', first_lable.numpy(), '\\n')\n", "print('Image shape:', first_image.numpy().shape, '\\n')\n", "print(first_image.numpy())" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "DuUdSSzoLt6I" }, "source": [ "## Pre-processing the dataset" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "onNMq8CQLt6J" }, "outputs": [], "source": [ "def format_example(image, label):\n", " # Make image color values to be float.\n", " image = tf.cast(image, tf.float32)\n", " # Make image color values to be in [0..1] range.\n", " image = image / 255.\n", " # Make sure that image has a right size\n", " image = tf.image.resize(image, [INPUT_IMG_SIZE, INPUT_IMG_SIZE])\n", " return image, label" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "IUxjRhVpLt6M" }, "outputs": [], "source": [ "dataset_train = dataset_train_raw.map(format_example)\n", "dataset_test = dataset_test_raw.map(format_example)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 918 }, "colab_type": "code", "executionInfo": { "elapsed": 33887, "status": "ok", "timestamp": 1584117464798, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "d0QPUYQfLt6R", "outputId": "821819ad-16c4-41b1-ba89-de90e5c81cc3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Label: 2 \n", "\n", "Image shape: (128, 128, 3) \n", "\n", "[[[0.99521387 0.99521387 0.99521387]\n", " [0.99607843 0.99607843 0.99607843]\n", " [0.9939281 0.9939281 0.9939281 ]\n", " ...\n", " [0.9838513 0.9838513 0.9838513 ]\n", " [0.9856216 0.9856216 0.9856216 ]\n", " [0.98129785 0.98129785 0.98129785]]\n", "\n", " [[0.99607843 0.99607843 0.99607843]\n", " [0.9960181 0.9960181 0.9960181 ]\n", " [0.99601716 0.99601716 0.99601716]\n", " ...\n", " [0.9818407 0.9818407 0.9818407 ]\n", " [0.984375 0.984375 0.984375 ]\n", " [0.98169994 0.98169994 0.98169994]]\n", "\n", " [[0.99607843 0.99607843 0.99607843]\n", " [0.99607843 0.99607843 0.99607843]\n", " [0.9953719 0.9953719 0.9953719 ]\n", " ...\n", " [0.9859232 0.9859232 0.9859232 ]\n", " [0.98425245 0.98425245 0.98425245]\n", " [0.97992975 0.97992975 0.97992975]]\n", "\n", " ...\n", "\n", " [[0.98749423 0.98749423 0.98749423]\n", " [0.9882133 0.9882133 0.9882133 ]\n", " [0.986736 0.986736 0.986736 ]\n", " ...\n", " [0.972549 0.972549 0.972549 ]\n", " [0.97391427 0.97391427 0.97391427]\n", " [0.9755237 0.9755237 0.9755237 ]]\n", "\n", " [[0.9907878 0.9907878 0.9907878 ]\n", " [0.9881759 0.9881759 0.9881759 ]\n", " [0.9882353 0.9882353 0.9882353 ]\n", " ...\n", " [0.96862745 0.96862745 0.96862745]\n", " [0.9762274 0.9762274 0.9762274 ]\n", " [0.9713025 0.9713025 0.9713025 ]]\n", "\n", " [[0.9917346 0.9917346 0.9917346 ]\n", " [0.98564166 0.98564166 0.98564166]\n", " [0.9882353 0.9882353 0.9882353 ]\n", " ...\n", " [0.9699142 0.9699142 0.9699142 ]\n", " [0.96875 0.96875 0.96875 ]\n", " [0.97252893 0.97252893 0.97252893]]]\n" ] } ], "source": [ "# Explore what values are used to represent the image. \n", "(first_image, first_lable) = list(dataset_train.take(1))[0]\n", "print('Label:', first_lable.numpy(), '\\n')\n", "print('Image shape:', first_image.numpy().shape, '\\n')\n", "print(first_image.numpy())" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 670 }, "colab_type": "code", "executionInfo": { "elapsed": 34990, "status": "ok", "timestamp": 1584117465940, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "i7SYQ7kELt6U", "outputId": "71b8facf-5d37-4c91-d0fc-42a6e53918fc" }, "outputs": [ { "data": { "image/png": "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\nswythS/edSd//+53IUCb6aXNoPTFSXp9kl6fOFIoKRjEBfOJYtjvMz8/pNfr0ev1SHoJSgBjtmzz\naCuDG8dtU9cjDMnsM9CuofMRHGPMllspLeQ9L7pbU97G/yZDaeuZOxZsrzk0kdXJkCQ9mBQwKTDa\noLWmyCcYUzDWOf/49r/YWBFq2++h8XPP529jz8ICkUnpKYVgUIWh0JpC66nOfQmx9fSznd7NPzTm\nQ+Xbadrqhk93m4ihjxS7NsSV1Q6flRifa931yemUt/Hf1U1f/DbluZhF13wTfpNtqStjMpnw4z/4\nA/zOL/4Ch+84wOE7DtAT6MdCP4a5JOb4wbv5lR/9IR44cj8PHLk/WI9Z4No092PXzZbftgHVSppv\nHrPh7hsWkS0ra268Kq69QOHKOovuPpR66+qnLXsbvXWJVVsdb+IKvjztOFmakuc52hjWs4LxpGBl\ncYn1lWXWV5bJtKYwCl3A6VMnvP3lK6dacb7zwO2YogAjGANZnjEej0AERNCUjnoSJ6wsL5EirC0v\ncuDAZzlw4LPcedftHD92lOUzi5w5fYK7PnfbRh1885FPJt+c5evH0E4A37NQPtvg7jmu4N7FC+Fs\nVoy/Bvg+4FYRuXl67eeA1wB/KSI/DBwCvussyujQ4Xyg090OFys63e1wMaLT2w4XDc7mVIrrCC98\nfv1287Xy93qBrjcd8s5Cq8KzevpNtyuqcnSes7y8yPyuSyik9HZ6cYIShc5TtM5ZL4S3/eGbePG3\nvQRg023kNl6Mr272tQ2PSSpvS+hFPeJkSD+JiXtzZEZTFbO6uk7S71MUBZfs2zdz/X1y+x7W8K2o\n+dKH+ti+7nr+1crJLKsX51t3K7l8K2yheL6+DN2daLpmY1PeSjFOy73k83t2c3ptiSMnFxFR5EY4\neeIEh+66C4Crrrmmth6hFbqqH07ff4S53pDxeBWhoEjH6GRItYMwy3Ke9NSngWfV1yd/Xd3t/21X\n0EN5+cp24/lWOEJlhexY9T2avn51BjnPqe6GbGpIZ902D70Gtq6MprLc33XyVOH2f1vGPM8Zj0ak\naUp/UD59Pz8/vxH3Qx/8AAdvu4VBrJibuwSASBVcsnsvhc4xWUqEkK2v8Nv/85UA/OIb37rx2lxf\n29iy+OSsiwObbWidPrsrZr7yQqvCvn733WKuyrdfK1wnewjnW2+nZWyxSaE285344dqaULu65YV+\n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\nnwDesj0pPKX05emtwI83q00fARzrDKHsBVR2dz8qu3tEds8yuYWzU3b3nNzCWSe7u0NunXPb+gG+\nE/g8cAXwm9udnlOUpy8CPt58Pt3mC7grfiXmF4B3A3fZ7rRuMl+vBW4ESvwcoP/WlydA8CuIrwA+\nCTx8u9N/GspDZXeXfFR2TyiPPSW7e1Vumzyo7N5ZFntKbps87UnZ3c1yq6+EVhRFURRFURS2fyqF\noiiKoiiKouwI1DBWFEVRFEVRFNQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRF\nURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRA\nDWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRF\nURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRF\nAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNF\nURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRF\nURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQw\nVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRF\nURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwVhRFURRFURRA\nDWNFURRFURRFAdQwVhRFURRFURRADWNFURRFURRFAdQwPu2IyHtF5KfP9L0nw3bFq2wfu1FOlbOH\nnSyfIvLnIvLbpyt8ZW+yk2X6bEcN4wURkatF5Nu2Ox2KMoTKqbKT2Yvy6Zz7H86539/udCjbw16U\n6bMdNYz3KCKSbncaFGWnos+HshtRuVV2K7tJdtUwPklE5DwR+UcRuVlEbmu+3ye47EEi8hERuUNE\n3iIid+nc/wgR+Q8RuV1EPi4ij9piOp4uIm8QkVeLyB3Ak0VkJCLPE5Ebms/zRGTUuefxInJpk64r\n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\nKioqKioqKoAqGFdUVFRUVFRUVFQAVTCuqKioqKioqKioAKpgXFFRUVFRUVFRUQFUwbiioqKioqKi\noqICqIJxRUVFRUVFRUVFBVAF44qKioqKioqKigqgCsYVFRUVFRUVFRUVQBWM/3/23jvat+Sq7/zs\nOuEXbnqpc6tbQskSyCIIJJukZTPjMMbMeJwXNrJhsbwWHhuPxjbIjC2MPMY2wRgZG2wMWALJdIPA\nCghJTSuL7lZL3er8Or33+vXL8aZfOKHmj/M7V3XrVp1z7n3pvqa+d/3WPaFq166qXbu+VadOnYCA\ngICAgICAgAAgEOOAgICAgICAgIAAIBDjgICAgICAgICAACAQ44CAgICAgICAgAAgEOOAgICAgICA\ngIAAIBDjgICAgICAgICAACAQ44CAgICAgICAgAAgEOOAgICAgICAgIAAIBDjgICAgICAgICAACAQ\n44CAgICAgICAgAAgEOOAgICAgICAgIAAIBDjgICAgICAgICAACAQ44CAgICAgICAgAAgEOOAgICA\ngICAgIAAIBDjgICAgICAgICAACAQ44CAgICAgICAgAAgEOOAgICAgICAgIAAIBDjgICAgICAgICA\nACAQ44CAgICAgICAgAAgEOOAgICAgICAgIAAIBDjgICAgICAgICAACAQ44CAgICAgICAgAAgEOOA\ngICAgICAgIAAIBDjgICAgICAgICAACAQ44CAgICAgICAgAAgEOOAgICAgICAgIAAIBDjgICAgICA\ngICAACAQ44CAgICAgICAgAAgEOMdQUQ+KSI/cLXjdpT/n0Xk/71S8gOubwTbDXipYTfbdECAD8Fu\ndy/+SBNjETkkIt91rfW4nNBa/z2t9U9caz0CriyC7Qa81PBStOmAlz6C3b708EeaGAdcGkQkvtY6\nBATsBMF2A65XBNsNuB5xPdltIMYOiMheEfmQiJwWkfOz49utYK8UkftFZFlEfldE9hnx3yIinxeR\nCyLysIi8dYd6fIuIfHGWxkkR+Rnj3rcZabwgIm+bXf9VEXnX7PjATPcLInJORD4jImp275+KyIsi\nsiIiT4nIn55d74nIvxeRY7PfvxeR3uzeW0Xk6CzuCeBXmtIIuPoIthts96WGXWTT7xSRu0Xkf8xs\n70si8kbj/o+IyLOze4+LyP9h3HubiHxORN4tIhdF5Mnabmf3l0Tkl0Xk+My23yUikRX3Z0XkLPDO\n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\nkMxapstJuu5fOHeOg48+xsFHH+PFIy+Q5/mWfNjxzbKx891EwMz0fXrZ5S8iKKW2yK7JsB23riel\nLospt9rtLB+dbBfYpJeZX59DdNmsK5x9v6ku7Gv29e0QRxdcdeiS4dLTRXZMW/PZiq/du/LXRX+X\nbdv623mp/YPv50q/Kcwl4pJs1yx3X2c/i9/o81xlZ/tVXz360rb9kn3dp2PTdZf+Lvlaaz57772s\nnTxBRExEjGhhenGNC2fOeu3Gl4c6PTtfZnyfn3eFcbWbpvqzbU9EiKLIKb8sy43fTglcR1w2vtCG\nrvq2laF53NSeXeXdpoPtj1w6dfUfLn7TBU3+1afTduTaPMxn92021uW+S1ab3ldqxvgB4NUi8goq\nA//rwN/ciSCb9JmwM+qqRJ8x2RVTXzPPt6unqVeTrmZ6NqHrkleXcfrIVJ2G1prpZMI9v/kbxJMp\nAOnSXvbd+XK+xRj1+zqenZAp13mXRtDW2fjydxlwSXZr6+XKi+vYju+z667O2j7vYpuuY7Pt+dJu\nymNTuKawts5t4U0dfeXQJa023dtku+TYZejyO5cJl8XnuuzGlx/XuXnNPq7hktdEBpvkNLV9l/83\n07d1dOW9KAp+9cffSaJihKi6pzUiJWdPn+b2V7zc2YG7bNJMdzskxdfHdWl3NlxEoZ4NdqVr22tT\nf3sJ2LHtdm1LTf2qHb9L3nxh2vpmO802DmPLdvmapn6nLV++9LrWbZdwLu5i2pavr2oqXx8Xagtv\n6+PDFSHGWutcRP4+8PtABPw3rfVjVyKtgIDLhWC3Adcrgu0GXK8Ithuw23DF1hhrrT9C9ZnES0bb\njGCXkYVrtqZptqIO0zTz4Yrj08+eLfDpbctsm80wZ5xdIyGlVPU4rCj41O/+NuVoRBQnAJTr57l4\ntKQsvh01e5xmz7C4lim4ZgmbyqfL7GiX2TpzDbKZP61157WebdiJ3frsp2307kObfbjkNM2G+GYK\n2kbOTXXjazsu+b5wrhlX13GXmRRXfF+eXHq6zrc70+e67orjm0G6VFxOn2uibZbJ5Zu6zGi11alt\nAzZqv+SbXbbLvqkOfDq++MILrB85zGCwSKmr9GQm5hf+yT/gJ97/AW68+WanfN9sYFt7cOXJlGmX\nj29WvCn/dfmZy4FcPrRJZ/Ndj0vFTm33Umc2m2bKu/gc1xMBVxjzvMsMaZMOTTPMTX2HT2bT7LKr\n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\nxrMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# Explore preprocessed training dataset images.\n", "preview_dataset(dataset_train)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Vojj1CCnLt6Y" }, "source": [ "## Data augmentation\n", "\n", "One of the way to fight the [model overfitting](https://en.wikipedia.org/wiki/Overfitting) and to generalize the model to a broader set of examples is to augment the training data.\n", "\n", "As you saw from the previous section all training examples have a white background and vertically positioned right hands. But what if the image with the hand will be horizontally positioned or what if the background will not be that bright. What if instead of a right hand the model will see a left hand. To make our model a little bit more universal we're going to flip and rotate images and also to adjust background colors. \n", "\n", "You may read more about a [Simple and efficient data augmentations using the Tensorfow tf.Data and Dataset API](https://www.wouterbulten.nl/blog/tech/data-augmentation-using-tensorflow-data-dataset/)." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "hsHN6_40_L-a" }, "outputs": [], "source": [ "def augment_flip(image: tf.Tensor) -> tf.Tensor:\n", " image = tf.image.random_flip_left_right(image)\n", " image = tf.image.random_flip_up_down(image)\n", " return image" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "8nzkXAMa-5ZG" }, "outputs": [], "source": [ "def augment_color(image: tf.Tensor) -> tf.Tensor:\n", " image = tf.image.random_hue(image, max_delta=0.08)\n", " image = tf.image.random_saturation(image, lower=0.7, upper=1.3)\n", " image = tf.image.random_brightness(image, 0.05)\n", " image = tf.image.random_contrast(image, lower=0.8, upper=1)\n", " image = tf.clip_by_value(image, clip_value_min=0, clip_value_max=1)\n", " return image" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "jeF-o0X0ARj0" }, "outputs": [], "source": [ "def augment_rotation(image: tf.Tensor) -> tf.Tensor:\n", " # Rotate 0, 90, 180, 270 degrees\n", " return tf.image.rot90(\n", " image,\n", " tf.random.uniform(shape=[], minval=0, maxval=4, dtype=tf.int32)\n", " )" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "SK9mlrfVua7L" }, "outputs": [], "source": [ "def augment_inversion(image: tf.Tensor) -> tf.Tensor:\n", " random = tf.random.uniform(shape=[], minval=0, maxval=1)\n", " if random > 0.5:\n", " image = tf.math.multiply(image, -1)\n", " image = tf.math.add(image, 1)\n", " return image" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "SfVxVWSOAyPq" }, "outputs": [], "source": [ "def augment_zoom(image: tf.Tensor, min_zoom=0.8, max_zoom=1.0) -> tf.Tensor:\n", " image_width, image_height, image_colors = image.shape\n", " crop_size = (image_width, image_height)\n", "\n", " # Generate crop settings, ranging from a 1% to 20% crop.\n", " scales = list(np.arange(min_zoom, max_zoom, 0.01))\n", " boxes = np.zeros((len(scales), 4))\n", "\n", " for i, scale in enumerate(scales):\n", " x1 = y1 = 0.5 - (0.5 * scale)\n", " x2 = y2 = 0.5 + (0.5 * scale)\n", " boxes[i] = [x1, y1, x2, y2]\n", "\n", " def random_crop(img):\n", " # Create different crops for an image\n", " crops = tf.image.crop_and_resize(\n", " [img],\n", " boxes=boxes,\n", " box_indices=np.zeros(len(scales)),\n", " crop_size=crop_size\n", " )\n", " # Return a random crop\n", " return crops[tf.random.uniform(shape=[], minval=0, maxval=len(scales), dtype=tf.int32)]\n", "\n", " choice = tf.random.uniform(shape=[], minval=0., maxval=1., dtype=tf.float32)\n", "\n", " # Only apply cropping 50% of the time\n", " return tf.cond(choice < 0.5, lambda: image, lambda: random_crop(image))" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "eD9cluIhLt6Y" }, "outputs": [], "source": [ "def augment_data(image, label):\n", " image = augment_flip(image)\n", " image = augment_color(image)\n", " image = augment_rotation(image)\n", " image = augment_zoom(image)\n", " image = augment_inversion(image)\n", " return image, label" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "eceiqwBKLt72" }, "outputs": [], "source": [ "dataset_train_augmented = dataset_train.map(augment_data)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 670 }, "colab_type": "code", "executionInfo": { "elapsed": 36513, "status": "ok", "timestamp": 1584117467625, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "mRyHTdQhLt8C", "outputId": "c2ce6743-390d-4075-c8d5-2e0af2d850d0" }, "outputs": [ { "data": { "image/png": "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\nMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFj\ng8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMB\ngBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgM\nBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8Fg\nMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFj\ng8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMB\ngBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgM\nBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8FgMBgMBoMBgBFjg8Fg\nMBgMBoMBgBHjKwIR/TYRfde1jrvF9P9XIvpvdip9w/6Gya7hoGEvy7TBsAwmt3sXh5oYE9EjRPTG\n3c7HdoKZ/wYz/w+7nQ/DzsJk13DQcBBl2nDwYXJ78HCoibHh6kBE3W7nwWC4EpjsGvYrTHYN+xH7\nSW6NGE+AiK4jov+LiJ4iomfj99uaYPcQ0R8Q0fNE9MtEdEbFfw0R/T4RPUdEf0xEr7/CfLyaiD4Y\nn/FFIvqH6t5r1TMeI6LvjNffQ0Q/Er+fi3l/joi+RES/S0Qu3vteIvocEb1ARJ8gojfE6ytE9ONE\n9Pn49+NEtBLvvZ6IHo9xvwDgX2z0DMO1h8muye5Bwx6S6R8mol8gov8jyt4fEtED6v73EdGn472P\nEdG3qHvfSUS/R0T/hIi+TEQfT3Ib758iop8goieibP8IEfkm7v9ERM8A+OEryb/h2sLkdv/KrQ0C\n03AA/gWAOwHcAeAigH/ShHkHgL8G4GYAPYB/DABEdCuAfwvgRwCcAfBfAvhFIrq+fQgR3RGF/o4l\n+fhHAP4RM58EcA+An4/x7gTwawD+ZwDXA3gVgA9NxP8eAI/HMDcC+AEATET3AfhbAL6OmU8AeDOA\n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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# Explore augmented training dataset.\n", "preview_dataset(dataset_train_augmented)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 670 }, "colab_type": "code", "executionInfo": { "elapsed": 38094, "status": "ok", "timestamp": 1584117469316, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "PliJJvraV0w-", "outputId": "0cddebb1-f113-47c7-d330-d98bc943b760" }, "outputs": [ { "data": { "image/png": "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\ny17JrUPidB65OlSe0udvVnd+vno3l9dSGpTSrpRGIYRTz6R+fO3XLra9bhkluS3VG3N9cYgdcR79\nupSeazJck8sSn6/OXat7DuGQd2tpdx6dW3LnkHpw/q2qRd0zhzuEsFi/bTabqr1wu6ZSPMXpk15e\nO11LA/YDqvpWVX3rK17xivlaev/kexo5EVmM7CHXUnK3ziNEeXjXBP5W+l0Kw5q/h7hfqxBvJ0t+\nzIWgppxvMatyC2dlN1WSSwbQ2v1Drs3Xl8pArVKoyVspXDWFm5e/+fsh+bJUQawZQ0vPLPl3nkpp\nzf+0sjjEoJt/n9egukluSnbT8M3fDw3vnA7nSdPU7Zr8pTK1puvXwppWorl75zUalsJTe7ZW7tfK\nzaENhqVyUzJu8nSvvZe6n147Txqcg5uyF7L7J+H7fBsVJfI0mP1M83i+VtMR6b00zKkf+fNr15by\nPw9T6XvudikcJQ7R16VnlxoM8/38+mzg5vombwCVGgS1fFiL4+0yjN8FvFlEvlhENsC3AD+29MJS\noc+F/jwJXXLzUOPkPAo/V/KHvnvIc+c1uA9997xGwqFurBkINdYUdu7Woe6eg3PL7ex/WgjzAlp7\n57ykivWQCjENW+5G6X56Ly9XS632JUW7VBbO02hbMzRK/q/5meuVEqXKIq/gDvGzVFHdQrmFWyS7\n+b05/IeWtzy9SgbDoWHKw1cy2kv5shaHPL7nqRMOvZ9X2LU0vJk6phavUhgOMbzPU2+GEAgh3Gr5\nvWl7oWbo14zWkhspNaN36dlSI2TNZimVuZJ8l+ybmp7Nf+d1Uil+pfiU/Pt87JRc1mrplKdjreyk\n/uVhLPlVysO1+NyWqRSqOorIHwT+GdAAf0tVP3A7/DKMW4XJrXG3YrJr3K2Y7BqXjds2x1hVf5x4\nfOK5qLW40mvpc5mfS+GptozTFkoellILbmkIoNYyXAtT+n6t5bbUs3VoHEvu3ipq/jvnTqZCpM/O\nYcjzt5bupbCfp+fuwDjclNyWWsElmZjJh4FK8Tu0lV6Kf6nXOH/2kHAu9VKUehSWevRuJh75vSX3\nar3atXJV8iePw5xPtR65JXL/bzc3K7slar1Fh/Tsp++VesvX5DV9bkkm0ufW5DMP21qP6VJ+L/WA\nLXGo/B3i7lJdNf9ekruSHsjDUkq/dErbRepdVT1ZezJTkqH03k2EqXq9VLbPW85rer/2uyR/h7pb\n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\nNmzYsAGA/w83tLSyU7QF0AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# Explore test dataset.\n", "preview_dataset(dataset_test)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "GBTbwiPYLt8G" }, "source": [ "## Data shuffling and batching\n", "\n", "We don't want our model to learn anything from the order or grouping of the images in the dataset. To avoid that we will shuffle the training examples. Also we're going to split the training set by batches to speed up training process and make it less memory consuming." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "KCWeWR5QLt8H" }, "outputs": [], "source": [ "BATCH_SIZE = 800\n", "\n", "dataset_train_augmented_shuffled = dataset_train_augmented.shuffle(\n", " buffer_size=NUM_TRAIN_EXAMPLES\n", ")\n", "\n", "dataset_train_augmented_shuffled = dataset_train_augmented.batch(\n", " batch_size=BATCH_SIZE\n", ")\n", "\n", "# Prefetch will enable the input pipeline to asynchronously fetch batches while your model is training.\n", "dataset_train_augmented_shuffled = dataset_train_augmented_shuffled.prefetch(\n", " buffer_size=tf.data.experimental.AUTOTUNE\n", ")\n", "\n", "dataset_test_shuffled = dataset_test.batch(BATCH_SIZE)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "executionInfo": { "elapsed": 38061, "status": "ok", "timestamp": 1584117469317, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "TiXw2QMxLt8K", "outputId": "e4684a97-2dce-48f7-fb09-3c9059390c07" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n" ] } ], "source": [ "print(dataset_train_augmented_shuffled)\n", "print(dataset_test_shuffled)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "colab_type": "code", "executionInfo": { "elapsed": 42585, "status": "ok", "timestamp": 1584117473889, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "KBQW_0i5Lt8W", "outputId": "f38618ba-b989-4e92-baba-355c53f13478" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Label batch shape: (800,) \n", "\n", "Image batch shape: (800, 128, 128, 3) \n", "\n", "Label batch: [2 2 0 1 0 1 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 0 0 0 0 1 1 2 2 2 0 0 2 2 2 0 1\n", " 2 1 0 0 0 0 0 1 1 2 2 0 0 2 1 1 0 0 1 2 1 0 0 0 0 1 2 1 1 2 2 1 1 1 1 1 2\n", " 0 0 2 1 0 1 0 0 1 1 1 1 2 1 1 0 0 2 2 1 0 0 1 1 2 1 1 0 0 0 2 0 0 1 1 2 0\n", " 2 0 1 1 1 2 0 1 0 1 2 1 0 1 2 2 0 2 1 0 0 1 0 1 0 1 2 1 2 2 1 0 2 0 1 1 2\n", " 0 2 2 1 0 1 2 2 1 1 0 2 0 0 1 1 0 1 2 2 0 0 2 1 1 0 1 2 0 1 1 1 2 0 2 1 2\n", " 1 1 1 2 2 2 1 0 2 0 1 0 1 2 0 0 2 0 1 1 0 2 2 2 1 1 1 0 1 0 2 0 0 1 1 1 2\n", " 1 2 1 2 2 0 2 1 0 1 0 0 2 1 1 0 2 2 2 0 1 1 1 2 0 1 0 2 1 1 2 1 2 2 0 1 2\n", " 2 0 2 1 0 2 0 0 1 0 2 2 0 0 2 2 0 0 2 2 1 0 0 0 2 1 1 0 2 0 1 1 1 2 1 1 0\n", " 1 1 2 2 2 1 2 0 0 0 2 0 2 0 0 0 0 2 2 0 1 0 0 1 1 0 1 1 0 2 1 0 2 0 1 1 0\n", " 2 1 0 0 1 2 2 0 1 1 2 2 2 0 2 2 2 0 2 1 2 0 2 1 0 1 1 1 0 2 0 1 0 1 0 0 0\n", " 0 1 2 1 0 2 2 0 2 2 2 1 2 1 2 0 1 0 0 0 1 1 1 1 1 2 1 1 1 0 1 0 2 0 0 1 0\n", " 0 2 0 0 1 1 1 1 2 2 2 1 1 0 1 2 0 1 2 0 0 1 1 0 2 2 1 2 2 1 1 0 2 1 2 2 0\n", " 1 0 0 1 2 0 2 1 1 2 1 1 2 0 2 1 1 1 1 1 2 0 0 0 0 1 1 0 0 2 2 2 1 0 2 1 2\n", " 0 1 2 0 1 2 0 2 1 0 0 1 1 2 0 2 2 0 1 1 2 0 1 2 2 0 1 1 2 1 2 1 0 1 2 1 1\n", " 1 0 1 1 1 2 0 0 1 0 1 2 2 0 0 0 0 2 0 0 0 2 2 2 0 2 2 2 1 2 1 1 1 0 0 1 2\n", " 0 2 0 1 1 0 0 2 1 0 0 1 2 0 0 0 1 1 2 1 1 0 2 0 0 1 2 1 1 0 0 0 1 2 1 1 0\n", " 2 0 1 1 0 2 0 2 0 2 2 1 0 1 1 1 2 1 0 0 2 0 0 2 0 1 0 2 2 2 1 1 0 2 1 0 0\n", " 2 0 1 1 0 2 2 0 1 2 0 2 2 1 2 0 2 2 2 2 2 0 0 2 2 1 2 0 2 0 1 2 0 2 0 0 2\n", " 0 2 2 0 1 1 0 0 2 0 1 1 1 1 0 2 1 0 1 1 2 2 1 0 0 1 1 0 2 2 1 1 2 2 2 1 2\n", " 1 2 1 2 1 2 1 2 0 1 1 1 1 2 0 1 2 2 1 2 1 2 1 2 1 2 0 0 1 0 0 1 0 2 1 1 2\n", " 0 1 1 2 1 0 1 2 0 0 0 2 0 0 2 2 2 0 0 0 1 1 0 1 1 1 1 1 1 0 1 2 1 1 2 2 1\n", " 0 0 0 0 1 1 1 2 2 0 2 0 0 2 2 1 1 2 2 2 2 1 1] \n", "\n", "First batch image: [[[0.05285108 0.05441457 0.05438358]\n", " [0.05858797 0.06015146 0.06012052]\n", " [0.05614591 0.0577094 0.05767846]\n", " ...\n", " [0.07339638 0.07495987 0.07492888]\n", " [0.07449257 0.076056 0.07602507]\n", " [0.07093447 0.0724979 0.07246697]]\n", "\n", " [[0.05374259 0.05530602 0.05527508]\n", " [0.05620182 0.05776531 0.05773431]\n", " [0.05614591 0.0577094 0.05767846]\n", " ...\n", " [0.07460791 0.0761714 0.07614046]\n", " [0.06745213 0.06901556 0.06898463]\n", " [0.0720892 0.07365268 0.07362175]]\n", "\n", " [[0.0568437 0.05840713 0.05837619]\n", " [0.05616665 0.05773008 0.05769914]\n", " [0.05755758 0.05912107 0.05909014]\n", " ...\n", " [0.07091552 0.07247901 0.07244807]\n", " [0.06963009 0.07119352 0.07116258]\n", " [0.0681147 0.06967813 0.06964719]]\n", "\n", " ...\n", "\n", " [[0.04876113 0.05032456 0.05029362]\n", " [0.04876113 0.05032456 0.05029362]\n", " [0.04942638 0.05098987 0.05095893]\n", " ...\n", " [0.05832291 0.0598864 0.05985546]\n", " [0.05989599 0.06145948 0.06142855]\n", " [0.0639661 0.06552958 0.06549865]]\n", "\n", " [[0.04876113 0.05032456 0.05029362]\n", " [0.04881793 0.05038136 0.05035043]\n", " [0.04881883 0.05038226 0.05035132]\n", " ...\n", " [0.06216681 0.0637303 0.06369931]\n", " [0.05978066 0.06134409 0.06131315]\n", " [0.06229937 0.06386286 0.06383187]]\n", "\n", " [[0.04957515 0.05113864 0.0511077 ]\n", " [0.04876113 0.05032456 0.05029362]\n", " [0.05078584 0.05234927 0.05231833]\n", " ...\n", " [0.06027371 0.0618372 0.06180626]\n", " [0.05860692 0.06017035 0.06013942]\n", " [0.06267798 0.06424141 0.06421047]]] \n", "\n" ] }, { "data": { "image/png": "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\n+hwyMMRYcxUAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "# Debugging the batches using conversion to Numpy arrays.\n", "batches = tfds.as_numpy(dataset_train_augmented_shuffled)\n", "for batch in batches:\n", " image_batch, label_batch = batch\n", " print('Label batch shape:', label_batch.shape, '\\n')\n", " print('Image batch shape:', image_batch.shape, '\\n')\n", " print('Label batch:', label_batch, '\\n')\n", " \n", " for batch_item_index in range(len(image_batch)):\n", " print('First batch image:', image_batch[batch_item_index], '\\n')\n", " plt.imshow(image_batch[batch_item_index])\n", " plt.show()\n", " # Break to shorten the output.\n", " break\n", " # Break to shorten the output.\n", " break" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "txKxuijGljQS" }, "source": [ "## Creating the model" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "D6a394HuhKpc" }, "source": [ "### Loading MobileNetV2 model" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "SZC_93SPje0S" }, "source": [ "We don't want to use the top classification layer of the pre-trained MobileNetV2 model as it contains 1000 classes when we need only 3 (`rock`, `paper` and `scissors`). We will specify that by setting a `include_top` parameter to `False`.\n", "\n", "You may read more about `MobileV2` application on [MobileV2 Keras Documentation](https://keras.io/applications/#mobilenetv2)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 71 }, "colab_type": "code", "executionInfo": { "elapsed": 54825, "status": "ok", "timestamp": 1584117486207, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "TIX8gLyVhOqy", "outputId": "95b433ae-f02d-4a65-8ce4-09eb170e101f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Downloading data from https://github.com/JonathanCMitchell/mobilenet_v2_keras/releases/download/v1.1/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_128_no_top.h5\n", "9412608/9406464 [==============================] - 1s 0us/step\n" ] } ], "source": [ "base_model = tf.keras.applications.MobileNetV2(\n", " input_shape=INPUT_IMG_SHAPE,\n", " include_top=False,\n", " weights='imagenet',\n", " pooling='avg'\n", ")" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "ClmMhxuTpBDS" }, "outputs": [], "source": [ "# Freezing the base model since we don't want to re-train it.\n", "# We're only interesting in its feature extraction.\n", "base_model.trainable = False" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "colab_type": "code", "executionInfo": { "elapsed": 54793, "status": "ok", "timestamp": 1584117486211, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "YD9gd5eGkfMZ", "outputId": "915b24ec-5772-4e6b-e819-7b4acdfacbc0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"mobilenetv2_1.00_128\"\n", "__________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", "input_1 (InputLayer) [(None, 128, 128, 3) 0 \n", "__________________________________________________________________________________________________\n", "Conv1_pad (ZeroPadding2D) (None, 129, 129, 3) 0 input_1[0][0] \n", "__________________________________________________________________________________________________\n", "Conv1 (Conv2D) (None, 64, 64, 32) 864 Conv1_pad[0][0] \n", "__________________________________________________________________________________________________\n", "bn_Conv1 (BatchNormalization) (None, 64, 64, 32) 128 Conv1[0][0] \n", "__________________________________________________________________________________________________\n", "Conv1_relu (ReLU) (None, 64, 64, 32) 0 bn_Conv1[0][0] \n", "__________________________________________________________________________________________________\n", "expanded_conv_depthwise (Depthw (None, 64, 64, 32) 288 Conv1_relu[0][0] \n", "__________________________________________________________________________________________________\n", "expanded_conv_depthwise_BN (Bat (None, 64, 64, 32) 128 expanded_conv_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "expanded_conv_depthwise_relu (R (None, 64, 64, 32) 0 expanded_conv_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "expanded_conv_project (Conv2D) (None, 64, 64, 16) 512 expanded_conv_depthwise_relu[0][0\n", "__________________________________________________________________________________________________\n", "expanded_conv_project_BN (Batch (None, 64, 64, 16) 64 expanded_conv_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_expand (Conv2D) (None, 64, 64, 96) 1536 expanded_conv_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_expand_BN (BatchNormali (None, 64, 64, 96) 384 block_1_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_expand_relu (ReLU) (None, 64, 64, 96) 0 block_1_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_pad (ZeroPadding2D) (None, 65, 65, 96) 0 block_1_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_depthwise (DepthwiseCon (None, 32, 32, 96) 864 block_1_pad[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_depthwise_BN (BatchNorm (None, 32, 32, 96) 384 block_1_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_depthwise_relu (ReLU) (None, 32, 32, 96) 0 block_1_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_project (Conv2D) (None, 32, 32, 24) 2304 block_1_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_1_project_BN (BatchNormal (None, 32, 32, 24) 96 block_1_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_expand (Conv2D) (None, 32, 32, 144) 3456 block_1_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_expand_BN (BatchNormali (None, 32, 32, 144) 576 block_2_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_expand_relu (ReLU) (None, 32, 32, 144) 0 block_2_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_depthwise (DepthwiseCon (None, 32, 32, 144) 1296 block_2_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_depthwise_BN (BatchNorm (None, 32, 32, 144) 576 block_2_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_depthwise_relu (ReLU) (None, 32, 32, 144) 0 block_2_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_project (Conv2D) (None, 32, 32, 24) 3456 block_2_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_project_BN (BatchNormal (None, 32, 32, 24) 96 block_2_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_2_add (Add) (None, 32, 32, 24) 0 block_1_project_BN[0][0] \n", " block_2_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_expand (Conv2D) (None, 32, 32, 144) 3456 block_2_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_expand_BN (BatchNormali (None, 32, 32, 144) 576 block_3_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_expand_relu (ReLU) (None, 32, 32, 144) 0 block_3_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_pad (ZeroPadding2D) (None, 33, 33, 144) 0 block_3_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_depthwise (DepthwiseCon (None, 16, 16, 144) 1296 block_3_pad[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_depthwise_BN (BatchNorm (None, 16, 16, 144) 576 block_3_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_depthwise_relu (ReLU) (None, 16, 16, 144) 0 block_3_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_project (Conv2D) (None, 16, 16, 32) 4608 block_3_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_3_project_BN (BatchNormal (None, 16, 16, 32) 128 block_3_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_expand (Conv2D) (None, 16, 16, 192) 6144 block_3_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_expand_BN (BatchNormali (None, 16, 16, 192) 768 block_4_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_expand_relu (ReLU) (None, 16, 16, 192) 0 block_4_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_depthwise (DepthwiseCon (None, 16, 16, 192) 1728 block_4_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_depthwise_BN (BatchNorm (None, 16, 16, 192) 768 block_4_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_depthwise_relu (ReLU) (None, 16, 16, 192) 0 block_4_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_project (Conv2D) (None, 16, 16, 32) 6144 block_4_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_project_BN (BatchNormal (None, 16, 16, 32) 128 block_4_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_4_add (Add) (None, 16, 16, 32) 0 block_3_project_BN[0][0] \n", " block_4_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_expand (Conv2D) (None, 16, 16, 192) 6144 block_4_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_expand_BN (BatchNormali (None, 16, 16, 192) 768 block_5_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_expand_relu (ReLU) (None, 16, 16, 192) 0 block_5_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_depthwise (DepthwiseCon (None, 16, 16, 192) 1728 block_5_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_depthwise_BN (BatchNorm (None, 16, 16, 192) 768 block_5_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_depthwise_relu (ReLU) (None, 16, 16, 192) 0 block_5_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_project (Conv2D) (None, 16, 16, 32) 6144 block_5_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_project_BN (BatchNormal (None, 16, 16, 32) 128 block_5_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_5_add (Add) (None, 16, 16, 32) 0 block_4_add[0][0] \n", " block_5_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_expand (Conv2D) (None, 16, 16, 192) 6144 block_5_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_expand_BN (BatchNormali (None, 16, 16, 192) 768 block_6_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_expand_relu (ReLU) (None, 16, 16, 192) 0 block_6_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_pad (ZeroPadding2D) (None, 17, 17, 192) 0 block_6_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_depthwise (DepthwiseCon (None, 8, 8, 192) 1728 block_6_pad[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_depthwise_BN (BatchNorm (None, 8, 8, 192) 768 block_6_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_depthwise_relu (ReLU) (None, 8, 8, 192) 0 block_6_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_project (Conv2D) (None, 8, 8, 64) 12288 block_6_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_6_project_BN (BatchNormal (None, 8, 8, 64) 256 block_6_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_expand (Conv2D) (None, 8, 8, 384) 24576 block_6_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_expand_BN (BatchNormali (None, 8, 8, 384) 1536 block_7_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_expand_relu (ReLU) (None, 8, 8, 384) 0 block_7_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_depthwise (DepthwiseCon (None, 8, 8, 384) 3456 block_7_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_depthwise_BN (BatchNorm (None, 8, 8, 384) 1536 block_7_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_depthwise_relu (ReLU) (None, 8, 8, 384) 0 block_7_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_project (Conv2D) (None, 8, 8, 64) 24576 block_7_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_project_BN (BatchNormal (None, 8, 8, 64) 256 block_7_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_7_add (Add) (None, 8, 8, 64) 0 block_6_project_BN[0][0] \n", " block_7_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_expand (Conv2D) (None, 8, 8, 384) 24576 block_7_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_expand_BN (BatchNormali (None, 8, 8, 384) 1536 block_8_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_expand_relu (ReLU) (None, 8, 8, 384) 0 block_8_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_depthwise (DepthwiseCon (None, 8, 8, 384) 3456 block_8_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_depthwise_BN (BatchNorm (None, 8, 8, 384) 1536 block_8_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_depthwise_relu (ReLU) (None, 8, 8, 384) 0 block_8_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_project (Conv2D) (None, 8, 8, 64) 24576 block_8_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_project_BN (BatchNormal (None, 8, 8, 64) 256 block_8_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_8_add (Add) (None, 8, 8, 64) 0 block_7_add[0][0] \n", " block_8_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_expand (Conv2D) (None, 8, 8, 384) 24576 block_8_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_expand_BN (BatchNormali (None, 8, 8, 384) 1536 block_9_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_expand_relu (ReLU) (None, 8, 8, 384) 0 block_9_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_depthwise (DepthwiseCon (None, 8, 8, 384) 3456 block_9_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_depthwise_BN (BatchNorm (None, 8, 8, 384) 1536 block_9_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_depthwise_relu (ReLU) (None, 8, 8, 384) 0 block_9_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_project (Conv2D) (None, 8, 8, 64) 24576 block_9_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_project_BN (BatchNormal (None, 8, 8, 64) 256 block_9_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_9_add (Add) (None, 8, 8, 64) 0 block_8_add[0][0] \n", " block_9_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_10_expand (Conv2D) (None, 8, 8, 384) 24576 block_9_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_10_expand_BN (BatchNormal (None, 8, 8, 384) 1536 block_10_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_10_expand_relu (ReLU) (None, 8, 8, 384) 0 block_10_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_10_depthwise (DepthwiseCo (None, 8, 8, 384) 3456 block_10_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_10_depthwise_BN (BatchNor (None, 8, 8, 384) 1536 block_10_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_10_depthwise_relu (ReLU) (None, 8, 8, 384) 0 block_10_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_10_project (Conv2D) (None, 8, 8, 96) 36864 block_10_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_10_project_BN (BatchNorma (None, 8, 8, 96) 384 block_10_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_expand (Conv2D) (None, 8, 8, 576) 55296 block_10_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_expand_BN (BatchNormal (None, 8, 8, 576) 2304 block_11_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_expand_relu (ReLU) (None, 8, 8, 576) 0 block_11_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_depthwise (DepthwiseCo (None, 8, 8, 576) 5184 block_11_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_depthwise_BN (BatchNor (None, 8, 8, 576) 2304 block_11_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_depthwise_relu (ReLU) (None, 8, 8, 576) 0 block_11_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_project (Conv2D) (None, 8, 8, 96) 55296 block_11_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_project_BN (BatchNorma (None, 8, 8, 96) 384 block_11_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_11_add (Add) (None, 8, 8, 96) 0 block_10_project_BN[0][0] \n", " block_11_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_expand (Conv2D) (None, 8, 8, 576) 55296 block_11_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_expand_BN (BatchNormal (None, 8, 8, 576) 2304 block_12_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_expand_relu (ReLU) (None, 8, 8, 576) 0 block_12_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_depthwise (DepthwiseCo (None, 8, 8, 576) 5184 block_12_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_depthwise_BN (BatchNor (None, 8, 8, 576) 2304 block_12_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_depthwise_relu (ReLU) (None, 8, 8, 576) 0 block_12_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_project (Conv2D) (None, 8, 8, 96) 55296 block_12_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_project_BN (BatchNorma (None, 8, 8, 96) 384 block_12_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_12_add (Add) (None, 8, 8, 96) 0 block_11_add[0][0] \n", " block_12_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_expand (Conv2D) (None, 8, 8, 576) 55296 block_12_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_expand_BN (BatchNormal (None, 8, 8, 576) 2304 block_13_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_expand_relu (ReLU) (None, 8, 8, 576) 0 block_13_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_pad (ZeroPadding2D) (None, 9, 9, 576) 0 block_13_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_depthwise (DepthwiseCo (None, 4, 4, 576) 5184 block_13_pad[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_depthwise_BN (BatchNor (None, 4, 4, 576) 2304 block_13_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_depthwise_relu (ReLU) (None, 4, 4, 576) 0 block_13_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_project (Conv2D) (None, 4, 4, 160) 92160 block_13_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_13_project_BN (BatchNorma (None, 4, 4, 160) 640 block_13_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_expand (Conv2D) (None, 4, 4, 960) 153600 block_13_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_expand_BN (BatchNormal (None, 4, 4, 960) 3840 block_14_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_expand_relu (ReLU) (None, 4, 4, 960) 0 block_14_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_depthwise (DepthwiseCo (None, 4, 4, 960) 8640 block_14_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_depthwise_BN (BatchNor (None, 4, 4, 960) 3840 block_14_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_depthwise_relu (ReLU) (None, 4, 4, 960) 0 block_14_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_project (Conv2D) (None, 4, 4, 160) 153600 block_14_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_project_BN (BatchNorma (None, 4, 4, 160) 640 block_14_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_14_add (Add) (None, 4, 4, 160) 0 block_13_project_BN[0][0] \n", " block_14_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_expand (Conv2D) (None, 4, 4, 960) 153600 block_14_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_expand_BN (BatchNormal (None, 4, 4, 960) 3840 block_15_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_expand_relu (ReLU) (None, 4, 4, 960) 0 block_15_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_depthwise (DepthwiseCo (None, 4, 4, 960) 8640 block_15_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_depthwise_BN (BatchNor (None, 4, 4, 960) 3840 block_15_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_depthwise_relu (ReLU) (None, 4, 4, 960) 0 block_15_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_project (Conv2D) (None, 4, 4, 160) 153600 block_15_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_project_BN (BatchNorma (None, 4, 4, 160) 640 block_15_project[0][0] \n", "__________________________________________________________________________________________________\n", "block_15_add (Add) (None, 4, 4, 160) 0 block_14_add[0][0] \n", " block_15_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_16_expand (Conv2D) (None, 4, 4, 960) 153600 block_15_add[0][0] \n", "__________________________________________________________________________________________________\n", "block_16_expand_BN (BatchNormal (None, 4, 4, 960) 3840 block_16_expand[0][0] \n", "__________________________________________________________________________________________________\n", "block_16_expand_relu (ReLU) (None, 4, 4, 960) 0 block_16_expand_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_16_depthwise (DepthwiseCo (None, 4, 4, 960) 8640 block_16_expand_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_16_depthwise_BN (BatchNor (None, 4, 4, 960) 3840 block_16_depthwise[0][0] \n", "__________________________________________________________________________________________________\n", "block_16_depthwise_relu (ReLU) (None, 4, 4, 960) 0 block_16_depthwise_BN[0][0] \n", "__________________________________________________________________________________________________\n", "block_16_project (Conv2D) (None, 4, 4, 320) 307200 block_16_depthwise_relu[0][0] \n", "__________________________________________________________________________________________________\n", "block_16_project_BN (BatchNorma (None, 4, 4, 320) 1280 block_16_project[0][0] \n", "__________________________________________________________________________________________________\n", "Conv_1 (Conv2D) (None, 4, 4, 1280) 409600 block_16_project_BN[0][0] \n", "__________________________________________________________________________________________________\n", "Conv_1_bn (BatchNormalization) (None, 4, 4, 1280) 5120 Conv_1[0][0] \n", "__________________________________________________________________________________________________\n", "out_relu (ReLU) (None, 4, 4, 1280) 0 Conv_1_bn[0][0] \n", "__________________________________________________________________________________________________\n", "global_average_pooling2d (Globa (None, 1280) 0 out_relu[0][0] \n", "==================================================================================================\n", "Total params: 2,257,984\n", "Trainable params: 0\n", "Non-trainable params: 2,257,984\n", "__________________________________________________________________________________________________\n" ] } ], "source": [ "base_model.summary()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000, "output_embedded_package_id": "1nLLowvymTgqh56ovmMfBHbvFP1bpJOPt" }, "colab_type": "code", "executionInfo": { "elapsed": 62537, "status": "ok", "timestamp": 1584117493986, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "dP1kgkb5poxs", "outputId": "cc405fb3-946c-4064-82a6-f6781cb2f665" }, "outputs": [ { "data": { "text/plain": [ "Output hidden; open in https://colab.research.google.com to view." ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tf.keras.utils.plot_model(\n", " base_model,\n", " show_shapes=True,\n", " show_layer_names=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Hz_hZSCULt8Z" }, "source": [ "### Adding a classification head" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "6g4ow2PHlxm2" }, "outputs": [], "source": [ "model = tf.keras.models.Sequential()\n", "\n", "model.add(base_model)\n", "\n", "# model.add(tf.keras.layers.GlobalAveragePooling2D())\n", "\n", "model.add(tf.keras.layers.Dropout(0.5))\n", "\n", "model.add(tf.keras.layers.Dense(\n", " units=NUM_CLASSES,\n", " activation=tf.keras.activations.softmax,\n", " kernel_regularizer=tf.keras.regularizers.l2(l=0.01)\n", "))" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 255 }, "colab_type": "code", "executionInfo": { "elapsed": 62482, "status": "ok", "timestamp": 1584117493989, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "SB5M9g2Emgq9", "outputId": "d1903880-4181-4fb5-f2fa-a81e7c86078b" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "mobilenetv2_1.00_128 (Model) (None, 1280) 2257984 \n", "_________________________________________________________________\n", "dropout (Dropout) (None, 1280) 0 \n", "_________________________________________________________________\n", "dense (Dense) (None, 3) 3843 \n", "=================================================================\n", "Total params: 2,261,827\n", "Trainable params: 3,843\n", "Non-trainable params: 2,257,984\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 422 }, "colab_type": "code", "executionInfo": { "elapsed": 62461, "status": "ok", "timestamp": 1584117493990, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "5igi_IZFn5NU", "outputId": "0534b713-39fb-40a2-a373-13e0c5a405b7" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk8AAAGVCAYAAADnihW6AAAABmJLR0QA/wD/AP+gvaeTAAAgAElE\nQVR4nOzde1hTV7o/8G80gUBIuFTACIJcvDFesGorIOWgY+tlqmJFae2Z6qj10v6A6lSqFq+tI2KB\nA2o7omN7ahVQGGxVSh+liJx6aY+ilk4tYK0oKiIi4WIJ5P394ckeYwISbgF8P8/DH6699lrv3tlJ\nXvdeWUtERATGGGOMMdYcB3qYOgLGGGOMsa6EkyfGGGOMMSNw8sQYY4wxZgROnhhjjDHGjCB+vODU\nqVOIiYkxRSyMMcYYY53KgQMH9Mr07jwVFxfj4MGDHRIQY4w9za5fv86fty1w8OBBXL9+3dRhsG6u\nqfen3p0nLUOZFmOMsbaTkpKC2bNn8+etkUQiEd555x3MmjXL1KGwbkz7/jSExzwxxhhjjBmBkyfG\nGGOMMSNw8sQYY4wxZgROnhhjjDHGjMDJE2OMMcaYETh5YoyxLu7o0aOwtrbGV199ZepQOqXFixdD\nJBIJf6+//rpenWPHjmHlypXQaDQICgqCi4sLpFIpnJycMG3aNFy8eLHF/Ws0GsTGxsLX19fg9g0b\nNsDLywsKhQLm5ubw9PTEihUrUFVVpVd33759GD16NORyOVxdXTFv3jzcunWrxbF15viioqIwaNAg\nWFhYQCaTYdCgQYiMjERlZaVQ58svv0RUVBQaGhp09k1PT9d5zXv16tWiGBrDyRNjjHVxRGTqEDo9\nOzs7ZGRk4PLly9i9e7fOtrVr1yI+Ph6rVq2CRqPByZMnsW/fPpSXlyM3Nxe1tbV44YUXUFJSYnS/\nBQUFeOGFF7Bs2TLU1NQYrJOVlYW3334bV69eRVlZGTZt2oS4uDgEBwfr1EtOTsacOXMQHByM69ev\n49ChQ8jJycGkSZNQX19vdGydPb6TJ09i4cKFuHbtGm7fvo2NGzciKioKM2fOFOpMnToVUqkU48eP\nR0VFhVA+bdo0XL9+HTk5OZg8ebLRfT8RPSY5OZkMFDPGGGtj3fHztqamhnx8fNq1DwCUnJzc7PqL\nFi0iJycng9v+9re/0YABA6i2tpaIiNRqNf3pT3/SqXP27FkCQB9++KFRcebl5dGMGTNo79695O3t\nTcOHDzdYb8qUKVRfX69TNmvWLAJA165dE8oCAwOpT58+pNFohLJt27YRAMrNzTUqtq4QX1BQkPC6\naAUHBxMAKikp0SkPDQ0lHx8fUqvVeu2EhYXRM888Y3T/Tbw/U/jOE2OMsTaze/dulJaWmjqMZiks\nLERkZCTWr18PqVQKABCLxXqPP93d3QEARUVFRrU/fPhwpKamYs6cOTA3N2+03uHDh9GzZ0+dMu1j\npkfvBhUXF0OpVEIkEgllffv2BQD89ttvRsXWFeJLS0sTXhctJycnANB7ZLhu3Trk5eUhLi7O6H5a\ngpMnxhjrwnJzc+Hi4gKRSIRt27YBAHbs2AGZTAZLS0scOnQIkyZNgkKhgLOzM/bv3y/sGx8fD6lU\nCgcHByxevBhKpRJSqRS+vr44c+aMUC80NBRmZmbo3bu3UPbWW29BJpNBJBKhrKwMABAeHo7ly5ej\nqKgIIpEInp6eAICvv/4aCoUCH374YUeckmaLj48HEWHq1KlN1qutrQUAKBSKjggLAHDjxg1YWFjA\nzc1NKHN3d9dLTLXjibQJXnePr6CgADY2NnB1ddUpt7W1RUBAAOLi4jrkMTYnT4wx1oWNHTsW3333\nnU7Z0qVL8c4776C2thZyuRzJyckoKiqCu7s7Fi5cCLVaDeBhUjR37lzU1NQgLCwMV69exblz51Bf\nX48JEyaguLgYwMMk4/GlULZv347169frlMXFxeHll1+Gh4cHiAiFhYUAIAzm1Wg07XIOWurIkSMY\nOHAgLC0tm6x39uxZAA/PdUeoqalBVlYWFi5cCDMzM6F81apVuHXrFhISEqBSqZCfn4+4uDi89NJL\nGDNmTIfEZor41Go1bty4gW3btuHYsWNISEjQ6VdrxIgRuHHjBi5cuNDivpqLkyfGGOvGfH19oVAo\nYG9vj5CQEFRXV+PatWs6dcRiMQYPHgxzc3N4eXlhx44dUKlU2LNnT5vEMGXKFFRWViIyMrJN2msL\n1dXV+PXXX+Hh4dFondu3byMpKQlhYWHw8fF54h2qtrJp0yYolUp88MEHOuUBAQGIiIhAaGgoFAoF\nhgwZApVKhV27dnVIXKaKr2/fvnB2dsa6deuwZcuWRteb69+/PwDg0qVLreqvOTh5Yoyxp4T2f+va\nO0+NGTVqFCwtLfHzzz93RFgmUVpaCiJq8q6Tj48PwsLCMH36dGRkZEAikbR7XGlpaUhJSUFmZibk\ncrnOttWrV2Pnzp04fvw4qqqqcOXKFfj6+sLHx0e4S9gd4ysuLkZpaSn27duHzz77DCNGjDA4rk77\nWt6+fbvFfTUXJ0+MMcb0mJub486dO6YOo908ePAAAJocKO3g4ICsrCwkJCTA2tq63WNKSkrC5s2b\nkZ2djX79+ulsu3nzJqKiovDmm29i3LhxkMlkcHNzQ2JiIkpKShAdHd1t45NIJLC3t8eLL76IpKQk\n5OfnY9OmTXr1LCwsAPz7tW1P4nbvgTHGWJeiVqtRUVEBZ2dnU4fSbrRftI9Prvgoe3t72NjYdEg8\nCQkJyMzMRFZWFqysrPS2FxQUoKGhAX369NEpVygUsLOzQ35+/lMRn6enJ3r27Gmwvbq6OgD/fm3b\nE995YowxpiM7OxtEpDPIVywWP/FxX1fi4OAAkUiE+/fvN1rnq6++En4a316ICBEREbh06RLS09MN\nJiYAhET25s2bOuUqlQrl5eXClADdJb67d+/itdde0yvXJmmG2tO+lo6Ojkb11RKcPDHG2FNOo9Hg\n3r17qK+vx8WLFxEeHg4XFxfMnTtXqOPp6Yny8nKkp6dDrVbjzp07BufusbOzQ0lJCa5evQqVSgW1\nWo2MjIxON1WBpaUl3N3dcf36dYPbCwsL4ejoaHBwckhICBwdHXHu3LlWx/HTTz9hy5YtSExMhEQi\n0VlSRCQSYevWrQAANzc3BAYGIjExETk5OaitrUVxcTEWLVoEAJg/f363ik8mk+Gbb75BVlYWKisr\noVarcf78ebzxxhuQyWRYtmyZ3j7a13Lo0KGtPu4n4eSJMca6sG3btmH06NEAgIiICEybNg07duxA\nbGwsAGDYsGG4cuUKEhMTsXz5cgDAxIkTUVBQILTx4MEDDB06FBYWFvD398eAAQPw7bff6owHWrp0\nKQIDA/Hqq69i4MCB2Lhxo/B45NEBwUuWLIGDgwO8vLwwefJklJeXd8h5aIkpU6YgPz9fmMfpUU3N\nFVRXV4fS0lIcOnSoyfZPnz6NsWPHok+fPjhz5gwuXLgApVIJPz8/5OTkPLGfR4lEIhw4cAAhISGY\nP38+bG1t4eXlhWvXriE1NRX+/v7dKj6pVAo/Pz8sWLAATk5OkMvlCA4ORr9+/XD69GkMGTJEb5/v\nv/8eTk5OGDZsWLNibhUjpiNnjDHWhjrD5+2iRYvIzs7OpDEYC220PEtBQQGJxWL6/PPPjeq/oaGB\n/P39affu3Ubt11GexvjKyspIKpXS1q1b9bbx8iyMMcbaXFODpruL2tpaZGZmoqCgQBhY7OnpiQ0b\nNmDDhg16y300pqGhAenp6VCpVAgJCWnPkFvkaY1v3bp18Pb2RmhoKICHd8xKSkqQm5srTNbaljh5\nYowx1u2Vl5dj4sSJGDBgAP7yl78I5StXrkRwcDBCQkKaHDyulZ2djdTUVGRkZDxxZnJTeBrji4mJ\nQV5eHo4ePSrMxXXo0CE4OTnB398fR44caZN+dBhxm8pkRo0aRT169Gh0xedHHTlyhBQKBX355ZdE\nRBQdHU329vYEgD7++OP2DrVNrV+/ngYPHkxyuZzMzMzIw8OD3n33XVKpVK1qt6GhgWJiYoxe+fzk\nyZPk6+tLFhYW1Lt3b1qxYgU9ePCgxfXaMmZjztUXX3xBo0aNIisrK3JxcaG5c+fSzZs3WxTX49db\nV3Tq1CkaNGgQiUQiAkAODg60ceNGU4el4+DBg+Tm5kYACAA5OjrSnDlzTB1Wq5n683blypVkZmZG\nAKhfv3504MABk8ViDBj52K45MjMzKSIiok3bZO0vPT2dNm3aRPX19W3edlOP7bpE8kRENH78+GYl\nT4cPH9b7MisoKOiSyVNAQABt376d7t69S5WVlZScnEwSiYQmTpzY4jZ/+eUX8vPzIwDNOp9aP/74\nI1lYWFBkZCRVVVXRd999R7169aJ58+a1qF5bx9zcc5WUlEQAKCoqiioqKuj8+fPk7u5O3t7epFar\njY7N0PXWVb300ksEgO7du2fqUBrl4eFB1tbWpg6jzXTWz9vOrj2SJ8Ye122SJ29v7xbta8rkqaam\nxug7PFpTpkzRy6ZnzZpFAOjatWtGt5eXl0czZsygvXv3kre3t1HJ0+zZs8nNzY00Go1QFh0dTSKR\niP71r38ZXa+tY27uuQoMDKQ+ffroxLdt2zYCQLm5uUbH15m05loj6lzJU2PHwskTI+LkiXWMbjNg\nvCPWFWpru3fvNrgGT3McPnwYPXv21Cnr1asXgIerWhtr+PDhSE1NxZw5c5pckuBx9fX1OHLkCAIC\nAiASiYTySZMmgYiEn5s2t157xNzcc1VcXAylUqkTn3ayNUNz1nQlrbnWOpvudCyMse6n1clTXFwc\nZDIZevTogZEjR8LR0RESiQQymQzPPvss/P390bdvX0ilUtjY2GDFihU6+xMRYmJihBW9bW1tMX36\ndIMLUhYWFmLQoEGQyWTCfCS5ubnC9tzcXLi4uEAkEmHbtm1Nxt3Q0IA1a9bAxcUFFhYWGDZsGJKT\nkwEAO3bsgEwmg6WlJQ4dOoRJkyZBoVDA2dkZ+/fvb3Y74eHhWL58OYqKiiASieDp6YnBgwdDJBIJ\n50v7xb5ixQpYW1tDKpXi008/bTTuGzduwMLCAm5ubk0eX1u6cuUKqqqq4OLiolOuXY384sWLRtXr\nKIbOlbu7u96X8q1bt4RtxjB0vTX32omPj4dUKoWDgwMWL14MpVIJqVQKX19fnDlzRqgXGhoKMzMz\n9O7dWyh76623IJPJIBKJUFZWBsDwtQYAX3/9dYsnJ+xsx2KskydPwsvLS3hfDR06FJmZmQCABQsW\nCJP8eXh44Pz58wCAefPmwdLSEtbW1vjyyy8BNP0e37JlCywtLSGXy1FaWorly5fDyckJly9fblHM\njLEuwojbVI1au3YtAaAzZ85QdXU1lZWV0cSJEwkAHTlyhO7cuUPV1dUUGhpKACgvL0/Yd82aNWRm\nZkaff/45VVRU0MWLF+nZZ5+lXr160a1bt4R648ePJ3d3d/r1119JrVbTjz/+SM8//zxJpVL65Zdf\nhHrFxcUEgBISEoQyQ4/t/vrXv5K5uTkdPHiQ7t27R6tWraIePXrQ999/T0REq1evJgB0/Phxun//\nPpWWlpK/vz/JZDKqq6trdjuvvPIKeXh4CPXr6+upX79+5OLioveY6Z133qHY2NhGz3N1dTXJ5XIK\nDQ1t9mvTmOeff77Zj+1OnDhBACg6Olpvm4WFBY0fP96oeh0Rc2PnKjs7myQSCcXHx1NlZSX9+OOP\nNHjwYHrppZdaFJOh6625186iRYtIJpPRTz/9RA8ePKD8/HwaPXo0yeVynUeNc+bMIUdHR51+o6Oj\nCQDduXNHKHv8WiN6OCZLLpfThg0bnngshh7bdaZjITLusd2BAwdo3bp1VF5eTnfv3qUxY8bozPXy\nyiuvUM+ePenGjRs6+7322ms6Y9ia+1kRFhZGCQkJNGPGjGY/oubHdi0DfmzHOkCHPbbz8vKCpaUl\nnnnmGbz66qsAABcXF/Tq1QuWlpZ4/fXXAUC4q1RbW4uYmBjMmDEDr7/+OqytrTF06FB88sknKCsr\nw86dO3Xal8vl6NevH8RiMf7whz8gMTERDx480Kv3JA8ePMCOHTsQFBSEV155BTY2Nnj//fchkUiw\nZ88enbq+vr5QKBSwt7dHSEgIqqurce3aNaPb0erZsyfCwsJw7do1pKWlCeU1NTVITU3V+Qnt4zZt\n2gSlUokPPvjAqONtrd9//x0A9B6LAQ8fpWpn521uvY7Q2LkKCAhAREQEQkNDoVAoMGTIEKhUKuza\ntavNY2jq2tESi8XCXVcvLy/s2LEDKpWq0evHWFOmTEFlZSUiIyNb1U5nOBZjzZw5E2vXroWtrS3s\n7OwwdepU3L17F3fu3AHwcCbshoYGnfgqKyvx/fffY/LkyQCMe49v3rwZb7/9NlJTUzFo0KCOO1DG\nWIdrtzFPZmZmAB6Og9HSjlnSLi6Zn5+PqqoqjBo1Smff0aNHw8zMTOeWvyFDhw6FtbW10Y+DLl++\njJqaGp3p3S0sLNC7d2+DjwsfPyZt/C1tZ8GCBbC2tkZcXJxQtnfvXkyfPh0KhcLgPmlpaUhJSUFm\nZibkcnnzDrSNSKVSALqvpVZdXZ2wRENz67W3ps7V6tWrsXPnThw/fhxVVVW4cuUKfH19dZaXaA+P\nXzuNGTVqFCwtLZu8fkytqx6L9vNHOyHkuHHjMGDAAPzjH/8QlqBISkpCSEiI8B+Alr7HjfX4emH8\n1/QfAMyePdvkcfBf9/4ztK6hlrjN3v0tUFFRAQAGV2m2sbGBSqV6YhsSicTolb6rq6sBAO+//z7e\nf/99nW1KpbLd27GyssKbb76J6OhonD17Fs899xw+/vhjHDx40GD9pKQkxMTEIDs7G3369Gl2fG1F\nO0alsrJSp7ympgYPHjwQjrW59dpTU+fq5s2biIqKwsqVKzFu3DgAgJubGxITE2Fra4vo6GjEx8e3\ne4xPYm5uLtwd6epMeSxHjhxBdHQ08vPzhYVFHyUSibB48WIsW7YMx48fxx//+Ef893//N7744guh\nTlt9VjyJdgwVa57Zs2cjPDwcPj4+pg6FdWOnTp3SucnxKJMmTzY2NgBgMEmqqKiAs7Nzk/vX19ej\nvLxcb4Dyk9jb2wMAYmNjER4ebtS+bdVOaGgo4uLiEBsbiyVLlqBv377CwOpHJSQkIDMzE1lZWQaT\nzI7g5uYGuVyu92s07ZT32kUYm1uvvTzpXBUUFKChoUEvqVIoFLCzs0N+fn67xtccarW6Wdd+V9DR\nx5KTk4P//d//xTvvvINr164hKCgIM2bMwD/+8Q/06dMHCQkJej9YmTt3LlatWoVdu3ahb9++UCgU\ncHV1Fba31WfFk8yaNavd2u6OZs+eDR8fHz5vrN11yuRpyJAhsLKywg8//KBTfubMGdTV1WHkyJFN\n7v/tt99Co9Hg2WefNapf7a//8vLyjI65rdpxdnbGrFmzkJycjJKSEqxdu1ZnOxHhvffew71795Ce\nng6x2HQvlVgsxuTJk5GTkwONRoMePR4+7c3IyIBIJMLUqVONqtfWmnuutF/iN2/e1ClXqVQoLy8X\npiwwpezsbBARxowZI5SJxWKj7652Bh19LP/7v/8LmUwGALh06RLUajWWLl0q/IpSJBLp7WNra4vZ\ns2cjKSkJcrkcCxcu1NneVp8VjLHuxaTzPEmlUixfvhxpaWnYu3cvKisrcenSJSxZsgRKpRKLFi3S\nqV9XV4f79++jvr4e586dQ2hoKFxdXTF37lyj+503bx7279+PHTt2oLKyEg0NDbh+/breF2tr27Gz\ns0NJSQmuXr0KlUql88WxfPly1NfX4969e8JjJK2ffvoJW7ZsQWJiIiQSid6z2K1btxp1zMZYs2YN\nrK2t8c033whlkZGRuH37NtauXYvq6mqcOnUK0dHRmDt3LgYOHGh0vbbU3HPl5uaGwMBAJCYmIicn\nB7W1tSguLhaus/nz57dLfE3RaDS4d+8e6uvrcfHiRYSHh8PFxUXnmvb09ER5eTnS09OhVqtx584d\ng3NSGbrWMjIyWjxVQWc7lsao1Wrcvn0b2dnZQvKkvRt97NgxPHjwAAUFBY2OoVyyZAl+//13HD58\nGC+//LLOtrb6rGCMdTNG/DTPoLi4OLK0tBTWRjp58iRt3ryZrK2thTWovvjiC0pKSiJHR0cCQLa2\ntrR//34iItJoNBQdHU39+/cniURCtra2FBQURJcvX9bpZ8+ePRQYGEgODg4kFovpmWeeoVdffZV+\n++03oU5CQgL17t2bAJClpSVNnTqVPvroI6FfmUxGM2bMICKi33//nSIiIsjFxYXEYjHZ29vTK6+8\nQvn5+bR9+3bhmPr3709FRUW0c+dOUigUBIBcXV2F6RGaaoeI6Ny5c+Tq6koWFhY0duxYnekXiB7O\neL1r1y6983rp0iVhHS9Df4amA3iSU6dOkZ+fHymVSqGd3r17k6+vL504cUKoFxkZSXK5nDIzM3X2\nP3HiBD333HNkbm5OSqWS3n33XYNr1jW3XlvFbMy5Kisro/DwcPL09CRzc3OysrIiPz8/+uc//2l0\nbIauN2OunUWLFpFEIiEnJycSi8WkUCho+vTpVFRUpNPP3bt3KTAwkKRSKbm5udH/+3//j959910C\nQJ6ensJUAIautaNHj5JcLqcPPvig0eM4ffo0/eEPf6AePXoI5/fDDz/sVMfy8ccfk4eHR5OvMwBK\nS0sT+oqIiCA7OzuysbGh4OBgYSZ5Dw8PvRn6R4wYQStXrjR4fpp6j0dFRZGFhQUBoL59+9Lnn3/e\nnEtHwFMVtAx4qgLWAZqaqkBE9H8/M/k/KSkpmD17Nh4rZoy1scWLF+PAgQO4e/euqUNpta5+LFOm\nTMG2bdvQkZPPAvx521IikQjJyck85om1qybenwe61PIsjHU32p/Ndwdd6VgefQx48eJFSKXSDk+c\nGGNdFydPXdjPP//crLkqQkJCTB2qoLPH3NnjY20jIiICBQUF+OWXXzBv3jxs3LjR1CGxdrR48WKd\n9692wuZHHTt2DCtXroRGo0FQUBBcXFwglUrh5OSEadOmtWp5KY1Gg9jYWPj6+hrcvmHDBnh5eUGh\nUMDc3Byenp5YsWIFqqqq9Oru27cPo0ePhlwuh6urK+bNmycsMdXd4ouKisKgQYNgYWEBmUyGQYMG\nITIyUmc6nC+//BJRUVF6/3lLT0/Xec21a522GSOe8THG2sjKlSvJzMxMGCt44MABU4fUYl3xWFav\nXk09evSgvn376izF0tH487ZlYOSYp0WLFpGdnR1lZGTQ5cuX9cZgrlmzhl5++WWqrKwktVpNzzzz\nDJ08eZKqq6vpypUrNGHCBLK2ttZbyqc5fvnlF/Lz8yMAjS4vFRAQQNu3b6e7d+9SZWUlJScnk0Qi\noYkTJ+rUS0pKIgAUFRVFFRUVdP78eXJ3dydvb29Sq9VGx9bZ45syZQpt3bqVSktLSaVSUUpKCkkk\nEpowYYJOvbi4OAoICNBZWkqj0dD169cpJyeHJk+erLM0U3M1NeaJkyfGGDORzvB5W1NTQz4+Pl2q\nj5YkT05OTga3/e1vf6MBAwZQbW0tERGp1Wr605/+pFPn7NmzBIA+/PBDo+LMy8ujGTNm0N69e8nb\n27vR5GTKlCl6a53OmjWLAOj8uCEwMJD69OlDGo1GKNP+ECI3N9eo2LpCfEFBQcLrohUcHEwAqKSk\nRKc8NDSUfHx8DCZpYWFhbZ488WM7xhh7iu3evRulpaVdvo+WKCwsRGRkJNavXy8sLyUWi/HVV1/p\n1NPOFVZUVGRU+8OHD0dqairmzJkDc3PzRusdPnxYb01Q7WOmmpoaoay4uBhKpVJnzjLt/HSGpvzo\n6vGlpaUJr4uWk5MTAOg9Mly3bh3y8vIandSyrXHyxBhjXQgRISYmRliE2dbWFtOnT9dZay80NBRm\nZmbCkkkA8NZbb0Emk0EkEqGsrAwAEB4ejuXLl6OoqAgikQienp6Ij4+HVCqFg4MDFi9eDKVSCalU\nCl9fX525slrTBwB8/fXXHTYHWWPi4+NBRE+cwFe7qHlja4+2hxs3bsDCwkLnhwzu7u56Sah2PJE2\nwevu8RUUFMDGxkZnJQDg4YS3AQEBiIuL65Bfr3LyxBhjXci6deuwcuVKrF69GqWlpcjJyUFxcTH8\n/f1x+/ZtAA+Tgsd/xr99+3asX79epywuLg4vv/wyPDw8QEQoLCxEaGgo5s6di5qaGoSFheHq1as4\nd+4c6uvrMWHCBGEB7db0Afz715kajabtTo6Rjhw5goEDB8LS0rLJemfPngUAjB07tiPCQk1NDbKy\nsrBw4UJhIW4AWLVqFW7duoWEhASoVCrk5+cjLi4OL730ks5M/t0tPrVajRs3bmDbtm04duwYEhIS\ndPrVGjFiBG7cuIELFy60uK/m4uSJMca6iNraWsTExGDGjBl4/fXXYW1tjaFDh+KTTz5BWVkZdu7c\n2WZ9icVi4e6Wl5cXduzYAZVKhT179rRJ+1OmTEFlZSUiIyPbpD1jVVdX49dffzW4pqjW7du3kZSU\nhLCwMPj4+LTbElOP27RpE5RKJT744AOd8oCAAERERCA0NBQKhQJDhgyBSqXCrl27OiQuU8XXt29f\nODs7Y926ddiyZQtmz55tsF7//v0BPFyeqb1x8sQYY11Efn4+qqqqMGrUKJ3y0aNHw8zMrNElaNrC\nqFGjYGlpqfN4sCsrLS0FETV518nHxwdhYWGYPn06MjIyIJFI2j2utLQ0pKSkIDMzE3K5XGfb6tWr\nsXPnThw/fhxVVVW4cuUKfH194ePjI9wR7I7xFRcXo7S0FPv27cNnn32GESNGGBxDp30ttXdg2xMn\nT4wx1kVUVFQAAKysrPS22djYQKVStWv/5ubmuHPnTrv20VEePHgAAE0OlHZwcEBWVhYSEhJgbW3d\n7jElJSVh8+bNyM7ORr9+/XS23bx5E1FRUXjzzTcxbtw4yGQyuLm5ITExESUlJYiOju628UkkEtjb\n2+PFF19EUlIS8vPzsWnTJr16FhYWAP792rYnw8vPM8YY63RsbGwAwGCSVFFRAWdn53brW61Wt3sf\nHUn7RdvUzPj29vbCOW9vCQkJyMzMRFZWlsHkuKCgAA0NDejTp49OuUKhgCQAU18AACAASURBVJ2d\nHfLz85+K+Dw9PdGzZ0+D7dXV1QH492vbnvjOE2OMdRFDhgyBlZUVfvjhB53yM2fOoK6uDiNHjhTK\nxGKxzjI0rZWdnQ0i0hn429Z9dCQHBweIRCLcv3+/0TpfffWV8NP49kJEiIiIwKVLl5Cenm4wMQEg\nJK03b97UKVepVCgvLxemBOgu8d29exevvfaaXrk2STPUnva1dHR0NKqvluDkiTHGugipVIrly5cj\nLS0Ne/fuRWVlJS5duoQlS5ZAqVRi0aJFQl1PT0+Ul5cjPT0darUad+7cMTjXjp2dHUpKSnD16lWo\nVCohGdJoNLh37x7q6+tx8eJFhIeHw8XFBXPnzm2TPjIyMkw6VYGlpSXc3d1x/fp1g9sLCwvh6Oho\ncHBySEgIHB0dce7cuVbH8dNPP2HLli1ITEyERCLRWwpq69atAAA3NzcEBgYiMTEROTk5qK2tRXFx\nsfCaz58/v1vFJ5PJ8M033yArKwuVlZVQq9U4f/483njjDchkMixbtkxvH+1rOXTo0FYf95Nw8sQY\nY13I2rVrsWnTJmzYsAG9evVCQEAA+vXrh+zsbMhkMqHe0qVLERgYiFdffRUDBw7Exo0bhccZjw7g\nXbJkCRwcHODl5YXJkyejvLwcwMNxI0OHDoWFhQX8/f0xYMAAfPvttzpjhFrbh6lNmTIF+fn5wjxO\nj2pqrqC6ujqUlpbi0KFDTbZ/+vRpjB07Fn369MGZM2dw4cIFKJVK+Pn5IScn54n9PEokEuHAgQMI\nCQnB/PnzYWtrCy8vL1y7dg2pqanw9/fvVvFJpVL4+flhwYIFcHJyglwuR3BwMPr164fTp09jyJAh\nevt8//33cHJywrBhw5oVc6sYMR05Y4yxNtRZP2+1a8F1Vmij5VkKCgpILBbT559/blT/DQ0N5O/v\nT7t37zZqv47yNMZXVlZGUqmUtm7dqreNl2dhjDHWIZoaSN0V1dbWIjMzEwUFBcLAYk9PT2zYsAEb\nNmzQW+6jMQ0NDUhPT4dKpUJISEh7htwiT2t869atg7e3N0JDQwE8vGNWUlKC3NxcYWLWtsTJE2OM\nsW6vvLwcEydOxIABA/CXv/xFKF+5ciWCg4MREhLS5OBxrezsbKSmpiIjI+OJM5ObwtMYX0xMDPLy\n8nD06FFhLq5Dhw7ByckJ/v7+OHLkSJv08ygRke4DzZSUFMyePbtD1oZhjLGnWWf8vF21ahU++ugj\n1NXVoV+/foiOjsbMmTNNHZYOkUiE5ORkveVhWkM7OHnz5s1t1iZrf4cOHcJPP/2EFStW6C1e3FpN\nvD8P8DxPjDHGBJs2bTI4AWF39+KLL+LFF180dRjMSNOmTcO0adM6vF9+bMcYY4wxZgROnhhjjDHG\njMDJE2OMMcaYETh5YowxxhgzQqMDxlNSUjoyDsYYe+qcOnUKAH/etoT23DHWXpq6xhqdqoAxxhhj\n7GlnaKoCveSJMcZMrTPOf8QYY//nAI95YowxxhgzAidPjDHGGGNG4OSJMcYYY8wInDwxxhhjjBmB\nkyfGGGOMMSNw8sQYY4wxZgROnhhjjDHGjMDJE2OMMcaYETh5YowxxhgzAidPjDHGGGNG4OSJMcYY\nY8wInDwxxhhjjBmBkyfGGGOMMSNw8sQYY4wxZgROnhhjjDHGjMDJE2OMMcaYETh5YowxxhgzAidP\njDHGGGNG4OSJMcYYY8wInDwxxhhjjBmBkyfGGGOMMSNw8sQYY4wxZgROnhhjjDHGjMDJE2OMMcaY\nETh5YowxxhgzAidPjDHGGGNG4OSJMcYYY8wInDwxxhhjjBmBkyfGGGOMMSNw8sQYY4wxZgROnhhj\njDHGjMDJE2OMMcaYETh5YowxxhgzgtjUATDGnm7Xr1/HG2+8gYaGBqHs3r17kMvl+I//+A+dugMH\nDsTf//73Do6QMcZ0cfLEGDMpZ2dn/PbbbygqKtLbduLECZ1/v/DCCx0VFmOMNYof2zHGTO7Pf/4z\nJBLJE+uFhIR0QDSMMdY0Tp4YYyY3Z84c1NfXN1nnD3/4A7y8vDooIsYYaxwnT4wxk/Pw8MCwYcMg\nEokMbpdIJHjjjTc6OCrGGDOMkyfGWKfw5z//GT179jS4rb6+HsHBwR0cEWOMGcbJE2OsU3j11Veh\n0Wj0ynv06IExY8agX79+HR8UY4wZwMkTY6xTUCqV8PPzQ48euh9LPXr0wJ///GcTRcUYY/o4eWKM\ndRr/+Z//qVdGRJgxY4YJomGMMcM4eWKMdRozZ87UGffUs2dP/PGPf4SDg4MJo2KMMV2cPDHGOg1b\nW1tMmDBBSKCICK+//rqJo2KMMV2cPDHGOpXXX39dGDgukUgwffp0E0fEGGO6OHlijHUqU6dOhbm5\nOQDg5ZdfhpWVlYkjYowxXZw8McY6FZlMJtxt4kd2jLHOSEREZOog2lpwcDAOHjxo6jAYY4yxp1py\ncjJmzZpl6jDa2gGxqSNoL2PGjME777xj6jAYYy3Q0NCA5ORkvPbaa23a7uzZsxEeHg4fH582bbc7\ni42NBQD+PGVGmz17tqlDaDfdNnlydnbujtkuY0+NoKAgSKXSNm1z9uzZ8PHx4c8GIxw4cAAA+Jwx\no3Xn5InHPDHGOqW2TpwYY6ytcPLEGGOMMWYETp4YY4wxxozAyRNjjDHGmBE4eWKMMcYYMwInT4wx\nZqSjR4/C2toaX331lalD6fSOHTuGlStXQqPRICgoCC4uLpBKpXBycsK0adNw8eLFFret0WgQGxsL\nX19fg9s3bNgALy8vKBQKmJubw9PTEytWrEBVVZVe3X379mH06NGQy+VwdXXFvHnzcOvWrRbH1pnj\ni4qKwqBBg2BhYQGZTIZBgwYhMjISlZWVQp0vv/wSUVFRaGhoaFEf3R0nT4wxZqRuOLdwu1i7di3i\n4+OxatUqaDQanDx5Evv27UN5eTlyc3NRW1uLF154ASUlJUa3XVBQgBdeeAHLli1DTU2NwTpZWVl4\n++23cfXqVZSVlWHTpk2Ii4tDcHCwTr3k5GTMmTMHwcHBuH79Og4dOoScnBxMmjQJ9fX1LTr2zhzf\nyZMnsXDhQly7dg23b9/Gxo0bERUVhZkzZwp1pk6dCqlUivHjx6OiosLoPro96oZmzpxJM2fONHUY\njLFOBgAlJyebOow2VVNTQz4+Pu3Wfks/T//2t7/RgAEDqLa2loiI1Go1/elPf9Kpc/bsWQJAH374\noVFt5+Xl0YwZM2jv3r3k7e1Nw4cPN1hvypQpVF9fr1M2a9YsAkDXrl0TygIDA6lPnz6k0WiEsm3b\nthEAys3NNSq2rhBfUFCQ8LpoBQcHEwAqKSnRKQ8NDSUfHx9Sq9VG99Md32//J4XvPDHGWBe2e/du\nlJaWmjoMHYWFhYiMjMT69euF+brEYrHeY053d3cAQFFRkVHtDx8+HKmpqZgzZ46wiLQhhw8fRs+e\nPXXKevXqBQA6d4OKi4uhVCohEomEsr59+wIAfvvtN6Ni6wrxpaWl6c2j5uTkBAB6jwzXrVuHvLw8\nxMXFGd1Pd8bJE2OMGSE3NxcuLi4QiUTYtm0bAGDHjh2QyWSwtLTEoUOHMGnSJCgUCjg7O2P//v3C\nvvHx8ZBKpXBwcMDixYuhVCohlUrh6+uLM2fOCPVCQ0NhZmaG3r17C2VvvfUWZDIZRCIRysrKAADh\n4eFYvnw5ioqKIBKJ4OnpCQD4+uuvoVAo8OGHH3bEKdETHx8PIsLUqVObrFdbWwsAUCgUHREWAODG\njRuwsLCAm5ubUObu7q6XgGrHE2kTvO4eX0FBAWxsbODq6qpTbmtri4CAAMTFxfHj6kdw8sQYY0YY\nO3YsvvvuO52ypUuX4p133kFtbS3kcjmSk5NRVFQEd3d3LFy4EGq1GsDDpGju3LmoqalBWFgYrl69\ninPnzqG+vh4TJkxAcXExgIfJx+PLoWzfvh3r16/XKYuLi8PLL78MDw8PEBEKCwsBQBjkq9Fo2uUc\nPMmRI0cwcOBAWFpaNlnv7NmzAB6e045QU1ODrKwsLFy4EGZmZkL5qlWrcOvWLSQkJEClUiE/Px9x\ncXF46aWXMGbMmA6JzRTxqdVq3LhxA9u2bcOxY8eQkJCg06/WiBEjcOPGDVy4cKHFfXU3nDwxxlgb\n8vX1hUKhgL29PUJCQlBdXY1r167p1BGLxRg8eDDMzc3h5eWFHTt2QKVSYc+ePW0Sw5QpU1BZWYnI\nyMg2ac8Y1dXV+PXXX+Hh4dFondu3byMpKQlhYWHw8fF54h2qtrJp0yYolUp88MEHOuUBAQGIiIhA\naGgoFAoFhgwZApVKhV27dnVIXKaKr2/fvnB2dsa6deuwZcuWRtei69+/PwDg0qVLreqvO+HkiTHG\n2on2f/HaO0+NGTVqFCwtLfHzzz93RFjtqrS0FETU5F0nHx8fhIWFYfr06cjIyIBEImn3uNLS0pCS\nkoLMzEzI5XKdbatXr8bOnTtx/PhxVFVV4cqVK/D19YWPj49wN7A7xldcXIzS0lLs27cPn332GUaM\nGGFw/Jz2tbx9+3aL++puOHlijLFOwNzcHHfu3DF1GK324MEDAGhyoLSDgwOysrKQkJAAa2vrdo8p\nKSkJmzdvRnZ2Nvr166ez7ebNm4iKisKbb76JcePGQSaTwc3NDYmJiSgpKUF0dHS3jU8ikcDe3h4v\nvvgikpKSkJ+fj02bNunVs7CwAPDv15YBYlMHwBhjTzu1Wo2Kigo4OzubOpRW037RNjW5or29PWxs\nbDoknoSEBGRmZiIrKwtWVlZ62wsKCtDQ0IA+ffrolCsUCtjZ2SE/P/+piM/T0xM9e/Y02F5dXR2A\nf7+2jO88McaYyWVnZ4OIdAb/isXiJz7u64wcHBwgEolw//79Rut89dVXwk/j2wsRISIiApcuXUJ6\nerrBxASAkLDevHlTp1ylUqG8vFyYEqC7xHf37l289tpreuXaJM1Qe9rX0tHR0ai+ujNOnhhjrINp\nNBrcu3cP9fX1uHjxIsLDw+Hi4oK5c+cKdTw9PVFeXo709HSo1WrcuXPH4Jw+dnZ2KCkpwdWrV6FS\nqaBWq5GRkWGyqQosLS3h7u6O69evG9xeWFgIR0dHg4OTQ0JC4OjoiHPnzrU6jp9++glbtmxBYmIi\nJBIJRCKRzt/WrVsBAG5ubggMDERiYiJycnJQW1uL4uJiLFq0CAAwf/78bhWfTCbDN998g6ysLFRW\nVkKtVuP8+fN44403IJPJsGzZMr19tK/l0KFDW33c3QUnT4wxZoRt27Zh9OjRAICIiAhMmzYNO3bs\nQGxsLABg2LBhuHLlChITE7F8+XIAwMSJE1FQUCC08eDBAwwdOhQWFhbw9/fHgAED8O233+qME1q6\ndCkCAwPx6quvYuDAgdi4caPw2OTRgcJLliyBg4MDvLy8MHnyZJSXl3fIeWjKlClTkJ+fL8zj9Kim\n5gqqq6tDaWkpDh061GT7p0+fxtixY9GnTx+cOXMGFy5cgFKphJ+fH3Jycp7Yz6NEIhEOHDiAkJAQ\nzJ8/H7a2tvDy8sK1a9eQmpoKf3//bhWfVCqFn58fFixYACcnJ8jlcgQHB6Nfv344ffo0hgwZorfP\n999/DycnJwwbNqxZMT8VTDW3eXvi5VkYY4agEywXsWjRIrKzszNpDMZoyedpQUEBicVi+vzzz43a\nr6Ghgfz9/Wn37t1G7ddRnsb4ysrKSCqV0tatW43etzO839oJL8/CGGMdrbuvVO/p6YkNGzZgw4YN\nest9NKahoQHp6elQqVQICQlp5wiN97TGt27dOnh7eyM0NLTN2uwOOHnqIKNHj0bPnj3h7e39xLpH\njx6FtbW1sA7U1q1bhUGYn3zySXuH2qY2bNgALy8vKBQKmJubw9PTEytWrGj2B2pjNBoNYmNj4evr\na9R+ubm58PPzg6WlJZRKJSIiIvD777+3uF5bxmzMudq3bx9Gjx4NuVwOV1dXzJs3T1iuwRipqalw\nd3cXxlk8aVLFmJgYiEQi9OjRA4MGDRIeQbTUggULIJfLIRKJkJeX16x9uvL74WmycuVKBAcHIyQk\npMnB41rZ2dlITU1FRkbGE2cmN4WnMb6YmBjk5eXh6NGjHTIXV5di6ntf7aGzPrYbP358o6trP+rw\n4cOkUCjoyy+/FMoKCgoIAH388cftGWKbCwgIoO3bt9Pdu3epsrKSkpOTSSKR0MSJE1vc5i+//EJ+\nfn4EoFnnU+vHH38kCwsLioyMpKqqKvruu++oV69eNG/evBbVa+uYm3uukpKSCABFRUVRRUUFnT9/\nntzd3cnb27tFK58TEXl4eBAA6t27N9XV1RmsU19fT66urgSAxo8f36J+DNm/fz8BoPPnzzd7n5a+\nH2DixwgrV64kMzMzAkD9+vWjAwcOmCyW5mrt52lmZiZFRES0YUSsI6Snp9OmTZuovr6+xW2Y+v3W\njlI4eepA48ePJ29v7xbta8rkqaamhnx8fFq075QpU/TefLNmzSIAdO3aNaPby8vLoxkzZtDevXvJ\n29vbqORp9uzZ5ObmRhqNRiiLjo4mkUhE//rXv4yu19YxN/dcBQYGUp8+fXTi27ZtGwGg3Nxco+Mj\nepg8jRw5kgBQSkqKwTrJycnk6+vLydNTprN+nrLOrxu/33jMU0frirc+d+/ebXDK/uY4fPgwevbs\nqVPWq1cvAA8XwTTW8OHDkZqaijlz5jQ5g/Hj6uvrceTIEQQEBEAkEgnlkyZNAhEJv05pbr32iLm5\n56q4uBhKpVInPu3cLIZ+yt5cS5cuBQB8/PHHBrfHxMQIvx5rS48eB2OMdQWcPOHhyuQymQw9evTA\nyJEj4ejoCIlEAplMhmeffRb+/v7o27cvpFIpbGxssGLFCp39iQgxMTHCQp+2traYPn26wXWqCgsL\nMWjQIMhkMuFnyrm5ucL23NxcuLi4QCQSYdu2bU3G3dDQgDVr1sDFxQUWFhYYNmwYkpOTAQA7duyA\nTCaDpaUlDh06hEmTJkGhUMDZ2Rn79+9vdjvh4eFYvnw5ioqKIBKJ4OnpicGDBwvjXkaOHCl8sa9Y\nsQLW1taQSqX49NNPG437xo0bsLCwgJubW5PH15auXLmCqqoquLi46JRrFy+9ePGiUfU6iqFz5e7u\nrpfMasc7ubu7C2Vff/21UXP9jBs3DoMHD8a3336Ly5cv62z7n//5H9TU1ODFF180uG9z3wNEhOjo\naAwcOBDm5uawtrbGu+++q9deU9ckY4yZnElvfLWTltxmXrt2LQGgM2fOUHV1NZWVldHEiRMJAB05\ncoTu3LlD1dXVFBoaSgAoLy9P2HfNmjVkZmZGn3/+OVVUVNDFixfp2WefpV69etGtW7eEeuPHjyd3\nd3f69ddfSa1W048//kjPP/88SaVS+uWXX4R6xcXFBIASEhKEMkOPKf7617+Subk5HTx4kO7du0er\nVq2iHj160Pfff09ERKtXryYAdPz4cbp//z6VlpaSv78/yWQynXEtT2rnlVdeIQ8PD6F+fX099evX\nj1xcXPQeM73zzjsUGxvb6Hmurq4muVxOoaGhzX5tGvP88883+7HdiRMnCABFR0frbbOwsBAeQzW3\nXkfE3Ni5ys7OJolEQvHx8VRZWUk//vgjDR48mF566SWdeocPHya5XE4bNmx4Yl8eHh7066+/0n/9\n138RAAoPD9fZHhQURHv27CGVSmXwsV1z3wOrV68mkUhEH330Ed27d49qampo+/bteo/tnnRN8mO7\njsOP7VhLdeP3G4950tImTyqVSij77LPPCABdunRJKDt79iwBoKSkJCJ6OB7IysqKQkJCdNrT1nv0\ni8vQgPGLFy8SAPrrX/8qlDUneaqtrSVLS0udfmtqasjc3JyWLl1KRP9Onmpra4U62i+qwsLCZrfz\nePJERBQbG6s3Pqa6uppcXFzo/v37Bs4wCTENGDCAKisrG63TXMYkIt988w0BoJiYGL1tCoWCfH19\njarXETE3da7ef/99AiD8OTs7U3FxcYvj0iZPFRUVJJPJyNbWlmpqaoiIqKioiJydnen33383mDw1\n9z1QU1NDlpaWNGHCBJ16j495as41yclTx+HkibVUN36/pfDCwE0wMzMD8HAcjJZ2zJJ2zan8/HxU\nVVVh1KhROvuOHj0aZmZmOHPmTJN9DB06FNbW1kY/Drp8+TJqamp0ZoO1sLBA7969DT4ufPyYtPG3\ntJ0FCxZg3bp1iIuLQ3BwMABg7969mD59OhQKhcF90tLSkJKSgm+++QZyubz5B9sGpFIpAN3XUquu\nrk6Yubm59dpbU+dq9erV2LVrF44fP47nn38epaWleO+99+Dj44PvvvuuVWtxWVtb47XXXkNiYiKS\nkpIwb948xMbGYunSpTAzMxMWCH1Uc98DhYWFqKmpwfjx45uMoaXXZHOdOnWq1W08TbRLc6SkpJg4\nEsY6D06eWqmiogIADC7qaGNjA5VK9cQ2JBKJ0QuAVldXAwDef/99vP/++zrblEplu7djZWWFN998\n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\nIxFDcGctzZlCOTk5Ro6EiEyJRCJBVlaW3p5JxrRmzRrk5OSgvr7e2KF0yVR/n5aXl2PixInIzMzE\n8uXLe3ydWq3G3LlzER0djRUrVvRjhP2vvr4erq6u2Lp1K+Li4owdjh5T/L71kRzOPBERGVl3C5+p\na15eXkhKSkJSUhKam5t7dE1nZyfy8vKgUCgQFRXVzxH2v82bN2PatGmIiYkxdiiPHSZPREQ0KMXH\nxyMiIgJRUVHdLh7XKCoqQm5uLgoKCh66M7mpS01NRUlJCY4fPz4ge1iRLiZPRERGkpCQgMzMTNy+\nfRvu7u44cuSIsUMadLZt24aYmBhs3779oXWDg4PxySef6JwROBjl5+ejra0NRUVFcHBwMHY4jyVu\nVUBEZCTJyclITk42dhiD3rx58zBv3jxjhzFgwsLCEBYWZuwwHmuceSIiIiIyAJMnIiIiIgMweSIi\nIiIyAJMnIiIiIgMM2QXjp0+f1m7uRkSksXv3bpPb8NGUnT59GgD4+5ToHkMyefLz8zN2CET0CG7c\nuIEffvgBISEhfdpueHh4n7b3OLj3cGIiQ4SHh2sPPR5qhuTxLEQ0uGVnZyMyMrLHZ4cREQ0gHs9C\nREREZAgmT0REREQGYPJEREREZAAmT0REREQGYPJEREREZAAmT0REREQGYPJEREREZAAmT0REREQG\nYPJEREREZAAmT0REREQGYPJEREREZAAmT0REREQGYPJEREREZAAmT0REREQGYPJEREREZAAmT0RE\nREQGYPJEREREZAAmT0REREQGYPJEREREZAAmT0REREQGYPJEREREZAAmT0REREQGYPJEREREZAAm\nT0REREQGYPJEREREZAAmT0REREQGYPJEREREZAAmT0REREQGYPJEREREZAAmT0REREQGYPJERERE\nZAAmT0REREQGMDN2AET0eFOpVGhubtYpa2lpAQA0NjbqlEskEtjb2w9YbEREXWHyRERG1dDQABcX\nF3R2dup9NnLkSJ3/DwoKQmFh4UCFRkTUJT62IyKjcnZ2xpw5czBsWPe/jiQSCZYuXTpAURERPRiT\nJyIyut/+9rcPrTN8+HAsWrRoAKIhIuoekyciMrrFixfDzOzBqwiGDx+OF154AaNGjRrAqIiIusbk\niYiMztbWFiEhIQ9MoIQQWL58+QBHRUTUNSZPRGQSli9f3uWicQCwsLDAiy++OMARERF1jckTEZmE\n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\n4WAeTVRAACAAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 38, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "tf.keras.utils.plot_model(\n", " model,\n", " show_shapes=True,\n", " show_layer_names=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "oJcmE__0Lt8r" }, "source": [ "## Compiling the model" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "DJ8jGFnTLt8t" }, "outputs": [], "source": [ "# adam_optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)\n", "rmsprop_optimizer = tf.keras.optimizers.RMSprop(learning_rate=0.001)\n", "\n", "model.compile(\n", " optimizer=rmsprop_optimizer,\n", " loss=tf.keras.losses.sparse_categorical_crossentropy,\n", " metrics=['accuracy']\n", ")" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "p76LZoDiLt9r" }, "source": [ "## Training the model" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "executionInfo": { "elapsed": 62421, "status": "ok", "timestamp": 1584117493991, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "yZJIp8qELt9s", "outputId": "5fda3fbd-e1f4-4147-8b5a-dd0f612a1f74" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "steps_per_epoch: 3\n", "validation_steps: 1\n" ] } ], "source": [ "steps_per_epoch = NUM_TRAIN_EXAMPLES // BATCH_SIZE\n", "validation_steps = NUM_TEST_EXAMPLES // BATCH_SIZE if NUM_TEST_EXAMPLES // BATCH_SIZE else 1\n", "\n", "print('steps_per_epoch:', steps_per_epoch)\n", "print('validation_steps:', validation_steps)" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "-D2etjoyPZTE" }, "outputs": [], "source": [ "!rm -rf tmp/checkpoints\n", "!rm -rf logs" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "vG95ZXoLLt92" }, "outputs": [], "source": [ "# Preparing callbacks.\n", "os.makedirs('logs/fit', exist_ok=True)\n", "tensorboard_log_dir = 'logs/fit/' + datetime.datetime.now().strftime('%Y%m%d-%H%M%S')\n", "tensorboard_callback = tf.keras.callbacks.TensorBoard(\n", " log_dir=tensorboard_log_dir,\n", " histogram_freq=1\n", ")\n", "\n", "os.makedirs('tmp/checkpoints', exist_ok=True)\n", "model_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(\n", " filepath='tmp/checkpoints/weights.{epoch:02d}-{val_loss:.2f}.hdf5'\n", ")\n", "\n", "early_stopping_callback = tf.keras.callbacks.EarlyStopping(\n", " patience=10,\n", " monitor='val_accuracy'\n", " # monitor='val_loss'\n", ")" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "Vn7Ku70dntKo" }, "outputs": [], "source": [ "initial_epochs = 20" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 714 }, "colab_type": "code", "executionInfo": { "elapsed": 243789, "status": "ok", "timestamp": 1584117761272, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "8ppHB7fNLt-a", "outputId": "d1c00bdf-fb19-413f-8d90-a0b2e7162808" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train for 3 steps, validate for 1 steps\n", "Epoch 1/20\n", "3/3 [==============================] - 27s 9s/step - loss: 1.7625 - accuracy: 0.3379 - val_loss: 1.4945 - val_accuracy: 0.2634\n", "Epoch 2/20\n", "3/3 [==============================] - 11s 4s/step - loss: 1.4305 - accuracy: 0.4419 - val_loss: 1.2347 - val_accuracy: 0.4113\n", "Epoch 3/20\n", "3/3 [==============================] - 10s 3s/step - loss: 1.2506 - accuracy: 0.4744 - val_loss: 1.0589 - val_accuracy: 0.4731\n", "Epoch 4/20\n", "3/3 [==============================] - 12s 4s/step - loss: 1.1228 - accuracy: 0.5273 - val_loss: 1.2867 - val_accuracy: 0.4758\n", "Epoch 5/20\n", "3/3 [==============================] - 9s 3s/step - loss: 1.0505 - accuracy: 0.5638 - val_loss: 1.0671 - val_accuracy: 0.5887\n", "Epoch 6/20\n", "3/3 [==============================] - 14s 5s/step - loss: 0.9376 - accuracy: 0.6331 - val_loss: 1.0062 - val_accuracy: 0.6344\n", "Epoch 7/20\n", "3/3 [==============================] - 8s 3s/step - loss: 0.8732 - accuracy: 0.6564 - val_loss: 0.8927 - val_accuracy: 0.6801\n", "Epoch 8/20\n", "3/3 [==============================] - 16s 5s/step - loss: 0.7730 - accuracy: 0.6767 - val_loss: 1.0860 - val_accuracy: 0.5941\n", "Epoch 9/20\n", "3/3 [==============================] - 8s 3s/step - loss: 0.7744 - accuracy: 0.6800 - val_loss: 0.9263 - val_accuracy: 0.6989\n", "Epoch 10/20\n", "3/3 [==============================] - 15s 5s/step - loss: 0.7215 - accuracy: 0.7047 - val_loss: 0.9354 - val_accuracy: 0.6962\n", "Epoch 11/20\n", "3/3 [==============================] - 12s 4s/step - loss: 0.6823 - accuracy: 0.7256 - val_loss: 0.7933 - val_accuracy: 0.7473\n", "Epoch 12/20\n", "3/3 [==============================] - 6s 2s/step - loss: 0.6154 - accuracy: 0.7523 - val_loss: 0.9282 - val_accuracy: 0.6855\n", "Epoch 13/20\n", "3/3 [==============================] - 14s 5s/step - loss: 0.5926 - accuracy: 0.7679 - val_loss: 0.8936 - val_accuracy: 0.7124\n", "Epoch 14/20\n", "3/3 [==============================] - 14s 5s/step - loss: 0.6092 - accuracy: 0.7884 - val_loss: 0.8567 - val_accuracy: 0.7258\n", "Epoch 15/20\n", "3/3 [==============================] - 12s 4s/step - loss: 0.5610 - accuracy: 0.7930 - val_loss: 0.7550 - val_accuracy: 0.7554\n", "Epoch 16/20\n", "3/3 [==============================] - 10s 3s/step - loss: 0.5669 - accuracy: 0.7895 - val_loss: 0.9543 - val_accuracy: 0.6935\n", "Epoch 17/20\n", "3/3 [==============================] - 13s 4s/step - loss: 0.5093 - accuracy: 0.8192 - val_loss: 0.8095 - val_accuracy: 0.7419\n", "Epoch 18/20\n", "3/3 [==============================] - 10s 3s/step - loss: 0.4988 - accuracy: 0.8273 - val_loss: 0.8657 - val_accuracy: 0.7312\n", "Epoch 19/20\n", "3/3 [==============================] - 12s 4s/step - loss: 0.4595 - accuracy: 0.8355 - val_loss: 0.7168 - val_accuracy: 0.7473\n", "Epoch 20/20\n", "3/3 [==============================] - 10s 3s/step - loss: 0.4737 - accuracy: 0.8424 - val_loss: 0.8539 - val_accuracy: 0.7339\n" ] } ], "source": [ "training_history = model.fit(\n", " x=dataset_train_augmented_shuffled.repeat(),\n", " validation_data=dataset_test_shuffled.repeat(),\n", " epochs=initial_epochs,\n", " steps_per_epoch=steps_per_epoch,\n", " validation_steps=validation_steps,\n", " callbacks=[\n", " # model_checkpoint_callback,\n", " # early_stopping_callback,\n", " tensorboard_callback\n", " ],\n", " verbose=1\n", ")" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "ZQUTnOMpP8id" }, "outputs": [], "source": [ "def render_training_history(training_history):\n", " loss = training_history.history['loss']\n", " val_loss = training_history.history['val_loss']\n", "\n", " accuracy = training_history.history['accuracy']\n", " val_accuracy = training_history.history['val_accuracy']\n", "\n", " plt.figure(figsize=(14, 4))\n", "\n", " plt.subplot(1, 2, 1)\n", " plt.title('Loss')\n", " plt.xlabel('Epoch')\n", " plt.ylabel('Loss')\n", " plt.plot(loss, label='Training set')\n", " plt.plot(val_loss, label='Test set', linestyle='--')\n", " plt.legend()\n", " plt.grid(linestyle='--', linewidth=1, alpha=0.5)\n", "\n", " plt.subplot(1, 2, 2)\n", " plt.title('Accuracy')\n", " plt.xlabel('Epoch')\n", " plt.ylabel('Accuracy')\n", " plt.plot(accuracy, label='Training set')\n", " plt.plot(val_accuracy, label='Test set', linestyle='--')\n", " plt.legend()\n", " plt.grid(linestyle='--', linewidth=1, alpha=0.5)\n", "\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "colab_type": "code", "executionInfo": { "elapsed": 1737, "status": "ok", "timestamp": 1584117824992, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "8E2f1cjvQT5S", "outputId": "6eafcbaf-3f88-44e0-bf03-4d816aa99bb2" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0AAAAEWCAYAAABPK/eBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydd3gU1d6A35PdJJseYFMwwQRCCUWK\noCCCShFRUCzYEQuK+qlYrvVerwXvtderWBHselUsXAWpdum9JEDABBJIQgJpJJtks+f7Y5KQwKZv\nO+a8z7NPsjNnZt6Zc3Znf3OakFKi0Wg0Go1Go9FoNO0BP28LaDQajUaj0Wg0Go2n0AGQRqPRaDQa\njUajaTfoAEij0Wg0Go1Go9G0G3QApNFoNBqNRqPRaNoNOgDSaDQajUaj0Wg07QYdAGk0Go1Go9Fo\nNJp2gw6ANBqNRqPRaDQaTbtBB0AajQsQQqQLIcZ620Oj0Wg0f32EED8JIQ4LIQK97aLRqIgOgDQa\njUaj0WgUQQiRCIwEJHCBB49r9tSxNBp3owMgjcaNCCFuEkKkCSEOCSHmCyFOqF4uhBAvCSFyhRBF\nQogtQoh+1evOE0JsF0IUCyGyhBD3evcsNBqNRuNDTAVWAu8B19YsFEIECSFeEEJkCCEKhRC/CSGC\nqteNEEL8IYQoEELsE0JcV738JyHEjXX2cZ0Q4rc676UQ4jYhxC5gV/WyV6r3USSEWCeEGFknvUkI\n8XchxO7qe9g6IUQXIcQsIcQLdU+i+p54tzsukEbTFDoA0mjchBBiNPAUcBnQGcgAPqtePQ44A+gJ\nRFSnya9e9y5ws5QyDOgHLPegtkaj0Wh8m6nAx9Wvc4QQMdXLnwcGA8OBjsD9gEMIkQAsBF4FooCB\nwMYWHO9CYCjQp/r9mup9dAQ+Ab4QQliq190DXAmcB4QDNwClwPvAlUIIPwAhhBUYW729RuNxdACk\n0biPq4E5Usr1Uspy4CHgtOrmC5VAGJAMCCllipTyQPV2lUAfIUS4lPKwlHK9F9w1Go1G42MIIUYA\nCcDnUsp1wG7gqurA4gbgTilllpSySkr5R/W95ypgqZTyUyllpZQyX0rZkgDoKSnlISllGYCU8qPq\nfdillC8AgUCv6rQ3Ag9LKXdIg03VaVcDhcCY6nRXAD9JKXPaeEk0mlahAyCNxn2cgFHrA4CUsgSj\nlidOSrkceA2YBeQKId4WQoRXJ70E4+lZhhDiZyHEaR721mg0Go1vci2wWEqZV/3+k+plVsCCERAd\nS5cGljeXfXXfCCHuFUKkVDezK8BoxWBtxrHeB6ZU/z8F+LANThpNm9ABkEbjPvZjPKkDQAgRAnQC\nsgCklP+RUg7GaFbQE7ivevkaKeUkIBr4Bvjcw94ajUaj8TGq+/NcBpwphMgWQmQDdwMDMJpZ24Ak\nJ5vua2A5wBEguM77WCdpZB2HkRhN6y4DOkgpIzFqdkQzjvURMEkIMQDojXF/02i8gg6ANBrX4S+E\nsNS8gE+B64UQA6uHKn0SWCWlTBdCnCKEGCqE8Me4Adkw2moHCCGuFkJESCkrgSLA4bUz0mg0Go2v\ncCFQhfHQbGD1qzfwK0a/oDnAi0KIE6oHIzit+t7zMTBWCHGZEMIshOgkhBhYvc+NwMVCiGAhRHdg\nWhMOYYAdOAiYhRCPYPT1qWE28IQQokf1YD/9hRCdAKSUmRj9hz4E5tU0qdNovIEOgDQa17EAKKvz\nOgv4JzAPOIDxVOyK6rThwDvAYYxmcvnAc9XrrgHShRBFwC0YfYk0Go1G0765FpgrpdwrpcyueWE0\np74aeBDYghFkHAKeAfyklHsxmlX/rXr5RoxaI4CXgAogB6OJ2sdNOCwCfgB2Yty7bNRvIvciRquF\nxRgP8N4Fguqsfx84Cd38TeNlhJSy6VQajUaj0Wg0Gk0bEEKcgdEULkHqH6AaL6JrgDQajUaj0Wg0\nbqW6yfedwGwd/Gi8jQ6ANBqNRqPRaDRuQwjRGyjAGKzhZS/raDS6CZxGo9FoNBqNRqNpP+gaII1G\no9FoNBqNRtNuMHtboKVYrVaZmJjY6u3tdjtmsxqnrYqrKp6gjqsqnqCOqyqeoIbrunXr8qSUUd72\n8EX0fcr3UMUT1HFVxRPUcVXFE9Rwbew+5TZzIcQcYCKQK6Xs52R9BMZIICdWezwvpZzb1H4TExNZ\nu3Ztq73KysoICgpqOqEPoIqrKp6gjqsqnqCOqyqeoIarECLD2w6+ir5P+R6qeII6rqp4gjquqniC\nGq6N3afc2QTuPWB8I+tvA7ZLKQdgzJfyghAiwI0+Go1Go9FoNBqNpp3jtgBISvkLxoRbDSYBwoQQ\nAgitTmt3l08NGRnqPLRUxVUVT1DHVRVPUMdVFU9Qy1XjelTKf1VcVfEEdVxV8QR1XFXxBLVcneHN\nxnuvAfOB/UAYcLmU0uFFH41Go9FoNBqNRvMXx5sB0DnARmA0kAQsEUL8KqUsOjahEGI6MB0gPj6e\n1NTU2nUJCQlA/UjUarVitVpJS0vDbjcqlSwWC4mJiZSUlNTbPikpCZvNRlZWVu2y2NhYIiMj66UL\nDQ0lPj6ezMxMSkpKapcnJydTUFBAdnZ27bK4uDgsFgu7d++uXRYZGUlsbCzp6enYbDYAzGYz3bt3\nJy8vj7y8vOPOKS8vr9ahsXPKzs6moKDAa+dUUFBQu9+mzqm5+eSuc6p7TV2VT+44p7qe3ih7LTmn\nuq7uLHs1x5dS4ufnh8lkqn1fg7+/P1VVVTgcR5+l1HTSLC8vZ/PmzQC121dWVtamE0JgNpudbi+l\npKqqqnaZyWTCz8/P6fbOnBwOx3HbCyFqr2ddJ7vdjt1ur3Vt7Jycbe/qcwoNDcVkMlFaWlq7PDk5\nGU3LqKysJDMzs/Yz2FTalJQUD1i1HRVcLRYLesoPjUZTF7fOAySESAS+a2AQhO+Bp6WUv1a/Xw48\nKKVc3dg+hwwZItvSuTQvLw+r1drq7T2JKq6qeII6rqp4gudc//zzT8LCwujUqRNGy9mWUVlZib+/\nvxvMXI+vuEopyc/Pp7i4mK5du9ZbJ4RYJ6Uc4iU1n8bZfaol5ddX8r85+LprTRnOz8+nV69e3tZp\nFqp8/6viCeq4quIJarg2dp/y5jxAe4ExAEKIGKAXsMfdB/X1zKqLKq6qeII6rqp4gudcbTZbq4Mf\nwKd/pB2Lr7gKIejUqVOzai00jdOS8usr+d8cfN21pgzXrQH1dVT5/lfFE9RxVcUT1HJ1htsCICHE\np8AKoJcQIlMIMU0IcYsQ4pbqJE8Aw4UQW4BlwANSyryG9ucq0tLS3H0Il6GKqyqeoI6rKp7gWdfW\nBj+AUj/ifcm1LddcU5/mXktfyv+mUMFVCFGvaaevo8r3vyqeoI6rKp6glqsz3NYHSEp5ZRPr9wPj\n3HV8Z2zJLOS9Fdk81y0JPz/fv6nXbd/vy6jiCeq4quIJ6riq1AdAJVeN61Ep/1VyVQVVvlNV8QR1\nXFXxBPe4Vjkk+wvKSM8/QkZ+KTlFNv42zj1NV317ClcXsyOnmHnbCrlufxEnxUd4W0ej0ShEfn4+\nY8aMASA7OxuTyURUlDHB9OrVqwkIaHoas+uvv54HH3yw0b4Is2bNIjg4mOuvv9414s1k+fLlBAcH\nM2zYMI8eV+MZPFl+IyMjufrqq10j3kx0+dVo1KDC7iDzcCkZ+aW1gU5G9d99h0uprDr6UMXi78et\nZyURHOD6cKVdBUCjekUhgKUpOUoEQBaLxdsKzUIVT1DHVRVPUMfVz69tLX47derExo0bAXjssccI\nDQ3l3nvvrZdGSlk7Sp0z5s6d2+RxbrvtNsrLy9vk2hqWL1+O1WrVPyB9gLaWVWe4q/wem/a2225z\nkXHLaKr8qtSUU5XvVFU8QR1XVTyhcddye5UR4OQdqQ109h4y/mYdLsNRp+I4JMBEojWE5M5hnNMv\nlsROwSR0CiGxUwjRYYFua7HVrgKgTqGBnJzQgWWpOdx9dk9v6zRJYmKitxWahSqeoI6rKp6gjmtg\nYKBb9puWlsYFF1zAoEGD2LBhA0uWLOHxxx9n/fr1lJWVcfnll/PII48AMGLECF577TX69euH1Wrl\nlltuYeHChQQHB/Ptt98SHR3Nww8/jNVq5a677mLEiBGMGDGC5cuXU1hYyNy5cxk+fDhHjhxh6tSp\npKSk0KdPH9LT05k9ezYDBw6s53bffffx/fffYzabOffcc3nmmWfIycnh1ltvZe/evfj5+fGf//yH\nqKgoZs+ejclk4r333uP1119n+PDhbrlemqZxV1l1RnspvzVDx6uAKt+pqniCOq6qeILhWlZRxe6D\nJezKLSYtt4RdOSWk5ZaQnn+kXpATEeRPYqdgBnXpwEUD44wAx2oEOp1CArzygEKdbwQXMTQ+mNd/\nzyK70EZshG9H2tnZ2cTGxnpbo0lU8QR1XFXxBO+4Pv6/bWzff9yUYY0ipWz0S7bPCeE8en7fVvmk\npqbywQcfMGSIMdrm008/TceOHbHb7YwaNYrJkyfTp0+fetsUFhZy5pln8vTTT3PPPfcwZ84cHnzw\nQYB68/NIKVm9ejXz589n5syZ/PDDD7z66qvExsYyb948Nm3axMknn3ycU05ODgsWLGDbtm0IIWrn\noJoxYwb3338/w4YNIz09nYkTJ7J161ZuvPHG2h+uGvfSVPltqqw6w1vl94knnuCBBx6oV36PPRdf\nKL91P1O+jirf/6p4gjquvupZUm6vDnCqA53cElL3F3CguIKaboBmP0GiNYResWFM6N+Z7tGhJHYK\nIaFTMJHBTTex9TTtLgDqbzVuKstTc7lq6IletmmcgoICn/wgHIsqnqCOqyqeoI5ra35UNpekpKTa\nH48An376Ke+++y52u539+/ezffv2435ABgUFce655wIwePBgfv3119p1dYfsvfjii2vTpKenA/Db\nb7/xwAMPADBgwAD69j3+h2/Hjh3x8/PjpptuYsKECUycOBGApUuXsmPHjtp0hw8fpqysrC2nr3Ex\n7iyrzmhL+S0rKzuu/NbFV8qvSsNgq/KdqoonqOPqbc/C0kp25Razq7o2p6Zm50Dh0dEeA0x+dIsK\noUfHAC4/NZEeMaH0iA4loVMIAWZvzq7TMtpdAJQQGUB8hyCWpeT4fACk0Wic05on3WVlZQQFBbnB\nBkJCQmr/37VrF6+88gqrV68mMjKSKVOmOB0quG6nc5PJ1OCIOjXNoRpL4wx/f3/Wrl3LkiVL+OKL\nL3jjjTdYvHhx7RP55nR617iHpsqvO8uqM3T51WjaF/kl5UaQk1tCWk5x7f8Hi4/2P7X4+9E9OpRh\n3TrRPdoIcnrEhNGlQxBmkx+pqakkJ/fw4lm0jXYXAAkhGNs7hk9X76WsooqgAJO3lTQazV+IoqIi\nwsLCCA8P58CBAyxatIjx48e79Binn346n3/+OSNHjmTLli1s3779uDTFxcXYbDYmTpzI8OHDa0fu\nGjt2LLNmzeLuu+8GYOPGjQwcOJCwsDCKi4td6qlRD11+NZq/BlJKDhZXBzp1gpy03BIOHamoTRca\naKZ7dChn9Yyqrs0Jo3t0KHGRQUpMGdNa2l0AlJSUxGi/At77I50/ducxpneMt5UaJCkpydsKzUIV\nT1DHVRVPUMfVUx3LTz75ZPr06UNycjIJCQmcfvrpLd5HUx2277jjDqZOnUqfPn1qXxER9Ue2LCws\n5OKLL6a8vByHw8GLL74IGMMU33rrrcydO7e2j8esWbOYNGkSl156KV999RWzZs3SgyB4EU8OgnAs\nLS2/rXH1RvlVaRAEVb5TVfEEdVzb6rl+72E+X7OvNugpsh2tdQ23mOkZE8Y5fWPoHh1WXaMTSmy4\npVVNblW5pg0hVJvEbMiQIXLt2rWt3r64uJiAoGBOnrmECwbG8dTFJ7nQzrUUFxcTFhbmbY0mUcUT\n1HFVxRM855qSkkLv3r1bvX1VVRUmkxo1vk252u127HY7FouFXbt2MW7cOHbt2uW2H3nOrr0QYp2U\nckgDm7RrnN2nWlJ+/0pl1RmeLr8A27Ztc9rXyBdR5ftfFU9Qx7W1nnkl5TyzMJUv1mUSZjHTp3N4\nbW1Oj+hQuseEEhUa6NK+hSpc08buU+o8EnERWVlZJCcnc0bPKJan5iBlP5+dH6DG1ddRxRPUcVXF\nE9Rxraio8Gi/irbQlGtJSQljxozBbrcjpeStt95S6gm3pnH+SmXVGd4ovyqNAqfKd6oqnqCOa0s9\n7VUOPlyZwYtLdmKrrOLWs5K4fVR3QgLdfz9Q5Zo2RLu9Y47pHcPCrdlszSpSYlJUjUajqSEyMpJ1\n69Z5W0OjaRW6/Go0bWfVnnwenb+N1OxiRvaw8tgFfUmKCvW2ljK02wDorF5RCAHLUnN0AKTRaDQa\njUaj8Xlyimw8tSCFbzbuJy4yiDenDOacvjE+25rJV1FnwG4XUTO+ujU0kEFdIlmWkutlo4ZRYcx6\nUMcT1HFVxRPUcfX39/e2QrNRyVV1hBDjhRA7hBBpQojjZvIUQpwohPhRCLFBCLFZCHGeu51Uyn9V\nXFXpUwXqfKeq4gnquDbmWVnl4O1fdjP6+Z9YsDWbGWN6sPSeMxnfL9YrwY8q17Qh2l0NUGRkZO3/\nY3rH8NyiHeQU2YgJt3jRyjl1XX0ZVTxBHVdVPEEdV5X6yKjkqjJCCBMwCzgbyATWCCHmSynrjsv8\nMPC5lPINIUQfYAGQ6E4vlfJfFVc/P3We96rynaqKJ6jj2pDn72l5PDp/G2m5JYztHc0/J/YhoVOI\n07SeQpVr2hDqfCO4iNTU1Nr/x1YPgb081Tdrgeq6+jKqeII6rqp4gjquzZkt3ldQyVVxTgXSpJR7\npJQVwGfApGPSSCC8+v8IYL+7pVTKf1VcKysrva3QbFT5TlXFE9RxPdZzf0EZt328nqtnr6KyysGc\n64Yw+9pTvB78gDrXtCHUeHTjJnrGGBM9LUvJ4cpTT/S2jkaj8WHy8/MZM2YMANnZ2ZhMJqKiogBa\nNDP9nDlzOO+889rcfGD9+vXk5ua6fJLKdkYcsK/O+0xg6DFpHgMWCyHuAEKAsc52JISYDkwHiI+P\nr/fjICEhASllvWDBbDbj7++PzWajZjoKPz8/AgMDcTgc9dIGBgYipaSi4ujkhf7+/pjN5nrpTCYT\nAQEBVFRU1Bv1LCgoiJycHM4++2wAcnJyMJvNREVF4XA4+PXXXwkICKh1qpl7p/q8sFgsVFZWYrfb\nef/99znnnHNISEgAjCGtaxwaO6ea7WvYtm0bOTk5jB49utXnZLfb6wU2AQEBCCEoLz86m32Nk8Ph\nqM0Ts9lM9+7dycvLIy8vr14+AWRkZNQus1qtWK1W0tLSav0tFguJiYlkZ2dTUFBQmzYpKQmbzUZW\nVlbtstjYWCIjI+uVh9DQUOLj48nMzKSkpKR2eXJyMgUFBeTl5dWmj4uLw2KxsHv37tp0kZGRxMbG\nkp6ejs1m89o51fVs6pyys7Nrl3njnOq6uiqf3HFONZ4VVZIf/qxg7qoDOBwOpg7qyOS+EYRbjM+G\nu8peS86pxtWXP0+N0e7mAUpNTa13UR79div/XbuPjY+Mw+LvW22Ej3X1VVTxBHVcVfEEz7m2dR6g\nsrIylw0t/NhjjxEaGsq9997b4m1HjBjBa6+9xsCBAxtM0xzX2bNns3XrVl5++eUWO7SUv+o8QEKI\nycB4KeWN1e+vAYZKKW+vk+YejHvlC0KI04B3gX5SSkdD+23rPECuLKvOcGX5ba2rJ8svwObNm+nf\nv79HjtVWVPn+V8UTXOdqr3Jw6EgFucXlHCwp52Dx0deRcjvhQf5EBvkTGexPRHBA7f+RQQFEBPsT\nFmjGz6/h/jqpqakcEB15fP420vNLGd83locn9ia+Q3Cb3V2NCvmv5wGqQ2ho/SECx/SO4f0VGfye\nlseY6iZxvsKxrr6KKp6gjqsqnqCOqzs7Qb///vvMmjWLiooKhg8fzmuvvYbD4eD6669n48aNSCmZ\nPn06MTExbNy4kcsvv5ygoKDjao5eeukl3nnnHUwmEwMGDOCjjz6ipKSE22+/ne3bt1NZWcnMmTMZ\nO3YsM2fOpKysjJ9++omHH36YyZMnu+38/sJkAV3qvI+vXlaXacB4ACnlCiGEBbACbms77ekO+20p\nv3Vda8qv2Wymf//+PlV+VRohS5XvVFU8oWnXwtJKDpbYjMCm5nVMgJNXUk7+kQqc1RuEBZoJCTRT\nbKvkSEXDc075CYgI8icyOKD6r7/xN8gImNbvOchvf+6mW1QIH9xwKmf0jGrrqbsNlfLfGe0uAIqP\nj6/3fmi3joQEmFiWmutzAdCxrr6KKp6gjqsqnuBF17kTjl/W90I49SaoKIWPL623KgBg4FUw6Go4\nkg+fT62/7fXft0pj69atfP311/zxxx+YzWamT5/OZ599RlJSEnl5eWzZsgWAgoICIiMjefXVVxus\nAXr22WfJyMggICCgtinAzJkzGT9+PO+99x6HDx9m6NChbN68mUceecSjT9D/oqwBegghumIEPlcA\n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\nm42srKzaZbGxsURGRtY7TmhoKPHx8WRmZtabpT05OZmCgoJ6nZbj4uKwWCzs3r27dllkZCSxsbGk\np6djs9kAMJvNdO/enby8PPLy8o47p3Xr1mG1Wps8p+zs7HqjRrXmnMoPpHDij7fhV1mC6ZqvKIjs\nR+qGrdz9bSYJkf7cMTKeyspKp+e0bt06IiMjm3VOzc2nlpzTgb7T6bz6X+xf9AqOfpOJ7z6owXza\nunVr7TV1VT6545xWrVpV6+mNsteSc0pLS6t11Z8n15xTZmYmVqvVK2WvuefUKFJKt72ARGBrM9J1\nALKas8/BgwfLtpCSktKm7eux9Ssp3x4lZUWZS3bncDjkv7/fLhMe+E4+uWC73L59u5S/vSzlo+FS\n7lvT/B3ZK6U8vNclTs3BpdfUzajiqoqnlOq4quIppRquwFrpxvtHS1/A40BCA+t6N7B8MjC7zvtr\ngNeOSfMd8DXgD3TFCJgiG3PxqfuUm/Goa+lhKT+4SMr9G6WUxj3zujmrZI9/LJApBwob3dTr17Sq\nSsoX+hj386LsRpN63bWZqOIppTquqnhKqYZrY/cpX+kDNA1Y6G2JFmOJMNr0/vKcS3YnhOChc5OZ\nMuxE3vp5D19s+H/2zjwuqqp/wM9hk1UQAZFFQVBx35fM3Sxt0fbMyjLN15a3fu3L21vv29u+L2bZ\norZpi1lZqaXmkuZuai5ogICgqKiIIDvn98dFBBxggLkzc+A8n898dOaee+e559zhznfOOd9zGNa9\nbWSSiajDeoPzJ8D8G41MMxqNRtM0WAKcOPtECNFcCDEAQEq5t5p90oHICs8jyl6rSBqwSEpZJKU8\nAOzHmGuksRcHN0NRHngFwC0Ly0dgfLo+hZX7jvHE2DjiQm0zJN00XFzgxnnQ6QojcZFGo3EoDlge\nuTJCiBEYAdDgGsrYbGiBlLLS/g3rYgsjrvsE5Lo3SfbpRUFALNDwrtDHL44hJ68QsWs2uGeSEjUB\nn8xMq7sNYztfhduiu0hf8T6nI0fW8Zzq3hVaUFBQflxn7grNysoiJyenvLwzDy2o6OnsQwsqujrz\n0IKKns4+tOCsqzN/npyQ94DeFZ7nWHitKpuB9kKIaIzAZwIwsUqZ74EbgTlCiCCMIXFJtpK2xNmh\nWipgumvaFpgzFvpPgzHPl78cn5HNc4v3MqJjMLcOiqr1ME5Rp617GPOWasEpXK1AFU9Qx1UVT1DL\n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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "render_training_history(training_history)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "nvGrQg0hueKT" }, "source": [ "## Model fine tuning\n", "\n", "We may try to unfreeze some of the top layers of the `base_model` and to train it a little bit more so to adjust top layers to our Rock-Paper-Scissors dataset. " ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 1056, "status": "ok", "timestamp": 1584117865339, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "tYMtu16DunH0", "outputId": "d9d1de67-d196-42f7-d27e-e93eef5f8a5d" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of layers in the base model: 156\n" ] } ], "source": [ "# Un-freeze the top layers of the model\n", "base_model.trainable = True\n", "\n", "print(\"Number of layers in the base model: \", len(base_model.layers))" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 255 }, "colab_type": "code", "executionInfo": { "elapsed": 1069, "status": "ok", "timestamp": 1584117878286, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "l-H0FCp2u59I", "outputId": "4c6b32a9-8342-4e5f-b13e-21069a89270c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "mobilenetv2_1.00_128 (Model) (None, 1280) 2257984 \n", "_________________________________________________________________\n", "dropout (Dropout) (None, 1280) 0 \n", "_________________________________________________________________\n", "dense (Dense) (None, 3) 3843 \n", "=================================================================\n", "Total params: 2,261,827\n", "Trainable params: 723,843\n", "Non-trainable params: 1,537,984\n", "_________________________________________________________________\n" ] } ], "source": [ "# Fine tune from this layer onwards.\n", "fine_tune_at = 149\n", "\n", "# Freeze all the layers before the `fine_tune_at` layer\n", "for layer in base_model.layers[:fine_tune_at]:\n", " layer.trainable = False\n", " \n", "# Compile the model using a much-lower training rate.\n", "adam_optimizer = tf.keras.optimizers.Adam(learning_rate=0.0001)\n", "rmsprop_optimizer = tf.keras.optimizers.RMSprop(learning_rate=0.0001)\n", "model.compile(\n", " optimizer = rmsprop_optimizer,\n", " loss=tf.keras.losses.sparse_categorical_crossentropy,\n", " metrics=['accuracy']\n", ")\n", "\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "dAcHoMoYnpqV" }, "outputs": [], "source": [ "# The number of additional epochs during which we're going to fine tune the model.\n", "fine_tuning_epochs = 10" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 394 }, "colab_type": "code", "executionInfo": { "elapsed": 125031, "status": "ok", "timestamp": 1584118013975, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "DoFXWeAeoQjO", "outputId": "fe5489ca-8c19-4437-eaff-fbdb9085d962" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train for 3 steps, validate for 1 steps\n", "Epoch 21/30\n", "3/3 [==============================] - 28s 9s/step - loss: 0.3986 - accuracy: 0.8671 - val_loss: 0.9486 - val_accuracy: 0.7419\n", "Epoch 22/30\n", "3/3 [==============================] - 4s 1s/step - loss: 0.2943 - accuracy: 0.9151 - val_loss: 0.9152 - val_accuracy: 0.7500\n", "Epoch 23/30\n", "3/3 [==============================] - 11s 4s/step - loss: 0.2693 - accuracy: 0.9262 - val_loss: 0.8829 - val_accuracy: 0.7554\n", "Epoch 24/30\n", "3/3 [==============================] - 11s 4s/step - loss: 0.2251 - accuracy: 0.9459 - val_loss: 0.8645 - val_accuracy: 0.7581\n", "Epoch 25/30\n", "3/3 [==============================] - 14s 5s/step - loss: 0.2084 - accuracy: 0.9521 - val_loss: 0.8264 - val_accuracy: 0.7823\n", "Epoch 26/30\n", "3/3 [==============================] - 9s 3s/step - loss: 0.2193 - accuracy: 0.9570 - val_loss: 0.8203 - val_accuracy: 0.7930\n", "Epoch 27/30\n", "3/3 [==============================] - 10s 3s/step - loss: 0.1837 - accuracy: 0.9552 - val_loss: 0.8219 - val_accuracy: 0.7930\n", "Epoch 28/30\n", "3/3 [==============================] - 12s 4s/step - loss: 0.1691 - accuracy: 0.9663 - val_loss: 0.8871 - val_accuracy: 0.7876\n", "Epoch 29/30\n", "3/3 [==============================] - 9s 3s/step - loss: 0.1701 - accuracy: 0.9596 - val_loss: 0.9550 - val_accuracy: 0.7796\n", "Epoch 30/30\n", "3/3 [==============================] - 14s 5s/step - loss: 0.1602 - accuracy: 0.9616 - val_loss: 0.9578 - val_accuracy: 0.7823\n" ] } ], "source": [ "training_history_fine = model.fit(\n", " x=dataset_train_augmented_shuffled.repeat(),\n", " validation_data=dataset_test_shuffled.repeat(),\n", " epochs=initial_epochs + fine_tuning_epochs,\n", " initial_epoch=initial_epochs,\n", " steps_per_epoch=steps_per_epoch,\n", " validation_steps=validation_steps,\n", " callbacks=[tensorboard_callback],\n", " verbose=1\n", ")" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 295 }, "colab_type": "code", "executionInfo": { "elapsed": 2126, "status": "ok", "timestamp": 1584118019475, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "j7uMEe0Tl5vr", "outputId": "9b07bc5b-7309-47de-9e08-7ad4b17898e8" }, "outputs": [ { "data": { "image/png": "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\n9Hksip0Q4ldAMcZCerUcpNPKXgH8Tkp5kWM7E0iRUlob2u90WhrFrtBWyaI1mQyNDeaCvnHN3t8X\nKCoqIjw83NtmeAytz3dRWRucnfpUiWLnCc40il1VVRX+/v6eMM3rVFVVIaXEbrdjNpvZu3cvEyZM\nYO/evUo4F7t27apzTpUqqHyvU1kbtL6+EyUVrN+fx75jxcR1CiYhOoxzosMIC/LO77gl7ZTHLJVS\nrnaESG0K1wNLPGVLYwT6+/HyDxlc1idcWQcpJyenSXHffRWtzzf54dAPZGdnM33UdG+b4jFUrTsn\nqutrb1RUVLTpHKS2pKKigvLyci6++GLsdjtSSl577TUlnCNQP4qdqvcC3U41TkFpJesP5LFuXx7r\n9+eRnlv3kNbO4UEOZymUc6LDSIgOJSE6jG6Rwfj71YzOWV0tKausoqTCTmm5472iipJy431gbATd\nO4V4TJ/X7zpCiBBgInC3W7IEVgohJPCalPJ1T9pgDvBneK9ObG0gtKpGo2l93tz1JqWlpUxH3YZH\no9E0ncjISDZv3uxtMzQaFyq3U1JKTpRUkFtUSVRROSGB/pgD/Gs5K6dTaKtk44ETrNuXx7r9eew+\nUoiUYA7wI6VnJx64tBsjz4mib9dwDueXse94CfuOF7Pf8f7l9iMUlFW6jhdo8iOuYzBV1ZKS8ipK\nHc5QQzx99UCu69SjVa5DXXjdQQKuAH6SUp5wSxsjpcwRQnQGvhFCpEspV9e1c2MrlEPTVuodnWhh\n3l4ra7fspFOIcVmau1Jve1592Gq1kp6erpQmJwkJCVRUVCi9QrnValVyhXLnPippOv27Z7ValV6h\nvLCwsNkrlGs0Go3Gs0gpKSir5HC+jSMFZRwusJFbUMaRfBuHC8rILbBxpMBGud0Zfv6ga99Akx/B\nAf6EBPoTHGA4TcGBxnZBWSU7cwqolka5oT0iuf/iPoxKiGJw9wiCTDWHACd2Diexc83hbVJK8koq\n2H+8hP3Hi9l3vJjsk2UEmvwICTQRGuhPSNBp74EmQoNOvXeN8GxPusfmIEHDq5C7lfkU+EhK+V49\n+Y8BxVLKfzZ2vpbOQQLYmVPA5PlreP66ZKYMiW3RMdozzj/XqqL1+SYzv5qJ3W7n7clve9sUj6Fq\n3TmpS5+eg1Q/ZzoHyW63KzPk7HRU1gbqz0FS9V7XntupqmrJ4fwyMvNKyMwrJcta4vqcc7KMssqa\n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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "loss = training_history.history['loss'] + training_history_fine.history['loss']\n", "val_loss = training_history.history['val_loss'] + training_history_fine.history['val_loss']\n", "\n", "accuracy = training_history.history['accuracy'] + training_history_fine.history['accuracy']\n", "val_accuracy = training_history.history['val_accuracy'] + training_history_fine.history['val_accuracy']\n", "\n", "plt.figure(figsize=(14, 4))\n", "\n", "plt.subplot(1, 2, 1)\n", "plt.title('Loss')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Loss')\n", "plt.plot(loss, label='Training set')\n", "plt.plot(val_loss, label='Test set', linestyle='--')\n", "plt.plot(\n", "[initial_epochs, initial_epochs], \n", "plt.ylim(),\n", "label='Start Fine Tuning',\n", "linestyle='--'\n", ")\n", "plt.legend()\n", "plt.grid(linestyle='--', linewidth=1, alpha=0.5)\n", "\n", "plt.subplot(1, 2, 2)\n", "plt.title('Accuracy')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Accuracy')\n", "plt.plot(accuracy, label='Training set')\n", "plt.plot(val_accuracy, label='Test set', linestyle='--')\n", "plt.plot(\n", "[initial_epochs, initial_epochs], \n", "plt.ylim(),\n", "label='Start Fine Tuning',\n", "linestyle='--'\n", ")\n", "plt.legend()\n", "plt.grid(linestyle='--', linewidth=1, alpha=0.5)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Ubd3vQXuLt-v" }, "source": [ "## Debugging the training with TensorBoard" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 821, "output_embedded_package_id": "1pQ9b7M6yf40laegAMM662yURGVX8sztb", "resources": { "https://localhost:6006/": { "data": "PCFkb2N0eXBlIGh0bWw+PCEtLQpAbGljZW5zZQpDb3B5cmlnaHQgMjAxNiBUaGUgVGVuc29yRmxvdyBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoKTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLT48bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cjx0aXRsZT5UZW5zb3JCb2FyZDwvdGl0bGU+CjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FNQUFBRDNlSDVaQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUFGelVrZENBSzdPSE9rQUFBRC9VRXhVUmZGbEtmYUVMdkZtS2ZOeUsvNjdOdldBTGY2OE52NjlOdk54Sy8yME5meXlOUDIyTmZOMEsvSnJLdnFoTXYyek5mMjVOZjI0TmYyM05mZU9ML3l6TlB5dk5QSm9LdmlXTVBtZU1mTjFLL1dCTGZlUEwvRm5LZmVNTC9xbE12UjdMUG1jTWZlTEwvYUpMdlI1TFBGb0tmSnVLdlIzTFA2Nk52eXdOUGVOTC9WL0xmYUlMdjIxTmYyNk5mTnpLL052Sy9SNkxQbWFNZnl4TlBxZk12VitMZnVyTS9pU01QbWJNZkp2S3ZtZE1mdW1NL3FpTXZtWk1meXROUEpxS3Z5c05QTjJLL2lZTVBOd0svdXBNL0p0S3ZKc0t2aVZNUGFITHZhR0x2SnBLdlI4TFBhS0x2cWtNdnVxTS9hRkx2UjRMUHVvTS9pVE1QV0RMZmlSTVBtWU1YUzBuZ2tBQUFMb1NVUkJWSGphN2RybmN0cEFGSWJoRlVJU1NLSjNNS1lhMCt5NHhUVzk5MzcvMTVKa0pobFRqaHJTckhSbXZ1Zi9hczZMMFlMRkNnRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1CSjZuamVucXNwemduUHJzckdYOVpwaTJ0Q3JtbmM2K2RZTnRoVlk1V3BNbXhRTFdQZE1zT3VZVnd6TmozZWkydDNtUXdhVjQzQkpQRENTMk5iSjVhRWV1WC8rOXFjalFPdGZGSWtJa3J2WTJnNE1WY21PQnNGV2Jvd0tPL2tOeWo2MmdScEpjRGFQQmx4THIxQjB6ZEcwQy84THpiSmlKcnNodXZ5MWd6bEE5K3JEOG1Ja3V5SUpqRkUzL2Rxbll3b1NtN0lVRVBvRC93dXQ4aUlndVNJRGpsRnhlL3lmWEw1dnVTSTIxQlRaTExoWG9PSUxNTzhIeHdhL0w4YkkwTGZtVWRoR293YjJadlQwZTU3cEZORGdCMDZJbFZ5am1tSUJsMlQvbmw5Unc2U0Q5R2dTRy9RMHVRa2FXM1hobW92S1EzZUZRNE4yVW85T1ExZUZac05lcmY3dlArck80cmhtWTFMZzN2RlZvUDgrOEJYZzFzRm53Ym5DazROVGhXOEd1aUtCRGRrVlZ0VE5Gdk5lbFZzTnFUYnlXbklPTTJvZVRSb3lXdndtcEpIZy91Y1hCcmNKdVhUNER3cnB3WmkydnkwVkN4OFl0WGcvRDJiVTRPZml1UTNlRmZFMktENGJmQ3FpTE5COTkzZ1hzR2x3YTJDVDROekJhY0dJVlE2WXNpcFFkaDB4RWRPRFVLakl4clNwODhvblo4emJiRkxnMURvaUZPNUJYdkRHdjJNeTkvSmhVVDhKVVpUSTB5RGFOSExCeklidnFURE5ZaFVpVncva2RqUTFrTTJDSEZEUGpLVytLenlSVEYwZy9nYTl3OXkrZkFOUXB4dlg4Q1UrTnk3RlVXRGVGM1krZzNsUk9JZjRrMFVEWDllQ3l2TzUzMVB5WWhIZ2E5enZQWkpVNWI3M1kvZVhqOEh2OUQ0OG42SGFGNUxiY2pSdDhUWlR0ZGE1TTFEZlhuYmtYMUMwU0hDRkt6UUI1RmU4b3A0R05HTkhhdnZaRVNiVndUNXI2VzF4eXVDUEJZM1k5WWdEcXprbkgvZTNZZk56enVMMzBsMEllYnJaNWtLdHVESVh0MW44NjhFVDZrZjMvNDl0THZyQ2NaeUY4UHUyMTVkQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjUEliTnJCaE9hQlh1Y29BQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FNQUFBRDNlSDVaQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUFGelVrZENBSzdPSE9rQUFBRC9VRXhVUmZGbEtmYUVMdkZtS2ZOeUsvNjdOdldBTGY2OE52NjlOdk54Sy8yME5meXlOUDIyTmZOMEsvSnJLdnFoTXYyek5mMjVOZjI0TmYyM05mZU9ML3l6TlB5dk5QSm9LdmlXTVBtZU1mTjFLL1dCTGZlUEwvRm5LZmVNTC9xbE12UjdMUG1jTWZlTEwvYUpMdlI1TFBGb0tmSnVLdlIzTFA2Nk52eXdOUGVOTC9WL0xmYUlMdjIxTmYyNk5mTnpLL052Sy9SNkxQbWFNZnl4TlBxZk12VitMZnVyTS9pU01QbWJNZkp2S3ZtZE1mdW1NL3FpTXZtWk1meXROUEpxS3Z5c05QTjJLL2lZTVBOd0svdXBNL0p0S3ZKc0t2aVZNUGFITHZhR0x2SnBLdlI4TFBhS0x2cWtNdnVxTS9hRkx2UjRMUHVvTS9pVE1QV0RMZmlSTVBtWU1YUzBuZ2tBQUFMb1NVUkJWSGphN2RybmN0cEFGSWJoRlVJU1NLSjNNS1lhMCt5NHhUVzk5MzcvMTVKa0pobFRqaHJTckhSbXZ1Zi9hczZMMFlMRkNnRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1CSjZuamVucXNwemduUHJzckdYOVpwaTJ0Q3JtbmM2K2RZTnRoVlk1V3BNbXhRTFdQZE1zT3VZVnd6TmozZWkydDNtUXdhVjQzQkpQRENTMk5iSjVhRWV1WC8rOXFjalFPdGZGSWtJa3J2WTJnNE1WY21PQnNGV2Jvd0tPL2tOeWo2MmdScEpjRGFQQmx4THIxQjB6ZEcwQy84THpiSmlKcnNodXZ5MWd6bEE5K3JEOG1Ja3V5SUpqRkUzL2Rxbll3b1NtN0lVRVBvRC93dXQ4aUlndVNJRGpsRnhlL3lmWEw1dnVTSTIxQlRaTExoWG9PSUxNTzhIeHdhL0w4YkkwTGZtVWRoR293YjJadlQwZTU3cEZORGdCMDZJbFZ5am1tSUJsMlQvbmw5Unc2U0Q5R2dTRy9RMHVRa2FXM1hobW92S1EzZUZRNE4yVW85T1ExZUZac05lcmY3dlArck80cmhtWTFMZzN2RlZvUDgrOEJYZzFzRm53Ym5DazROVGhXOEd1aUtCRGRrVlZ0VE5Gdk5lbFZzTnFUYnlXbklPTTJvZVRSb3lXdndtcEpIZy91Y1hCcmNKdVhUNER3cnB3WmkydnkwVkN4OFl0WGcvRDJiVTRPZml1UTNlRmZFMktENGJmQ3FpTE5COTkzZ1hzR2x3YTJDVDROekJhY0dJVlE2WXNpcFFkaDB4RWRPRFVLakl4clNwODhvblo4emJiRkxnMURvaUZPNUJYdkRHdjJNeTkvSmhVVDhKVVpUSTB5RGFOSExCeklidnFURE5ZaFVpVncva2RqUTFrTTJDSEZEUGpLVytLenlSVEYwZy9nYTl3OXkrZkFOUXB4dlg4Q1UrTnk3RlVXRGVGM1krZzNsUk9JZjRrMFVEWDllQ3l2TzUzMVB5WWhIZ2E5enZQWkpVNWI3M1kvZVhqOEh2OUQ0OG42SGFGNUxiY2pSdDhUWlR0ZGE1TTFEZlhuYmtYMUMwU0hDRkt6UUI1RmU4b3A0R05HTkhhdnZaRVNiVndUNXI2VzF4eXVDUEJZM1k5WWdEcXprbkgvZTNZZk56enVMMzBsMEllYnJaNWtLdHVESVh0MW44NjhFVDZrZjMvNDl0THZyQ2NaeUY4UHUyMTVkQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjUEliTnJCaE9hQlh1Y29BQUFBQVNVVk9SSzVDWUlJPSI+CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8c3R5bGU+CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vdVlFQ01Lb0hjTzl4MXdkbWJ5SEltMy1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3NUZGFBNmowUHNiOTIwVmp2LW1yekgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9fVllGeC1zODI0a1hxX1VsMkJIcVlILV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by90bmo0U0I2RE5iZGFRbnNNOENGcUJYLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9vTU1nZlpNUXRoT3J5UW85bjIyZGN1dnZEaW4xcEs4YUt0ZUxwZVo1YzBBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9Lc19jVnhpQ2l3VVdWc0ZXRkEzQmpuLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL05KNHZ4bGdXd1diRXN2MThkQWhxbm4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vaXNaLXdiQ1hOS0FibmpvNl9Ud0hUb1gwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vNzdGWEZqUmJHek40YUNyU0ZobGgzb1gwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8valNOMkNHVkRiY1Z5Q25mSmZqU2RmSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9VWDZpNEp4UURtM2ZWVGMxQ1B1d3FvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL2QtNklZcGxPRm9jQ2FjS3p4d1hTT0pCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vOTd1YWh4aXFaUm9uY0JhQ0VJM2FXNFgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1B3WmMtWWJJTDQxNHdCOXJCMUlBUFlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0NfWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDNGdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PcFhVcVRvMFVnUVFoR2pfU0ZkTFdCa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vV3hyWEphMEMzS2R0QzdsTWFmRzRkUmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL2NES2hSYVhuUVRPVmJhb3h3ZE9yOXhrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzFoWmYwMlBPQU5oMzJrMlZrZ0VvVUJrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3ZQY3luU0wwcUhxXzZkWDdsS1ZCeVhZaGpiU3B2YzQ3ZWU2eFJfODBIbncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3ZTenVsZktTSzBMTGpqZmVheGNSRWhrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vSzIzY3hXVlRySUZENkRKc0VWaTA3UmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0ZsNHkwUWRPeHl5VEhFR01YWDhrY1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vMGVDNmZsMDZsdVhFWVdwQlNKdlhDSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9JM1Mxd3NnU2c5WUN1clY2UFVrVE9ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vLUwxNEprMDZtNnBVSEItNW1YUVFuWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0hnbzEzay10ZlNwbjBxaTFTRmRVZlpCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9QcnUzM3FqU2hwWlNtRzN6NlZZd25ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9OWURXQmRENGdJcTI2RzVYWWJIc0ZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdF9acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdHd0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQ0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDZFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQ5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9vSGkzMGt3UVd2cENXcUFoekhjQ1NJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vWkxxS2VlbFliQVRHNjBFcFpCU0R5NFgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL214OVVjazZ1QjYzVklLRlluRU1YcllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL3JHdkhkSm5yMmw3NXFiMFlORDlOeUlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL1J4WkpkbnplbzNSNXpTZXhnZThVVVpCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29PZUZ3Wk5sclRlZnpMWW1sVlYxVUlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbWJtaHByTUg2OVppNmVFUEJZVkZoWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFY0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwZlpyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBRdF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVkJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFlncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBhRThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBkRGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWV9acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWXd0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFk0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTZFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFk5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6MXgtTTFJMXc1T01pcW5WRjh4QkxoVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rnp3WGFBWHVwNW1abGZLNnhSTHJoc2NvLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGenduNldxeG8teHd4aWxEWFBVOGNoVlUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxVDdhSkxLNm5LcG4zNklNd1RjTU1jLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6Xzc5X1p1VXhDaWdNMkRlc3BUbkZhdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejRnZDlPRVBVQ04zQWRZVzBlOHRhdDQud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejhiSVFTWVpuV0xhV0M5UU5DcFRLX1Uud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQo8L3N0eWxlPgoKCjxzdHlsZT4KICBodG1sLAogIGJvZHkgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIGZvbnQtZmFtaWx5OiBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgfQo8L3N0eWxlPgoKCgoKCgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItcmlwcGxlIj4KCiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCwgaHRtbCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCksIC5wYXBlci1tYXRlcmlhbCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdKSwgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIyIl0pLCAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIyIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSksIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdKSwgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI1Il0pLCAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI1Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAgIC8qIE5lZWQgdG8gc3BlY2lmeSB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyB0aGUgc3R5bGVzIGltcG9ydGVkIGZyb20gcGFwZXItbWF0ZXJpYWwuICovCiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG1pbi13aWR0aDogNS4xNGVtOwogICAgICAgIG1hcmdpbjogMCAwLjI5ZW07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIG91dGxpbmUtd2lkdGg6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgcGFkZGluZzogMC43ZW0gMC41N2VtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoW3JhaXNlZF0ua2V5Ym9hcmQtZm9jdXMpIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tcmFpc2VkLWtleWJvYXJkLWZvY3VzOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1mbGF0LWtleWJvYXJkLWZvY3VzOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgICAgICBjb2xvcjogI2E4YThhODsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1idXR0b24taW5rLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZm9yIEdvb2dsZSBwcm9kdWN0cyAqLwoKICAgICAgLS1nb29nbGUtcmVkLTEwMDogI2Y0YzdjMzsKICAgICAgLS1nb29nbGUtcmVkLTMwMDogI2U2N2M3MzsKICAgICAgLS1nb29nbGUtcmVkLTUwMDogI2RiNDQzNzsKICAgICAgLS1nb29nbGUtcmVkLTcwMDogI2M1MzkyOTsKCiAgICAgIC0tZ29vZ2xlLWJsdWUtMTAwOiAjYzZkYWZjOwogICAgICAtLWdvb2dsZS1ibHVlLTMwMDogIzdiYWFmNzsKICAgICAgLS1nb29nbGUtYmx1ZS01MDA6ICM0Mjg1ZjQ7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNzAwOiAjMzM2N2Q2OwoKICAgICAgLS1nb29nbGUtZ3JlZW4tMTAwOiAjYjdlMWNkOwogICAgICAtLWdvb2dsZS1ncmVlbi0zMDA6ICM1N2JiOGE7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTUwMDogIzBmOWQ1ODsKICAgICAgLS1nb29nbGUtZ3JlZW4tNzAwOiAjMGI4MDQzOwoKICAgICAgLS1nb29nbGUteWVsbG93LTEwMDogI2ZjZThiMjsKICAgICAgLS1nb29nbGUteWVsbG93LTMwMDogI2Y3Y2I0ZDsKICAgICAgLS1nb29nbGUteWVsbG93LTUwMDogI2Y0YjQwMDsKICAgICAgLS1nb29nbGUteWVsbG93LTcwMDogI2YwOTMwMDsKCiAgICAgIC0tZ29vZ2xlLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLWdvb2dsZS1ncmV5LTMwMDogI2UwZTBlMDsKICAgICAgLS1nb29nbGUtZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tZ29vZ2xlLWdyZXktNzAwOiAjNjE2MTYxOwoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZnJvbSBvbmxpbmUgc3BlYyBkb2N1bWVudCAqLwoKICAgICAgLS1wYXBlci1yZWQtNTA6ICNmZmViZWU7CiAgICAgIC0tcGFwZXItcmVkLTEwMDogI2ZmY2RkMjsKICAgICAgLS1wYXBlci1yZWQtMjAwOiAjZWY5YTlhOwogICAgICAtLXBhcGVyLXJlZC0zMDA6ICNlNTczNzM7CiAgICAgIC0tcGFwZXItcmVkLTQwMDogI2VmNTM1MDsKICAgICAgLS1wYXBlci1yZWQtNTAwOiAjZjQ0MzM2OwogICAgICAtLXBhcGVyLXJlZC02MDA6ICNlNTM5MzU7CiAgICAgIC0tcGFwZXItcmVkLTcwMDogI2QzMmYyZjsKICAgICAgLS1wYXBlci1yZWQtODAwOiAjYzYyODI4OwogICAgICAtLXBhcGVyLXJlZC05MDA6ICNiNzFjMWM7CiAgICAgIC0tcGFwZXItcmVkLWExMDA6ICNmZjhhODA7CiAgICAgIC0tcGFwZXItcmVkLWEyMDA6ICNmZjUyNTI7CiAgICAgIC0tcGFwZXItcmVkLWE0MDA6ICNmZjE3NDQ7CiAgICAgIC0tcGFwZXItcmVkLWE3MDA6ICNkNTAwMDA7CgogICAgICAtLXBhcGVyLXBpbmstNTA6ICNmY2U0ZWM7CiAgICAgIC0tcGFwZXItcGluay0xMDA6ICNmOGJiZDA7CiAgICAgIC0tcGFwZXItcGluay0yMDA6ICNmNDhmYjE7CiAgICAgIC0tcGFwZXItcGluay0zMDA6ICNmMDYyOTI7CiAgICAgIC0tcGFwZXItcGluay00MDA6ICNlYzQwN2E7CiAgICAgIC0tcGFwZXItcGluay01MDA6ICNlOTFlNjM7CiAgICAgIC0tcGFwZXItcGluay02MDA6ICNkODFiNjA7CiAgICAgIC0tcGFwZXItcGluay03MDA6ICNjMjE4NWI7CiAgICAgIC0tcGFwZXItcGluay04MDA6ICNhZDE0NTc7CiAgICAgIC0tcGFwZXItcGluay05MDA6ICM4ODBlNGY7CiAgICAgIC0tcGFwZXItcGluay1hMTAwOiAjZmY4MGFiOwogICAgICAtLXBhcGVyLXBpbmstYTIwMDogI2ZmNDA4MTsKICAgICAgLS1wYXBlci1waW5rLWE0MDA6ICNmNTAwNTc7CiAgICAgIC0tcGFwZXItcGluay1hNzAwOiAjYzUxMTYyOwoKICAgICAgLS1wYXBlci1wdXJwbGUtNTA6ICNmM2U1ZjU7CiAgICAgIC0tcGFwZXItcHVycGxlLTEwMDogI2UxYmVlNzsKICAgICAgLS1wYXBlci1wdXJwbGUtMjAwOiAjY2U5M2Q4OwogICAgICAtLXBhcGVyLXB1cnBsZS0zMDA6ICNiYTY4Yzg7CiAgICAgIC0tcGFwZXItcHVycGxlLTQwMDogI2FiNDdiYzsKICAgICAgLS1wYXBlci1wdXJwbGUtNTAwOiAjOWMyN2IwOwogICAgICAtLXBhcGVyLXB1cnBsZS02MDA6ICM4ZTI0YWE7CiAgICAgIC0tcGFwZXItcHVycGxlLTcwMDogIzdiMWZhMjsKICAgICAgLS1wYXBlci1wdXJwbGUtODAwOiAjNmExYjlhOwogICAgICAtLXBhcGVyLXB1cnBsZS05MDA6ICM0YTE0OGM7CiAgICAgIC0tcGFwZXItcHVycGxlLWExMDA6ICNlYTgwZmM7CiAgICAgIC0tcGFwZXItcHVycGxlLWEyMDA6ICNlMDQwZmI7CiAgICAgIC0tcGFwZXItcHVycGxlLWE0MDA6ICNkNTAwZjk7CiAgICAgIC0tcGFwZXItcHVycGxlLWE3MDA6ICNhYTAwZmY7CgogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTUwOiAjZWRlN2Y2OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTEwMDogI2QxYzRlOTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0yMDA6ICNiMzlkZGI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMzAwOiAjOTU3NWNkOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTQwMDogIzdlNTdjMjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDA6ICM2NzNhYjc7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNjAwOiAjNWUzNWIxOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTcwMDogIzUxMmRhODsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS04MDA6ICM0NTI3YTA7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtOTAwOiAjMzExYjkyOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWExMDA6ICNiMzg4ZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTIwMDogIzdjNGRmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNDAwOiAjNjUxZmZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWE3MDA6ICM2MjAwZWE7CgogICAgICAtLXBhcGVyLWluZGlnby01MDogI2U4ZWFmNjsKICAgICAgLS1wYXBlci1pbmRpZ28tMTAwOiAjYzVjYWU5OwogICAgICAtLXBhcGVyLWluZGlnby0yMDA6ICM5ZmE4ZGE7CiAgICAgIC0tcGFwZXItaW5kaWdvLTMwMDogIzc5ODZjYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNDAwOiAjNWM2YmMwOwogICAgICAtLXBhcGVyLWluZGlnby01MDA6ICMzZjUxYjU7CiAgICAgIC0tcGFwZXItaW5kaWdvLTYwMDogIzM5NDlhYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNzAwOiAjMzAzZjlmOwogICAgICAtLXBhcGVyLWluZGlnby04MDA6ICMyODM1OTM7CiAgICAgIC0tcGFwZXItaW5kaWdvLTkwMDogIzFhMjM3ZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTEwMDogIzhjOWVmZjsKICAgICAgLS1wYXBlci1pbmRpZ28tYTIwMDogIzUzNmRmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTQwMDogIzNkNWFmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTcwMDogIzMwNGZmZTsKCiAgICAgIC0tcGFwZXItYmx1ZS01MDogI2UzZjJmZDsKICAgICAgLS1wYXBlci1ibHVlLTEwMDogI2JiZGVmYjsKICAgICAgLS1wYXBlci1ibHVlLTIwMDogIzkwY2FmOTsKICAgICAgLS1wYXBlci1ibHVlLTMwMDogIzY0YjVmNjsKICAgICAgLS1wYXBlci1ibHVlLTQwMDogIzQyYTVmNTsKICAgICAgLS1wYXBlci1ibHVlLTUwMDogIzIxOTZmMzsKICAgICAgLS1wYXBlci1ibHVlLTYwMDogIzFlODhlNTsKICAgICAgLS1wYXBlci1ibHVlLTcwMDogIzE5NzZkMjsKICAgICAgLS1wYXBlci1ibHVlLTgwMDogIzE1NjVjMDsKICAgICAgLS1wYXBlci1ibHVlLTkwMDogIzBkNDdhMTsKICAgICAgLS1wYXBlci1ibHVlLWExMDA6ICM4MmIxZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hMjAwOiAjNDQ4YWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTQwMDogIzI5NzlmZjsKICAgICAgLS1wYXBlci1ibHVlLWE3MDA6ICMyOTYyZmY7CgogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTA6ICNlMWY1ZmU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0xMDA6ICNiM2U1ZmM7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0yMDA6ICM4MWQ0ZmE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0zMDA6ICM0ZmMzZjc7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS00MDA6ICMyOWI2ZjY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS01MDA6ICMwM2E5ZjQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS02MDA6ICMwMzliZTU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS03MDA6ICMwMjg4ZDE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS04MDA6ICMwMjc3YmQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS05MDA6ICMwMTU3OWI7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hMTAwOiAjODBkOGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTIwMDogIzQwYzRmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWE0MDA6ICMwMGIwZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNzAwOiAjMDA5MWVhOwoKICAgICAgLS1wYXBlci1jeWFuLTUwOiAjZTBmN2ZhOwogICAgICAtLXBhcGVyLWN5YW4tMTAwOiAjYjJlYmYyOwogICAgICAtLXBhcGVyLWN5YW4tMjAwOiAjODBkZWVhOwogICAgICAtLXBhcGVyLWN5YW4tMzAwOiAjNGRkMGUxOwogICAgICAtLXBhcGVyLWN5YW4tNDAwOiAjMjZjNmRhOwogICAgICAtLXBhcGVyLWN5YW4tNTAwOiAjMDBiY2Q0OwogICAgICAtLXBhcGVyLWN5YW4tNjAwOiAjMDBhY2MxOwogICAgICAtLXBhcGVyLWN5YW4tNzAwOiAjMDA5N2E3OwogICAgICAtLXBhcGVyLWN5YW4tODAwOiAjMDA4MzhmOwogICAgICAtLXBhcGVyLWN5YW4tOTAwOiAjMDA2MDY0OwogICAgICAtLXBhcGVyLWN5YW4tYTEwMDogIzg0ZmZmZjsKICAgICAgLS1wYXBlci1jeWFuLWEyMDA6ICMxOGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hNDAwOiAjMDBlNWZmOwogICAgICAtLXBhcGVyLWN5YW4tYTcwMDogIzAwYjhkNDsKCiAgICAgIC0tcGFwZXItdGVhbC01MDogI2UwZjJmMTsKICAgICAgLS1wYXBlci10ZWFsLTEwMDogI2IyZGZkYjsKICAgICAgLS1wYXBlci10ZWFsLTIwMDogIzgwY2JjNDsKICAgICAgLS1wYXBlci10ZWFsLTMwMDogIzRkYjZhYzsKICAgICAgLS1wYXBlci10ZWFsLTQwMDogIzI2YTY5YTsKICAgICAgLS1wYXBlci10ZWFsLTUwMDogIzAwOTY4ODsKICAgICAgLS1wYXBlci10ZWFsLTYwMDogIzAwODk3YjsKICAgICAgLS1wYXBlci10ZWFsLTcwMDogIzAwNzk2YjsKICAgICAgLS1wYXBlci10ZWFsLTgwMDogIzAwNjk1YzsKICAgICAgLS1wYXBlci10ZWFsLTkwMDogIzAwNGQ0MDsKICAgICAgLS1wYXBlci10ZWFsLWExMDA6ICNhN2ZmZWI7CiAgICAgIC0tcGFwZXItdGVhbC1hMjAwOiAjNjRmZmRhOwogICAgICAtLXBhcGVyLXRlYWwtYTQwMDogIzFkZTliNjsKICAgICAgLS1wYXBlci10ZWFsLWE3MDA6ICMwMGJmYTU7CgogICAgICAtLXBhcGVyLWdyZWVuLTUwOiAjZThmNWU5OwogICAgICAtLXBhcGVyLWdyZWVuLTEwMDogI2M4ZTZjOTsKICAgICAgLS1wYXBlci1ncmVlbi0yMDA6ICNhNWQ2YTc7CiAgICAgIC0tcGFwZXItZ3JlZW4tMzAwOiAjODFjNzg0OwogICAgICAtLXBhcGVyLWdyZWVuLTQwMDogIzY2YmI2YTsKICAgICAgLS1wYXBlci1ncmVlbi01MDA6ICM0Y2FmNTA7CiAgICAgIC0tcGFwZXItZ3JlZW4tNjAwOiAjNDNhMDQ3OwogICAgICAtLXBhcGVyLWdyZWVuLTcwMDogIzM4OGUzYzsKICAgICAgLS1wYXBlci1ncmVlbi04MDA6ICMyZTdkMzI7CiAgICAgIC0tcGFwZXItZ3JlZW4tOTAwOiAjMWI1ZTIwOwogICAgICAtLXBhcGVyLWdyZWVuLWExMDA6ICNiOWY2Y2E7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTIwMDogIzY5ZjBhZTsKICAgICAgLS1wYXBlci1ncmVlbi1hNDAwOiAjMDBlNjc2OwogICAgICAtLXBhcGVyLWdyZWVuLWE3MDA6ICMwMGM4NTM7CgogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTUwOiAjZjFmOGU5OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTEwMDogI2RjZWRjODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0yMDA6ICNjNWUxYTU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMzAwOiAjYWVkNTgxOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTQwMDogIzljY2M2NTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDA6ICM4YmMzNGE7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNjAwOiAjN2NiMzQyOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTcwMDogIzY4OWYzODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi04MDA6ICM1NThiMmY7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tOTAwOiAjMzM2OTFlOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWExMDA6ICNjY2ZmOTA7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTIwMDogI2IyZmY1OTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNDAwOiAjNzZmZjAzOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWE3MDA6ICM2NGRkMTc7CgogICAgICAtLXBhcGVyLWxpbWUtNTA6ICNmOWZiZTc7CiAgICAgIC0tcGFwZXItbGltZS0xMDA6ICNmMGY0YzM7CiAgICAgIC0tcGFwZXItbGltZS0yMDA6ICNlNmVlOWM7CiAgICAgIC0tcGFwZXItbGltZS0zMDA6ICNkY2U3NzU7CiAgICAgIC0tcGFwZXItbGltZS00MDA6ICNkNGUxNTc7CiAgICAgIC0tcGFwZXItbGltZS01MDA6ICNjZGRjMzk7CiAgICAgIC0tcGFwZXItbGltZS02MDA6ICNjMGNhMzM7CiAgICAgIC0tcGFwZXItbGltZS03MDA6ICNhZmI0MmI7CiAgICAgIC0tcGFwZXItbGltZS04MDA6ICM5ZTlkMjQ7CiAgICAgIC0tcGFwZXItbGltZS05MDA6ICM4Mjc3MTc7CiAgICAgIC0tcGFwZXItbGltZS1hMTAwOiAjZjRmZjgxOwogICAgICAtLXBhcGVyLWxpbWUtYTIwMDogI2VlZmY0MTsKICAgICAgLS1wYXBlci1saW1lLWE0MDA6ICNjNmZmMDA7CiAgICAgIC0tcGFwZXItbGltZS1hNzAwOiAjYWVlYTAwOwoKICAgICAgLS1wYXBlci15ZWxsb3ctNTA6ICNmZmZkZTc7CiAgICAgIC0tcGFwZXIteWVsbG93LTEwMDogI2ZmZjljNDsKICAgICAgLS1wYXBlci15ZWxsb3ctMjAwOiAjZmZmNTlkOwogICAgICAtLXBhcGVyLXllbGxvdy0zMDA6ICNmZmYxNzY7CiAgICAgIC0tcGFwZXIteWVsbG93LTQwMDogI2ZmZWU1ODsKICAgICAgLS1wYXBlci15ZWxsb3ctNTAwOiAjZmZlYjNiOwogICAgICAtLXBhcGVyLXllbGxvdy02MDA6ICNmZGQ4MzU7CiAgICAgIC0tcGFwZXIteWVsbG93LTcwMDogI2ZiYzAyZDsKICAgICAgLS1wYXBlci15ZWxsb3ctODAwOiAjZjlhODI1OwogICAgICAtLXBhcGVyLXllbGxvdy05MDA6ICNmNTdmMTc7CiAgICAgIC0tcGFwZXIteWVsbG93LWExMDA6ICNmZmZmOGQ7CiAgICAgIC0tcGFwZXIteWVsbG93LWEyMDA6ICNmZmZmMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE0MDA6ICNmZmVhMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE3MDA6ICNmZmQ2MDA7CgogICAgICAtLXBhcGVyLWFtYmVyLTUwOiAjZmZmOGUxOwogICAgICAtLXBhcGVyLWFtYmVyLTEwMDogI2ZmZWNiMzsKICAgICAgLS1wYXBlci1hbWJlci0yMDA6ICNmZmUwODI7CiAgICAgIC0tcGFwZXItYW1iZXItMzAwOiAjZmZkNTRmOwogICAgICAtLXBhcGVyLWFtYmVyLTQwMDogI2ZmY2EyODsKICAgICAgLS1wYXBlci1hbWJlci01MDA6ICNmZmMxMDc7CiAgICAgIC0tcGFwZXItYW1iZXItNjAwOiAjZmZiMzAwOwogICAgICAtLXBhcGVyLWFtYmVyLTcwMDogI2ZmYTAwMDsKICAgICAgLS1wYXBlci1hbWJlci04MDA6ICNmZjhmMDA7CiAgICAgIC0tcGFwZXItYW1iZXItOTAwOiAjZmY2ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLWExMDA6ICNmZmU1N2Y7CiAgICAgIC0tcGFwZXItYW1iZXItYTIwMDogI2ZmZDc0MDsKICAgICAgLS1wYXBlci1hbWJlci1hNDAwOiAjZmZjNDAwOwogICAgICAtLXBhcGVyLWFtYmVyLWE3MDA6ICNmZmFiMDA7CgogICAgICAtLXBhcGVyLW9yYW5nZS01MDogI2ZmZjNlMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtMTAwOiAjZmZlMGIyOwogICAgICAtLXBhcGVyLW9yYW5nZS0yMDA6ICNmZmNjODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTMwMDogI2ZmYjc0ZDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNDAwOiAjZmZhNzI2OwogICAgICAtLXBhcGVyLW9yYW5nZS01MDA6ICNmZjk4MDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTYwMDogI2ZiOGMwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNzAwOiAjZjU3YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS04MDA6ICNlZjZjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTkwMDogI2U2NTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTEwMDogI2ZmZDE4MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTIwMDogI2ZmYWI0MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTQwMDogI2ZmOTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTcwMDogI2ZmNjUwMDsKCiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNTA6ICNmYmU5ZTc7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMTAwOiAjZmZjY2JjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTIwMDogI2ZmYWI5MTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0zMDA6ICNmZjhhNjU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNDAwOiAjZmY3MDQzOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwMDogI2ZmNTcyMjsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS02MDA6ICNmNDUxMWU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNzAwOiAjZTY0YTE5OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTgwMDogI2Q4NDMxNTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS05MDA6ICNiZjM2MGM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTEwMDogI2ZmOWU4MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hMjAwOiAjZmY2ZTQwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE0MDA6ICNmZjNkMDA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMDogI2RkMmMwMDsKCiAgICAgIC0tcGFwZXItYnJvd24tNTA6ICNlZmViZTk7CiAgICAgIC0tcGFwZXItYnJvd24tMTAwOiAjZDdjY2M4OwogICAgICAtLXBhcGVyLWJyb3duLTIwMDogI2JjYWFhNDsKICAgICAgLS1wYXBlci1icm93bi0zMDA6ICNhMTg4N2Y7CiAgICAgIC0tcGFwZXItYnJvd24tNDAwOiAjOGQ2ZTYzOwogICAgICAtLXBhcGVyLWJyb3duLTUwMDogIzc5NTU0ODsKICAgICAgLS1wYXBlci1icm93bi02MDA6ICM2ZDRjNDE7CiAgICAgIC0tcGFwZXItYnJvd24tNzAwOiAjNWQ0MDM3OwogICAgICAtLXBhcGVyLWJyb3duLTgwMDogIzRlMzQyZTsKICAgICAgLS1wYXBlci1icm93bi05MDA6ICMzZTI3MjM7CgogICAgICAtLXBhcGVyLWdyZXktNTA6ICNmYWZhZmE7CiAgICAgIC0tcGFwZXItZ3JleS0xMDA6ICNmNWY1ZjU7CiAgICAgIC0tcGFwZXItZ3JleS0yMDA6ICNlZWVlZWU7CiAgICAgIC0tcGFwZXItZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tcGFwZXItZ3JleS00MDA6ICNiZGJkYmQ7CiAgICAgIC0tcGFwZXItZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tcGFwZXItZ3JleS02MDA6ICM3NTc1NzU7CiAgICAgIC0tcGFwZXItZ3JleS03MDA6ICM2MTYxNjE7CiAgICAgIC0tcGFwZXItZ3JleS04MDA6ICM0MjQyNDI7CiAgICAgIC0tcGFwZXItZ3JleS05MDA6ICMyMTIxMjE7CgogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDogI2VjZWZmMTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMTAwOiAjY2ZkOGRjOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0yMDA6ICNiMGJlYzU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTMwMDogIzkwYTRhZTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNDAwOiAjNzg5MDljOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDA6ICM2MDdkOGI7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTYwMDogIzU0NmU3YTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNzAwOiAjNDU1YTY0OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS04MDA6ICMzNzQ3NGY7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTkwMDogIzI2MzIzODsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGRhcmsgdGV4dCBvbiBhIGxpZ2h0IGJhY2tncm91bmQgKi8KICAgICAgLS1kYXJrLWRpdmlkZXItb3BhY2l0eTogMC4xMjsKICAgICAgLS1kYXJrLWRpc2FibGVkLW9wYWNpdHk6IDAuMzg7IC8qIG9yIGhpbnQgdGV4dCBvciBpY29uICovCiAgICAgIC0tZGFyay1zZWNvbmRhcnktb3BhY2l0eTogMC41NDsKICAgICAgLS1kYXJrLXByaW1hcnktb3BhY2l0eTogMC44NzsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGxpZ2h0IHRleHQgb24gYSBkYXJrIGJhY2tncm91bmQgKi8KICAgICAgLS1saWdodC1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tbGlnaHQtZGlzYWJsZWQtb3BhY2l0eTogMC4zOyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWxpZ2h0LXNlY29uZGFyeS1vcGFjaXR5OiAwLjc7CiAgICAgIC0tbGlnaHQtcHJpbWFyeS1vcGFjaXR5OiAxLjA7CgogICAgfQoKICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KCgoKCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC8qCiAgICAgICAqIFlvdSBjYW4gdXNlIHRoZXNlIGdlbmVyaWMgdmFyaWFibGVzIGluIHlvdXIgZWxlbWVudHMgZm9yIGVhc3kgdGhlbWluZy4KICAgICAgICogRm9yIGV4YW1wbGUsIGlmIGFsbCB5b3VyIGVsZW1lbnRzIHVzZSBgLS1wcmltYXJ5LXRleHQtY29sb3JgIGFzIGl0cyBtYWluCiAgICAgICAqIGNvbG9yLCB0aGVuIHN3aXRjaGluZyBmcm9tIGEgbGlnaHQgdG8gYSBkYXJrIHRoZW1lIGlzIGp1c3QgYSBtYXR0ZXIgb2YKICAgICAgICogY2hhbmdpbmcgdGhlIHZhbHVlIG9mIGAtLXByaW1hcnktdGV4dC1jb2xvcmAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5odG1sIGZvciBtb3JlIGNvbG9ycy4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tbGlnaHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTEwMCk7CiAgICAgIC0tZGFyay1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNzAwKTsKCiAgICAgIC0tYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWEyMDApOwogICAgICAtLWxpZ2h0LWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMTAwKTsKICAgICAgLS1kYXJrLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hNDAwKTsKCgogICAgICAvKgogICAgICAgKiBNYXRlcmlhbCBEZXNpZ24gTGlnaHQgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1saWdodC10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWxpZ2h0LXRoZW1lLWJhc2UtY29sb3I6ICMwMDAwMDA7CiAgICAgIC0tbGlnaHQtdGhlbWUtdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgICAtLWxpZ2h0LXRoZW1lLXNlY29uZGFyeS1jb2xvcjogIzczNzM3MzsgIC8qIGZvciBzZWNvbmRhcnkgdGV4dCBhbmQgaWNvbnMgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXNhYmxlZC1jb2xvcjogIzliOWI5YjsgIC8qIGRpc2FibGVkL2hpbnQgdGV4dCAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWRpdmlkZXItY29sb3I6ICNkYmRiZGI7CgogICAgICAvKgogICAgICAgKiBNYXRlcmlhbCBEZXNpZ24gRGFyayBiYWNrZ3JvdW5kIHRoZW1lCiAgICAgICAqLwogICAgICAtLWRhcmstdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgICAtLWRhcmstdGhlbWUtYmFzZS1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1kYXJrLXRoZW1lLXRleHQtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS1zZWNvbmRhcnktY29sb3I6ICNiY2JjYmM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tZGFyay10aGVtZS1kaXNhYmxlZC1jb2xvcjogIzY0NjQ2NDsgIC8qIGRpc2FibGVkL2hpbnQgdGV4dCAqLwogICAgICAtLWRhcmstdGhlbWUtZGl2aWRlci1jb2xvcjogIzNjM2MzYzsKCiAgICAgIC8qCiAgICAgICAqIERlcHJlY2F0ZWQgdmFsdWVzIGJlY2F1c2Ugb2YgdGhlaXIgY29uZnVzaW5nIG5hbWVzLgogICAgICAgKi8KICAgICAgLS10ZXh0LXByaW1hcnktY29sb3I6IHZhcigtLWRhcmstdGhlbWUtdGV4dC1jb2xvcik7CiAgICAgIC0tZGVmYXVsdC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItY2hlY2tib3giPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgICAgICAvKiAtMXB4IGlzIGEgc2VudGluZWwgZm9yIHRoZSBkZWZhdWx0IGFuZCBpcyByZXBsYWNlZCBpbiBgYXR0YWNoZWRgLiAqLwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oaWRkZW4gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgICNjaGVja2JveENvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgICAgIG1hcmdpbjogdmFyKC0tcGFwZXItY2hlY2tib3gtbWFyZ2luLCBpbml0aWFsKTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWJhY2tncm91bmQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgfQoKICAgICAgI2luayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwoKICAgICAgICAvKiBDZW50ZXIgdGhlIHJpcHBsZSBpbiB0aGUgY2hlY2tib3ggYnkgbmVnYXRpdmUgb2Zmc2V0dGluZyBpdCBieQogICAgICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgICAgICB0b3A6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgICAgICBsZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKSAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpIC8gMik7CiAgICAgICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgI2luazpkaXIocnRsKSB7CiAgICAgICAgcmlnaHQ6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAjaW5rW2NoZWNrZWRdIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgI2NoZWNrYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAycHg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE0MG1zLCBib3JkZXItY29sb3IgMTQwbXM7CiAgICAgIH0KCiAgICAgIC8qIGNoZWNrYm94IGNoZWNrZWQgYW5pbWF0aW9ucyAqLwogICAgICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogY2hlY2ttYXJrLWV4cGFuZCAxNDBtcyBlYXNlLW91dCBmb3J3YXJkczsKICAgICAgICBhbmltYXRpb246IGNoZWNrbWFyay1leHBhbmQgMTQwbXMgZWFzZS1vdXQgZm9yd2FyZHM7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgICAgICAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCwgMCkgcm90YXRlKDQ1ZGVnKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICNjaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgICNjaGVja21hcmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMzYlOwogICAgICAgIGhlaWdodDogNzAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItcmlnaHQtd2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2ttYXJrLWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiA5NyUgODYlOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIHByb3RlY3QgYWdhaW5zdCBwYWdlLWxldmVsIGJveC1zaXppbmcgKi8KICAgICAgfQoKICAgICAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICAgIH0KCiAgICAgIC8qIGxhYmVsICovCiAgICAgICNjaGVja2JveExhYmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWNoZWNrYm94LWxhYmVsOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZC1jb2xvciwgdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkOwogICAgICB9CgogICAgICAjY2hlY2tib3hMYWJlbDpkaXIocnRsKSB7CiAgICAgICAgcGFkZGluZy1yaWdodDogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtc3BhY2luZywgOHB4KTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICAgIH0KCiAgICAgICNjaGVja2JveExhYmVsW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIGRpc2FibGVkIHN0YXRlICovCgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF1bY2hlY2tlZF0pICNjaGVja2JveCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNjaGVja2JveExhYmVsICB7CiAgICAgICAgb3BhY2l0eTogMC42NTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWVycm9yLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNoZWNrYm94Q29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0iY2hlY2tib3giIGNsYXNzJD0iW1tfY29tcHV0ZUNoZWNrYm94Q2xhc3MoY2hlY2tlZCwgaW52YWxpZCldXSI+CiAgICAgICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24taWNvbiI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgCgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWExMXktYW5ub3VuY2VyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGNsaXA6IHJlY3QoMHB4LDBweCwwcHgsMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgYXJpYS1saXZlJD0iW1ttb2RlXV0iPltbX3RleHRdXTwvZGl2PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24taW5wdXQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90IGlkPSJjb250ZW50Ij48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWlucHV0LWNoYXItY291bnRlciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiB0byBtYWtlIGEgc3RhY2tpbmcgY29udGV4dCAqLwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgfTsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KCjxkb20tbW9kdWxlIGlkPSJwYXBlci1pbnB1dC1jb250YWluZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTc1JSkgc2NhbGUoMC43NSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwoKICAgICAgICAvKiBTaW5jZSB3ZSBzY2FsZSB0byA3NS8xMDAgb2YgdGhlIHNpemUsIHdlIGFjdHVhbGx5IGhhdmUgMTAwLzc1IG9mIHRoZQogICAgICAgIG9yaWdpbmFsIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KICAgICAgICB3aWR0aDogMTMzJTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZsb2F0aW5nOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIDpob3N0KDpkaXIocnRsKSkgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWRkZW4gOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICAvKiBUaGUgYXBwbHkgc2hpbSBkb2Vzbid0IGFwcGx5IHRoZSBuZXN0ZWQgY29sb3IgY3VzdG9tIHByb3BlcnR5LAogICAgICAgICAgc28gd2UgaGF2ZSB0byByZS1hcHBseSBpdCBoZXJlLiAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1zcGlubmVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1pbnZhbGlkOwogICAgICB9CgogICAgICAucHJlZml4IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1ub25lOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXByZWZpeDsKICAgICAgfQoKICAgICAgLnN1ZmZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtc3VmZml4OwogICAgICB9CgogICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpIHsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSkgewogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKCopIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciIgYXJpYS1oaWRkZW49InRydWUiIGhpZGRlbj0iW1tub0xhYmVsRmxvYXRdXSI+Jm5ic3A7PC9kaXY+CgogICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgIDxzcGFuIGNsYXNzPSJwcmVmaXgiPjxzbG90IG5hbWU9InByZWZpeCI+PC9zbG90Pjwvc3Bhbj4KCiAgICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlSW5wdXRDb250ZW50Q2xhc3Mobm9MYWJlbEZsb2F0LGFsd2F5c0Zsb2F0TGFiZWwsZm9jdXNlZCxpbnZhbGlkLF9pbnB1dEhhc0NvbnRlbnQpXV0iIGlkPSJsYWJlbEFuZElucHV0Q29udGFpbmVyIj4KICAgICAgICA8c2xvdCBuYW1lPSJsYWJlbCI+PC9zbG90PgogICAgICAgIDxzbG90IG5hbWU9ImlucHV0Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgoKICAgICAgPHNwYW4gY2xhc3M9InN1ZmZpeCI+PHNsb3QgbmFtZT0ic3VmZml4Ij48L3Nsb3Q+PC9zcGFuPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVVbmRlcmxpbmVDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJ1bmZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzKGZvY3VzZWQsaW52YWxpZCldXSI+CiAgICAgIDxzbG90IG5hbWU9ImFkZC1vbiI+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWlucHV0LWVycm9yIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWludmFsaWQtY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY2FwdGlvbjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1lcnJvcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDowOwogICAgICAgIHJpZ2h0OjA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH07CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1pbnB1dCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtmb2N1c2VkXSkgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC8qIEluIDEueCwgdGhlIDxpbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMgaXQuCiAgICAgIEluIDIueCB0aGUgPGlyb24taW5wdXQ+IGlzIGRpc3RyaWJ1dGVkIHRvIHBhcGVyLWlucHV0LWNvbnRhaW5lciwgd2hpY2ggc3R5bGVzCiAgICAgIGl0LCBidXQgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHksIHdlIG5lZWQgdG8gcmVzZXQgc29tZQogICAgICBvZiB0aGUgbmF0aXZlIGlucHV0J3MgcHJvcGVydGllcyB0byBpbmhlcml0IChmcm9tIHRoZSBpcm9uLWlucHV0KSAqLwogICAgICBpcm9uLWlucHV0ID4gaW5wdXQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgICAgIGxldHRlci1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIHdvcmQtc3BhY2luZzogaW5oZXJpdDsKICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsKICAgICAgICB0ZXh0LXNoYWRvdzogaW5oZXJpdDsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBjdXJzb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIGlucHV0OmRpc2FibGVkIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLAogICAgICBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1zcGlubmVyOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1jbGVhci1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtY2xlYXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3IgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDo6LW1zLWNsZWFyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbXMtY2xlYXI7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtcmV2ZWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbXMtcmV2ZWFsOwogICAgICB9CgogICAgICBpbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIGlkPSJjb250YWluZXIiIG5vLWxhYmVsLWZsb2F0PSJbW25vTGFiZWxGbG9hdF1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsKGFsd2F5c0Zsb2F0TGFiZWwscGxhY2Vob2xkZXIpXV0iIGF1dG8tdmFsaWRhdGUkPSJbW2F1dG9WYWxpZGF0ZV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgaW52YWxpZD0iW1tpbnZhbGlkXV0iPgoKICAgICAgPHNsb3QgbmFtZT0icHJlZml4IiBzbG90PSJwcmVmaXgiPjwvc2xvdD4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxzcGFuIGlkPSJ0ZW1wbGF0ZS1wbGFjZWhvbGRlciI+PC9zcGFuPgoKICAgICAgPHNsb3QgbmFtZT0ic3VmZml4IiBzbG90PSJzdWZmaXgiPjwvc2xvdD4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KICA8L3RlbXBsYXRlPgoKICAKICA8dGVtcGxhdGUgaWQ9InYwIj4KICAgIDxpbnB1dCBpcz0iaXJvbi1pbnB1dCIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgYXJpYS1sYWJlbGxlZGJ5JD0iW1tfYXJpYUxhYmVsbGVkQnldXSIgYXJpYS1kZXNjcmliZWRieSQ9IltbX2FyaWFEZXNjcmliZWRCeV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgdGl0bGUkPSJbW3RpdGxlXV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHByZXZlbnQtaW52YWxpZC1pbnB1dD0iW1twcmV2ZW50SW52YWxpZElucHV0XV0iIGFsbG93ZWQtcGF0dGVybj0iW1thbGxvd2VkUGF0dGVybl1dIiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iIHR5cGUkPSJbW3R5cGVdXSIgcGF0dGVybiQ9IltbcGF0dGVybl1dIiByZXF1aXJlZCQ9IltbcmVxdWlyZWRdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgaW5wdXRtb2RlJD0iW1tpbnB1dG1vZGVdXSIgbWlubGVuZ3RoJD0iW1ttaW5sZW5ndGhdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgbWluJD0iW1ttaW5dXSIgbWF4JD0iW1ttYXhdXSIgc3RlcCQ9Iltbc3RlcF1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgbGlzdCQ9IltbbGlzdF1dIiBzaXplJD0iW1tzaXplXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBhdXRvY29ycmVjdCQ9IltbYXV0b2NvcnJlY3RdXSIgb24tY2hhbmdlPSJfb25DaGFuZ2UiIHRhYmluZGV4JD0iW1t0YWJJbmRleF1dIiBhdXRvc2F2ZSQ9IltbYXV0b3NhdmVdXSIgcmVzdWx0cyQ9IltbcmVzdWx0c11dIiBhY2NlcHQkPSJbW2FjY2VwdF1dIiBtdWx0aXBsZSQ9IltbbXVsdGlwbGVdXSI+CiAgPC90ZW1wbGF0ZT4KCiAgPHRlbXBsYXRlIGlkPSJ2MSI+CiAgICAKICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICA8aW5wdXQgYXJpYS1sYWJlbGxlZGJ5JD0iW1tfYXJpYUxhYmVsbGVkQnldXSIgYXJpYS1kZXNjcmliZWRieSQ9IltbX2FyaWFEZXNjcmliZWRCeV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgdGl0bGUkPSJbW3RpdGxlXV0iIHR5cGUkPSJbW3R5cGVdXSIgcGF0dGVybiQ9IltbcGF0dGVybl1dIiByZXF1aXJlZCQ9IltbcmVxdWlyZWRdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgaW5wdXRtb2RlJD0iW1tpbnB1dG1vZGVdXSIgbWlubGVuZ3RoJD0iW1ttaW5sZW5ndGhdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgbWluJD0iW1ttaW5dXSIgbWF4JD0iW1ttYXhdXSIgc3RlcCQ9Iltbc3RlcF1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgbGlzdCQ9IltbbGlzdF1dIiBzaXplJD0iW1tzaXplXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBhdXRvY29ycmVjdCQ9IltbYXV0b2NvcnJlY3RdXSIgb24tY2hhbmdlPSJfb25DaGFuZ2UiIHRhYmluZGV4JD0iW1t0YWJJbmRleF1dIiBhdXRvc2F2ZSQ9IltbYXV0b3NhdmVdXSIgcmVzdWx0cyQ9IltbcmVzdWx0c11dIiBhY2NlcHQkPSJbW2FjY2VwdF1dIiBtdWx0aXBsZSQ9IltbbXVsdGlwbGVdXSI+CiAgICA8L2lyb24taW5wdXQ+CiAgPC90ZW1wbGF0ZT4KCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1vdmVybGF5LWJhY2tkcm9wIj4KCiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1kcm9wZG93biI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI2NvbnRlbnRXcmFwcGVyLmFuaW1hdGluZyA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iY29udGVudFdyYXBwZXIiPgogICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWVudS1idXR0b24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY3Vyc29yOiBhdXRvOwogICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWVudS1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIGlyb24tZHJvcGRvd24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duOwogICAgICB9CgogICAgICAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItbWVudS1idXR0b24tZHJvcGRvd24tYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0idG9wIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4OwogICAgICAgIHRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZlcnRpY2FsLWFsaWduPSJib3R0b20iXSkgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIGJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICB9CgogICAgICAjdHJpZ2dlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRyaWdnZXIiIG9uLXRhcD0idG9nZ2xlIj4KICAgICAgPHNsb3QgbmFtZT0iZHJvcGRvd24tdHJpZ2dlciI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGlyb24tZHJvcGRvd24gaWQ9ImRyb3Bkb3duIiBvcGVuZWQ9Int7b3BlbmVkfX0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgaG9yaXpvbnRhbC1vZmZzZXQ9IltbaG9yaXpvbnRhbE9mZnNldF1dIiB2ZXJ0aWNhbC1vZmZzZXQ9IltbdmVydGljYWxPZmZzZXRdXSIgbm8tb3ZlcmxhcD0iW1tub092ZXJsYXBdXSIgb3Blbi1hbmltYXRpb24tY29uZmlnPSJbW29wZW5BbmltYXRpb25Db25maWddXSIgY2xvc2UtYW5pbWF0aW9uLWNvbmZpZz0iW1tjbG9zZUFuaW1hdGlvbkNvbmZpZ11dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBmb2N1cy10YXJnZXQ9IltbX2Ryb3Bkb3duQ29udGVudF1dIiBhbGxvdy1vdXRzaWRlLXNjcm9sbD0iW1thbGxvd091dHNpZGVTY3JvbGxdXSIgcmVzdG9yZS1mb2N1cy1vbi1jbG9zZT0iW1tyZXN0b3JlRm9jdXNPbkNsb3NlXV0iIG9uLWlyb24tb3ZlcmxheS1jYW5jZWxlZD0iX19vbklyb25PdmVybGF5Q2FuY2VsZWQiPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0icGFwZXItZHJvcGRvd24tbWVudSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgYHRyYW5zcGFyZW50YC4KICAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwwLDAsMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH07CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItZHJvcGRvd24tbWVudSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KCiAgICAKICAgIDxzcGFuIHJvbGU9ImJ1dHRvbiI+PC9zcGFuPgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIAogICAgICAgIDxwYXBlci1pbnB1dCB0eXBlPSJ0ZXh0IiBpbnZhbGlkPSJbW2ludmFsaWRdXSIgcmVhZG9ubHkgZGlzYWJsZWQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbdmFsdWVdXSIgcGxhY2Vob2xkZXI9IltbcGxhY2Vob2xkZXJdXSIgZXJyb3ItbWVzc2FnZT0iW1tlcnJvck1lc3NhZ2VdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW2Fsd2F5c0Zsb2F0TGFiZWxdXSIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGxhYmVsPSJbW2xhYmVsXV0iPgogICAgICAgICAgCiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbGlzdGJveCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItaXRlbS1zaGFyZWQtc3R5bGVzIj4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1iYWNrZW5kIj4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1zdG9yYWdlIj4KICAKPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtdGFnLWZpbHRlcmVyIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgbGFiZWw9IkZpbHRlciB0YWdzIChyZWd1bGFyIGV4cHJlc3Npb25zIHN1cHBvcnRlZCkiIHZhbHVlPSJ7e190YWdGaWx0ZXJ9fSIgY2xhc3M9InNlYXJjaC1pbnB1dCI+CiAgICAgIDxpcm9uLWljb24gcHJlZml4IGljb249InNlYXJjaCIgc2xvdD0icHJlZml4Ij48L2lyb24taWNvbj4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDEwcHggMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLAogICAgICAubGF5b3V0LnZlcnRpY2FsIHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5pbmxpbmUgewogICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICB9CgogICAgICAubGF5b3V0Lmhvcml6b250YWwgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAubGF5b3V0LnZlcnRpY2FsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwIHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQoKICAgICAgLmxheW91dC5uby13cmFwIHsKICAgICAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXIsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXItanVzdGlmaWVkLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmxleCB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC1hdXRvIHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfQoKICAgICAgLmZsZXgtbm9uZSB7CiAgICAgICAgLW1zLWZsZXg6IG5vbmU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiBub25lOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtcmV2ZXJzZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAubGF5b3V0Lmhvcml6b250YWwtcmV2ZXJzZSwKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9CgogICAgICAubGF5b3V0LnZlcnRpY2FsLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9CgogICAgICAubGF5b3V0LndyYXAtcmV2ZXJzZSB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtYWxpZ25tZW50Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qKgogICAgICAgKiBBbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcy4KICAgICAgICovCiAgICAgIC5sYXlvdXQuc3RhcnQgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlciwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAubGF5b3V0LmVuZCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuYmFzZWxpbmUgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBbGlnbm1lbnQgaW4gbWFpbiBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXItanVzdGlmaWVkLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAubGF5b3V0LmVuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtanVzdGlmaWVkIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuanVzdGlmaWVkIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNlbGYgYWxpZ25tZW50LgogICAgICAgKi8KICAgICAgLnNlbGYtc3RhcnQgewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAuc2VsZi1jZW50ZXIgewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9CgogICAgICAuc2VsZi1lbmQgewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAuc2VsZi1zdHJldGNoIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgfQoKICAgICAgLnNlbGYtYmFzZWxpbmUgewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9CgogICAgICAvKioKICAgICAgICogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydC1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmVuZC1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXItYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuYmV0d2Vlbi1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnk7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuYXJvdW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1wb3NpdGlvbmluZyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuYmxvY2sgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaW52aXNpYmxlIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnJlbGF0aXZlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIGJvZHkuZnVsbGJsZWVkIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfQoKICAgICAgLnNjcm9sbCB7CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAvKiBmaXhlZCBwb3NpdGlvbiAqLwogICAgICAuZml4ZWQtYm90dG9tLAogICAgICAuZml4ZWQtbGVmdCwKICAgICAgLmZpeGVkLXJpZ2h0LAogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgIC5maXhlZC10b3AgewogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAuZml4ZWQtcmlnaHQgewogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5maXhlZC1ib3R0b20gewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICAuZml4ZWQtbGVmdCB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi1ncmFwaC1mYWRlZDogI2UwZDRiMzsKICB9Cjwvc3R5bGU+CgoKPGRvbS1tb2R1bGUgaWQ9ImRhc2hib2FyZC1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9Imlyb24tZmxleCI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpOwogICAgICAgIHBhZGRpbmc6IHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgMAogICAgICAgICAgdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luOiA1cHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uOmxhc3Qtb2YtdHlwZSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgcGFkZGluZy10b3A6IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBoMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDEwcHggMCA1cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJzY3JvbGxiYXItc3R5bGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICB9CgogICAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCAycHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgICB9CiAgICAgIC5zY3JvbGxiYXIgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRhc2hib2FyZC1sYXlvdXQiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3NpZGViYXIgewogICAgICAgIGZsZXg6IDAgMCB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItYmFzaXMsIDI1JSk7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1heC13aWR0aDogdmFyKC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLW1heC13aWR0aCwgMzUwcHgpOwogICAgICAgIG1pbi13aWR0aDogdmFyKC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLW1pbi13aWR0aCwgMjcwcHgpOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgICNjZW50ZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKFtzbG90PSdjZW50ZXInXSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1vcHRpb24tc2VsZWN0b3IiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9IndyYXAiPgogICAgICA8aDM+W1tuYW1lXV08L2gzPgogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPjxzbG90Pjwvc2xvdD48L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICAuY29udGVudC13cmFwcGVyIDo6c2xvdHRlZCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIG1hcmdpbjogMCAwIDVweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWNvbGxhcHNlIj4KCiAgPHRlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLWlyb24tY29sbGFwc2UtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMzAwbXMpOwogICAgICAgIC8qIFNhZmFyaSAxMCBuZWVkcyB0aGlzIHByb3BlcnR5IHByZWZpeGVkIHRvIGNvcnJlY3RseSBhcHBseSB0aGUgY3VzdG9tIHByb3BlcnR5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlyb24tY29sbGFwc2UtY2xvc2VkKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdCguaXJvbi1jb2xsYXBzZS1vcGVuZWQpKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CgogIDwvdGVtcGxhdGU+Cgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3BhbmVSZW5kZXJlZF1dIiBpZD0iaWZSZW5kZXJlZCI+CiAgICAgIDxidXR0b24gY2xhc3M9ImhlYWRpbmciIG9uLXRhcD0iX3RvZ2dsZVBhbmUiIG9wZW4tYnV0dG9uJD0iW1tvcGVuZWRdXSI+CiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuPlRhZ3MgbWF0Y2hpbmcgbXVsdGlwbGUgZXhwZXJpbWVudHM8L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0ludmFsaWRTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaWdodCI+VGFncyBtYXRjaGluZyAvPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIj5bW2NhdGVnb3J5Lm5hbWVdXTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIj5bW2NhdGVnb3J5Lm5hbWVdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlXV0iPgogICAgICAgICAgICA8c3Bhbj5bW19jb3VudF1dPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZXhwYW5kLW1vcmUiIGNsYXNzPSJleHBhbmQtYXJyb3ciPjwvaXJvbi1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIAogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Iltbb3BlbmVkXV0iIG5vLWFuaW1hdGlvbj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICAgIDxzcGFuIGlkPSJ0b3Atb2YtY29udGFpbmVyIj48L3NwYW4+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmlnLXBhZ2UtYnV0dG9ucyIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDEwcHg7Ij4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIG9uLXRhcD0iX3BlcmZvcm1QcmV2aW91c1BhZ2UiIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIj5QcmV2aW91cyBwYWdlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiIGRpc2FibGVkJD0iW1shX2hhc05leHRQYWdlXV0iPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBpZD0icGFnZS1pbnB1dCIgdHlwZT0ibnVtYmVyIiBuby1sYWJlbC1mbG9hdCBtaW49IjEiIG1heD0iW1tfcGFnZUNvdW50XV0iIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIiBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IiBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50Ij48L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgb2YgW1tfcGFnZUNvdW50XV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJiaWctcGFnZS1idXR0b25zIiBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIgZGlzYWJsZWQkPSJbWyFfaGFzUHJldmlvdXNQYWdlXV0iPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIG9uLXRhcD0iX3BlcmZvcm1OZXh0UGFnZSIgZGlzYWJsZWQkPSJbWyFfaGFzTmV4dFBhZ2VdXSI+TmV4dCBwYWdlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMCA1cHggMXB4IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmaXJzdC1vZi10eXBlKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoOmxhc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDsKICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RlZGVkZTsKICAgICAgICBwYWRkaW5nOiAxNXB4OwogICAgICB9CgogICAgICAubGlnaHQgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7CiAgICAgIH0KCiAgICAgICNjb250cm9scy1jb250YWluZXIgewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNjb250cm9scy1jb250YWluZXIgcGFwZXItYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAuYmlnLXBhZ2UtYnV0dG9ucyBwYXBlci1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxleC1iYXNpczogMDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYmlnLXBhZ2UtYnV0dG9ucyBwYXBlci1idXR0b25bZGlzYWJsZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICB9CgogICAgICBzbG90IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAjcGFnZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiB2YXIoLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoLCAxMDAlKTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWRpYWxvZy1zaGFyZWQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDI0cHggNDBweDsKCiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItZGlhbG9nLWJhY2tncm91bmQtY29sb3IsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1kaWFsb2ctY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWJvZHkxOwogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2c7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCopIHsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoLm5vLXBhZGRpbmcpIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCo6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KCiAgICAgIC8qIEluIDEueCwgdGhpcyBzZWxlY3RvciB3YXMgYDpob3N0ID4gOjpjb250ZW50IGgyYC4gSW4gMi54IDxzbG90PiBhbGxvd3MKICAgICAgdG8gc2VsZWN0IGRpcmVjdCBjaGlsZHJlbiBvbmx5LCB3aGljaCBpbmNyZWFzZXMgdGhlIHdlaWdodCBvZiB0aGlzCiAgICAgIHNlbGVjdG9yLCBzbyB3ZSBoYXZlIHRvIHJlLWRlZmluZSBmaXJzdC1jaGlsZC9sYXN0LWNoaWxkIG1hcmdpbnMgYmVsb3cuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyKSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC10aXRsZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLXRvcC4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy10aXRsZTsKICAgICAgfQoKICAgICAgLyogQXBwbHkgbWl4aW4gYWdhaW4sIGluIGNhc2UgaXQgc2V0cyBtYXJnaW4tYm90dG9tLiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5wYXBlci1kaWFsb2ctYnV0dG9ucyksCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5idXR0b25zKSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweCA4cHggOHB4IDI0cHg7CiAgICAgICAgbWFyZ2luOiAwOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1kaWFsb2ciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNvbG9yLXNjYWxlIj4KICAKICAKPC9kb20tbW9kdWxlPgoKCgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0iaWNvbnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9IjNkLXJvdGF0aW9uIj48cGF0aCBkPSJNNy41MiAyMS40OEM0LjI1IDE5Ljk0IDEuOTEgMTYuNzYgMS41NSAxM0guMDVDLjU2IDE5LjE2IDUuNzEgMjQgMTIgMjRsLjY2LS4wMy0zLjgxLTMuODEtMS4zMyAxLjMyem0uODktNi41MmMtLjE5IDAtLjM3LS4wMy0uNTItLjA4LS4xNi0uMDYtLjI5LS4xMy0uNC0uMjQtLjExLS4xLS4yLS4yMi0uMjYtLjM3LS4wNi0uMTQtLjA5LS4zLS4wOS0uNDdoLTEuM2MwIC4zNi4wNy42OC4yMS45NS4xNC4yNy4zMy41LjU2LjY5LjI0LjE4LjUxLjMyLjgyLjQxLjMuMS42Mi4xNS45Ni4xNS4zNyAwIC43Mi0uMDUgMS4wMy0uMTUuMzItLjEuNi0uMjUuODMtLjQ0cy40Mi0uNDMuNTUtLjcyYy4xMy0uMjkuMi0uNjEuMi0uOTcgMC0uMTktLjAyLS4zOC0uMDctLjU2LS4wNS0uMTgtLjEyLS4zNS0uMjMtLjUxLS4xLS4xNi0uMjQtLjMtLjQtLjQzLS4xNy0uMTMtLjM3LS4yMy0uNjEtLjMxLjItLjA5LjM3LS4yLjUyLS4zMy4xNS0uMTMuMjctLjI3LjM3LS40Mi4xLS4xNS4xNy0uMy4yMi0uNDYuMDUtLjE2LjA3LS4zMi4wNy0uNDggMC0uMzYtLjA2LS42OC0uMTgtLjk2LS4xMi0uMjgtLjI5LS41MS0uNTEtLjY5LS4yLS4xOS0uNDctLjMzLS43Ny0uNDNDOS4xIDguMDUgOC43NiA4IDguMzkgOGMtLjM2IDAtLjY5LjA1LTEgLjE2LS4zLjExLS41Ny4yNi0uNzkuNDUtLjIxLjE5LS4zOC40MS0uNTEuNjctLjEyLjI2LS4xOC41NC0uMTguODVoMS4zYzAtLjE3LjAzLS4zMi4wOS0uNDVzLjE0LS4yNS4yNS0uMzRjLjExLS4wOS4yMy0uMTcuMzgtLjIyLjE1LS4wNS4zLS4wOC40OC0uMDguNCAwIC43LjEuODkuMzEuMTkuMi4yOS40OS4yOS44NiAwIC4xOC0uMDMuMzQtLjA4LjQ5LS4wNS4xNS0uMTQuMjctLjI1LjM3LS4xMS4xLS4yNS4xOC0uNDEuMjQtLjE2LjA2LS4zNi4wOS0uNTguMDlINy41djEuMDNoLjc3Yy4yMiAwIC40Mi4wMi42LjA3cy4zMy4xMy40NS4yM2MuMTIuMTEuMjIuMjQuMjkuNC4wNy4xNi4xLjM1LjEuNTcgMCAuNDEtLjEyLjcyLS4zNS45My0uMjMuMjMtLjU1LjMzLS45NS4zM3ptOC41NS01LjkyYy0uMzItLjMzLS43LS41OS0xLjE0LS43Ny0uNDMtLjE4LS45Mi0uMjctMS40Ni0uMjdIMTJ2OGgyLjNjLjU1IDAgMS4wNi0uMDkgMS41MS0uMjcuNDUtLjE4Ljg0LS40MyAxLjE2LS43Ni4zMi0uMzMuNTctLjczLjc0LTEuMTkuMTctLjQ3LjI2LS45OS4yNi0xLjU3di0uNGMwLS41OC0uMDktMS4xLS4yNi0xLjU3LS4xOC0uNDctLjQzLS44Ny0uNzUtMS4yem0tLjM5IDMuMTZjMCAuNDItLjA1Ljc5LS4xNCAxLjEzLS4xLjMzLS4yNC42Mi0uNDMuODUtLjE5LjIzLS40My40MS0uNzEuNTMtLjI5LjEyLS42Mi4xOC0uOTkuMThoLS45MVY5LjEyaC45N2MuNzIgMCAxLjI3LjIzIDEuNjQuNjkuMzguNDYuNTcgMS4xMi41NyAxLjk5di40ek0xMiAwbC0uNjYuMDMgMy44MSAzLjgxIDEuMzMtMS4zM2MzLjI3IDEuNTUgNS42MSA0LjcyIDUuOTYgOC40OGgxLjVDMjMuNDQgNC44NCAxOC4yOSAwIDEyIDB6IiAvPjwvZz4KPGcgaWQ9ImFjY2Vzc2liaWxpdHkiPjxwYXRoIGQ9Ik0xMiAyYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptOSA3aC02djEzaC0ydi02aC0ydjZIOVY5SDNWN2gxOHYyeiIgLz48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiIC8+PHBhdGggZD0iTTE5IDEzdi0yYy0xLjU0LjAyLTMuMDktLjc1LTQuMDctMS44M2wtMS4yOS0xLjQzYy0uMTctLjE5LS4zOC0uMzQtLjYxLS40NS0uMDEgMC0uMDEtLjAxLS4wMi0uMDFIMTNjLS4zNS0uMi0uNzUtLjMtMS4xOS0uMjZDMTAuNzYgNy4xMSAxMCA4LjA0IDEwIDkuMDlWMTVjMCAxLjEuOSAyIDIgMmg1djVoMnYtNS41YzAtMS4xLS45LTItMi0yaC0zdi0zLjQ1YzEuMjkgMS4wNyAzLjI1IDEuOTQgNSAxLjk1em0tNi4xNyA1Yy0uNDEgMS4xNi0xLjUyIDItMi44MyAyLTEuNjYgMC0zLTEuMzQtMy0zIDAtMS4zMS44NC0yLjQxIDItMi44M1YxMi4xYy0yLjI4LjQ2LTQgMi40OC00IDQuOSAwIDIuNzYgMi4yNCA1IDUgNSAyLjQyIDAgNC40NC0xLjcyIDQuOS00aC0yLjA3eiIgLz48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6IiAvPjwvZz4KPGcgaWQ9ImFjY291bnQtYmFsYW5jZS13YWxsZXQiPjxwYXRoIGQ9Ik0yMSAxOHYxYzAgMS4xLS45IDItMiAySDVjLTEuMTEgMC0yLS45LTItMlY1YzAtMS4xLjg5LTIgMi0yaDE0YzEuMSAwIDIgLjkgMiAydjFoLTljLTEuMTEgMC0yIC45LTIgMnY4YzAgMS4xLjg5IDIgMiAyaDl6bS05LTJoMTBWOEgxMnY4em00LTIuNWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6IiAvPjwvZz4KPGcgaWQ9ImFjY291bnQtYm94Ij48cGF0aCBkPSJNMyA1djE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJINWMtMS4xMSAwLTIgLjktMiAyem0xMiA0YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3ptLTkgOGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MUg2di0xeiIgLz48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiIC8+PC9nPgo8ZyBpZD0iYWRkIj48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiIgLz48L2c+CjxnIGlkPSJhZGQtYWxlcnQiPjxwYXRoIGQ9Ik0xMC4wMSAyMS4wMWMwIDEuMS44OSAxLjk5IDEuOTkgMS45OXMxLjk5LS44OSAxLjk5LTEuOTloLTMuOTh6bTguODctNC4xOVYxMWMwLTMuMjUtMi4yNS01Ljk3LTUuMjktNi42OXYtLjcyQzEzLjU5IDIuNzEgMTIuODggMiAxMiAycy0xLjU5LjcxLTEuNTkgMS41OXYuNzJDNy4zNyA1LjAzIDUuMTIgNy43NSA1LjEyIDExdjUuODJMMyAxOC45NFYyMGgxOHYtMS4wNmwtMi4xMi0yLjEyek0xNiAxMy4wMWgtM3YzaC0ydi0zSDhWMTFoM1Y4aDJ2M2gzdjIuMDF6IiAvPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6IiAvPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExaC00djRoLTJ2LTRIN3YtMmg0VjdoMnY0aDR2MnoiIC8+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZS1vdXRsaW5lIj48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiIgLz48L2c+CjxnIGlkPSJhbGFybSI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyLjUgOEgxMXY2bDQuNzUgMi44NS43NS0xLjIzLTQtMi4zN1Y4ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3oiIC8+PC9nPgo8ZyBpZD0iYWxhcm0tYWRkIj48cGF0aCBkPSJNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6bTEtMTFoLTJ2M0g4djJoM3YzaDJ2LTNoM3YtMmgtM1Y5eiIgLz48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiIC8+PC9nPgo8ZyBpZD0iYWxhcm0tb24iPjxwYXRoIGQ9Ik0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptLTEuNDYtNS40N0w4LjQxIDEyLjRsLTEuMDYgMS4wNiAzLjE4IDMuMTggNi02LTEuMDYtMS4wNi00LjkzIDQuOTV6IiAvPjwvZz4KPGcgaWQ9ImFsbC1vdXQiPjxwYXRoIGQ9Ik0xNi4yMSA0LjE2bDQgNHYtNHptNCAxMmwtNCA0aDR6bS0xMiA0bC00LTR2NHptLTQtMTJsNC00aC00em0xMi45NS0uOTVjLTIuNzMtMi43My03LjE3LTIuNzMtOS45IDBzLTIuNzMgNy4xNyAwIDkuOSA3LjE3IDIuNzMgOS45IDAgMi43My03LjE2IDAtOS45em0tMS4xIDguOGMtMi4xMyAyLjEzLTUuNTcgMi4xMy03LjcgMHMtMi4xMy01LjU3IDAtNy43IDUuNTctMi4xMyA3LjcgMCAyLjEzIDUuNTcgMCA3Ljd6IiAvPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6IiAvPjwvZz4KPGcgaWQ9ImFubm91bmNlbWVudCI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyA5aC0yVjVoMnY2em0wIDRoLTJ2LTJoMnYyeiIgLz48L2c+CjxnIGlkPSJhcHBzIj48cGF0aCBkPSJNNCA4aDRWNEg0djR6bTYgMTJoNHYtNGgtNHY0em0tNiAwaDR2LTRINHY0em0wLTZoNHYtNEg0djR6bTYgMGg0di00aC00djR6bTYtMTB2NGg0VjRoLTR6bS02IDRoNFY0aC00djR6bTYgNmg0di00aC00djR6bTAgNmg0di00aC00djR6IiAvPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiIC8+PC9nPgo8ZyBpZD0iYXJyb3ctYmFjayI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6IiAvPjwvZz4KPGcgaWQ9ImFycm93LWRvd253YXJkIj48cGF0aCBkPSJNMjAgMTJsLTEuNDEtMS40MUwxMyAxNi4xN1Y0aC0ydjEyLjE3bC01LjU4LTUuNTlMNCAxMmw4IDggOC04eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6IiAvPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtZG93bi1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDEybC00LTRoOGwtNCA0eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLXVwIj48cGF0aCBkPSJNNyAxNGw1LTUgNSA1eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiIC8+PC9nPgo8ZyBpZD0iYXJyb3ctdXB3YXJkIj48cGF0aCBkPSJNNCAxMmwxLjQxIDEuNDFMMTEgNy44M1YyMGgyVjcuODNsNS41OCA1LjU5TDIwIDEybC04LTgtOCA4eiIgLz48L2c+CjxnIGlkPSJhc3BlY3QtcmF0aW8iPjxwYXRoIGQ9Ik0xOSAxMmgtMnYzaC0zdjJoNXYtNXpNNyA5aDNWN0g1djVoMlY5em0xNC02SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6IiAvPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0iYXNzaWdubWVudCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yIDE0SDd2LTJoN3Yyem0zLTRIN3YtMmgxMHYyem0wLTRIN1Y3aDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtaW5kIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgNGMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJINnYtMS40YzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMVYxOXoiIC8+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiIgLz48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem00IDEyaC00djNsLTUtNSA1LTV2M2g0djR6IiAvPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuZWQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMCAxNWwtNS01aDNWOWg0djRoM2wtNSA1eiIgLz48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiIgLz48L2c+CjxnIGlkPSJhdHRhY2htZW50Ij48cGF0aCBkPSJNMiAxMi41QzIgOS40NiA0LjQ2IDcgNy41IDdIMThjMi4yMSAwIDQgMS43OSA0IDRzLTEuNzkgNC00IDRIOS41QzguMTIgMTUgNyAxMy44OCA3IDEyLjVTOC4xMiAxMCA5LjUgMTBIMTd2Mkg5LjQxYy0uNTUgMC0uNTUgMSAwIDFIMThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0ySDcuNUM1LjU3IDkgNCAxMC41NyA0IDEyLjVTNS41NyAxNiA3LjUgMTZIMTd2Mkg3LjVDNC40NiAxOCAyIDE1LjU0IDIgMTIuNXoiIC8+PC9nPgo8ZyBpZD0iYXV0b3JlbmV3Ij48cGF0aCBkPSJNMTIgNnYzbDQtNC00LTR2M2MtNC40MiAwLTggMy41OC04IDggMCAxLjU3LjQ2IDMuMDMgMS4yNCA0LjI2TDYuNyAxNC44Yy0uNDUtLjgzLS43LTEuNzktLjctMi44IDAtMy4zMSAyLjY5LTYgNi02em02Ljc2IDEuNzRMMTcuMyA5LjJjLjQ0Ljg0LjcgMS43OS43IDIuOCAwIDMuMzEtMi42OSA2LTYgNnYtM2wtNCA0IDQgNHYtM2M0LjQyIDAgOC0zLjU4IDgtOCAwLTEuNTctLjQ2LTMuMDMtMS4yNC00LjI2eiIgLz48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiIgLz48L2c+CjxnIGlkPSJiYWNrdXAiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE0IDEzdjRoLTR2LTRIN2w1LTUgNSA1aC0zeiIgLz48L2c+CjxnIGlkPSJibG9jayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTQgMTJjMC00LjQyIDMuNTgtOCA4LTggMS44NSAwIDMuNTUuNjMgNC45IDEuNjlMNS42OSAxNi45QzQuNjMgMTUuNTUgNCAxMy44NSA0IDEyem04IDhjLTEuODUgMC0zLjU1LS42My00LjktMS42OUwxOC4zMSA3LjFDMTkuMzcgOC40NSAyMCAxMC4xNSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiIC8+PC9nPgo8ZyBpZD0iYm9va21hcmsiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9ImJvb2ttYXJrLWJvcmRlciI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiIC8+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiIC8+PC9nPgo8ZyBpZD0iYnVpbGQiPjxwYXRoIGQ9Ik0yMi43IDE5bC05LjEtOS4xYy45LTIuMy40LTUtMS41LTYuOS0yLTItNS0yLjQtNy40LTEuM0w5IDYgNiA5IDEuNiA0LjdDLjQgNy4xLjkgMTAuMSAyLjkgMTIuMWMxLjkgMS45IDQuNiAyLjQgNi45IDEuNWw5LjEgOS4xYy40LjQgMSAuNCAxLjQgMGwyLjMtMi4zYy41LS40LjUtMS4xLjEtMS40eiIgLz48L2c+CjxnIGlkPSJjYWNoZWQiPjxwYXRoIGQ9Ik0xOSA4bC00IDRoM2MwIDMuMzEtMi42OSA2LTYgNi0xLjAxIDAtMS45Ny0uMjUtMi44LS43bC0xLjQ2IDEuNDZDOC45NyAxOS41NCAxMC40MyAyMCAxMiAyMGM0LjQyIDAgOC0zLjU4IDgtOGgzbC00LTR6TTYgMTJjMC0zLjMxIDIuNjktNiA2LTYgMS4wMSAwIDEuOTcuMjUgMi44LjdsMS40Ni0xLjQ2QzE1LjAzIDQuNDYgMTMuNTcgNCAxMiA0Yy00LjQyIDAtOCAzLjU4LTggOEgxbDQgNCA0LTRINnoiIC8+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiIgLz48L2c+CjxnIGlkPSJjYW5jZWwiPjxwYXRoIGQ9Ik0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem01IDEzLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXoiIC8+PC9nPgo8ZyBpZD0iY2FyZC1naWZ0Y2FyZCI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiIgLz48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6IiAvPjwvZz4KPGcgaWQ9ImNhcmQtdHJhdmVsIj48cGF0aCBkPSJNMjAgNmgtM1Y0YzAtMS4xMS0uODktMi0yLTJIOWMtMS4xMSAwLTIgLjg5LTIgMnYySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yek05IDRoNnYySDlWNHptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDN2MmgyVjhoNnYyaDJWOGgzdjZ6IiAvPjwvZz4KPGcgaWQ9ImNoYW5nZS1oaXN0b3J5Ij48cGF0aCBkPSJNMTIgNy43N0wxOC4zOSAxOEg1LjYxTDEyIDcuNzdNMTIgNEwyIDIwaDIwTDEyIDR6IiAvPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6IiAvPjwvZz4KPGcgaWQ9ImNoZWNrLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xLS44OS0yLTItMnptLTkgMTRsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiIC8+PC9nPgo8ZyBpZD0iY2hlY2stYm94LW91dGxpbmUtYmxhbmsiPjxwYXRoIGQ9Ik0xOSA1djE0SDVWNWgxNG0wLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6IiAvPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiIgLz48L2c+CjxnIGlkPSJjbGFzcyI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiIC8+PC9nPgo8ZyBpZD0iY2xlYXIiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6IiAvPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIgLz48L2c+CjxnIGlkPSJjbG91ZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnoiIC8+PC9nPgo8ZyBpZD0iY2xvdWQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNC41IDE0SDhjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTNsLjE0LjAxQzguNTggOC4yOCAxMC4xMyA3IDEyIDdjMi4yMSAwIDQgMS43OSA0IDRoLjVjMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjVTMTcuODggMTYgMTYuNSAxNnoiIC8+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiIgLz48L2c+CjxnIGlkPSJjbG91ZC1kb3dubG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTcgMTNsLTUgNS01LTVoM1Y5aDR2NGgzeiIgLz48L2c+CjxnIGlkPSJjbG91ZC1vZmYiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNGMtMS40OCAwLTIuODUuNDMtNC4wMSAxLjE3bDEuNDYgMS40NkMxMC4yMSA2LjIzIDExLjA4IDYgMTIgNmMzLjA0IDAgNS41IDIuNDYgNS41IDUuNXYuNUgxOWMxLjY2IDAgMyAxLjM0IDMgMyAwIDEuMTMtLjY0IDIuMTEtMS41NiAyLjYybDEuNDUgMS40NUMyMy4xNiAxOC4xNiAyNCAxNi42OCAyNCAxNWMwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMyA1LjI3bDIuNzUgMi43NEMyLjU2IDguMTUgMCAxMC43NyAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDExLjczbDIgMkwyMSAyMC43MyA0LjI3IDQgMyA1LjI3ek03LjczIDEwbDggOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aDEuNzN6IiAvPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6IiAvPjwvZz4KPGcgaWQ9ImNsb3VkLXVwbG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6IiAvPjwvZz4KPGcgaWQ9ImNvZGUiPjxwYXRoIGQ9Ik05LjQgMTYuNkw0LjggMTJsNC42LTQuNkw4IDZsLTYgNiA2IDYgMS40LTEuNHptNS4yIDBsNC42LTQuNi00LjYtNC42TDE2IDZsNiA2LTYgNi0xLjQtMS40eiIgLz48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6IiAvPjwvZz4KPGcgaWQ9ImNvbnRlbnQtY29weSI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiIgLz48L2c+CjxnIGlkPSJjb250ZW50LWN1dCI+PHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiIC8+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiIC8+PC9nPgo8ZyBpZD0iY29weXJpZ2h0Ij48cGF0aCBkPSJNMTAuMDggMTAuODZjLjA1LS4zMy4xNi0uNjIuMy0uODdzLjM0LS40Ni41OS0uNjJjLjI0LS4xNS41NC0uMjIuOTEtLjIzLjIzLjAxLjQ0LjA1LjYzLjEzLjIuMDkuMzguMjEuNTIuMzZzLjI1LjMzLjM0LjUzLjEzLjQyLjE0LjY0aDEuNzljLS4wMi0uNDctLjExLS45LS4yOC0xLjI5cy0uNC0uNzMtLjctMS4wMS0uNjYtLjUtMS4wOC0uNjYtLjg4LS4yMy0xLjM5LS4yM2MtLjY1IDAtMS4yMi4xMS0xLjcuMzRzLS44OC41My0xLjIuOTItLjU2Ljg0LS43MSAxLjM2UzggMTEuMjkgOCAxMS44N3YuMjdjMCAuNTguMDggMS4xMi4yMyAxLjY0cy4zOS45Ny43MSAxLjM1LjcyLjY5IDEuMi45MSAxLjA1LjM0IDEuNy4zNGMuNDcgMCAuOTEtLjA4IDEuMzItLjIzcy43Ny0uMzYgMS4wOC0uNjMuNTYtLjU4Ljc0LS45NC4yOS0uNzQuMy0xLjE1aC0xLjc5Yy0uMDEuMjEtLjA2LjQtLjE1LjU4cy0uMjEuMzMtLjM2LjQ2LS4zMi4yMy0uNTIuM2MtLjE5LjA3LS4zOS4wOS0uNi4xLS4zNi0uMDEtLjY2LS4wOC0uODktLjIzLS4yNS0uMTYtLjQ1LS4zNy0uNTktLjYycy0uMjUtLjU1LS4zLS44OC0uMDgtLjY3LS4wOC0xdi0uMjdjMC0uMzUuMDMtLjY4LjA4LTEuMDF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJjcmVhdGUiPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6IiAvPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiIgLz48L2c+CjxnIGlkPSJjcmVkaXQtY2FyZCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiIC8+PC9nPgo8ZyBpZD0iZGFzaGJvYXJkIj48cGF0aCBkPSJNMyAxM2g4VjNIM3YxMHptMCA4aDh2LTZIM3Y2em0xMCAwaDhWMTFoLTh2MTB6bTAtMTh2Nmg4VjNoLTh6IiAvPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiIC8+PC9nPgo8ZyBpZD0iZGVsZXRlIj48cGF0aCBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz48L2c+CjxnIGlkPSJkZWxldGUtZm9yZXZlciI+PHBhdGggZD0iTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHoiIC8+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6IiAvPjwvZz4KPGcgaWQ9ImRlc2NyaXB0aW9uIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0yIDE2SDh2LTJoOHYyem0wLTRIOHYtMmg4djJ6bS0zLTVWMy41TDE4LjUgOUgxM3oiIC8+PC9nPgo8ZyBpZD0iZG5zIj48cGF0aCBkPSJNMjAgMTNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xdi02YzAtLjU1LS40NS0xLTEtMXpNNyAxOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTIwIDNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xek03IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiIgLz48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIgLz48L2c+CjxnIGlkPSJkb25lLWFsbCI+PHBhdGggZD0iTTE4IDdsLTEuNDEtMS40MS02LjM0IDYuMzQgMS40MSAxLjQxTDE4IDd6bTQuMjQtMS40MUwxMS42NiAxNi4xNyA3LjQ4IDEybC0xLjQxIDEuNDFMMTEuNjYgMTlsMTItMTItMS40Mi0xLjQxek0uNDEgMTMuNDFMNiAxOWwxLjQxLTEuNDFMMS44MyAxMiAuNDEgMTMuNDF6IiAvPjwvZz4KPGcgaWQ9ImRvbnV0LWxhcmdlIj48cGF0aCBkPSJNMTEgNS4wOFYyYy01IC41LTkgNC44MS05IDEwczQgOS41IDkgMTB2LTMuMDhjLTMtLjQ4LTYtMy40LTYtNi45MnMzLTYuNDQgNi02Ljkyek0xOC45NyAxMUgyMmMtLjQ3LTUtNC04LjUzLTktOXYzLjA4QzE2IDUuNTEgMTguNTQgOCAxOC45NyAxMXpNMTMgMTguOTJWMjJjNS0uNDcgOC41My00IDktOWgtMy4wM2MtLjQzIDMtMi45NyA1LjQ5LTUuOTcgNS45MnoiIC8+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6IiAvPjwvZz4KPGcgaWQ9ImRyYWZ0cyI+PHBhdGggZD0iTTIxLjk5IDhjMC0uNzItLjM3LTEuMzUtLjk0LTEuN0wxMiAxIDIuOTUgNi4zQzIuMzggNi42NSAyIDcuMjggMiA4djEwYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJsLS4wMS0xMHpNMTIgMTNMMy43NCA3Ljg0IDEyIDNsOC4yNiA0Ljg0TDEyIDEzeiIgLz48L2c+CjxnIGlkPSJlamVjdCI+PHBhdGggZD0iTTUgMTdoMTR2Mkg1em03LTEyTDUuMzMgMTVoMTMuMzR6IiAvPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiIC8+PC9nPgo8ZyBpZD0iZXJyb3Itb3V0bGluZSI+PHBhdGggZD0iTTExIDE1aDJ2MmgtMnptMC04aDJ2NmgtMnptLjk5LTVDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iZXVyby1zeW1ib2wiPjxwYXRoIGQ9Ik0xNSAxOC41Yy0yLjUxIDAtNC42OC0xLjQyLTUuNzYtMy41SDE1di0ySDguNThjLS4wNS0uMzMtLjA4LS42Ni0uMDgtMXMuMDMtLjY3LjA4LTFIMTVWOUg5LjI0QzEwLjMyIDYuOTIgMTIuNSA1LjUgMTUgNS41YzEuNjEgMCAzLjA5LjU5IDQuMjMgMS41N0wyMSA1LjNDMTkuNDEgMy44NyAxNy4zIDMgMTUgM2MtMy45MiAwLTcuMjQgMi41MS04LjQ4IDZIM3YyaDMuMDZjLS4wNC4zMy0uMDYuNjYtLjA2IDEgMCAuMzQuMDIuNjcuMDYgMUgzdjJoMy41MmMxLjI0IDMuNDkgNC41NiA2IDguNDggNiAyLjMxIDAgNC40MS0uODcgNi0yLjNsLTEuNzgtMS43N2MtMS4xMy45OC0yLjYgMS41Ny00LjIyIDEuNTd6IiAvPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6IiAvPjwvZz4KPGcgaWQ9ImV2ZW50LXNlYXQiPjxwYXRoIGQ9Ik00IDE4djNoM3YtM2gxMHYzaDN2LTZINHptMTUtOGgzdjNoLTN6TTIgMTBoM3YzSDJ6bTE1IDNIN1Y1YzAtMS4xLjktMiAyLTJoNmMxLjEgMCAyIC45IDIgMnY4eiIgLz48L2c+CjxnIGlkPSJleGl0LXRvLWFwcCI+PHBhdGggZD0iTTEwLjA5IDE1LjU5TDExLjUgMTdsNS01LTUtNS0xLjQxIDEuNDFMMTIuNjcgMTFIM3YyaDkuNjdsLTIuNTggMi41OXpNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2NGgyVjVoMTR2MTRINXYtNEgzdjRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiIC8+PC9nPgo8ZyBpZD0iZXhwYW5kLW1vcmUiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6IiAvPjwvZz4KPGcgaWQ9ImV4cGxvcmUiPjxwYXRoIGQ9Ik0xMiAxMC45Yy0uNjEgMC0xLjEuNDktMS4xIDEuMXMuNDkgMS4xIDEuMSAxLjFjLjYxIDAgMS4xLS40OSAxLjEtMS4xcy0uNDktMS4xLTEuMS0xLjF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTIuMTkgMTIuMTlMNiAxOGwzLjgxLTguMTlMMTggNmwtMy44MSA4LjE5eiIgLz48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiIC8+PC9nPgo8ZyBpZD0iZmFjZSI+PHBhdGggZD0iTTkgMTEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1em02IDBjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOCAwLS4yOS4wMi0uNTguMDUtLjg2IDIuMzYtMS4wNSA0LjIzLTIuOTggNS4yMS01LjM3QzExLjA3IDguMzMgMTQuMDUgMTAgMTcuNDIgMTBjLjc4IDAgMS41My0uMDkgMi4yNS0uMjYuMjEuNzEuMzMgMS40Ny4zMyAyLjI2IDAgNC40MS0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJmYXZvcml0ZSI+PHBhdGggZD0iTTEyIDIxLjM1bC0xLjQ1LTEuMzJDNS40IDE1LjM2IDIgMTIuMjggMiA4LjUgMiA1LjQyIDQuNDIgMyA3LjUgM2MxLjc0IDAgMy40MS44MSA0LjUgMi4wOUMxMy4wOSAzLjgxIDE0Ljc2IDMgMTYuNSAzIDE5LjU4IDMgMjIgNS40MiAyMiA4LjVjMCAzLjc4LTMuNCA2Ljg2LTguNTUgMTEuNTRMMTIgMjEuMzV6IiAvPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiIgLz48L2c+CjxnIGlkPSJmZWVkYmFjayI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyAxMmgtMnYtMmgydjJ6bTAtNGgtMlY2aDJ2NHoiIC8+PC9nPgo8ZyBpZD0iZmlsZS1kb3dubG9hZCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiIC8+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiIC8+PC9nPgo8ZyBpZD0iZmlsdGVyLWxpc3QiPjxwYXRoIGQ9Ik0xMCAxOGg0di0yaC00djJ6TTMgNnYyaDE4VjZIM3ptMyA3aDEydi0ySDZ2MnoiIC8+PC9nPgo8ZyBpZD0iZmluZC1pbi1wYWdlIj48cGF0aCBkPSJNMjAgMTkuNTlWOGwtNi02SDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMuNDUgMCAuODUtLjE1IDEuMTktLjRsLTQuNDMtNC40M2MtLjguNTItMS43NC44My0yLjc2LjgzLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNWMwIDEuMDItLjMxIDEuOTYtLjgzIDIuNzVMMjAgMTkuNTl6TTkgMTNjMCAxLjY2IDEuMzQgMyAzIDNzMy0xLjM0IDMtMy0xLjM0LTMtMy0zLTMgMS4zNC0zIDN6IiAvPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiIgLz48L2c+CjxnIGlkPSJmaW5nZXJwcmludCI+PHBhdGggZD0iTTE3LjgxIDQuNDdjLS4wOCAwLS4xNi0uMDItLjIzLS4wNkMxNS42NiAzLjQyIDE0IDMgMTIuMDEgM2MtMS45OCAwLTMuODYuNDctNS41NyAxLjQxLS4yNC4xMy0uNTQuMDQtLjY4LS4yLS4xMy0uMjQtLjA0LS41NS4yLS42OEM3LjgyIDIuNTIgOS44NiAyIDEyLjAxIDJjMi4xMyAwIDMuOTkuNDcgNi4wMyAxLjUyLjI1LjEzLjM0LjQzLjIxLjY3LS4wOS4xOC0uMjYuMjgtLjQ0LjI4ek0zLjUgOS43MmMtLjEgMC0uMi0uMDMtLjI5LS4wOS0uMjMtLjE2LS4yOC0uNDctLjEyLS43Ljk5LTEuNCAyLjI1LTIuNSAzLjc1LTMuMjdDOS45OCA0LjA0IDE0IDQuMDMgMTcuMTUgNS42NWMxLjUuNzcgMi43NiAxLjg2IDMuNzUgMy4yNS4xNi4yMi4xMS41NC0uMTIuNy0uMjMuMTYtLjU0LjExLS43LS4xMi0uOS0xLjI2LTIuMDQtMi4yNS0zLjM5LTIuOTQtMi44Ny0xLjQ3LTYuNTQtMS40Ny05LjQuMDEtMS4zNi43LTIuNSAxLjctMy40IDIuOTYtLjA4LjE0LS4yMy4yMS0uMzkuMjF6bTYuMjUgMTIuMDdjLS4xMyAwLS4yNi0uMDUtLjM1LS4xNS0uODctLjg3LTEuMzQtMS40My0yLjAxLTIuNjQtLjY5LTEuMjMtMS4wNS0yLjczLTEuMDUtNC4zNCAwLTIuOTcgMi41NC01LjM5IDUuNjYtNS4zOXM1LjY2IDIuNDIgNS42NiA1LjM5YzAgLjI4LS4yMi41LS41LjVzLS41LS4yMi0uNS0uNWMwLTIuNDItMi4wOS00LjM5LTQuNjYtNC4zOS0yLjU3IDAtNC42NiAxLjk3LTQuNjYgNC4zOSAwIDEuNDQuMzIgMi43Ny45MyAzLjg1LjY0IDEuMTUgMS4wOCAxLjY0IDEuODUgMi40Mi4xOS4yLjE5LjUxIDAgLjcxLS4xMS4xLS4yNC4xNS0uMzcuMTV6bTcuMTctMS44NWMtMS4xOSAwLTIuMjQtLjMtMy4xLS44OS0xLjQ5LTEuMDEtMi4zOC0yLjY1LTIuMzgtNC4zOSAwLS4yOC4yMi0uNS41LS41cy41LjIyLjUuNWMwIDEuNDEuNzIgMi43NCAxLjk0IDMuNTYuNzEuNDggMS41NC43MSAyLjU0LjcxLjI0IDAgLjY0LS4wMyAxLjA0LS4xLjI3LS4wNS41My4xMy41OC40MS4wNS4yNy0uMTMuNTMtLjQxLjU4LS41Ny4xMS0xLjA3LjEyLTEuMjEuMTJ6TTE0LjkxIDIyYy0uMDQgMC0uMDktLjAxLS4xMy0uMDItMS41OS0uNDQtMi42My0xLjAzLTMuNzItMi4xLTEuNC0xLjM5LTIuMTctMy4yNC0yLjE3LTUuMjIgMC0xLjYyIDEuMzgtMi45NCAzLjA4LTIuOTQgMS43IDAgMy4wOCAxLjMyIDMuMDggMi45NCAwIDEuMDcuOTMgMS45NCAyLjA4IDEuOTRzMi4wOC0uODcgMi4wOC0xLjk0YzAtMy43Ny0zLjI1LTYuODMtNy4yNS02LjgzLTIuODQgMC01LjQ0IDEuNTgtNi42MSA0LjAzLS4zOS44MS0uNTkgMS43Ni0uNTkgMi44IDAgLjc4LjA3IDIuMDEuNjcgMy42MS4xLjI2LS4wMy41NS0uMjkuNjQtLjI2LjEtLjU1LS4wNC0uNjQtLjI5LS40OS0xLjMxLS43My0yLjYxLS43My0zLjk2IDAtMS4yLjIzLTIuMjkuNjgtMy4yNCAxLjMzLTIuNzkgNC4yOC00LjYgNy41MS00LjYgNC41NSAwIDguMjUgMy41MSA4LjI1IDcuODMgMCAxLjYyLTEuMzggMi45NC0zLjA4IDIuOTRzLTMuMDgtMS4zMi0zLjA4LTIuOTRjMC0xLjA3LS45My0xLjk0LTIuMDgtMS45NHMtMi4wOC44Ny0yLjA4IDEuOTRjMCAxLjcxLjY2IDMuMzEgMS44NyA0LjUxLjk1Ljk0IDEuODYgMS40NiAzLjI3IDEuODUuMjcuMDcuNDIuMzUuMzUuNjEtLjA1LjIzLS4yNi4zOC0uNDcuMzh6IiAvPjwvZz4KPGcgaWQ9ImZpcnN0LXBhZ2UiPjxwYXRoIGQ9Ik0xOC40MSAxNi41OUwxMy44MiAxMmw0LjU5LTQuNTlMMTcgNmwtNiA2IDYgNnpNNiA2aDJ2MTJINnoiIC8+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6IiAvPjwvZz4KPGcgaWQ9ImZsaWdodC1sYW5kIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em03LjE4LTUuNzNsNC4zNSAxLjE2IDUuMzEgMS40MmMuOC4yMSAxLjYyLS4yNiAxLjg0LTEuMDYuMjEtLjgtLjI2LTEuNjItMS4wNi0xLjg0bC01LjMxLTEuNDItMi43Ni05LjAyTDEwLjEyIDJ2OC4yOEw1LjE1IDguOTVsLS45My0yLjMyLTEuNDUtLjM5djUuMTdsMS42LjQzIDUuMzEgMS40M3oiIC8+PC9nPgo8ZyBpZD0iZmxpZ2h0LXRha2VvZmYiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTE5LjU3LTkuMzZjLS4yMS0uOC0xLjA0LTEuMjgtMS44NC0xLjA2TDE0LjkyIDEwbC02LjktNi40My0xLjkzLjUxIDQuMTQgNy4xNy00Ljk3IDEuMzMtMS45Ny0xLjU0LTEuNDUuMzkgMS44MiAzLjE2Ljc3IDEuMzMgMS42LS40MyA1LjMxLTEuNDIgNC4zNS0xLjE2TDIxIDExLjQ5Yy44MS0uMjMgMS4yOC0xLjA1IDEuMDctMS44NXoiIC8+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6IiAvPjwvZz4KPGcgaWQ9ImZsaXAtdG8tZnJvbnQiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTIgNHYtMkgzYzAgMS4xLjg5IDIgMiAyek0zIDloMlY3SDN2MnptMTIgMTJoMnYtMmgtMnYyem00LTE4SDljLTEuMTEgMC0yIC45LTIgMnYxMGMwIDEuMS44OSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEySDlWNWgxMHYxMHptLTggNmgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6IiAvPjwvZz4KPGcgaWQ9ImZvbGRlciI+PHBhdGggZD0iTTEwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMmgtOGwtMi0yeiIgLz48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiIC8+PC9nPgo8ZyBpZD0iZm9sZGVyLXNoYXJlZCI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0tNSAzYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptNCA4aC04di0xYzAtMS4zMyAyLjY3LTIgNC0yczQgLjY3IDQgMnYxeiIgLz48L2c+CjxnIGlkPSJmb250LWRvd25sb2FkIj48cGF0aCBkPSJNOS45MyAxMy41aDQuMTRMMTIgNy45OHpNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS00LjA1IDE2LjVsLTEuMTQtM0g5LjE3bC0xLjEyIDNINS45Nmw1LjExLTEzaDEuODZsNS4xMSAxM2gtMi4wOXoiIC8+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiIC8+PC9nPgo8ZyBpZD0iZnVsbHNjcmVlbiI+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6IiAvPjwvZz4KPGcgaWQ9ImZ1bGxzY3JlZW4tZXhpdCI+PHBhdGggZD0iTTUgMTZoM3YzaDJ2LTVINXYyem0zLThINXYyaDVWNUg4djN6bTYgMTFoMnYtM2gzdi0yaC01djV6bTItMTFWNWgtMnY1aDVWOGgtM3oiIC8+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6IiAvPjwvZz4KPGcgaWQ9ImdhdmVsIj48cGF0aCBkPSJNMSAyMWgxMnYySDF6TTUuMjQ1IDguMDdsMi44My0yLjgyNyAxNC4xNCAxNC4xNDItMi44MjggMi44Mjh6TTEyLjMxNyAxbDUuNjU3IDUuNjU2LTIuODMgMi44My01LjY1NC01LjY2ek0zLjgyNSA5LjQ4NWw1LjY1NyA1LjY1Ny0yLjgyOCAyLjgyOC01LjY1Ny01LjY1N3oiIC8+PC9nPgo8ZyBpZD0iZ2VzdHVyZSI+PHBhdGggZD0iTTQuNTkgNi44OWMuNy0uNzEgMS40LTEuMzUgMS43MS0xLjIyLjUuMiAwIDEuMDMtLjMgMS41Mi0uMjUuNDItMi44NiAzLjg5LTIuODYgNi4zMSAwIDEuMjguNDggMi4zNCAxLjM0IDIuOTguNzUuNTYgMS43NC43MyAyLjY0LjQ2IDEuMDctLjMxIDEuOTUtMS40IDMuMDYtMi43NyAxLjIxLTEuNDkgMi44My0zLjQ0IDQuMDgtMy40NCAxLjYzIDAgMS42NSAxLjAxIDEuNzYgMS43OS0zLjc4LjY0LTUuMzggMy42Ny01LjM4IDUuMzcgMCAxLjcgMS40NCAzLjA5IDMuMjEgMy4wOSAxLjYzIDAgNC4yOS0xLjMzIDQuNjktNi4xSDIxdi0yLjVoLTIuNDdjLS4xNS0xLjY1LTEuMDktNC4yLTQuMDMtNC4yLTIuMjUgMC00LjE4IDEuOTEtNC45NCAyLjg0LS41OC43My0yLjA2IDIuNDgtMi4yOSAyLjcyLS4yNS4zLS42OC44NC0xLjExLjg0LS40NSAwLS43Mi0uODMtLjM2LTEuOTIuMzUtMS4wOSAxLjQtMi44NiAxLjg1LTMuNTIuNzgtMS4xNCAxLjMtMS45MiAxLjMtMy4yOEM4Ljk1IDMuNjkgNy4zMSAzIDYuNDQgMyA1LjEyIDMgMy45NyA0IDMuNzIgNC4yNWMtLjM2LjM2LS42Ni42Ni0uODguOTNsMS43NSAxLjcxem05LjI5IDExLjY2Yy0uMzEgMC0uNzQtLjI2LS43NC0uNzIgMC0uNi43My0yLjIgMi44Ny0yLjc2LS4zIDIuNjktMS40MyAzLjQ4LTIuMTMgMy40OHoiIC8+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiIC8+PC9nPgo8ZyBpZD0iZ2lmIj48cGF0aCBkPSJNMTEuNSA5SDEzdjZoLTEuNXpNOSA5SDZjLS42IDAtMSAuNS0xIDF2NGMwIC41LjQgMSAxIDFoM2MuNiAwIDEtLjUgMS0xdi0ySDguNXYxLjVoLTJ2LTNIMTBWMTBjMC0uNS0uNC0xLTEtMXptMTAgMS41VjloLTQuNXY2SDE2di0yaDJ2LTEuNWgtMnYtMXoiIC8+PC9nPgo8ZyBpZD0iZ3JhZGUiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiIC8+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6IiAvPjwvZz4KPGcgaWQ9ImhlbHAiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE3aC0ydi0yaDJ2MnptMi4wNy03Ljc1bC0uOS45MkMxMy40NSAxMi45IDEzIDEzLjUgMTMgMTVoLTJ2LS41YzAtMS4xLjQ1LTIuMSAxLjE3LTIuODNsMS4yNC0xLjI2Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0xLjEtLjktMi0yLTJzLTIgLjktMiAySDhjMC0yLjIxIDEuNzktNCA0LTRzNCAxLjc5IDQgNGMwIC44OC0uMzYgMS42OC0uOTMgMi4yNXoiIC8+PC9nPgo8ZyBpZD0iaGVscC1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiIC8+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iaGlzdG9yeSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiIC8+PC9nPgo8ZyBpZD0iaG9tZSI+PHBhdGggZD0iTTEwIDIwdi02aDR2Nmg1di04aDNMMTIgMyAyIDEyaDN2OHoiIC8+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6IiAvPjwvZz4KPGcgaWQ9ImhvdXJnbGFzcy1mdWxsIj48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6IiAvPjwvZz4KPGcgaWQ9Imh0dHAiPjxwYXRoIGQ9Ik00LjUgMTFoLTJWOUgxdjZoMS41di0yLjVoMlYxNUg2VjlINC41djJ6bTIuNS0uNWgxLjVWMTVIMTB2LTQuNWgxLjVWOUg3djEuNXptNS41IDBIMTRWMTVoMS41di00LjVIMTdWOWgtNC41djEuNXptOS0xLjVIMTh2NmgxLjV2LTJoMmMuOCAwIDEuNS0uNyAxLjUtMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjV6bTAgMi41aC0ydi0xaDJ2MXoiIC8+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiIgLz48L2c+CjxnIGlkPSJpbXBvcnRhbnQtZGV2aWNlcyI+PHBhdGggZD0iTTIzIDExLjAxTDE4IDExYy0uNTUgMC0xIC40NS0xIDF2OWMwIC41NS40NSAxIDEgMWg1Yy41NSAwIDEtLjQ1IDEtMXYtOWMwLS41NS0uNDUtLjk5LTEtLjk5ek0yMyAyMGgtNXYtN2g1djd6TTIwIDJIMkMuODkgMiAwIDIuODkgMCA0djEyYzAgMS4xLjg5IDIgMiAyaDd2Mkg3djJoOHYtMmgtMnYtMmgydi0ySDJWNGgxOHY1aDJWNGMwLTEuMTEtLjktMi0yLTJ6bS04LjAzIDdMMTEgNmwtLjk3IDNIN2wyLjQ3IDEuNzYtLjk0IDIuOTEgMi40Ny0xLjggMi40NyAxLjgtLjk0LTIuOTFMMTUgOWgtMy4wM3oiIC8+PC9nPgo8ZyBpZD0iaW5ib3giPjxwYXRoIGQ9Ik0xOSAzSDQuOTljLTEuMTEgMC0xLjk4Ljg5LTEuOTggMkwzIDE5YzAgMS4xLjg4IDIgMS45OSAySDE5YzEuMSAwIDItLjkgMi0yVjVjMC0xLjExLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHoiIC8+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiIgLz48L2c+CjxnIGlkPSJpbmZvIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiIC8+PC9nPgo8ZyBpZD0iaW5mby1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiIC8+PC9nPgo8ZyBpZD0iaW52ZXJ0LWNvbG9ycyI+PHBhdGggZD0iTTE3LjY2IDcuOTNMMTIgMi4yNyA2LjM0IDcuOTNjLTMuMTIgMy4xMi0zLjEyIDguMTkgMCAxMS4zMUM3LjkgMjAuOCA5Ljk1IDIxLjU4IDEyIDIxLjU4YzIuMDUgMCA0LjEtLjc4IDUuNjYtMi4zNCAzLjEyLTMuMTIgMy4xMi04LjE5IDAtMTEuMzF6TTEyIDE5LjU5Yy0xLjYgMC0zLjExLS42Mi00LjI0LTEuNzZDNi42MiAxNi42OSA2IDE1LjE5IDYgMTMuNTlzLjYyLTMuMTEgMS43Ni00LjI0TDEyIDUuMXYxNC40OXoiIC8+PC9nPgo8ZyBpZD0ibGFiZWwiPjxwYXRoIGQ9Ik0xNy42MyA1Ljg0QzE3LjI3IDUuMzMgMTYuNjcgNSAxNiA1TDUgNS4wMUMzLjkgNS4wMSAzIDUuOSAzIDd2MTBjMCAxLjEuOSAxLjk5IDIgMS45OUwxNiAxOWMuNjcgMCAxLjI3LS4zMyAxLjYzLS44NEwyMiAxMmwtNC4zNy02LjE2eiIgLz48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiIC8+PC9nPgo8ZyBpZD0ibGFuZ3VhZ2UiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyem02LjkzIDZoLTIuOTVjLS4zMi0xLjI1LS43OC0yLjQ1LTEuMzgtMy41NiAxLjg0LjYzIDMuMzcgMS45MSA0LjMzIDMuNTZ6TTEyIDQuMDRjLjgzIDEuMiAxLjQ4IDIuNTMgMS45MSAzLjk2aC0zLjgyYy40My0xLjQzIDEuMDgtMi43NiAxLjkxLTMuOTZ6TTQuMjYgMTRDNC4xIDEzLjM2IDQgMTIuNjkgNCAxMnMuMS0xLjM2LjI2LTJoMy4zOGMtLjA4LjY2LS4xNCAxLjMyLS4xNCAyIDAgLjY4LjA2IDEuMzQuMTQgMkg0LjI2em0uODIgMmgyLjk1Yy4zMiAxLjI1Ljc4IDIuNDUgMS4zOCAzLjU2LTEuODQtLjYzLTMuMzctMS45LTQuMzMtMy41NnptMi45NS04SDUuMDhjLjk2LTEuNjYgMi40OS0yLjkzIDQuMzMtMy41NkM4LjgxIDUuNTUgOC4zNSA2Ljc1IDguMDMgOHpNMTIgMTkuOTZjLS44My0xLjItMS40OC0yLjUzLTEuOTEtMy45NmgzLjgyYy0uNDMgMS40My0xLjA4IDIuNzYtMS45MSAzLjk2ek0xNC4zNCAxNEg5LjY2Yy0uMDktLjY2LS4xNi0xLjMyLS4xNi0yIDAtLjY4LjA3LTEuMzUuMTYtMmg0LjY4Yy4wOS42NS4xNiAxLjMyLjE2IDIgMCAuNjgtLjA3IDEuMzQtLjE2IDJ6bS4yNSA1LjU2Yy42LTEuMTEgMS4wNi0yLjMxIDEuMzgtMy41NmgyLjk1Yy0uOTYgMS42NS0yLjQ5IDIuOTMtNC4zMyAzLjU2ek0xNi4zNiAxNGMuMDgtLjY2LjE0LTEuMzIuMTQtMiAwLS42OC0uMDYtMS4zNC0uMTQtMmgzLjM4Yy4xNi42NC4yNiAxLjMxLjI2IDJzLS4xIDEuMzYtLjI2IDJoLTMuMzh6IiAvPjwvZz4KPGcgaWQ9Imxhc3QtcGFnZSI+PHBhdGggZD0iTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiIgLz48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiIC8+PC9nPgo8ZyBpZD0ibGlnaHRidWxiLW91dGxpbmUiPjxwYXRoIGQ9Ik05IDIxYzAgLjU1LjQ1IDEgMSAxaDRjLjU1IDAgMS0uNDUgMS0xdi0xSDl2MXptMy0xOUM4LjE0IDIgNSA1LjE0IDUgOWMwIDIuMzggMS4xOSA0LjQ3IDMgNS43NFYxN2MwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMi4yNmMxLjgxLTEuMjcgMy0zLjM2IDMtNS43NCAwLTMuODYtMy4xNC03LTctN3ptMi44NSAxMS4xbC0uODUuNlYxNmgtNHYtMi4zbC0uODUtLjZDNy44IDEyLjE2IDcgMTAuNjMgNyA5YzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVjMCAxLjYzLS44IDMuMTYtMi4xNSA0LjF6IiAvPjwvZz4KPGcgaWQ9ImxpbmUtc3R5bGUiPjxwYXRoIGQ9Ik0zIDE2aDV2LTJIM3Yyem02LjUgMGg1di0yaC01djJ6bTYuNSAwaDV2LTJoLTV2MnpNMyAyMGgydi0ySDN2MnptNCAwaDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0zIDEyaDh2LTJIM3Yyem0xMCAwaDh2LTJoLTh2MnpNMyA0djRoMThWNEgzeiIgLz48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6IiAvPjwvZz4KPGcgaWQ9ImxpbmsiPjxwYXRoIGQ9Ik0zLjkgMTJjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjFoNFY3SDdjLTIuNzYgMC01IDIuMjQtNSA1czIuMjQgNSA1IDVoNHYtMS45SDdjLTEuNzEgMC0zLjEtMS4zOS0zLjEtMy4xek04IDEzaDh2LTJIOHYyem05LTZoLTR2MS45aDRjMS43MSAwIDMuMSAxLjM5IDMuMSAzLjFzLTEuMzkgMy4xLTMuMSAzLjFoLTRWMTdoNGMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNXoiIC8+PC9nPgo8ZyBpZD0ibGlzdCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTQgNGgxNHYtMkg3djJ6bTAgNGgxNHYtMkg3djJ6TTcgN3YyaDE0VjdIN3oiIC8+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6IiAvPjwvZz4KPGcgaWQ9ImxvY2stb3BlbiI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNmgxLjljMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0wIDEySDZWMTBoMTJ2MTB6IiAvPjwvZz4KPGcgaWQ9ImxvY2stb3V0bGluZSI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6TTguOSA2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xczMuMSAxLjM5IDMuMSAzLjF2Mkg4LjlWNnpNMTggMjBINlYxMGgxMnYxMHoiIC8+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiIC8+PC9nPgo8ZyBpZD0ibG95YWx0eSI+PHBhdGggZD0iTTIxLjQxIDExLjU4bC05LTlDMTIuMDUgMi4yMiAxMS41NSAyIDExIDJINGMtMS4xIDAtMiAuOS0yIDJ2N2MwIC41NS4yMiAxLjA1LjU5IDEuNDJsOSA5Yy4zNi4zNi44Ni41OCAxLjQxLjU4LjU1IDAgMS4wNS0uMjIgMS40MS0uNTlsNy03Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0uNTUtLjIzLTEuMDYtLjU5LTEuNDJ6TTUuNSA3QzQuNjcgNyA0IDYuMzMgNCA1LjVTNC42NyA0IDUuNSA0IDcgNC42NyA3IDUuNSA2LjMzIDcgNS41IDd6bTExLjc3IDguMjdMMTMgMTkuNTRsLTQuMjctNC4yN0M4LjI4IDE0LjgxIDggMTQuMTkgOCAxMy41YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41LjY5IDAgMS4zMi4yOCAxLjc3Ljc0bC43My43Mi43My0uNzNjLjQ1LS40NSAxLjA4LS43MyAxLjc3LS43MyAxLjM4IDAgMi41IDEuMTIgMi41IDIuNSAwIC42OS0uMjggMS4zMi0uNzMgMS43N3oiIC8+PC9nPgo8ZyBpZD0ibWFpbCI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCA0bC04IDUtOC01VjZsOCA1IDgtNXYyeiIgLz48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6IiAvPjwvZz4KPGcgaWQ9Im1hcmt1bnJlYWQtbWFpbGJveCI+PHBhdGggZD0iTTIwIDZIMTB2Nkg4VjRoNlYwSDZ2Nkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9Im1lbnUiPjxwYXRoIGQ9Ik0zIDE4aDE4di0ySDN2MnptMC01aDE4di0ySDN2MnptMC03djJoMThWNkgzeiIgLz48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0ibW9yZS12ZXJ0Ij48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9Im1vdG9yY3ljbGUiPjxwYXRoIGQ9Ik0xOS40NCA5LjAzTDE1LjQxIDVIMTF2MmgzLjU5bDIgMkg1Yy0yLjggMC01IDIuMi01IDVzMi4yIDUgNSA1YzIuNDYgMCA0LjQ1LTEuNjkgNC45LTRoMS42NWwyLjc3LTIuNzdjLS4yMS41NC0uMzIgMS4xNC0uMzIgMS43NyAwIDIuOCAyLjIgNSA1IDVzNS0yLjIgNS01YzAtMi42NS0xLjk3LTQuNzctNC41Ni00Ljk3ek03LjgyIDE1QzcuNCAxNi4xNSA2LjI4IDE3IDUgMTdjLTEuNjMgMC0zLTEuMzctMy0zczEuMzctMyAzLTNjMS4yOCAwIDIuNC44NSAyLjgyIDJINXYyaDIuODJ6TTE5IDE3Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3oiIC8+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiIgLz48L2c+CjxnIGlkPSJuZXh0LXdlZWsiPjxwYXRoIGQ9Ik0yMCA3aC00VjVjMC0uNTUtLjIyLTEuMDUtLjU5LTEuNDFDMTUuMDUgMy4yMiAxNC41NSAzIDE0IDNoLTRjLTEuMSAwLTIgLjktMiAydjJINGMtMS4xIDAtMiAuOS0yIDJ2MTFjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY5YzAtMS4xLS45LTItMi0yek0xMCA1aDR2MmgtNFY1em0xIDEzLjVsLTEtMSAzLTMtMy0zIDEtMSA0IDQtNCA0eiIgLz48L2c+CjxnIGlkPSJub3RlLWFkZCI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNGgtM3YzaC0ydi0zSDh2LTJoM3YtM2gydjNoM3Yyem0tMy03VjMuNUwxOC41IDlIMTN6IiAvPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiIgLz48L2c+CjxnIGlkPSJvcGFjaXR5Ij48cGF0aCBkPSJNMTcuNjYgOEwxMiAyLjM1IDYuMzQgOEM0Ljc4IDkuNTYgNCAxMS42NCA0IDEzLjY0cy43OCA0LjExIDIuMzQgNS42NyAzLjYxIDIuMzUgNS42NiAyLjM1IDQuMS0uNzkgNS42Ni0yLjM1UzIwIDE1LjY0IDIwIDEzLjY0IDE5LjIyIDkuNTYgMTcuNjYgOHpNNiAxNGMuMDEtMiAuNjItMy4yNyAxLjc2LTQuNEwxMiA1LjI3bDQuMjQgNC4zOEMxNy4zOCAxMC43NyAxNy45OSAxMiAxOCAxNEg2eiIgLz48L2c+CjxnIGlkPSJvcGVuLWluLWJyb3dzZXIiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg0di0ySDVWOGgxNHYxMGgtNHYyaDRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uODktMi0yLTJ6bS03IDZsLTQgNGgzdjZoMnYtNmgzbC00LTR6IiAvPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6IiAvPjwvZz4KPGcgaWQ9Im9wZW4td2l0aCI+PHBhdGggZD0iTTEwIDloNFY2aDNsLTUtNS01IDVoM3Yzem0tMSAxSDZWN2wtNSA1IDUgNXYtM2gzdi00em0xNCAybC01LTV2M2gtM3Y0aDN2M2w1LTV6bS05IDNoLTR2M0g3bDUgNSA1LTVoLTN2LTN6IiAvPjwvZz4KPGcgaWQ9InBhZ2V2aWV3Ij48cGF0aCBkPSJNMTEuNSA5QzEwLjEyIDkgOSAxMC4xMiA5IDExLjVzMS4xMiAyLjUgMi41IDIuNSAyLjUtMS4xMiAyLjUtMi41UzEyLjg4IDkgMTEuNSA5ek0yMCA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTMuMjEgMTQuMjFsLTIuOTEtMi45MWMtLjY5LjQ0LTEuNTEuNy0yLjM5LjdDOS4wMSAxNiA3IDEzLjk5IDcgMTEuNVM5LjAxIDcgMTEuNSA3IDE2IDkuMDEgMTYgMTEuNWMwIC44OC0uMjYgMS42OS0uNyAyLjM5bDIuOTEgMi45LTEuNDIgMS40MnoiIC8+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiIC8+PC9nPgo8ZyBpZD0icGF5bWVudCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiIC8+PC9nPgo8ZyBpZD0icGVybS1jYW1lcmEtbWljIj48cGF0aCBkPSJNMjAgNWgtMy4xN0wxNSAzSDlMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoN3YtMi4wOWMtMi44My0uNDgtNS0yLjk0LTUtNS45MWgyYzAgMi4yMSAxLjc5IDQgNCA0czQtMS43OSA0LTRoMmMwIDIuOTctMi4xNyA1LjQzLTUgNS45MVYyMWg3YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bS02IDhjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yVjljMC0xLjEuOS0yIDItMnMyIC45IDIgMnY0eiIgLz48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiIgLz48L2c+CjxnIGlkPSJwZXJtLWRhdGEtc2V0dGluZyI+PHBhdGggZD0iTTE4Ljk5IDExLjVjLjM0IDAgLjY3LjAzIDEgLjA3TDIwIDAgMCAyMGgxMS41NmMtLjA0LS4zMy0uMDctLjY2LS4wNy0xIDAtNC4xNCAzLjM2LTcuNSA3LjUtNy41em0zLjcxIDcuOTljLjAyLS4xNi4wNC0uMzIuMDQtLjQ5IDAtLjE3LS4wMS0uMzMtLjA0LS40OWwxLjA2LS44M2MuMDktLjA4LjEyLS4yMS4wNi0uMzJsLTEtMS43M2MtLjA2LS4xMS0uMTktLjE1LS4zMS0uMTFsLTEuMjQuNWMtLjI2LS4yLS41NC0uMzctLjg1LS40OWwtLjE5LTEuMzJjLS4wMS0uMTItLjEyLS4yMS0uMjQtLjIxaC0yYy0uMTIgMC0uMjMuMDktLjI1LjIxbC0uMTkgMS4zMmMtLjMuMTMtLjU5LjI5LS44NS40OWwtMS4yNC0uNWMtLjExLS4wNC0uMjQgMC0uMzEuMTFsLTEgMS43M2MtLjA2LjExLS4wNC4yNC4wNi4zMmwxLjA2LjgzYy0uMDIuMTYtLjAzLjMyLS4wMy40OSAwIC4xNy4wMS4zMy4wMy40OWwtMS4wNi44M2MtLjA5LjA4LS4xMi4yMS0uMDYuMzJsMSAxLjczYy4wNi4xMS4xOS4xNS4zMS4xMWwxLjI0LS41Yy4yNi4yLjU0LjM3Ljg1LjQ5bC4xOSAxLjMyYy4wMi4xMi4xMi4yMS4yNS4yMWgyYy4xMiAwIC4yMy0uMDkuMjUtLjIxbC4xOS0xLjMyYy4zLS4xMy41OS0uMjkuODQtLjQ5bDEuMjUuNWMuMTEuMDQuMjQgMCAuMzEtLjExbDEtMS43M2MuMDYtLjExLjAzLS4yNC0uMDYtLjMybC0xLjA3LS44M3ptLTMuNzEgMS4wMWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6IiAvPjwvZz4KPGcgaWQ9InBlcm0tZGV2aWNlLWluZm9ybWF0aW9uIj48cGF0aCBkPSJNMTMgN2gtMnYyaDJWN3ptMCA0aC0ydjZoMnYtNnptNC05Ljk5TDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiIgLz48L2c+CjxnIGlkPSJwZXJtLW1lZGlhIj48cGF0aCBkPSJNMiA2SDB2NWguMDFMMCAyMGMwIDEuMS45IDIgMiAyaDE4di0ySDJWNnptMjAtMmgtOGwtMi0ySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6TTcgMTVsNC41LTYgMy41IDQuNTEgMi41LTMuMDFMMjEgMTVIN3oiIC8+PC9nPgo8ZyBpZD0icGVybS1waG9uZS1tc2ciPjxwYXRoIGQ9Ik0yMCAxNS41Yy0xLjI1IDAtMi40NS0uMi0zLjU3LS41Ny0uMzUtLjExLS43NC0uMDMtMS4wMi4yNGwtMi4yIDIuMmMtMi44My0xLjQ0LTUuMTUtMy43NS02LjU5LTYuNThsMi4yLTIuMjFjLjI4LS4yNy4zNi0uNjYuMjUtMS4wMUM4LjcgNi40NSA4LjUgNS4yNSA4LjUgNGMwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxIDAgOS4zOSA3LjYxIDE3IDE3IDE3IC41NSAwIDEtLjQ1IDEtMXYtMy41YzAtLjU1LS40NS0xLTEtMXpNMTIgM3YxMGwzLTNoNlYzaC05eiIgLz48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6IiAvPjwvZz4KPGcgaWQ9InBldHMiPjxjaXJjbGUgY3g9IjQuNSIgY3k9IjkuNSIgcj0iMi41IiAvPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjUuNSIgcj0iMi41IiAvPjxjaXJjbGUgY3g9IjE5LjUiIGN5PSI5LjUiIHI9IjIuNSIgLz48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6IiAvPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZSI+PHBhdGggZD0iTTE5IDdoLTh2Nmg4Vjd6bTItNEgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDEuOTggMiAxLjk4aDE4YzEuMSAwIDItLjg4IDItMS45OFY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OGgxOHYxNC4wM3oiIC8+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlLWFsdCI+PHBhdGggZD0iTTE5IDExaC04djZoOHYtNnptNCA4VjQuOThDMjMgMy44OCAyMi4xIDMgMjEgM0gzYy0xLjEgMC0yIC44OC0yIDEuOThWMTljMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnptLTIgLjAySDNWNC45N2gxOHYxNC4wNXoiIC8+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiIgLz48L2c+CjxnIGlkPSJwb2x5bWVyIj48cGF0aCBkPSJNMTkgNGgtNEw3LjExIDE2LjYzIDQuNSAxMiA5IDRINUwuNSAxMiA1IDIwaDRsNy44OS0xMi42M0wxOS41IDEyIDE1IDIwaDRsNC41LTh6IiAvPjwvZz4KPGcgaWQ9InBvd2VyLXNldHRpbmdzLW5ldyI+PHBhdGggZD0iTTEzIDNoLTJ2MTBoMlYzem00LjgzIDIuMTdsLTEuNDIgMS40MkMxNy45OSA3Ljg2IDE5IDkuODEgMTkgMTJjMCAzLjg3LTMuMTMgNy03IDdzLTctMy4xMy03LTdjMC0yLjE5IDEuMDEtNC4xNCAyLjU4LTUuNDJMNi4xNyA1LjE3QzQuMjMgNi44MiAzIDkuMjYgMyAxMmMwIDQuOTcgNC4wMyA5IDkgOXM5LTQuMDMgOS05YzAtMi43NC0xLjIzLTUuMTgtMy4xNy02LjgzeiIgLz48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiIC8+PC9nPgo8ZyBpZD0icHJpbnQiPjxwYXRoIGQ9Ik0xOSA4SDVjLTEuNjYgMC0zIDEuMzQtMyAzdjZoNHY0aDEydi00aDR2LTZjMC0xLjY2LTEuMzQtMy0zLTN6bS0zIDExSDh2LTVoOHY1em0zLTdjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptLTEtOUg2djRoMTJWM3oiIC8+PC9nPgo8ZyBpZD0icXVlcnktYnVpbGRlciI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiIC8+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6IiAvPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi1jaGVja2VkIj48cGF0aCBkPSJNMTIgN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNSA1LTIuMjQgNS01LTIuMjQtNS01LTV6bTAtNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6IiAvPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiIC8+PC9nPgo8ZyBpZD0icmVjb3JkLXZvaWNlLW92ZXIiPjxjaXJjbGUgY3g9IjkiIGN5PSI5IiByPSI0IiAvPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6IiAvPjwvZz4KPGcgaWQ9InJlZGVlbSI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiIgLz48L2c+CjxnIGlkPSJyZWRvIj48cGF0aCBkPSJNMTguNCAxMC42QzE2LjU1IDguOTkgMTQuMTUgOCAxMS41IDhjLTQuNjUgMC04LjU4IDMuMDMtOS45NiA3LjIyTDMuOSAxNmMxLjA1LTMuMTkgNC4wNS01LjUgNy42LTUuNSAxLjk1IDAgMy43My43MiA1LjEyIDEuODhMMTMgMTZoOVY3bC0zLjYgMy42eiIgLz48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6IiAvPjwvZz4KPGcgaWQ9InJlbW92ZSI+PHBhdGggZD0iTTE5IDEzSDV2LTJoMTR2MnoiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFIN3YtMmgxMHYyeiIgLz48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLXNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik0yMi43MyAyMi43M0wyLjc3IDIuNzcgMiAybC0uNzMtLjczTDAgMi41NGw0LjM5IDQuMzkgMi4yMSA0LjY2LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmg3LjQ2bDEuMzggMS4zOGMtLjUuMzYtLjgzLjk1LS44MyAxLjYyIDAgMS4xLjg5IDIgMS45OSAyIC42NyAwIDEuMjYtLjMzIDEuNjItLjg0TDIxLjQ2IDI0bDEuMjctMS4yN3pNNy40MiAxNWMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDIuMzZsMiAySDcuNDJ6bTguMTMtMmMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINi41NGw5LjAxIDl6TTcgMThjLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InJlb3JkZXIiPjxwYXRoIGQ9Ik0zIDE1aDE4di0ySDN2MnptMCA0aDE4di0ySDN2MnptMC04aDE4VjlIM3Yyem0wLTZ2MmgxOFY1SDN6IiAvPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiIgLz48L2c+CjxnIGlkPSJyZXBseS1hbGwiPjxwYXRoIGQ9Ik03IDhWNWwtNyA3IDcgN3YtM2wtNC00IDQtNHptNiAxVjVsLTcgNyA3IDd2LTQuMWM1IDAgOC41IDEuNiAxMSA1LjEtMS01LTQtMTAtMTEtMTF6IiAvPjwvZz4KPGcgaWQ9InJlcG9ydCI+PHBhdGggZD0iTTE1LjczIDNIOC4yN0wzIDguMjd2Ny40Nkw4LjI3IDIxaDcuNDZMMjEgMTUuNzNWOC4yN0wxNS43MyAzek0xMiAxNy4zYy0uNzIgMC0xLjMtLjU4LTEuMy0xLjMgMC0uNzIuNTgtMS4zIDEuMy0xLjMuNzIgMCAxLjMuNTggMS4zIDEuMyAwIC43Mi0uNTggMS4zLTEuMyAxLjN6bTEtNC4zaC0yVjdoMnY2eiIgLz48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0icmVzdG9yZSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiIC8+PC9nPgo8ZyBpZD0icmVzdG9yZS1wYWdlIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0tMiAxNmMtMi4wNSAwLTMuODEtMS4yNC00LjU4LTNoMS43MWMuNjMuOSAxLjY4IDEuNSAyLjg3IDEuNSAxLjkzIDAgMy41LTEuNTcgMy41LTMuNVMxMy45MyA5LjUgMTIgOS41Yy0xLjM1IDAtMi41Mi43OC0zLjEgMS45bDEuNiAxLjZoLTRWOWwxLjMgMS4zQzguNjkgOC45MiAxMC4yMyA4IDEyIDhjMi43NiAwIDUgMi4yNCA1IDVzLTIuMjQgNS01IDV6IiAvPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiIC8+PC9nPgo8ZyBpZD0icm91bmRlZC1jb3JuZXIiPjxwYXRoIGQ9Ik0xOSAxOWgydjJoLTJ2LTJ6bTAtMmgydi0yaC0ydjJ6TTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTAtNGgyVjNIM3Yyem00IDBoMlYzSDd2MnptOCAxNmgydi0yaC0ydjJ6bS00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem0tOCAwaDJ2LTJIN3Yyem0tNCAwaDJ2LTJIM3Yyek0yMSA4YzAtMi43Ni0yLjI0LTUtNS01aC01djJoNWMxLjY1IDAgMyAxLjM1IDMgM3Y1aDJWOHoiIC8+PC9nPgo8ZyBpZD0icm93aW5nIj48cGF0aCBkPSJNOC41IDE0LjVMNCAxOWwxLjUgMS41TDkgMTdoMmwtMi41LTIuNXpNMTUgMWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTYgMjAuMDFMMTggMjRsLTIuOTktMy4wMVYxOS41bC03LjEtNy4wOWMtLjMxLjA1LS42MS4wNy0uOTEuMDd2LTIuMTZjMS42Ni4wMyAzLjYxLS44NyA0LjY3LTIuMDRsMS40LTEuNTVjLjE5LS4yMS40My0uMzguNjktLjUuMjktLjE0LjYyLS4yMy45Ni0uMjNoLjAzQzE1Ljk5IDYuMDEgMTcgNy4wMiAxNyA4LjI2djUuNzVjMCAuODQtLjM1IDEuNjEtLjkyIDIuMTZsLTMuNTgtMy41OHYtMi4yN2MtLjYzLjUyLTEuNDMgMS4wMi0yLjI5IDEuMzlMMTYuNSAxOEgxOGwzIDMuMDF6IiAvPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiIC8+PC9nPgo8ZyBpZD0ic2NoZWR1bGUiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6IiAvPjwvZz4KPGcgaWQ9InNlYXJjaCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6IiAvPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiIC8+PC9nPgo8ZyBpZD0ic2VuZCI+PHBhdGggZD0iTTIuMDEgMjFMMjMgMTIgMi4wMSAzIDIgMTBsMTUgMi0xNSAyeiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncyI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJhY2t1cC1yZXN0b3JlIj48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1ibHVldG9vdGgiPjxwYXRoIGQ9Ik0xMSAyNGgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6bTggMGgydi0yaC0ydjJ6bTIuNzEtMTguMjlMMTIgMGgtMXY3LjU5TDYuNDEgMyA1IDQuNDEgMTAuNTkgMTAgNSAxNS41OSA2LjQxIDE3IDExIDEyLjQxVjIwaDFsNS43MS01LjcxLTQuMy00LjI5IDQuMy00LjI5ek0xMyAzLjgzbDEuODggMS44OEwxMyA3LjU5VjMuODN6bTEuODggMTAuNDZMMTMgMTYuMTd2LTMuNzZsMS44OCAxLjg4eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWNlbGwiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0xNiAuMDFMOCAwQzYuOSAwIDYgLjkgNiAydjE2YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNiAxNkg4VjRoOHYxMnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtZXRoZXJuZXQiPjxwYXRoIGQ9Ik03Ljc3IDYuNzZMNi4yMyA1LjQ4LjgyIDEybDUuNDEgNi41MiAxLjU0LTEuMjhMMy40MiAxMmw0LjM1LTUuMjR6TTcgMTNoMnYtMkg3djJ6bTEwLTJoLTJ2Mmgydi0yem0tNiAyaDJ2LTJoLTJ2MnptNi43Ny03LjUybC0xLjU0IDEuMjhMMjAuNTggMTJsLTQuMzUgNS4yNCAxLjU0IDEuMjhMMjMuMTggMTJsLTUuNDEtNi41MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb25lbnQiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvc2l0ZSI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1zdmlkZW8iPjxwYXRoIGQ9Ik04IDExLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41UzUgMTAuNjcgNSAxMS41IDUuNjcgMTMgNi41IDEzIDggMTIuMzMgOCAxMS41em03LTVjMC0uODMtLjY3LTEuNS0xLjUtMS41aC0zQzkuNjcgNSA5IDUuNjcgOSA2LjVTOS42NyA4IDEwLjUgOGgzYy44MyAwIDEuNS0uNjcgMS41LTEuNXpNOC41IDE1Yy0uODMgMC0xLjUuNjctMS41IDEuNVM3LjY3IDE4IDguNSAxOHMxLjUtLjY3IDEuNS0xLjVTOS4zMyAxNSA4LjUgMTV6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyczQuOTMgMTEgMTEgMTEgMTEtNC45MyAxMS0xMVMxOC4wNyAxIDEyIDF6bTAgMjBjLTQuOTYgMC05LTQuMDQtOS05czQuMDQtOSA5LTkgOSA0LjA0IDkgOS00LjA0IDktOSA5em01LjUtMTFjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0tMiA1Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtb3ZlcnNjYW4iPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBvd2VyIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptMi0yMmgtMnYxMGgyVjJ6bTMuNTYgMi40NGwtMS40NSAxLjQ1QzE2Ljg0IDYuOTQgMTggOC44MyAxOCAxMWMwIDMuMzEtMi42OSA2LTYgNnMtNi0yLjY5LTYtNmMwLTIuMTcgMS4xNi00LjA2IDIuODgtNS4xMkw3LjQ0IDQuNDRDNS4zNiA1Ljg4IDQgOC4yOCA0IDExYzAgNC40MiAzLjU4IDggOCA4czgtMy41OCA4LThjMC0yLjcyLTEuMzYtNS4xMi0zLjQ0LTYuNTZ6TTE1IDI0aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcmVtb3RlIj48cGF0aCBkPSJNMTUgOUg5Yy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTFWMTBjMC0uNTUtLjQ1LTEtMS0xem0tMyA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNNy4wNSA2LjA1bDEuNDEgMS40MUM5LjM3IDYuNTYgMTAuNjIgNiAxMiA2czIuNjMuNTYgMy41NCAxLjQ2bDEuNDEtMS40MUMxNS42OCA0Ljc4IDEzLjkzIDQgMTIgNHMtMy42OC43OC00Ljk1IDIuMDV6TTEyIDBDOC45NiAwIDYuMjEgMS4yMyA0LjIyIDMuMjJsMS40MSAxLjQxQzcuMjYgMy4wMSA5LjUxIDIgMTIgMnM0Ljc0IDEuMDEgNi4zNiAyLjY0bDEuNDEtMS40MUMxNy43OSAxLjIzIDE1LjA0IDAgMTIgMHoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiIgLz48L2c+CjxnIGlkPSJzaG9wIj48cGF0aCBkPSJNMTYgNlY0YzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2MkgydjEzYzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZoLTZ6bS02LTJoNHYyaC00VjR6TTkgMThWOWw3LjUgNEw5IDE4eiIgLz48L2c+CjxnIGlkPSJzaG9wLXR3byI+PHBhdGggZD0iTTMgOUgxdjExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0ySDNWOXptMTUtNFYzYzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2Mkg1djExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0yVjVoLTV6bS02LTJoNHYyaC00VjN6bTAgMTJWOGw1LjUgMy01LjUgNHoiIC8+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiIgLz48L2c+CjxnIGlkPSJzaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnpNMSAydjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDcuNDVjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuNTgtNi40OWMuMDgtLjE0LjEyLS4zMS4xMi0uNDggMC0uNTUtLjQ1LTEtMS0xSDUuMjFsLS45NC0ySDF6bTE2IDE2Yy0xLjEgMC0xLjk5LjktMS45OSAycy44OSAyIDEuOTkgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0ic29ydCI+PHBhdGggZD0iTTMgMThoNnYtMkgzdjJ6TTMgNnYyaDE4VjZIM3ptMCA3aDEydi0ySDN2MnoiIC8+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiIgLz48L2c+CjxnIGlkPSJzcGVha2VyLW5vdGVzLW9mZiI+PHBhdGggZD0iTTEwLjU0IDExbC0uNTQtLjU0TDcuNTQgOCA2IDYuNDYgMi4zOCAyLjg0IDEuMjcgMS43MyAwIDNsMi4wMSAyLjAxTDIgMjJsNC00aDlsNS43MyA1LjczTDIyIDIyLjQ2IDE3LjU0IDE4bC03LTd6TTggMTRINnYtMmgydjJ6bS0yLTNWOWwyIDJINnptMTQtOUg0LjA4TDEwIDcuOTJWNmg4djJoLTcuOTJsMSAxSDE4djJoLTQuOTJsNi45OSA2Ljk5QzIxLjE0IDE3Ljk1IDIyIDE3LjA4IDIyIDE2VjRjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InNwZWxsY2hlY2siPjxwYXRoIGQ9Ik0xMi40NSAxNmgyLjA5TDkuNDMgM0g3LjU3TDIuNDYgMTZoMi4wOWwxLjEyLTNoNS42NGwxLjE0IDN6bS02LjAyLTVMOC41IDUuNDggMTAuNTcgMTFINi40M3ptMTUuMTYuNTlsLTguMDkgOC4wOUw5LjgzIDE2bC0xLjQxIDEuNDEgNS4wOSA1LjA5TDIzIDEzbC0xLjQxLTEuNDF6IiAvPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiIC8+PC9nPgo8ZyBpZD0ic3Rhci1ib3JkZXIiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40bC0zLjc2IDIuMjcgMS00LjI4LTMuMzItMi44OCA0LjM4LS4zOEwxMiA2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiIgLz48L2c+CjxnIGlkPSJzdGFyLWhhbGYiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40VjYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6IiAvPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6IiAvPjwvZz4KPGcgaWQ9InN0b3JlIj48cGF0aCBkPSJNMjAgNEg0djJoMTZWNHptMSAxMHYtMmwtMS01SDRsLTEgNXYyaDF2NmgxMHYtNmg0djZoMnYtNmgxem0tOSA0SDZ2LTRoNnY0eiIgLz48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctbGVmdCI+PHBhdGggZD0iTTExIDlsMS40MiAxLjQyTDguODMgMTRIMThWNGgydjEySDguODNsMy41OSAzLjU4TDExIDIxbC02LTYgNi02eiIgLz48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6IiAvPjwvZz4KPGcgaWQ9InN1YmplY3QiPjxwYXRoIGQ9Ik0xNCAxN0g0djJoMTB2LTJ6bTYtOEg0djJoMTZWOXpNNCAxNWgxNnYtMkg0djJ6TTQgNXYyaDE2VjVINHoiIC8+PC9nPgo8ZyBpZD0ic3VwZXJ2aXNvci1hY2NvdW50Ij48cGF0aCBkPSJNMTYuNSAxMmMxLjM4IDAgMi40OS0xLjEyIDIuNDktMi41UzE3Ljg4IDcgMTYuNSA3QzE1LjEyIDcgMTQgOC4xMiAxNCA5LjVzMS4xMiAyLjUgMi41IDIuNXpNOSAxMWMxLjY2IDAgMi45OS0xLjM0IDIuOTktM1MxMC42NiA1IDkgNUM3LjM0IDUgNiA2LjM0IDYgOHMxLjM0IDMgMyAzem03LjUgM2MtMS44MyAwLTUuNS45Mi01LjUgMi43NVYxOWgxMXYtMi4yNWMwLTEuODMtMy42Ny0yLjc1LTUuNS0yLjc1ek05IDEzYy0yLjMzIDAtNyAxLjE3LTcgMy41VjE5aDd2LTIuMjVjMC0uODUuMzMtMi4zNCAyLjM3LTMuNDdDMTAuNSAxMy4xIDkuNjYgMTMgOSAxM3oiIC8+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiIC8+PC9nPgo8ZyBpZD0ic3dhcC12ZXJ0Ij48cGF0aCBkPSJNMTYgMTcuMDFWMTBoLTJ2Ny4wMWgtM0wxNSAyMWw0LTMuOTloLTN6TTkgM0w1IDYuOTloM1YxNGgyVjYuOTloM0w5IDN6IiAvPjwvZz4KPGcgaWQ9InN3YXAtdmVydGljYWwtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNNi41IDlMMTAgNS41IDEzLjUgOUgxMXY0SDlWOUg2LjV6bTExIDZMMTQgMTguNSAxMC41IDE1SDEzdi00aDJ2NGgyLjV6IiAvPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJ0YWIiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkgzVjVoMTB2NGg4djEweiIgLz48L2c+CjxnIGlkPSJ0YWItdW5zZWxlY3RlZCI+PHBhdGggZD0iTTEgOWgyVjdIMXYyem0wIDRoMnYtMkgxdjJ6bTAtOGgyVjNjLTEuMSAwLTIgLjktMiAyem04IDE2aDJ2LTJIOXYyem0tOC00aDJ2LTJIMXYyem0yIDR2LTJIMWMwIDEuMS45IDIgMiAyek0yMSAzaC04djZoMTBWNWMwLTEuMS0uOS0yLTItMnptMCAxNGgydi0yaC0ydjJ6TTkgNWgyVjNIOXYyek01IDIxaDJ2LTJINXYyek01IDVoMlYzSDV2MnptMTYgMTZjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC04aDJ2LTJoLTJ2MnptLTggOGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6IiAvPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiIgLz48L2c+CjxnIGlkPSJ0aGVhdGVycyI+PHBhdGggZD0iTTE4IDN2MmgtMlYzSDh2Mkg2VjNINHYxOGgydi0yaDJ2Mmg4di0yaDJ2MmgyVjNoLTJ6TTggMTdINnYtMmgydjJ6bTAtNEg2di0yaDJ2MnptMC00SDZWN2gydjJ6bTEwIDhoLTJ2LTJoMnYyem0wLTRoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjJ6IiAvPjwvZz4KPGcgaWQ9InRodW1iLWRvd24iPjxwYXRoIGQ9Ik0xNSAzSDZjLS44MyAwLTEuNTQuNS0xLjg0IDEuMjJsLTMuMDIgNy4wNWMtLjA5LjIzLS4xNC40Ny0uMTQuNzN2MS45MWwuMDEuMDFMMSAxNGMwIDEuMS45IDIgMiAyaDYuMzFsLS45NSA0LjU3LS4wMy4zMmMwIC40MS4xNy43OS40NCAxLjA2TDkuODMgMjNsNi41OS02LjU5Yy4zNi0uMzYuNTgtLjg2LjU4LTEuNDFWNWMwLTEuMS0uOS0yLTItMnptNCAwdjEyaDRWM2gtNHoiIC8+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiIC8+PC9nPgo8ZyBpZD0idGh1bWJzLXVwLWRvd24iPjxwYXRoIGQ9Ik0xMiA2YzAtLjU1LS40NS0xLTEtMUg1LjgybC42Ni0zLjE4LjAyLS4yM2MwLS4zMS0uMTMtLjU5LS4zMy0uOEw1LjM4IDAgLjQ0IDQuOTRDLjE3IDUuMjEgMCA1LjU5IDAgNnY2LjVjMCAuODMuNjcgMS41IDEuNSAxLjVoNi43NWMuNjIgMCAxLjE1LS4zOCAxLjM4LS45MWwyLjI2LTUuMjljLjA3LS4xNy4xMS0uMzYuMTEtLjU1VjZ6bTEwLjUgNGgtNi43NWMtLjYyIDAtMS4xNS4zOC0xLjM4LjkxbC0yLjI2IDUuMjljLS4wNy4xNy0uMTEuMzYtLjExLjU1VjE4YzAgLjU1LjQ1IDEgMSAxaDUuMThsLS42NiAzLjE4LS4wMi4yNGMwIC4zMS4xMy41OS4zMy44bC43OS43OCA0Ljk0LTQuOTRjLjI3LS4yNy40NC0uNjUuNDQtMS4wNnYtNi41YzAtLjgzLS42Ny0xLjUtMS41LTEuNXoiIC8+PC9nPgo8ZyBpZD0idGltZWxpbmUiPjxwYXRoIGQ9Ik0yMyA4YzAgMS4xLS45IDItMiAyLS4xOCAwLS4zNS0uMDItLjUxLS4wN2wtMy41NiAzLjU1Yy4wNS4xNi4wNy4zNC4wNy41MiAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTJjMC0uMTguMDItLjM2LjA3LS41MmwtMi41NS0yLjU1Yy0uMTYuMDUtLjM0LjA3LS41Mi4wN3MtLjM2LS4wMi0uNTItLjA3bC00LjU1IDQuNTZjLjA1LjE2LjA3LjMzLjA3LjUxIDAgMS4xLS45IDItMiAycy0yLS45LTItMiAuOS0yIDItMmMuMTggMCAuMzUuMDIuNTEuMDdsNC41Ni00LjU1QzguMDIgOS4zNiA4IDkuMTggOCA5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAuMTgtLjAyLjM2LS4wNy41MmwyLjU1IDIuNTVjLjE2LS4wNS4zNC0uMDcuNTItLjA3cy4zNi4wMi41Mi4wN2wzLjU1LTMuNTZDMTkuMDIgOC4zNSAxOSA4LjE4IDE5IDhjMC0xLjEuOS0yIDItMnMyIC45IDIgMnoiIC8+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0idG9kYXkiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjhoMTR2MTF6TTcgMTBoNXY1SDd6IiAvPjwvZz4KPGcgaWQ9InRvbGwiPjxwYXRoIGQ9Ik0xNSA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4IDgtMy41OCA4LTgtMy41OC04LTgtOHptMCAxNGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6TTMgMTJjMC0yLjYxIDEuNjctNC44MyA0LTUuNjVWNC4yNkMzLjU1IDUuMTUgMSA4LjI3IDEgMTJzMi41NSA2Ljg1IDYgNy43NHYtMi4wOWMtMi4zMy0uODItNC0zLjA0LTQtNS42NXoiIC8+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6IiAvPjwvZz4KPGcgaWQ9InRyYWNrLWNoYW5nZXMiPjxwYXRoIGQ9Ik0xOS4wNyA0LjkzbC0xLjQxIDEuNDFDMTkuMSA3Ljc5IDIwIDkuNzkgMjAgMTJjMCA0LjQyLTMuNTggOC04IDhzLTgtMy41OC04LThjMC00LjA4IDMuMDUtNy40NCA3LTcuOTN2Mi4wMkM4LjE2IDYuNTcgNiA5LjAzIDYgMTJjMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmMwLTEuNjYtLjY3LTMuMTYtMS43Ni00LjI0bC0xLjQxIDEuNDFDMTUuNTUgOS45IDE2IDEwLjkgMTYgMTJjMCAyLjIxLTEuNzkgNC00IDRzLTQtMS43OS00LTRjMC0xLjg2IDEuMjgtMy40MSAzLTMuODZ2Mi4xNGMtLjYuMzUtMSAuOTgtMSAxLjcyIDAgMS4xLjkgMiAyIDJzMi0uOSAyLTJjMC0uNzQtLjQtMS4zOC0xLTEuNzJWMmgtMUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwYzAtMi43Ni0xLjEyLTUuMjYtMi45My03LjA3eiIgLz48L2c+CjxnIGlkPSJ0cmFuc2xhdGUiPjxwYXRoIGQ9Ik0xMi44NyAxNS4wN2wtMi41NC0yLjUxLjAzLS4wM2MxLjc0LTEuOTQgMi45OC00LjE3IDMuNzEtNi41M0gxN1Y0aC03VjJIOHYySDF2MS45OWgxMS4xN0MxMS41IDcuOTIgMTAuNDQgOS43NSA5IDExLjM1IDguMDcgMTAuMzIgNy4zIDkuMTkgNi42OSA4aC0yYy43MyAxLjYzIDEuNzMgMy4xNyAyLjk4IDQuNTZsLTUuMDkgNS4wMkw0IDE5bDUtNSAzLjExIDMuMTEuNzYtMi4wNHpNMTguNSAxMGgtMkwxMiAyMmgybDEuMTItM2g0Ljc1TDIxIDIyaDJsLTQuNS0xMnptLTIuNjIgN2wxLjYyLTQuMzNMMTkuMTIgMTdoLTMuMjR6IiAvPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiIC8+PC9nPgo8ZyBpZD0idHJlbmRpbmctZmxhdCI+PHBhdGggZD0iTTIyIDEybC00LTR2M0gzdjJoMTV2M3oiIC8+PC9nPgo8ZyBpZD0idHJlbmRpbmctdXAiPjxwYXRoIGQ9Ik0xNiA2bDIuMjkgMi4yOS00Ljg4IDQuODgtNC00TDIgMTYuNTkgMy40MSAxOGw2LTYgNCA0IDYuMy02LjI5TDIyIDEyVjZ6IiAvPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0idHVybmVkLWluLW5vdCI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiIC8+PC9nPgo8ZyBpZD0idW5hcmNoaXZlIj48cGF0aCBkPSJNMjAuNTUgNS4yMmwtMS4zOS0xLjY4QzE4Ljg4IDMuMjEgMTguNDcgMyAxOCAzSDZjLS40NyAwLS44OC4yMS0xLjE1LjU1TDMuNDYgNS4yMkMzLjE3IDUuNTcgMyA2LjAxIDMgNi41VjE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjYuNWMwLS40OS0uMTctLjkzLS40NS0xLjI4ek0xMiA5LjVsNS41IDUuNUgxNHYyaC00di0ySDYuNUwxMiA5LjV6TTUuMTIgNWwuODItMWgxMmwuOTMgMUg1LjEyeiIgLz48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6IiAvPjwvZz4KPGcgaWQ9InVuZm9sZC1sZXNzIj48cGF0aCBkPSJNNy40MSAxOC41OUw4LjgzIDIwIDEyIDE2LjgzIDE1LjE3IDIwbDEuNDEtMS40MUwxMiAxNGwtNC41OSA0LjU5em05LjE4LTEzLjE4TDE1LjE3IDQgMTIgNy4xNyA4LjgzIDQgNy40MSA1LjQxIDEyIDEwbDQuNTktNC41OXoiIC8+PC9nPgo8ZyBpZD0idW5mb2xkLW1vcmUiPjxwYXRoIGQ9Ik0xMiA1LjgzTDE1LjE3IDlsMS40MS0xLjQxTDEyIDMgNy40MSA3LjU5IDguODMgOSAxMiA1Ljgzem0wIDEyLjM0TDguODMgMTVsLTEuNDEgMS40MUwxMiAyMWw0LjU5LTQuNTlMMTUuMTcgMTUgMTIgMTguMTd6IiAvPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiIC8+PC9nPgo8ZyBpZD0idmVyaWZpZWQtdXNlciI+PHBhdGggZD0iTTEyIDFMMyA1djZjMCA1LjU1IDMuODQgMTAuNzQgOSAxMiA1LjE2LTEuMjYgOS02LjQ1IDktMTJWNWwtOS00em0tMiAxNmwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiIgLz48L2c+CjxnIGlkPSJ2aWV3LWFnZW5kYSI+PHBhdGggZD0iTTIwIDEzSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6bTAtMTBIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xeiIgLz48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6IiAvPjwvZz4KPGcgaWQ9InZpZXctY2Fyb3VzZWwiPjxwYXRoIGQ9Ik03IDE5aDEwVjRIN3YxNXptLTUtMmg0VjZIMnYxMXpNMTggNnYxMWg0VjZoLTR6IiAvPjwvZz4KPGcgaWQ9InZpZXctY29sdW1uIj48cGF0aCBkPSJNMTAgMThoNVY1aC01djEzem0tNiAwaDVWNUg0djEzek0xNiA1djEzaDVWNWgtNXoiIC8+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiIC8+PC9nPgo8ZyBpZD0idmlldy1oZWFkbGluZSI+PHBhdGggZD0iTTQgMTVoMTZ2LTJINHYyem0wIDRoMTZ2LTJINHYyem0wLThoMTZWOUg0djJ6bTAtNnYyaDE2VjVINHoiIC8+PC9nPgo8ZyBpZD0idmlldy1saXN0Ij48cGF0aCBkPSJNNCAxNGg0di00SDR2NHptMCA1aDR2LTRINHY0ek00IDloNFY1SDR2NHptNSA1aDEydi00SDl2NHptMCA1aDEydi00SDl2NHpNOSA1djRoMTJWNUg5eiIgLz48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6IiAvPjwvZz4KPGcgaWQ9InZpZXctcXVpbHQiPjxwYXRoIGQ9Ik0xMCAxOGg1di02aC01djZ6bS02IDBoNVY1SDR2MTN6bTEyIDBoNXYtNmgtNXY2ek0xMCA1djZoMTFWNUgxMHoiIC8+PC9nPgo8ZyBpZD0idmlldy1zdHJlYW0iPjxwYXRoIGQ9Ik00IDE4aDE3di02SDR2NnpNNCA1djZoMTdWNUg0eiIgLz48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiIC8+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiIC8+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eS1vZmYiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiIC8+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0id2F0Y2gtbGF0ZXIiPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNC4yIDE0LjJMMTEgMTNWN2gxLjV2NS4ybDQuNSAyLjctLjggMS4zeiIgLz48L2c+CjxnIGlkPSJ3ZWVrZW5kIj48cGF0aCBkPSJNMjEgMTBjLTEuMSAwLTIgLjktMiAydjNINXYtM2MwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJ2NWMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0ydi01YzAtMS4xLS45LTItMi0yem0tMy01SDZjLTEuMSAwLTIgLjktMiAydjIuMTVjMS4xNi40MSAyIDEuNTEgMiAyLjgyVjE0aDEydi0yLjAzYzAtMS4zLjg0LTIuNCAyLTIuODJWN2MwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiIgLz48L2c+CjxnIGlkPSJ5b3V0dWJlLXNlYXJjaGVkLWZvciI+PHBhdGggZD0iTTE3LjAxIDE0aC0uOGwtLjI3LS4yN2MuOTgtMS4xNCAxLjU3LTIuNjEgMS41Ny00LjIzIDAtMy41OS0yLjkxLTYuNS02LjUtNi41cy02LjUgMy02LjUgNi41SDJsMy44NCA0IDQuMTYtNEg2LjUxQzYuNTEgNyA4LjUzIDUgMTEuMDEgNXM0LjUgMi4wMSA0LjUgNC41YzAgMi40OC0yLjAyIDQuNS00LjUgNC41LS42NSAwLTEuMjYtLjE0LTEuODItLjM4TDcuNzEgMTUuMWMuOTcuNTcgMi4wOS45IDMuMy45IDEuNjEgMCAzLjA4LS41OSA0LjIyLTEuNTdsLjI3LjI3di43OWw1LjAxIDQuOTlMMjIgMTlsLTQuOTktNXoiIC8+PC9nPgo8ZyBpZD0iem9vbS1pbiI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6bTIuNS00aC0ydjJIOXYtMkg3VjloMlY3aDF2MmgydjF6IiAvPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItaWNvbi1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB6LWluZGV4OiAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwoKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIGB0cmFuc3BhcmVudGAuICovCiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CgogICAgICAgIC8qIEJlY2F1c2Ugb2YgcG9seW1lci8yNTU4LCB0aGlzIHN0eWxlIGhhcyBsb3dlciBzcGVjaWZpY2l0eSB0aGFuICogKi8KICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdCAjaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaWNvbi1idXR0b24taW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaWNvbi1idXR0b24tZGlzYWJsZWQtdGV4dCwgdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcikpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGN1cnNvcjogYXV0bzsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCg6aG92ZXIpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1ob3ZlcjsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTAwJTsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGlyb24taWNvbiBpZD0iaWNvbiIgc3JjPSJbW3NyY11dIiBpY29uPSJbW2ljb25dXSIgYWx0JD0iW1thbHRdXSI+PC9pcm9uLWljb24+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icnVuLWNvbG9yLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIFtjb2xvci1jbGFzcz0nbGlnaHQtYmx1ZSddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgICAgfQogICAgICBbY29sb3ItY2xhc3M9J3JlZCddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0nZ3JlZW4nXSBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTkwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0ncHVycGxlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIH0KICAgICAgW2NvbG9yLWNsYXNzPSd0ZWFsJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0ncGluayddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgICAgfQogICAgICBbY29sb3ItY2xhc3M9J29yYW5nZSddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0nYnJvd24nXSBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTkwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0naW5kaWdvJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLW11bHRpLWNoZWNrYm94Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InJ1bi1jb2xvci1zdHlsZSI+PC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQgaWQ9Im5hbWVzLXJlZ2V4IiBuby1sYWJlbC1mbG9hdCBsYWJlbD0iV3JpdGUgYSByZWdleCB0byBmaWx0ZXIgcnVucyIgdmFsdWU9IltbcmVnZXhdXSIgb24tYmluZC12YWx1ZS1jaGFuZ2VkPSJfZGVib3VuY2VkUmVnZXhDaGFuZ2UiPjwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGlkPSJvdXRlci1jb250YWluZXIiIGNsYXNzPSJzY3JvbGxiYXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW25hbWVzTWF0Y2hpbmdSZWdleF1dIiBvbi1kb20tY2hhbmdlPSJzeW5jaHJvbml6ZUNvbG9ycyI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZS1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1jb250YWluZXIgY2hlY2tib3gtY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIiBpZCQ9ImNoZWNrYm94LVtbaXRlbV1dIiBuYW1lPSJbW2l0ZW1dXSIgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIiBvbi1jaGFuZ2U9Il9jaGVja2JveENoYW5nZSI+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIiBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIiBvbi10YXA9Il9pc29sYXRlTmFtZSIgbmFtZT0iW1tpdGVtXV0iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0tbGFiZWwtY29udGFpbmVyIj4KICAgICAgICAgICAgPHNwYW4+W1tpdGVtXV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICB9CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgI291dGVyLWNvbnRhaW5lciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgLyogbWFrZXMgd3JhcHBpbmcgb2YgaHlwZXJwYXJhbSBzdHJpbmdzIGJldHRlciAqLwogICAgICB9CiAgICAgIC5pY29uLWNvbnRhaW5lciB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC5jaGVja2JveCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvciB7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgfQogICAgICAuaXNvbGF0b3ItY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDZweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94LWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLml0ZW0tbGFiZWwtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgd2lkdGg6IDBweDsgLyogaGFjayB0byBnZXQgdGhlIGZsZXgtZ3JvdyB0byB3b3JrIHByb3Blcmx5ICovCiAgICAgIH0KICAgICAgLnRvb2x0aXAtdmFsdWUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgLnZlcnRpY2FsLWFsaWduLWNlbnRlciB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgLnZlcnRpY2FsLWFsaWduLXRvcCB7CiAgICAgICAgYWxpZ24tc2VsZjogc3RhcnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXdici1zdHJpbmciPgogIDx0ZW1wbGF0ZT4KICAgIAogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcGFydHNdXSIgYXM9InBhcnQiPltbcGFydF1dPHdicj48L3RlbXBsYXRlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXJ1bnMtc2VsZWN0b3IiPgogIDx0ZW1wbGF0ZT4KICAgIDxwYXBlci1kaWFsb2cgd2l0aC1iYWNrZHJvcCBpZD0iZGF0YS1sb2NhdGlvbi1kaWFsb2ciPgogICAgICA8aDI+RGF0YSBMb2NhdGlvbjwvaDI+CiAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIiAvPgogICAgPC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3ggaWQ9Im11bHRpQ2hlY2tib3giIG5hbWVzPSJbW3J1bnNdXSIgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIgcmVnZXg9Int7cmVnZXhJbnB1dH19IiBjb2xvcmluZz0iW1tjb2xvcmluZ11dIj48L3RmLW11bHRpLWNoZWNrYm94PgogICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0ieC1idXR0b24iIGlkPSJ0b2dnbGUtYWxsIiBvbi10YXA9Il90b2dnbGVBbGwiPgogICAgICBUb2dnbGUgQWxsIFJ1bnMKICAgIDwvcGFwZXItYnV0dG9uPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2RhdGFMb2NhdGlvbl1dIj4KICAgICAgPGRpdiBpZD0iZGF0YS1sb2NhdGlvbiI+CiAgICAgICAgPHRmLXdici1zdHJpbmcgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIgLz48dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSI+PGEgaHJlZj0iIiBvbi1jbGljaz0iX29wZW5EYXRhTG9jYXRpb25EaWFsb2ciPuKApjwvYT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgICAjdG9wLXRleHQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgICAgfQogICAgICB0Zi1tdWx0aS1jaGVja2JveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAueC1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtaGVscCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgIH0KICAgICAgI2RhdGEtbG9jYXRpb24gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbjogNXB4IDAgMCAwOwogICAgICAgIG1heC13aWR0aDogMjg4cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgIC8qIFNUWUxFUyBGT1IgVEhFIFNQSU5ORVIgKi8KICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgICAgLyoKICAgICAgICogQ29uc3RhbnRzOgogICAgICAgKiAgICAgIEFSQ1NJWkUgICAgID0gMjcwIGRlZ3JlZXMgKGFtb3VudCBvZiBjaXJjbGUgdGhlIGFyYyB0YWtlcyB1cCkKICAgICAgICogICAgICBBUkNUSU1FICAgICA9IDEzMzNtcyAodGltZSBpdCB0YWtlcyB0byBleHBhbmQgYW5kIGNvbnRyYWN0IGFyYykKICAgICAgICogICAgICBBUkNTVEFSVFJPVCA9IDIxNiBkZWdyZWVzIChob3cgbXVjaCB0aGUgc3RhcnQgbG9jYXRpb24gb2YgdGhlIGFyYwogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJvdGF0ZSBlYWNoIHRpbWUsIDIxNiBnaXZlcyB1cyBhCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IHBvaW50ZWQgc3RhciBzaGFwZSAoaXQncyAzNjAvNSAqIDMpLgogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgNyBwb2ludGVkIHN0YXIsIHdlIG1pZ2h0IGRvCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjAvNyAqIDMgPSAxNTQuMjg2KQogICAgICAgKiAgICAgIFNIUklOS19USU1FID0gNDAwbXMKICAgICAgICovCgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMjhweDsKICAgICAgICBoZWlnaHQ6IDI4cHg7CgogICAgICAgIC8qIDM2MCAqIEFSQ1RJTUUgLyAoQVJDU1RBUlRST1QgKyAoMzYwLUFSQ1NJWkUpKSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb246IDE1NjhtczsKCiAgICAgICAgLyogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb246IDEzMzNtczsKCiAgICAgICAgLyogNCAqIEFSQ1RJTUUgKi8KICAgICAgICAtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbjogNTMzMm1zOwoKICAgICAgICAvKiBTSFJJTktfVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbjogNDAwbXM7CiAgICAgIH0KCiAgICAgICNzcGlubmVyQ29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CgogICAgICAgIC8qIFRoZSBzcGlubmVyIGRvZXMgbm90IGhhdmUgYW55IGNvbnRlbnRzIHRoYXQgd291bGQgaGF2ZSB0byBiZQogICAgICAgICAqIGZsaXBwZWQgaWYgdGhlIGRpcmVjdGlvbiBjaGFuZ2VzLiBBbHdheXMgdXNlIGx0ciBzbyB0aGF0IHRoZQogICAgICAgICAqIHN0eWxlIHdvcmtzIG91dCBjb3JyZWN0bHkgaW4gYm90aCBjYXNlcy4gKi8KICAgICAgICBkaXJlY3Rpb246IGx0cjsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuYWN0aXZlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUgewogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIC5zcGlubmVyLWxheWVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci0xIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci0xLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTItY29sb3IsIHZhcigtLWdvb2dsZS1yZWQtNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci0zIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci0zLWNvbG9yLCB2YXIoLS1nb29nbGUteWVsbG93LTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItNCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItNC1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogSU1QT1JUQU5UIE5PVEUgQUJPVVQgQ1NTIEFOSU1BVElPTiBQUk9QRVJUSUVTIChrZWFudWxlZSk6CiAgICAgICAqCiAgICAgICAqIGlPUyBTYWZhcmkgKHRlc3RlZCBvbiBpT1MgOC4xKSBkb2VzIG5vdCBoYW5kbGUgYW5pbWF0aW9uLWRlbGF5IHZlcnkgd2VsbCAtIGl0IGRvZXNuJ3QKICAgICAgICogZ3VhcmFudGVlIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHN0YXJ0IF9leGFjdGx5XyBhZnRlciB0aGF0IHZhbHVlLiBTbyB3ZSBhdm9pZCB1c2luZwogICAgICAgKiBhbmltYXRpb24tZGVsYXkgYW5kIGluc3RlYWQgc2V0IGN1c3RvbSBrZXlmcmFtZXMgZm9yIGVhY2ggY29sb3IgKGFzIGxheWVyLTJ1bmRhbnQgYXMgaXQKICAgICAgICogc2VlbXMpLgogICAgICAgKi8KICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllciB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIubGF5ZXItMSB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0xLWZhZGUtaW4tb3V0OwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIubGF5ZXItMiB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0yLWZhZGUtaW4tb3V0OwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIubGF5ZXItMyB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0zLWZhZGUtaW4tb3V0OwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIubGF5ZXItNCB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci00LWZhZGUtaW4tb3V0OwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmaWxsLXVuZmlsbC1yb3RhdGUgewogICAgICAgIDEyLjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpIH0gLyogMSAgICogQVJDU0laRSAqLwogICAgICAgIDM3LjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0MDVkZWcpIH0gLyogMS41ICogQVJDU0laRSAqLwogICAgICAgIDUwJSAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpIH0gLyogMi41ICogQVJDU0laRSAqLwogICAgICAgIDc1JSAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg4MTBkZWcpIH0gLyogMyAgICogQVJDU0laRSAqLwogICAgICAgIDg3LjUlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKSB9IC8qIDQgICAqIEFSQ1NJWkUgKi8KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmaWxsLXVuZmlsbC1yb3RhdGUgewogICAgICAgIDEyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSB9IC8qIDAuNSAqIEFSQ1NJWkUgKi8KICAgICAgICAyNSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg0MDVkZWcpIH0gLyogMS41ICogQVJDU0laRSAqLwogICAgICAgIDUwJSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKSB9IC8qIDIgICAqIEFSQ1NJWkUgKi8KICAgICAgICA2Mi41JSB7IHRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg4MTBkZWcpIH0gLyogMyAgICogQVJDU0laRSAqLwogICAgICAgIDg3LjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKSB9IC8qIDMuNSAqIEFSQ1NJWkUgKi8KICAgICAgICB0byAgICB7IHRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTEtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgMjYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgODklIHsgb3BhY2l0eTogMCB9CiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAxIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0yLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDE1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDUxJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMy1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA0MCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA3NiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTQtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNjUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA1MCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQYXRjaCB0aGUgZ2FwIHRoYXQgYXBwZWFyIGJldHdlZW4gdGhlIHR3byBhZGphY2VudCBkaXYuY2lyY2xlLWNsaXBwZXIgd2hpbGUgdGhlCiAgICAgICAqIHNwaW5uZXIgaXMgcm90YXRpbmcgKGFwcGVhcnMgb24gQ2hyb21lIDUwLCBTYWZhcmkgOS4xLjEsIGFuZCBFZGdlKS4KICAgICAgICovCiAgICAgIC5zcGlubmVyLWxheWVyOjphZnRlciB7CiAgICAgICAgbGVmdDogNDUlOwogICAgICAgIHdpZHRoOiAxMCU7CiAgICAgICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7CiAgICAgIH0KCiAgICAgIC5zcGlubmVyLWxheWVyOjphZnRlciwKICAgICAgLmNpcmNsZS1jbGlwcGVyOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXI6OmFmdGVyIHsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDIwMCU7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIubGVmdDo6YWZ0ZXIgewogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIucmlnaHQ6OmFmdGVyIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlcjo6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLmxlZnQ6OmFmdGVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBsZWZ0LXNwaW47CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIucmlnaHQ6OmFmdGVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1zcGlubmVyLWxpdGUiPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICAgIDxkaXYgaWQ9InNwaW5uZXJDb250YWluZXIiIGNsYXNzLW5hbWU9IltbX19jb21wdXRlQ29udGFpbmVyQ2xhc3NlcyhhY3RpdmUsIF9fY29vbGluZ0Rvd24pXV0iIG9uLWFuaW1hdGlvbmVuZD0iX19yZXNldCIgb24td2Via2l0LWFuaW1hdGlvbi1lbmQ9Il9fcmVzZXQiPgogICAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgo8c3R5bGU+Ci5wbG90dGFibGUtY29sb3JzLTAgewogIGJhY2tncm91bmQtY29sb3I6ICM1Mjc5Yzc7IC8qIElORElHTyAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0xIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmQzNzNlOyAvKiBDT1JBTF9SRUQgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtMiB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzYzYzI2MTsgLyogRkVSTiAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0zIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFkNDE5OyAvKiBCUklHSFRfU1VOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTQgewogIGJhY2tncm91bmQtY29sb3I6ICMyYzJiNmY7IC8qIEpBQ0FSVEEgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNzkzOTsgLyogQlVSTklOR19PUkFOR0UgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNiB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2RiMmU2NTsgLyogQ0VSSVNFX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy03IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTljZTUwOyAvKiBDT05JRkVSICovCn0KCi5wbG90dGFibGUtY29sb3JzLTggewogIGJhY2tncm91bmQtY29sb3I6ICM5NjI1NjU7IC8qIFJPWUFMX0hFQVRIICovCn0KCi5wbG90dGFibGUtY29sb3JzLTkgewogIGJhY2tncm91bmQtY29sb3I6ICMwNmNjY2M7IC8qIFJPQklOU19FR0dfQkxVRSAqLwp9CgovKioKICogVXNlci1zdXBwbGllZCByZW5kZXJUbyBlbGVtZW50LgogKi8KLnBsb3R0YWJsZSB7CiAgZGlzcGxheTogYmxvY2s7IC8qIG11c3QgYmUgYmxvY2sgZWxlbWVudHMgZm9yIHdpZHRoL2hlaWdodCBjYWxjdWxhdGlvbnMgdG8gd29yayBpbiBGaXJlZm94LiAqLwogIHBvaW50ZXItZXZlbnRzOiB2aXNpYmxlRmlsbDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgLyoqCiAgICogUHJlIDMuMCwgdXNlcnMgY291bGQgc2V0IHRoZSBkaW1lbnNpb24gb2YgdGhlIHJvb3QgZWxlbWVudCBpbiB0d28gd2F5czogZWl0aGVyIHVzaW5nIENTUwogICAqIChpbmxpbmUgb3IgdGhyb3VnaCBhIHN0eWxlc2hlZXQpLCBvciB1c2luZyB0aGUgU1ZHIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzLiBCeSBkZWZhdWx0LCB3ZQogICAqIHNldCB0aGUgU1ZHIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzIHRvIDEwMCUuCiAgICoKICAgKiBQb3N0IDMuMCB0aGUgcm9vdCBlbGVtZW50IGlzIGFsd2F5cyBhIG5vcm1hbCBkaXYgYW5kIHRoZSBvbmx5IHdheSB0byBzZXQgdGhlIGRpbWVuc2lvbnMgaXMKICAgKiB0byB1c2UgQ1NTLiBUbyByZXBsaWNhdGUgdGhlICIxMDAlLWJ5LWRlZmF1bHQiIGJlaGF2aW9yLCB3ZSBhcHBseSB3aWR0aC9oZWlnaHQgMTAwJS4KICAgKi8KICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBUaGUgX2VsZW1lbnQgdGhhdCByb290cyBlYWNoIENvbXBvbmVudCdzIERPTS4KICovCi5wbG90dGFibGUgLmNvbXBvbmVudCB7CiAgLyogQWxsb3cgY29tcG9uZW50cyB0byBiZSBwb3NpdGlvbmVkIHdpdGggZXhwbGljaXQgbGVmdC90b3Avd2lkdGgvaGVpZ2h0IHN0eWxlcyAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLnBsb3R0YWJsZSAuYmFja2dyb3VuZC1jb250YWluZXIsCi5wbG90dGFibGUgLmNvbnRlbnQsCi5wbG90dGFibGUgLmZvcmVncm91bmQtY29udGFpbmVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwp9CgovKioKICogRG9uJ3QgYWxsb3cgc3ZnIGVsZW1lbnRzIGFib3ZlIHRoZSBjb250ZW50IHRvIHN0ZWFsIGV2ZW50cwogKi8KLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC5jb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgoucGxvdHRhYmxlIC5jb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSB7CiAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5wbG90dGFibGUgLnBsb3QtY2FudmFzLWNvbnRhaW5lciB7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLnBsb3QtY2FudmFzIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgLyoqCiAgICogUGxheSB3ZWxsIHdpdGggZGVmZXJyZWQgcmVuZGVyaW5nLgogICAqLwogIHRyYW5zZm9ybS1vcmlnaW46IDBweCAwcHggMHB4Owp9CgoucGxvdHRhYmxlIHRleHQgewogIHRleHQtcmVuZGVyaW5nOiBnZW9tZXRyaWNQcmVjaXNpb247Cn0KCi5wbG90dGFibGUgLmxhYmVsIHRleHQgewogIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLmJhci1sYWJlbC10ZXh0LWFyZWEgdGV4dCB7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMnB4Owp9CgoucGxvdHRhYmxlIC5sYWJlbC1hcmVhIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxNHB4Owp9CgoucGxvdHRhYmxlIC5saWdodC1sYWJlbCB0ZXh0IHsKICBmaWxsOiB3aGl0ZTsKfQoKLnBsb3R0YWJsZSAuZGFyay1sYWJlbCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwp9CgoucGxvdHRhYmxlIC5vZmYtYmFyLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zdHlsZTogbm9ybWFsOwp9CgoucGxvdHRhYmxlIC5zdGFja2VkLWJhci1wbG90IC5vZmYtYmFyLWxhYmVsIHsKICAvKiBIQUNLSEFDSyAjMjc5NTogY29ycmVjdCBvZmYtYmFyIGxhYmVsIGxvZ2ljIHRvIGJlIGltcGxlbWVudGVkIG9uIFN0YWNrZWRCYXIgKi8KICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKfQoKLnBsb3R0YWJsZSAuYXhpcy1sYWJlbCB0ZXh0IHsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGV0dGVyLXNwYWNpbmc6IDFweDsKICBsaW5lLWhlaWdodDogbm9ybWFsOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5wbG90dGFibGUgLnRpdGxlLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMjBweDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLmJhc2VsaW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgbGluZS50aWNrLW1hcmsgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwogIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXdlaWdodDogMjAwOwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tY2lyY2xlIHsKICBmaWxsOiB3aGl0ZTsKICBzdHJva2Utd2lkdGg6IDFweDsKICBzdHJva2U6ICNDQ0M7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIC5hbm5vdGF0aW9uLXJlY3QgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKICBmaWxsOiB3aGl0ZTsKfQoKLnBsb3R0YWJsZSAuYmFyLXBsb3QgLmJhc2VsaW5lIHsKICBzdHJva2U6ICM5OTk7Cn0KCi5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICBzdHJva2U6ICMzQzNDM0M7IC8qIGhhY2toYWNrOiBncmlkbGluZXMgc2hvdWxkIGJlIHNvbGlkOyBzZWUgIzgyMCAqLwogIG9wYWNpdHk6IDAuMjU7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLnNlbGVjdGlvbi1ib3gtbGF5ZXIgLnNlbGVjdGlvbi1hcmVhIHsKICBmaWxsOiBibGFjazsKICBmaWxsLW9wYWNpdHk6IDAuMDM7CiAgc3Ryb2tlOiAjQ0NDOwp9Ci8qIERyYWdCb3hMYXllciAqLwoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZSAuZHJhZy1lZGdlLWxyIHsKICBjdXJzb3I6IGV3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci55LXJlc2l6YWJsZSAuZHJhZy1lZGdlLXRiIHsKICBjdXJzb3I6IG5zLXJlc2l6ZTsKfQoKLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRsIHsKICBjdXJzb3I6IG53c2UtcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci10ciB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYmwgewogIGN1cnNvcjogbmVzdy1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLWJyIHsKICBjdXJzb3I6IG53c2UtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYSB7CiAgY3Vyc29yOiBtb3ZlOyAvKiBJRSBmYWxsYmFjayAqLwogIGN1cnNvcjogLW1vei1ncmFiOwogIGN1cnNvcjogLXdlYmtpdC1ncmFiOwogIGN1cnNvcjogZ3JhYjsKfQoKLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIubW92YWJsZSAuc2VsZWN0aW9uLWFyZWE6YWN0aXZlIHsKICBjdXJzb3I6IC1tb3otZ3JhYmJpbmc7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nOwogIGN1cnNvcjogZ3JhYmJpbmc7Cn0KLyogL0RyYWdCb3hMYXllciAqLwoKLnBsb3R0YWJsZSAuZ3VpZGUtbGluZS1sYXllciBsaW5lLmd1aWRlLWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuZHJhZy1saW5lLWxheWVyLmVuYWJsZWQudmVydGljYWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogZXctcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC5ob3Jpem9udGFsIGxpbmUuZHJhZy1lZGdlIHsKICBjdXJzb3I6IG5zLXJlc2l6ZTsKfQoKLnBsb3R0YWJsZSAubGVnZW5kIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLmludGVycG9sYXRlZC1jb2xvci1sZWdlbmQgcmVjdC5zd2F0Y2gtYm91bmRpbmctYm94IHsKICBmaWxsOiBub25lOwogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLnBsb3R0YWJsZSAud2F0ZXJmYWxsLXBsb3QgbGluZS5jb25uZWN0b3IgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAucGllLXBsb3QgLmFyYy5vdXRsaW5lIHsKICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwp9Cjwvc3R5bGU+Cgo8ZG9tLW1vZHVsZSBpZD0icGxvdHRhYmxlLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+Ci5wbG90dGFibGUtY29sb3JzLTAgewogIGJhY2tncm91bmQtY29sb3I6ICM1Mjc5Yzc7IC8qIElORElHTyAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0xIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmQzNzNlOyAvKiBDT1JBTF9SRUQgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtMiB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzYzYzI2MTsgLyogRkVSTiAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0zIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFkNDE5OyAvKiBCUklHSFRfU1VOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTQgewogIGJhY2tncm91bmQtY29sb3I6ICMyYzJiNmY7IC8qIEpBQ0FSVEEgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNzkzOTsgLyogQlVSTklOR19PUkFOR0UgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNiB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2RiMmU2NTsgLyogQ0VSSVNFX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy03IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTljZTUwOyAvKiBDT05JRkVSICovCn0KCi5wbG90dGFibGUtY29sb3JzLTggewogIGJhY2tncm91bmQtY29sb3I6ICM5NjI1NjU7IC8qIFJPWUFMX0hFQVRIICovCn0KCi5wbG90dGFibGUtY29sb3JzLTkgewogIGJhY2tncm91bmQtY29sb3I6ICMwNmNjY2M7IC8qIFJPQklOU19FR0dfQkxVRSAqLwp9CgovKioKICogVXNlci1zdXBwbGllZCByZW5kZXJUbyBlbGVtZW50LgogKi8KLnBsb3R0YWJsZSB7CiAgZGlzcGxheTogYmxvY2s7IC8qIG11c3QgYmUgYmxvY2sgZWxlbWVudHMgZm9yIHdpZHRoL2hlaWdodCBjYWxjdWxhdGlvbnMgdG8gd29yayBpbiBGaXJlZm94LiAqLwogIHBvaW50ZXItZXZlbnRzOiB2aXNpYmxlRmlsbDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgLyoqCiAgICogUHJlIDMuMCwgdXNlcnMgY291bGQgc2V0IHRoZSBkaW1lbnNpb24gb2YgdGhlIHJvb3QgZWxlbWVudCBpbiB0d28gd2F5czogZWl0aGVyIHVzaW5nIENTUwogICAqIChpbmxpbmUgb3IgdGhyb3VnaCBhIHN0eWxlc2hlZXQpLCBvciB1c2luZyB0aGUgU1ZHIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzLiBCeSBkZWZhdWx0LCB3ZQogICAqIHNldCB0aGUgU1ZHIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzIHRvIDEwMCUuCiAgICoKICAgKiBQb3N0IDMuMCB0aGUgcm9vdCBlbGVtZW50IGlzIGFsd2F5cyBhIG5vcm1hbCBkaXYgYW5kIHRoZSBvbmx5IHdheSB0byBzZXQgdGhlIGRpbWVuc2lvbnMgaXMKICAgKiB0byB1c2UgQ1NTLiBUbyByZXBsaWNhdGUgdGhlICIxMDAlLWJ5LWRlZmF1bHQiIGJlaGF2aW9yLCB3ZSBhcHBseSB3aWR0aC9oZWlnaHQgMTAwJS4KICAgKi8KICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBUaGUgX2VsZW1lbnQgdGhhdCByb290cyBlYWNoIENvbXBvbmVudCdzIERPTS4KICovCi5wbG90dGFibGUgLmNvbXBvbmVudCB7CiAgLyogQWxsb3cgY29tcG9uZW50cyB0byBiZSBwb3NpdGlvbmVkIHdpdGggZXhwbGljaXQgbGVmdC90b3Avd2lkdGgvaGVpZ2h0IHN0eWxlcyAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLnBsb3R0YWJsZSAuYmFja2dyb3VuZC1jb250YWluZXIsCi5wbG90dGFibGUgLmNvbnRlbnQsCi5wbG90dGFibGUgLmZvcmVncm91bmQtY29udGFpbmVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwp9CgovKioKICogRG9uJ3QgYWxsb3cgc3ZnIGVsZW1lbnRzIGFib3ZlIHRoZSBjb250ZW50IHRvIHN0ZWFsIGV2ZW50cwogKi8KLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC5jb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgoucGxvdHRhYmxlIC5jb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSB7CiAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5wbG90dGFibGUgLnBsb3QtY2FudmFzLWNvbnRhaW5lciB7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLnBsb3QtY2FudmFzIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgLyoqCiAgICogUGxheSB3ZWxsIHdpdGggZGVmZXJyZWQgcmVuZGVyaW5nLgogICAqLwogIHRyYW5zZm9ybS1vcmlnaW46IDBweCAwcHggMHB4Owp9CgoucGxvdHRhYmxlIHRleHQgewogIHRleHQtcmVuZGVyaW5nOiBnZW9tZXRyaWNQcmVjaXNpb247Cn0KCi5wbG90dGFibGUgLmxhYmVsIHRleHQgewogIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLmJhci1sYWJlbC10ZXh0LWFyZWEgdGV4dCB7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMnB4Owp9CgoucGxvdHRhYmxlIC5sYWJlbC1hcmVhIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxNHB4Owp9CgoucGxvdHRhYmxlIC5saWdodC1sYWJlbCB0ZXh0IHsKICBmaWxsOiB3aGl0ZTsKfQoKLnBsb3R0YWJsZSAuZGFyay1sYWJlbCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwp9CgoucGxvdHRhYmxlIC5vZmYtYmFyLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zdHlsZTogbm9ybWFsOwp9CgoucGxvdHRhYmxlIC5zdGFja2VkLWJhci1wbG90IC5vZmYtYmFyLWxhYmVsIHsKICAvKiBIQUNLSEFDSyAjMjc5NTogY29ycmVjdCBvZmYtYmFyIGxhYmVsIGxvZ2ljIHRvIGJlIGltcGxlbWVudGVkIG9uIFN0YWNrZWRCYXIgKi8KICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKfQoKLnBsb3R0YWJsZSAuYXhpcy1sYWJlbCB0ZXh0IHsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGV0dGVyLXNwYWNpbmc6IDFweDsKICBsaW5lLWhlaWdodDogbm9ybWFsOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5wbG90dGFibGUgLnRpdGxlLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMjBweDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLmJhc2VsaW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgbGluZS50aWNrLW1hcmsgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwogIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXdlaWdodDogMjAwOwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tY2lyY2xlIHsKICBmaWxsOiB3aGl0ZTsKICBzdHJva2Utd2lkdGg6IDFweDsKICBzdHJva2U6ICNDQ0M7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIC5hbm5vdGF0aW9uLXJlY3QgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKICBmaWxsOiB3aGl0ZTsKfQoKLnBsb3R0YWJsZSAuYmFyLXBsb3QgLmJhc2VsaW5lIHsKICBzdHJva2U6ICM5OTk7Cn0KCi5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICBzdHJva2U6ICMzQzNDM0M7IC8qIGhhY2toYWNrOiBncmlkbGluZXMgc2hvdWxkIGJlIHNvbGlkOyBzZWUgIzgyMCAqLwogIG9wYWNpdHk6IDAuMjU7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLnNlbGVjdGlvbi1ib3gtbGF5ZXIgLnNlbGVjdGlvbi1hcmVhIHsKICBmaWxsOiBibGFjazsKICBmaWxsLW9wYWNpdHk6IDAuMDM7CiAgc3Ryb2tlOiAjQ0NDOwp9Ci8qIERyYWdCb3hMYXllciAqLwoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZSAuZHJhZy1lZGdlLWxyIHsKICBjdXJzb3I6IGV3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci55LXJlc2l6YWJsZSAuZHJhZy1lZGdlLXRiIHsKICBjdXJzb3I6IG5zLXJlc2l6ZTsKfQoKLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRsIHsKICBjdXJzb3I6IG53c2UtcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci10ciB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYmwgewogIGN1cnNvcjogbmVzdy1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLWJyIHsKICBjdXJzb3I6IG53c2UtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYSB7CiAgY3Vyc29yOiBtb3ZlOyAvKiBJRSBmYWxsYmFjayAqLwogIGN1cnNvcjogLW1vei1ncmFiOwogIGN1cnNvcjogLXdlYmtpdC1ncmFiOwogIGN1cnNvcjogZ3JhYjsKfQoKLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIubW92YWJsZSAuc2VsZWN0aW9uLWFyZWE6YWN0aXZlIHsKICBjdXJzb3I6IC1tb3otZ3JhYmJpbmc7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nOwogIGN1cnNvcjogZ3JhYmJpbmc7Cn0KLyogL0RyYWdCb3hMYXllciAqLwoKLnBsb3R0YWJsZSAuZ3VpZGUtbGluZS1sYXllciBsaW5lLmd1aWRlLWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuZHJhZy1saW5lLWxheWVyLmVuYWJsZWQudmVydGljYWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogZXctcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC5ob3Jpem9udGFsIGxpbmUuZHJhZy1lZGdlIHsKICBjdXJzb3I6IG5zLXJlc2l6ZTsKfQoKLnBsb3R0YWJsZSAubGVnZW5kIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLmludGVycG9sYXRlZC1jb2xvci1sZWdlbmQgcmVjdC5zd2F0Y2gtYm91bmRpbmctYm94IHsKICBmaWxsOiBub25lOwogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLnBsb3R0YWJsZSAud2F0ZXJmYWxsLXBsb3QgbGluZS5jb25uZWN0b3IgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAucGllLXBsb3QgLmFyYy5vdXRsaW5lIHsKICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwp9Cjwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWNoYXJ0LXRvb2x0aXAiPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LXBhbi16b29tLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5oZWxwIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxczsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmFkZS1vdXQ7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC5oZWxwID4gc3BhbiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CgogICAgICAgIDEwMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idnotbGluZS1jaGFydDIiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2Ij48L2Rpdj4KICAgIDx2ei1jaGFydC10b29sdGlwIGlkPSJ0b29sdGlwIiBwb3NpdGlvbj0iW1t0b29sdGlwUG9zaXRpb25dXSIgY29udGVudC1jb21wb25lbnQtbmFtZT0idnotbGluZS1jaGFydC10b29sdGlwIj48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5wYW5rZXkpICNjaGFydGRpdiA6bm90KC5kcmFnLXpvb21pbmcpIC5tYWluIHsKICAgICAgICBjdXJzb3I6IC13ZWJraXQtZ3JhYjsKICAgICAgICBjdXJzb3I6IGdyYWI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5tb3VzZWRvd24pICNjaGFydGRpdiAucGFubmluZyAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nOwogICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiBsaW5lLmd1aWRlLWxpbmUgewogICAgICAgIHN0cm9rZTogIzk5OTsKICAgICAgICBzdHJva2Utd2lkdGg6IDEuNXB4OwogICAgICB9CiAgICAgICNjaGFydGRpdjpob3ZlciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLmdob3N0IHsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKICAKICAKICAKICAKPC9kb20tbW9kdWxlPgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgIDx0YWJsZT4KICAgICAgICA8dGhlYWQ+PC90aGVhZD4KICAgICAgICA8dGJvZHk+PC90Ym9keT4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtOwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICB0aGVhZCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICB0Ym9keSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIHRkIHsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgfQoKICAgICAgLnN3YXRjaCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgfQoKICAgICAgLmNsb3Nlc3QgLnN3YXRjaCB7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMnB4ICNmZmY7CiAgICAgIH0KCiAgICAgIHRoIHsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAuZGlzdGFudCB0ZDpub3QoLnN3YXRjaCkgewogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLmdob3N0IHsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJjaGFydCIgZGF0YS1sb2FkaW5nJD0iW1tkYXRhTG9hZGluZ11dIiBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iIGRlZmF1bHQteC1yYW5nZT0iW1tkZWZhdWx0WFJhbmdlXV0iIGRlZmF1bHQteS1yYW5nZT0iW1tkZWZhdWx0WVJhbmdlXV0iIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIgb24tY2hhcnQtYXR0YWNoZWQ9Il9vbkNoYXJ0QXR0YWNoZWQiIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIgc21vb3RoaW5nLXdlaWdodD0iW1tzbW9vdGhpbmdXZWlnaHRdXSIgc3ltYm9sLWZ1bmN0aW9uPSJbW3N5bWJvbEZ1bmN0aW9uXV0iIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIiB0b29sdGlwLXBvc2l0aW9uPSJbW3Rvb2x0aXBQb3NpdGlvbl1dIiB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIiB4LXR5cGU9IltbeFR5cGVdXSIgeS12YWx1ZS1hY2Nlc3Nvcj0iW1t5VmFsdWVBY2Nlc3Nvcl1dIj48L3Z6LWxpbmUtY2hhcnQyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvYWRpbmddXSI+CiAgICAgICAgPGRpdiBpZD0ibG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciI+CiAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZT48L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgOmhvc3QoW19tYXliZS1yZW5kZXJlZC1pbi1iYWQtc3RhdGVdKSB2ei1saW5lLWNoYXJ0IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgICNjaGFydC1hbmQtc3Bpbm5lci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI2xvYWRpbmctc3Bpbm5lci1jb250YWluZXIgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIHZ6LWxpbmUtY2hhcnQyIHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHZ6LWxpbmUtY2hhcnQyW2RhdGEtbG9hZGluZ10gewogICAgICAgIG9wYWNpdHk6IDAuMzsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNjcm9sbGFibGUiPgoKICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCguaXMtc2Nyb2xsZWQ6bm90KDpmaXJzdC1jaGlsZCkpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNhbi1zY3JvbGw6bm90KC5zY3JvbGxlZC10by1ib3R0b20pOm5vdCg6bGFzdC1jaGlsZCkpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IpOwogICAgICB9CgogICAgICAuc2Nyb2xsYWJsZSB7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwoKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc2Nyb2xsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InNjcm9sbGFibGUiIGNsYXNzPSJzY3JvbGxhYmxlIiBvbi1zY3JvbGw9InVwZGF0ZVNjcm9sbFN0YXRlIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCjwvZG9tLW1vZHVsZT4KCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1tYXJrZG93bi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1todG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBgPHA+YCBlbGVtZW50LgogICAgICAgKgogICAgICAgKiBCeSB0YXJnZXRpbmcgb25seSB0aGUgdG9wLWxldmVsLCBleHRyZW1hbCBlbGVtZW50cywgd2UgcHJlc2VydmUgYW55CiAgICAgICAqIGFjdHVhbCBwYXJhZ3JhcGggYnJlYWtzIGFuZCBvbmx5IGNoYW5nZSB0aGUgcGFkZGluZyBhZ2FpbnN0IHRoZQogICAgICAgKiBjb21wb25lbnQgZWRnZXMuCiAgICAgICAqLwogICAgICAjbWFya2Rvd24gPiBwOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwLjNlbTsKICAgICAgfQogICAgICAjbWFya2Rvd24gPiBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDAuM2VtOwogICAgICB9CgogICAgICAvKiBQbGVhc2FudCBzdHlsZXMgZm9yIE1hcmtkb3duIHRhYmxlcy4gKi8KICAgICAgI21hcmtkb3duIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdGgsCiAgICAgICNtYXJrZG93biB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogNnB4IDEzcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RmZTJlNTsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdHIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjNmNiZDE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBmaWdjYXB0aW9uIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAgIC5oZWFkaW5nLXJvdyB7CiAgICAgICAgbWFyZ2luLXRvcDogLTRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAvKiogUGllY2Ugb2YgdGV4dCBpbiB0aGUgZmlndXJlIGNhcHRpb24uICovCiAgICAgIC5oZWFkaW5nLWxhYmVsIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qKiBNYWtlcyBsYWJlbCBzaG93IG9uIHRoZSByaWdodC4gKi8KICAgICAgLmhlYWRpbmctcmlnaHQgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhcmQtaGVhZGluZyI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgPGZpZ2NhcHRpb24gY2xhc3M9ImNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbmFtZUxhYmVsXV0iPgogICAgICAgICAgICA8ZGl2IGl0ZW1wcm9wPSJuYW1lIiBjbGFzcz0iaGVhZGluZy1sYWJlbCBuYW1lIj4KICAgICAgICAgICAgICBbW19uYW1lTGFiZWxdXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbcnVuXV0iPgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuIGl0ZW1wcm9wPSJydW4iIGlkPSJoZWFkaW5nLXJ1biIgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iPltbcnVuXV08L3NwYW4+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW190YWdMYWJlbF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgICAgdGFnOiA8c3BhbiBpdGVtcHJvcD0idGFnIj5bW190YWdMYWJlbF1dPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2ZpZ2NhcHRpb24+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkZXNjcmlwdGlvbl1dIj4KICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mbyIgb24tdGFwPSJfdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2ciIHRpdGxlPSJTaG93IHN1bW1hcnkgZGVzY3JpcHRpb24iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxwYXBlci1kaWFsb2cgaWQ9ImRlc2NyaXB0aW9uRGlhbG9nIiBuby1vdmVybGFwIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICA8cGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW2Rlc2NyaXB0aW9uXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgICAgICA8L3BhcGVyLWRpYWxvZy1zY3JvbGxhYmxlPgogICAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDwvZGl2PgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIC5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLmNvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLm5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICAucnVuIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHBhZGRpbmc6IDFweCA0cHggMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KICAgICAgcGFwZXItZGlhbG9nLXNjcm9sbGFibGUgewogICAgICAgIG1heC13aWR0aDogNjQwcHg7CiAgICAgIH0KICAgICAgI2hlYWRpbmctcnVuIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Zi1jYXJkLWhlYWRpbmctYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgY29sb3I6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1jb2xvcik7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZG93bmxvYWRlciI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQ9InRydWUiIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19Ij4KICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tydW5zXV0iPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcnVuXV0iPgogICAgICA8YSBkb3dubG9hZD0iW1tfY3N2TmFtZSh0YWcsIF9ydW4pXV0iIGhyZWY9IltbX2NzdlVybCh0YWcsIF9ydW4sIHVybEZuKV1dIj5DU1Y8L2E+PGEgZG93bmxvYWQ9IltbX2pzb25OYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIj5KU09OPC9hPgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGEgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW46IDAgMC4yZW07CiAgICAgIH0KICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1zY2FsYXItY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWNhcmQtaGVhZGluZyB0YWc9IltbdGFnXV0iIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIiBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIj48L3RmLWNhcmQtaGVhZGluZz4KICAgIDxkaXYgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIj4KICAgICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgYWN0aXZlPSJbW2FjdGl2ZV1dIiBjb2xvci1zY2FsZT0iW1tfZ2V0Q29sb3JTY2FsZShjb2xvclNjYWxlKV1dIiBkYXRhLXNlcmllcz0iW1tfZ2V0RGF0YVNlcmllcyhkYXRhVG9Mb2FkLiopXV0iIGRhdGEtdG8tbG9hZD0iW1tkYXRhVG9Mb2FkXV0iIGdldC1kYXRhLWxvYWQtbmFtZT0iW1tfZ2V0RGF0YUxvYWROYW1lXV0iIGdldC1kYXRhLWxvYWQtdXJsPSJbW2dldERhdGFMb2FkVXJsXV0iIHJlcXVlc3QtZGF0YT0iW1tyZXF1ZXN0RGF0YV1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIgbG9hZC1kYXRhLWNhbGxiYWNrPSJbW19sb2FkRGF0YUNhbGxiYWNrXV0iIGxvYWQta2V5PSJbW3RhZ11dIiBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIiByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIiBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIiB0YWctbWV0YWRhdGE9IltbdGFnTWV0YWRhdGFdXSIgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIiB0b29sdGlwLXBvc2l0aW9uPSJhdXRvIiB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iIHgtdHlwZT0iW1t4VHlwZV1dIj4KICAgICAgPC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJidXR0b25zIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIgaWNvbj0iZnVsbHNjcmVlbiIgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBzZWxlY3RlZCQ9IltbX2xvZ1NjYWxlQWN0aXZlXV0iIGljb249ImxpbmUtd2VpZ2h0IiBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIgdGl0bGU9IlRvZ2dsZSB5LWF4aXMgbG9nIHNjYWxlIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ic2V0dGluZ3Mtb3ZlcnNjYW4iIG9uLXRhcD0iX3Jlc2V0RG9tYWluIiB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPHBhcGVyLW1lbnUtYnV0dG9uIG9uLXBhcGVyLWRyb3Bkb3duLW9wZW49Il91cGRhdGVEb3dubG9hZExpbmsiPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIiBpY29uPSJmaWxlLWRvd25sb2FkIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICA8YSBpZD0ic3ZnTGluayIgZG93bmxvYWQ9IltbdGFnXV0uc3ZnIj4KICAgICAgICAgICAgICAgIERvd25sb2FkIEN1cnJlbnQgQ2hhcnQgYXMgU1ZHCiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHRmLWRvd25sb2FkZXIgcnVucz0iW1tfcnVuc0Zyb21EYXRhKGRhdGFUb0xvYWQpXV0iIHRhZz0iW1t0YWddXSIgdXJsLWZuPSJbW19kb3dubG9hZFVybEZuXV0iPjwvdGYtZG93bmxvYWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgbWFyZ2luOiA1cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB9CgogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICB9CgogICAgICAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQoKICAgICAgI2J1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW46IDJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgcGFwZXItaXRlbSBhIHsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXByb2dyZXNzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlbiQ9IltbX2hpZGVTZWNvbmRhcnlQcm9ncmVzcyhzZWNvbmRhcnlSYXRpbyldXSI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InByaW1hcnlQcm9ncmVzcyI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItc2xpZGVyIj4KICA8dGVtcGxhdGUgc3RyaXAtd2hpdGVzcGFjZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgd2lkdGg6IDIwMHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtYWN0aXZlLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgICB9CgogICAgICAvKiBmb2N1cyBzaG93cyB0aGUgcmlwcGxlICovCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBOT1RFKGtlYW51bGVlKTogVGhvdWdoIDpob3N0LWNvbnRleHQgaXMgbm90IHVuaXZlcnNhbGx5IHN1cHBvcnRlZCwgc29tZSBwYWdlcwogICAgICAgKiBzdGlsbCByZWx5IG9uIHBhcGVyLXNsaWRlciBiZWluZyBmbGlwcGVkIHdoZW4gZGlyPSJydGwiIGlzIHNldCBvbiBib2R5LiBGb3IgZnVsbAogICAgICAgKiBjb21wYXRhYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICAqLwogICAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICAqIG5vdCBiZSByZWNvZ25pemVkLgogICAgICAgKi8KICAgICAgOmhvc3QoW2Rpcj0icnRsIl0pICNzbGlkZXJDb250YWluZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE5PVEUoa2VhbnVsZWUpOiBOZWVkZWQgdG8gb3ZlcnJpZGUgdGhlIDpob3N0LWNvbnRleHQgcnVsZSAod2hlcmUgc3VwcG9ydGVkKQogICAgICAgKiB0byBzdXBwb3J0IExUUiBzbGlkZXJzIGluIFJUTCBwYWdlcy4KICAgICAgICovCiAgICAgIDpob3N0KFtkaXI9Imx0ciJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgICB9CgogICAgICAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDMwcHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpKTsKICAgICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoMTVweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICAgIH0KCiAgICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IDA7CiAgICAgIH0KCiAgICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmJhci1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgICAgbGVmdDogY2FsYyg1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICAgIHRyYW5zaXRpb246IGxlZnQgMC4xOHMgZWFzZTsKICAgICAgfQoKICAgICAgLnJpbmcuZXhwYW5kLmRyYWdnaW5nID4gLmJhci1jb250YWluZXIgewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIC5yaW5nLmV4cGFuZDpub3QoLnBpbikgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgICAgbGVmdDogY2FsYyg4cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB9CgogICAgICAjc2xpZGVyQmFyIHsKICAgICAgICBwYWRkaW5nOiAxNXB4IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWJhci1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItY29udGFpbmVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICB9CgogICAgICAuc2xpZGVyLW1hcmtlcnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IGNhbGMoMTRweCArIHZhcigtLXBhcGVyLXNsaWRlci1oZWlnaHQsMnB4KS8yKTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCk7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogLTFweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICB9CgogICAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KICAgICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgICAgLnNsaWRlci1tYXJrZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3IsICMwMDApOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBtYXJnaW4tbGVmdDogY2FsYygtMTVweCAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIH0KCiAgICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMDhzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgbWFyZ2luOiAxMHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwoKICAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKICAgICAgfQoKICAgICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgfQoKICAgICAgLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIH0KCiAgICAgIC5waW4gPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xM3B4OwogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSAwOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSwKICAgICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgfQoKICAgICAgLnBpbi5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIH0KCiAgICAgIC5waW4uZXhwYW5kID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgxKSB0cmFuc2xhdGUoMTdweCwgLTE3cHgpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgICAgfQoKICAgICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMTZweDsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZm9udC1jb2xvciwgI2ZmZik7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB9CgogICAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGUoMCwgLTE3cHgpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgICAgfQoKICAgICAgLyogcGFwZXItaW5wdXQgKi8KICAgICAgLnNsaWRlci1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgQGFwcGx5IC0tcGFwZXItc2xpZGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgICB9OwogICAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dDsKICAgICAgfQoKICAgICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICAgI3NsaWRlckNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kaXNhYmxlZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB9CgogICAgICAuZGlzYWJsZWQucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzJD0iW1tfZ2V0Q2xhc3NOYW1lcyhkaXNhYmxlZCwgcGluLCBzbmFwcywgaW1tZWRpYXRlVmFsdWUsIG1pbiwgZXhwYW5kLCBkcmFnZ2luZywgdHJhbnNpdGluZywgZWRpdGFibGUpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJiYXItY29udGFpbmVyIj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGlkPSJzbGlkZXJCYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgc3RlcD0iW1tzdGVwXV0iIHZhbHVlPSJbW2ltbWVkaWF0ZVZhbHVlXV0iIHNlY29uZGFyeS1wcm9ncmVzcz0iW1tzZWNvbmRhcnlQcm9ncmVzc11dIiBvbi1kb3duPSJfYmFyZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfYmFydHJhY2siIG9uLXRhcD0iX2JhcmNsaWNrIj4KICAgICAgICA8L3BhcGVyLXByb2dyZXNzPgogICAgICA8L2Rpdj4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzbmFwc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VycyI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXIiPjwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDxkaXYgaWQ9InNsaWRlcktub2IiIGNsYXNzPSJzbGlkZXIta25vYiIgb24tZG93bj0iX2tub2Jkb3duIiBvbi11cD0iX3Jlc2V0S25vYiIgb24tdHJhY2s9Il9vblRyYWNrIiBvbi10cmFuc2l0aW9uZW5kPSJfa25vYlRyYW5zaXRpb25FbmQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlJD0iW1tpbW1lZGlhdGVWYWx1ZV1dIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZWRpdGFibGVdXSI+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9Im51bWJlciIgc3RlcD0iW1tzdGVwXV0iIG1pbj0iW1ttaW5dXSIgbWF4PSJbW21heF1dIiBjbGFzcz0ic2xpZGVyLWlucHV0IiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgICA8L3BhcGVyLWlucHV0PgogICAgPC90ZW1wbGF0ZT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1zbW9vdGhpbmctaW5wdXQiPgogIDx0ZW1wbGF0ZT4KICAgIDxoMyBjbGFzcz0idGl0bGUiPlNtb290aGluZzwvaDM+CiAgICA8ZGl2IGNsYXNzPSJzbW9vdGhpbmctYmxvY2siPgogICAgICA8cGFwZXItc2xpZGVyIGlkPSJzbGlkZXIiIGltbWVkaWF0ZS12YWx1ZT0ie3tfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJ9fSIgbWF4PSJbW21heF1dIiBtaW49IltbbWluXV0iIHBpbiBzdGVwPSJbW3N0ZXBdXSIgdHlwZT0ibnVtYmVyIiB2YWx1ZT0ie3t3ZWlnaHR9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIGxhYmVsPSJ3ZWlnaHQiIG5vLWxhYmVsLWZsb2F0IHZhbHVlPSJ7e19pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXR9fSIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iPjwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIC5zbW9vdGhpbmctYmxvY2sgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIGZsZXgtZ3JvdzogMjsKICAgICAgfQoKICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICB3aWR0aDogNjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1zY2FsYXItZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBpZD0ic2hvdy1kb3dubG9hZC1saW5rcyIgY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSI+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGlkPSJpZ25vcmUteS1vdXRsaWVyIiBjaGVja2VkPSJ7e19pZ25vcmVZT3V0bGllcnN9fSI+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJ0b29sdGlwLXNvcnRpbmciPgogICAgICAgICAgICA8ZGl2PlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IG5vLWxhYmVsLWZsb2F0IHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3Rvb2x0aXBTb3J0aW5nTWV0aG9kfX0iPgogICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0iMCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZWZhdWx0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPm5lYXJlc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXNtb290aGluZy1pbnB1dCB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IiBzdGVwPSIwLjAwMSIgbWluPSIwIiBtYXg9IjAuOTk5Ij48L3RmLXNtb290aGluZy1pbnB1dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvciBpZD0ieC10eXBlLXNlbGVjdG9yIiBuYW1lPSJIb3Jpem9udGFsIEF4aXMiIHNlbGVjdGVkLWlkPSJ7e194VHlwZX19Ij4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPjxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBzY2FsYXIgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiPlJFQURNRTwvYT4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIj5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYT4uCiAgICAgICAgICAgIAoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIj50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICAKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldyBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIiBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXNjYWxhci1jYXJkIGFjdGl2ZT0iW1thY3RpdmVdXSIgZGF0YS10by1sb2FkPSJbW2l0ZW0uc2VyaWVzXV0iIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIgbXVsdGktZXhwZXJpbWVudHM9IltbX2dldE11bHRpRXhwZXJpbWVudHMoZGF0YVNlbGVjdGlvbildXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIiBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIiBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIiBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShjYXRlZ29yeSwgX3J1blRvVGFnSW5mbywgaXRlbSldXSIgdGFnPSJbW2l0ZW0udGFnXV0iIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbX3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iIHgtdHlwZT0iW1tfeFR5cGVdXSI+PC90Zi1zY2FsYXItY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtc29ydGluZyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgd2lkdGg6IDEwNXB4OwogICAgICB9CiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWN1c3RvbS1zY2FsYXItY2FyZC1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgbWFyZ2luOiA1cHggMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMTlweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciBpZD0ibG9hZGVyIiBhY3RpdmU9IltbYWN0aXZlXV0iIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iIGRhdGEtc2VyaWVzPSJbW19zZXJpZXNOYW1lc11dIiBnZXQtZGF0YS1sb2FkLXVybD0iW1tfZGF0YVVybF1dIiBmaWxsLWFyZWE9IltbX2ZpbGxBcmVhXV0iIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIiBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iIGRhdGEtdG8tbG9hZD0iW1tydW5zXV0iIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIiB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIgeC10eXBlPSJbW3hUeXBlXV0iPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIiBpY29uPSJmdWxsc2NyZWVuIiBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIgaWNvbj0ibGluZS13ZWlnaHQiIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIiB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIgb24tdGFwPSJfcmVzZXREb21haW4iIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxzcGFuIHN0eWxlPSJmbGV4LWdyb3c6IDEiPjwvc3Bhbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkLWxpbmtzIj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IG5vLWxhYmVsLWZsb2F0PSJ0cnVlIiBsYWJlbD0ic2VyaWVzIHRvIGRvd25sb2FkIiBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWR9fSI+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIiBhcz0iZGF0YVNlcmllc05hbWUiPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbZGF0YVNlcmllc05hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YSBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IiBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iPkNTVjwvYT4KICAgICAgICAgIDxhIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIiBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIj5KU09OPC9hPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21pc3NpbmdUYWdzLmxlbmd0aF1dIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249IltbX2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbihfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCldXSIgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIgY2xhc3M9InRvZ2dsZS1jb2xsYXBzaWJsZS1idXR0b24iPgogICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+IE1pc3NpbmcgVGFncwogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0iW1tfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21pc3NpbmdUYWdzXV0iIGFzPSJtaXNzaW5nRW50cnkiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtaXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIiPgogICAgICAgICAgICAgIFJ1biAiW1ttaXNzaW5nRW50cnkucnVuXV0iIGxhY2tzIGRhdGEgZm9yIHRhZ3MKICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21pc3NpbmdFbnRyeS50YWdzXV0iIGFzPSJ0YWciPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyPgogICAgICAgIDxzcGFuIGNsYXNzPSJpbnZhbGlkLXJlZ2V4Ij5bW190YWdGaWx0ZXJdXTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RlcHNNaXNtYXRjaF1dIj4KICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgPGlyb24taWNvbiBjbGFzcz0iZXJyb3ItaWNvbiIgaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPgogICAgICAgIFRoZSBzdGVwcyBmb3IgdmFsdWUsIGxvd2VyLCBhbmQgdXBwZXIgdGFncyBkbyBub3QgbWF0Y2g6CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0LnZhbHVlXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gudmFsdWVTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC5sb3dlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLmxvd2VyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudXBwZXJdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC51cHBlclN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8ZGl2IGlkPSJtYXRjaGVzLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249IltbX2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbihfbWF0Y2hlc0xpc3RPcGVuZWQpXV0iIG9uLWNsaWNrPSJfdG9nZ2xlTWF0Y2hlc09wZW4iIGNsYXNzPSJ0b2dnbGUtbWF0Y2hlcy1idXR0b24iPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8c3BhbiBjbGFzcz0iY29sbGFwc2libGUtdGl0bGUtdGV4dCI+CiAgICAgICAgICBNYXRjaGVzIChbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSkKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIgYXM9InNlcmllc05hbWUiIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIgb24tZG9tLWNoYW5nZT0iX21hdGNoTGlzdEVudHJ5Q29sb3JVcGRhdGVkIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciBpZD0ibG9hZGVyIiBhY3RpdmU9IltbYWN0aXZlXV0iIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iIGRhdGEtc2VyaWVzPSJbW19zZXJpZXNOYW1lc11dIiBnZXQtZGF0YS1sb2FkLXVybD0iW1tfZGF0YVVybF1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIgbG9hZC1rZXk9IltbX3RhZ0ZpbHRlcl1dIiBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIiBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIiBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIiByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIiBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIiBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIiB4LXR5cGU9IltbeFR5cGVdXSI+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iIGljb249ImZ1bGxzY3JlZW4iIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIiBpY29uPSJsaW5lLXdlaWdodCIgb24tdGFwPSJfdG9nZ2xlTG9nU2NhbGUiIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InNldHRpbmdzLW92ZXJzY2FuIiBvbi10YXA9Il9yZXNldERvbWFpbiIgdGl0bGU9IkZpdCBkb21haW4gdG8gZGF0YSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQ9InRydWUiIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19Ij4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iIGFzPSJkYXRhU2VyaWVzTmFtZSI+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDxhIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5jc3YiIGhyZWY9IltbX2NzdlVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSI+Q1NWPC9hPgogICAgICAgICAgPGEgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmpzb24iIGhyZWY9IltbX2pzb25VcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iPkpTT048L2E+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0LXRpdGxlIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJbW19nZXRUb2dnbGVNYXRjaGVzSWNvbihfbWF0Y2hlc0xpc3RPcGVuZWQpXV0iIG9uLWNsaWNrPSJfdG9nZ2xlTWF0Y2hlc09wZW4iIGNsYXNzPSJ0b2dnbGUtbWF0Y2hlcy1idXR0b24iPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8c3BhbiBjbGFzcz0ibWF0Y2hlcy10ZXh0Ij4KICAgICAgICAgIE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKQogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0iW1tfbWF0Y2hlc0xpc3RPcGVuZWRdXSI+CiAgICAgICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIiBhcz0ic2VyaWVzTmFtZSIgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IiBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iPlNob3cgZGF0YSBkb3dubG9hZCBsaW5rczwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19pZ25vcmVZT3V0bGllcnN9fSI+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJ0b29sdGlwLXNvcnRpbmciPgogICAgICAgICAgICA8ZGl2IGlkPSJ0b29sdGlwLXNvcnRpbmctbGFiZWwiPlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IG5vLWxhYmVsLWZsb2F0IHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3Rvb2x0aXBTb3J0aW5nTWV0aG9kfX0iPgogICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0iMCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZWZhdWx0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPm5lYXJlc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXNtb290aGluZy1pbnB1dCB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IiBzdGVwPSIwLjAwMSIgbWluPSIwIiBtYXg9IjEiPjwvdGYtc21vb3RoaW5nLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yIGlkPSJ4LXR5cGUtc2VsZWN0b3IiIG5hbWU9Ikhvcml6b250YWwgQXhpcyIgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+PHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDxvbD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVuJ3QgbGFpZCBvdXQgdGhlIGRhc2hib2FyZC48L2xpPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHNjYWxhciBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC9vbD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIFRvIGxheSBvdXQgdGhlIGRhc2hib2FyZCwgcGFzcyBhIDxjb2RlPkxheW91dDwvY29kZT4gcHJvdG9idWZmZXIKICAgICAgICAgICAgICB0byB0aGUgPGNvZGU+c2V0X2xheW91dDwvY29kZT4gbWV0aG9kLiBGb3IgZXhhbXBsZSwKICAgICAgICAgICAgCiAgICAgICAgICAgIDxwcmU+ZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiPlJFQURNRTwvYT4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIj5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYT4uCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldyBhcz0iY2hhcnQiIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGRpc2FibGUtcGFnaW5hdGlvbiBpbml0aWFsLW9wZW5lZD0iW1tjYXRlZ29yeS5tZXRhZGF0YS5vcGVuZWRdXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm11bHRpbGluZV1dIj4KICAgICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQgYWN0aXZlPSJbW2FjdGl2ZV1dIiByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIiB0aXRsZT0iW1tjaGFydC50aXRsZV1dIiB4LXR5cGU9IltbX3hUeXBlXV0iIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iIHNtb290aGluZy13ZWlnaHQ9IltbX3Ntb290aGluZ1dlaWdodF1dIiB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIgdGFnLXJlZ2V4ZXM9IltbY2hhcnQubXVsdGlsaW5lLnRhZ11dIj48L3RmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubWFyZ2luXV0iPgogICAgICAgICAgICAgICAgICAgIDx0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIGFjdGl2ZT0iW1thY3RpdmVdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIiBydW5zPSJbW19zZWxlY3RlZFJ1bnNdXSIgdGl0bGU9IltbY2hhcnQudGl0bGVdXSIgeC10eXBlPSJbW194VHlwZV1dIiB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIgbWFyZ2luLWNoYXJ0LXNlcmllcz0iW1tjaGFydC5tYXJnaW4uc2VyaWVzXV0iPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICN0b29sdGlwLXNvcnRpbmcgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KICAgICAgLmxpbmUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1pbWFnZS1sb2FkZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1jYXJkLWhlYWRpbmcgdGFnPSJbW3RhZ11dIiBydW49IltbcnVuXV0iIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIiBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIiBjb2xvcj0iW1tfcnVuQ29sb3JdXSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTYW1wbGVzXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19zYW1wbGVUZXh0XV0gb2YgW1tvZlNhbXBsZXNdXTwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwCiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZCI+W1tfdG9Mb2NhbGVTdHJpbmcoX3N0ZXBWYWx1ZSldXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0IGRhdGV0aW1lIj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50V2FsbFRpbWVdXSI+CiAgICAgICAgICAgICAgW1tfY3VycmVudFdhbGxUaW1lXV0KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwgcmlnaHQiPgogICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFfaXNJbWFnZUxvYWRpbmddXSI+CiAgICAgICAgICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwc11dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlciBpZD0ic3RlcHMiIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iIG1heC1tYXJrZXJzPSJbW19tYXhTdGVwSW5kZXhdXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7X3N0ZXBJbmRleH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgoKICAgIAogICAgPGEgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIiByb2xlPSJidXR0b24iIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIiBvbi10YXA9Il9oYW5kbGVUYXAiPjwvYT4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLyoqIE1ha2UgYnV0dG9uIGEgZGl2LiAqLwogICAgICBidXR0b24gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qKiBGaXJlZm94OiBHZXQgcmlkIG9mIGRvdHRlZCBsaW5lIGluc2lkZSBidXR0b24uICovCiAgICAgIGJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qKiBGaXJlZm94OiBTaW11bGF0ZSBDaHJvbWUncyBvdXRlciBnbG93IG9uIGJ1dHRvbiB3aGVuIGZvY3VzZWQuICovCiAgICAgIGJ1dHRvbjotbW96LWZvY3VzcmluZyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDFweCAycHggSGlnaGxpZ2h0OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAwIDE1cHggNDBweCAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC8qKiBXaGVuIGFjdHVhbCBzaXplIHNob3duIGlzIG9uLCB1c2UgdGhlIGFjdHVhbCBpbWFnZSB3aWR0aC4gKi8KICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgI21haW4taW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgaW1nIHsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgcGFwZXItc3Bpbm5lci1saXRlIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgLyoKICAgICAgICAgKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlCiAgICAgICAgICogcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZyAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducwogICAgICAgICAqIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksIGFuZAogICAgICAgICAqIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YKICAgICAgICAgKiB0aGUgaW1hZ2UuIDMwIC0gMSArIDIuCiAgICAgICAgICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDI0cHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7CiAgICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1pbWFnZS1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2FjdHVhbFNpemV9fSI+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+QnJpZ2h0bmVzcyBhZGp1c3RtZW50PC9oMz4KICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgbWluPSIwIiBtYXg9IjIiIHNuYXBzIHBpbiBzdGVwPSIwLjAxIiB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIgaW1tZWRpYXRlLXZhbHVlPSJ7e19icmlnaHRuZXNzQWRqdXN0bWVudH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0ieC1idXR0b24iIG9uLXRhcD0iX3Jlc2V0QnJpZ2h0bmVzcyIgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSI+UmVzZXQ8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5Db250cmFzdCBhZGp1c3RtZW50PC9oMz4KICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgbWluPSIwIiBtYXg9IjUwMCIgc25hcHMgcGluIHN0ZXA9IjEiIHZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gY2xhc3M9IngtYnV0dG9uIiBvbi10YXA9Il9yZXNldENvbnRyYXN0IiBkaXNhYmxlZD0iW1tfY29udHJhc3RJc0RlZmF1bHRdXSI+UmVzZXQ8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBpZD0icnVucy1zZWxlY3RvciIgc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBpbWFnZSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1pbWFnZS1sb2FkZXIgYWN0aXZlPSJbW2FjdGl2ZV1dIiBydW49IltbaXRlbS5ydW5dXSIgdGFnPSJbW2l0ZW0udGFnXV0iIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIiBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIiByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iIGFjdHVhbC1zaXplPSJbW19hY3R1YWxTaXplXV0iIGJyaWdodG5lc3MtYWRqdXN0bWVudD0iW1tfYnJpZ2h0bmVzc0FkanVzdG1lbnRdXSIgY29udHJhc3QtcGVyY2VudGFnZT0iW1tfY29udHJhc3RQZXJjZW50YWdlXV0iPjwvdGYtaW1hZ2UtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLXNsaWRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1idXR0b25bZGlzYWJsZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB1bnNldDsKICAgICAgfQogICAgICAueC1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgIH0KICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWF1ZGlvLWxvYWRlciI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWNhcmQtaGVhZGluZyB0YWc9IltbdGFnXV0iIHJ1bj0iW1tydW5dXSIgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iIGNvbG9yPSJbW19ydW5Db2xvcl1dIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9InN0ZXBzIiBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IiBtYXg9IltbX21heFN0ZXBJbmRleF1dIiBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iIHNuYXBzIHN0ZXA9IjEiIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgIDxhdWRpbyBjb250cm9scyBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iIHR5cGUkPSJbW19jdXJyZW50RGF0dW0uY29udGVudFR5cGVdXSI+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWF1ZGlvLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBpZD0icnVucy1zZWxlY3RvciIgc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBhdWRpbyBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBhdWRpbyBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIgYWN0aXZlPSJbW2FjdGl2ZV1dIiBydW49IltbaXRlbS5ydW5dXSIgdGFnPSJbW2l0ZW0udGFnXV0iIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIiB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIiByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iPjwvdGYtYXVkaW8tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkOwogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICAtbW96LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGFyZWE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm1pcnJvci10ZXh0IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgLyogc2VlIGNvbW1lbnRzIGluIHRlbXBsYXRlICovCiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICB0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIAogICAgCiAgICA8ZGl2IGlkPSJtaXJyb3IiIGNsYXNzPSJtaXJyb3ItdGV4dCIgYXJpYS1oaWRkZW49InRydWUiPiZuYnNwOzwvZGl2PgoKICAgIAogICAgPGRpdiBjbGFzcz0idGV4dGFyZWEtY29udGFpbmVyIGZpdCI+CiAgICAgIDx0ZXh0YXJlYSBpZD0idGV4dGFyZWEiIG5hbWUkPSJbW25hbWVdXSIgYXJpYS1sYWJlbCQ9IltbbGFiZWxdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgaW5wdXRtb2RlJD0iW1tpbnB1dG1vZGVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiByZXF1aXJlZCQ9IltbcmVxdWlyZWRdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIHJvd3MkPSJbW3Jvd3NdXSIgbWlubGVuZ3RoJD0iW1ttaW5sZW5ndGhdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSI+PC90ZXh0YXJlYT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItdGV4dGFyZWEiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgbm8tbGFiZWwtZmxvYXQkPSJbW25vTGFiZWxGbG9hdF1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsKGFsd2F5c0Zsb2F0TGFiZWwscGxhY2Vob2xkZXIpXV0iIGF1dG8tdmFsaWRhdGUkPSJbW2F1dG9WYWxpZGF0ZV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgaW52YWxpZD0iW1tpbnZhbGlkXV0iPgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3M9InBhcGVyLWlucHV0LWlucHV0IiBzbG90PSJpbnB1dCIgaWQkPSJbW19pbnB1dElkXV0iIGFyaWEtbGFiZWxsZWRieSQ9IltbX2FyaWFMYWJlbGxlZEJ5XV0iIGFyaWEtZGVzY3JpYmVkYnkkPSJbW19hcmlhRGVzY3JpYmVkQnldXSIgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBpbnZhbGlkPSJ7e2ludmFsaWR9fSIgdmFsaWRhdG9yJD0iW1t2YWxpZGF0b3JdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiByZXF1aXJlZCQ9IltbcmVxdWlyZWRdXSIgbWlubGVuZ3RoJD0iW1ttaW5sZW5ndGhdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIHJvd3MkPSJbW3Jvd3NdXSIgbWF4LXJvd3MkPSJbW21heFJvd3NdXSIgb24tY2hhbmdlPSJfb25DaGFuZ2UiPjwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItdG9hc3QiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1iYWNrZ3JvdW5kLWNvbG9yLCAjMzIzMjMyKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9hc3QtY29sb3IsICNmMWYxZjEpOwogICAgICAgIG1pbi1oZWlnaHQ6IDQ4cHg7CiAgICAgICAgbWluLXdpZHRoOiAyODhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDI0cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMjYpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBtYXJnaW46IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuM3MsIG9wYWNpdHkgMC4zczsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwcHgpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNhcHN1bGUpIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCguZml0LWJvdHRvbSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgOmhvc3QoLnBhcGVyLXRvYXN0LW9wZW4pIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4gaWQ9ImxhYmVsIj57e3RleHR9fTwvc3Bhbj4KICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10b2dnbGUtYnV0dG9uIj4KICA8dGVtcGxhdGUgc3RyaXAtd2hpdGVzcGFjZT4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6bm9uZTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1iYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJhci1jb2xvciwgIzAwMDAwMCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0zcHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBsaW5lYXIgLjA4cywgYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNTApKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbi5kcmFnZ2luZyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXTpub3QoW2Rpc2FibGVkXSkpIC50b2dnbGUtYmFyIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhci1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9nZ2xlLWJhciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICAgICAgICBvcGFjaXR5OiAwLjEyOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2JkYmRiZDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudG9nZ2xlLWluayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTE0cHg7CiAgICAgICAgbGVmdDogLTE0cHg7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWluazsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWluayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWluazsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIC8qIFRoZSB0b2dnbGUgYnV0dG9uIGhhcyBhbiBhYnNvbHV0ZSBwb3NpdGlvbiBvZiAtM3B4OyBUaGUgZXh0cmEgMXB4CiAgICAgICAgLyogYWNjb3VudHMgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIHNoYWRvdyBib3guICovCiAgICAgICAgbWFyZ2luOiA0cHggMXB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWxhYmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICAvKiBpbnZhbGlkIHN0YXRlICovCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1iYXItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1idXR0b24tY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtaW5rLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJ0b2dnbGVCYXIiIGNsYXNzPSJ0b2dnbGUtYmFyIj48L2Rpdj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQnV0dG9uIiBjbGFzcz0idG9nZ2xlLWJ1dHRvbiI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj4KCiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1taW5pbWFwIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIgaWQ9Im1pbmltYXBEcm9wU2hhZG93IiB4PSItMjAlIiB5PSItMjAlIiB3aWR0aD0iMTUwJSIgaGVpZ2h0PSIxNTAlIj4KICAgICAgICAgIDxmZW9mZnNldCByZXN1bHQ9Im9mZk91dCIgaW49IlNvdXJjZUdyYXBoaWMiIGR4PSIxIiBkeT0iMSI+PC9mZW9mZnNldD4KICAgICAgICAgIDxmZWNvbG9ybWF0cml4IHJlc3VsdD0ibWF0cml4T3V0IiBpbj0ib2ZmT3V0IiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMC4xIDAgMCAwIDAgMCAwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC41IDAiPjwvZmVjb2xvcm1hdHJpeD4KICAgICAgICAgIDxmZWdhdXNzaWFuYmx1ciByZXN1bHQ9ImJsdXJPdXQiIGluPSJtYXRyaXhPdXQiIHN0ZGRldmlhdGlvbj0iMiI+PC9mZWdhdXNzaWFuYmx1cj4KICAgICAgICAgIDxmZWJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZWJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgCiAgICA8Y2FudmFzIGNsYXNzPSJzZWNvbmQiPjwvY2FudmFzPgogICAgPGNhbnZhcyBjbGFzcz0iZG93bmxvYWQiPjwvY2FudmFzPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLXNjZW5lIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNzdmcgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2hpZGRlbiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyogLS0tIE5vZGUgYW5kIGFubm90YXRpb24tbm9kZSBmb3IgTWV0YW5vZGUgLS0tICovCgogICAgICAubWV0YSA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgICB9CiAgICAgIC5ub2RlLm1ldGEuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KICAgICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQogICAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgICAubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KICAgICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgfQogICAgICAuYW5ub3RhdGlvbi5tZXRhLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgICB9CiAgICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICAgIH0KCiAgICAgIC5mYWRlZCwKICAgICAgLmZhZGVkIHJlY3QsCiAgICAgIC5mYWRlZCBlbGxpcHNlLAogICAgICAuZmFkZWQgcGF0aCwKICAgICAgLmZhZGVkIHVzZSwKICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBwYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmFkZWQgcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBlbGxpcHNlLAogICAgICAuZmFkZWQgdXNlIHsKICAgICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmZhZGVkIHRleHQgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC8qIFJ1bGVzIHVzZWQgZm9yIGlucHV0LXRyYWNpbmcuICovCiAgICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgICAgLmlucHV0LWhpZ2hsaWdodCA+ICogPiBlbGxpcHNlLAogICAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IHVzZSB7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZmY5ODAwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAgIC5ub24taW5wdXQgPiAqID4gcmVjdCwKLm5vbi1pbnB1dCA+ICogPiBlbGxpcHNlLAoubm9uLWlucHV0ID4gKiA+IHVzZSwKLyogRm9yIENvbnN0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gKiA+IC5jb25zdGFudDpub3QoW2NsYXNzKj0iaW5wdXQtaGlnaGxpZ2h0Il0pID4KICAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgICAgLm5vbi1pbnB1dCB1c2UgewogICAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubm9uLWlucHV0ID4gdGV4dCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgICB9CgogICAgICAubm9uLWlucHV0IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZS5yZWZsaW5lIHsKICAgICAgICBtYXJrZXItc3RhcnQ6IHVybCgjcmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgICAgfQoKICAgICAgLyogSW5wdXQgZWRnZXMuICovCiAgICAgIC5pbnB1dC1lZGdlLWhpZ2hsaWdodCA+IHRleHQgewogICAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgLmlucHV0LWhpZ2hsaWdodCA+IC5pbi1hbm5vdGF0aW9ucyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSwKICAgICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICAgID4gLmluLWFubm90YXRpb25zCiAgICAgICAgPiAuYW5ub3RhdGlvbgogICAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgICAgLm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCwKLm5vbi1pbnB1dCA+IGcgPiAuYW5ub3RhdGlvbiA+IHBhdGgsCi8qIEFubm90YXRpb24gc3R5bGVzIChsYWJlbCBhbmQgZWRnZXMgcmVzcGVjdGl2ZWx5KS4gKi8KLm5vbi1pbnB1dCA+IGcgPgouYW5ub3RhdGlvbjpub3QoLmlucHV0LWhpZ2hsaWdodCk6bm90KC5pbnB1dC1oaWdobGlnaHQtc2VsZWN0ZWQpID4KLmFubm90YXRpb24tbGFiZWwKLyouYW5ub3RhdGlvbi1lZGdlKi8KIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgICAgLm9wID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAgIC5vcCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgICBzdHJva2U6ICNjY2M7CiAgICAgIH0KCiAgICAgIC5vcC5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgICAub3Auc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgICB9CgogICAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgICAgLm9wLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQoKICAgICAgLyogLS0tIFNlcmllcyBOb2RlIC0tLSAqLwoKICAgICAgLyogQnkgZGVmYXVsdCwgZG9uJ3Qgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+LiAqLwogICAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICAgIGZpbGw6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgICBmaWxsLW9wYWNpdHk6IDA7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC8qIE9uY2UgZXhwYW5kZWQsIHNob3cgdGhlIHNlcmllcyBiYWNrZ3JvdW5kIDxyZWN0PiBhbmQgaGlkZSB0aGUgPHVzZT4uICovCiAgICAgIC5zZXJpZXMuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICAgIHN0cm9rZTogaHNsKDAsIDAlLCA3MCUpOwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAxOwogICAgICB9CiAgICAgIC5zZXJpZXMuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gdXNlIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qKgogKiBUT0RPOiBTaW1wbGlmeSB0aGlzIGJ5IGFwcGx5aW5nIGEgc3RhYmxlIGNsYXNzIG5hbWUgdG8gYWxsIDxnPgogKiBlbGVtZW50cyB0aGF0IGN1cnJlbnRseSBoYXZlIGVpdGhlciB0aGUgbm9kZXNoYXBlIG9yIGFubm90YXRpb24tbm9kZSBjbGFzc2VzLgogKi8KICAgICAgLnNlcmllcyA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgICBzdHJva2U6ICNjY2M7CiAgICAgIH0KICAgICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAgIC5zZXJpZXMuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KICAgICAgLnNlcmllcy5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KCiAgICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgICB9CgogICAgICAuYW5ub3RhdGlvbi5zZXJpZXMuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KCiAgICAgIC8qIC0tLSBCcmlkZ2UgTm9kZSAtLS0gKi8KICAgICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6ICNmMGY7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIC0tLSBTdHJ1Y3R1cmFsIEVsZW1lbnRzIC0tLSAqLwogICAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBSZWZlcmVuY2UgRWRnZSAqLwogICAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgICAgc3Ryb2tlOiAjZmZiNzRkOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIC0tLSBTZXJpZXMgTm9kZXMgLS0tICovCgogICAgICAvKiBIaWRlIHRoZSByZWN0IGZvciBhIHNlcmllcycgYW5ub3RhdGlvbi4gKi8KICAgICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAgIC5ub2RlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiAjNDQ0OwogICAgICB9CgogICAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDlweDsKICAgICAgfQoKICAgICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDhweDsKICAgICAgfQoKICAgICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogNnB4OwogICAgICB9CgogICAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgICAgY3Vyc29yOiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICAgIGZpbGw6ICM1MGEzZjc7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICAgIGZpbGw6ICM0Mjg1ZjQ7CiAgICAgIH0KCiAgICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgICAgLyogb25seSBhcHBsaWVkIGZvciBhbm5vdGF0aW9ucyB0aGF0IGFyZSBub3Qgc3VtbWFyeSBvciBjb25zdGFudC4KKC5zdW1tYXJ5LCAuY29uc3RhbnQgZ2V0cyBvdmVycmlkZGVuIGJlbG93KSAqLwogICAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAxLCAxOwogICAgICB9CgogICAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAgIC5hbm5vdGF0aW9uLmNvbnN0YW50ID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgICB9CgogICAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjYWFhOwogICAgICAgIHN0cm9rZS13aWR0aDogMC41OwogICAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgICB9CgogICAgICAuZmFkZWQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgICAgfQoKICAgICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgICB9CgogICAgICAuZmFkZWQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgICB9CgogICAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgICAgfQoKICAgICAgI2Fubm90YXRpb24tYXJyb3doZWFkIHsKICAgICAgICBmaWxsOiAjYWFhOwogICAgICB9CgogICAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQgewogICAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICAgIH0KCiAgICAgICNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICAgIGZpbGw6ICNhYWE7CiAgICAgIH0KCiAgICAgICNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQgewogICAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgICAuZXhwYW5kZWQgPiAuaW4tYW5ub3RhdGlvbnMsCiAgICAgIC5leHBhbmRlZCA+IC5vdXQtYW5ub3RhdGlvbnMgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIC0tLSBBbm5vdGF0aW9uOiBDb25zdGFudCAtLS0gKi8KCiAgICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgICB9CgogICAgICAuY29uc3RhbnQuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIH0KCiAgICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgICAgfQoKICAgICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgICAuc3VtbWFyeSA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgICBzdHJva2U6ICNkYjQ0Mzc7CiAgICAgIH0KCiAgICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIGZpbGw6ICNhNTI3MTQ7CiAgICAgICAgc3Ryb2tlOiAjYTUyNzE0OwogICAgICB9CgogICAgICAuc3VtbWFyeS5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgICAgfQoKICAgICAgLyogLS0tIEVkZ2UgLS0tICovCgogICAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjYmJiOwogICAgICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICAgIH0KCiAgICAgIC5lZGdlIC5zZWxlY3RhYmxlZWRnZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRlZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHN0cm9rZTogI2YwMDsKICAgICAgfQoKICAgICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICAgIGZpbGw6ICMwMDA7CiAgICAgIH0KCiAgICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgICAgLmVkZ2UgPiB0ZXh0IHsKICAgICAgICBmb250LXNpemU6IDMuNXB4OwogICAgICAgIGZpbGw6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5kYXRhZmxvdy1hcnJvd2hlYWQgewogICAgICAgIGZpbGw6ICNiYmI7CiAgICAgIH0KCiAgICAgIC5yZWZlcmVuY2UtYXJyb3doZWFkIHsKICAgICAgICBmaWxsOiAjZmZiNzRkOwogICAgICB9CgogICAgICAuc2VsZWN0ZWQtYXJyb3doZWFkIHsKICAgICAgICBmaWxsOiAjZjAwOwogICAgICB9CgogICAgICAuZWRnZSAuY29udHJvbC1kZXAgewogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICAgIH0KCiAgICAgIC8qIC0tLSBHcm91cCBub2RlIGV4cGFuZC9jb2xsYXBzZSBidXR0b24gLS0tICovCgogICAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgICAgLm5vZGU6bm90KC5oaWdobGlnaHRlZCk6bm90KC5leHBhbmRlZCkgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgICAgb3BhY2l0eTogMC4wMTsKICAgICAgfQogICAgICAubm9kZS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLmJ1dHRvbmNpcmNsZSB7CiAgICAgICAgZmlsbDogI2U3ODExZDsKICAgICAgfQogICAgICAuYnV0dG9uY2lyY2xlOmhvdmVyIHsKICAgICAgICBmaWxsOiAjYjk2NzE3OwogICAgICB9CiAgICAgIC5leHBhbmRidXR0b24sCiAgICAgIC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgfQogICAgICAvKiBEbyBub3QgbGV0IHRoZSBwYXRoIGVsZW1lbnRzIGluIHRoZSBidXR0b24gdGFrZSBwb2ludGVyIGZvY3VzICovCiAgICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgICAubm9kZSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgICAvKiBPbmx5IHNob3cgdGhlIGV4cGFuZCBidXR0b24gd2hlbiBhIG5vZGUgaXMgY29sbGFwc2VkIGFuZCBvbmx5IHNob3cgdGhlCiAgIGNvbGxhcHNlIGJ1dHRvbiB3aGVuIGEgbm9kZSBpcyBleHBhbmRlZC4gKi8KICAgICAgLm5vZGUuZXhwYW5kZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5leHBhbmRidXR0b24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLm5vZGU6bm90KC5leHBhbmRlZCkgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLXN0YXRzIHsKICAgICAgICBmb250LXNpemU6IDRweDsKICAgICAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgICAgZmlsdGVyOiB1cmwoI2hlYWx0aC1waWxsLXNoYWRvdyk7CiAgICAgICAgcng6IDM7CiAgICAgICAgcnk6IDM7CiAgICAgIH0KCiAgICAgIC50aXRsZUNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRvcDogMjBweDsKICAgICAgfQoKICAgICAgLnRpdGxlLAogICAgICAuYXV4VGl0bGUsCiAgICAgIC5mdW5jdGlvbkxpYnJhcnlUaXRsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CgogICAgICAjbWluaW1hcCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAyMHB4OwogICAgICAgIGJvdHRvbTogMjBweDsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB1bCB7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB1bCBsaSB7CiAgICAgICAgcGFkZGluZzogNHB4IDE2cHg7CiAgICAgIH0KCiAgICAgIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJ0aXRsZSIgY2xhc3M9InRpdGxlIj5NYWluIEdyYXBoPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImF1eFRpdGxlIiBjbGFzcz0iYXV4VGl0bGUiPkF1eGlsaWFyeSBOb2RlczwvZGl2PgogICAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj4KICAgICAgICBGdW5jdGlvbnMKICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdmcgaWQ9InN2ZyI+CiAgICAgIDxkZWZzPgogICAgICAgIAogICAgICAgIDxwYXRoIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCIgLz4KICAgICAgICA8bWFya2VyIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIiBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iNSIgbWFya2VyaGVpZ2h0PSI1IiByZWZ4PSIyIiByZWZ5PSI1IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIgbWFya2VydW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIgLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIiBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1tZWRpdW0iIHZpZXdib3g9IjAgMCAxMCAxMCIgbWFya2Vyd2lkdGg9IjEzIiBtYXJrZXJoZWlnaHQ9IjEzIiByZWZ4PSIyIiByZWZ5PSI1IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIgbWFya2VydW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIgLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIiBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1sYXJnZSIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iMTYiIG1hcmtlcmhlaWdodD0iMTYiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iMjAiIG1hcmtlcmhlaWdodD0iMjAiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgoKICAgICAgICAKICAgICAgICA8cGF0aCBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCIgLz4KICAgICAgICA8bWFya2VyIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiIHZpZXdib3g9IjAgMCAxMCAxMCIgbWFya2Vyd2lkdGg9IjUiIG1hcmtlcmhlaWdodD0iNSIgcmVmeD0iMiIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiIG1hcmtlcnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIgLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtbWVkaXVtIiB2aWV3Ym94PSIwIDAgMTAgMTAiIG1hcmtlcndpZHRoPSIxMyIgbWFya2VyaGVpZ2h0PSIxMyIgcmVmeD0iMiIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiIG1hcmtlcnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIgLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtbGFyZ2UiIHZpZXdib3g9IjAgMCAxMCAxMCIgbWFya2Vyd2lkdGg9IjE2IiBtYXJrZXJoZWlnaHQ9IjE2IiByZWZ4PSIyIiByZWZ5PSI1IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIgbWFya2VydW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiIHZpZXdib3g9IjAgMCAxMCAxMCIgbWFya2Vyd2lkdGg9IjIwIiBtYXJrZXJoZWlnaHQ9IjIwIiByZWZ4PSIyIiByZWZ5PSI1IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIgbWFya2VydW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgoKICAgICAgICAKICAgICAgICA8bWFya2VyIGlkPSJhbm5vdGF0aW9uLWFycm93aGVhZCIgbWFya2Vyd2lkdGg9IjUiIG1hcmtlcmhlaWdodD0iNSIgcmVmeD0iNSIgcmVmeT0iMi41IiBvcmllbnQ9ImF1dG8iPgogICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCA1LDIuNSBMIDAsNSBMIDAsMCIgLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGlkPSJhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCIgbWFya2Vyd2lkdGg9IjUiIG1hcmtlcmhlaWdodD0iNSIgcmVmeD0iNSIgcmVmeT0iMi41IiBvcmllbnQ9ImF1dG8iPgogICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCA1LDIuNSBMIDAsNSBMIDAsMCIgLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQiIG1hcmtlcndpZHRoPSI1IiBtYXJrZXJoZWlnaHQ9IjUiIHJlZng9IjAiIHJlZnk9IjIuNSIgb3JpZW50PSJhdXRvIj4KICAgICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiIC8+CiAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgPG1hcmtlciBpZD0icmVmLWFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIiBtYXJrZXJ3aWR0aD0iNSIgbWFya2VyaGVpZ2h0PSI1IiByZWZ4PSIwIiByZWZ5PSIyLjUiIG9yaWVudD0iYXV0byI+CiAgICAgICAgICA8cGF0aCBkPSJNIDUsMCBMIDAsMi41IEwgNSw1IEwgNSwwIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIAogICAgICAgIDxlbGxpcHNlIGlkPSJvcC1ub2RlLXN0YW1wIiByeD0iNy41IiByeT0iMyIgc3Ryb2tlPSJpbmhlcml0IiBmaWxsPSJpbmhlcml0IiAvPgogICAgICAgIAogICAgICAgIDxlbGxpcHNlIGlkPSJvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHJ4PSI1IiByeT0iMiIgc3Ryb2tlPSJpbmhlcml0IiBmaWxsPSJpbmhlcml0IiAvPgogICAgICAgIAogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSIzIiAvPgogICAgICAgIDwvZz4KICAgICAgICAKICAgICAgICA8ZyBpZD0ib3Atc2VyaWVzLWhvcml6b250YWwtc3RhbXAiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTYiIHk9IjQiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiIC8+CiAgICAgICAgPC9nPgogICAgICAgIAogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtYW5ub3RhdGlvbi1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjciIHk9IjIiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjUiIHk9IjIiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxzdmcgaWQ9InN1bW1hcnktaWNvbiIgZmlsbD0iIzg0ODQ4NCIgaGVpZ2h0PSIxMiIgdmlld2JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiPgogICAgICAgICAgPHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIgLz4KICAgICAgICA8L3N2Zz4KCiAgICAgICAgCiAgICAgICAgPHBhdHRlcm4gaWQ9InJlY3RIYXRjaCIgcGF0dGVybnRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHBhdHRlcm51bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIC8+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuIGlkPSJlbGxpcHNlSGF0Y2giIHBhdHRlcm50cmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBwYXR0ZXJudW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSIyIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiAvPgogICAgICAgIDwvcGF0dGVybj4KCiAgICAgICAgCiAgICAgICAgPGZpbHRlciBpZD0iaGVhbHRoLXBpbGwtc2hhZG93IiB4PSItNDAlIiB5PSItNDAlIiB3aWR0aD0iMTgwJSIgaGVpZ2h0PSIxODAlIj4KICAgICAgICAgIDxmZWdhdXNzaWFuYmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERldmlhdGlvbj0iMC44IiAvPgogICAgICAgICAgPGZlb2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIiAvPgogICAgICAgICAgPGZlZmxvb2QgZmxvb2QtY29sb3I9IiMwMDAwMDAiIC8+CiAgICAgICAgICA8ZmVjb21wb3NpdGUgaW4yPSJvZmZzZXRibHVyIiBvcGVyYXRvcj0iaW4iIC8+CiAgICAgICAgICA8ZmVtZXJnZT4KICAgICAgICAgICAgPGZlbWVyZ2Vub2RlIC8+CiAgICAgICAgICAgIDxmZW1lcmdlbm9kZSBpbj0iU291cmNlR3JhcGhpYyIgLz4KICAgICAgICAgIDwvZmVtZXJnZT4KICAgICAgICA8L2ZpbHRlcj4KICAgICAgPC9kZWZzPgogICAgICAKICAgICAgPHJlY3QgZmlsbD0id2hpdGUiIHdpZHRoPSIxMDAwMCIgaGVpZ2h0PSIxMDAwMCI+PC9yZWN0PgogICAgICA8ZyBpZD0icm9vdCI+PC9nPgogICAgPC9zdmc+CiAgICA8dGYtZ3JhcGgtbWluaW1hcCBpZD0ibWluaW1hcCI+PC90Zi1ncmFwaC1taW5pbWFwPgogICAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgfQoKICAgICAgLmF1dG8gewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICBwYXBlci1idXR0b24gewogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1t0aXRsZV1dIj4KICAgICAgICAgIDxoMj5bW3RpdGxlXV08L2gyPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRmLWdyYXBoLXNjZW5lIGlkPSJzY2VuZSIgY2xhc3M9ImF1dG8iIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIiBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IiBzZWxlY3RlZC1lZGdlPSJ7e3NlbGVjdGVkRWRnZX19IiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIHByb2dyZXNzPSJbW3Byb2dyZXNzXV0iIG5vZGUtY29udGV4dC1tZW51LWl0ZW1zPSJbW25vZGVDb250ZXh0TWVudUl0ZW1zXV0iIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIiB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSI+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRlYnVnZ2VyLWNvbnRpbnVlLWRpYWxvZyI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgY2xhc3M9ImNvbnRpbnVlLWJ1dHRvbiIgb24tY2xpY2s9Il9jb250aW51ZUJ1dHRvbkNhbGxiYWNrIj4KICAgICAgPHNwYW4+W1tfY29udGludWVCdXR0b25UZXh0XV08L3NwYW4+CiAgICA8L3BhcGVyLWJ1dHRvbj4KICAgIDxwYXBlci1kaWFsb2cgd2l0aC1iYWNrZHJvcCBpZD0iY29udGludWVEaWFsb2ciPgogICAgICA8aDI+Q29udGludWUuLi48L2gyPgogICAgICA8ZGl2IGNsYXNzPSJjb250aW51ZS10by10eXBlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250aW51ZS10by10eXBlLW5hbWUiPgogICAgICAgICAgT3ZlciBTZXNzaW9uIFJ1bnM6CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJjb250aW51ZU51bSIgY2xhc3M9ImlucHV0LWJveCIgbGFiZWw9Ik51bWJlciBvZiBTZXNzaW9uIFJ1bnMgKGluY2x1ZGluZyB0aGUgY3VycmVudCBvbmUpOiIgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgbWluPSIxIiBzdGVwPSIxIiB2YWx1ZT0ie3tjb250aW51ZU51bX19Ij48L3BhcGVyLWlucHV0PgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZ28tYnV0dG9uIiBpY29uPSJhcnJvdy1mb3J3YXJkIiB0aXRsZT0iU2Vzc2lvbiBSdW5zIEdvIiBvbi10YXA9Il9zZXNzaW9uUnVuR29CdXR0b25DYWxsYmFjayI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRpbnVlLXRvLXR5cGUiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRpbnVlLXRvLXR5cGUtbmFtZSI+CiAgICAgICAgICBUaWxsIENvbmRpdGlvbiBNZXQgYnkgV2F0Y2hlZCBUZW5zb3IKICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBpZD0idGVuc29yQ29uZGl0aW9uRHJvcGRvd24iIGNsYXNzPSJpbnB1dC1ib3giIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIiBsYWJlbD0iVGVuc29yIENvbmRpdGlvbiIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfc2VsZWN0ZWRUZW5zb3JDb25kaXRpb259fSI+CiAgICAgICAgICAKICAgICAgICAgIDxwYXBlci1saXN0Ym94IGlkPSJ0ZW5zb3JDb25kaXRpb25NZW51IiBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5Db250YWlucyArLy3iiJ4gb3IgTmFOPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+Q29udGFpbnMgKy8t4oiePC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+Q29udGFpbnMgTmFOPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWF4ICZndDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5NYXggJmx0OzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPk1pbiAmZ3Q7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWluICZsdDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5NYXggLSBNaW4gJmd0OzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPk1heCAtIE1pbiAmbHQ7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWVhbiAmZ3Q7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWVhbiAmbHQ7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+U3RhbmRhcmQgZGV2aWF0aW9uICZndDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5TdGFuZGFyZCBkZXZpYXRpb24gJmx0OzwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJnby1idXR0b24iIGljb249ImFycm93LWZvcndhcmQiIHRpdGxlPSJUZW5zb3IgQ29uZGl0aW9uIEdvIiBvbi10YXA9Il90ZW5zb3JDb250aW51ZUdvQnV0dG9uQ2FsbGJhY2siPgogICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJyZWYtdmFsdWUiIGNsYXNzPSJpbnB1dC1ib3giIGxhYmVsPSJSZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSB0byIgdHlwZT0ibnVtYmVyIiB2YWx1ZT0ie3tfdGVuc29yQ29uZGl0aW9uUmVmVmFsdWV9fSIgaGlkZGVuPSJbW19pc1JlZlZhbHVlSW5wdXRIaWRkZW5dXSI+CiAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IC5jb250aW51ZS10by10eXBlLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIDpob3N0IHBhcGVyLWRpYWxvZyB7CiAgICAgICAgd2lkdGg6IDM2dnc7CiAgICAgIH0KICAgICAgOmhvc3QgLmlucHV0LWJveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIGZvbnQtc2l6ZTogMTEwJTsKICAgICAgfQogICAgICA6aG9zdCAuZ28tYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRlYnVnZ2VyLWluaXRpYWwtZGlhbG9nIj4KICA8dGVtcGxhdGU+CiAgICAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfb3Blbl1dIj4KICAgICAgPGRpdiBpZD0iZGFzaGJvYXJkLWJhY2tkcm9wIj48L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8cGFwZXItZGlhbG9nIGlkPSJkaWFsb2ciIG5vLWNhbmNlbC1vbi1vdXRzaWRlLWNsaWNrIG5vLWNhbmNlbC1vbi1lc2Mta2V5IG9wZW5lZD0ie3tfb3Blbn19Ij4KICAgICAgPGgyIGlkPSJkaWFsb2ctdGl0bGUiPltbX3RpdGxlXV08L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0N1c3RvbU1lc3NhZ2VdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY3VzdG9tLW1lc3NhZ2UiPltbX2N1c3RvbU1lc3NhZ2VdXTwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9oYXNDdXN0b21NZXNzYWdlXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZXhhbXBsZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUtc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZXhhbXBsZS1zZWN0aW9uLXRpdGxlIj4KICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvU2Vzc2lvbiIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+dGYuU2Vzc2lvbjwvYT46CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlLXNuaXBwZXQiPmltcG9ydCB0ZW5zb3JmbG93IGFzIHRmCmZyb20gdGVuc29yZmxvdy5weXRob24gaW1wb3J0IGRlYnVnIGFzIHRmX2RlYnVnCgpzZXNzID0gdGYuU2Vzc2lvbigpCnNlc3MgPSB0Zl9kZWJ1Zy5UZW5zb3JCb2FyZERlYnVnV3JhcHBlclNlc3Npb24oc2VzcywgIltbX2hvc3RdXTpbW19wb3J0XV0iKQpzZXNzLnJ1bihteV9mZXRjaGVzKQogICAgICAgICAgPC9wcmU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZXhhbXBsZS1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1leGFtcGxlLXNlY3Rpb24tdGl0bGUiPgogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL3Byb2dyYW1tZXJzX2d1aWRlL2VzdGltYXRvcnMiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPkVzdGltYXRvcjwvYT4KICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL3RyYWluL01vbml0b3JlZFNlc3Npb24iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPk1vbml0b3JlZFNlc3Npb248L2E+OgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZS1zbmlwcGV0Ij5pbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHRlbnNvcmZsb3cucHl0aG9uIGltcG9ydCBkZWJ1ZyBhcyB0Zl9kZWJ1ZwoKaG9vayA9IHRmX2RlYnVnLlRlbnNvckJvYXJkRGVidWdIb29rKCJbW19ob3N0XV06W1tfcG9ydF1dIikKbXlfZXN0aW1hdG9yLmZpdCh4PXhfZGF0YSwgeT15X2RhdGEsIHN0ZXBzPTEwMDAsIG1vbml0b3JzPVtob29rXSkKICAgICAgICAgICAgPC9wcmU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZXhhbXBsZS1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1leGFtcGxlLXNlY3Rpb24tdGl0bGUiPgogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8va2VyYXMuaW8vbW9kZWxzL21vZGVsLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+S2VyYXMgTW9kZWw8L2E+OgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZS1zbmlwcGV0Ij5pbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHRlbnNvcmZsb3cucHl0aG9uIGltcG9ydCBkZWJ1ZyBhcyB0Zl9kZWJ1ZwppbXBvcnQga2VyYXMKCmtlcmFzLmJhY2tlbmQuc2V0X3Nlc3Npb24oCiAgICB0Zl9kZWJ1Zy5UZW5zb3JCb2FyZERlYnVnV3JhcHBlclNlc3Npb24odGYuU2Vzc2lvbigpLCAiW1tfaG9zdF1dOltbX3BvcnRdXSIpKQojIERlZmluZSB5b3VyIGtlcmFzIG1vZGVsLCBjYWxsZWQgIm1vZGVsIi4KbW9kZWwuZml0KC4uLikKICAgICAgICAgICAgPC9wcmU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItZGlhbG9nPgogICAgPHN0eWxlPgogICAgICAvKiogV2UgcmVseSBvbiBhIHNlcGFyYXRlIGBfaGlkZGVuYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1ha2luZyB1c2UKICAgICAgICAgIG9mIHRoZSBgX29wZW5gIGF0dHJpYnV0ZSBiZWNhdXNlIHRoaXMgQ1NTIHNwZWNpZmljYXRpb24gbWF5IHN0cmFuZ2VseQogICAgICAgICAgYWZmZWN0IG90aGVyIGVsZW1lbnRzIHRocm91Z2hvdXQgVGVuc29yQm9hcmQuIFNlZSAjODk5LiAqLwogICAgICA6aG9zdChbX2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIDpob3N0LAogICAgICAjZGFzaGJvYXJkLWJhY2tkcm9wIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAjZGFzaGJvYXJkLWJhY2tkcm9wIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgIH0KCiAgICAgIC5jb2RlLWV4YW1wbGUgewogICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CiAgICAgIC5jb2RlLWV4YW1wbGUtc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgLmNvZGUtZXhhbXBsZS1zZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAuY29kZS1zbmlwcGV0IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbTsKICAgICAgfQoKICAgICAgI2RpYWxvZy10aXRsZSB7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgIC5jdXN0b20tbWVzc2FnZSB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZGVidWdnZXItcmVzaXplciI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0iYmFycyI+CiAgICAgIDxkaXYgY2xhc3M9ImJhcnMtcm90YXRvciI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImJhcnMtdGV4dCI+fCB8PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdChbX3Jlc2l6ZXItaWRlbnRpZmllcl0pIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYmFja2dyb3VuZDogI2NjYzsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2lzLWhvcml6b250YWxdKSB7CiAgICAgICAgY3Vyc29yOiByb3ctcmVzaXplOwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbX2lzLXZlcnRpY2FsXSkgewogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICByaWdodDogLTE1cHg7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgfQoKICAgICAgLmJhcnMgewogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgZm9udC1zaXplOiA1cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgIH0KCiAgICAgIC8qKiBUaGlzIGJsb2NrIHByZXZlbnRzIHRoZSBiYXJzIHJvdGF0b3IgZnJvbSBoYXZpbmcgYSBoZWlnaHQgdGhhdCBpcwogICAgICAgICAgdGhlIGVudGlyZSB2aWV3cG9ydCwgdGh1cyBvY2NsdWRpbmcgaXQgYW5kIGdpdmluZyBpdCBhbiB1bmRlc2lyZWQgY3Vyc29yCiAgICAgICAgICB2YWx1ZS4gKi8KICAgICAgLmJhcnMtcm90YXRvciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbaXMtaG9yaXpvbnRhbF0pIC5iYXJzLXJvdGF0b3IgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgICAgfQoKICAgICAgLmJhcnMtdGV4dCB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVkoMTUpOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1vcC1zZWxlY3RvciI+CiAgPHRlbXBsYXRlPgogICAgPGRpdj4KICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9ImZpbHRlci1tb2RlIiBuby1sYWJlbC1mbG9hdD0idHJ1ZSIgbGFiZWw9IkZpbHRlciBNb2RlIiBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19maWx0ZXJNb2RlfX0iPgogICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5Ob2RlIE5hbWU8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+T3AgVHlwZTwvcGFwZXItaXRlbT4KICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPHBhcGVyLWlucHV0IGlkPSJmaWx0ZXItaW5wdXQiIGxhYmVsPSJGaWx0ZXIgUmVnZXgiIGFsd2F5cy1mbG9hdC1sYWJlbCB2YWx1ZT0ie3tfZmlsdGVySW5wdXR9fSI+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBhY3RpdmUgY2xhc3M9InNwaW5uZXIiIGlkPSJsb2FkaW5nLXNwaW5uZXIiIGhpZGRlbj0iW1shX2lzTG9hZGluZ11dIj4KICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgPGRpdiBpZD0ic2VsZWN0b3ItaGllcmFyY2h5Ij48L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLmluZGVudGVkLWxldmVsLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLmxldmVsLWNvbnRhaW5lciBpcm9uLWNvbGxhcHNlIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAyMHB4OwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBtYXJnaW46IDAgOHB4IDAgMDsKICAgICAgfQoKICAgICAgLm9wLXR5cGUgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICAgICAgY29sb3I6ICM0NDQ7CiAgICAgIH0KCiAgICAgIC5vcC10aXRsZS1sZWFmIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5vcC10aXRsZS1sZWFmOmhvdmVyIHsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgfQoKICAgICAgLnBhcnRpYWwtY2hlY2tib3ggewogICAgICAgIGJhY2tncm91bmQ6ICNmNTdjMDA7CiAgICAgIH0KCiAgICAgIC5ub2RlLWV4cGFuZC1idXR0b24gewogICAgICAgIG1hcmdpbjogMCAwIDAgLTEzcHg7CiAgICAgIH0KCiAgICAgIC5sZXZlbC10aXRsZS10ZXh0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xcHg7CiAgICAgIH0KCiAgICAgIC5vcC1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDsKICAgICAgICBtYXJnaW46IDAgMCAwIDI3cHg7CiAgICAgICAgcGFkZGluZzogMTBweCAwOwogICAgICB9CgogICAgICAuc3Bpbm5lciB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgICNmaWx0ZXItbW9kZSB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgI2ZpbHRlci1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmhpZ2hsaWdodGVkIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICB9CiAgICAgIC5oaWdobGlnaHRlZCA+IC5vcC10eXBlIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICB9CgogICAgICAjc2VsZWN0b3ItaGllcmFyY2h5IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKICAKPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1zZXNzaW9uLXJ1bnMtdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0ic2Vzc2lvbi1ydW5zLWRpdiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNlc3Npb24gUnVuczwvZGl2PgogICAgICA8dGFibGUgaWQ9InNlc3Npb24tcnVucy10YWJsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzZXNzaW9uLXJ1bnMtdGFibGUiPgogICAgICAgIDx0ciBhbGlnbj0ibGVmdCI+CiAgICAgICAgICA8dGg+RmVlZHM8L3RoPgogICAgICAgICAgPHRoPkZldGNoZXM8L3RoPgogICAgICAgICAgPHRoPlRhcmdldHM8L3RoPgogICAgICAgICAgPHRoPiMoRGV2aWNlcyk8L3RoPgogICAgICAgICAgPHRoPkNvdW50PC90aD4KICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiAyMHB4IDA7CiAgICAgIH0KCiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDExMCU7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgOmhvc3QgLmluZGVudGVkLWxldmVsLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogMCAwIDAgMTBweDsKICAgICAgfQoKICAgICAgLyogVE9ETyhjYWlzKTogVGhpcyBuZWVkcyB3b3JrOiB0aGUgdGFibGUgc2hvdWxkbid0IGdldCB0b28gd2lkZSB3aGVuCiAgICAgICAgIHRoZXJlIGFyZSBtYW55IGZlZWRzL2ZldGNoZXMvdGFyZ3RlIG5hbWVzLiAqLwogICAgICAuc2Vzc2lvbi1ydW5zLXRhYmxlIHsKICAgICAgICBhbGlnbi1jb250ZW50OiBsZWZ0OwogICAgICAgIGFsaWduLWl0ZW1zOiBsZWZ0OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZCAxcHggYmxhY2s7CiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7CiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAjZGRkOwogICAgICB9CiAgICAgIC5hY3RpdmUtc2Vzc2lvbi1ydW4gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLnNvbGUtYWN0aXZlLXNlc3Npb24tcnVuIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTcyLCAyMzIsIDE4OCk7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5ub2RlLW9yLXRlbnNvci1lbGVtZW50IHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5ub2RlLW9yLXRlbnNvci1lbGVtZW50OmhvdmVyIHsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXNvdXJjZS1jb2RlLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9ImZ1bGxTdGFja0RpYWxvZyIgaGlkZGVuJD0iW1shX2Z1bGxTdGFja1Nob3duXV0iPgogICAgICA8ZGl2IGlkPSJmdWxsLXN0YWNrLXRpdGxlIj4KICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iZmlsdGVyLWxpc3QiIGRpc2FibGVkPSJ0cnVlIj4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIEZ1bGwgU3RhY2sgVHJhY2Ugb2YgTm9kZToKICAgICAgICA8ZGl2IGlkPSJmdWxsLXN0YWNrLW5vZGUtbmFtZSI+IltbX2Z1bGxTdGFja05vZGVOYW1lXV0iPC9kaXY+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImNsb3NlIiBpZD0iY2xvc2UtZnVsbC1zdGFjay1idXR0b24iIHRpdGxlPSJDbG9zZSBGdWxsIFN0YWNrIiBvbi10YXA9Il9jbG9zZUZ1bGxTdGFja0RpYWxvZyI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx1bCBpZD0iZnVsbC1zdGFjay1jb250ZW50Ij48L3VsPgogICAgPC9kaXY+CiAgICA8cGFwZXItdGFicyBpZD0ic291cmNlLWZpbGVzLXRhYnMiIHNlbGVjdGVkPSJ7e19maWxlUGF0aFNlbGVjdGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zaG9ydEZpbGVQYXRoc11dIj4KICAgICAgICA8cGFwZXItdGFiIGlkPSJbW2l0ZW0uaWRdXSI+W1tpdGVtLm5hbWVdXTwvcGFwZXItdGFiPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci10YWJzPgogICAgPGRpdiBpZD0ic291cmNlLWZpbGUtY29udGVudCIgY2xhc3M9InNvdXJjZS1jb250ZW50Ij4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZmlsZUxpbmVzXV0iPgogICAgICAgIDxkaXYgY2xhc3MkPSJ7e2l0ZW0uc291cmNlQ2xhc3N9fSIgaWQ9InNvdXJjZS1saW5lLVtbaXRlbS5saW5lbm9dXSI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic291cmNlLWxpbmUtbnVtYmVyIiBpZD0ic291cmNlLWxpbmVuby1bW2l0ZW0ubGluZW5vXV0iPgogICAgICAgICAgICBbW2l0ZW0ubGluZW5vXV0KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJzb3VyY2UtbGluZS1ub2RlLXRvZ2dsZSIgaWQ9InNvdXJjZS1saW5lLW5vZGUtdG9nZ2xlLVtbaXRlbS5saW5lbm9dXSI+CiAgICAgICAgICAgIFtbaXRlbS5udW1Ob2Rlc11dCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic291cmNlLWxpbmUtdGV4dCIgaWQ9InNvdXJjZS1saW5lLXRleHQtW1tpdGVtLmxpbmVub11dIj4KICAgICAgICAgICAgW1tpdGVtLnRleHRdXQogICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPGRpdiBjbGFzcz0ic291cmNlLWxpbmUtbm9kZXMiIGlkPSJzb3VyY2UtbGluZS1ub2Rlcy1bW2l0ZW0ubGluZW5vXV0iPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzb3VyY2UtZmlsZXMtdGFicyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogOCU7CiAgICAgIH0KICAgICAgLnNvdXJjZS1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiA5MCU7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDkwJTsKICAgICAgICBvdmVyZmxvdy14OiBzY3JvbGw7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CiAgICAgIC5zb3VyY2UtY29udGVudCA6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmMDA7CiAgICAgIH0KICAgICAgLmhpZ2hsaWdodGVkLXNvdXJjZS1saW5lIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOwogICAgICB9CiAgICAgIC5zb3VyY2UtbGluZS1udW1iZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogbGlnaHRibHVlOwogICAgICAgIHdpZHRoOiAyZW07CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICB9CiAgICAgIC5zb3VyY2UtbGluZS1ub2RlLXRvZ2dsZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGNvbG9yOiBibHVlOwogICAgICAgIHdpZHRoOiA1ZW07CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAuc291cmNlLWxpbmUtbm9kZXMgewogICAgICAgIHBhZGRpbmctbGVmdDogNGVtOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgICBtYXJnaW4tdG9wOiAwZW07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMGVtOwogICAgICAgIG1hcmdpbi1yaWdodDogMWVtOwogICAgICB9CiAgICAgIC5zb3VyY2UtbGluZS1ub2RlLWVudHJ5IHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CiAgICAgIH0KICAgICAgLnNvdXJjZS1saW5lLW5vZGVzIHNwYW4gewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CiAgICAgIH0KICAgICAgLnNvdXJjZS1saW5lLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgI2Z1bGxTdGFja0RpYWxvZyB7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHdpZHRoOiA0NSU7CiAgICAgICAgaGVpZ2h0OiA4NSU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgZ3JheTsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggI2RkZDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgICNmdWxsLXN0YWNrLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDExMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgICNmdWxsLXN0YWNrLW5vZGUtbmFtZSB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgIH0KICAgICAgOmhvc3QgI2Z1bGwtc3RhY2stY29udGVudCB7CiAgICAgICAgcGFkZGluZy10b3A6IDFlbTsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTsKICAgICAgICBtYXJnaW4tdG9wOiAwLjVlbTsKICAgICAgICBmb250LXNpemU6IDkwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KICAgICAgLnN0YWNrLWZyYW1lLWNsaWNrYWJsZSB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC5zdGFjay1mcmFtZS1ub25jbGlja2FibGUgewogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICB9CiAgICAgICNjbG9zZS1mdWxsLXN0YWNrLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtdGVuc29yLWRhdGEtc3VtbWFyeSI+CiAgPHRlbXBsYXRlPgogICAgPHNwYW4gY2xhc3M9InNlY3Rpb24tdGl0bGUiPlRlbnNvciBWYWx1ZSBPdmVydmlldzwvc3Bhbj4KICAgIDxkaXYgaWQ9InRlbnNvci1kYXRhLWRpdiIgY2xhc3M9InRlbnNvci1kYXRhLWRpdiI+CiAgICAgIDx0YWJsZSBpZD0idGVuc29yLWRhdGEtdGFibGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0idGVuc29yLWRhdGEtdGFibGUiPgogICAgICAgIDx0aGVhZD4KICAgICAgICAgIDx0ciBhbGlnbj0ibGVmdCI+CiAgICAgICAgICAgIDx0aD5UZW5zb3I8L3RoPgogICAgICAgICAgICA8dGg+Q291bnQ8L3RoPgogICAgICAgICAgICA8dGg+RFR5cGU8L3RoPgogICAgICAgICAgICA8dGg+U2hhcGU8L3RoPgogICAgICAgICAgICA8dGggd2lkdGg9IjI1JSI+VmFsdWU8L3RoPgogICAgICAgICAgICA8dGggd2lkdGg9IjI1JSI+CiAgICAgICAgICAgICAgSGVhbHRoIFBpbGwKICAgICAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBpZD0ic2hvdy1oZWFsdGgtcGlsbHMiIGNoZWNrZWQ9Int7X2hlYWx0aFBpbGxzRW5hYmxlZH19Ij4KICAgICAgICAgICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWNhcmQ+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFsdGgtcGlsbC1sZWdlbmQiIGlkPSJoZWFsdGgtcGlsbC1sZWdlbmQiPjwvZGl2PgogICAgICAgICAgICAgIDwvcGFwZXItY2FyZD4KICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgPHRoIHdpZHRoPSI1JSI+PC90aD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90aGVhZD4KICAgICAgICA8dGJvZHk+PC90Ym9keT4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAjdGVuc29yLWRhdGEtZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIDpob3N0IC5pbmRlbnRlZC1sZXZlbC1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7CiAgICAgIH0KICAgICAgOmhvc3QgLnRlbnNvci1kYXRhLXRhYmxlIHsKICAgICAgICBhbGlnbi1jb250ZW50OiBsZWZ0OwogICAgICAgIGFsaWduLWl0ZW1zOiBsZWZ0OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIHBhZGRpbmctbGVmdDogM3B4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgICBib3gtc2hhZG93OiAzcHggM3B4ICNkZGQ7CiAgICAgIH0KICAgICAgOmhvc3QgI3RlbnNvci1kYXRhLXRhYmxlIHRoIHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CiAgICAgIDpob3N0IC5hY3RpdmUtdGVuc29yIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGJvcmRlcjogc29saWQgMXB4ICM4ODg7CiAgICAgIH0KICAgICAgOmhvc3QgLmhpZ2hsaWdodGVkIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICB9CiAgICAgIDpob3N0IC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CiAgICAgIDpob3N0ICNzaG93LWhlYWx0aC1waWxscyB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgIC52YWx1ZS1leHBhbnNpb24tbGluayB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC52YWx1ZS1leHBhbnNpb24tbGluayA6aG92ZXIgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICB9CiAgICAgIC5oZWFsdGgtcGlsbCA6aG92ZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAudGVuc29yLW5hbWUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAudGVuc29yLW5hbWUgOmhvdmVyIHsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCjxzdHlsZT4vKiBDb3B5cmlnaHQgMjAxOSBUaGUgVGVuc29yRmxvdyBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKLnRlbnNvci13aWRnZXQgewogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgZm9udC1zaXplOiAxNHB4OwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICBvdmVyZmxvdy15OiBoaWRkZW47CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoudGVuc29yLXdpZGdldC1kaW0gewogIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNjAsIDE2MCwgMTYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGhlaWdodDogMTRweDsKICBsaW5lLWhlaWdodDogMTRweDsKICBtYXJnaW4tbGVmdDogMTVweDsKICBtYXJnaW4tcmlnaHQ6IDE1cHg7CiAgcGFkZGluZzogMnB4Owp9CgoudGVuc29yLXdpZGdldC1kaW0tY29tbWEgewogIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogMTJweDsKICBoZWlnaHQ6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDE0cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1oaWdobGlnaHRlZCB7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDEwMCwgMTgwLCAyNTUpOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC1kaW0tYnJhY2tldHMgewogIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogOHB0Owp9CgoudGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24gewogIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsKICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTI4LCAxMjgsIDEyOCk7CiAgYm94LXNoYWRvdzogMnB4IDJweCAycHggI2IwYjBiMDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgd2lkdGg6IDE4MHB4OwogIHotaW5kZXg6IDEwMDA7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93bi1tZW51LWl0ZW0gewogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTgwLCAxODAsIDE4MCk7CiAgZm9udC1zaXplOiAxMnB4OwogIHBhZGRpbmc6IDNweDsKICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLnRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbS1hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6IHJnYigxMDAsIDE4MCwgMjU1KTsKfQoKLnRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZCB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKfQoKLnRlbnNvci13aWRnZXQtZHR5cGUgewogIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICBjb2xvcjogcmdiKDYwLCA2MCwgNjApOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDhwdDsKICBoZWlnaHQ6IDQ4cHg7CiAgbGluZS1oZWlnaHQ6IDIycHg7CiAgbWF4LWhlaWdodDogMjJweDsKICBwYWRkaW5nLWxlZnQ6IDE0cHg7CiAgcGFkZGluZy1yaWdodDogMTBweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLnRlbnNvci13aWRnZXQtZHR5cGUtbGFiZWwgewogIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7Cn0KCi50ZW5zb3Itd2lkZ2V0LWhlYWRlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1MiwgMjUyLCAyNTIpOwogIGJveC1zaGFkb3c6IDJweCAycHggMnB4ICNiMGIwYjA7CiAgaGVpZ2h0OiA0MHB4OwogIGxpbmUtaGVpZ2h0OiA0MHB4OwogIG1heC1oZWlnaHQ6IDQwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDEwMCU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWluZm8gewogIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICBjb2xvcjogcmdiKDAsIDAsIDI1NSk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogOHB0OwogIGhlaWdodDogMjJweDsKICBsaW5lLWhlaWdodDogMjJweDsKICBtYXJnaW4tbGVmdDogOHB4OwogIG1heC1oZWlnaHQ6IDIycHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi50ZW5zb3Itd2lkZ2V0LW1lbnUtdGh1bWIgewogIGNvbG9yOiByZ2IoMzIsIDMzLCAzNik7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LXNpemU6IDE2cHg7CiAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHVzZXItc2VsZWN0OiBub25lOwp9CgoudGVuc29yLXdpZGdldC1tZW51LXRodW1iOmhvdmVyIHsKICBjb2xvcjogcmdiKDIyNywgMTE2LCAwKTsKfQoKLnRlbnNvci13aWRnZXQtc2hhcGUgewogIGNvbG9yOiByZ2IoNjAsIDYwLCA2MCk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1sZWZ0OiAxMnB4Owp9CgoudGVuc29yLXdpZGdldC1zaGFwZS1sYWJlbCB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi50ZW5zb3Itd2lkZ2V0LXNoYXBlLXZhbHVlIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi50ZW5zb3Itd2lkZ2V0LXNsaWNpbmctZ3JvdXAgewogIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTAsIDI1MCwgMjUwKTsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDE5MCwgMTkwLCAxOTApOwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMThweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgcGFkZGluZy1ib3R0b206IDVweDsKICBwYWRkaW5nLXRvcDogNXB4Owp9CgoudGVuc29yLXdpZGdldC10ZW5zb3ItbmFtZSB7CiAgY29sb3I6IGJsYWNrOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLnRlbnNvci13aWRnZXQtbGVmdC1ydWxlci10aWNrIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ydWxlci1iYWNrZ3JvdW5kLWNvbG9yKTsKICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGJvcmRlci10b3A6IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm94LXNoYWRvdzogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBjb2xvcjogcmdiKDExMCwgMTEwLCAxMTApOwogIGN1cnNvcjogcG9pbnRlcjsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGhlaWdodDogMjlweDsKICBsaW5lLWhlaWdodDogMjlweDsKICBtYXJnaW4tbGVmdDogMHB4OwogIG1heC13aWR0aDogNDVweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogNDVweDsKfQoKLnRlbnNvci13aWRnZXQtdG9wLXJ1bGVyIHsKICBoZWlnaHQ6IDI0cHg7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcCB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MCwgMjQwLCAyNDApOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNjAsIDE2MCwgMTYwKTsKICBib3gtc2hhZG93OiAxcHggMXB4IDFweCAjYjBiMGIwOwogIGRpc3BsYXk6IG5vbmU7CiAgZm9udC1zaXplOiAxM3B4OwogIHBhZGRpbmc6IDVweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgd2lkdGg6IDI0MHB4Owp9CgoudGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwLWNvbG9yYmFyIHsKICBoZWlnaHQ6IDI0cHg7CiAgd2lkdGg6IDk1JTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC1pbmRpY2VzIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC12YWx1ZSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQoKLnRlbnNvci13aWRnZXQtdG9wLXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyNHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIHBhZGRpbmctcmlnaHQ6IDJweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogNDVweDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2IHsKICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGJvcmRlci1yaWdodDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogODAlOwogIGhlaWdodDogMjRweDsKICBsaW5lLWhlaWdodDogMjRweDsKICBtYXgtd2lkdGg6IDQ1cHg7CiAgcGFkZGluZy1yaWdodDogMnB4OwogIHRleHQtYWxpZ246IHJpZ2h0OwogIHVzZXItc2VsZWN0OiBub25lOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDQ1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24gewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLWJvdHRvbSB7CiAgYm9yZGVyLWJvdHRvbTogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0IHsKICBib3JkZXItbGVmdDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1yaWdodCB7CiAgYm9yZGVyLXJpZ2h0OiAwLjVweCBzb2xpZCBibHVlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXRvcCB7CiAgYm9yZGVyLXRvcDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtc2VjdGlvbiB7CiAgLS1ib3JkZXItc3R5bGU6IDFweCBzb2xpZCByZ2IoMTQwLCAxNDAsIDE0MCk7CiAgLS1ydWxlci1iYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjEwLCAyMTAsIDIxMCk7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1yb3cgewogIGhlaWdodDogMjVweDsKICBsaW5lLWhlaWdodDogMjVweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Cjwvc3R5bGU+Cgo8ZG9tLW1vZHVsZSBpZD0idGVuc29yLXdpZGdldC1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPi8qIENvcHlyaWdodCAyMDE5IFRoZSBUZW5zb3JGbG93IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoudGVuc29yLXdpZGdldCB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDE0cHg7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIG92ZXJmbG93LXk6IGhpZGRlbjsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbSB7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxNHB4OwogIG1hcmdpbi1sZWZ0OiAxNXB4OwogIG1hcmdpbi1yaWdodDogMTVweDsKICBwYWRkaW5nOiAycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1jb21tYSB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGhlaWdodDogMTRweDsKICBsaW5lLWhlaWdodDogMTRweDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWhpZ2hsaWdodGVkIHsKICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTAwLCAxODAsIDI1NSk7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1icmFja2V0cyB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93biB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjgsIDEyOCwgMTI4KTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGN1cnNvcjogcG9pbnRlcjsKICB3aWR0aDogMTgwcHg7CiAgei1pbmRleDogMTAwMDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxODAsIDE4MCwgMTgwKTsKICBmb250LXNpemU6IDEycHg7CiAgcGFkZGluZzogM3B4OwogIHVzZXItc2VsZWN0OiBub25lOwp9CgoudGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCwgMTgwLCAyNTUpOwp9CgoudGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWRpc2FibGVkIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwp9CgoudGVuc29yLXdpZGdldC1kdHlwZSB7CiAgYWxpZ24tY29udGVudDogY2VudGVyOwogIGNvbG9yOiByZ2IoNjAsIDYwLCA2MCk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogOHB0OwogIGhlaWdodDogNDhweDsKICBsaW5lLWhlaWdodDogMjJweDsKICBtYXgtaGVpZ2h0OiAyMnB4OwogIHBhZGRpbmctbGVmdDogMTRweDsKICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoudGVuc29yLXdpZGdldC1kdHlwZS1sYWJlbCB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKfQoKLnRlbnNvci13aWRnZXQtaGVhZGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjUyLCAyNTIsIDI1Mik7CiAgYm94LXNoYWRvdzogMnB4IDJweCAycHggI2IwYjBiMDsKICBoZWlnaHQ6IDQwcHg7CiAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgbWF4LWhlaWdodDogNDBweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogMTAwJTsKfQoKLnRlbnNvci13aWRnZXQtaW5mbyB7CiAgYWxpZ24tY29udGVudDogY2VudGVyOwogIGNvbG9yOiByZ2IoMCwgMCwgMjU1KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7CiAgaGVpZ2h0OiAyMnB4OwogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIG1hcmdpbi1sZWZ0OiA4cHg7CiAgbWF4LWhlaWdodDogMjJweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLnRlbnNvci13aWRnZXQtbWVudS10aHVtYiB7CiAgY29sb3I6IHJnYigzMiwgMzMsIDM2KTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc2l6ZTogMTZweDsKICBtYXJnaW4tbGVmdDogMTBweDsKICBtYXJnaW4tcmlnaHQ6IDVweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi50ZW5zb3Itd2lkZ2V0LW1lbnUtdGh1bWI6aG92ZXIgewogIGNvbG9yOiByZ2IoMjI3LCAxMTYsIDApOwp9CgoudGVuc29yLXdpZGdldC1zaGFwZSB7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDEycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXNoYXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2hhcGUtdmFsdWUgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2xpY2luZy1ncm91cCB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1MCwgMjUwLCAyNTApOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTkwLCAxOTAsIDE5MCk7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxOHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBwYWRkaW5nLWJvdHRvbTogNXB4OwogIHBhZGRpbmctdG9wOiA1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXRlbnNvci1uYW1lIHsKICBjb2xvcjogYmxhY2s7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC1sZWZ0LXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBib3gtc2hhZG93OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyOXB4OwogIGxpbmUtaGVpZ2h0OiAyOXB4OwogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgbWF4LXdpZHRoOiA0NXB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB1c2VyLXNlbGVjdDogbm9uZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiA0NXB4Owp9CgoudGVuc29yLXdpZGdldC10b3AtcnVsZXIgewogIGhlaWdodDogMjRweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGJveC1zaGFkb3c6IDFweCAxcHggMXB4ICNiMGIwYjA7CiAgZGlzcGxheTogbm9uZTsKICBmb250LXNpemU6IDEzcHg7CiAgcGFkZGluZzogNXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB1c2VyLXNlbGVjdDogbm9uZTsKICB3aWR0aDogMjQwcHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLXRvb2x0aXAtY29sb3JiYXIgewogIGhlaWdodDogMjRweDsKICB3aWR0aDogOTUlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwLWluZGljZXMgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwLXZhbHVlIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9CgoudGVuc29yLXdpZGdldC10b3AtcnVsZXItdGljayB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnVsZXItYmFja2dyb3VuZC1jb2xvcik7CiAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBib3JkZXItcmlnaHQ6IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgY29sb3I6IHJnYigxMTAsIDExMCwgMTEwKTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogMTJweDsKICBoZWlnaHQ6IDI0cHg7CiAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgcGFkZGluZy1yaWdodDogMnB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB1c2VyLXNlbGVjdDogbm9uZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiA0NXB4Owp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYgewogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGN1cnNvcjogcG9pbnRlcjsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4MCU7CiAgaGVpZ2h0OiAyNHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIG1heC13aWR0aDogNDVweDsKICBwYWRkaW5nLXJpZ2h0OiAycHg7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogNDVweDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbiB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24tYm90dG9tIHsKICBib3JkZXItYm90dG9tOiAwLjVweCBzb2xpZCBibHVlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLWxlZnQgewogIGJvcmRlci1sZWZ0OiAwLjVweCBzb2xpZCBibHVlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXJpZ2h0IHsKICBib3JkZXItcmlnaHQ6IDAuNXB4IHNvbGlkIGJsdWU7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24tdG9wIHsKICBib3JkZXItdG9wOiAwLjVweCBzb2xpZCBibHVlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1zZWN0aW9uIHsKICAtLWJvcmRlci1zdHlsZTogMXB4IHNvbGlkIHJnYigxNDAsIDE0MCwgMTQwKTsKICAtLXJ1bGVyLWJhY2tncm91bmQtY29sb3I6IHJnYigyMTAsIDIxMCwgMjEwKTsKICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOwogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLXJvdyB7CiAgaGVpZ2h0OiAyNXB4OwogIGxpbmUtaGVpZ2h0OiAyNXB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRlYnVnZ2VyLWxpbmUtY2hhcnQiPgogIDx0ZW1wbGF0ZT4KICAgIDx2ei1saW5lLWNoYXJ0MiB4LWNvbXBvbmVudHMtY3JlYXRpb24tbWV0aG9kPSJbW19saW5lQ2hhcnRYQ29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iIHktdmFsdWUtYWNjZXNzb3I9IltbX2xpbmVDaGFydFlWYWx1ZUFjY2Vzc29yXV0iIHRvb2x0aXAtY29sdW1ucz0iW1tfbGluZUNoYXJ0VG9vbHRpcENvbHVtbnNdXSIgc21vb3RoaW5nLWVuYWJsZWQ9IltbX2xpbmVDaGFydFNtb290aGluZ0VuYWJsZWRdXSI+PC92ei1saW5lLWNoYXJ0Mj4KICAgIDxzdHlsZT4KICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi10ZW5zb3ItdmFsdWUtdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLXRvYXN0IGlkPSJ0ZW5zb3JWYWx1ZVRvYXN0IiB0ZXh0PSIiIGFsd2F5cy1vbi10b3A+PC9wYXBlci10b2FzdD4KICAgIDx0YWJsZSBjbGFzcz0idGVuc29yLXZhbHVlLXZpZXctdGFibGUiPgogICAgICA8dHI+CiAgICAgICAgPHRkIGNvbHNwYW49IjIiPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gaWQ9InRlbnNvci1uYW1lIiBvbi10YXA9InRlbnNvck5hbWVDYWxsYmFjayI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlbnNvci1uYW1lLXRleHQiPltbdGVuc29yTmFtZV1dPC9zcGFuPgogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJjbG9zZSIgY2xhc3M9InZhbHVlLXZpZXctaWNvbi1idXR0b24iIGlkPSJ2YWx1ZS12aWV3LWljb24tYnV0dG9uIiB0aXRsZT0iQ2xvc2UiIG9uLXRhcD0iY2xvc2VCdXR0b25DYWxsYmFjayI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImZvcndhcmQiIGNsYXNzPSJ2YWx1ZS12aWV3LWljb24tYnV0dG9uIiBpZD0idmFsdWUtdmlldy1pY29uLWJ1dHRvbiIgdGl0bGU9IkNvbnRpbnVlIHRvIiBvbi10YXA9ImNvbnRpbnVlVG9CdXR0b25DYWxsYmFjayI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0ciBjbGFzcz0idGVuc29yLXZhbHVlLXZhbHVlLXRyIj4KICAgICAgICA8dGQ+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3VzZVRlbnNvcldpZGdldF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0idGVuc29yLXdpZGdldCI+PC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX3VzZVRlbnNvcldpZGdldF1dIj4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gaWQ9ImRlYnVnLW9wIj48L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGNsYXNzPSJpbmxpbmUgdmFsdWUtY2FyZC1pbnB1dCIgbGFiZWw9IlNsaWNpbmciIGlkPSJzbGljaW5nIiB2YWx1ZT0ie3tzbGljaW5nfX0iIG9uLWNoYW5nZT0icmVmcmVzaCI+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGNsYXNzPSJpbmxpbmUgdmFsdWUtY2FyZC1pbnB1dCIgbGFiZWw9IlRpbWUgSW5kaWNlcyIgaWQ9InRpbWUtaW5kaWNlcyIgdmFsdWU9Int7dGltZUluZGljZXN9fSIgb24tY2hhbmdlPSJyZWZyZXNoIj4KICAgICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBpZD0idGltZS1pbmRpY2VzLXRvZ2dsZS1idXR0b24iIGNsYXNzPSJ0ZW5zb3ItdmFsdWUtYnV0dG9ucyIgb24tY2xpY2s9Il90aW1lSW5kaWNlc1RvZ2dsZUJ1dHRvbkNhbGxiYWNrIj5GdWxsIEhpc3Rvcnk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPC9kaXY+PC90ZW1wbGF0ZT48L3RkPjx0ZCBjbGFzcz0idGVuc29yLXZhbHVlLXZpZXctdGQiPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1ZhbHVlU2NhbGFyXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgY2xhc3M9ImlubGluZSIgbGFiZWw9IlNjYWxhciBWYWx1ZSIgaWQ9InZhbHVlLXNjYWxhciIgdmFsdWU9IltbX2RhdGFTY2FsYXJdXSI+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1ZhbHVlTGluZUNoYXJ0XV0iPgogICAgICAgICAgICAgICAgICA8dGYtZGVidWdnZXItbGluZS1jaGFydCBkYXRhPSJbW19saW5lQ2hhcnREYXRhXV0iPjwvdGYtZGVidWdnZXItbGluZS1jaGFydD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVmFsdWVJbWFnZV1dIj4KICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0idmFsdWUtaW1hZ2UiIGhlaWdodD0iMjUwcHgiIHdpZHRoPSIyNTBweCIgc3JjJD0iW1tfZGF0YUltYWdlU3JjXV0iPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAKICAgICAgICAgIAogICAgICAgIAogICAgICA8L3RyPgogICAgPC90YWJsZT4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGVuc29yLXdpZGdldC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLnRlbnNvci12YWx1ZS1idXR0b25zIHsKICAgICAgICBoZWlnaHQ6IDc1JTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLnRlbnNvci12YWx1ZS12aWV3LXRhYmxlIHsKICAgICAgICB3aWR0aDogNTAwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLXRhYmxlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiA1cHg7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogM3B4OwogICAgICAgIHBhZGRpbmctbGVmdDogM3B4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4OwogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggMXB4IDFweCAjZDhkOGQ4OwogICAgICB9CiAgICAgIC50ZW5zb3ItdmFsdWUtdmlldy10ZCB7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICB9CiAgICAgIC52YWx1ZS1jYXJkLWlucHV0IHsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgIH0KICAgICAgI3RlbnNvci1uYW1lIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA1MCU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC50ZW5zb3ItbmFtZS10ZXh0IHsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAjZGVidWctb3AgewogICAgICAgIGZvbnQtc2l6ZTogOTAlOwogICAgICB9CiAgICAgIC52YWx1ZS1pbWFnZSB7CiAgICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7CiAgICAgIH0KICAgICAgLnZhbHVlLXZpZXctaWNvbi1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgIH0KICAgICAgI3RlbnNvci13aWRnZXQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNjAsIDE2MCwgMTYwKTsKICAgICAgICAvKiBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgICAgICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgICAgIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7ICovCiAgICAgICAgaGVpZ2h0OiAyODBweDsKICAgICAgICB3aWR0aDogNDg0cHg7CiAgICAgIH0KICAgICAgI3NsaWNpbmcsCiAgICAgICN0aW1lLWluZGljZXMgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIH0KICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLXRlbnNvci12YWx1ZS1tdWx0aS12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtdWx0aVZpZXciPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5UZW5zb3IgVmFsdWVzPC9kaXY+CiAgICAgIDxkaXYgaWQ9Im11bHRpLXRlbnNvci12aWV3LWNvbnRhaW5lciI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTEwJTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAjbXVsdGlWaWV3IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggI2VlZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRlYnVnZ2VyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLXRvYXN0IGlkPSJ0b2FzdCIgdGV4dD0iIiBhbHdheXMtb24tdG9wPjwvcGFwZXItdG9hc3Q+CiAgICA8dGYtZGVidWdnZXItaW5pdGlhbC1kaWFsb2cgaWQ9ImluaXRpYWxEaWFsb2ciPjwvdGYtZGVidWdnZXItaW5pdGlhbC1kaWFsb2c+CiAgICAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIiBpZD0ibGVmdC1wYW5lIj4KICAgICAgICA8ZGl2IGlkPSJub2RlLWVudHJpZXMiIGNsYXNzPSJub2RlLWVudHJpZXMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVidWdnZXItc2VjdGlvbi10aXRsZSI+UnVudGltZSBOb2RlIExpc3Q8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1zb3VyY2UtY29kZSI+CiAgICAgICAgICAgIFNob3cgQ29kZToKICAgICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2xhc3M9InRvZ2dsZS1zb3VyY2UtY29kZSIgaWQ9InNob3ctc291cmNlLWNvZGUiIGNoZWNrZWQ9Int7X3NvdXJjZUNvZGVTaG93bn19Ij48L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0Zi1vcC1zZWxlY3RvciBkZWJ1Zy13YXRjaGVzPSJbW19kZWJ1Z1dhdGNoZXNdXSIgZGVidWctd2F0Y2gtY2hhbmdlPSJbW19jcmVhdGVEZWJ1Z1dhdGNoQ2hhbmdlSGFuZGxlcigpXV0iIG5vZGUtY2xpY2tlZD0iW1tfY3JlYXRlTm9kZUNsaWNrZWRIYW5kbGVyKCldXSIgZm9yY2UtZXhwYW5kLWFuZC1jaGVjay1ub2RlLW5hbWU9IltbX2ZvcmNlRXhwYW5kQW5kQ2hlY2tOb2RlTmFtZV1dIiBmb3JjZS1leHBhbmQtbm9kZS1uYW1lPSJbW19mb3JjZUV4cGFuZE5vZGVOYW1lXV0iPgogICAgICAgICAgPC90Zi1vcC1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzb3VyY2UtY29kZS12aWV3LWRpdiIgY2xhc3M9InNvdXJjZS1jb2RlLXZpZXctZGl2IiBoaWRkZW4kPSJ7eyFfc291cmNlQ29kZVNob3dufX0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVidWdnZXItc2VjdGlvbi10aXRsZSI+U291cmNlIENvZGU8L2Rpdj4KICAgICAgICAgIDx0Zi1zb3VyY2UtY29kZS12aWV3IGlkPSJzb3VyY2VDb2RlVmlldyIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIiBkZWJ1Zy13YXRjaGVzPSJbW19kZWJ1Z1dhdGNoZXNdXSIgZm9jdXMtbm9kZS1uYW1lPSJbW19zb3VyY2VGb2N1c05vZGVOYW1lXV0iIG5vZGUtY2xpY2tlZD0iW1tfY3JlYXRlTm9kZUNsaWNrZWRIYW5kbGVyKCldXSIgY29udGludWUtdG8tbm9kZT0iW1tfY3JlYXRlQ29udGludWVUb05vZGVIYW5kbGVyKCldXSI+PC90Zi1zb3VyY2UtY29kZS12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDx0Zi1kZWJ1Z2dlci1yZXNpemVyIGN1cnJlbnQtbGVuZ3RoPSJ7e19sZWZ0UGFuZVdpZHRofX0iIG1pbi1sZW5ndGg9IltbX21pbmxlZnRQYW5lV2lkdGhdXSIgbWF4LWxlbmd0aD0iW1tfbWF4bGVmdFBhbmVXaWR0aF1dIj4KICAgICAgICA8L3RmLWRlYnVnZ2VyLXJlc2l6ZXI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0Zi1zZXNzaW9uLXJ1bnMtdmlldyBpZD0ic2Vzc2lvblJ1bnNWaWV3IiBsYXRlc3Qtc2Vzc2lvbi1ydW49IltbX2xhdGVzdFNlc3Npb25SdW5dXSIgc2Vzc2lvbi1ydW4ta2V5LXRvLWRldmljZS1uYW1lcz0iW1tfc2Vzc2lvblJ1bktleTJEZXZpY2VOYW1lc11dIiBzb2xlLWFjdGl2ZT0iW1tfc2Vzc2lvblJ1blNvbGVBY3RpdmVdXSIgbm9kZS1vci10ZW5zb3ItY2xpY2tlZD0iW1tfY3JlYXRlRmVlZEZldGNoVGFyZ2V0Q2xpY2tlZEhhbmRsZXIoKV1dIj4KICAgICAgICAgIDwvdGYtc2Vzc2lvbi1ydW5zLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9ucy1jb250YWluZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgY2xhc3M9ImNvbnRpbnVlLWJ1dHRvbiIgb24tY2xpY2s9Il9zdGVwIj4KICAgICAgICAgICAgPHNwYW4+W1tfc3RlcEJ1dHRvblRleHRdXTwvc3Bhbj4KICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgPHRmLWRlYnVnZ2VyLWNvbnRpbnVlLWRpYWxvZyBpZD0iY29udGludWVEaWFsb2ciIHNlc3Npb24tcnVuLWdvPSJbW19jcmVhdGVTZXNzaW9uUnVuR28oKV1dIiB0ZW5zb3ItY29uZGl0aW9uLWdvPSJbW19jcmVhdGVUZW5zb3JDb25kaXRpb25HbygpXV0iIGZvcmNlLWNvbnRpbnVhdGlvbi1zdG9wPSJbW19jcmVhdGVGb3JjZUNvbnRpbnVhdGlvblN0b3AoKV1dIj4KICAgICAgICAgIDwvdGYtZGVidWdnZXItY29udGludWUtZGlhbG9nPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgICA8dGYtZ3JhcGgtbG9hZGVyIGlkPSJsb2FkZXIiIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIgb3V0LWdyYXBoPSJ7e2dyYXBofX0iIG91dC1zdGF0cz0ie3tzdGF0c319IiBwcm9ncmVzcz0ie3tfZ3JhcGhQcm9ncmVzc319Ij48L3RmLWdyYXBoLWxvYWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIiBpZD0iY2VudGVyLWNvbnRlbnQiPgogICAgICAgIDxkaXYgaWQ9InRvcC1yaWdodC1xdWFkcmFudCI+CiAgICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfdG9wUmlnaHRTZWxlY3RlZH19Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfdG9wUmlnaHRUYWJzXV0iPgogICAgICAgICAgICAgIDxwYXBlci10YWIgaWQ9IltbaXRlbS5pZF1dIj5bW2l0ZW0ubmFtZV1dPC9wYXBlci10YWI+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3BhcGVyLXRhYnM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJydW50aW1lLWdyYXBoLWRldmljZSI+CiAgICAgICAgICAgIDxzcGFuIGlkPSJydW50aW1lLWdyYXBoLWRldmljZS1uYW1lIj4gPC9zcGFuPgogICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBpZD0iYWN0aXZlLXJ1bnRpbWUtZ3JhcGgtZGV2aWNlLW5hbWUiIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIiBsYWJlbD0iRGV2aWNlIG5hbWUiIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2FjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWV9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfYWN0aXZlU2Vzc2lvblJ1bkRldmljZXNdXSI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgY2xhc3M9InNwaW5uZXIiIGlkPSJ0b3AtcmlnaHQtc3Bpbm5lciIgaGlkZGVuPSJbWyFfYnVzeV1dIiBhY3RpdmU9IltbX2J1c3ldXSI+CiAgICAgICAgICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgaWQ9InRvcC1yaWdodC1wcm9ncmVzcy1iYXIiIHZhbHVlPSIwIj48L3BhcGVyLXByb2dyZXNzPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZV1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iZ3JhcGgtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8dGYtZ3JhcGggaWQ9ImdyYXBoIiBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIgYmFzaWMtZ3JhcGg9IltbZ3JhcGhdXSIgc3RhdHM9Iltbc3RhdHNdXSIgcHJvZ3Jlc3M9Int7X2dyYXBoUHJvZ3Jlc3N9fSIgY29sb3ItYnk9InN0cnVjdHVyZSIgY29sb3ItYnktcGFyYW1zPSJ7e2NvbG9yQnlQYXJhbXN9fSIgcmVuZGVyLWhpZXJhcmNoeT0ie3tfcmVuZGVySGllcmFyY2h5fX0iIG5vZGUtY29udGV4dC1tZW51LWl0ZW1zPSJbW19jcmVhdGVOb2RlQ29udGV4dE1lbnVJdGVtcygpXV0iPjwvdGYtZ3JhcGg+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGV4dC1tZW51Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1RvcFJpZ2h0VGVuc29yVmFsdWVzQWN0aXZlXV0iPgogICAgICAgICAgICA8dGYtdGVuc29yLXZhbHVlLW11bHRpLXZpZXcgaWQ9InRlbnNvclZhbHVlTXVsdGlWaWV3IiBjb250aW51ZS10by1jYWxsYmFjaz0iW1tfY3JlYXRlQ29udGludWVUb0NhbGxiYWNrKCldXSIgdGVuc29yLW5hbWUtY2xpY2tlZD0iW1tfY3JlYXRlTm9kZUNsaWNrZWRIYW5kbGVyKCldXSIgZ2V0LWhlYWx0aC1waWxsPSJbW19jcmVhdGVHZXRIZWFsdGhQaWxsKCldXSI+CiAgICAgICAgICAgIDwvdGYtdGVuc29yLXZhbHVlLW11bHRpLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dGYtZGVidWdnZXItcmVzaXplciBpcy1ob3Jpem9udGFsPSJ0cnVlIiBjdXJyZW50LWxlbmd0aD0ie3tfdG9wUmlnaHRRdWFkcmFudEhlaWdodH19IiBtaW4tbGVuZ3RoPSJbW19taW5Ub3BSaWdodFF1YWRyYW50SGVpZ2h0XV0iIG1heC1sZW5ndGg9IltbX21heFRvcFJpZ2h0UXVhZHJhbnRIZWlnaHRdXSI+CiAgICAgICAgPC90Zi1kZWJ1Z2dlci1yZXNpemVyPgoKICAgICAgICA8ZGl2IGlkPSJ0ZW5zb3ItZGF0YSIgY2xhc3M9InRlbnNvci1kYXRhIj4KICAgICAgICAgIDx0Zi10ZW5zb3ItZGF0YS1zdW1tYXJ5IGlkPSJ0ZW5zb3JEYXRhU3VtbWFyeSIgbGF0ZXN0LXRlbnNvci1kYXRhPSJbW19sYXRlc3RUZW5zb3JEYXRhXV0iIGV4cGFuZC1oYW5kbGVyPSJbW19jcmVhdGVUZW5zb3JEYXRhRXhwYW5kSGFuZGxlcigpXV0iIGNvbnRpbnVlLXRvLWNhbGxiYWNrPSJbW19jcmVhdGVDb250aW51ZVRvQ2FsbGJhY2soKV1dIiBoaWdobGlnaHRlZC1ub2RlLW5hbWU9IltbX2hpZ2hsaWdodE5vZGVOYW1lXV0iIHRlbnNvci1uYW1lLWNsaWNrZWQ9IltbX2NyZWF0ZU5vZGVDbGlja2VkSGFuZGxlcigpXV0iIGdldC1oZWFsdGgtcGlsbD0iW1tfY3JlYXRlR2V0SGVhbHRoUGlsbCgpXV0iPgogICAgICAgICAgPC90Zi10ZW5zb3ItZGF0YS1zdW1tYXJ5PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIHBhcGVyLXRvYXN0IHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIHdpZHRoOiA0MHZ3OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzMHZ3OwogICAgICB9CiAgICAgIHRmLWRhc2hib2FyZC1sYXlvdXQgewogICAgICAgIC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLWJhc2lzOiBhdXRvOwogICAgICAgIC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLW1heC13aWR0aDogbm9uZTsKICAgICAgICAtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1taW4td2lkdGg6IG5vbmU7CiAgICAgIH0KICAgICAgLmRlYnVnZ2VyLXNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTEwJTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICBwYXBlci10YWJzIHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CiAgICAgIHBhcGVyLXRhYi5pcm9uLXNlbGVjdGVkIHsKICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgI2luaXRpYWxEaWFsb2cgewogICAgICAgIC8qKiBUaGlzIG1hdGNoZXMgdGhlIGRlZmF1bHQgei1pbmRleCBvZiBwYXBlci1kaWFsb2cgYmFja2Ryb3BzLiAqLwogICAgICAgIHotaW5kZXg6IDEwMjsKICAgICAgfQogICAgICAvKiogUmVzaXplIHRoZSByZWdpb24gZm9yIHRoZSBncmFwaCBhcyB0aGUgdXNlciByZXNpemVzIHRoZSByZWdpb24uICovCiAgICAgICNncmFwaC1jb250YWluZXIgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMTIwcHgpOwogICAgICAgIC8qKiBDbGlwIHRoZSBtaW5pbWFwIGlmIHRoZSBoZWlnaHQgb2YgdGhlIGdyYXBoIGNvbnRhaW5lciBpcyBzbWFsbC4gKi8KICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAjZ3JhcGggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmctbGFiZWwgewogICAgICAgIG1hcmdpbi10b3A6IDEzcHg7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtc29ydGluZyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgd2lkdGg6IDEwNXB4OwogICAgICB9CiAgICAgICN4LXR5cGUtc2VsZWN0b3IgcGFwZXItYnV0dG9uIHsKICAgICAgICBtYXJnaW46IDVweCAzcHg7CiAgICAgIH0KICAgICAgLnJ1bnRpbWUtZ3JhcGgtZGV2aWNlIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgICNydW50aW1lLWdyYXBoLWRldmljZS1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDg1JTsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgICNhY3RpdmUtcnVudGltZS1ncmFwaC1kZXZpY2UtbmFtZSB7CiAgICAgICAgZm9udC1zaXplOiA4NSU7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAjdG9wLXJpZ2h0LXByb2dyZXNzLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgICAgLmxpbmUtaXRlbSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICAuc2lkZWJhciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXg6IHZpc2libGU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIC5jZW50ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgdGYtZGVidWdnZXItcmVzaXplciB7CiAgICAgICAgcmlnaHQ6IC0xMHB4OwogICAgICB9CiAgICAgICNjZW50ZXItY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CiAgICAgIC8qKiBUaGUgcmVzaXplciBzaG91bGQgaGF2ZSBubyBzcGFjZSB0byB0aGUgbGVmdCBvZiBpdC4gKi8KICAgICAgI2NlbnRlci1jb250ZW50IHRmLWRlYnVnZ2VyLXJlc2l6ZXJbaXMtaG9yaXpvbnRhbF0gewogICAgICAgIG1hcmdpbi1sZWZ0OiAtMjNweDsKICAgICAgfQogICAgICAuY29udGV4dC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgICB9CiAgICAgIC5zcGlubmVyIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQogICAgICAubm9kZS1lbnRyaWVzIHsKICAgICAgICBib3gtc2hhZG93OiAzcHggM3B4ICNkZGQ7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IDgwJTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuc291cmNlLWNvZGUtdmlldy1kaXYgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDQwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7CiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAjZGRkOwogICAgICB9CiAgICAgICNzZXNzaW9uUnVuc1ZpZXcgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiAyNXZoOwogICAgICB9CiAgICAgIC5idXR0b25zLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZzogMjBweCAwOwogICAgICB9CiAgICAgICN0ZW5zb3ItZGF0YSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDIwcHggMDsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgIH0KICAgICAgI3RlbnNvckRhdGFTdW1tYXJ5IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICB9CiAgICAgICN0b3AtcmlnaHQtcXVhZHJhbnQgewogICAgICAgIGhlaWdodDogNjYlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CiAgICAgIC50b2dnbGUtc291cmNlLWNvZGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMWVtOwogICAgICAgIGZvbnQtc2l6ZTogODAlOwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQogICAgICAuY29udGV4dC1tZW51IHVsIHsKICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CiAgICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICAgIHBhZGRpbmc6IDRweCAxNnB4OwogICAgICB9CiAgICAgIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDIwMHB4OwogICAgICB9CiAgICAgIC5pbmxpbmUsCiAgICAgIHBhcGVyLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydCB7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItbWF0ZXJpYWwtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgICB9CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtbGVnZW5kIHsKICAgICAgICBwYWRkaW5nOiAxNXB4OwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtbGVnZW5kIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgewogICAgICAgIG1hcmdpbjogMTBweCAxMHB4IDEwcHggMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1wcmV2aWV3IHsKICAgICAgICB3aWR0aDogMjZweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW46IDAgMTBweCAwIDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAuY29sb3ItbGFiZWwsCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBjb2xvcjogIzc3NzsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICBsaW5lLWhlaWdodDogMjZweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLnRlbnNvci1jb3VudCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgLyogMzEgY29tZXMgZnJvbSBhZGRpbmcgYSBwYWRkaW5nIG9mIDE1cHggZnJvbSBib3RoIHNpZGVzIG9mIHRoZSBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nCiAgICogMXB4IHNvIHRoYXQgdGhlIHNsaWRlciB3aWR0aCBhbGlnbnMgd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwKICAgKiBhbmQgYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZiB0aGUgaW1hZ2UuIDMwIC0gMSArIDIuCiAgICogQXBwYXJlbnRseSwgdGhlIHBhcGVyLXNsaWRlciBsYWNrcyBhIG1peGluIGZvciB0aG9zZSBwYWRkaW5nIHZhbHVlcy4gKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbHMtbG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxsLXN0ZXAtbnVtYmVyLWlucHV0IHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogNDAwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHRkIHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgLmZpcnN0LW9mZmVuc2UtdGQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmZpcnN0LW9mZmVuc2UtdGQgewogICAgICAgIHdpZHRoOiA4MHB4OwogICAgICB9CgogICAgICAudGVuc29yLWRldmljZS10ZCB7CiAgICAgICAgbWF4LXdpZHRoOiAxNDBweDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC50ZW5zb3Itc2VjdGlvbi13aXRoaW4tdGFibGUgewogICAgICAgIGNvbG9yOiAjMjY2MjM2OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC50ZW5zb3Itc2VjdGlvbi13aXRoaW4tdGFibGU6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5kZXZpY2Utc2VjdGlvbi13aXRoaW4tdGFibGUgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAubWluaS1oZWFsdGgtcGlsbCB7CiAgICAgICAgd2lkdGg6IDEzMHB4OwogICAgICB9CgogICAgICAubWluaS1oZWFsdGgtcGlsbCA+IGRpdiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgI2V2ZW50LWNvdW50cy10aCB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMTBweDsKICAgICAgfQoKICAgICAgLm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyNTUsIDE0MSwgMCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5wb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMCwgNjIsIDIxMik7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uYW4tbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjA0LCA0NywgNDQpOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24sCiAgICAgIC5uYW4tbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgMTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5uby1udW1lcmljLWFsZXJ0cy1ub3RpZmljYXRpb24gewogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJjYXJkIGhlYWx0aC1waWxsLWxlZ2VuZCI+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4KICAgICAgICBFbmFibGUgYWxsIChub3QganVzdCBzYW1wbGVkKSBzdGVwcy4gUmVxdWlyZXMgc2xvdyBkaXNrIHJlYWQuCiAgICAgIDwvZGl2PgogICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBpZD0iZW5hYmxlQWxsU3RlcHNNb2RlVG9nZ2xlIiBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSI+CiAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPGgyPgogICAgICAgIFN0ZXAgb2YgSGVhbHRoIFBpbGxzOgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtbnVtYmVyLWlucHV0IiBtaW49IjAiIG1heD0iW1tfYmlnZ2VzdFN0ZXBFdmVyU2Vlbl1dIiB2YWx1ZT0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOjppbnB1dH19Ij4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIFtbX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlXV0KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIiBpZD0iaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciI+PC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIiBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IiBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFhbGxTdGVwc01vZGVFbmFibGVkXV0iPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbWF4U3RlcEluZGV4XV0iPgogICAgICAgICAgPHBhcGVyLXNsaWRlciBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiIGltbWVkaWF0ZS12YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iIHNuYXBzIHN0ZXA9IjEiIHZhbHVlPSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItcHJldmlldyIgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sYWJlbCI+W1tpdGVtLmxhYmVsXV08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRlbnNvci1jb3VudCI+CiAgICAgICAgICAgIFtbX2NvbXB1dGVUZW5zb3JDb3VudFN0cmluZyhoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlLAogICAgICAgICAgICBpbmRleCldXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgaGlkZGVuJD0iW1shX2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyhkZWJ1Z2dlck51bWVyaWNBbGVydHMpXV0iPgogICAgICAgIDxoMiBpZD0ibnVtZXJpYy1hbGVydHMtaGVhZGVyIj5OdW1lcmljIEFsZXJ0czwvaDI+CiAgICAgICAgPHA+CiAgICAgICAgICBBbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuCiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0ibnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIj4KICAgICAgICAgIDx0YWJsZSBpZD0ibnVtZXJpYy1hbGVydHMtdGFibGUiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPkZpcnN0IE9mZmVuc2U8L3RoPgogICAgICAgICAgICAgICAgPHRoPlRlbnNvciAoRGV2aWNlKTwvdGg+CiAgICAgICAgICAgICAgICA8dGggaWQ9ImV2ZW50LWNvdW50cy10aCI+RXZlbnQgQ291bnRzPC90aD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHkgaWQ9Im51bWVyaWMtYWxlcnRzLWJvZHkiPjwvdGJvZHk+CiAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIAogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWxpc3QiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1heC1kZXZpY2UtcGl4ZWwtcmF0aW86IDEpIHsKICAgICAgICA6aG9zdCB7CiAgICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI2l0ZW1zIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWxpc3QtaXRlbXMtY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZ3JpZF0pKSAjaXRlbXMgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjaXRlbXMgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8YXJyYXktc2VsZWN0b3IgaWQ9InNlbGVjdG9yIiBpdGVtcz0ie3tpdGVtc319IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEl0ZW1zfX0iIHNlbGVjdGVkLWl0ZW09Int7c2VsZWN0ZWRJdGVtfX0iPjwvYXJyYXktc2VsZWN0b3I+CgogICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWl0ZW0tYm9keSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgLyogbmVlZGVkIGZvciB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcyB0byB3b3JrIG9uIGZmICovCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICA6aG9zdChbdHdvLWxpbmVdKSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXR3by1saW5lLW1pbi1oZWlnaHQsIDcycHgpOwogICAgICB9CgogICAgICA6aG9zdChbdGhyZWUtbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdGhyZWUtbGluZS1taW4taGVpZ2h0LCA4OHB4KTsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoW3NlY29uZGFyeV0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWJvZHkxOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXNlY29uZGFyeS1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1ib2R5LXNlY29uZGFyeTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtaWNvbiI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxzdmcgaGVpZ2h0PSIwIiB3aWR0aD0iMCIgaWQ9InN2Z0RlZnMiPgogICAgICA8ZGVmcz4KICAgICAgICAKICAgICAgICA8cGF0dGVybiBpZD0icmVjdEhhdGNoIiBwYXR0ZXJudHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgcGF0dGVybnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iNSIgc3R5bGU9InN0cm9rZS13aWR0aDogMSIgLz4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPHBhdHRlcm4gaWQ9ImVsbGlwc2VIYXRjaCIgcGF0dGVybnRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHBhdHRlcm51bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIC8+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIAogICAgICAgIDxlbGxpcHNlIGlkPSJvcC1ub2RlLXN0YW1wIiByeD0iNy41IiByeT0iMyIgc3Ryb2tlPSJpbmhlcml0IiBmaWxsPSJpbmhlcml0IiAvPgogICAgICAgIAogICAgICAgIDxlbGxpcHNlIGlkPSJvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHJ4PSI1IiByeT0iMiIgc3Ryb2tlPSJpbmhlcml0IiBmaWxsPSJpbmhlcml0IiAvPgogICAgICAgIAogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtdmVydGljYWwtc3RhbXAiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSIzIiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZyBpZD0ib3Atc2VyaWVzLWhvcml6b250YWwtc3RhbXAiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTYiIHk9IjQiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiIC8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJzdW1tYXJ5LWljb24iIGZpbGw9IiM4NDg0ODQiIGhlaWdodD0iMTIiIHZpZXdib3g9IjAgMCAyNCAyNCIgd2lkdGg9IjEyIj4KICAgICAgICAgIDxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiIC8+CiAgICAgICAgPC9nPgogICAgICA8L2RlZnM+CiAgICA8L3N2Zz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdDT05TVCcpXV0iPgogICAgICA8c3ZnIGhlaWdodCQ9IltbaGVpZ2h0XV0iIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxMCAxMCI+CiAgICAgICAgPGNpcmNsZSBjeD0iNSIgY3k9IjUiIHI9IjMiIGZpbGwkPSJbW19maWxsXV0iIHN0cm9rZSQ9IltbX3N0cm9rZV1dIiAvPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnIHdpZHRoJD0iW1toZWlnaHRdXSIgaGVpZ2h0JD0iW1toZWlnaHRdXSIgdmlld2JveD0iMCAwIDI0IDI0IiBmaWxsPSIjODQ4NDg0Ij4KICAgICAgICA8cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IiAvPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZyBoZWlnaHQkPSJbW2hlaWdodF1dIiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMTYgOCI+CiAgICAgICAgPHVzZSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIGZpbGwkPSJbW19maWxsXV0iIHN0cm9rZSQ9IltbX3N0cm9rZV1dIiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIgeD0iOCIgeT0iNCIgLz4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZyBoZWlnaHQkPSJbW2hlaWdodF1dIiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMzcgMTYiPgogICAgICAgIDxyZWN0IHg9IjEiIHk9IjEiIGZpbGwkPSJbW19maWxsXV0iIHN0cm9rZSQ9IltbX3N0cm9rZV1dIiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIgc3Ryb2tlLXdpZHRoPSIycHgiIGhlaWdodD0iMTQiIHdpZHRoPSIzNSIgcng9IjUiIHJ5PSI1IiAvPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU0VSSUVTJyldXSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1t2ZXJ0aWNhbF1dIj4KICAgICAgICA8c3ZnIGhlaWdodCQ9IltbaGVpZ2h0XV0iIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNiAxNSI+CiAgICAgICAgICA8dXNlIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjb3Atc2VyaWVzLXZlcnRpY2FsLXN0YW1wIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIgeD0iMCIgeT0iMiIgLz4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyF2ZXJ0aWNhbF1dIj4KICAgICAgICA8c3ZnIGhlaWdodCQ9IltbaGVpZ2h0XV0iIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAyNCAxMCI+CiAgICAgICAgICA8dXNlIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjb3Atc2VyaWVzLWhvcml6b250YWwtc3RhbXAiIGZpbGwkPSJbW19maWxsXV0iIHN0cm9rZSQ9IltbX3N0cm9rZV1dIiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdzZXJpZXMnKX19IiB4PSIwIiB5PSIxIiAvPgogICAgICAgIDwvc3ZnPgogICAgICA8L3RlbXBsYXRlPgogICAgPC90ZW1wbGF0ZT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ub2RlLWljb24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24gaWQ9Imljb24iIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iIGhlaWdodD0iW1toZWlnaHRdXSIgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIj48L3RmLWdyYXBoLWljb24+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAjbGlzdC1pdGVtIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBjb2xvcjogIzU2NTY1NjsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0ibGlzdC1pdGVtIiBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIiBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciI+CiAgICAgIDxkaXYgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGl0ZW1SZW5kZXJJbmZvKX19Ij4KICAgICAgICA8dGYtbm9kZS1pY29uIGNsYXNzPSJub2RlLWljb24iIGhlaWdodD0iMTIiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIgbm9kZT0iW1tpdGVtTm9kZV1dIiByZW5kZXItaW5mbz0iW1tpdGVtUmVuZGVySW5mb11dIiB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICNlOWU5ZTk7CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0tYm9keVt0d28tbGluZV0gewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNHB4OwogICAgICB9CgogICAgICAuZXhwYW5kZWRJbmZvIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5vZGUtbmFtZSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIGNvbG9yOiAjNWU1ZTVlOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub2RlLW5hbWUiIGlkPSJub2RldGl0bGUiPltbbm9kZVRpdGxlXV08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3AtY29tcGF0LWRpc3BsYXkiPgogICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im9wLWNvbXBhdCIgcHJlc2VydmVhc3BlY3RyYXRpbz0ieE1pbllNaWQgbWVldCIgdmlld2JveD0iMCAwIDI1MCAyNSI+CiAgICAgICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICAgICAgPGxpbmVhcmdyYWRpZW50IGlkPSJvcC1jb21wYXQtZmlsbCI+CiAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yJD0iW1tfb3BDb21wYXRDb2xvcl1dIj48L3N0b3A+CiAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIiBzdG9wLWNvbG9yJD0iW1tfb3BDb21wYXRDb2xvcl1dIj48L3N0b3A+CiAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIiBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJncmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0IGhlaWdodD0iMjUiIHdpZHRoPSIyNTAiIHJ4PSI1IiByeT0iNSIgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IiAvPgogICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9wLWNvbXBhdC12YWx1ZSI+W1tfb3BDb21wYXRTY29yZUxhYmVsXV08L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CgogICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19leHBhbmRlZH19Ij4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19leHBhbmRlZH19IiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJleHBhbmRlZEluZm8iPgogICAgICAgICAgSW5jb21wYXRpYmxlIE9wZXJhdGlvbnM6ICg8c3Bhbj5bW190b3RhbEluY29tcGF0T3BzXV08L3NwYW4+KQogICAgICAgICAgPGlyb24tbGlzdCBjbGFzcz0iaW5jb21wYXRpYmxlLW9wcy1saXN0IiBpZD0iaW5jb21wYXRpYmxlT3BzTGlzdCIgaXRlbXM9IltbX2luY29tcGF0aWJsZU9wTm9kZXNdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbSBjbGFzcz0ibm9uLWNvbnRyb2wtbGlzdC1pdGVtIiBpdGVtLW5vZGU9IltbaXRlbV1dIiBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIiBuYW1lPSJbW2l0ZW0ubmFtZV1dIiB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIGl0ZW0tdHlwZT0iaW5jb21wYXRpYmxlLW9wcyI+CiAgICAgICAgICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtbGlzdC1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtbm9kZS1saXN0LWl0ZW0iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6ICM1NjU2NTY7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ29vZ2xlLXllbGxvdy0xMDApOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0ibGlzdC1pdGVtIiBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIiBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciI+CiAgICAgIDxkaXYgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGl0ZW1SZW5kZXJJbmZvKX19Ij4KICAgICAgICA8dGYtbm9kZS1pY29uIGNsYXNzPSJub2RlLWljb24iIGhlaWdodD0iMTIiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIgbm9kZT0iW1tpdGVtTm9kZV1dIiByZW5kZXItaW5mbz0iW1tpdGVtUmVuZGVySW5mb11dIiB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLW5vZGUtaW5mbyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogIzU2NTY1NjsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQoKICAgICAgLmF0dHItcmlnaHQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAzMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGNvbG9yOiAjNTY1NjU2OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZSB7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLXJvdyAuc3ViLWxpc3QtdGFibGUtY2VsbDpsYXN0LWNoaWxkIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLWNlbGwgewogICAgICAgIGNvbG9yOiAjNTY1NjU2OwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZTllOWU5OwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgICBjb2xvcjogIzVlNWU1ZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2xMaW5lIHsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuY29udHJvbC10b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWluY2x1ZGUtZ3JvdXAgewogICAgICAgIHBhZGRpbmctdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZSB7CiAgICAgICAgbWFyZ2luOiA1cHggNnB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB0OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ29vZ2xlLXllbGxvdy0xMDApOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItaXRlbT4KICAgICAgPHBhcGVyLWl0ZW0tYm9keSB0d28tbGluZT4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Int7X2dldFRvZ2dsZUljb24oX2V4cGFuZGVkKX19IiBvbi1jbGljaz0iX3RvZ2dsZUV4cGFuZGVkIiBjbGFzcz0idG9nZ2xlLWJ1dHRvbiI+CiAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm9kZS1uYW1lIiBpZD0ibm9kZXRpdGxlIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24gY2xhc3M9Im5vZGUtaWNvbiIgbm9kZT0iW1tfbm9kZV1dIiByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhub2RlTmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iPjwvdGYtbm9kZS1pY29uPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm9wfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJ0aXRsZSI+CiAgICAgICAgICAgICAgT3BlcmF0aW9uOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUub3BdXTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlLm1ldGFncmFwaH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIFN1YmdyYXBoOgogICAgICAgICAgICAgIDxzcGFuPltbX25vZGUuY2FyZGluYWxpdHldXTwvc3Bhbj4gbm9kZXMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWl0ZW0tYm9keT4KICAgIDwvcGFwZXItaXRlbT4KICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIGF0dHJpYnV0ZXMiPgogICAgICAgICAgICBBdHRyaWJ1dGVzICg8c3Bhbj5bW19hdHRyaWJ1dGVzLmxlbmd0aF1dPC9zcGFuPikKICAgICAgICAgICAgPGlyb24tbGlzdCBjbGFzcz0ic3ViLWxpc3QiIGlkPSJhdHRyaWJ1dGVzTGlzdCIgaXRlbXM9IltbX2F0dHJpYnV0ZXNdXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXR0ci1sZWZ0Ij5bW2l0ZW0ua2V5XV08L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXR0ci1yaWdodCI+W1tpdGVtLnZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19kZXZpY2V9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIGRldmljZSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXR0ci1sZWZ0Ij5EZXZpY2U8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW19kZXZpY2VdXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgcHJlZGVjZXNzb3JzIj4KICAgICAgICAgICAgSW5wdXRzICg8c3Bhbj5bW190b3RhbFByZWRlY2Vzc29yc11dPC9zcGFuPikKICAgICAgICAgICAgPGlyb24tbGlzdCBjbGFzcz0ic3ViLWxpc3QiIGlkPSJpbnB1dHNMaXN0IiBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLnJlZ3VsYXJdXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIgbmFtZT0iW1tpdGVtLm5hbWVdXSIgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSI+CiAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3ByZWRlY2Vzc29ycy5jb250cm9sLmxlbmd0aF1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sRGVwcyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sTGluZSI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9vcGVuZWRDb250cm9sUHJlZCl9fSIgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIgY2xhc3M9ImNvbnRyb2wtdG9nZ2xlLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X29wZW5lZENvbnRyb2xQcmVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWxpc3QgY2xhc3M9InN1Yi1saXN0IiBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSI+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbSBjYXJkLW5vZGU9IltbX25vZGVdXSIgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIiBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIiBuYW1lPSJbW2l0ZW0ubmFtZV1dIiBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIgY29sb3ItYnk9IltbY29sb3JCeV1dIiB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaWQ9Im91dHB1dHNMaXN0IiBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbSBjbGFzcz0ibm9uLWNvbnRyb2wtbGlzdC1pdGVtIiBjYXJkLW5vZGU9IltbX25vZGVdXSIgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIiBlZGdlLWxhYmVsPSJbW2l0ZW0uZWRnZUxhYmVsXV0iIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iIG5hbWU9IltbaXRlbS5uYW1lXV0iIGl0ZW0tdHlwZT0ic3VjY2Vzc29yIiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Int7X2dldFRvZ2dsZUljb24oX29wZW5lZENvbnRyb2xTdWNjKX19IiBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xTdWNjIiBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sU3VjY319IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tbGlzdCBjbGFzcz0ic3ViLWxpc3QiIGl0ZW1zPSJbW19zdWNjZXNzb3JzLmNvbnRyb2xdXSI+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbSBjYXJkLW5vZGU9IltbX25vZGVdXSIgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIiBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIiBuYW1lPSJbW2l0ZW0ubmFtZV1dIiBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2hhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBub2RlLXN0YXRzIj4KICAgICAgICAgICAgICBOb2RlIFN0YXRzCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUiPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlU3RhdHMudG90YWxCeXRlc319Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtcm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj5NZW1vcnk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIFtbX25vZGVTdGF0c0Zvcm1hdHRlZEJ5dGVzXV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19nZXRUb3RhbE1pY3Jvcyhfbm9kZVN0YXRzKX19Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtcm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj5Db21wdXRlIFRpbWU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIFtbX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lXV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19ub2RlU3RhdHMub3V0cHV0U2l6ZX19Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtcm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj5UZW5zb3IgT3V0cHV0IFNpemVzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtXV0gPGJyPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QgY2xhc3M9InN1Yi1saXN0IiBpZD0iZnVuY3Rpb25Vc2FnZXNMaXN0IiBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbSBjbGFzcz0ibm9uLWNvbnRyb2wtbGlzdC1pdGVtIiBjYXJkLW5vZGU9IltbX25vZGVdXSIgaXRlbS1ub2RlPSJbW2l0ZW1dXSIgbmFtZT0iW1tpdGVtLm5hbWVdXSIgaXRlbS10eXBlPSJmdW5jdGlvblVzYWdlcyIgY29sb3ItYnk9IltbY29sb3JCeV1dIiB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIj4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgY2xhc3M9InRvZ2dsZS1pbmNsdWRlIiBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIj4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtaW5mbyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1heC1oZWlnaHQ6IDY1MHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e3NlbGVjdGVkTm9kZX19Ij4KICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQiPgogICAgICAgIDx0Zi1ub2RlLWluZm8gZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iIGZsYXQtZ3JhcGg9IltbZ3JhcGhdXSIgbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIiBub2RlLWluY2x1ZGU9Iltbc2VsZWN0ZWROb2RlSW5jbHVkZV1dIiBoaWdobGlnaHRlZC1ub2RlPSJ7e2hpZ2hsaWdodGVkTm9kZX19IiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZCBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIgaGllcmFyY2h5LXBhcmFtcz0iW1toaWVyYXJjaHlQYXJhbXNdXSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIgY29sb3ItYnk9IltbY29sb3JCeV1dIiBub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIj4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iPgogICAgICA8dGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIiBub2RlLW5hbWVzLXRvLWhlYWx0aC1waWxscz0iW1tub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iIGFyZS1oZWFsdGgtcGlsbHMtbG9hZGluZz0iW1thcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IiBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSI+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOjpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jbG9zZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBsZWZ0OiAxNXB4OwogICAgICAgIGJvdHRvbTogMTVweDsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC5jb250YWluZXIubG9hZGluZyB7CiAgICAgICAgY3Vyc29yOiBwcm9ncmVzczsKICAgICAgICBvcGFjaXR5OiAwLjE7CiAgICAgIH0KCiAgICAgIC5jb250YWluZXIubG9hZGluZy5lcnJvciB7CiAgICAgICAgY3Vyc29yOiBhdXRvOwogICAgICB9CgogICAgICAjaW5mbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiA1cHg7CiAgICAgICAgdG9wOiA1cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIG1heC13aWR0aDogMzgwcHg7CiAgICAgICAgbWluLXdpZHRoOiAzMjBweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgICNtYWluIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzcy1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDQwcHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzcy1tc2cgewogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICB9CgogICAgICBwYXBlci1wcm9ncmVzcyB7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiA2cHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1hY3RpdmUtY29sb3I6ICNmMzkxM2U7CiAgICAgIH0KCiAgICAgIC5jb250ZXh0LW1lbnUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkNGQ0ZDQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIHsKICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAvZGVlcC8gLmNvbnRleHQtbWVudSB1bCBsaSB7CiAgICAgICAgcGFkZGluZzogNHB4IDE2cHg7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjM5MTNlOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNOb3RDb21wbGV0ZShwcm9ncmVzcyldXSI+CiAgICAgIDxkaXYgaWQ9InByb2dyZXNzLWJhciI+CiAgICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtbXNnIj5bW3Byb2dyZXNzLm1zZ11dPC9kaXY+CiAgICAgICAgPHBhcGVyLXByb2dyZXNzIHZhbHVlPSJbW3Byb2dyZXNzLnZhbHVlXV0iPjwvcGFwZXItcHJvZ3Jlc3M+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3MkPSJbW19nZXRDb250YWluZXJDbGFzcyhwcm9ncmVzcyldXSI+CiAgICAgIDxkaXYgaWQ9Im1haW4iPgogICAgICAgIDx0Zi1ncmFwaCBpZD0iZ3JhcGgiIGdyYXBoLWhpZXJhcmNoeT0ie3tncmFwaEhpZXJhcmNoeX19IiBiYXNpYy1ncmFwaD0iW1tncmFwaF1dIiBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIiByZW5kZXItaGllcmFyY2h5PSJ7e3JlbmRlckhpZXJhcmNoeX19IiBkZXZpY2VzLWZvci1zdGF0cz0iW1tkZXZpY2VzRm9yU3RhdHNdXSIgc3RhdHM9Iltbc3RhdHNdXSIgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIgaGlnaGxpZ2h0ZWQtbm9kZT0ie3tfaGlnaGxpZ2h0ZWROb2RlfX0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgY29sb3ItYnktcGFyYW1zPSJ7e2NvbG9yQnlQYXJhbXN9fSIgcHJvZ3Jlc3M9Int7cHJvZ3Jlc3N9fSIgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIiBlZGdlLXdpZHRoLWZ1bmN0aW9uPSJbW2VkZ2VXaWR0aEZ1bmN0aW9uXV0iIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iIGhhbmRsZS1ub2RlLXNlbGVjdGVkPSJbW2hhbmRsZU5vZGVTZWxlY3RlZF1dIiBoYW5kbGUtZWRnZS1zZWxlY3RlZD0iW1toYW5kbGVFZGdlU2VsZWN0ZWRdXSIgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iPjwvdGYtZ3JhcGg+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJpbmZvIj4KICAgICAgICA8dGYtZ3JhcGgtaW5mbyBpZD0iZ3JhcGgtaW5mbyIgdGl0bGU9InNlbGVjdGVkIiBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIgaGllcmFyY2h5LXBhcmFtcz0iW1toaWVyYXJjaHlQYXJhbXNdXSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIgZ3JhcGg9IltbZ3JhcGhdXSIgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIgc2VsZWN0ZWQtbm9kZS1pbmNsdWRlPSJ7e19zZWxlY3RlZE5vZGVJbmNsdWRlfX0iIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIGNvbG9yLWJ5LXBhcmFtcz0iW1tjb2xvckJ5UGFyYW1zXV0iIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iIGFyZS1oZWFsdGgtcGlsbHMtbG9hZGluZz0iW1thcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIgZGVidWdnZXItbnVtZXJpYy1hbGVydHM9IltbZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IiBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIgY29tcGF0LW5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iIG9uLW5vZGUtdG9nZ2xlLWluY2x1c2lvbj0iX29uTm9kZUluY2x1c2lvblRvZ2dsZWQiIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIj48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1yYWRpby1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tc2l6ZSwgMTZweCk7CiAgICAgICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBgYXR0YWNoZWRgLiAqLwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemU6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSwgLTFweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgICNyYWRpb0NvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLXJhZGlvLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2luayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICByaWdodDogYXV0bzsKICAgICAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgIH0KCiAgICAgICNpbmtbY2hlY2tlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgI29mZlJhZGlvLCAjb25SYWRpbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgI29mZlJhZGlvIHsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWJhY2tncm91bmQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yOHM7CiAgICAgIH0KCiAgICAgICNvblJhZGlvIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogICAgICB9CgogICAgICAjcmFkaW9MYWJlbCB7CiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgI3JhZGlvTGFiZWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogICAgICB9CgogICAgICAjcmFkaW9MYWJlbDpkaXIocnRsKSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtc3BhY2luZywgMTBweCk7CiAgICAgIH0KCiAgICAgICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIGRpc2FibGVkIHN0YXRlICovCgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjb2ZmUmFkaW8gewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAgICAgLyogc2xpZ2h0bHkgZGFya2VyIHRoYW4gdGhlIGJ1dHRvbiwgc28gdGhhdCBpdCdzIHJlYWRhYmxlICovCiAgICAgICAgb3BhY2l0eTogMC42NTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJyYWRpb0NvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICAgICAgPGRpdiBpZD0ib25SYWRpbyI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1yYWRpby1ncm91cCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRvb2x0aXAiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHotaW5kZXg6IDEwMDI7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgICN0b29sdGlwIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvb2x0aXAtYmFja2dyb3VuZCwgIzYxNjE2MSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvb2x0aXAtdGV4dC1jb2xvciwgd2hpdGUpOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNjYWxlVXAgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVEb3duIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMCk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZUZhZGVJbk9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZUZhZGVPdXRPcGFjaXR5IHsKICAgICAgICAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25JbiB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2xpZGVEb3duT3V0IHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5mYWRlLWluLWFuaW1hdGlvbiB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlSW5PcGFjaXR5OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLmZhZGUtb3V0LWFuaW1hdGlvbiB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lRmFkZU91dE9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLXVwLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVVcDsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zY2FsZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNjYWxlRG93bjsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2xpZGUtZG93bi1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTbGlkZURvd25JbjsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbi1vdXQgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bk91dDsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuY2FuY2VsLWFuaW1hdGlvbiB7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtMzBzICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoYW5rcyBJRSAxMC4gKi8KCiAgICAgIC5oaWRkZW4gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0b29sdGlwIiBjbGFzcz0iaGlkZGVuIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1ub2RlLXNlYXJjaCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0ic2VhcmNoLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0icnVucy1yZWdleCIgbGFiZWw9IlNlYXJjaCBub2Rlcy4gUmVnZXhlcyBzdXBwb3J0ZWQuIiB2YWx1ZT0ie3tfcmF3UmVnZXhJbnB1dH19Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPGRpdiBpZD0ic2VhcmNoLXJlc3VsdHMtYW5jaG9yIj4KICAgICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cyI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19yZWdleE1hdGNoZXNdXSI+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlYXJjaC1tYXRjaCIgb24tY2xpY2s9Il9tYXRjaENsaWNrZWQiPltbaXRlbV1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAjc2VhcmNoLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgICNydW5zLXJlZ2V4IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3NlYXJjaC1yZXN1bHRzLWFuY2hvciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMgewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgI3NlYXJjaC1tYXRjaCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpcmVjdGlvbjogcnRsOwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utd2Vhayk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtY29udHJvbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogOHB4IDAgOHB4IDEwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICAuY29sb3ItZHJvcGRvd24gewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyOiB7CiAgICAgICAgICBwYWRkaW5nOiA5cHggMCAwIDEzcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQoKICAgICAgdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDAgMjBweCAyMHB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGVnZW5kLWhvbGRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U5ZTllOTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIHBhZGRpbmc6IDE1cHggMjBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICBzdmcuaWNvbiwKICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIC5kb21haW5WYWx1ZXMgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICB9CiAgICAgIC5kb21haW5TdGFydCB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgICAgLmRvbWFpbkVuZCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CiAgICAgIC5jb2xvckJveCB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5pbWFnZS1pY29uIHsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLWljb24gewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmdyYXkgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBtYXJnaW46IDhweCA1cHggOHB4IDA7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi10ZXh0IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KCiAgICAgIC51cGxvYWQtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1pY29uIHsKICAgICAgICB3aWR0aDogMjZweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICB9CgogICAgICAuaGlkZGVuLWlucHV0IHsKICAgICAgICBoZWlnaHQ6IDBweDsKICAgICAgICB3aWR0aDogMHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgewogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyIHBhcGVyLXJhZGlvLWdyb3VwIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KCiAgICAgIHNwYW4uY291bnRlciB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiBncmF5OwogICAgICB9CgogICAgICAucnVucyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqIE92ZXJyaWRlIGlubGluZSBzdHlsZXMgdGhhdCBzdXBwcmVzcyBwb2ludGVyIGV2ZW50cyBmb3IgZGlzYWJsZWQgYnV0dG9ucy4gT3RoZXJ3aXNlLCB0aGUgKi8KICAgICAgLyogIHRvb2x0aXBzIGRvIG5vdCBhcHBlYXIuICovCiAgICAgIHBhcGVyLXJhZGlvLWdyb3VwIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG8gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgewogICAgICAgIGNvbG9yOiAjMjY2MjM2OwogICAgICAgIGN1cnNvcjogaGVscDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtY2xhcmlmaWVyIHBhcGVyLXRvb2x0aXAgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgfQoKICAgICAgLyoqIE90aGVyd2lzZSwgcG9seW1lciBVSSBjb250cm9scyBhcHBlYXIgYXRvcCBub2RlIHNlYXJjaC4gKi8KICAgICAgdGYtZ3JhcGgtbm9kZS1zZWFyY2ggewogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJhbGxjb250cm9scyI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8dGYtZ3JhcGgtbm9kZS1zZWFyY2ggc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSI+PC90Zi1ncmFwaC1ub2RlLXNlYXJjaD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpY29uLWJ1dHRvbiIgb24tdGFwPSJfZml0IiBhbHQ9IkZpdCB0byBzY3JlZW4iPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJhc3BlY3QtcmF0aW8iIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXRleHQiPkZpdCB0byBTY3JlZW48L3NwYW4+CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLWNsaWNrPSJkb3dubG9hZCIgYWx0PSJEb3dubG9hZCBQTkciPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJmaWxlLWRvd25sb2FkIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5Eb3dubG9hZCBQTkc8L3NwYW4+CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgPGEgaHJlZj0iIyIgaWQ9ImdyYXBoZG93bmxvYWQiIGNsYXNzPSJ0aXRsZSIgZG93bmxvYWQ9ImdyYXBoLnBuZyI+PC9hPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgcnVucyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgUnVuIDxzcGFuIGNsYXNzPSJjb3VudGVyIj4oW1tkYXRhc2V0cy5sZW5ndGhdXSk8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBub2luayBob3Jpem9udGFsLWFsaWduPSJsZWZ0IiBjbGFzcz0icnVuLWRyb3Bkb3duIj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRSdW5JbmRleH19IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciI+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBob3Jpem9udGFsLWFsaWduPSJsZWZ0IiBub2luayBjbGFzcz0icnVuLWRyb3Bkb3duIj4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFRhZ0luZGV4fX0iIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPlVwbG9hZDwvZGl2PgogICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgY2xhc3M9InVwbG9hZC1idXR0b24iIG9uLWNsaWNrPSJfZ2V0RmlsZSIgdGl0bGU9IlVwbG9hZCBhIGdyYXBoIHBidHh0IGZpbGUgdG8gdmlldyB0aGUgZ3JhcGgiPgogICAgICAgICAgICBDaG9vc2UgRmlsZQogICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgaWQ9ImZpbGUiIG5hbWU9ImZpbGUiIG9uLWNoYW5nZT0iX3VwZGF0ZUZpbGVJbnB1dCIgYWNjZXB0PSIucGJ0eHQiPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkR3JhcGhUeXBlfX0iPgogICAgICAgICAgCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9Im9wX2dyYXBoIiBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iPkdyYXBoPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImNvbmNlcHR1YWxfZ3JhcGgiIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25Db25jZXB0dWFsR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIj5Db25jZXB0dWFsIEdyYXBoPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InByb2ZpbGUiIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSI+UHJvZmlsZTwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7dHJhY2VJbnB1dHN9fSIgY2xhc3M9InRpdGxlIj4KICAgICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVhbHRoUGlsbHNGZWF0dXJlRW5hYmxlZF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iIGNsYXNzPSJ0aXRsZSI+U2hvdyBoZWFsdGggcGlsbHM8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+Q29sb3I8L2Rpdj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19Ij4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0ic3RydWN0dXJlIj5TdHJ1Y3R1cmU8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImRldmljZSI+RGV2aWNlPC9wYXBlci1yYWRpby1idXR0b24+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIiBuYW1lPSJ4bGFfY2x1c3RlciIgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSI+CiAgICAgICAgICAgIFhMQSBDbHVzdGVyCiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJ4bGEtY2x1c3Rlci1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgWExBIGNsdXN0ZXIgaXMgb25seSBlbmFibGVkIGlmIGF0IGxlYXN0IDEgb3Agc3BlY2lmaWVzCiAgICAgICAgICAgIGFuIFhMQSBjbHVzdGVyLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iIG5hbWU9ImNvbXB1dGVfdGltZSIgZGlzYWJsZWQ9IltbIXN0YXRzXV0iPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgY29tcHV0ZSB0aW1lIGlzIG9ubHkgZW5hYmxlZCBpZiB0aGUgUnVuTWV0YWRhdGEgcHJvdG8gaXMKICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBGaWxlV3JpdGVyIHdoZW4gYSBzcGVjaWZpYyBzZXNzaW9uIGlzIHJ1bi4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJtZW1vcnktcmFkaW8tYnV0dG9uIiBuYW1lPSJtZW1vcnkiIGRpc2FibGVkPSJbWyFzdGF0c11dIj4KICAgICAgICAgICAgTWVtb3J5CiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJtZW1vcnktcmFkaW8tYnV0dG9uIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIiBuYW1lPSJvcF9jb21wYXRpYmlsaXR5Ij4KICAgICAgICAgICAgVFBVIENvbXBhdGliaWxpdHkKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9InRwdS1jb21wYXRpYmlsaXR5LXJhZGlvLWJ1dHRvbiIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICBDb2xvcmluZyBieSB3aGV0aGVyIGFuIG9wZXJhdGlvbiBpcyBjb21wYXRpYmxlIGZvciB0aGUgVFBVIGRldmljZS4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgIDxzcGFuIGNsYXNzPSJzcGFjZXIiPjwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0dyYWRpZW50Q29sb3Jpbmcoc3RhdHMsIGNvbG9yQnkpXV0iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBzdHlsZT0ibWFyZ2luOiAwIDVweCIgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICA8bGluZWFyZ3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50IiB4MT0iMCUiIHkxPSIwJSIgeDI9IjEwMCUiIHkyPSIwJSI+CiAgICAgICAgICAgICAgICA8c3RvcCBjbGFzcz0ic3RhcnQiIG9mZnNldD0iMCUiIHN0b3AtY29sb3IkPSJbW19jdXJyZW50R3JhZGllbnRQYXJhbXMuc3RhcnRDb2xvcl1dIiAvPgogICAgICAgICAgICAgICAgPHN0b3AgY2xhc3M9ImVuZCIgb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yJD0iW1tfY3VycmVudEdyYWRpZW50UGFyYW1zLmVuZENvbG9yXV0iIC8+CiAgICAgICAgICAgICAgPC9saW5lYXJncmFkaWVudD4KICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTM1IiBoZWlnaHQ9IjIwIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIgc3Ryb2tlPSJibGFjayIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluVmFsdWVzIGNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluRW5kIj5bW19jdXJyZW50R3JhZGllbnRQYXJhbXMubWF4VmFsdWVdXTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIj4KICAgICAgICAgIDxkaXY+RGV2aWNlcyBpbmNsdWRlZCBpbiBzdGF0czo8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50RGV2aWNlc11dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93IGRldmljZXMtY2hlY2tib3giPgogICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZSQ9IltbaXRlbS5kZXZpY2VdXSIgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iIG9uLWNsaWNrPSJfZGV2aWNlQ2hlY2tib3hDbGlja2VkIj48L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW2l0ZW0uc3VmZml4XV08L3NwYW4+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXRlbS5pZ25vcmVkTXNnXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscCIgY2xhc3M9ImhlbHAtaWNvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiIGFuaW1hdGlvbi1kZWxheT0iMCI+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPgogICAgICAgICAgICAgICAgY29sb3JzCiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnNhbWUgc3Vic3RydWN0dXJlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmlsbC1vdmVycmlkZT0iI2VlZSIgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdkZXZpY2UnKV1dIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJNRVRBIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSJbW2l0ZW0uY29sb3JdXSIgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik1FVEEiIGhlaWdodD0iMTYiIGZpbGwtb3ZlcnJpZGU9IiNlZWUiIHN0cm9rZS1vdmVycmlkZT0iI2E2YTZhNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ3hsYV9jbHVzdGVyJyldXSI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiN1bmZpbGxlZC1yZWN0IiB4PSIwIiB5PSIwIiBzdHlsZT0iZmlsbDpbW2l0ZW0uY29sb3JdXSIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+W1tpdGVtLnhsYV9jbHVzdGVyXV08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICA8dXNlIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZ3JleS1yZWN0IiB4PSIwIiB5PSIwIiAvPgogICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gWExBIGNsdXN0ZXI8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik9QIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IiBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5WYWxpZCBPcDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik9QIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSIjZGI0NDM3IiBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5JbnZhbGlkIE9wPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGF0c05vdE51bGwoc3RhdHMpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik1FVEEiIGhlaWdodD0iMTYiIGZhZGVkPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW51c2VkIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIgb24tY2xpY2s9Il90b2dnbGVMZWdlbmRPcGVuIiBjbGFzcz0idG9nZ2xlLWxlZ2VuZC1idXR0b24iPgogICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBjbGFzcz0idG9nZ2xlLWxlZ2VuZC10ZXh0Ij4KICAgICAgICBbW19nZXRUb2dnbGVUZXh0KF9sZWdlbmRPcGVuZWQpXV0KICAgICAgPC9zcGFuPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkPjxkaXYgY2xhc3M9InRpdGxlIj5HcmFwaDwvZGl2PjwvdGQ+CiAgICAgICAgICAgICAgPHRkPigqID0gZXhwYW5kYWJsZSk8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIj48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBFbmNhcHN1bGF0ZXMgYSBzZXQgb2Ygbm9kZXMuIE5hbWVzcGFjZSBpcyBoaWVyYXJjaGljYWwgYW5kCiAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gc2NvcGUuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IHBlcmZvcm1zIGFuIG9wZXJhdGlvbi4gVGhlc2Ugbm9kZXMgY2Fubm90IGV4cGFuZC4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9IlNFUklFUyIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgVW5jb25uZWN0ZWQgc2VyaWVzPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgU2VxdWVuY2Ugb2YgbnVtYmVyZWQgbm9kZXMgdGhhdCBhcmUgbm90IGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJTRVJJRVMiIGhlaWdodD0iMTYiIHZlcnRpY2FsPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZSBvZiBudW1iZXJlZCBub2RlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gZWFjaCBvdGhlci4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Imljb24iPgogICAgICAgICAgICAgICAgICA8Y2lyY2xlIGZpbGw9IndoaXRlIiBzdHJva2U9IiM4NDg0ODQiIGN4PSIxMCIgY3k9IjEwIiByPSI1IiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIE5vZGUgdGhhdCBvdXRwdXRzIGEgY29uc3RhbnQgdmFsdWUuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJTVU1NQVJZIiBoZWlnaHQ9IjIwIj48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBTdW1tYXJ5CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgVGVuc29yQm9hcmQuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgIDxtYXJrZXIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sZWdlbmQiIGZpbGw9IiNiYmIiIG1hcmtlcndpZHRoPSIxMCIgbWFya2VyaGVpZ2h0PSIxMCIgcmVmeD0iOSIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPgogICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIiAvPgogICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPgogICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgIDxwYXRoIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiIHN0cm9rZT0iI2JiYiIgZD0iTTIgOSBsIDI5IDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgRGF0YWZsb3cgZWRnZQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgIHVwd2FyZHMgdW5sZXNzIGFycm93aGVhZHMgc3BlY2lmeSBvdGhlcndpc2UuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI2JiYiIgZD0iTTIgOSBsIDI5IDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWRhc2hhcnJheT0iMiwgMiIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmN5IGVkZ2UKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBFZGdlIHNob3dpbmcgdGhlIGNvbnRyb2wgZGVwZW5kZW5jeSBiZXR3ZWVuIG9wZXJhdGlvbnMuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgIDxtYXJrZXIgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kIiBmaWxsPSIjRkZCNzREIiBtYXJrZXJ3aWR0aD0iMTAiIG1hcmtlcmhlaWdodD0iMTAiIHJlZng9IjkiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCIgLz4KICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgICA8cGF0aCBtYXJrZXItZW5kPSJ1cmwoI3JlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kKSIgc3Ryb2tlPSIjRkZCNzREIiBkPSJNMiA5IGwgMjkgMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGF0IHRoZSBvdXRnb2luZyBvcGVyYXRpb24gbm9kZSBjYW4gbXV0YXRlIHRoZQogICAgICAgICAgICAgICAgICAgIGluY29taW5nIHRlbnNvci4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhc2V0c1N0YXRlKF9kYXRhc2V0c0ZldGNoZWQsIF9kYXRhc2V0cywgJ0VNUFRZJyldXSI+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTQwcHg7IG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsiPgogICAgICAgIDxoMz5ObyBncmFwaCBkZWZpbml0aW9uIGZpbGVzIHdlcmUgZm91bmQuPC9oMz4KICAgICAgICA8cD4KICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICA8Y29kZT50Zi5zdW1tYXJ5LkZpbGVXcml0ZXI8L2NvZGU+CiAgICAgICAgICBhbmQgcGFzcyB0aGUgZ3JhcGggZWl0aGVyIHZpYSB0aGUgY29uc3RydWN0b3IsIG9yIGJ5IGNhbGxpbmcgaXRzCiAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvZ3JhcGhfdml6Ij5ncmFwaCB2aXN1YWxpemVyIHR1dG9yaWFsPC9hPi4KICAgICAgICAKCiAgICAgICAgPHA+CiAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiPlJFQURNRTwvYT4KICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgIAoKICAgICAgICA8cD4KICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIj50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hPgogICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgCiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFzZXRzU3RhdGUoZGF0YXNldHNGZXRjaGVkLCBfZGF0YXNldHMsICdQUkVTRU5UJyldXSI+CiAgICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICAgIDx0Zi1ncmFwaC1jb250cm9scyBpZD0iY29udHJvbHMiIGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIiBkZXZpY2VzLWZvci1zdGF0cz0ie3tfZGV2aWNlc0ZvclN0YXRzfX0iIGNvbG9yLWJ5LXBhcmFtcz0iW1tfY29sb3JCeVBhcmFtc11dIiBzdGF0cz0iW1tfc3RhdHNdXSIgY29sb3ItYnk9Int7X2NvbG9yQnl9fSIgZGF0YXNldHM9IltbX2RhdGFzZXRzXV0iIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIiBzZWxlY3Rpb249Int7X3NlbGVjdGlvbn19IiBzZWxlY3RlZC1maWxlPSJ7e19zZWxlY3RlZEZpbGV9fSIgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iIGhlYWx0aC1waWxscy1mZWF0dXJlLWVuYWJsZWQ9IltbX2RlYnVnZ2VyRGF0YUVuYWJsZWRdXSIgaGVhbHRoLXBpbGxzLXRvZ2dsZWQtb249Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIgb24tZml0LXRhcD0iX2ZpdCIgdHJhY2UtaW5wdXRzPSJ7e190cmFjZUlucHV0c319Ij48L3RmLWdyYXBoLWNvbnRyb2xzPgogICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICAgIDx0Zi1ncmFwaC1kYXNoYm9hcmQtbG9hZGVyIGlkPSJsb2FkZXIiIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIiBzZWxlY3Rpb249IltbX3NlbGVjdGlvbl1dIiBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIgb3V0LWdyYXBoLWhpZXJhcmNoeT0ie3tfZ3JhcGhIaWVyYXJjaHl9fSIgb3V0LWdyYXBoPSJ7e19ncmFwaH19IiBvdXQtc3RhdHM9Int7X3N0YXRzfX0iIHByb2dyZXNzPSJ7e19wcm9ncmVzc319IiBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICAgIDx0Zi1ncmFwaC1ib2FyZCBpZD0iZ3JhcGhib2FyZCIgZGV2aWNlcy1mb3Itc3RhdHM9IltbX2RldmljZXNGb3JTdGF0c11dIiBjb2xvci1ieT0iW1tfY29sb3JCeV1dIiBjb2xvci1ieS1wYXJhbXM9Int7X2NvbG9yQnlQYXJhbXN9fSIgZ3JhcGgtaGllcmFyY2h5PSJbW19ncmFwaEhpZXJhcmNoeV1dIiBncmFwaD0iW1tfZ3JhcGhdXSIgaGllcmFyY2h5LXBhcmFtcz0iW1tfaGllcmFyY2h5UGFyYW1zXV0iIHByb2dyZXNzPSJbW19wcm9ncmVzc11dIiBkZWJ1Z2dlci1kYXRhLWVuYWJsZWQ9IltbX2RlYnVnZ2VyRGF0YUVuYWJsZWRdXSIgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW19hcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIgZGVidWdnZXItbnVtZXJpYy1hbGVydHM9IltbX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIiBub2RlLW5hbWVzLXRvLWhlYWx0aC1waWxscz0iW1tfbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIiBhbGwtc3RlcHMtbW9kZS1lbmFibGVkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9IltbX2hlYWx0aFBpbGxTdGVwSW5kZXhdXSIgcmVuZGVyLWhpZXJhcmNoeT0ie3tfcmVuZGVySGllcmFyY2h5fX0iIHNlbGVjdGVkLW5vZGU9Int7X3NlbGVjdGVkTm9kZX19IiBzdGF0cz0iW1tfc3RhdHNdXSIgdHJhY2UtaW5wdXRzPSJbW190cmFjZUlucHV0c11dIj48L3RmLWdyYXBoLWJvYXJkPgogICAgICAgIDwvZGl2PgogICAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idnotZGlzdHJpYnV0aW9uLWNoYXJ0Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgCiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0IGlkPSJjaGFydCIgeC10eXBlPSJbW3hUeXBlXV0iIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iPjwvdnotZGlzdHJpYnV0aW9uLWNoYXJ0PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIiBpY29uPSJmdWxsc2NyZWVuIiBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yIGlkPSJ4VHlwZVNlbGVjdG9yIiBuYW1lPSJIb3Jpem9udGFsIGF4aXMiIHNlbGVjdGVkLWlkPSJ7e194VHlwZX19Ij4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBoaXN0b2dyYW0gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLgogICAgICAgICAgICAgICAgKEhpc3RvZ3JhbXMgYW5kIGRpc3RyaWJ1dGlvbnMgYm90aCB1c2UgdGhlIGhpc3RvZ3JhbSBzdW1tYXJ5CiAgICAgICAgICAgICAgICBvcGVyYXRpb24uKQogICAgICAgICAgICAgIDwvbGk+CgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiPlJFQURNRTwvYT4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIj5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYT4uCiAgICAgICAgICAgIAoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIj50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICAKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldyBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIiBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWRpc3RyaWJ1dGlvbi1sb2FkZXIgYWN0aXZlPSJbW2FjdGl2ZV1dIiBydW49IltbaXRlbS5ydW5dXSIgdGFnPSJbW2l0ZW0udGFnXV0iIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIiB4LXR5cGU9IltbX3hUeXBlXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSI+PC90Zi1kaXN0cmlidXRpb24tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9InRvb2x0aXAiPjxzcGFuPjwvc3Bhbj48L2Rpdj4KICAgIDxzdmcgaWQ9InN2ZyI+CiAgICAgIDxnPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHgiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB5Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSBzbGljZSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJzdGFnZSI+CiAgICAgICAgICA8cmVjdCBjbGFzcz0iYmFja2dyb3VuZCI+PC9yZWN0PgogICAgICAgIDwvZz4KICAgICAgICA8ZyBjbGFzcz0ieC1heGlzLWhvdmVyIj48L2c+CiAgICAgICAgPGcgY2xhc3M9InktYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LXNsaWNlLWF4aXMtaG92ZXIiPjwvZz4KICAgICAgPC9nPgogICAgPC9zdmc+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICN0b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHsKICAgICAgICBmaWxsLW9wYWNpdHk6IDA7CiAgICAgICAgZmlsbDogcmVkOwogICAgICB9CgogICAgICAuaGlzdG9ncmFtIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmhvdmVyIHsKICAgICAgICBmb250LXNpemU6IDlweDsKICAgICAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC5ob3ZlciBjaXJjbGUgewogICAgICAgIHN0cm9rZTogd2hpdGU7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNTsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLmhvdmVyIHRleHQgewogICAgICAgIGZpbGw6IGJsYWNrOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC5ob3Zlci5ob3Zlci1jbG9zZXN0IGNpcmNsZSB7CiAgICAgICAgZmlsbDogYmxhY2sgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgdGV4dCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmJhc2VsaW5lIHsKICAgICAgICBzdHJva2U6IGJsYWNrOwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwLjE7CiAgICAgIH0KCiAgICAgIC5vdXRsaW5lIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogd2hpdGU7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLm91dGxpbmUub3V0bGluZS1ob3ZlciB7CiAgICAgICAgc3Ryb2tlOiBibGFjayAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAxOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyLAogICAgICAueS1heGlzLWhvdmVyLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLngtYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LWF4aXMtaG92ZXIgLmxhYmVsLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIC5sYWJlbCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgdGV4dC1hbmNob3I6IGVuZDsKICAgICAgfQoKICAgICAgLngtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgICB9CgogICAgICAueS1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgdGV4dCB7CiAgICAgICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIGxpbmUsCiAgICAgIC55LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciBsaW5lIHsKICAgICAgICBzdHJva2U6IGJsYWNrOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLmF4aXMgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmF4aXMgcGF0aC5kb21haW4gewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5heGlzIC50aWNrIGxpbmUgewogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgfQoKICAgICAgLmF4aXMuc2xpY2UgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIC50aWNrIGxpbmUgewogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgICAgIH0KCiAgICAgIC5zbWFsbCAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5zbWFsbCAuYXhpcyAudGljazpmaXJzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5zbWFsbCAuYXhpcyAudGljazpsYXN0LW9mLXR5cGUgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLm1lZGl1bSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgLnRpY2s6bnRoLWNoaWxkKDJuICsgMSkgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmxhcmdlIC5heGlzIHRleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLmxhcmdlIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaGlzdG9ncmFtLWxvYWRlciI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWNhcmQtaGVhZGluZyB0YWc9IltbdGFnXV0iIHJ1bj0iW1tydW5dXSIgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iIGNvbG9yPSJbW19ydW5Db2xvcl1dIj48L3RmLWNhcmQtaGVhZGluZz4KICAgIAogICAgPHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIGlkPSJjaGFydCIgdGltZS1wcm9wZXJ0eT0iW1t0aW1lUHJvcGVydHldXSIgbW9kZT0iW1toaXN0b2dyYW1Nb2RlXV0iIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlRnVuY3Rpb25dXSI+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIgaWNvbj0iZnVsbHNjcmVlbiIgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogMzMwcHg7CiAgICAgICAgaGVpZ2h0OiAyMzVweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiA3MDBweDsKICAgICAgICBoZWlnaHQ6IDUwMHB4OwogICAgICB9CgogICAgICB2ei1oaXN0b2dyYW0tdGltZXNlcmllcyB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIHdpZHRoOiA5MCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaGlzdG9ncmFtLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IgaWQ9Imhpc3RvZ3JhbU1vZGVTZWxlY3RvciIgbmFtZT0iSGlzdG9ncmFtIG1vZGUiIHNlbGVjdGVkLWlkPSJ7e19oaXN0b2dyYW1Nb2RlfX0iPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvdmVybGF5Ij5vdmVybGF5PC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im9mZnNldCI+b2Zmc2V0PC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvciBpZD0idGltZVByb3BlcnR5U2VsZWN0b3IiIG5hbWU9Ik9mZnNldCB0aW1lIGF4aXMiIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBoaXN0b2dyYW0gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBoaXN0b2dyYW0gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlciBydW49IltbaXRlbS5ydW5dXSIgdGFnPSJbW2l0ZW0udGFnXV0iIGFjdGl2ZT0iW1thY3RpdmVdXSIgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIiBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIiByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iPjwvdGYtaGlzdG9ncmFtLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi10ZXh0LWxvYWRlciI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWNhcmQtaGVhZGluZyBydW49IltbcnVuXV0iIHRhZz0iW1t0YWddXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBpZD0ic3RlcHMtY29udGFpbmVyIiBjbGFzcz0iY29udGFpbmVyIHNjcm9sbGJhciIgc3R5bGU9ImJvcmRlci1jb2xvcjogW1tfcnVuQ29sb3JdXSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3RleHRzXV0iPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJzdGVwLWNvbnRhaW5lciI+CiAgICAgICAgICBzdGVwIDxzcGFuIGNsYXNzPSJzdGVwLXZhbHVlIj5bW19mb3JtYXRTdGVwKGl0ZW0uc3RlcCldXTwvc3Bhbj4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJ0ZXh0Ij4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbaXRlbS50ZXh0XV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIC5zY3JvbGxiYXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgI3N0ZXBzLWNvbnRhaW5lciB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIC8qIGNvbG9yIGNvbXB1dGVkIGFuZCBzZXQgYXMgaW5saW5lIHN0eWxlICovOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgLnRleHQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsgLyogdG8gY29ycmVjdCBmb3IgYm9yZGVyICovCiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXRleHQtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHRleHQgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtdGV4dC1sb2FkZXIgYWN0aXZlPSJbW2FjdGl2ZV1dIiB0YWc9IltbaXRlbS50YWddXSIgcnVuPSJbW2l0ZW0ucnVuXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSI+PC90Zi10ZXh0LWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1wci1jdXJ2ZS1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgoKICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2RdXSIgeS12YWx1ZS1hY2Nlc3Nvcj0iW1tfeVZhbHVlQWNjZXNzb3JdXSIgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIiBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iIGRlZmF1bHQteC1yYW5nZT0iW1tfZGVmYXVsdFhSYW5nZV1dIiBkZWZhdWx0LXktcmFuZ2U9IltbX2RlZmF1bHRZUmFuZ2VdXSIgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iIGRhdGEtdG8tbG9hZD0iW1tydW5zXV0iIGRhdGEtc2VyaWVzPSJbW3J1bnNdXSIgbG9hZC1rZXk9IltbdGFnXV0iIGdldC1kYXRhLWxvYWQtdXJsPSJbW19kYXRhVXJsXV0iIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iIGFjdGl2ZT0iW1thY3RpdmVdXSI+PC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgoKICAgIDxkaXYgaWQ9ImJ1dHRvbnMtcm93Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIgaWNvbj0iZnVsbHNjcmVlbiIgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIgb24tdGFwPSJfcmVzZXREb21haW4iIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzdGVwLWxlZ2VuZCI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3J1bnNXaXRoU3RlcEF2YWlsYWJsZV1dIiBhcz0icnVuIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWJveCIgc3R5bGU9ImJhY2tncm91bmQ6IFtbX2NvbXB1dGVSdW5Db2xvcihydW4pXV07Ij48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4+PGJyPgogICAgICAgICAgPHNwYW4gY2xhc3M9IndhbGwtdGltZS1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgKFtbX2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0pCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICAjc3RlcC1sZWdlbmQgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1yb3cgewogICAgICAgIG1hcmdpbjogNXB4IDAgNXB4IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmNvbG9yLWJveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnN0ZXAtbGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLndhbGwtdGltZS1sYWJlbC10ZXh0IHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiPgogIDx0ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3J1bnNXaXRoU2xpZGVyc11dIiBhcz0icnVuIj4KICAgICAgPGRpdiBjbGFzcz0icnVuLXdpZGdldCI+CiAgICAgICAgPGRpdiBjbGFzcz0icnVuLWRpc3BsYXktY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi1jb2xvci1ib3giIHN0eWxlPSJiYWNrZ3JvdW5kOltbX2NvbXB1dGVDb2xvckZvclJ1bihydW4pXV07Ij48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij4KICAgICAgICAgICAgW1tydW5dXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyIGRhdGEtcnVuJD0iW1tydW5dXSIgc3RlcD0iMSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iW1tfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBydW4pXV0iIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIiBvbi1pbW1lZGlhdGUtdmFsdWUtY2hhbmdlZD0iX3NsaWRlclZhbHVlQ2hhbmdlZCI+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLnJ1bi13aWRnZXQgewogICAgICAgIG1hcmdpbjogMTBweCAwIDAgMDsKICAgICAgfQogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIG1hcmdpbjogLThweCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLnN0ZXAtZGlzcGxheS1jb250YWluZXIgewogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgICAgbWFyZ2luOiAwIDE1cHggMCAwOwogICAgICB9CiAgICAgIC5ydW4tdGV4dCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgIC5ydW4tY29sb3ItYm94IHsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvciBpZD0idGltZS10eXBlLXNlbGVjdG9yIiBuYW1lPSJUaW1lIERpc3BsYXkgVHlwZSIgc2VsZWN0ZWQtaWQ9Int7X3RpbWVEaXNwbGF5VHlwZX19Ij4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPjxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIiBpZD0ic3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIj4KICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yIHJ1bnM9IltbX3JlbGV2YW50U2VsZWN0ZWRSdW5zXV0iIHJ1bi10by1zdGVwPSJ7e19ydW5Ub1N0ZXB9fSIgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIgdGltZS1kaXNwbGF5LXR5cGU9IltbX3RpbWVEaXNwbGF5VHlwZV1dIj48L3RmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHByZWNpc2lvbuKAk3JlY2FsbCBjdXJ2ZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHByZWNpc2lvbuKAk3JlY2FsbCBkYXRhIHRvIHlvdXIgZXZlbnQKICAgICAgICAgICAgICAgIGZpbGVzLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgVGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiPlJFQURNRTwvYT4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIj5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYT4uCiAgICAgICAgICAgIAoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIj50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICAKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldyBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIiBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQgYWN0aXZlPSJbW2FjdGl2ZV1dIiBydW5zPSJbW2l0ZW0ucnVuc11dIiB0YWc9IltbaXRlbS50YWddXSIgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIiByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iPjwvdGYtcHItY3VydmUtY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItc3Bpbm5lciI+CiAgPHRlbXBsYXRlIHN0cmlwLXdoaXRlc3BhY2U+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItc3Bpbm5lci1zdHlsZXMiPjwvc3R5bGU+CgogICAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPjwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPjwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMyI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPjwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImlucHV0LXBpcGVsaW5lLWFuYWx5emVyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbi1oZWFkZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMjAwJTsKICAgICAgfQogICAgICAuc3ViLXNlY3Rpb24taGVhZGVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBmb250LXNpemU6IDE1MCU7CiAgICAgIH0KICAgICAgI3N1bW1hcnktaG9zdCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLmhpZ2hsaWdodGVkLXRleHQgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTIwJTsKICAgICAgfQogICAgICAuc3RkZGV2LXRleHQgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KICAgICAgLmxlZnQtcGFuZSB7CiAgICAgICAgd2lkdGg6IDMwJTsKICAgICAgfQogICAgICAucmlnaHQtcGFuZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQogICAgICAudGFibGUtc3R5bGUgewogICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7CiAgICAgICAgd2lkdGg6IDk1JTsKICAgICAgfQogICAgICAucGVyZm9ybWFuY2UtdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC54LWF4aXMtdGl0bGUgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKICAgICAgfQogICAgICAueS1heGlzLXRpdGxlIHsKICAgICAgICB3cml0aW5nLW1vZGU6IGJ0LXJsOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7CiAgICAgIH0KICAgICAgI3JlY29tbWVuZGF0aW9uX2RldGFpbHMgewogICAgICAgIGNvbG9yOiBncmVlbjsKICAgICAgfQogICAgICAjcmVjb21tZW5kYXRpb25fZGV0YWlscyBhIHsKICAgICAgICBjb2xvcjogI2ZmMzNjYzsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAjc3VtbWFyeV9jb25jbHVzaW9uIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogdmFyKC0tc3VtbWFyeS1jb2xvciwgZ3JlZW4pOwogICAgICB9CiAgICAgICNzdW1tYXJ5X25leHRzdGVwIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogZ3JlZW47CiAgICAgIH0KICAgICAgI3JlY29tbWVuZGF0aW9uX3RpdGxlIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX3N1bW1hcnkiPgogICAgICAgIDxkaXYgaWQ9InRpdGxlX3N1bW1hcnkiPgogICAgICAgICAgPHAgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgICAgICAgU2VjdGlvbiAxOiBTdW1tYXJ5IG9mIGlucHV0LXBpcGVsaW5lIGFuYWx5c2lzCiAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICA8cD48c3BhbiBpZD0ic3VtbWFyeV9jb25jbHVzaW9uIj5bW19zdW1tYXJ5X2NvbmNsdXNpb25dXTwvc3Bhbj4KICAgICAgICA8cD4KICAgICAgICAgIDxzcGFuIGlkPSJyZWNvbW1lbmRhdGlvbl90aXRsZSI+UmVjb21tZW5kYXRpb24gZm9yIG5leHQgc3RlcDogPC9zcGFuPjxzcGFuIGlkPSJzdW1tYXJ5X25leHRzdGVwIj5bW19zdW1tYXJ5X25leHRzdGVwXV08L3NwYW4+CiAgICAgICAgCiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX2RldmljZV9zaWRlX2FuYWx5c2lzIiBoaWRkZW49IltbIV9zaG93X2RldmljZV9zaWRlX2FuYWx5c2lzXV0iPgogICAgICAgIDxkaXYgaWQ9InRpdGxlX2RldmljZV9zaWRlX2FuYWx5c2lzIj4KICAgICAgICAgIDxwIGNsYXNzPSJzZWN0aW9uLWhlYWRlciI+U2VjdGlvbiAyOiBEZXZpY2Utc2lkZSBhbmFseXNpcyBkZXRhaWxzCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0ic2VjdGlvbl9kZXZpY2Vfc3RlcF90aW1lIj4KICAgICAgICAgIDxkaXYgaWQ9InRpdGxlX2RldmljZV9zdGVwX3RpbWUiPgogICAgICAgICAgICA8cCBjbGFzcz0ic3ViLXNlY3Rpb24taGVhZGVyIj5TZWN0aW9uIDIuMTogRGV2aWNlIHN0ZXAgdGltZQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlLXN0eWxlIj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGVmdC1wYW5lIj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJoaWdobGlnaHRlZC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICBEZXZpY2Ugc3RlcC10aW1lIHN0YXRpc3RpY3MgKGluIG1zKQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPkF2ZXJhZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX3N0ZXB0aW1lX21zX2F2ZXJhZ2VdXSBtcyA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGRkZXYtdGV4dCI+KM+DID0gW1tfc3RlcHRpbWVfbXNfc3RkZGV2XV0gbXMpPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgPHNwYW4+PGI+UmFuZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX3N0ZXB0aW1lX21zX21pbmltdW1dXSAtIFtbX3N0ZXB0aW1lX21zX21heGltdW1dXQogICAgICAgICAgICAgICAgICAgIG1zPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+PGRpdiBjbGFzcz0ieS1heGlzLXRpdGxlIj5taWxsaXNlY29uZHM8L2Rpdj48L3RkPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0icmlnaHQtcGFuZSI+CiAgICAgICAgICAgICAgICA8dnotbGluZS1jaGFydDIgaWQ9ImRldmljZV9zdGVwX2NoYXJ0IiBzdHlsZT0iaGVpZ2h0OjMwMHB4OyI+PC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgIDxkaXY+PHAgY2xhc3M9IngtYXhpcy10aXRsZSI+dHJhaW5pbmcgc3RlcCBudW1iZXI8L2Rpdj4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzZWN0aW9uX2RldmljZV9pbmZlZWRkZXFfdGltZSI+CiAgICAgICAgICA8ZGl2IGlkPSJ0aXRsZV9kZXZpY2VfaW5mZWVkZGVxX3RpbWUiPgogICAgICAgICAgICA8cCBjbGFzcz0ic3ViLXNlY3Rpb24taGVhZGVyIj4KICAgICAgICAgICAgICA8c3Bhbj5TZWN0aW9uIDIuMjogUmFuZ2Ugb2YgZGV2aWNlIHRpbWUgd2FpdGluZyBmb3IgaW5wdXQgZGF0YQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICA8c3Bhbj48aSBzdHlsZT0ib3BhY2l0eTowLjUiPmFjcm9zcyBjb3JlczwvaT4gYXQgZWFjaCBzdGVwIDwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUtc3R5bGUiPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJsZWZ0LXBhbmUiPgogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWdobGlnaHRlZC10ZXh0Ij4lIG9mIGRldmljZSBzdGVwIHRpbWUgd2FpdGluZyBmb3IgaW5wdXQgZGF0YTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgKGF2ZXJhZ2Ugb3ZlciB0aGUgbWF4aW11bSB3YWl0aW5nIHRpbWUgYWNyb3NzIGNvcmVzIGF0IGVhY2gKICAgICAgICAgICAgICAgICAgICBzdGVwKTwvc3Bhbj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPkF2ZXJhZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX2luZmVlZF9wZXJjZW50X2F2ZXJhZ2VdXSAlIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZGRldi10ZXh0Ij4oz4MgPSBbW19pbmZlZWRfcGVyY2VudF9zdGRkZXZdXSAlKTwvc3Bhbj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPlJhbmdlOjwvYj4gPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj5bW19pbmZlZWRfcGVyY2VudF9taW5pbXVtXV0gLSBbW19pbmZlZWRfcGVyY2VudF9tYXhpbXVtXV0KICAgICAgICAgICAgICAgICAgICAlPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ5LWF4aXMtdGl0bGUiPjxwPiUgb2YgZGV2aWNlIHN0ZXAgdGltZTwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyaWdodC1wYW5lIj4KICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iZGV2aWNlX2luZmVlZF9jaGFydCIgc3R5bGU9ImhlaWdodDozMDBweDsiPjwvdnotbGluZS1jaGFydDI+CiAgICAgICAgICAgICAgICA8ZGl2PjxwIGNsYXNzPSJ4LWF4aXMtdGl0bGUiPnRyYWluaW5nIHN0ZXAgbnVtYmVyPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX2hvc3Rfc2lkZV9hbmFseXNpcyI+CiAgICAgICAgPGRpdiBpZD0idGl0bGVfaG9zdF9zaWRlX2FuYWx5c2lzIj4KICAgICAgICAgIDxwIGNsYXNzPSJzZWN0aW9uLWhlYWRlciI+U2VjdGlvbiAzOiBIb3N0LXNpZGUgYW5hbHlzaXMgZGV0YWlscwogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuJD0iW1shX3Nob3dfaG9zdF9zaWRlX2NoYXJ0XV0iPgogICAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OjMwMHB4OyIgaWQ9Imhvc3Rfc2lkZV9jaGFydCI+PC9kaXY+CiAgICAgICAgICA8cD4KICAgICAgICAgICAgPHNwYW4+PGI+V2hhdCBjYW4gYmUgZG9uZSB0byByZWR1Y2UgYWJvdmUgY29tcG9uZW50cyBvZiB0aGUgaG9zdCBpbnB1dAogICAgICAgICAgICAgICAgdGltZTo8L2I+PC9zcGFuPgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGlkPSJyZWNvbW1lbmRhdGlvbl9kZXRhaWxzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbiQ9IltbX3Nob3dfaG9zdF9zaWRlX2NoYXJ0XV0iPgogICAgICAgICAgSG9zdCBzaWRlIGFuYWx5c2lzIGNhbiBub3QgYmUgZG9uZSB3aXRob3V0IGluc3RydW1lbnRhdGlvbi4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cD4KICAgICAgICAgIENsaWNrIHRoZSAiU2hvdyIgYnV0dG9uIGJlbG93IHRvIHNlZSB0aGUgc291cmNlIGRhdGEgb2YgdGhlIGJyZWFrZG93bi4KICAgICAgICAKICAgICAgICA8YnV0dG9uIG9uLWNsaWNrPSJvbkNsaWNrIj5bW190b2dnbGVfYnV0dG9uX3RleHRdXTwvYnV0dG9uPgogICAgICAgIDx0YWJsZSBjbGFzcz0icGVyZm9ybWFuY2UtdGFibGUiIGhpZGRlbiQ9IltbIV9zaG93X2hvc3Rfc2lkZV90YWJsZV1dIj4KICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPjx0aD5JbnB1dCBPcDwvdGg+CiAgICAgICAgICAgIDx0aD5Db3VudDwvdGg+CiAgICAgICAgICAgIDx0aD5Ub3RhbCBUaW1lIChpbiBtcyk8L3RoPgogICAgICAgICAgICA8dGg+VG90YWwgVGltZSAoYXMgJSBvZiB0b3RhbCBpbnB1dC1wcm9jZXNzaW5nIHRpbWUpPC90aD4KICAgICAgICAgICAgPHRoPlRvdGFsIFNlbGYgVGltZSAoaW4gbXMpPC90aD4KICAgICAgICAgICAgPHRoPlRvdGFsIFNlbGYgVGltZSAoYXMgJSBvZiB0b3RhbCBpbnB1dC1wcm9jZXNzaW5nIHRpbWUpPC90aD4KICAgICAgICAgICAgPHRoPkNhdGVnb3J5PC90aD4KICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICA8dGJvZHkgaWQ9Imhvc3Rfc2lkZV90YWJsZV9jb250ZW50Ij48L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1pbWFnZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjYmFzZVVSSUFuY2hvciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI3NpemVkSW1nRGl2IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CgogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgICNpbWcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWltYWdlLXdpZHRoLCBhdXRvKTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWlyb24taW1hZ2UtaGVpZ2h0LCBhdXRvKTsKICAgICAgfQoKICAgICAgOmhvc3QoW3NpemluZ10pICNzaXplZEltZ0RpdiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXppbmddKSAjaW1nIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAjcGxhY2Vob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIGJvdHRvbTogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBvcGFjaXR5OiAxOwoKICAgICAgICBAYXBwbHkgLS1pcm9uLWltYWdlLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICAjcGxhY2Vob2xkZXIuZmFkZWQtb3V0IHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgbGluZWFyOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGEgaWQ9ImJhc2VVUklBbmNob3IiIGhyZWY9IiMiPjwvYT4KICAgIDxkaXYgaWQ9InNpemVkSW1nRGl2IiByb2xlPSJpbWciIGhpZGRlbiQ9IltbX2NvbXB1dGVJbWdEaXZIaWRkZW4oc2l6aW5nKV1dIiBhcmlhLWhpZGRlbiQ9IltbX2NvbXB1dGVJbWdEaXZBUklBSGlkZGVuKGFsdCldXSIgYXJpYS1sYWJlbCQ9IltbX2NvbXB1dGVJbWdEaXZBUklBTGFiZWwoYWx0LCBzcmMpXV0iPjwvZGl2PgogICAgPGltZyBpZD0iaW1nIiBhbHQkPSJbW2FsdF1dIiBoaWRkZW4kPSJbW19jb21wdXRlSW1nSGlkZGVuKHNpemluZyldXSIgY3Jvc3NvcmlnaW4kPSJbW2Nyb3Nzb3JpZ2luXV0iIG9uLWxvYWQ9Il9pbWdPbkxvYWQiIG9uLWVycm9yPSJfaW1nT25FcnJvciI+CiAgICA8ZGl2IGlkPSJwbGFjZWhvbGRlciIgaGlkZGVuJD0iW1tfY29tcHV0ZVBsYWNlaG9sZGVySGlkZGVuKHByZWxvYWQsIGZhZGUsIGxvYWRpbmcsIGxvYWRlZCldXSIgY2xhc3MkPSJbW19jb21wdXRlUGxhY2Vob2xkZXJDbGFzc05hbWUocHJlbG9hZCwgZmFkZSwgbG9hZGluZywgbG9hZGVkKV1dIj48L2Rpdj4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2FyZC1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItY2FyZDsKICAgICAgfQoKICAgICAgLyogSUUgMTAgc3VwcG9ydCBmb3IgSFRNTDUgaGlkZGVuIGF0dHIgKi8KICAgICAgOmhvc3QoW2hpZGRlbl0pLCBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogaW5oZXJpdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1jYXJkLWhlYWRlcjsKICAgICAgfQoKICAgICAgLmhlYWRlciBpcm9uLWltYWdlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLWlyb24taW1hZ2Utd2lkdGg6IDEwMCU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtaGVhZGVyLWltYWdlOwogICAgICB9CgogICAgICAuaGVhZGVyIC50aXRsZS10ZXh0IHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jYXJkLWhlYWRlci1jb2xvciwgIzAwMCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtaGVhZGVyLXRleHQ7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgLnRpdGxlLXRleHQub3Zlci1pbWFnZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1jYXJkLWhlYWRlci1pbWFnZS10ZXh0OwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoLmNhcmQtY29udGVudCkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgcG9zaXRpb246cmVsYXRpdmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtY29udGVudDsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKC5jYXJkLWFjdGlvbnMpIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U4ZThlODsKICAgICAgICBwYWRkaW5nOiA1cHggMTZweDsKICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItY2FyZC1hY3Rpb25zOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgPGlyb24taW1hZ2UgaGlkZGVuJD0iW1shaW1hZ2VdXSIgYXJpYS1oaWRkZW4kPSJbW19pc0hpZGRlbihpbWFnZSldXSIgc3JjPSJbW2ltYWdlXV0iIGFsdD0iW1thbHRdXSIgcGxhY2Vob2xkZXI9IltbcGxhY2Vob2xkZXJJbWFnZV1dIiBwcmVsb2FkPSJbW3ByZWxvYWRJbWFnZV1dIiBmYWRlPSJbW2ZhZGVJbWFnZV1dIj48L2lyb24taW1hZ2U+CiAgICAgIDxkaXYgaGlkZGVuJD0iW1shaGVhZGluZ11dIiBjbGFzcyQ9InRpdGxlLXRleHQgW1tfY29tcHV0ZUhlYWRpbmdDbGFzcyhpbWFnZSldXSI+W1toZWFkaW5nXV08L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJvdmVydmlldy1wYWdlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWNhcmQgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIC0tcGFwZXItY2FyZC1oZWFkZXItY29sb3I6ICNmNWY1ZjU7CiAgICAgICAgLS1wYXBlci1jYXJkLWhlYWRlcjogewogICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyODVmNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLmZsZXgtaG9yaXpvbnRhbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KICAgICAgLnN0ZXB0aW1lLWF2ZXJhZ2UgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogdmFyKC0tc3VtbWFyeS1jb2xvciwgZ3JlZW4pOwogICAgICB9CiAgICAgIC50YWJsZS1zdHlsZSB7CiAgICAgICAgdGFibGUtbGF5b3V0OiBhdXRvOwogICAgICAgIHdpZHRoOiA5NSU7CiAgICAgIH0KICAgICAgLnRvcC1vcHMtdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHZ6LWxpbmUtY2hhcnQyLnN0ZXAtZ3JhcGggewogICAgICAgIHdpZHRoOiA4NjBweDsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICB9CiAgICAgIC54LWF4aXMtdGl0bGUgewogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOwogICAgICB9CiAgICAgIC55LWF4aXMtdGl0bGUgewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIHdyaXRpbmctbW9kZTogYnQtcmw7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKICAgICAgfQogICAgICBkaXYuYm90dGxlbmVjay1zdGF0ZW1lbnQgewogICAgICAgIGNvbG9yOiB2YXIoLS1zdW1tYXJ5LWNvbG9yLCBncmVlbik7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgZGl2LmVycm9yTWVzc2FnZSB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgICBmb250LXNpemU6IDAuNWNtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgICAgICAgbWFyZ2luLXRvcDogMC41Y207CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41Y207CiAgICAgIH0KICAgICAgZGl2LmJvdHRsZW5lY2tUaXBzIHsKICAgICAgICBjb2xvcjogIzAwMDAwMDsKICAgICAgfQogICAgICBkaXYuYm90dGxlbmVja1RpcHMgYSB7CiAgICAgICAgY29sb3I6ICNmZjMzY2M7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgICAgZGl2LmRvY3VtZW50YXRpb25UaXBzIHsKICAgICAgICBjb2xvcjogIzY2NjY5OTsKICAgICAgfQogICAgICBkaXYuZG9jdW1lbnRhdGlvblRpcHMgYSB7CiAgICAgICAgY29sb3I6ICMzM2NjMDA7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJlcnJvck1lc3NhZ2UiIGhpZGRlbj0iW1shX2Vycm9yX21lc3NhZ2VdXSI+CiAgICAgIDxzcGFuPltbX2Vycm9yX21lc3NhZ2VdXTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBoaWRkZW49IltbX2Vycm9yX21lc3NhZ2VdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBmbGV4LWhvcml6b250YWwiPgogICAgICAgIDxwYXBlci1jYXJkIGhlYWRpbmc9IlBlcmZvcm1hbmNlIFN1bW1hcnkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1jb250ZW50Ij4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgPGI+QXZlcmFnZSBzdGVwIHRpbWU8L2I+IChsb3dlciBpcyBiZXR0ZXIpOgogICAgICAgICAgICAgIDxiPjxzcGFuIGNsYXNzPSJzdGVwdGltZS1hdmVyYWdlIj5bW19zdGVwdGltZV9tc19hdmVyYWdlXV0gbXM8L3NwYW4+CiAgICAgICAgICAgICAgPC9iPgogICAgICAgICAgICAgIDxpIHN0eWxlPSJvcGFjaXR5OjAuNyI+KHN0YW5kYXJkIGRldmlhdGlvbiA9CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19zdGVwdGltZV9tc19zdGRkZXZdXTwvc3Bhbj4gbXMpPC9pPgogICAgICAgICAgICAKICAgICAgICAgICAgPHVsIGhpZGRlbiQ9IltbIV9pbmZlZWRfbXNfYXZlcmFnZV1dIj4KICAgICAgICAgICAgICA8bGk+QXZlcmFnZSBpbmZlZWQ6IDxzcGFuPltbX2luZmVlZF9tc19hdmVyYWdlXV08L3NwYW4+IG1zPC9saT4KICAgICAgICAgICAgICA8bGk+QXZlcmFnZSBjb21wdXRlOiA8c3Bhbj5bW19jb21wdXRlX21zX2F2ZXJhZ2VdXTwvc3Bhbj4gbXM8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICA8Yj5Ib3N0IGlkbGUgdGltZTwvYj4gKGxvd2VyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfaG9zdF9pZGxlX3RpbWVfcGVyY2VudF1dPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgPGI+VFBVIGlkbGUgdGltZTwvYj4gKGxvd2VyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfZGV2aWNlX2lkbGVfdGltZV9wZXJjZW50XV08L3NwYW4+CiAgICAgICAgICAgIAogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICA8Yj5VdGlsaXphdGlvbiBvZiBUUFUgTWF0cml4IFVuaXRzPC9iPiAoaGlnaGVyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfbXh1X3V0aWxpemF0aW9uX3BlcmNlbnRdXTwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLWNhcmQ+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iU3RlcC10aW1lIEdyYXBoIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCIgaGlkZGVuPSJbWyFfc2hvd19zdGVwX3RpbWVfZ3JhcGhdXSI+CiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJ5LWF4aXMtdGl0bGUiPm1pbGxpc2Vjb25kczwvZGl2PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBjbGFzcz0ic3RlcC1ncmFwaCIgaWQ9ImRldmljZV9zdGVwX2NoYXJ0Ij4KICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgPGRpdj48cCBjbGFzcz0ieC1heGlzLXRpdGxlIj50cmFpbmluZyBzdGVwIG51bWJlcjwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZyQ9IltbX3RvcF9vcHNfaGVhZGluZ11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgICAgIDxidXR0b24gb24tY2xpY2s9Im9uQ2xpY2tUb3BPcHMiPltbX3RvcF9vcHNfYnV0dG9uX3RleHRdXTwvYnV0dG9uPgogICAgICAgICAgICA8dGhyZWFkPgogICAgICAgICAgICAgICAgPC90aHJlYWQ+PHRhYmxlIGNsYXNzPSJ0b3Atb3BzLXRhYmxlIiBoaWRkZW4kPSJbWyFfc2hvd190b3Bfb3BzX3RhYmxlXV0iPgogICAgICAgICAgICAgIDx0cj48dGg+VGltZSAoJSk8L3RoPgogICAgICAgICAgICAgICAgPHRoPkN1bXVsYXRpdmUgdGltZSAoJSk8L3RoPgogICAgICAgICAgICAgICAgPHRoPkNhdGVnb3J5PC90aD4KICAgICAgICAgICAgICAgIDx0aD5PcGVyYXRpb248L3RoPgogICAgICAgICAgICAgICAgPHRoPkdGbG9wcy9zZWM8L3RoPgogICAgICAgICAgICAgIAogICAgICAgICAgICAgIDx0Ym9keSBpZD0idG9wX29wc190YWJsZV9jb250ZW50Ij48L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iUnVuIEVudmlyb25tZW50Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgICAgIDxwPjxiPk51bWJlciBvZiBIb3N0cyB1c2VkPC9iPjogPHNwYW4+W1tfaG9zdF9jb3VudF1dPC9zcGFuPgogICAgICAgICAgICA8cD48Yj5UUFUgdHlwZTwvYj46IENsb3VkIFRQVQogICAgICAgICAgICA8cD48Yj5OdW1iZXIgb2YgVFBVIGNvcmVzPC9iPjogPHNwYW4+IFtbX3RwdV9jb3JlX2NvdW50XV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLWNhcmQ+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iUmVjb21tZW5kYXRpb24gZm9yIE5leHQgU3RlcHMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dGxlbmVjay1zdGF0ZW1lbnQiPjxzcGFuPltbX3N0YXRlbWVudF1dPC9zcGFuPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJob3N0X3NpZGVfdGlwcyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9ImRldmljZV9zaWRlX3RpcHMiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJkb2N1bWVudGF0aW9uX3RpcHMiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtdGFibGUtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgICN0aW1lLAogICAgICAjd2FzdGVkLAogICAgICAjdXRpbGl6YXRpb24gewogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICAgICNuYW1lIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWluLXdpZHRoOiA0MCU7CiAgICAgIH0KICAgICAgI3JvdywKICAgICAgI2hlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CiAgICAgICNyb3cgPiAqLAogICAgICAjaGVhZGVyID4gKiB7CiAgICAgICAgcGFkZGluZzogMC41ZW07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgICNoZWFkZXIgPiAqIHsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDsKICAgICAgfQogICAgICAjcHJvdmVuYW5jZSB7CiAgICAgICAgZmxleDogMSAxIDAgIWltcG9ydGFudDsKICAgICAgfQogICAgICAjdXRpbGl6YXRpb24gewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1vcC10YWJsZS1zdHlsZXMiPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgIH0KICAgICAgI2hlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2NjY7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICAgIC8qIE1hdGNoIGluZGVudGVkIG5hbWVzICovCiAgICAgICNoZWFkZXIgPiAjbmFtZSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJoZWFkZXIiPgogICAgICA8c3BhbiBpZD0idGltZSI+VGltZTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9Indhc3RlZCI+V2FzdGVkPC9zcGFuPgogICAgICA8c3BhbiBpZD0ibmFtZSI+TmFtZTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9InByb3ZlbmFuY2UiPlRlbnNvckZsb3cgT3A8L3NwYW4+CiAgICAgIDxzcGFuIGlkPSJ1dGlsaXphdGlvbiI+RkxPUFM8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDx0Zi1vcC10YWJsZS1lbnRyeSBub2RlPSJbW3Jvb3ROb2RlXV0iIGhlYWRlci1ob3Zlcj0iW1tfb25IZWFkZXJIb3Zlcl1dIiBoZWFkZXItY2xpY2s9IltbX29uSGVhZGVyQ2xpY2tdXSIgY2hpbGRyZW4tY291bnQ9Int7Y2hpbGRyZW5Db3VudH19IiBzaG93LXA5MD0ie3tzaG93UDkwfX0iIGJ5LXdhc3RlPSJ7e2J5V2FzdGV9fSIgZXhwYW5kZWQ9InRydWUiPgogICAgPC90Zi1vcC10YWJsZS1lbnRyeT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1vcC10YWJsZS1lbnRyeSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InRmLW9wLXRhYmxlLXN0eWxlcyI+CiAgICAgICNyb3cgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIDAgcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICB6LWluZGV4OiAwOwogICAgICB9CiAgICAgICNiYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgei1pbmRleDogLTE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NkZTsKICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgOmhvc3QoLnNlbGVjdGVkKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA0KTsKICAgICAgfQogICAgICA6aG9zdCguc2VsZWN0ZWQpID4gI3JvdyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgI3Jvdzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTsKICAgICAgfQogICAgICAjZGlzY2xvc3VyZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxZW07CiAgICAgIH0KICAgICAgI25hbWUgewogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgI3RpbWUsCiAgICAgICN3YXN0ZWQsCiAgICAgICN1dGlsaXphdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyOwogICAgICB9CiAgICAgIC8qIFV0aWxpemF0aW9uIGhhcyBhIGJhY2tncm91bmQgY29sb3IsIHNvIGl0IHN0cmV0Y2hlcyB0byBmaWxsIHRoZSByb3cuCiAgICAgICAgIEl0cyB0ZXh0IGlzIGluIGFuIGlubmVyIGRpdiB0aGF0IHJlbWFpbnMgdmVydGljYWxseSBjZW50ZXJlZC4gKi8KICAgICAgI3V0aWxpemF0aW9uIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CiAgICAgICN1dGlsaXphdGlvbiBkaXYgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJyb3ciIG9uLWNsaWNrPSJfaGFuZGxlSGVhZGVyQ2xpY2siIG9uLW1vdXNlZW50ZXI9Il9oYW5kbGVIZWFkZXJNb3VzZUVudGVyIiBvbi1tb3VzZWxlYXZlPSJfaGFuZGxlSGVhZGVyTW91c2VMZWF2ZSIgaGlkZGVuPSJbWyFsZXZlbF1dIj4KICAgICAgPGRpdiBpZD0iYmFyIiBzdHlsZSQ9IndpZHRoOnt7X2JhcldpZHRoKG5vZGUpfX0iPjwvZGl2PgogICAgICA8c3BhbiBpZD0idGltZSI+e3tfcGVyY2VudChub2RlKX19PC9zcGFuPgogICAgICA8c3BhbiBpZD0id2FzdGVkIj57e190aW1lV2FzdGVkKG5vZGUpfX08L3NwYW4+CiAgICAgIDxzcGFuIGlkPSJuYW1lIiBzdHlsZSQ9InBhZGRpbmctbGVmdDpbW2xldmVsXV1lbTsiPgogICAgICAgIDxzcGFuIGlkPSJkaXNjbG9zdXJlIj4KICAgICAgICAgIDxzcGFuIGhpZGRlbj0iW1shbm9kZS5jaGlsZHJlbi5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxzcGFuIGhpZGRlbj0iW1tleHBhbmRlZF1dIj7ilrY8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGhpZGRlbj0iW1shZXhwYW5kZWRdXSI+4pa8PC9zcGFuPgogICAgICAgICAgPC9zcGFuPiA8L3NwYW4+e3tub2RlLm5hbWV9fQogICAgICA8L3NwYW4+CiAgICAgIDxzcGFuIGlkPSJwcm92ZW5hbmNlIj57e19wcm92ZW5hbmNlKG5vZGUpfX0mbmJzcDs8L3NwYW4+CiAgICAgIDxzcGFuIGlkPSJ1dGlsaXphdGlvbiIgaGlkZGVuPSJbWyFfaGFzRmxvcHMobm9kZSldXSIgc3R5bGUkPSJiYWNrZ3JvdW5kLWNvbG9yOnt7X2ZsYW1lQ29sb3Iobm9kZSl9fSI+CiAgICAgICAge3tfdXRpbGl6YXRpb24obm9kZSl9fTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2V4cGFuZGVkXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19nZXRLQ2hpbGRyZW4obm9kZSwgY2hpbGRyZW5Db3VudCwgc2hvd1A5MCwgbGV2ZWwpfX0iIHNvcnQ9IltbX3NvcnQoYnlXYXN0ZSldXSI+CiAgICAgICAgPHRmLW9wLXRhYmxlLWVudHJ5IG5vZGU9IltbaXRlbV1dIiBjaGlsZHJlbi1jb3VudD0ie3tjaGlsZHJlbkNvdW50fX0iIHNob3ctcDkwPSJ7e3Nob3dQOTB9fSIgYnktd2FzdGU9Int7YnlXYXN0ZX19IiBsZXZlbD0ie3tfbmV4dExldmVsKGxldmVsKX19IiBoZWFkZXItaG92ZXI9Int7aGVhZGVySG92ZXJ9fSIgaGVhZGVyLWNsaWNrPSJ7e2hlYWRlckNsaWNrfX0iPgogICAgICAgIDwvdGYtb3AtdGFibGUtZW50cnk+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTGVmdG91dChub2RlLCBjaGlsZHJlbkNvdW50LCBsZXZlbCldXSI+CiAgICAgICAgPHNwYW4gaWQ9Im5hbWUiIHN0eWxlJD0icGFkZGluZy1sZWZ0OltbX2dldFBhZGRpbmdMZWZ0KGxldmVsKV1dZW07Ij4KICAgICAgICAgIFtbX251bUxlZnRvdXQobm9kZSwgY2hpbGRyZW5Db3VudCldXSBjYXRlZ29yaWVzIG9yIG9wcyBoYXZlIGJlZW4gbGVmdAogICAgICAgICAgb3V0LgogICAgICAgIDwvc3Bhbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtYmFyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxLjVlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS41ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICAmbmJzcDtbW19wZXJjZW50KHZhbHVlKV1dCiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1vcC1kZXRhaWxzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWNhcmQgewogICAgICAgIC0tcGFwZXItY2FyZC1oZWFkZXItY29sb3I6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLW9wLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgI3N1YmhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMCAxNnB4IDZweDsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0b3A6IC0xMHB4OwogICAgICB9CiAgICAgIC5jYXJkLWNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgICAgLmNhcmQtY29udGVudCA+IGRpdiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOwogICAgICB9CiAgICAgIC5leHByZXNzaW9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnVuYXZhaWxhYmxlIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiA1MCU7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNlbTsKICAgICAgfQogICAgICAubGF5b3V0ID4gKiB7CiAgICAgICAgZGlzcGxheTogdGFibGUtcm93OwogICAgICB9CiAgICAgIC5sYXlvdXQgPiAqID4gKiB7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgfQogICAgICAubGF5b3V0IC5zaXplLAogICAgICAubGF5b3V0IC5zaXplLXggewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAubGF5b3V0IC5zaXplLXggewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CiAgICAgIC5sYXlvdXQgLnNlbWFudGljcyB7CiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGNvbG9yOiAjNDhjOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQogICAgICAubGF5b3V0IC5hbGlnbm1lbnQgewogICAgICAgIC8qIE1ha2UgdGhlIGJhY2tncm91bmQgZXh0ZW5kIG91dHNpZGUgdGhlIGJveCAqLwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICBtYXJnaW4tdG9wOiAtMC41ZW07CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLWNhcmQgaWQ9ImNhcmQiIGhlYWRpbmc9Iltbbm9kZS5uYW1lXV0iIGVsZXZhdGlvbj0iMiI+CiAgICAgIDxkaXYgaWQ9InN1YmhlYWRlciI+W1tfc3ViaGVhZGVyKG5vZGUpXV08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2FyZC1jb250ZW50Ij4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shX2hhc0Zsb3BzKG5vZGUpXV0iPgogICAgICAgICAgPGI+RkxPUFMgdXRpbGl6YXRpb246IDwvYj4KICAgICAgICAgIDx0Zi1vcC1iYXIgY29sb3I9IltbX2Zsb3BzQ29sb3Iobm9kZSldXSIgdmFsdWU9IltbX3V0aWxpemF0aW9uKG5vZGUpXV0iPjwvdGYtb3AtYmFyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFfaGFzTWVtb3J5VXRpbGl6YXRpb24obm9kZSldXSI+CiAgICAgICAgICA8Yj5NZW1vcnkgYmFuZHdpZHRoIHV0aWxpemF0aW9uOiA8L2I+CiAgICAgICAgICA8dGYtb3AtYmFyIGNvbG9yPSJbW19id0NvbG9yKG5vZGUpXV0iIHZhbHVlPSJbW19tZW1vcnlVdGlsaXphdGlvbihub2RlKV1dIj48L3RmLW9wLWJhcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ1bmF2YWlsYWJsZSIgaGlkZGVuPSJbWyFfZnVzZWQobm9kZSldXSI+CiAgICAgICAgICBQZXJmb3JtYW5jZSBpbmZvcm1hdGlvbiBmb3IgaW5kaXZpZHVhbCBmdXNlZCBvcGVyYXRpb25zIGlzIG5vdAogICAgICAgICAgYXZhaWxhYmxlLgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InVuYXZhaWxhYmxlIiBoaWRkZW49IltbIW5vZGUuY2F0ZWdvcnldXSI+CiAgICAgICAgICBTZWxlY3QgaXRlbXMgd2l0aGluIHRoaXMgY2F0ZWdvcnkgZm9yIHBlcmZvcm1hbmNlIGRldGFpbHMuCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIW5vZGUueGxhLmV4cHJlc3Npb25dXSI+CiAgICAgICAgICA8Yj5YTEEgRXhwcmVzc2lvbjogPC9iPgogICAgICAgICAgPGNvZGUgY2xhc3M9ImV4cHJlc3Npb24iPltbbm9kZS54bGEuZXhwcmVzc2lvbl1dPC9jb2RlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFub2RlLnhsYS5wcm92ZW5hbmNlXV0iPgogICAgICAgICAgPGI+VGVuc29yRmxvdyBOYW1lOiA8L2I+CiAgICAgICAgICA8Y29kZSBjbGFzcz0iZXhwcmVzc2lvbiI+W1tub2RlLnhsYS5wcm92ZW5hbmNlXV08L2NvZGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIW5vZGUueGxhLmxheW91dF1dIj4KICAgICAgICAgIDxiPkxheW91dDogPC9iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGF5b3V0IiBoaWRkZW49IltbIW5vZGUueGxhLmxheW91dF1dIj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tub2RlLnhsYS5sYXlvdXQuZGltZW5zaW9uc11dIj4KICAgICAgICAgICAgICA8ZGl2IGhpZGRlbj0iW1shaW5kZXhdXSI+PHNwYW4gY2xhc3M9InNpemUteCI+w5c8L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaXplIj5bW2l0ZW0uc2l6ZV1dPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlbWFudGljcyI+W1tpdGVtLnNlbWFudGljc11dPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFsaWdubWVudCIgc3R5bGUkPSJiYWNrZ3JvdW5kLWNvbG9yOltbX2RpbWVuc2lvbkNvbG9yKGl0ZW0pXV0iPltbX2RpbWVuc2lvbkhpbnQoaXRlbSldXTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItY2FyZD4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLW9wLXByb2ZpbGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1yaWdodDogMS41ZW07CiAgICAgIH0KICAgICAgI2NvbnRyb2wgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIHBhZGRpbmc6IDAuNWVtOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICAgICAgdGV4dC1hbGlnbjogYm90dG9tOwogICAgICB9CiAgICAgIC5jb250cm9sUm93TGVmdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBsaW5lLWhlaWdodDogNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBib3R0b207CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CiAgICAgIC5jb250cm9sUm93UmlnaHQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogYm90dG9tOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1pbnB1dDogewogICAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLXNsaWRlci1oZWlnaHQ6IDNweDsKICAgICAgfQogICAgICAjZGVzY3JpcHRpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDJlbTsKICAgICAgICB3aWR0aDogNjAwcHg7CiAgICAgIH0KICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0Zi1vcC1wcm9maWxlIj4KICAgICAgPGgzPgogICAgICAgIE92ZXJhbGwgVFBVIEZMT1BTIHV0aWxpemF0aW9uIGlzCiAgICAgICAgPHNwYW4gc3R5bGUkPSJjb2xvcjpbW19mbG9wc0NvbG9yKF9yb290KV1dIj4KICAgICAgICAgIFtbX3V0aWxpemF0aW9uUGVyY2VudChfcm9vdCldXTwvc3Bhbj4KICAgICAgICAsIG1lbW9yeSBiYW5kd2lkdGggdXRpbGl6YXRpb24gaXMKICAgICAgICA8c3BhbiBzdHlsZSQ9ImNvbG9yOltbX2J3Q29sb3IoX3Jvb3QpXV0iPgogICAgICAgICAgW1tfbWVtb3J5VXRpbGl6YXRpb25QZXJjZW50KF9yb290KV1dPC9zcGFuPgogICAgICA8L2gzPgogICAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+CiAgICAgICAgPHA+CiAgICAgICAgICBNb2RpZnlpbmcgeW91ciBtb2RlbCdzIGFyY2hpdGVjdHVyZSwgZGF0YSBkaW1lbnNpb25zLCBhbmQgaW1wcm92aW5nCiAgICAgICAgICB0aGUgZWZmaWNpZW5jeSBvZiBDUFUgb3BlcmF0aW9ucyBtYXkgaGVscCByZWFjaCB0aGUgVFBVJ3MgRkxPUFMKICAgICAgICAgIHBvdGVudGlhbC4KICAgICAgICAKICAgICAgICA8cD4KICAgICAgICAgICJJZGxlIiByZXByZXNlbnRzIHRoZSBwb3J0aW9uIG9mIHRoZSB0b3RhbCBleGVjdXRpb24gdGltZSBvbiBkZXZpY2UKICAgICAgICAgIHRoYXQgaXMgaWRsZS4gV2FzdGVkIHRpbWUgaXMgZGVmaW5lZCBieQogICAgICAgICAgPGNvZGU+UnVudGltZUZyYWN0aW9uICogKDEgLSBtYXgoRmxvcHNVdGlsaXphdGlvbiwKICAgICAgICAgICAgTWVtb3J5VXRpbGl6YXRpb24pKTwvY29kZT4uCiAgICAgICAgCiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250cm9sIj4KICAgICAgICA8c3BhbiBjbGFzcz0iY29udHJvbFJvd0xlZnQiIGhpZGRlbiQ9IltbIV9oYXNUd29Qcm9maWxlc11dIj5CeSBQcm9ncmFtCiAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e2lzQnlDYXRlZ29yeX19Ij4gPC9wYXBlci10b2dnbGUtYnV0dG9uPkJ5IENhdGVnb3J5PC9zcGFuPgogICAgICAgIAogICAgICAgIDxzcGFuIGNsYXNzPSJjb250cm9sUm93TGVmdCI+U2hvdyB0b3AKICAgICAgICAgIDxwYXBlci1zbGlkZXIgbWluPSIxMCIgbWF4PSIxMDAiIHNuYXBzIHN0ZXA9IjEwIiB2YWx1ZT0ie3tjaGlsZHJlbkNvdW50fX0iIGVkaXRhYmxlPgogICAgICAgICAgPC9wYXBlci1zbGlkZXI+b3BzPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb250cm9sUm93UmlnaHQiPiZuYnNwOwogICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2hlY2tlZD0ie3tieVdhc3RlfX0iPiA8L3BhcGVyLXRvZ2dsZS1idXR0b24+U29ydAogICAgICAgICAgYnkgd2FzdGVkIHRpbWU8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbnRyb2xSb3dSaWdodCI+b2ZmJm5ic3A7CiAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e3Nob3dQOTB9fSI+IDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj5Ub3AKICAgICAgICAgIDkwJTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDx0Zi1vcC10YWJsZSByb290LW5vZGU9IltbX3Jvb3RdXSIgYWN0aXZlPSJ7e2FjdGl2ZX19IiBieS13YXN0ZT0ie3tieVdhc3RlfX0iIHNob3ctcDkwPSJ7e3Nob3dQOTB9fSIgY2hpbGRyZW4tY291bnQ9Int7Y2hpbGRyZW5Db3VudH19Ij4KICAgICAgPC90Zi1vcC10YWJsZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJtdi1saW5lLWNoYXJ0Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBjbGFzcz0ibXYtbGluZS1jaGFydCI+CiAgICAgIDxoMj5Xb3JraW5nIFNwYWNlIFNpemUgKE1pQikgdnMgUHJvZ3JhbSBPcmRlciAoSExPIFNlcXVlbmNlKTwvaDI+CiAgICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2IiBzdHlsZT0id2lkdGg6MTIwMHB4O2hlaWdodDozODRweCI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9Im1heGhlYXAtZGV0YWlscyI+CiAgICAgICAgPGVtPkhvdmVyIG92ZXIgYSBiYXIgZm9yIGJ1ZmZlciBkZXRhaWxzIHRvIGFwcGVhciBvbiB0aGUgbGVmdC48L2VtPgogICAgICA8L2Rpdj4KICAgICAgPGgzPkJ5IFByb2dyYW0gT3JkZXI8L2gzPgogICAgICA8ZGl2IGlkPSJtYXhoZWFwY2hhcnQiIHN0eWxlPSJ3aWR0aDoxMjAwcHg7aGVpZ2h0OjIwMHB4Ij48L2Rpdj4KICAgICAgPGgzPkJ5IFNpemU8L2gzPgogICAgICA8ZGl2IGlkPSJtYXhoZWFwc2l6ZWNoYXJ0IiBzdHlsZT0id2lkdGg6MTIwMHB4O2hlaWdodDoyMDBweCI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1tdi1iYXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEuNWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9ImJ1ZmZlci1kZXRhaWxzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWNhcmQgewogICAgICAgIC0tcGFwZXItY2FyZC1oZWFkZXItY29sb3I6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLW12LWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgI3N1YmhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMCAxNnB4IDZweDsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0b3A6IC0xMHB4OwogICAgICB9CiAgICAgIC5jYXJkLWNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgICAgLmNhcmQtY29udGVudCA+IGRpdiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOwogICAgICB9CiAgICAgIC5leHByZXNzaW9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItY2FyZCBpZD0iY2FyZCIgaGVhZGluZz0iW1tub2RlLmluc3RydWN0aW9uTmFtZV1dIiBoaWRkZW49IltbIW5vZGVdXSIgZWxldmF0aW9uPSIyIj4KICAgICAgPGRpdiBpZD0ic3ViaGVhZGVyIj5bW19zdWJoZWFkZXIobm9kZSldXTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjYXJkLWNvbnRlbnQiPgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFzaXplXV0iPgogICAgICAgICAgPGg0PlNpemU6IDxzcGFuPltbc2l6ZV1dPC9zcGFuPjxiPiBNaUI8L2I+PC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shdW5wYWRkZWRTaXplXV0iPgogICAgICAgICAgPGI+VW5wYWRkZWQgU2l6ZTogPC9iPjxzcGFuPltbdW5wYWRkZWRTaXplXV08L3NwYW4+PGI+IE1pQjwvYj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shcGFkZGluZ11dIj4KICAgICAgICAgIDxiPkV4dHJhIG1lbW9yeSBkdWUgdG8gcGFkZGluZzogPC9iPjxzcGFuPltbcGFkZGluZ11dPC9zcGFuPjxiPiBNaUI8L2I+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIWV4cGFuc2lvbl1dIj4KICAgICAgICAgIDxiPkV4cGFuc2lvbjogPC9iPjxzcGFuPltbZXhwYW5zaW9uXV08L3NwYW4+PGI+WDwvYj4KICAgICAgICAgIDx0Zi1tdi1iYXIgdmFsdWU9IltbdXRpbGl6YXRpb25dXSI+PC90Zi1tdi1iYXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIW5vZGUuc2hhcGVdXSI+CiAgICAgICAgICA8Yj5TaGFwZSAoYW5kIG1pbm9yLXRvLW1ham9yIG9yZGVyKTogPC9iPgogICAgICAgICAgPGNvZGUgY2xhc3M9ImV4cHJlc3Npb24iPltbbm9kZS5zaGFwZV1dPC9jb2RlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFub2RlLnRmT3BOYW1lXV0iPgogICAgICAgICAgPGI+VGYgT3AgTmFtZTogPC9iPgogICAgICAgICAgPGNvZGUgY2xhc3M9ImV4cHJlc3Npb24iPltbbm9kZS50Zk9wTmFtZV1dPC9jb2RlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFub2RlLmdyb3VwTmFtZV1dIj4KICAgICAgICAgIDxiPkFsbG9jYXRpb24gVHlwZTogPC9iPjxzcGFuPltbbm9kZS5ncm91cE5hbWVdXTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWNhcmQ+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJtZW1vcnktdmlld2VyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjZGVzY3JpcHRpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDJlbTsKICAgICAgICB3aWR0aDogNjAwcHg7CiAgICAgIH0KICAgICAgbXYtbGluZS1jaGFydCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0ibWVtb3J5LXZpZXdlci1kYXNoYm9hcmQiIHN0eWxlPSJvdmVyZmxvdzphdXRvIj4KICAgICAgPGgzPk1vZHVsZSBuYW1lOiA8c3Bhbj5bW21vZHVsZU5hbWVfXV08L3NwYW4+PC9oMz4KICAgICAgPGgzPgogICAgICAgIFBlYWsgbWVtb3J5IGFsbG9jYXRpb24gaXMgPHNwYW4+e3twZWFrSGVhcFNpemVNaUJffX08L3NwYW4+IE1pQgogICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MjBweCIgaGlkZGVuPSJ7eyF1bnBhZGRlZFBlYWtIZWFwU2l6ZU1pQl99fSI+KCB7e3VucGFkZGVkUGVha0hlYXBTaXplTWlCX319IE1pQiB3aXRob3V0IHBhZGRpbmcpPC9zcGFuPgogICAgICA8L2gzPgogICAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+CiAgICAgICAgPHA+CiAgICAgICAgICBNb2RpZnlpbmcgeW91ciBtb2RlbCdzIGFyY2hpdGVjdHVyZSwgYmF0Y2ggc2l6ZSBhbmQgZGF0YSBkaW1lbnRpb25zCiAgICAgICAgICBtYXkgaGVscCByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQuCiAgICAgICAgCiAgICAgIDwvZGl2PgogICAgICA8bXYtbGluZS1jaGFydCBkYXRhPSJ7e3VzYWdlfX0iIGFjdGl2ZT0ie3thY3RpdmV9fSI+PC9tdi1saW5lLWNoYXJ0PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iZGV0YWlscy1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWNhcmQgewogICAgICAgIG1heC1oZWlnaHQ6IDUwdmg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICAtLXBhcGVyLWNhcmQtaGVhZGVyLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLWNhcmQtaGVhZGVyOiB7CiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTc4LCAzNCwgMzQpOwogICAgICAgIH0KICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmNhcmQtY29udGVudCA+IGRpdiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOwogICAgICAgIHRvcDogLTVweDsKICAgICAgfQoKICAgICAgLnZhbHVlIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CgogICAgICAuaW5mbyB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29kZS1zdHlsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItY2FyZCBpZD0iY2FyZCIgaGVhZGluZz0iW1tfbmFtZV1dIiBoaWRkZW49IltbIV9uYW1lXV0iIGVsZXZhdGlvbj0iMiI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZXNdXSIgYXM9Im5vZGUiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCBpbmZvIj4KICAgICAgICAgIDxkaXYgaGlkZGVuPSJbW19pc1N0ZXAobm9kZSldXSI+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIERhdGEgVHJhbnNmZXJyZWQ6CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj5bW19zaXplTWlCKG5vZGUuZGF0YVNpemUpXV0gTWlCPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgTGF0ZW5jeToKICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPltbX2Zvcm1hdChub2RlLmR1cmF0aW9uVXMpXV0gwrVzPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgQlc6CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4KICAgICAgICAgICAgICAgIFtbX2JhbmR3aWR0aChub2RlLmRhdGFTaXplLCBub2RlLmR1cmF0aW9uVXMpXV0gR2lCL3M8L3NwYW4+CiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGhpZGRlbj0iW1shX2lzQ2hhbm5lbChub2RlKV1dIj4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgU2VuZCBEZWxheToKICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPltbX2Zvcm1hdChub2RlLnNlbmREZWxheVVzKV1dIMK1czwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxwPkhsbyBOYW1lczoKICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvZGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZS5obG9OYW1lc11dIj4KICAgICAgICAgICAgICAgICJbW2l0ZW1dXSIKICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2NvZGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgaGlkZGVuPSJbWyFfaGFzUmVwbGljYUdyb3Vwcyhub2RlKV1dIj4KICAgICAgICAgICAgPHA+UmVwbGljYSBHcm91cHMKICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvZGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZS5yZXBsaWNhR3JvdXBzXV0iPgogICAgICAgICAgICAgICAge1tbaXRlbS5yZXBsaWNhSWRzXV19PGJyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvY29kZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBoaWRkZW49IltbIV9pc1N0ZXAobm9kZSldXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbc3RlcEJyZWFrZG93bkxheWVyc11dIj4KICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIFtbaXRlbS5sYWJlbF1dOgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgW1tfZ2V0U3RlcEJyZWFrZG93blZhbHVlKG5vZGUsIGl0ZW0ua2V5KV1dIMK1cwogICAgICAgICAgICAgICAgICBbW19nZXRTdGVwQnJlYWtkb3duUGN0KG5vZGUsIGl0ZW0ua2V5KV1dPC9zcGFuPgogICAgICAgICAgICAgIAogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLWNhcmQ+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJzdGFjay1iYXItY2hhcnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1yaWdodDogMS41ZW07CiAgICAgIH0KCiAgICAgIC5heGlzIHRleHQgewogICAgICAgIGZvbnQ6IDE0cHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnN2Zy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogOTAlOyAvKiBhc3BlY3QgcmF0aW8gKi8KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CgogICAgICAuc3ZnLWNvbnRlbnQtcmVzcG9uc2l2ZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InN0YWNrLWJhci1jaGFydCI+CiAgICAgIDxkaXYgaWQ9ImNoYXJ0Ij48L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRvcG9sb2d5LWdyYXBoIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICAgIC5mbGV4LWhvcml6b250YWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICB9CgogICAgICAuZmxleGNoaWxkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1yaWdodDogMS41ZW07CiAgICAgIH0KCiAgICAgIC5jZWxscyB7CiAgICAgICAgZmlsbDogI2FhYTsKICAgICAgfQoKICAgICAgLmxhYmVsIHsKICAgICAgICBmb250OiAyNHB4IHNhbnMtc2VyaWY7CiAgICAgICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgICB9CgogICAgICAvKiBkaXNhYmxlIHRleHQgc2VsZWN0aW9uICovCiAgICAgIHN2ZyAqOjpzZWxlY3Rpb24sCiAgICAgIHN2ZyAqOjotbW96LXNlbGVjdGlvbiwKICAgICAgc3ZnICo6Oi13ZWJraXQtc2VsZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgcmVjdC5zZWxlY3Rpb24gewogICAgICAgIGZpbGw6IHRyYW5zcGFyZW50OwogICAgICAgIHN0cm9rZTogIzMzMzsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiA0cHg7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgcmVjdC5ib3JkZXJlZCB7CiAgICAgICAgc3Ryb2tlOiAjZTZlNmU2OwogICAgICAgIHN0cm9rZS13aWR0aDogMnB4OwogICAgICB9CgogICAgICByZWN0LmNlbGwtYm9yZGVyIHsKICAgICAgICBzdHJva2U6ICNlZWU7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAwLjNweDsKICAgICAgfQoKICAgICAgcmVjdC5jZWxsLXNlbGVjdGVkIHsKICAgICAgICBzdHJva2U6IHJnYig1MSwgMTAyLCAxNTMpOwogICAgICAgIHN0cm9rZS13aWR0aDogMC41cHg7CiAgICAgIH0KCiAgICAgIHJlY3QuY2VsbC1ob3ZlciB7CiAgICAgICAgc3Ryb2tlOiAjZjAwOwogICAgICAgIHN0cm9rZS13aWR0aDogMC4zcHg7CiAgICAgIH0KCiAgICAgICN0b29sdGlwIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiA0cHggNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIC1tb3otYm94LXNoYWRvdzogNHB4IDRweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBib3gtc2hhZG93OiA0cHggNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgcCB7CiAgICAgICAgZm9udDogMTJweCBzYW5zLXNlcmlmOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfQoKICAgICAgI292ZXJ2aWV3IHsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbTpob3Zlci5tZW51LW9wdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogI2UwZTBlMDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1pbnB1dDogewogICAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1ldHJpY3MtYnV0dG9uIHsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgIH0KCiAgICAgIC50b3BvLWhlYWRlciB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXJvdy1sZWZ0IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBsaW5lLWhlaWdodDogNTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBib3R0b207CiAgICAgIH0KCiAgICAgIC5tZXRyaWNzLWxhYmVsIHsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAudG9wby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIHRleHQtYWxpZ246IGJvdHRvbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICAvKiBUb29sdGlwIHNob3VsZCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyLiAqLwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InRvcG9sb2d5LWdyYXBoIj4KICAgICAgPGRpdiBjbGFzcz0idG9wby1oZWFkZXIgY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1yb3ctbGVmdCB0b3BvLXRpdGxlIj4KICAgICAgICAgIHt7X3RwdVR5cGV9fSB7e190b3RhbENvcmVDb3VudH19CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbnRyb2wtcm93LWxlZnQgbWV0cmljcy1sYWJlbCI+CiAgICAgICAgICBbW19nZXRTZWxlY3RlZE1ldHJpY0xhYmVsKG1ldHJpY3MsIHNlbGVjdGVkTWV0cmljSWR4KV1dPC9zcGFuPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBjbG9zZS1vbi1hY3RpdmF0ZT0idHJ1ZSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gcmFpc2VkIGljb249ImFycm93LWRyb3AtZG93biIgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIgY2xhc3M9ImRyb3Bkb3duLXRyaWdnZXIgbWV0cmljcy1idXR0b24iPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZE1ldHJpY0lkeH19Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1ttZXRyaWNzXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJbW2l0ZW0ua2V5XV0iPltbaXRlbS5sYWJlbF1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InRwZ3JhcGgiPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICAgICAgPHA+PHNwYW4gaWQ9InZhbHVlIj48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJwb2Qtdmlld2VyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxLjVlbTsKICAgICAgfQoKICAgICAgI2NvbnRyb2wgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICB0ZXh0LWFsaWduOiBib3R0b207CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICAuY29udHJvbC1yb3ctbGVmdCB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWlucHV0OiB7CiAgICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItc2xpZGVyLWhlaWdodDogM3B4OwogICAgICB9CgogICAgICAuc3RlcC1udW0tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgICB9CgogICAgICAuc3RhY2stdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmJhci1jaGFydCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICN0aXRsZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZXJyb3ItbWVzc2FnZSIgaGlkZGVuPSJbWyFfZXJyb3JNZXNzYWdlXV0iPgogICAgICA8c3Bhbj5bW19lcnJvck1lc3NhZ2VdXTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iY29udHJvbCIgaGlkZGVuPSJbW19lcnJvck1lc3NhZ2VdXSI+CiAgICAgIAogICAgICA8c3BhbiBjbGFzcz0iY29udHJvbC1yb3ctbGVmdCI+UGxlYXNlIHNlbGVjdCBhIHN0ZXAKICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMCIgbWF4PSJbW19tYXhTdGVwSWRdXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7Y3VyU3RlcElkfX0iPgogICAgICAgIDwvcGFwZXItc2xpZGVyPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLW51bS10ZXh0Ij5TdGVwIFtbX2dldFN0ZXBOdW0oX3BvZFN0YXRzTWFwKV1dPC9zcGFuPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InBvZC12aWV3ZXItZGFzaGJvYXJkIiBoaWRkZW49IltbX2Vycm9yTWVzc2FnZV1dIj4KICAgICAgPGRpdiBpZD0idG9wby1ncmFwaCI+CiAgICAgICAgPHRvcG9sb2d5LWdyYXBoIHJ1bi1lbnZpcm9ubWVudD0iW1tfcnVuRW52aXJvbm1lbnRdXSIgZGF0YT0iW1tfcG9kU3RhdHNNYXBdXSIgbWV0cmljcz0iW1tfc3RlcEJyZWFrZG93bkxheWVyc11dIiBhY3RpdmUtYmFyPSJbW2FjdGl2ZUJhcl1dIj4KICAgICAgICA8L3RvcG9sb2d5LWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY2hhbm5lbC1iYXJzIiBjbGFzcz0iYmFyLWNoYXJ0IiBoaWRkZW49IltbIV9jaGFubmVsRGJdXSI+CiAgICAgICAgPGRpdiBpZD0idGl0bGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhY2stdGl0bGUiPkxhdGVuY3kgb2YgU2VuZCBhbmQgUmVjdiBjaGFubmVsczwvZGl2PgogICAgICAgICAgPHA+KHgtYXhpczogY2hhbm5lbCBpZCwgeS1heGlzOiB0aW1lICjCtXMpKQogICAgICAgIDwvZGl2PgogICAgICAgIDxzdGFjay1iYXItY2hhcnQgZGF0YT0iW1tfY2hhbm5lbERiXV0iIHN0YWNrLWxheWVycz0iW1tfY2hhbm5lbExheWVyc11dIiB4LWRvbWFpbi1mdW5jPSJbW19jaGFubmVsRnVuY11dIiBhY3RpdmUtYmFyPSJ7e2FjdGl2ZUJhcn19Ij48L3N0YWNrLWJhci1jaGFydD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImFsbC1yZWR1Y2UtYmFycyIgY2xhc3M9ImJhci1jaGFydCIgaGlkZGVuPSJbWyFfYWxsUmVkdWNlRGJdXSI+CiAgICAgICAgPGRpdiBpZD0idGl0bGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhY2stdGl0bGUiPgogICAgICAgICAgICBEdXJhdGlvbiBvZiBhbGwtcmVkdWNlIG9wIG9yIGN1c3RvbSBmdXNpb24gZm9yIGFsbC1yZWR1Y2UKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHA+CiAgICAgICAgICAgICh4LWF4aXM6IHNob3J0IG5hbWVzIGZvciBhbGwtcmVkdWNlcyBvcHMgKGEjKSBvciBmdXNpb24gKGYjKSwKICAgICAgICAgICAgeS1heGlzOiB0aW1lICjCtXMpKQogICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgPHN0YWNrLWJhci1jaGFydCBkYXRhPSJbW19hbGxSZWR1Y2VEYl1dIiBzdGFjay1sYXllcnM9IltbX2FsbFJlZHVjZUxheWVyc11dIiB4LWRvbWFpbi1mdW5jPSJbW19hbGxSZWR1Y2VGdW5jXV0iIGFjdGl2ZS1iYXI9Int7YWN0aXZlQmFyfX0iPjwvc3RhY2stYmFyLWNoYXJ0PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0ic3RhY2stYmFycyIgY2xhc3M9ImJhci1jaGFydCIgaGlkZGVuPSJbWyFfc3RlcFN0YXRzXV0iPgogICAgICAgIDxkaXYgaWQ9InRpdGxlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YWNrLXRpdGxlIj5TdGVwIGJyZWFrZG93bjwvZGl2PgogICAgICAgICAgPHA+KHgtYXhpczogZ2xvYmFsIGNoaXAgaWQsIGNvcmUgaWQsIHktYXhpczogdGltZSAowrVzKSkKICAgICAgICA8L2Rpdj4KICAgICAgICA8c3RhY2stYmFyLWNoYXJ0IGRhdGE9IltbX3N0ZXBTdGF0c11dIiBzdGFjay1sYXllcnM9IltbX3N0ZXBCcmVha2Rvd25MYXllcnNdXSIgeC1kb21haW4tZnVuYz0iW1tfc3RlcEJyZWFrZG93bkZ1bmNdXSIgYWN0aXZlLWJhcj0ie3thY3RpdmVCYXJ9fSI+PC9zdGFjay1iYXItY2hhcnQ+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJnb29nbGUtY2hhcnQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9J2dhdWdlJ10pIHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJnb29nbGUtY2hhcnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJnb29nbGUtY2hhcnQtc3R5bGVzIj48L3N0eWxlPgogICAgPGdvb2dsZS1jaGFydC1sb2FkZXIgaWQ9ImxvYWRlciIgdHlwZT0iW1t0eXBlXV0iPjwvZ29vZ2xlLWNoYXJ0LWxvYWRlcj4KICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2Ij48L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0iZ29vZ2xlLWNoYXJ0LWRlbW8iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgY29kZSB7CiAgICAgICAgY29sb3I6ICMwMDcwMDA7CiAgICAgIH0KICAgICAgZ29vZ2xlLWNoYXJ0IHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9ImRlbW8tYm9keSI+CiAgICAgIDxwPgogICAgICAgIFdlYnNpdGUgdHJhZmZpYyBkYXRhIGJ5IGNvdW50cnkgZnJvbSBhbiBleHRlcm5hbCBKU09OIHJlc291cmNlIHdoZXJlIHRoZQogICAgICAgIGRhdGEgaXMgaW4gcmF3IERhdGFUYWJsZSBmb3JtYXQuCiAgICAgIAogICAgICA8Z29vZ2xlLWNoYXJ0IHR5cGU9ImNvbHVtbiIgb3B0aW9ucz0ieyZxdW90O3RpdGxlJnF1b3Q7OiAmcXVvdDtWaXNpdG9ycyBieSBDb3VudHJ5JnF1b3Q7LCAmcXVvdDtsZWdlbmQmcXVvdDs6ICZxdW90O25vbmUmcXVvdDt9IiBkYXRhPSJbW19kYXRhXV0iPgogICAgICA8L2dvb2dsZS1jaGFydD4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXBsdWdpbi1kaWFsb2ciPgogIDx0ZW1wbGF0ZT4KICAgIAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19vcGVuXV0iPgogICAgICA8ZGl2IGlkPSJkYXNoYm9hcmQtYmFja2Ryb3AiPjwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxwYXBlci1kaWFsb2cgaWQ9ImRpYWxvZyIgbW9kYWwgb3BlbmVkPSJ7e19vcGVufX0iIHdpdGgtYmFja2Ryb3A9IltbX3VzZU5hdGl2ZUJhY2tkcm9wXV0iPgogICAgICA8aDIgaWQ9ImRpYWxvZy10aXRsZSI+W1tfdGl0bGVdXTwvaDI+CiAgICAgIDxkaXYgY2xhc3M9ImN1c3RvbS1tZXNzYWdlIj5bW19jdXN0b21NZXNzYWdlXV08L2Rpdj4KICAgIDwvcGFwZXItZGlhbG9nPgogICAgPHN0eWxlPgogICAgICAvKiogV2UgcmVseSBvbiBhIHNlcGFyYXRlIGBfaGlkZGVuYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1ha2luZyB1c2UKICAgICAgICAgIG9mIHRoZSBgX29wZW5gIGF0dHJpYnV0ZSBiZWNhdXNlIHRoaXMgQ1NTIHNwZWNpZmljYXRpb24gbWF5IHN0cmFuZ2VseQogICAgICAgICAgYWZmZWN0IG90aGVyIGVsZW1lbnRzIHRocm91Z2hvdXQgVGVuc29yQm9hcmQuIFNlZSAjODk5LiAqLwogICAgICAjZGFzaGJvYXJkLWJhY2tkcm9wIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjZGlhbG9nLXRpdGxlIHsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDsKICAgICAgfQoKICAgICAgLmN1c3RvbS1tZXNzYWdlIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1wcm9maWxlLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLXRvYXN0IGlkPSJ0b2FzdCIgZHVyYXRpb249IjAiIHRleHQ9IiIgYWx3YXlzLW9uLXRvcD4KICAgICAgPHBhcGVyLWJ1dHRvbiBvbmNsaWNrPSJ0b2FzdC50b2dnbGUoKSIgY2xhc3M9InllbGxvdy1idXR0b24iPkNsb3NlIG5vdyE8L3BhcGVyLWJ1dHRvbj4KICAgIDwvcGFwZXItdG9hc3Q+CiAgICA8dGYtcGx1Z2luLWRpYWxvZyBpZD0iaW5pdGlhbERpYWxvZyI+PC90Zi1wbHVnaW4tZGlhbG9nPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iY2FwdHVyZVByb2ZpbGVEaWFsb2ciIG1vZGFsPgogICAgICA8cGFwZXItaW5wdXQgbGFiZWw9IlByb2ZpbGVyIFNlcnZpY2UgVVJMIG9yIFRQVSBuYW1lIiBhbHdheXMtZmxvYXQtbGFiZWwgcGxhY2Vob2xkZXI9ImxvY2FsaG9zdDo2MDA5IiB2YWx1ZT0ie3tfcHJvZmlsZXJTZXJ2aWNlQWRkcmVzc319IiBhdXRvLXZhbGlkYXRlIHJlcXVpcmVkPjwvcGFwZXItaW5wdXQ+CiAgICAgIDxsYWJlbCBpZD0icHJvZmlsZXItYWRkcmVzcy10eXBlLWxhYmVsIj5BZGRyZXNzIFR5cGU6PC9sYWJlbD4KICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIHNlbGVjdGVkPSJ7e19wcm9maWxlclNlcnZpY2VBZGRyZXNzVHlwZX19IiBhcmlhLWxhYmVsbGVkYnk9InByb2ZpbGVyLWFkZHJlc3MtdHlwZS1sYWJlbCI+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJpcC1hZGRyZXNzIj5JUCBBZGRyZXNzPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJ0cHUtbmFtZSI+VFBVIE5hbWU8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgPHBhcGVyLWlucHV0IGxhYmVsPSJQcm9maWxpbmcgRHVyYXRpb24gKG1pbGxpc2Vjb25kcykiIGFsd2F5cy1mbG9hdC1sYWJlbCB0eXBlPSJudW1iZXIiIG1pbj0iMSIgbWF4PSI2MDAwMDAiIGF1dG8tdmFsaWRhdGUgcGF0dGVybj0iWzAtOV0rIiBlcnJvci1tZXNzYWdlPSJJbnB1dCBpcyBub3QgYW4gaW50ZWdlciBiZXR3ZWVuIDEgdG8gNjAwMDAwIiByZXF1aXJlZCB2YWx1ZT0ie3tfcHJvZmlsZUR1cmF0aW9ufX0iPjwvcGFwZXItaW5wdXQ+CgogICAgICA8cGFwZXItaW5wdXQgbGFiZWw9IkF1dG9tYXRpY2FsbHkgcmV0cnkgTiB0aW1lcyB3aGVuIG5vIHRyYWNlIGV2ZW50IGlzIGNvbGxlY3RlZCIgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEwMCIgYXV0by12YWxpZGF0ZSBwYXR0ZXJuPSJbMC05XSsiIGVycm9yLW1lc3NhZ2U9IklucHV0IGlzIG5vdCBhbiBpbnRlZ2VyIGJldHdlZW4gMCB0byAxMDAiIHJlcXVpcmVkIHZhbHVlPSJ7e19wcm9maWxlTnVtUmV0cnl9fSI+PC9wYXBlci1pbnB1dD4KCiAgICAgIDxkaXYgaGlkZGVuPSJ7eyFfc2hvdWxkU2hvd1RwdU9wdGlvbnMoX3Byb2ZpbGVyU2VydmljZUFkZHJlc3NUeXBlKX19Ij4KICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tfcHJvZmlsZUluY2x1ZGVEYXRhc2V0T3BzfX0iPlRyYWNlIGRhdGFzZXQgb3BzPC9wYXBlci1jaGVja2JveD4KICAgICAgICA8cGFwZXItaW5wdXQgbGFiZWw9IlN1YnNldCBvZiB3b3JrZXIgVFBVcyB0byBwcm9maWxlIChvcHRpb25hbCkiIGFsd2F5cy1mbG9hdC1sYWJlbCBwbGFjZWhvbGRlcj0iTGlzdCBvZiBJUHMsIGUuZy4gMTAuNC4xLjIsMTAuNC4xLjMiIHZhbHVlPSJ7e19wcm9maWxlV29ya2VyTGlzdH19Ij48L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9ucyI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctY29uZmlybSByYWlzZWQgb24tdGFwPSJfY2FwdHVyZVByb2ZpbGUiIGRpc2FibGVkJD0iW1tfc2hvdWxkRGlzYWJsZUNhcHR1cmVQcm9maWxlQnV0dG9uKF9wcm9maWxlclNlcnZpY2VBZGRyZXNzLCBfcHJvZmlsZUR1cmF0aW9uLCBfcHJvZmlsZU51bVJldHJ5KV1dIj4KICAgICAgICAgIENhcHR1cmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICA8cGFwZXItYnV0dG9uIGRpYWxvZy1jb25maXJtPkNsb3NlPC9wYXBlci1idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9wYXBlci1kaWFsb2c+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzU3RhdGUoX3RvcExldmVsU3RhdGUsICdMT0FESU5HJyldXSI+CiAgICAgIDxkaXYgaWQ9InByb2dyZXNzLWJhciI+CiAgICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtbXNnIj5bW3Byb2dyZXNzLm1zZ11dPC9kaXY+CiAgICAgICAgPHBhcGVyLXByb2dyZXNzIHZhbHVlPSJbW3Byb2dyZXNzLnZhbHVlXV0iPjwvcGFwZXItcHJvZ3Jlc3M+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTdGF0ZShfdG9wTGV2ZWxTdGF0ZSwgJ0RBVEFfTk9UX0ZPVU5EJyldXSI+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTQwcHg7IG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsiPgogICAgICAgIDxoMz5ObyBwcm9maWxlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CgogICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIG9uLXRhcD0iX29wZW5DYXB0dXJlUHJvZmlsZURpYWxvZyI+Q2FwdHVyZSBQcm9maWxlPC9wYXBlci1idXR0b24+CiAgICAgICAgPHBhcGVyLXNwaW5uZXIgY2xhc3M9ImNhcHR1cmUtc3Bpbm5lciIgYWN0aXZlPSJbW19jYXB0dXJpbmdQcm9maWxlXV0iPjwvcGFwZXItc3Bpbm5lcj4KCiAgICAgICAgPHA+CiAgICAgICAgICBJZiB5b3UgaGF2ZSBhIG1vZGVsIHJ1bm5pbmcgb24gQ1BVLCBHUFUsIG9yIEdvb2dsZSBDbG91ZCBUUFUsIHlvdSBtYXkKICAgICAgICAgIGJlIGFibGUgdG8gdXNlIHRoZSBhYm92ZSBidXR0b24gdG8gY2FwdHVyZSBhIHByb2ZpbGUuCiAgICAgICAgCgogICAgICAgIDxwPgogICAgICAgICAgSWYgeW914oCZcmUgYSBDUFUgb3IgR1BVIHVzZXIsIHBsZWFzZSB1c2UgdGhlIElQIGFkZHJlc3Mgb3B0aW9uLiBZb3UgbWF5CiAgICAgICAgICB3YW50IHRvIGNoZWNrIG91dCB0aGUKICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY29sYWIucmVzZWFyY2guZ29vZ2xlLmNvbS9naXRodWIvdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9kb2NzL3IyL3RlbnNvcmJvYXJkX3Byb2ZpbGluZ19rZXJhcy5pcHluYiIgcmVsPSJub29wZW5lciIgdGFyZ2V0PSJfYmxhbmsiPnR1dG9yaWFsPC9hPgogICAgICAgICAgb24gaG93IHRvIHN0YXJ0IGEgVGVuc29yRmxvdyBwcm9maWxlciBzZXJ2ZXIgYW5kIHByb2ZpbGUgYSBLZXJhcyBtb2RlbAogICAgICAgICAgb24gYSBHUFUuCiAgICAgICAgCgogICAgICAgIDxwPgogICAgICAgICAgSWYgeW91J3JlIGEgVFBVIHVzZXIsIHBsZWFzZSB1c2UgdGhlIFRQVSBuYW1lIG9wdGlvbiBhbmQgeW91IG1heSB3YW50CiAgICAgICAgICB0byBjaGVjayBvdXQgdGhlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vdHB1L2RvY3MvY2xvdWQtdHB1LXRvb2xzIiByZWw9Im5vb3BlbmVyIiB0YXJnZXQ9Il9ibGFuayI+dHV0b3JpYWw8L2E+CiAgICAgICAgICBvbiBob3cgdG8gaW50ZXJwcmV0aW5nIHRoZSBwcm9maWxpbmcgcmVzdWx0cy4KICAgICAgICAKCiAgICAgICAgPHA+CiAgICAgICAgICBJZiB5b3UgdGhpbmsgcHJvZmlsaW5nIGlzIGRvbmUgcHJvcGVybHksIHBsZWFzZSBzZWUgdGhlIHBhZ2Ugb2YKICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS90cHUvZG9jcy90cm91Ymxlc2hvb3RpbmciIHJlbD0ibm9vcGVuZXIiIHRhcmdldD0iX2JsYW5rIj5Hb29nbGUgQ2xvdWQgVFBVIFRyb3VibGVzaG9vdGluZyBhbmQgRkFRPC9hPgogICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgCiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTdGF0ZShfdG9wTGV2ZWxTdGF0ZSwgJ0FDVElWRScpXV0iPgogICAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBvbi10YXA9Il9vcGVuQ2FwdHVyZVByb2ZpbGVEaWFsb2ciPkNhcHR1cmUgUHJvZmlsZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1zcGlubmVyIGNsYXNzPSJjYXB0dXJlLXNwaW5uZXIiIGFjdGl2ZT0iW1tfY2FwdHVyaW5nUHJvZmlsZV1dIj48L3BhcGVyLXNwaW5uZXI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4KICAgICAgICAgICAgICAgIFJ1bnMgPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW19kYXRhc2V0cy5sZW5ndGhdXSk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBub2luayBob3Jpem9udGFsLWFsaWduPSJsZWZ0Ij4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGlkPSJsaXN0X2JveF9ydW4iIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3NlbGVjdGVkRGF0YXNldEluZGV4fX0iPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9InJ1bl9pdGVtcyIgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19kYXRhc2V0c11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgICAgICAgVG9vbHMgPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW19hY3RpdmVUb29sc0xpc3QubGVuZ3RoXV0pPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IG5vLWxhYmVsLWZsb2F0IG5vLWFuaW1hdGlvbnMgbm9pbmsgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCI+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBpZD0ibGlzdF9ib3hfdG9vbCIgc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRUb29sSW5kZXh9fSI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD0idG9vbF9pdGVtcyIgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19hY3RpdmVUb29sc0xpc3RdXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhc0FjdGl2ZVRvb2xzKCldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+Tm9uZTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4KICAgICAgICAgICAgICAgIEhvc3RzIDxzcGFuIGNsYXNzPSJjb3VudGVyIj4oW1tfYWN0aXZlSG9zdHNMaXN0Lmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBuby1sYWJlbC1mbG9hdCBuby1hbmltYXRpb25zIG5vaW5rIGhvcml6b250YWwtYWxpZ249ImxlZnQiPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggaWQ9Imxpc3RfYm94X2hvc3QiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSG9zdEluZGV4fX0iPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9Imhvc3RfaXRlbXMiIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfYWN0aXZlSG9zdHNMaXN0XV0iPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbX2dldEhvc3REaXNwbGF5TmFtZShpdGVtKV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBkZXRhaWxzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0N1cnJlbnRUb29sKF90b29sSW5TY29wZSwgJ29wX3Byb2ZpbGUnKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgICAgIDx0Zi1vcC1kZXRhaWxzIGhpZGRlbj0iW1shX2FjdGl2ZU9wRGV0YWlsc11dIiBub2RlPSJbW19hY3RpdmVPcERldGFpbHNdXSI+PC90Zi1vcC1kZXRhaWxzPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0N1cnJlbnRUb29sKF90b29sSW5TY29wZSwgJ21lbW9yeV92aWV3ZXInKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgICAgIDxidWZmZXItZGV0YWlscyBoaWRkZW49IltbIV9hY3RpdmVCdWZmZXJEZXRhaWxzXV0iIG5vZGU9IltbX2FjdGl2ZUJ1ZmZlckRldGFpbHNdXSI+PC9idWZmZXItZGV0YWlscz4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICdwb2Rfdmlld2VyJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgICAgICA8ZGV0YWlscy1jYXJkIGhpZGRlbj0iW1shX2FjdGl2ZVBvZERldGFpbHNdXSIgbm9kZXM9IltbX2FjdGl2ZVBvZERldGFpbHNdXSI+PC9kZXRhaWxzLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAndHJhY2Vfdmlld2VyJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDxpZnJhbWUgaWQ9InR2X2lmcmFtZSIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgc3JjJD0iW1tfdHJhY2VEYXRhVXJsXV0iPgogICAgICAgICAgICA8L2lmcmFtZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnb3BfcHJvZmlsZScpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICA8dGYtb3AtcHJvZmlsZSBfZGF0YT0iW1tfb3BQcm9maWxlRGF0YV1dIiBhY3RpdmU9Int7X2FjdGl2ZU9wRGV0YWlsc319Ij48L3RmLW9wLXByb2ZpbGU+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0N1cnJlbnRUb29sKF90b29sSW5TY29wZSwgJ2lucHV0X3BpcGVsaW5lX2FuYWx5emVyJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDxpbnB1dC1waXBlbGluZS1hbmFseXplciBfZGF0YT0iW1tfaW5wdXRQaXBlbGluZURhdGFdXSI+PC9pbnB1dC1waXBlbGluZS1hbmFseXplcj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnb3ZlcnZpZXdfcGFnZScpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICA8b3ZlcnZpZXctcGFnZSBfZGF0YT0iW1tfb3ZlcnZpZXdQYWdlRGF0YV1dIj48L292ZXJ2aWV3LXBhZ2U+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0N1cnJlbnRUb29sKF90b29sSW5TY29wZSwgJ3BvZF92aWV3ZXInKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgPHBvZC12aWV3ZXItZGFzaGJvYXJkIGRhdGE9IltbX3BvZFZpZXdlckRhdGFdXSIgYWN0aXZlLWRldGFpbHM9Int7X2FjdGl2ZVBvZERldGFpbHN9fSI+PC9wb2Qtdmlld2VyLWRhc2hib2FyZD4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnbWVtb3J5X3ZpZXdlcicpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICA8bWVtb3J5LXZpZXdlci1kYXNoYm9hcmQgX2RhdGE9IltbX21lbW9yeVZpZXdlckRhdGFdXSIgYWN0aXZlPSJ7e19hY3RpdmVCdWZmZXJEZXRhaWxzfX0iPjwvbWVtb3J5LXZpZXdlci1kYXNoYm9hcmQ+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0N1cnJlbnRUb29sKF90b29sSW5TY29wZSwgJ2dvb2dsZV9jaGFydF9kZW1vJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDxnb29nbGUtY2hhcnQtZGVtbyBfZGF0YT0iW1tfZ29vZ2xlQ2hhcnREZW1vRGF0YV1dIj48L2dvb2dsZS1jaGFydC1kZW1vPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CgogICAgPHN0eWxlPgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIGlmcmFtZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgICNwcm9ncmVzcy1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDQwcHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1wcm9ncmVzcyB7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiA2cHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1hY3RpdmUtY29sb3I6ICNmMzkxM2U7CiAgICAgIH0KICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmRldGFpbHMtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7CiAgICAgIH0KICAgICAgdGYtb3AtZGV0YWlscywKICAgICAgYnVmZmVyLWRldGFpbHMsCiAgICAgIGRldGFpbHMtY2FyZCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAueWVsbG93LWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICNlZWZmNDE7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgICAgLmNhcHR1cmUtc3Bpbm5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1iZWhvbGRlci12aWRlbyI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KICAgICAgPGltZyBpZD0idmlkZW8iIHNyYyQ9IltbX2ltYWdlVVJMXV0iPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICBpbWcgewogICAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWJlaG9sZGVyLWluZm8iPgogIDx0ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2l0ZW1zXV0iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWluZm8iIHN0eWxlJD0iaGVpZ2h0OiBbW2l0ZW0uaGVpZ2h0XV1weCI+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPltbaXRlbS5uYW1lXV08L2xpPgogICAgICAgICAgPGxpPnNoYXBlOiBbW2l0ZW0uc2hhcGVdXTwvbGk+CiAgICAgICAgICA8bGk+cmFuZ2U6IFsgW1tpdGVtLm1pbl1dLCBbW2l0ZW0ubWF4XV0gXTwvbGk+CiAgICAgICAgICA8bGk+bWVhbjogW1tpdGVtLm1lYW5dXTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24taW5mbyB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KICAgICAgLnNlY3Rpb24taW5mbyB1bCB7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtYmVob2xkZXItZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtcGx1Z2luLWRpYWxvZyBpZD0iaW5pdGlhbERpYWxvZyI+PC90Zi1wbHVnaW4tZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8cCBjbGFzcz0iY29udHJvbHMtZGlzYWJsZWQtbWVzc2FnZSI+CiAgICAgICAgICAgICAgQ29udHJvbHMgZGlzYWJsZWQ6IGRpcmVjdG9yeSBpcyBub3Qgd3JpdGVhYmxlLgogICAgICAgICAgICAKICAgICAgICAgICAgPHAgY2xhc3M9ImRpc2NsYWltZXIiPgogICAgICAgICAgICAgIEJlaG9sZGVyIHJlcXVpcmVzIHdyaXRlIGFjY2VzcyB0byB0aGUgbG9nIGRpcmVjdG9yeSBpbiBvcmRlciB0bwogICAgICAgICAgICAgIGNvbW11bmljYXRlIHZpc3VhbGl6YXRpb24gY2hhbmdlcyB0byB0aGUgPGNvZGU+QmVob2xkZXI8L2NvZGU+CiAgICAgICAgICAgICAgaW5zdGFuY2UgaW4geW91ciBtb2RlbC4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8aDM+VmFsdWVzPC9oMz4KICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cCBpZD0idmFsdWVzU2VsZWN0b3IiIHNlbGVjdGVkPSJ7e192YWx1ZXN9fSI+CiAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0idHJhaW5hYmxlX3ZhcmlhYmxlcyIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgIDxwcmU+dGYudHJhaW5hYmxlX3ZhcmlhYmxlcygpPC9wcmU+CiAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJvcHRpb24tYXJyYXlzIiBuYW1lPSJhcnJheXMiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICA8cHJlPmIudXBkYXRlKGFycmF5cz1bTlBfQVJSQVlTXSk8L3ByZT4KICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9Im9wdGlvbi1mcmFtZXMiIG5hbWU9ImZyYW1lcyIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgIDxwcmU+Yi51cGRhdGUoZnJhbWU9TlBfQVJSQVkpPC9wcmU+CiAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3ZhbHVlc05vdEZyYW1lKF92YWx1ZXMpXV0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tfc2hvd0FsbH19IiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+U2hvdyBhbGwgZGF0YSA8aT4oY2FuIGJlIHJlc291cmNlIGludGVuc2l2ZSk8L2k+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfdmFsdWVzTm90RnJhbWUoX3ZhbHVlcyldXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDM+TW9kZTwvaDM+CiAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cCBpZD0ibW9kZVNlbGVjdG9yIiBzZWxlY3RlZD0ie3tfbW9kZX19Ij4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImN1cnJlbnQiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICAgIGN1cnJlbnQgdmFsdWVzCiAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJ2YXJpYW5jZSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgICAgdmFyaWFuY2Ugb3ZlciB0cmFpbiBzdGVwcwogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3ZhcmlhbmNlU2VsZWN0ZWQoX21vZGUpXV0iPgogICAgICAgICAgICAgIDxoND5WYXJpYW5jZSB0aW1lc3RlcHM6IHt7X3dpbmRvd1NpemV9fTwvaDQ+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlciBpZD0id2luZG93U2xpZGVyIiB2YWx1ZT0ie3tfd2luZG93U2l6ZX19IiB0eXBlPSJudW1iZXIiIHN0ZXA9IjEiIG1pbj0iMiIgbWF4PSIyMCIgcGluPSJ0cnVlIiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDM+SW1hZ2Ugc2NhbGluZzwvaDM+CiAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cCBpZD0ic2NhbGluZ1NlbGVjdG9yIiBzZWxlY3RlZD0ie3tfc2NhbGluZ319Ij4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJvcHRpb24tbGF5ZXIiIG5hbWU9ImxheWVyIiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgICBwZXIgc2VjdGlvbgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGZvcj0ib3B0aW9uLWxheWVyIiBwb3NpdGlvbj0icmlnaHQiPgogICAgICAgICAgICAgICAgQmxhY2sgaXMgdGhlIGxvd2VzdCB2YWx1ZSBpbiB0aGF0IHNlY3Rpb24sIHdoaXRlIGlzIHRoYXQgbGFyZ2VzdAogICAgICAgICAgICAgICAgdmFsdWUgaW4gdGhhdCBzZWN0aW9uLgogICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ib3B0aW9uLW5ldHdvcmsiIG5hbWU9Im5ldHdvcmsiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICAgIGFsbCBzZWN0aW9ucwogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGZvcj0ib3B0aW9uLW5ldHdvcmsiIHBvc2l0aW9uPSJyaWdodCI+CiAgICAgICAgICAgICAgICBCbGFjayBpcyB0aGUgc21hbGxlc3QgdmFsdWUgaW4gYWxsIHNlY3Rpb25zLCB3aGl0ZSBpcyB0aGUKICAgICAgICAgICAgICAgIGxhcmdlc3QgdmFsdWUgaW4gYWxsIHNlY3Rpb25zLgogICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KCiAgICAgICAgICAgIDxkaXYgaWQ9ImNvbG9ybWFwLXNlbGVjdGlvbiI+CiAgICAgICAgICAgICAgPGRpdiBpZD0iY29sb3JtYXAtc2VsZWN0aW9uLWxhYmVsIj5Db2xvcm1hcDo8L2Rpdj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBuby1sYWJlbC1mbG9hdCBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19jb2xvcm1hcH19IiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0iMCI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPm1hZ21hPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5pbmZlcm5vPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5wbGFzbWE8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPnZpcmlkaXM8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmdyYXlzY2FsZTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxoMz5VcGRhdGVzIHBlciBzZWNvbmQ6IHt7X0ZQU319PC9oMz4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9IkZQU1NsaWRlciIgdmFsdWU9Int7X0ZQU319IiB0eXBlPSJudW1iZXIiIHN0ZXA9IjEiIG1pbj0iMCIgbWF4PSIzMCIgcGluPSJ0cnVlIiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gY2xhc3M9IngtYnV0dG9uIiBpZD0icmVjb3JkX2J1dHRvbiIgb24tdGFwPSJfdG9nZ2xlUmVjb3JkIiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgW1tfcmVjb3JkVGV4dF1dCiAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8cCBjbGFzcz0iZGlzY2xhaW1lciI+CiAgICAgICAgICAgIE5vdGU6IEJlaG9sZGVyIGN1cnJlbnRseSBvbmx5IHdvcmtzIHdlbGwgb24gbG9jYWwgZmlsZSBzeXN0ZW1zLgogICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaXNfYWN0aXZlXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIEJlaG9sZGVyIGRhdGEgd2FzIGZvdW5kLjwvaDM+CgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91ciBzY3JpcHQgaXNuJ3QgcnVubmluZy48L2xpPgogICAgICAgICAgICAgIDxsaT5Zb3UgYXJlbid0IGNhbGxpbmcgPGNvZGU+YmVob2xkZXIudXBkYXRlKCk8L2NvZGU+LjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyB1c2UgQmVob2xkZXIsIGltcG9ydCBhbmQgaW5zdGFudGlhdGUgdGhlCiAgICAgICAgICAgICAgPGNvZGU+QmVob2xkZXI8L2NvZGU+IGNsYXNzLCBhbmQgY2FsbCBpdHMKICAgICAgICAgICAgICA8Y29kZT51cGRhdGU8L2NvZGU+IG1ldGhvZCB3aXRoIGEgPGNvZGU+U2Vzc2lvbjwvY29kZT4gYXJndW1lbnQKICAgICAgICAgICAgICBhZnRlciBldmVyeSB0cmFpbiBzdGVwOgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwcmU+ZnJvbSB0ZW5zb3Jib2FyZC5wbHVnaW5zLmJlaG9sZGVyIGltcG9ydCBCZWhvbGRlcgpiZWhvbGRlciA9IEJlaG9sZGVyKExPR19ESVJFQ1RPUlkpCgojIGluc2lkZSB0cmFpbiBsb29wCmJlaG9sZGVyLnVwZGF0ZSgKICBzZXNzaW9uPXNlc3MsCiAgYXJyYXlzPWxpc3Rfb2ZfbnBfYXJyYXlzLCAgIyBvcHRpb25hbCBhcmd1bWVudAogIGZyYW1lPXR3b19kaW1lbnNpb25hbF9ucF9hcnJheSwgICMgb3B0aW9uYWwgYXJndW1lbnQKKTwvcHJlPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB1c2luZyA8Y29kZT50Zi50cmFpbi5Nb25pdG9yZWRTZXNzaW9uPC9jb2RlPiwgeW91IGNhbiB1c2UKICAgICAgICAgICAgICA8Y29kZT5CZWhvbGRlckhvb2s8L2NvZGU+OgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwcmU+ZnJvbSB0ZW5zb3Jib2FyZC5wbHVnaW5zLmJlaG9sZGVyIGltcG9ydCBCZWhvbGRlckhvb2sKYmVob2xkZXJfaG9vayA9IEJlaG9sZGVySG9vayhMT0dfRElSRUNUT1JZKQp3aXRoIE1vbml0b3JlZFNlc3Npb24oLi4uLCBob29rcz1bYmVob2xkZXJfaG9va10pIGFzIHNlc3M6CiAgc2Vzcy5ydW4odHJhaW5fb3ApPC9wcmU+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgZXZlcnl0aGluZyBpcyBzZXQgdXAgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci90ZW5zb3Jib2FyZC9wbHVnaW5zL2JlaG9sZGVyL1JFQURNRS5tZCI+dGhlIFJFQURNRTwvYT4KICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cCBjbGFzcz0iZGlzY2xhaW1lciI+CiAgICAgICAgICAgICAgTm90ZTogQmVob2xkZXIgY3VycmVudGx5IG9ubHkgd29ya3Mgd2VsbCBvbiBsb2NhbCBmaWxlIHN5c3RlbXMuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc19hY3RpdmVdXSI+CiAgICAgICAgICA8dGYtYmVob2xkZXItdmlkZW8gaWQ9InZpZGVvIiBmcHM9IltbX0ZQU11dIj48L3RmLWJlaG9sZGVyLXZpZGVvPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfdmFsdWVzTm90RnJhbWUoX3ZhbHVlcyldXSI+CiAgICAgICAgICAgIDx0Zi1iZWhvbGRlci1pbmZvIGlkPSJpbmZvIiBmcHM9IltbX0ZQU11dIj4gPC90Zi1iZWhvbGRlci1pbmZvPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5jZW50ZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMDsKICAgICAgfQoKICAgICAgcGFwZXItY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBhZGRpbmc6IDVweDsKCiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tcmFkaW8tY29udGFpbmVyOiB7CiAgICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB9CgogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1yYWRpby1ncm91cCB7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBmbGV4LWdyb3c6IDI7CiAgICAgIH0KCiAgICAgIHByZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICB9CgogICAgICBwYXBlci1idXR0b24jcmVjb3JkX2J1dHRvbiB7CiAgICAgICAgY29sb3I6ICNkMzJmMmY7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiNyZWNvcmRfYnV0dG9uLmlzLXJlY29yZGluZyB7CiAgICAgICAgYmFja2dyb3VuZDogI2QzMmYyZjsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24uYmVob2xkZXItZGFzaGJvYXJkOmxhc3QtY2hpbGQgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQoKICAgICAgI2NvbG9ybWFwLXNlbGVjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KCiAgICAgICNjb2xvcm1hcC1zZWxlY3Rpb24tbGFiZWwgewogICAgICAgIG1hcmdpbi10b3A6IDEzcHg7CiAgICAgIH0KCiAgICAgICNjb2xvcm1hcC1zZWxlY3Rpb24gcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQoKICAgICAgaDQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIG1hcmdpbjogNXB4IDA7CiAgICAgIH0KCiAgICAgIHAuZGlzY2xhaW1lciB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICBwLmNvbnRyb2xzLWRpc2FibGVkLW1lc3NhZ2UgewogICAgICAgIGNvbG9yOiAjYzAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0iYXYiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFkZC10by1xdWV1ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg1djJoOHYtMmg1YzEuMSAwIDEuOTktLjkgMS45OS0yTDIzIDVjMC0xLjExLS45LTItMi0yem0wIDE0SDNWNWgxOHYxMnptLTUtN3YyaC0zdjNoLTJ2LTNIOHYtMmgzVjdoMnYzaDN6IiAvPjwvZz4KPGcgaWQ9ImFpcnBsYXkiPjxwYXRoIGQ9Ik02IDIyaDEybC02LTZ6TTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg0di0ySDNWNWgxOHYxMmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iYWxidW0iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE0LjVjLTIuNDkgMC00LjUtMi4wMS00LjUtNC41UzkuNTEgNy41IDEyIDcuNXM0LjUgMi4wMSA0LjUgNC41LTIuMDEgNC41LTQuNSA0LjV6bTAtNS41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9ImFydC10cmFjayI+PHBhdGggZD0iTTIyIDEzaC04di0yaDh2MnptMC02aC04djJoOFY3em0tOCAxMGg4di0yaC04djJ6bS0yLTh2NmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJoNmMxLjEgMCAyIC45IDIgMnptLTEuNSA2bC0yLjI1LTMtMS43NSAyLjI2LTEuMjUtMS41MUwzLjUgMTVoN3oiIC8+PC9nPgo8ZyBpZD0iYXYtdGltZXIiPjxwYXRoIGQ9Ik0xMSAxN2MwIC41NS40NSAxIDEgMXMxLS40NSAxLTEtLjQ1LTEtMS0xLTEgLjQ1LTEgMXptMC0xNHY0aDJWNS4wOGMzLjM5LjQ5IDYgMy4zOSA2IDYuOTIgMCAzLjg3LTMuMTMgNy03IDdzLTctMy4xMy03LTdjMC0xLjY4LjU5LTMuMjIgMS41OC00LjQyTDEyIDEzbDEuNDEtMS40MS02LjgtNi44di4wMkM0LjQyIDYuNDUgMyA5LjA1IDMgMTJjMCA0Ljk3IDQuMDIgOSA5IDkgNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTloLTF6bTcgOWMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMSAuNDUgMSAxIDEgMS0uNDUgMS0xek02IDEyYzAgLjU1LjQ1IDEgMSAxczEtLjQ1IDEtMS0uNDUtMS0xLTEtMSAuNDUtMSAxeiIgLz48L2c+CjxnIGlkPSJicmFuZGluZy13YXRlcm1hcmsiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtOXYtNmg5djZ6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtdG8tYWN0aW9uIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZIM3YtM2gxOHYzeiIgLz48L2c+CjxnIGlkPSJjbG9zZWQtY2FwdGlvbiI+PHBhdGggZD0iTTE5IDRINWMtMS4xMSAwLTIgLjktMiAydjEyYzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS04IDdIOS41di0uNWgtMnYzaDJWMTNIMTF2MWMwIC41NS0uNDUgMS0xIDFIN2MtLjU1IDAtMS0uNDUtMS0xdi00YzAtLjU1LjQ1LTEgMS0xaDNjLjU1IDAgMSAuNDUgMSAxdjF6bTcgMGgtMS41di0uNWgtMnYzaDJWMTNIMTh2MWMwIC41NS0uNDUgMS0xIDFoLTNjLS41NSAwLTEtLjQ1LTEtMXYtNGMwLS41NS40NS0xIDEtMWgzYy41NSAwIDEgLjQ1IDEgMXYxeiIgLz48L2c+CjxnIGlkPSJlcXVhbGl6ZXIiPjxwYXRoIGQ9Ik0xMCAyMGg0VjRoLTR2MTZ6bS02IDBoNHYtOEg0djh6TTE2IDl2MTFoNFY5aC00eiIgLz48L2c+CjxnIGlkPSJleHBsaWNpdCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoNHYyaC00djJoNHYySDlWN2g2djJ6IiAvPjwvZz4KPGcgaWQ9ImZhc3QtZm9yd2FyZCI+PHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6IiAvPjwvZz4KPGcgaWQ9ImZhc3QtcmV3aW5kIj48cGF0aCBkPSJNMTEgMThWNmwtOC41IDYgOC41IDZ6bS41LTZsOC41IDZWNmwtOC41IDZ6IiAvPjwvZz4KPGcgaWQ9ImZlYXR1cmVkLXBsYXktbGlzdCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSA4SDNWOWg5djJ6bTAtNEgzVjVoOXYyeiIgLz48L2c+CjxnIGlkPSJmZWF0dXJlZC12aWRlbyI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSA5SDNWNWg5djd6IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLWR2ciI+PHBhdGggZD0iTTE3LjUgMTAuNWgydjFoLTJ6bS0xMyAwaDJ2M2gtMnpNMjEgM0gzYy0xLjExIDAtMiAuODktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE4YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xMS0uODktMi0yLTJ6TTggMTMuNWMwIC44NS0uNjUgMS41LTEuNSAxLjVIM1Y5aDMuNWMuODUgMCAxLjUuNjUgMS41IDEuNXYzem00LjYyIDEuNWgtMS41TDkuMzcgOWgxLjVsMSAzLjQzIDEtMy40M2gxLjVsLTEuNzUgNnpNMjEgMTEuNWMwIC42LS40IDEuMTUtLjkgMS40TDIxIDE1aC0xLjVsLS44NS0ySDE3LjV2MkgxNlY5aDMuNWMuODUgMCAxLjUuNjUgMS41IDEuNXYxeiIgLz48L2c+CjxnIGlkPSJmaWJlci1tYW51YWwtcmVjb3JkIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLW5ldyI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yek04LjUgMTVINy4zbC0yLjU1LTMuNVYxNUgzLjVWOWgxLjI1bDIuNSAzLjVWOUg4LjV2NnptNS00Ljc0SDExdjEuMTJoMi41djEuMjZIMTF2MS4xMWgyLjVWMTVoLTRWOWg0djEuMjZ6bTcgMy43NGMwIC41NS0uNDUgMS0xIDFoLTRjLS41NSAwLTEtLjQ1LTEtMVY5aDEuMjV2NC41MWgxLjEzVjkuOTloMS4yNXYzLjUxaDEuMTJWOWgxLjI1djV6IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLXBpbiI+PHBhdGggZD0iTTUuNSAxMC41aDJ2MWgtMnpNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6TTkgMTEuNWMwIC44NS0uNjUgMS41LTEuNSAxLjVoLTJ2Mkg0VjloMy41Yy44NSAwIDEuNS42NSAxLjUgMS41djF6bTMuNSAzLjVIMTFWOWgxLjV2NnptNy41IDBoLTEuMmwtMi41NS0zLjVWMTVIMTVWOWgxLjI1bDIuNSAzLjVWOUgyMHY2eiIgLz48L2c+CjxnIGlkPSJmaWJlci1zbWFydC1yZWNvcmQiPjxnPjxjaXJjbGUgY3g9IjkiIGN5PSIxMiIgcj0iOCIgLz48cGF0aCBkPSJNMTcgNC4yNnYyLjA5YzIuMzMuODIgNCAzLjA0IDQgNS42NXMtMS42NyA0LjgzLTQgNS42NXYyLjA5YzMuNDUtLjg5IDYtNC4wMSA2LTcuNzRzLTIuNTUtNi44NS02LTcuNzR6IiAvPjwvZz48L2c+CjxnIGlkPSJmb3J3YXJkLTEwIj48cGF0aCBkPSJNNCAxM2MwIDQuNCAzLjYgOCA4IDhzOC0zLjYgOC04aC0yYzAgMy4zLTIuNyA2LTYgNnMtNi0yLjctNi02IDIuNy02IDYtNnY0bDUtNS01LTV2NGMtNC40IDAtOCAzLjYtOCA4em02LjggM0gxMHYtMy4zTDkgMTN2LS43bDEuOC0uNmguMVYxNnptNC4zLTEuOGMwIC4zIDAgLjYtLjEuOGwtLjMuNnMtLjMuMy0uNS4zLS40LjEtLjYuMS0uNCAwLS42LS4xLS4zLS4yLS41LS4zLS4yLS4zLS4zLS42LS4xLS41LS4xLS44di0uN2MwLS4zIDAtLjYuMS0uOGwuMy0uNnMuMy0uMy41LS4zLjQtLjEuNi0uMS40IDAgLjYuMS4zLjIuNS4zLjIuMy4zLjYuMS41LjEuOHYuN3ptLS44LS44di0uNXMtLjEtLjItLjEtLjMtLjEtLjEtLjItLjItLjItLjEtLjMtLjEtLjIgMC0uMy4xbC0uMi4ycy0uMS4yLS4xLjN2MnMuMS4yLjEuMy4xLjEuMi4yLjIuMS4zLjEuMiAwIC4zLS4xbC4yLS4ycy4xLS4yLjEtLjN2LTEuNXoiIC8+PC9nPgo8ZyBpZD0iZm9yd2FyZC0zMCI+PHBhdGggZD0iTTkuNiAxMy41aC40Yy4yIDAgLjQtLjEuNS0uMnMuMi0uMi4yLS40di0uMnMtLjEtLjEtLjEtLjItLjEtLjEtLjItLjFoLS41cy0uMS4xLS4yLjEtLjEuMS0uMS4ydi4yaC0xYzAtLjIgMC0uMy4xLS41cy4yLS4zLjMtLjQuMy0uMi40LS4yLjQtLjEuNS0uMWMuMiAwIC40IDAgLjYuMXMuMy4xLjUuMi4yLjIuMy40LjEuMy4xLjV2LjNzLS4xLjItLjEuMy0uMS4yLS4yLjItLjIuMS0uMy4yYy4yLjEuNC4yLjUuNHMuMi40LjIuNmMwIC4yIDAgLjQtLjEuNXMtLjIuMy0uMy40LS4zLjItLjUuMi0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjQtLjEtLjZoLjh2LjJzLjEuMS4xLjIuMS4xLjIuMWguNXMuMS0uMS4yLS4xLjEtLjEuMS0uMnYtLjVzLS4xLS4xLS4xLS4yLS4xLS4xLS4yLS4xaC0uNnYtLjd6bTUuNy43YzAgLjMgMCAuNi0uMS44bC0uMy42cy0uMy4zLS41LjMtLjQuMS0uNi4xLS40IDAtLjYtLjEtLjMtLjItLjUtLjMtLjItLjMtLjMtLjYtLjEtLjUtLjEtLjh2LS43YzAtLjMgMC0uNi4xLS44bC4zLS42cy4zLS4zLjUtLjMuNC0uMS42LS4xLjQgMCAuNi4xLjMuMi41LjMuMi4zLjMuNi4xLjUuMS44di43em0tLjktLjh2LS41cy0uMS0uMi0uMS0uMy0uMS0uMS0uMi0uMi0uMi0uMS0uMy0uMS0uMiAwLS4zLjFsLS4yLjJzLS4xLjItLjEuM3Yycy4xLjIuMS4zLjEuMS4yLjIuMi4xLjMuMS4yIDAgLjMtLjFsLjItLjJzLjEtLjIuMS0uM3YtMS41ek00IDEzYzAgNC40IDMuNiA4IDggOHM4LTMuNiA4LThoLTJjMCAzLjMtMi43IDYtNiA2cy02LTIuNy02LTYgMi43LTYgNi02djRsNS01LTUtNXY0Yy00LjQgMC04IDMuNi04IDh6IiAvPjwvZz4KPGcgaWQ9ImZvcndhcmQtNSI+PHBhdGggZD0iTTQgMTNjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOGgtMmMwIDMuMy0yLjcgNi02IDZzLTYtMi43LTYtNiAyLjctNiA2LTZ2NGw1LTUtNS01djRjLTQuNCAwLTggMy42LTggOHptNi43LjlsLjItMi4yaDIuNHYuN2gtMS43bC0uMS45cy4xIDAgLjEtLjEuMSAwIC4xLS4xLjEgMCAuMiAwaC4yYy4yIDAgLjQgMCAuNS4xcy4zLjIuNC4zLjIuMy4zLjUuMS40LjEuNmMwIC4yIDAgLjQtLjEuNXMtLjEuMy0uMy41LS4zLjItLjUuMy0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjMtLjEtLjVoLjhjMCAuMi4xLjMuMi40cy4yLjEuNC4xYy4xIDAgLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0uNmwtLjEtLjItLjItLjJzLS4yLS4xLS4zLS4xaC0uMnMtLjEgMC0uMi4xLS4xIDAtLjEuMS0uMS4xLS4xLjFoLS42eiIgLz48L2c+CjxnIGlkPSJnYW1lcyI+PHBhdGggZD0iTTE1IDcuNVYySDl2NS41bDMgMyAzLTN6TTcuNSA5SDJ2Nmg1LjVsMy0zLTMtM3pNOSAxNi41VjIyaDZ2LTUuNWwtMy0zLTMgM3pNMTYuNSA5bC0zIDMgMyAzSDIyVjloLTUuNXoiIC8+PC9nPgo8ZyBpZD0iaGQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOCAxMkg5LjV2LTJoLTJ2Mkg2VjloMS41djIuNWgyVjlIMTF2NnptMi02aDRjLjU1IDAgMSAuNDUgMSAxdjRjMCAuNTUtLjQ1IDEtMSAxaC00Vjl6bTEuNSA0LjVoMnYtM2gtMnYzeiIgLz48L2c+CjxnIGlkPSJoZWFyaW5nIj48cGF0aCBkPSJNMTcgMjBjLS4yOSAwLS41Ni0uMDYtLjc2LS4xNS0uNzEtLjM3LTEuMjEtLjg4LTEuNzEtMi4zOC0uNTEtMS41Ni0xLjQ3LTIuMjktMi4zOS0zLS43OS0uNjEtMS42MS0xLjI0LTIuMzItMi41M0M5LjI5IDEwLjk4IDkgOS45MyA5IDljMC0yLjggMi4yLTUgNS01czUgMi4yIDUgNWgyYzAtMy45My0zLjA3LTctNy03UzcgNS4wNyA3IDljMCAxLjI2LjM4IDIuNjUgMS4wNyAzLjkuOTEgMS42NSAxLjk4IDIuNDggMi44NSAzLjE1LjgxLjYyIDEuMzkgMS4wNyAxLjcxIDIuMDUuNiAxLjgyIDEuMzcgMi44NCAyLjczIDMuNTUuNTEuMjMgMS4wNy4zNSAxLjY0LjM1IDIuMjEgMCA0LTEuNzkgNC00aC0yYzAgMS4xLS45IDItMiAyek03LjY0IDIuNjRMNi4yMiAxLjIyQzQuMjMgMy4yMSAzIDUuOTYgMyA5czEuMjMgNS43OSAzLjIyIDcuNzhsMS40MS0xLjQxQzYuMDEgMTMuNzQgNSAxMS40OSA1IDlzMS4wMS00Ljc0IDIuNjQtNi4zNnpNMTEuNSA5YzAgMS4zOCAxLjEyIDIuNSAyLjUgMi41czIuNS0xLjEyIDIuNS0yLjUtMS4xMi0yLjUtMi41LTIuNS0yLjUgMS4xMi0yLjUgMi41eiIgLz48L2c+CjxnIGlkPSJoaWdoLXF1YWxpdHkiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tOCAxMUg5LjV2LTJoLTJ2Mkg2VjloMS41djIuNWgyVjlIMTF2NnptNy0xYzAgLjU1LS40NSAxLTEgMWgtLjc1djEuNWgtMS41VjE1SDE0Yy0uNTUgMC0xLS40NS0xLTF2LTRjMC0uNTUuNDUtMSAxLTFoM2MuNTUgMCAxIC40NSAxIDF2NHptLTMuNS0uNWgydi0zaC0ydjN6IiAvPjwvZz4KPGcgaWQ9ImxpYnJhcnktYWRkIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMSA5aC00djRoLTJ2LTRIOVY5aDRWNWgydjRoNHYyeiIgLz48L2c+CjxnIGlkPSJsaWJyYXJ5LWJvb2tzIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMSA5SDlWOWgxMHYyem0tNCA0SDl2LTJoNnYyem00LThIOVY1aDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImxpYnJhcnktbXVzaWMiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTIgNWgtM3Y1LjVjMCAxLjM4LTEuMTIgMi41LTIuNSAyLjVTMTAgMTMuODggMTAgMTIuNXMxLjEyLTIuNSAyLjUtMi41Yy41NyAwIDEuMDguMTkgMS41LjUxVjVoNHYyek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnoiIC8+PC9nPgo8ZyBpZD0ibG9vcCI+PHBhdGggZD0iTTEyIDRWMUw4IDVsNCA0VjZjMy4zMSAwIDYgMi42OSA2IDYgMCAxLjAxLS4yNSAxLjk3LS43IDIuOGwxLjQ2IDEuNDZDMTkuNTQgMTUuMDMgMjAgMTMuNTcgMjAgMTJjMC00LjQyLTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02IDAtMS4wMS4yNS0xLjk3LjctMi44TDUuMjQgNy43NEM0LjQ2IDguOTcgNCAxMC40MyA0IDEyYzAgNC40MiAzLjU4IDggOCA4djNsNC00LTQtNHYzeiIgLz48L2c+CjxnIGlkPSJtaWMiPjxwYXRoIGQ9Ik0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6IiAvPjwvZz4KPGcgaWQ9Im1pYy1ub25lIj48cGF0aCBkPSJNMTIgMTRjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNWMwLTEuNjYtMS4zNC0zLTMtM1M5IDMuMzQgOSA1djZjMCAxLjY2IDEuMzQgMyAzIDN6bS0xLjItOS4xYzAtLjY2LjU0LTEuMiAxLjItMS4yLjY2IDAgMS4yLjU0IDEuMiAxLjJsLS4wMSA2LjJjMCAuNjYtLjUzIDEuMi0xLjE5IDEuMi0uNjYgMC0xLjItLjU0LTEuMi0xLjJWNC45em02LjUgNi4xYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNCA2LjcgMTFINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMWgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43eiIgLz48L2c+CjxnIGlkPSJtaWMtb2ZmIj48cGF0aCBkPSJNMTkgMTFoLTEuN2MwIC43NC0uMTYgMS40My0uNDMgMi4wNWwxLjIzIDEuMjNjLjU2LS45OC45LTIuMDkuOS0zLjI4em0tNC4wMi4xN2MwLS4wNi4wMi0uMTEuMDItLjE3VjVjMC0xLjY2LTEuMzQtMy0zLTNTOSAzLjM0IDkgNXYuMThsNS45OCA1Ljk5ek00LjI3IDNMMyA0LjI3bDYuMDEgNi4wMVYxMWMwIDEuNjYgMS4zMyAzIDIuOTkgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjY2IDEuNjZjLS43MS4zMy0xLjUuNTItMi4zMS41Mi0yLjc2IDAtNS4zLTIuMS01LjMtNS4xSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjFoMnYtMy4yOGMuOTEtLjEzIDEuNzctLjQ1IDIuNTQtLjlMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzeiIgLz48L2c+CjxnIGlkPSJtb3ZpZSI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiIC8+PC9nPgo8ZyBpZD0ibXVzaWMtdmlkZW8iPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkgzVjVoMTh2MTR6TTggMTVjMC0xLjY2IDEuMzQtMyAzLTMgLjM1IDAgLjY5LjA3IDEgLjE4VjZoNXYyaC0zdjcuMDNjLS4wMiAxLjY0LTEuMzUgMi45Ny0zIDIuOTctMS42NiAwLTMtMS4zNC0zLTN6IiAvPjwvZz4KPGcgaWQ9Im5ldy1yZWxlYXNlcyI+PHBhdGggZD0iTTIzIDEybC0yLjQ0LTIuNzguMzQtMy42OC0zLjYxLS44Mi0xLjg5LTMuMThMMTIgMyA4LjYgMS41NCA2LjcxIDQuNzJsLTMuNjEuODEuMzQgMy42OEwxIDEybDIuNDQgMi43OC0uMzQgMy42OSAzLjYxLjgyIDEuODkgMy4xOEwxMiAyMWwzLjQgMS40NiAxLjg5LTMuMTggMy42MS0uODItLjM0LTMuNjhMMjMgMTJ6bS0xMCA1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIgLz48L2c+CjxnIGlkPSJub3QtaW50ZXJlc3RlZCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04IDAtMS44NS42My0zLjU1IDEuNjktNC45TDE2LjkgMTguMzFDMTUuNTUgMTkuMzcgMTMuODUgMjAgMTIgMjB6bTYuMzEtMy4xTDcuMSA1LjY5QzguNDUgNC42MyAxMC4xNSA0IDEyIDRjNC40MiAwIDggMy41OCA4IDggMCAxLjg1LS42MyAzLjU1LTEuNjkgNC45eiIgLz48L2c+CjxnIGlkPSJub3RlIj48cGF0aCBkPSJNMjIgMTBsLTYtNkg0Yy0xLjEgMC0yIC45LTIgMnYxMi4wMWMwIDEuMS45IDEuOTkgMiAxLjk5bDE2LS4wMWMxLjEgMCAyLS44OSAyLTEuOTl2LTh6bS03LTQuNWw1LjUgNS41SDE1VjUuNXoiIC8+PC9nPgo8ZyBpZD0icGF1c2UiPjxwYXRoIGQ9Ik02IDE5aDRWNUg2djE0em04LTE0djE0aDRWNWgtNHoiIC8+PC9nPgo8ZyBpZD0icGF1c2UtY2lyY2xlLWZpbGxlZCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiIC8+PC9nPgo8ZyBpZD0icGF1c2UtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik05IDE2aDJWOEg5djh6bTMtMTRDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0xLTRoMlY4aC0ydjh6IiAvPjwvZz4KPGcgaWQ9InBsYXktYXJyb3ciPjxwYXRoIGQ9Ik04IDV2MTRsMTEtN3oiIC8+PC9nPgo8ZyBpZD0icGxheS1jaXJjbGUtZmlsbGVkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTQuNXYtOWw2IDQuNS02IDQuNXoiIC8+PC9nPgo8ZyBpZD0icGxheS1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEwIDE2LjVsNi00LjUtNi00LjV2OXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6IiAvPjwvZz4KPGcgaWQ9InBsYXlsaXN0LWFkZCI+PHBhdGggZD0iTTE0IDEwSDJ2MmgxMnYtMnptMC00SDJ2MmgxMlY2em00IDh2LTRoLTJ2NGgtNHYyaDR2NGgydi00aDR2LTJoLTR6TTIgMTZoOHYtMkgydjJ6IiAvPjwvZz4KPGcgaWQ9InBsYXlsaXN0LWFkZC1jaGVjayI+PHBhdGggZD0iTTE0IDEwSDJ2MmgxMnYtMnptMC00SDJ2MmgxMlY2ek0yIDE2aDh2LTJIMnYyem0xOS41LTQuNUwyMyAxM2wtNi45OSA3LTQuNTEtNC41TDEzIDE0bDMuMDEgMyA1LjQ5LTUuNXoiIC8+PC9nPgo8ZyBpZD0icGxheWxpc3QtcGxheSI+PHBhdGggZD0iTTE5IDlIMnYyaDE3Vjl6bTAtNEgydjJoMTdWNXpNMiAxNWgxM3YtMkgydjJ6bTE1LTJ2Nmw1LTMtNS0zeiIgLz48L2c+CjxnIGlkPSJxdWV1ZSI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiIC8+PC9nPgo8ZyBpZD0icXVldWUtbXVzaWMiPjxwYXRoIGQ9Ik0xNSA2SDN2MmgxMlY2em0wIDRIM3YyaDEydi0yek0zIDE2aDh2LTJIM3Yyek0xNyA2djguMThjLS4zMS0uMTEtLjY1LS4xOC0xLS4xOC0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTNWOGgzVjZoLTV6IiAvPjwvZz4KPGcgaWQ9InF1ZXVlLXBsYXktbmV4dCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg1djJoOHYtMmgydi0ySDNWNWgxOHY4aDJWNWMwLTEuMTEtLjktMi0yLTJ6bS04IDdWN2gtMnYzSDh2MmgzdjNoMnYtM2gzdi0yaC0zem0xMSA4bC00LjUgNC41TDE4IDIxbDMtMy0zLTMgMS41LTEuNUwyNCAxOHoiIC8+PC9nPgo8ZyBpZD0icmFkaW8iPjxwYXRoIGQ9Ik0zLjI0IDYuMTVDMi41MSA2LjQzIDIgNy4xNyAyIDh2MTJjMCAxLjEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjkgMi0yVjhjMC0xLjExLS44OS0yLTItMkg4LjNsOC4yNi0zLjM0TDE1Ljg4IDEgMy4yNCA2LjE1ek03IDIwYy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMTMtOGgtMnYtMmgtMnYySDRWOGgxNnY0eiIgLz48L2c+CjxnIGlkPSJyZWNlbnQtYWN0b3JzIj48cGF0aCBkPSJNMjEgNXYxNGgyVjVoLTJ6bS00IDE0aDJWNWgtMnYxNHpNMTQgNUgyYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xek04IDcuNzVjMS4yNCAwIDIuMjUgMS4wMSAyLjI1IDIuMjVTOS4yNCAxMi4yNSA4IDEyLjI1IDUuNzUgMTEuMjQgNS43NSAxMCA2Ljc2IDcuNzUgOCA3Ljc1ek0xMi41IDE3aC05di0uNzVjMC0xLjUgMy0yLjI1IDQuNS0yLjI1czQuNS43NSA0LjUgMi4yNVYxN3oiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLWZyb20tcXVldWUiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMTEgMC0yIC44OS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNXYyaDh2LTJoNWMxLjEgMCAxLjk5LS45IDEuOTktMkwyMyA1YzAtMS4xMS0uOS0yLTItMnptMCAxNEgzVjVoMTh2MTJ6bS01LTd2Mkg4di0yaDh6IiAvPjwvZz4KPGcgaWQ9InJlcGVhdCI+PHBhdGggZD0iTTcgN2gxMHYzbDQtNC00LTR2M0g1djZoMlY3em0xMCAxMEg3di0zbC00IDQgNCA0di0zaDEydi02aC0ydjR6IiAvPjwvZz4KPGcgaWQ9InJlcGVhdC1vbmUiPjxwYXRoIGQ9Ik03IDdoMTB2M2w0LTQtNC00djNINXY2aDJWN3ptMTAgMTBIN3YtM2wtNCA0IDQgNHYtM2gxMnYtNmgtMnY0em0tNC0yVjloLTFsLTIgMXYxaDEuNXY0SDEzeiIgLz48L2c+CjxnIGlkPSJyZXBsYXkiPjxwYXRoIGQ9Ik0xMiA1VjFMNyA2bDUgNVY3YzMuMzEgMCA2IDIuNjkgNiA2cy0yLjY5IDYtNiA2LTYtMi42OS02LTZINGMwIDQuNDIgMy41OCA4IDggOHM4LTMuNTggOC04LTMuNTgtOC04LTh6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS0xMCI+PHBhdGggZD0iTTEyIDVWMUw3IDZsNSA1VjdjMy4zIDAgNiAyLjcgNiA2cy0yLjcgNi02IDYtNi0yLjctNi02SDRjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOC0zLjYtOC04LTh6bS0xLjEgMTFIMTB2LTMuM0w5IDEzdi0uN2wxLjgtLjZoLjFWMTZ6bTQuMy0xLjhjMCAuMyAwIC42LS4xLjhsLS4zLjZzLS4zLjMtLjUuMy0uNC4xLS42LjEtLjQgMC0uNi0uMS0uMy0uMi0uNS0uMy0uMi0uMy0uMy0uNi0uMS0uNS0uMS0uOHYtLjdjMC0uMyAwLS42LjEtLjhsLjMtLjZzLjMtLjMuNS0uMy40LS4xLjYtLjEuNCAwIC42LjFjLjIuMS4zLjIuNS4zcy4yLjMuMy42LjEuNS4xLjh2Ljd6bS0uOS0uOHYtLjVzLS4xLS4yLS4xLS4zLS4xLS4xLS4yLS4yLS4yLS4xLS4zLS4xLS4yIDAtLjMuMWwtLjIuMnMtLjEuMi0uMS4zdjJzLjEuMi4xLjMuMS4xLjIuMi4yLjEuMy4xLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0xLjV6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS0zMCI+PHBhdGggZD0iTTEyIDVWMUw3IDZsNSA1VjdjMy4zIDAgNiAyLjcgNiA2cy0yLjcgNi02IDYtNi0yLjctNi02SDRjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOC0zLjYtOC04LTh6bS0yLjQgOC41aC40Yy4yIDAgLjQtLjEuNS0uMnMuMi0uMi4yLS40di0uMnMtLjEtLjEtLjEtLjItLjEtLjEtLjItLjFoLS41cy0uMS4xLS4yLjEtLjEuMS0uMS4ydi4yaC0xYzAtLjIgMC0uMy4xLS41cy4yLS4zLjMtLjQuMy0uMi40LS4yLjQtLjEuNS0uMWMuMiAwIC40IDAgLjYuMXMuMy4xLjUuMi4yLjIuMy40LjEuMy4xLjV2LjNzLS4xLjItLjEuMy0uMS4yLS4yLjItLjIuMS0uMy4yYy4yLjEuNC4yLjUuNHMuMi40LjIuNmMwIC4yIDAgLjQtLjEuNXMtLjIuMy0uMy40LS4zLjItLjUuMi0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjQtLjEtLjZoLjh2LjJzLjEuMS4xLjIuMS4xLjIuMWguNXMuMS0uMS4yLS4xLjEtLjEuMS0uMnYtLjVzLS4xLS4xLS4xLS4yLS4xLS4xLS4yLS4xaC0uNnYtLjd6bTUuNy43YzAgLjMgMCAuNi0uMS44bC0uMy42cy0uMy4zLS41LjMtLjQuMS0uNi4xLS40IDAtLjYtLjEtLjMtLjItLjUtLjMtLjItLjMtLjMtLjYtLjEtLjUtLjEtLjh2LS43YzAtLjMgMC0uNi4xLS44bC4zLS42cy4zLS4zLjUtLjMuNC0uMS42LS4xLjQgMCAuNi4xLjMuMi41LjMuMi4zLjMuNi4xLjUuMS44di43em0tLjgtLjh2LS41YzAtLjEtLjEtLjItLjEtLjNzLS4xLS4xLS4yLS4yLS4yLS4xLS4zLS4xLS4yIDAtLjMuMWwtLjIuMnMtLjEuMi0uMS4zdjJzLjEuMi4xLjMuMS4xLjIuMi4yLjEuMy4xLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0xLjV6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS01Ij48cGF0aCBkPSJNMTIgNVYxTDcgNmw1IDVWN2MzLjMgMCA2IDIuNyA2IDZzLTIuNyA2LTYgNi02LTIuNy02LTZINGMwIDQuNCAzLjYgOCA4IDhzOC0zLjYgOC04LTMuNi04LTgtOHptLTEuMyA4LjlsLjItMi4yaDIuNHYuN2gtMS43bC0uMS45cy4xIDAgLjEtLjEuMSAwIC4xLS4xLjEgMCAuMiAwaC4yYy4yIDAgLjQgMCAuNS4xcy4zLjIuNC4zLjIuMy4zLjUuMS40LjEuNmMwIC4yIDAgLjQtLjEuNXMtLjEuMy0uMy41LS4zLjItLjQuMy0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjMtLjEtLjVoLjhjMCAuMi4xLjMuMi40cy4yLjEuNC4xYy4xIDAgLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0uNmwtLjEtLjItLjItLjJzLS4yLS4xLS4zLS4xaC0uMnMtLjEgMC0uMi4xLS4xIDAtLjEuMS0uMS4xLS4xLjFoLS43eiIgLz48L2c+CjxnIGlkPSJzaHVmZmxlIj48cGF0aCBkPSJNMTAuNTkgOS4xN0w1LjQxIDQgNCA1LjQxbDUuMTcgNS4xNyAxLjQyLTEuNDF6TTE0LjUgNGwyLjA0IDIuMDRMNCAxOC41OSA1LjQxIDIwIDE3Ljk2IDcuNDYgMjAgOS41VjRoLTUuNXptLjMzIDkuNDFsLTEuNDEgMS40MSAzLjEzIDMuMTNMMTQuNSAyMEgyMHYtNS41bC0yLjA0IDIuMDQtMy4xMy0zLjEzeiIgLz48L2c+CjxnIGlkPSJza2lwLW5leHQiPjxwYXRoIGQ9Ik02IDE4bDguNS02TDYgNnYxMnpNMTYgNnYxMmgyVjZoLTJ6IiAvPjwvZz4KPGcgaWQ9InNraXAtcHJldmlvdXMiPjxwYXRoIGQ9Ik02IDZoMnYxMkg2em0zLjUgNmw4LjUgNlY2eiIgLz48L2c+CjxnIGlkPSJzbG93LW1vdGlvbi12aWRlbyI+PHBhdGggZD0iTTEzLjA1IDkuNzlMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyem0wIDBMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyem0wIDBMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyek0xMSA0LjA3VjIuMDVjLTIuMDEuMi0zLjg0IDEtNS4zMiAyLjIxTDcuMSA1LjY5YzEuMTEtLjg2IDIuNDQtMS40NCAzLjktMS42MnpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6bTEuNjEgNi43NEM3LjE2IDIwLjk1IDkgMjEuNzUgMTEgMjEuOTV2LTIuMDJjLTEuNDYtLjE4LTIuNzktLjc2LTMuOS0xLjYybC0xLjQyIDEuNDN6TTIyIDEyYzAgNS4xNi0zLjkyIDkuNDItOC45NSA5Ljk1di0yLjAyQzE2Ljk3IDE5LjQxIDIwIDE2LjA1IDIwIDEycy0zLjAzLTcuNDEtNi45NS03LjkzVjIuMDVDMTguMDggMi41OCAyMiA2Ljg0IDIyIDEyeiIgLz48L2c+CjxnIGlkPSJzbm9vemUiPjxwYXRoIGQ9Ik03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptLTMtOWgzLjYzTDkgMTUuMlYxN2g2di0yaC0zLjYzTDE1IDEwLjhWOUg5djJ6IiAvPjwvZz4KPGcgaWQ9InNvcnQtYnktYWxwaGEiPjxwYXRoIGQ9Ik0xNC45NCA0LjY2aC00LjcybDIuMzYtMi4zNnptLTQuNjkgMTQuNzFoNC42NmwtMi4zMyAyLjMzek02LjEgNi4yN0wxLjYgMTcuNzNoMS44NGwuOTItMi40NWg1LjExbC45MiAyLjQ1aDEuODRMNy43NCA2LjI3SDYuMXptLTEuMTMgNy4zN2wxLjk0LTUuMTggMS45NCA1LjE4SDQuOTd6bTEwLjc2IDIuNWg2LjEydjEuNTloLTguNTN2LTEuMjlsNS45Mi04LjU2aC01Ljg4di0xLjZoOC4zdjEuMjZsLTUuOTMgOC42eiIgLz48L2c+CjxnIGlkPSJzdG9wIj48cGF0aCBkPSJNNiA2aDEydjEySDZ6IiAvPjwvZz4KPGcgaWQ9InN1YnNjcmlwdGlvbnMiPjxwYXRoIGQ9Ik0yMCA4SDRWNmgxNnYyem0tMi02SDZ2MmgxMlYyem00IDEwdjhjMCAxLjEtLjkgMi0yIDJINGMtMS4xIDAtMi0uOS0yLTJ2LThjMC0xLjEuOS0yIDItMmgxNmMxLjEgMCAyIC45IDIgMnptLTYgNGwtNi0zLjI3djYuNTNMMTYgMTZ6IiAvPjwvZz4KPGcgaWQ9InN1YnRpdGxlcyI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yek00IDEyaDR2Mkg0di0yem0xMCA2SDR2LTJoMTB2MnptNiAwaC00di0yaDR2MnptMC00SDEwdi0yaDEwdjJ6IiAvPjwvZz4KPGcgaWQ9InN1cnJvdW5kLXNvdW5kIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6TTcuNzYgMTYuMjRsLTEuNDEgMS40MUM0Ljc4IDE2LjEgNCAxNC4wNSA0IDEyYzAtMi4wNS43OC00LjEgMi4zNC01LjY2bDEuNDEgMS40MUM2LjU5IDguOTMgNiAxMC40NiA2IDEycy41OSAzLjA3IDEuNzYgNC4yNHpNMTIgMTZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0em01LjY2IDEuNjZsLTEuNDEtMS40MUMxNy40MSAxNS4wNyAxOCAxMy41NCAxOCAxMnMtLjU5LTMuMDctMS43Ni00LjI0bDEuNDEtMS40MUMxOS4yMiA3LjkgMjAgOS45NSAyMCAxMmMwIDIuMDUtLjc4IDQuMS0yLjM0IDUuNjZ6TTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0idmlkZW8tY2FsbCI+PHBhdGggZD0iTTE3IDEwLjVWN2MwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTFsLTQgNHpNMTQgMTNoLTN2M0g5di0zSDZ2LTJoM1Y4aDJ2M2gzdjJ6IiAvPjwvZz4KPGcgaWQ9InZpZGVvLWxhYmVsIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTNIM1Y1aDE4djExeiIgLz48L2c+CjxnIGlkPSJ2aWRlby1saWJyYXJ5Ij48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tOCAxMi41di05bDYgNC41LTYgNC41eiIgLz48L2c+CjxnIGlkPSJ2aWRlb2NhbSI+PHBhdGggZD0iTTE3IDEwLjVWN2MwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTFsLTQgNHoiIC8+PC9nPgo8ZyBpZD0idmlkZW9jYW0tb2ZmIj48cGF0aCBkPSJNMjEgNi41bC00IDRWN2MwLS41NS0uNDUtMS0xLTFIOS44MkwyMSAxNy4xOFY2LjV6TTMuMjcgMkwyIDMuMjcgNC43MyA2SDRjLS41NSAwLTEgLjQ1LTEgMXYxMGMwIC41NS40NSAxIDEgMWgxMmMuMjEgMCAuMzktLjA4LjU0LS4xOEwxOS43MyAyMSAyMSAxOS43MyAzLjI3IDJ6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1kb3duIj48cGF0aCBkPSJNMTguNSAxMmMwLTEuNzctMS4wMi0zLjI5LTIuNS00LjAzdjguMDVjMS40OC0uNzMgMi41LTIuMjUgMi41LTQuMDJ6TTUgOXY2aDRsNSA1VjRMOSA5SDV6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1tdXRlIj48cGF0aCBkPSJNNyA5djZoNGw1IDVWNGwtNSA1SDd6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1vZmYiPjxwYXRoIGQ9Ik0xNi41IDEyYzAtMS43Ny0xLjAyLTMuMjktMi41LTQuMDN2Mi4yMWwyLjQ1IDIuNDVjLjAzLS4yLjA1LS40MS4wNS0uNjN6bTIuNSAwYzAgLjk0LS4yIDEuODItLjU0IDIuNjRsMS41MSAxLjUxQzIwLjYzIDE0LjkxIDIxIDEzLjUgMjEgMTJjMC00LjI4LTIuOTktNy44Ni03LTguNzd2Mi4wNmMyLjg5Ljg2IDUgMy41NCA1IDYuNzF6TTQuMjcgM0wzIDQuMjcgNy43MyA5SDN2Nmg0bDUgNXYtNi43M2w0LjI1IDQuMjVjLS42Ny41Mi0xLjQyLjkzLTIuMjUgMS4xOHYyLjA2YzEuMzgtLjMxIDIuNjMtLjk1IDMuNjktMS44MUwxOS43MyAyMSAyMSAxOS43M2wtOS05TDQuMjcgM3pNMTIgNEw5LjkxIDYuMDkgMTIgOC4xOFY0eiIgLz48L2c+CjxnIGlkPSJ2b2x1bWUtdXAiPjxwYXRoIGQ9Ik0zIDl2Nmg0bDUgNVY0TDcgOUgzem0xMy41IDNjMC0xLjc3LTEuMDItMy4yOS0yLjUtNC4wM3Y4LjA1YzEuNDgtLjczIDIuNS0yLjI1IDIuNS00LjAyek0xNCAzLjIzdjIuMDZjMi44OS44NiA1IDMuNTQgNSA2Ljcxcy0yLjExIDUuODUtNSA2LjcxdjIuMDZjNC4wMS0uOTEgNy00LjQ5IDctOC43N3MtMi45OS03Ljg2LTctOC43N3oiIC8+PC9nPgo8ZyBpZD0id2ViIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIgLz48L2c+CjxnIGlkPSJ3ZWItYXNzZXQiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS44OS0yLTItMnptMCAxNEg1VjhoMTR2MTB6IiAvPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCjxpcm9uLWljb25zZXQtc3ZnIG5hbWU9ImNvbW11bmljYXRpb24iIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImJ1c2luZXNzIj48cGF0aCBkPSJNMTIgN1YzSDJ2MThoMjBWN0gxMnpNNiAxOUg0di0yaDJ2MnptMC00SDR2LTJoMnYyem0wLTRINFY5aDJ2MnptMC00SDRWNWgydjJ6bTQgMTJIOHYtMmgydjJ6bTAtNEg4di0yaDJ2MnptMC00SDhWOWgydjJ6bTAtNEg4VjVoMnYyem0xMCAxMmgtOHYtMmgydi0yaC0ydi0yaDJ2LTJoLTJWOWg4djEwem0tMi04aC0ydjJoMnYtMnptMCA0aC0ydjJoMnYtMnoiIC8+PC9nPgo8ZyBpZD0iY2FsbCI+PHBhdGggZD0iTTYuNjIgMTAuNzljMS40NCAyLjgzIDMuNzYgNS4xNCA2LjU5IDYuNTlsMi4yLTIuMmMuMjctLjI3LjY3LS4zNiAxLjAyLS4yNCAxLjEyLjM3IDIuMzMuNTcgMy41Ny41Ny41NSAwIDEgLjQ1IDEgMVYyMGMwIC41NS0uNDUgMS0xIDEtOS4zOSAwLTE3LTcuNjEtMTctMTcgMC0uNTUuNDUtMSAxLTFoMy41Yy41NSAwIDEgLjQ1IDEgMSAwIDEuMjUuMiAyLjQ1LjU3IDMuNTcuMTEuMzUuMDMuNzQtLjI1IDEuMDJsLTIuMiAyLjJ6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtZW5kIj48cGF0aCBkPSJNMTIgOWMtMS42IDAtMy4xNS4yNS00LjYuNzJ2My4xYzAgLjM5LS4yMy43NC0uNTYuOS0uOTguNDktMS44NyAxLjEyLTIuNjYgMS44NS0uMTguMTgtLjQzLjI4LS43LjI4LS4yOCAwLS41My0uMTEtLjcxLS4yOUwuMjkgMTMuMDhjLS4xOC0uMTctLjI5LS40Mi0uMjktLjcgMC0uMjguMTEtLjUzLjI5LS43MUMzLjM0IDguNzggNy40NiA3IDEyIDdzOC42NiAxLjc4IDExLjcxIDQuNjdjLjE4LjE4LjI5LjQzLjI5LjcxIDAgLjI4LS4xMS41My0uMjkuNzFsLTIuNDggMi40OGMtLjE4LjE4LS40My4yOS0uNzEuMjktLjI3IDAtLjUyLS4xMS0uNy0uMjgtLjc5LS43NC0xLjY5LTEuMzYtMi42Ny0xLjg1LS4zMy0uMTYtLjU2LS41LS41Ni0uOXYtMy4xQzE1LjE1IDkuMjUgMTMuNiA5IDEyIDl6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtbWFkZSI+PHBhdGggZD0iTTkgNXYyaDYuNTlMNCAxOC41OSA1LjQxIDIwIDE3IDguNDFWMTVoMlY1eiIgLz48L2c+CjxnIGlkPSJjYWxsLW1lcmdlIj48cGF0aCBkPSJNMTcgMjAuNDFMMTguNDEgMTkgMTUgMTUuNTkgMTMuNTkgMTcgMTcgMjAuNDF6TTcuNSA4SDExdjUuNTlMNS41OSAxOSA3IDIwLjQxbDYtNlY4aDMuNUwxMiAzLjUgNy41IDh6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtbWlzc2VkIj48cGF0aCBkPSJNMTkuNTkgN0wxMiAxNC41OSA2LjQxIDlIMTFWN0gzdjhoMnYtNC41OWw3IDcgOS05eiIgLz48L2c+CjxnIGlkPSJjYWxsLW1pc3NlZC1vdXRnb2luZyI+PHBhdGggZD0iTTMgOC40MWw5IDkgNy03VjE1aDJWN2gtOHYyaDQuNTlMMTIgMTQuNTkgNC40MSA3IDMgOC40MXoiIC8+PC9nPgo8ZyBpZD0iY2FsbC1yZWNlaXZlZCI+PHBhdGggZD0iTTIwIDUuNDFMMTguNTkgNCA3IDE1LjU5VjlINXYxMGgxMHYtMkg4LjQxeiIgLz48L2c+CjxnIGlkPSJjYWxsLXNwbGl0Ij48cGF0aCBkPSJNMTQgNGwyLjI5IDIuMjktMi44OCAyLjg4IDEuNDIgMS40MiAyLjg4LTIuODhMMjAgMTBWNHptLTQgMEg0djZsMi4yOS0yLjI5IDQuNzEgNC43VjIwaDJ2LTguNDFsLTUuMjktNS4zeiIgLz48L2c+CjxnIGlkPSJjaGF0Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgOWgxMnYySDZWOXptOCA1SDZ2LTJoOHYyem00LTZINlY2aDEydjJ6IiAvPjwvZz4KPGcgaWQ9ImNoYXQtYnViYmxlIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxOGw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iY2hhdC1idWJibGUtb3V0bGluZSI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MThsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTRINmwtMiAyVjRoMTZ2MTJ6IiAvPjwvZz4KPGcgaWQ9ImNsZWFyLWFsbCI+PHBhdGggZD0iTTUgMTNoMTR2LTJINXYyem0tMiA0aDE0di0ySDN2MnpNNyA3djJoMTRWN0g3eiIgLz48L2c+CjxnIGlkPSJjb21tZW50Ij48cGF0aCBkPSJNMjEuOTkgNGMwLTEuMS0uODktMi0xLjk5LTJINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNGw0IDQtLjAxLTE4ek0xOCAxNEg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJjb250YWN0LW1haWwiPjxwYXRoIGQ9Ik0yMSA4VjdsLTMgMi0zLTJ2MWwzIDIgMy0yem0xLTVIMkMuOSAzIDAgMy45IDAgNXYxNGMwIDEuMS45IDIgMiAyaDIwYzEuMSAwIDEuOTktLjkgMS45OS0yTDI0IDVjMC0xLjEtLjktMi0yLTJ6TTggNmMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJIMnYtMWMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MXptOC02aC04VjZoOHY2eiIgLz48L2c+CjxnIGlkPSJjb250YWN0LXBob25lIj48cGF0aCBkPSJNMjIgM0gyQy45IDMgMCAzLjkgMCA1djE0YzAgMS4xLjkgMiAyIDJoMjBjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjQgNWMwLTEuMS0uOS0yLTItMnpNOCA2YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkgydi0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxem0zLjg1LTRoMS42NEwyMSAxNmwtMS45OSAxLjk5Yy0xLjMxLS45OC0yLjI4LTIuMzgtMi43My0zLjk5LS4xOC0uNjQtLjI4LTEuMzEtLjI4LTJzLjEtMS4zNi4yOC0yYy40NS0xLjYyIDEuNDItMy4wMSAyLjczLTMuOTlMMjEgOGwtMS41MSAyaC0xLjY0Yy0uMjIuNjMtLjM1IDEuMy0uMzUgMnMuMTMgMS4zNy4zNSAyeiIgLz48L2c+CjxnIGlkPSJjb250YWN0cyI+PHBhdGggZD0iTTIwIDBINHYyaDE2VjB6TTQgMjRoMTZ2LTJINHYyek0yMCA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTggMi43NWMxLjI0IDAgMi4yNSAxLjAxIDIuMjUgMi4yNXMtMS4wMSAyLjI1LTIuMjUgMi4yNVM5Ljc1IDEwLjI0IDkuNzUgOSAxMC43NiA2Ljc1IDEyIDYuNzV6TTE3IDE3SDd2LTEuNWMwLTEuNjcgMy4zMy0yLjUgNS0yLjVzNSAuODMgNSAyLjVWMTd6IiAvPjwvZz4KPGcgaWQ9ImRpYWxlci1zaXAiPjxwYXRoIGQ9Ik0xNyAzaC0xdjVoMVYzem0tMiAyaC0yVjRoMlYzaC0zdjNoMnYxaC0ydjFoM1Y1em0zLTJ2NWgxVjZoMlYzaC0zem0yIDJoLTFWNGgxdjF6bTAgMTAuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDEuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU5bDIuMi0yLjIxYy4yNy0uMjYuMzUtLjY1LjI0LTFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9ImRpYWxwYWQiPjxwYXRoIGQ9Ik0xMiAxOWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6TTYgMWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyLThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0tNiA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMC02Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTYgMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAtNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9ImVtYWlsIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6IiAvPjwvZz4KPGcgaWQ9ImZvcnVtIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6IiAvPjwvZz4KPGcgaWQ9ImltcG9ydC1jb250YWN0cyI+PHBhdGggZD0iTTIxIDVjLTEuMTEtLjM1LTIuMzMtLjUtMy41LS41LTEuOTUgMC00LjA1LjQtNS41IDEuNS0xLjQ1LTEuMS0zLjU1LTEuNS01LjUtMS41UzIuNDUgNC45IDEgNnYxNC42NWMwIC4yNS4yNS41LjUuNS4xIDAgLjE1LS4wNS4yNS0uMDVDMy4xIDIwLjQ1IDUuMDUgMjAgNi41IDIwYzEuOTUgMCA0LjA1LjQgNS41IDEuNSAxLjM1LS44NSAzLjgtMS41IDUuNS0xLjUgMS42NSAwIDMuMzUuMyA0Ljc1IDEuMDUuMS4wNS4xNS4wNS4yNS4wNS4yNSAwIC41LS4yNS41LS41VjZjLS42LS40NS0xLjI1LS43NS0yLTF6bTAgMTMuNWMtMS4xLS4zNS0yLjMtLjUtMy41LS41LTEuNyAwLTQuMTUuNjUtNS41IDEuNVY4YzEuMzUtLjg1IDMuOC0xLjUgNS41LTEuNSAxLjIgMCAyLjQuMTUgMy41LjV2MTEuNXoiIC8+PC9nPgo8ZyBpZD0iaW1wb3J0LWV4cG9ydCI+PHBhdGggZD0iTTkgM0w1IDYuOTloM1YxNGgyVjYuOTloM0w5IDN6bTcgMTQuMDFWMTBoLTJ2Ny4wMWgtM0wxNSAyMWw0LTMuOTloLTN6IiAvPjwvZz4KPGcgaWQ9ImludmVydC1jb2xvcnMtb2ZmIj48cGF0aCBkPSJNMjAuNjUgMjAuODdsLTIuMzUtMi4zNS02LjMtNi4yOS0zLjU2LTMuNTctMS40Mi0xLjQxTDQuMjcgNC41IDMgNS43N2wyLjc4IDIuNzhjLTIuNTUgMy4xNC0yLjM2IDcuNzYuNTYgMTAuNjlDNy45IDIwLjggOS45NSAyMS41OCAxMiAyMS41OGMxLjc5IDAgMy41Ny0uNTkgNS4wMy0xLjc4bDIuNyAyLjdMMjEgMjEuMjNsLS4zNS0uMzZ6TTEyIDE5LjU5Yy0xLjYgMC0zLjExLS42Mi00LjI0LTEuNzZDNi42MiAxNi42OSA2IDE1LjE5IDYgMTMuNTljMC0xLjMyLjQzLTIuNTcgMS4yMS0zLjZMMTIgMTQuNzd2NC44MnpNMTIgNS4xdjQuNThsNy4yNSA3LjI2YzEuMzctMi45Ni44NC02LjU3LTEuNi05LjAxTDEyIDIuMjdsLTMuNyAzLjcgMS40MSAxLjQxTDEyIDUuMXoiIC8+PC9nPgo8ZyBpZD0ibGl2ZS1oZWxwIj48cGF0aCBkPSJNMTkgMkg1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTYgMTZoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDExLjkgMTMgMTIuNSAxMyAxNGgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiIgLz48L2c+CjxnIGlkPSJsb2NhdGlvbi1vZmYiPjxwYXRoIGQ9Ik0xMiA2LjVjMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjUgMCAuNzQtLjMzIDEuMzktLjgzIDEuODVsMy42MyAzLjYzYy45OC0xLjg2IDEuNy0zLjggMS43LTUuNDggMC0zLjg3LTMuMTMtNy03LTctMS45OCAwLTMuNzYuODMtNS4wNCAyLjE1bDMuMTkgMy4xOWMuNDYtLjUyIDEuMTEtLjg0IDEuODUtLjg0em00LjM3IDkuNmwtNC42My00LjYzLS4xMS0uMTFMMy4yNyAzIDIgNC4yN2wzLjE4IDMuMThDNS4wNyA3Ljk1IDUgOC40NyA1IDljMCA1LjI1IDcgMTMgNyAxM3MxLjY3LTEuODUgMy4zOC00LjM1TDE4LjczIDIxIDIwIDE5LjczbC0zLjYzLTMuNjN6IiAvPjwvZz4KPGcgaWQ9ImxvY2F0aW9uLW9uIj48cGF0aCBkPSJNMTIgMkM4LjEzIDIgNSA1LjEzIDUgOWMwIDUuMjUgNyAxMyA3IDEzczctNy43NSA3LTEzYzAtMy44Ny0zLjEzLTctNy03em0wIDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6IiAvPjwvZz4KPGcgaWQ9Im1haWwtb3V0bGluZSI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg0VjhsOCA1IDgtNXYxMHptLTgtN0w0IDZoMTZsLTggNXoiIC8+PC9nPgo8ZyBpZD0ibWVzc2FnZSI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMiAxMkg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJuby1zaW0iPjxwYXRoIGQ9Ik0xOC45OSA1YzAtMS4xLS44OS0yLTEuOTktMmgtN0w3LjY2IDUuMzQgMTkgMTYuNjggMTguOTkgNXpNMy42NSAzLjg4TDIuMzggNS4xNSA1IDcuNzdWMTljMCAxLjEuOSAyIDIgMmgxMC4wMWMuMzUgMCAuNjctLjEuOTYtLjI2bDEuODggMS44OCAxLjI3LTEuMjdMMy42NSAzLjg4eiIgLz48L2c+CjxnIGlkPSJwaG9uZSI+PHBhdGggZD0iTTYuNjIgMTAuNzljMS40NCAyLjgzIDMuNzYgNS4xNCA2LjU5IDYuNTlsMi4yLTIuMmMuMjctLjI3LjY3LS4zNiAxLjAyLS4yNCAxLjEyLjM3IDIuMzMuNTcgMy41Ny41Ny41NSAwIDEgLjQ1IDEgMVYyMGMwIC41NS0uNDUgMS0xIDEtOS4zOSAwLTE3LTcuNjEtMTctMTcgMC0uNTUuNDUtMSAxLTFoMy41Yy41NSAwIDEgLjQ1IDEgMSAwIDEuMjUuMiAyLjQ1LjU3IDMuNTcuMTEuMzUuMDMuNzQtLjI1IDEuMDJsLTIuMiAyLjJ6IiAvPjwvZz4KPGcgaWQ9InBob25lbGluay1lcmFzZSI+PHBhdGggZD0iTTEzIDguMmwtMS0xLTQgNC00LTQtMSAxIDQgNC00IDQgMSAxIDQtNCA0IDQgMS0xLTQtNCA0LTR6TTE5IDFIOWMtMS4xIDAtMiAuOS0yIDJ2M2gyVjRoMTB2MTZIOXYtMkg3djNjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJwaG9uZWxpbmstbG9jayI+PHBhdGggZD0iTTE5IDFIOWMtMS4xIDAtMiAuOS0yIDJ2M2gyVjRoMTB2MTZIOXYtMkg3djNjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0tOC4yIDEwVjkuNUMxMC44IDguMSA5LjQgNyA4IDdTNS4yIDguMSA1LjIgOS41VjExYy0uNiAwLTEuMi42LTEuMiAxLjJ2My41YzAgLjcuNiAxLjMgMS4yIDEuM2g1LjVjLjcgMCAxLjMtLjYgMS4zLTEuMnYtMy41YzAtLjctLjYtMS4zLTEuMi0xLjN6bS0xLjMgMGgtM1Y5LjVjMC0uOC43LTEuMyAxLjUtMS4zczEuNS41IDEuNSAxLjNWMTF6IiAvPjwvZz4KPGcgaWQ9InBob25lbGluay1yaW5nIj48cGF0aCBkPSJNMjAuMSA3LjdsLTEgMWMxLjggMS44IDEuOCA0LjYgMCA2LjVsMSAxYzIuNS0yLjMgMi41LTYuMSAwLTguNXpNMTggOS44bC0xIDFjLjUuNy41IDEuNiAwIDIuM2wxIDFjMS4yLTEuMiAxLjItMyAwLTQuM3pNMTQgMUg0Yy0xLjEgMC0yIC45LTIgMnYxOGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTlINFY0aDEwdjE2eiIgLz48L2c+CjxnIGlkPSJwaG9uZWxpbmstc2V0dXAiPjxwYXRoIGQ9Ik0xMS44IDEyLjV2LTFsMS4xLS44Yy4xLS4xLjEtLjIuMS0uM2wtMS0xLjdjLS4xLS4xLS4yLS4yLS4zLS4xbC0xLjMuNGMtLjMtLjItLjYtLjQtLjktLjVsLS4yLTEuM2MwLS4xLS4xLS4yLS4zLS4ySDdjLS4xIDAtLjIuMS0uMy4ybC0uMiAxLjNjLS4zLjEtLjYuMy0uOS41bC0xLjMtLjVjLS4xIDAtLjIgMC0uMy4xbC0xIDEuN2MtLjEuMSAwIC4yLjEuM2wxLjEuOHYxbC0xLjEuOGMtLjEuMi0uMS4zLS4xLjRsMSAxLjdjLjEuMS4yLjIuMy4xbDEuNC0uNGMuMy4yLjYuNC45LjVsLjIgMS4zYy0uMS4xLjEuMi4yLjJoMmMuMSAwIC4yLS4xLjMtLjJsLjItMS4zYy4zLS4xLjYtLjMuOS0uNWwxLjMuNWMuMSAwIC4yIDAgLjMtLjFsMS0xLjdjLjEtLjEgMC0uMi0uMS0uM2wtMS4xLS45ek04IDE0Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNMTkgMUg5Yy0xLjEgMC0yIC45LTIgMnYzaDJWNGgxMHYxNkg5di0ySDd2M2MwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InBvcnRhYmxlLXdpZmktb2ZmIj48cGF0aCBkPSJNMTcuNTYgMTQuMjRjLjI4LS42OS40NC0xLjQ1LjQ0LTIuMjQgMC0zLjMxLTIuNjktNi02LTYtLjc5IDAtMS41NS4xNi0yLjI0LjQ0bDEuNjIgMS42MmMuMi0uMDMuNDEtLjA2LjYyLS4wNiAyLjIxIDAgNCAxLjc5IDQgNCAwIC4yMS0uMDIuNDItLjA1LjYzbDEuNjEgMS42MXpNMTIgNGM0LjQyIDAgOCAzLjU4IDggOCAwIDEuMzUtLjM1IDIuNjItLjk1IDMuNzRsMS40NyAxLjQ3QzIxLjQ2IDE1LjY5IDIyIDEzLjkxIDIyIDEyYzAtNS41Mi00LjQ4LTEwLTEwLTEwLTEuOTEgMC0zLjY5LjU1LTUuMjEgMS40N2wxLjQ2IDEuNDZDOS4zNyA0LjM0IDEwLjY1IDQgMTIgNHpNMy4yNyAyLjVMMiAzLjc3bDIuMSAyLjFDMi43OSA3LjU3IDIgOS42OSAyIDEyYzAgMy43IDIuMDEgNi45MiA0Ljk5IDguNjVsMS0xLjczQzUuNjEgMTcuNTMgNCAxNC45NiA0IDEyYzAtMS43Ni41Ny0zLjM4IDEuNTMtNC42OWwxLjQzIDEuNDRDNi4zNiA5LjY4IDYgMTAuOCA2IDEyYzAgMi4yMiAxLjIxIDQuMTUgMyA1LjE5bDEtMS43NGMtMS4xOS0uNy0yLTEuOTctMi0zLjQ1IDAtLjY1LjE3LTEuMjUuNDQtMS43OWwxLjU4IDEuNThMMTAgMTJjMCAxLjEuOSAyIDIgMmwuMjEtLjAyLjAxLjAxIDcuNTEgNy41MUwyMSAyMC4yMyA0LjI3IDMuNWwtMS0xeiIgLz48L2c+CjxnIGlkPSJwcmVzZW50LXRvLWFsbCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxNGMwIDEuMTEuODkgMiAyIDJoMThjMS4xMSAwIDItLjg5IDItMlY1YzAtMS4xMS0uODktMi0yLTJ6bTAgMTYuMDJIM1Y0Ljk4aDE4djE0LjA0ek0xMCAxMkg4bDQtNCA0IDRoLTJ2NGgtNHYtNHoiIC8+PC9nPgo8ZyBpZD0icmluZy12b2x1bWUiPjxwYXRoIGQ9Ik0yMy43MSAxNi42N0MyMC42NiAxMy43OCAxNi41NCAxMiAxMiAxMiA3LjQ2IDEyIDMuMzQgMTMuNzguMjkgMTYuNjdjLS4xOC4xOC0uMjkuNDMtLjI5LjcxIDAgLjI4LjExLjUzLjI5LjcxbDIuNDggMi40OGMuMTguMTguNDMuMjkuNzEuMjkuMjcgMCAuNTItLjExLjctLjI4Ljc5LS43NCAxLjY5LTEuMzYgMi42Ni0xLjg1LjMzLS4xNi41Ni0uNS41Ni0uOXYtMy4xYzEuNDUtLjQ4IDMtLjczIDQuNi0uNzNzMy4xNS4yNSA0LjYuNzJ2My4xYzAgLjM5LjIzLjc0LjU2LjkuOTguNDkgMS44NyAxLjEyIDIuNjYgMS44NS4xOC4xOC40My4yOC43LjI4LjI4IDAgLjUzLS4xMS43MS0uMjlsMi40OC0yLjQ4Yy4xOC0uMTguMjktLjQzLjI5LS43MSAwLS4yNy0uMTEtLjUyLS4yOS0uN3pNMjEuMTYgNi4yNmwtMS40MS0xLjQxLTMuNTYgMy41NSAxLjQxIDEuNDFzMy40NS0zLjUyIDMuNTYtMy41NXpNMTMgMmgtMnY1aDJWMnpNNi40IDkuODFMNy44MSA4LjQgNC4yNiA0Ljg0IDIuODQgNi4yNmMuMTEuMDMgMy41NiAzLjU1IDMuNTYgMy41NXoiIC8+PC9nPgo8ZyBpZD0icnNzLWZlZWQiPjxjaXJjbGUgY3g9IjYuMTgiIGN5PSIxNy44MiIgcj0iMi4xOCIgLz48cGF0aCBkPSJNNCA0LjQ0djIuODNjNy4wMyAwIDEyLjczIDUuNyAxMi43MyAxMi43M2gyLjgzYzAtOC41OS02Ljk3LTE1LjU2LTE1LjU2LTE1LjU2em0wIDUuNjZ2Mi44M2MzLjkgMCA3LjA3IDMuMTcgNy4wNyA3LjA3aDIuODNjMC01LjQ3LTQuNDMtOS45LTkuOS05Ljl6IiAvPjwvZz4KPGcgaWQ9InNjcmVlbi1zaGFyZSI+PHBhdGggZD0iTTIwIDE4YzEuMSAwIDEuOTktLjkgMS45OS0yTDIyIDZjMC0xLjExLS45LTItMi0ySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTBjMCAxLjEuODkgMiAyIDJIMHYyaDI0di0yaC00em0tNy0zLjUzdi0yLjE5Yy0yLjc4IDAtNC42MS44NS02IDIuNzIuNTYtMi42NyAyLjExLTUuMzMgNi01Ljg3VjdsNCAzLjczLTQgMy43NHoiIC8+PC9nPgo8ZyBpZD0ic3BlYWtlci1waG9uZSI+PHBhdGggZD0iTTcgNy4wN0w4LjQzIDguNWMuOTEtLjkxIDIuMTgtMS40OCAzLjU3LTEuNDhzMi42Ni41NyAzLjU3IDEuNDhMMTcgNy4wN0MxNS43MiA1Ljc5IDEzLjk1IDUgMTIgNXMtMy43Mi43OS01IDIuMDd6TTEyIDFDOC45OCAxIDYuMjQgMi4yMyA0LjI1IDQuMjFsMS40MSAxLjQxQzcuMjggNCA5LjUzIDMgMTIgM3M0LjcyIDEgNi4zNCAyLjYybDEuNDEtMS40MUMxNy43NiAyLjIzIDE1LjAyIDEgMTIgMXptMi44NiA5LjAxTDkuMTQgMTBDOC41MSAxMCA4IDEwLjUxIDggMTEuMTR2OS43MWMwIC42My41MSAxLjE0IDEuMTQgMS4xNGg1LjcxYy42MyAwIDEuMTQtLjUxIDEuMTQtMS4xNHYtOS43MWMuMDEtLjYzLS41LTEuMTMtMS4xMy0xLjEzek0xNSAyMEg5di04aDZ2OHoiIC8+PC9nPgo8ZyBpZD0ic3RheS1jdXJyZW50LWxhbmRzY2FwZSI+PHBhdGggZD0iTTEuMDEgN0wxIDE3YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMkgzYy0xLjEgMC0xLjk5LjktMS45OSAyek0xOSA3djEwSDVWN2gxNHoiIC8+PC9nPgo8ZyBpZD0ic3RheS1jdXJyZW50LXBvcnRyYWl0Ij48cGF0aCBkPSJNMTcgMS4wMUw3IDFjLTEuMSAwLTEuOTkuOS0xLjk5IDJ2MThjMCAxLjEuODkgMiAxLjk5IDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiIgLz48L2c+CjxnIGlkPSJzdGF5LXByaW1hcnktbGFuZHNjYXBlIj48cGF0aCBkPSJNMS4wMSA3TDEgMTdjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTEuOTkuOS0xLjk5IDJ6TTE5IDd2MTBINVY3aDE0eiIgLz48L2c+CjxnIGlkPSJzdGF5LXByaW1hcnktcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAxLjAxTDcgMWMtMS4xIDAtMS45OS45LTEuOTkgMnYxOGMwIDEuMS44OSAyIDEuOTkgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InN0b3Atc2NyZWVuLXNoYXJlIj48cGF0aCBkPSJNMjEuMjIgMTguMDJsMiAySDI0di0yaC0yLjc4em0uNzctMmwuMDEtMTBjMC0xLjExLS45LTItMi0ySDcuMjJsNS4yMyA1LjIzYy4xOC0uMDQuMzYtLjA3LjU1LS4xVjcuMDJsNCAzLjczLTEuNTggMS40NyA1LjU0IDUuNTRjLjYxLS4zMyAxLjAzLS45OSAxLjAzLTEuNzR6TTIuMzkgMS43M0wxLjExIDNsMS41NCAxLjU0Yy0uNC4zNi0uNjUuODktLjY1IDEuNDh2MTBjMCAxLjEuODkgMiAyIDJIMHYyaDE4LjEzbDIuNzEgMi43MSAxLjI3LTEuMjdMMi4zOSAxLjczek03IDE1LjAyYy4zMS0xLjQ4LjkyLTIuOTUgMi4wNy00LjA2bDEuNTkgMS41OWMtMS41NC4zOC0yLjcgMS4xOC0zLjY2IDIuNDd6IiAvPjwvZz4KPGcgaWQ9InN3YXAtY2FsbHMiPjxwYXRoIGQ9Ik0xOCA0bC00IDRoM3Y3YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY4YzAtMi4yMS0xLjc5LTQtNC00UzUgNS43OSA1IDh2N0gybDQgNCA0LTRIN1Y4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2N2MwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00VjhoM2wtNC00eiIgLz48L2c+CjxnIGlkPSJ0ZXh0c21zIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTkgMTFIN1Y5aDJ2MnptNCAwaC0yVjloMnYyem00IDBoLTJWOWgydjJ6IiAvPjwvZz4KPGcgaWQ9InZvaWNlbWFpbCI+PHBhdGggZD0iTTE4LjUgNkMxNS40NiA2IDEzIDguNDYgMTMgMTEuNWMwIDEuMzMuNDcgMi41NSAxLjI2IDMuNUg5Ljc0Yy43OS0uOTUgMS4yNi0yLjE3IDEuMjYtMy41QzExIDguNDYgOC41NCA2IDUuNSA2UzAgOC40NiAwIDExLjUgMi40NiAxNyA1LjUgMTdoMTNjMy4wNCAwIDUuNS0yLjQ2IDUuNS01LjVTMjEuNTQgNiAxOC41IDZ6bS0xMyA5QzMuNTcgMTUgMiAxMy40MyAyIDExLjVTMy41NyA4IDUuNSA4IDkgOS41NyA5IDExLjUgNy40MyAxNSA1LjUgMTV6bTEzIDBjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41UzE2LjU3IDggMTguNSA4IDIyIDkuNTcgMjIgMTEuNSAyMC40MyAxNSAxOC41IDE1eiIgLz48L2c+CjxnIGlkPSJ2cG4ta2V5Ij48cGF0aCBkPSJNMTIuNjUgMTBDMTEuODMgNy42NyA5LjYxIDYgNyA2Yy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2YzIuNjEgMCA0LjgzLTEuNjcgNS42NS00SDE3djRoNHYtNGgydi00SDEyLjY1ek03IDE0Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiIC8+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz4KCgoKCjxpcm9uLWljb25zZXQtc3ZnIG5hbWU9ImVkaXRvciIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYXR0YWNoLWZpbGUiPjxwYXRoIGQ9Ik0xNi41IDZ2MTEuNWMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNFY1YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjV2MTAuNWMwIC41NS0uNDUgMS0xIDFzLTEtLjQ1LTEtMVY2SDEwdjkuNWMwIDEuMzggMS4xMiAyLjUgMi41IDIuNXMyLjUtMS4xMiAyLjUtMi41VjVjMC0yLjIxLTEuNzktNC00LTRTNyAyLjc5IDcgNXYxMi41YzAgMy4wNCAyLjQ2IDUuNSA1LjUgNS41czUuNS0yLjQ2IDUuNS01LjVWNmgtMS41eiIgLz48L2c+CjxnIGlkPSJhdHRhY2gtbW9uZXkiPjxwYXRoIGQ9Ik0xMS44IDEwLjljLTIuMjctLjU5LTMtMS4yLTMtMi4xNSAwLTEuMDkgMS4wMS0xLjg1IDIuNy0xLjg1IDEuNzggMCAyLjQ0Ljg1IDIuNSAyLjFoMi4yMWMtLjA3LTEuNzItMS4xMi0zLjMtMy4yMS0zLjgxVjNoLTN2Mi4xNmMtMS45NC40Mi0zLjUgMS42OC0zLjUgMy42MSAwIDIuMzEgMS45MSAzLjQ2IDQuNyA0LjEzIDIuNS42IDMgMS40OCAzIDIuNDEgMCAuNjktLjQ5IDEuNzktMi43IDEuNzktMi4wNiAwLTIuODctLjkyLTIuOTgtMi4xaC0yLjJjLjEyIDIuMTkgMS43NiAzLjQyIDMuNjggMy44M1YyMWgzdi0yLjE1YzEuOTUtLjM3IDMuNS0xLjUgMy41LTMuNTUgMC0yLjg0LTIuNDMtMy44MS00LjctNC40eiIgLz48L2c+CjxnIGlkPSJib3JkZXItYWxsIj48cGF0aCBkPSJNMyAzdjE4aDE4VjNIM3ptOCAxNkg1di02aDZ2NnptMC04SDVWNWg2djZ6bTggOGgtNnYtNmg2djZ6bTAtOGgtNlY1aDZ2NnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWJvdHRvbSI+PHBhdGggZD0iTTkgMTFIN3YyaDJ2LTJ6bTQgNGgtMnYyaDJ2LTJ6TTkgM0g3djJoMlYzem00IDhoLTJ2Mmgydi0yek01IDNIM3YyaDJWM3ptOCA0aC0ydjJoMlY3em00IDRoLTJ2Mmgydi0yem0tNC04aC0ydjJoMlYzem00IDBoLTJ2MmgyVjN6bTIgMTBoMnYtMmgtMnYyem0wIDRoMnYtMmgtMnYyek01IDdIM3YyaDJWN3ptMTQtNHYyaDJWM2gtMnptMCA2aDJWN2gtMnYyek01IDExSDN2Mmgydi0yek0zIDIxaDE4di0ySDN2MnptMi02SDN2Mmgydi0yeiIgLz48L2c+CjxnIGlkPSJib3JkZXItY2xlYXIiPjxwYXRoIGQ9Ik03IDVoMlYzSDd2MnptMCA4aDJ2LTJIN3Yyem0wIDhoMnYtMkg3djJ6bTQtNGgydi0yaC0ydjJ6bTAgNGgydi0yaC0ydjJ6bS04IDBoMnYtMkgzdjJ6bTAtNGgydi0ySDN2MnptMC00aDJ2LTJIM3Yyem0wLTRoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTggOGgydi0yaC0ydjJ6bTggNGgydi0yaC0ydjJ6bTAtNGgydi0yaC0ydjJ6bTAgOGgydi0yaC0ydjJ6bTAtMTJoMlY3aC0ydjJ6bS04IDBoMlY3aC0ydjJ6bTgtNnYyaDJWM2gtMnptLTggMmgyVjNoLTJ2MnptNCAxNmgydi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bTAtOGgyVjNoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWNvbG9yIj48cGF0aCBkPSJNMTcuNzUgN0wxNCAzLjI1bC0xMCAxMFYxN2gzLjc1bDEwLTEwem0yLjk2LTIuOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MUwxOC4zNy4yOWMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMMTUgMi4yNSAxOC43NSA2bDEuOTYtMS45NnoiIC8+PHBhdGggZmlsbC1vcGFjaXR5PSIuMzYiIGQ9Ik0wIDIwaDI0djRIMHoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWhvcml6b250YWwiPjxwYXRoIGQ9Ik0zIDIxaDJ2LTJIM3Yyek01IDdIM3YyaDJWN3pNMyAxN2gydi0ySDN2MnptNCA0aDJ2LTJIN3Yyek01IDNIM3YyaDJWM3ptNCAwSDd2MmgyVjN6bTggMGgtMnYyaDJWM3ptLTQgNGgtMnYyaDJWN3ptMC00aC0ydjJoMlYzem02IDE0aDJ2LTJoLTJ2MnptLTggNGgydi0yaC0ydjJ6bS04LThoMTh2LTJIM3Yyek0xOSAzdjJoMlYzaC0yem0wIDZoMlY3aC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDRoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJib3JkZXItaW5uZXIiPjxwYXRoIGQ9Ik0zIDIxaDJ2LTJIM3Yyem00IDBoMnYtMkg3djJ6TTUgN0gzdjJoMlY3ek0zIDE3aDJ2LTJIM3Yyek05IDNIN3YyaDJWM3pNNSAzSDN2MmgyVjN6bTEyIDBoLTJ2MmgyVjN6bTIgNmgyVjdoLTJ2MnptMC02djJoMlYzaC0yem0tNCAxOGgydi0yaC0ydjJ6TTEzIDNoLTJ2OEgzdjJoOHY4aDJ2LThoOHYtMmgtOFYzem02IDE4aDJ2LTJoLTJ2MnptMC00aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWxlZnQiPjxwYXRoIGQ9Ik0xMSAyMWgydi0yaC0ydjJ6bTAtNGgydi0yaC0ydjJ6bTAtMTJoMlYzaC0ydjJ6bTAgNGgyVjdoLTJ2MnptMCA0aDJ2LTJoLTJ2MnptLTQgOGgydi0ySDd2MnpNNyA1aDJWM0g3djJ6bTAgOGgydi0ySDd2MnptLTQgOGgyVjNIM3YxOHpNMTkgOWgyVjdoLTJ2MnptLTQgMTJoMnYtMmgtMnYyem00LTRoMnYtMmgtMnYyem0wLTE0djJoMlYzaC0yem0wIDEwaDJ2LTJoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQtOGgydi0yaC0ydjJ6bTAtOGgyVjNoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLW91dGVyIj48cGF0aCBkPSJNMTMgN2gtMnYyaDJWN3ptMCA0aC0ydjJoMnYtMnptNCAwaC0ydjJoMnYtMnpNMyAzdjE4aDE4VjNIM3ptMTYgMTZINVY1aDE0djE0em0tNi00aC0ydjJoMnYtMnptLTQtNEg3djJoMnYtMnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXJpZ2h0Ij48cGF0aCBkPSJNNyAyMWgydi0ySDd2MnpNMyA1aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem0wIDhoMnYtMkg3djJ6bS00IDhoMnYtMkgzdjJ6bTggMGgydi0yaC0ydjJ6bS04LThoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTggOGgydi0yaC0ydjJ6bTQtNGgydi0yaC0ydjJ6bTQtMTB2MThoMlYzaC0yem0tNCAxOGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6bS00IDhoMnYtMmgtMnYyem0wLThoMlYzaC0ydjJ6bTAgNGgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXN0eWxlIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek03IDIxaDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem04LTRoMnYtMmgtMnYyem0wLTRoMnYtMmgtMnYyek0zIDN2MThoMlY1aDE2VjNIM3ptMTYgNmgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXRvcCI+PHBhdGggZD0iTTcgMjFoMnYtMkg3djJ6bTAtOGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTgtNGgydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMnYtMkgzdjJ6bTAtNGgyVjdIM3Yyem04IDhoMnYtMmgtMnYyem04LThoMlY3aC0ydjJ6bTAgNGgydi0yaC0ydjJ6TTMgM3YyaDE4VjNIM3ptMTYgMTRoMnYtMmgtMnYyem0tNCA0aDJ2LTJoLTJ2MnpNMTEgOWgyVjdoLTJ2MnptOCAxMmgydi0yaC0ydjJ6bS00LThoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJib3JkZXItdmVydGljYWwiPjxwYXRoIGQ9Ik0zIDloMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMTZoMnYtMkg3djJ6bTAtOGgydi0ySDd2MnptLTQgMGgydi0ySDN2MnptMCA4aDJ2LTJIM3Yyem0wLTRoMnYtMkgzdjJ6TTcgNWgyVjNIN3Yyem0xMiAxMmgydi0yaC0ydjJ6bS04IDRoMlYzaC0ydjE4em04IDBoMnYtMmgtMnYyem0wLThoMnYtMmgtMnYyem0wLTEwdjJoMlYzaC0yem0wIDZoMlY3aC0ydjJ6bS00LTRoMlYzaC0ydjJ6bTAgMTZoMnYtMmgtMnYyem0wLThoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJidWJibGUtY2hhcnQiPjxjaXJjbGUgY3g9IjcuMiIgY3k9IjE0LjQiIHI9IjMuMiIgLz48Y2lyY2xlIGN4PSIxNC44IiBjeT0iMTgiIHI9IjIiIC8+PGNpcmNsZSBjeD0iMTUuMiIgY3k9IjguOCIgcj0iNC44IiAvPjwvZz4KPGcgaWQ9ImRyYWctaGFuZGxlIj48cGF0aCBkPSJNMjAgOUg0djJoMTZWOXpNNCAxNWgxNnYtMkg0djJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1hbGlnbi1jZW50ZXIiPjxwYXRoIGQ9Ik03IDE1djJoMTB2LTJIN3ptLTQgNmgxOHYtMkgzdjJ6bTAtOGgxOHYtMkgzdjJ6bTQtNnYyaDEwVjdIN3pNMyAzdjJoMThWM0gzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtYWxpZ24tanVzdGlmeSI+PHBhdGggZD0iTTMgMjFoMTh2LTJIM3Yyem0wLTRoMTh2LTJIM3Yyem0wLTRoMTh2LTJIM3Yyem0wLTRoMThWN0gzdjJ6bTAtNnYyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWFsaWduLWxlZnQiPjxwYXRoIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWFsaWduLXJpZ2h0Ij48cGF0aCBkPSJNMyAyMWgxOHYtMkgzdjJ6bTYtNGgxMnYtMkg5djJ6bS02LTRoMTh2LTJIM3Yyem02LTRoMTJWN0g5djJ6TTMgM3YyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWJvbGQiPjxwYXRoIGQ9Ik0xNS42IDEwLjc5Yy45Ny0uNjcgMS42NS0xLjc3IDEuNjUtMi43OSAwLTIuMjYtMS43NS00LTQtNEg3djE0aDcuMDRjMi4wOSAwIDMuNzEtMS43IDMuNzEtMy43OSAwLTEuNTItLjg2LTIuODItMi4xNS0zLjQyek0xMCA2LjVoM2MuODMgMCAxLjUuNjcgMS41IDEuNXMtLjY3IDEuNS0xLjUgMS41aC0zdi0zem0zLjUgOUgxMHYtM2gzLjVjLjgzIDAgMS41LjY3IDEuNSAxLjVzLS42NyAxLjUtMS41IDEuNXoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNsZWFyIj48cGF0aCBkPSJNMy4yNyA1TDIgNi4yN2w2Ljk3IDYuOTdMNi41IDE5aDNsMS41Ny0zLjY2TDE2LjczIDIxIDE4IDE5LjczIDMuNTUgNS4yNyAzLjI3IDV6TTYgNXYuMThMOC44MiA4aDIuNGwtLjcyIDEuNjggMi4xIDIuMUwxNC4yMSA4SDIwVjVINnoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNvbG9yLWZpbGwiPjxwYXRoIGQ9Ik0xNi41NiA4Ljk0TDcuNjIgMCA2LjIxIDEuNDFsMi4zOCAyLjM4LTUuMTUgNS4xNWMtLjU5LjU5LS41OSAxLjU0IDAgMi4xMmw1LjUgNS41Yy4yOS4yOS42OC40NCAxLjA2LjQ0cy43Ny0uMTUgMS4wNi0uNDRsNS41LTUuNWMuNTktLjU4LjU5LTEuNTMgMC0yLjEyek01LjIxIDEwTDEwIDUuMjEgMTQuNzkgMTBINS4yMXpNMTkgMTEuNXMtMiAyLjE3LTIgMy41YzAgMS4xLjkgMiAyIDJzMi0uOSAyLTJjMC0xLjMzLTItMy41LTItMy41eiIgLz48cGF0aCBmaWxsLW9wYWNpdHk9Ii4zNiIgZD0iTTAgMjBoMjR2NEgweiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtY29sb3ItcmVzZXQiPjxwYXRoIGQ9Ik0xOCAxNGMwLTQtNi0xMC44LTYtMTAuOHMtMS4zMyAxLjUxLTIuNzMgMy41Mmw4LjU5IDguNTljLjA5LS40Mi4xNC0uODYuMTQtMS4zMXptLS44OCAzLjEyTDEyLjUgMTIuNSA1LjI3IDUuMjcgNCA2LjU1bDMuMzIgMy4zMkM2LjU1IDExLjMyIDYgMTIuNzkgNiAxNGMwIDMuMzEgMi42OSA2IDYgNiAxLjUyIDAgMi45LS41NyAzLjk2LTEuNWwyLjYzIDIuNjMgMS4yNy0xLjI3LTIuNzQtMi43NHoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNvbG9yLXRleHQiPjxwYXRoIGZpbGwtb3BhY2l0eT0iLjM2IiBkPSJNMCAyMGgyNHY0SDB6IiAvPjxwYXRoIGQ9Ik0xMSAzTDUuNSAxN2gyLjI1bDEuMTItM2g2LjI1bDEuMTIgM2gyLjI1TDEzIDNoLTJ6bS0xLjM4IDlMMTIgNS42NyAxNC4zOCAxMkg5LjYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaW5kZW50LWRlY3JlYXNlIj48cGF0aCBkPSJNMTEgMTdoMTB2LTJIMTF2MnptLTgtNWw0IDRWOGwtNCA0em0wIDloMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6bTggNmgxMFY3SDExdjJ6bTAgNGgxMHYtMkgxMXYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaW5kZW50LWluY3JlYXNlIj48cGF0aCBkPSJNMyAyMWgxOHYtMkgzdjJ6TTMgOHY4bDQtNC00LTR6bTggOWgxMHYtMkgxMXYyek0zIDN2MmgxOFYzSDN6bTggNmgxMFY3SDExdjJ6bTAgNGgxMHYtMkgxMXYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaXRhbGljIj48cGF0aCBkPSJNMTAgNHYzaDIuMjFsLTMuNDIgOEg2djNoOHYtM2gtMi4yMWwzLjQyLThIMThWNHoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWxpbmUtc3BhY2luZyI+PHBhdGggZD0iTTYgN2gyLjVMNSAzLjUgMS41IDdINHYxMEgxLjVMNSAyMC41IDguNSAxN0g2Vjd6bTQtMnYyaDEyVjVIMTB6bTAgMTRoMTJ2LTJIMTB2MnptMC02aDEydi0ySDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1saXN0LWJ1bGxldGVkIj48cGF0aCBkPSJNNCAxMC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC02Yy0uODMgMC0xLjUuNjctMS41IDEuNVMzLjE3IDcuNSA0IDcuNSA1LjUgNi44MyA1LjUgNiA0LjgzIDQuNSA0IDQuNXptMCAxMmMtLjgzIDAtMS41LjY4LTEuNSAxLjVzLjY4IDEuNSAxLjUgMS41IDEuNS0uNjggMS41LTEuNS0uNjctMS41LTEuNS0xLjV6TTcgMTloMTR2LTJIN3Yyem0wLTZoMTR2LTJIN3Yyem0wLTh2MmgxNFY1SDd6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1saXN0LW51bWJlcmVkIj48cGF0aCBkPSJNMiAxN2gydi41SDN2MWgxdi41SDJ2MWgzdi00SDJ2MXptMS05aDFWNEgydjFoMXYzem0tMSAzaDEuOEwyIDEzLjF2LjloM3YtMUgzLjJMNSAxMC45VjEwSDJ2MXptNS02djJoMTRWNUg3em0wIDE0aDE0di0ySDd2MnptMC02aDE0di0ySDd2MnoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LXBhaW50Ij48cGF0aCBkPSJNMTggNFYzYzAtLjU1LS40NS0xLTEtMUg1Yy0uNTUgMC0xIC40NS0xIDF2NGMwIC41NS40NSAxIDEgMWgxMmMuNTUgMCAxLS40NSAxLTFWNmgxdjRIOXYxMWMwIC41NS40NSAxIDEgMWgyYy41NSAwIDEtLjQ1IDEtMXYtOWg4VjRoLTN6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1xdW90ZSI+PHBhdGggZD0iTTYgMTdoM2wyLTRWN0g1djZoM3ptOCAwaDNsMi00VjdoLTZ2NmgzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtc2hhcGVzIj48cGF0aCBkPSJNMjMgN1YxaC02djJIN1YxSDF2NmgydjEwSDF2Nmg2di0yaDEwdjJoNnYtNmgtMlY3aDJ6TTMgM2gydjJIM1Yzem0yIDE4SDN2LTJoMnYyem0xMi0ySDd2LTJINVY3aDJWNWgxMHYyaDJ2MTBoLTJ2MnptNCAyaC0ydi0yaDJ2MnpNMTkgNVYzaDJ2MmgtMnptLTUuMjcgOWgtMy40OWwtLjczIDJINy44OWwzLjQtOWgxLjRsMy40MSA5aC0xLjYzbC0uNzQtMnptLTMuMDQtMS4yNmgyLjYxTDEyIDguOTFsLTEuMzEgMy44M3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LXNpemUiPjxwYXRoIGQ9Ik05IDR2M2g1djEyaDNWN2g1VjRIOXptLTYgOGgzdjdoM3YtN2gzVjlIM3YzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtc3RyaWtldGhyb3VnaCI+PHBhdGggZD0iTTEwIDE5aDR2LTNoLTR2M3pNNSA0djNoNXYzaDRWN2g1VjRINXpNMyAxNGgxOHYtMkgzdjJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC10ZXh0ZGlyZWN0aW9uLWwtdG8tciI+PHBhdGggZD0iTTkgMTB2NWgyVjRoMnYxMWgyVjRoMlYySDlDNi43OSAyIDUgMy43OSA1IDZzMS43OSA0IDQgNHptMTIgOGwtNC00djNINXYyaDEydjNsNC00eiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtdGV4dGRpcmVjdGlvbi1yLXRvLWwiPjxwYXRoIGQ9Ik0xMCAxMHY1aDJWNGgydjExaDJWNGgyVjJoLThDNy43OSAyIDYgMy43OSA2IDZzMS43OSA0IDQgNHptLTIgN3YtM2wtNCA0IDQgNHYtM2gxMnYtMkg4eiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtdW5kZXJsaW5lZCI+PHBhdGggZD0iTTEyIDE3YzMuMzEgMCA2LTIuNjkgNi02VjNoLTIuNXY4YzAgMS45My0xLjU3IDMuNS0zLjUgMy41UzguNSAxMi45MyA4LjUgMTFWM0g2djhjMCAzLjMxIDIuNjkgNiA2IDZ6bS03IDJ2MmgxNHYtMkg1eiIgLz48L2c+CjxnIGlkPSJmdW5jdGlvbnMiPjxwYXRoIGQ9Ik0xOCA0SDZ2Mmw2LjUgNkw2IDE4djJoMTJ2LTNoLTdsNS01LTUtNWg3eiIgLz48L2c+CjxnIGlkPSJoaWdobGlnaHQiPjxwYXRoIGQ9Ik02IDE0bDMgM3Y1aDZ2LTVsMy0zVjlINnptNS0xMmgydjNoLTJ6TTMuNSA1Ljg3NUw0LjkxNCA0LjQ2bDIuMTIgMi4xMjJMNS42MiA3Ljk5N3ptMTMuNDYuNzFsMi4xMjMtMi4xMiAxLjQxNCAxLjQxNEwxOC4zNzUgOHoiIC8+PC9nPgo8ZyBpZD0iaW5zZXJ0LWNoYXJ0Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IiAvPjwvZz4KPGcgaWQ9Imluc2VydC1jb21tZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0bDQgNFY0YzAtMS4xLS45LTItMi0yem0tMiAxMkg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtZHJpdmUtZmlsZSI+PHBhdGggZD0iTTYgMmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNkg2em03IDdWMy41TDE4LjUgOUgxM3oiIC8+PC9nPgo8ZyBpZD0iaW5zZXJ0LWVtb3RpY29uIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0zLjUtOWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTMTYuMzMgOCAxNS41IDggMTQgOC42NyAxNCA5LjVzLjY3IDEuNSAxLjUgMS41em0tNyAwYy44MyAwIDEuNS0uNjcgMS41LTEuNVM5LjMzIDggOC41IDggNyA4LjY3IDcgOS41IDcuNjcgMTEgOC41IDExem0zLjUgNi41YzIuMzMgMCA0LjMxLTEuNDYgNS4xMS0zLjVINi44OWMuOCAyLjA0IDIuNzggMy41IDUuMTEgMy41eiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtaW52aXRhdGlvbiI+PHBhdGggZD0iTTE3IDEyaC01djVoNXYtNXpNMTYgMXYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yaC0xVjFoLTJ6bTMgMThINVY4aDE0djExeiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtbGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtcGhvdG8iPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIgLz48L2c+CjxnIGlkPSJsaW5lYXItc2NhbGUiPjxwYXRoIGQ9Ik0xOS41IDkuNWMtMS4wMyAwLTEuOS42Mi0yLjI5IDEuNWgtMi45MmMtLjM5LS44OC0xLjI2LTEuNS0yLjI5LTEuNXMtMS45LjYyLTIuMjkgMS41SDYuNzljLS4zOS0uODgtMS4yNi0xLjUtMi4yOS0xLjVDMy4xMiA5LjUgMiAxMC42MiAyIDEyczEuMTIgMi41IDIuNSAyLjVjMS4wMyAwIDEuOS0uNjIgMi4yOS0xLjVoMi45MmMuMzkuODggMS4yNiAxLjUgMi4yOSAxLjVzMS45LS42MiAyLjI5LTEuNWgyLjkyYy4zOS44OCAxLjI2IDEuNSAyLjI5IDEuNSAxLjM4IDAgMi41LTEuMTIgMi41LTIuNXMtMS4xMi0yLjUtMi41LTIuNXoiIC8+PC9nPgo8ZyBpZD0ibWVyZ2UtdHlwZSI+PHBhdGggZD0iTTE3IDIwLjQxTDE4LjQxIDE5IDE1IDE1LjU5IDEzLjU5IDE3IDE3IDIwLjQxek03LjUgOEgxMXY1LjU5TDUuNTkgMTkgNyAyMC40MWw2LTZWOGgzLjVMMTIgMy41IDcuNSA4eiIgLz48L2c+CjxnIGlkPSJtb2RlLWNvbW1lbnQiPjxwYXRoIGQ9Ik0yMS45OSA0YzAtMS4xLS44OS0yLTEuOTktMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0bDQgNC0uMDEtMTh6IiAvPjwvZz4KPGcgaWQ9Im1vZGUtZWRpdCI+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiIC8+PC9nPgo8ZyBpZD0ibW9uZXRpemF0aW9uLW9uIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMS40MSAxNi4wOVYyMGgtMi42N3YtMS45M2MtMS43MS0uMzYtMy4xNi0xLjQ2LTMuMjctMy40aDEuOTZjLjEgMS4wNS44MiAxLjg3IDIuNjUgMS44NyAxLjk2IDAgMi40LS45OCAyLjQtMS41OSAwLS44My0uNDQtMS42MS0yLjY3LTIuMTQtMi40OC0uNi00LjE4LTEuNjItNC4xOC0zLjY3IDAtMS43MiAxLjM5LTIuODQgMy4xMS0zLjIxVjRoMi42N3YxLjk1YzEuODYuNDUgMi43OSAxLjg2IDIuODUgMy4zOUgxNC4zYy0uMDUtMS4xMS0uNjQtMS44Ny0yLjIyLTEuODctMS41IDAtMi40LjY4LTIuNCAxLjY0IDAgLjg0LjY1IDEuMzkgMi42NyAxLjkxczQuMTggMS4zOSA0LjE4IDMuOTFjLS4wMSAxLjgzLTEuMzggMi44My0zLjEyIDMuMTZ6IiAvPjwvZz4KPGcgaWQ9Im1vbmV5LW9mZiI+PHBhdGggZD0iTTEyLjUgNi45YzEuNzggMCAyLjQ0Ljg1IDIuNSAyLjFoMi4yMWMtLjA3LTEuNzItMS4xMi0zLjMtMy4yMS0zLjgxVjNoLTN2Mi4xNmMtLjUzLjEyLTEuMDMuMy0xLjQ4LjU0bDEuNDcgMS40N2MuNDEtLjE3LjkxLS4yNyAxLjUxLS4yN3pNNS4zMyA0LjA2TDQuMDYgNS4zMyA3LjUgOC43N2MwIDIuMDggMS41NiAzLjIxIDMuOTEgMy45MWwzLjUxIDMuNTFjLS4zNC40OC0xLjA1LjkxLTIuNDIuOTEtMi4wNiAwLTIuODctLjkyLTIuOTgtMi4xaC0yLjJjLjEyIDIuMTkgMS43NiAzLjQyIDMuNjggMy44M1YyMWgzdi0yLjE1Yy45Ni0uMTggMS44Mi0uNTUgMi40NS0xLjEybDIuMjIgMi4yMiAxLjI3LTEuMjdMNS4zMyA0LjA2eiIgLz48L2c+CjxnIGlkPSJtdWx0aWxpbmUtY2hhcnQiPjxwYXRoIGQ9Ik0yMiA2LjkybC0xLjQxLTEuNDEtMi44NSAzLjIxQzE1LjY4IDYuNCAxMi44MyA1IDkuNjEgNSA2LjcyIDUgNC4wNyA2LjE2IDIgOGwxLjQyIDEuNDJDNS4xMiA3LjkzIDcuMjcgNyA5LjYxIDdjMi43NCAwIDUuMDkgMS4yNiA2Ljc3IDMuMjRsLTIuODggMy4yNC00LTRMMiAxNi45OWwxLjUgMS41IDYtNi4wMSA0IDQgNC4wNS00LjU1Yy43NSAxLjM1IDEuMjUgMi45IDEuNDQgNC41NUgyMWMtLjIyLTIuMy0uOTUtNC4zOS0yLjA0LTYuMTRMMjIgNi45MnoiIC8+PC9nPgo8ZyBpZD0icGllLWNoYXJ0Ij48cGF0aCBkPSJNMTEgMnYyMGMtNS4wNy0uNS05LTQuNzktOS0xMHMzLjkzLTkuNSA5LTEwem0yLjAzIDB2OC45OUgyMmMtLjQ3LTQuNzQtNC4yNC04LjUyLTguOTctOC45OXptMCAxMS4wMVYyMmM0Ljc0LS40NyA4LjUtNC4yNSA4Ljk3LTguOTloLTguOTd6IiAvPjwvZz4KPGcgaWQ9InBpZS1jaGFydC1vdXRsaW5lZCI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem0xIDIuMDdjMy42MS40NSA2LjQ4IDMuMzMgNi45MyA2LjkzSDEzVjQuMDd6TTQgMTJjMC00LjA2IDMuMDctNy40NCA3LTcuOTN2MTUuODdjLTMuOTMtLjUtNy0zLjg4LTctNy45NHptOSA3LjkzVjEzaDYuOTNjLS40NSAzLjYxLTMuMzIgNi40OC02LjkzIDYuOTN6IiAvPjwvZz4KPGcgaWQ9InB1Ymxpc2giPjxwYXRoIGQ9Ik01IDR2MmgxNFY0SDV6bTAgMTBoNHY2aDZ2LTZoNGwtNy03LTcgN3oiIC8+PC9nPgo8ZyBpZD0ic2hvcnQtdGV4dCI+PHBhdGggZD0iTTQgOWgxNnYySDR6bTAgNGgxMHYySDR6IiAvPjwvZz4KPGcgaWQ9InNob3ctY2hhcnQiPjxwYXRoIGQ9Ik0zLjUgMTguNDlsNi02LjAxIDQgNEwyMiA2LjkybC0xLjQxLTEuNDEtNy4wOSA3Ljk3LTQtNEwyIDE2Ljk5eiIgLz48L2c+CjxnIGlkPSJzcGFjZS1iYXIiPjxwYXRoIGQ9Ik0xOCA5djRINlY5SDR2NmgxNlY5eiIgLz48L2c+CjxnIGlkPSJzdHJpa2V0aHJvdWdoLXMiPjxwYXRoIGQ9Ik03LjI0IDguNzVjLS4yNi0uNDgtLjM5LTEuMDMtLjM5LTEuNjcgMC0uNjEuMTMtMS4xNi40LTEuNjcuMjYtLjUuNjMtLjkzIDEuMTEtMS4yOS40OC0uMzUgMS4wNS0uNjMgMS43LS44My42Ni0uMTkgMS4zOS0uMjkgMi4xOC0uMjkuODEgMCAxLjU0LjExIDIuMjEuMzQuNjYuMjIgMS4yMy41NCAxLjY5Ljk0LjQ3LjQuODMuODggMS4wOCAxLjQzLjI1LjU1LjM4IDEuMTUuMzggMS44MWgtMy4wMWMwLS4zMS0uMDUtLjU5LS4xNS0uODUtLjA5LS4yNy0uMjQtLjQ5LS40NC0uNjgtLjItLjE5LS40NS0uMzMtLjc1LS40NC0uMy0uMS0uNjYtLjE2LTEuMDYtLjE2LS4zOSAwLS43NC4wNC0xLjAzLjEzLS4yOS4wOS0uNTMuMjEtLjcyLjM2LS4xOS4xNi0uMzQuMzQtLjQ0LjU1LS4xLjIxLS4xNS40My0uMTUuNjYgMCAuNDguMjUuODguNzQgMS4yMS4zOC4yNS43Ny40OCAxLjQxLjdINy4zOWMtLjA1LS4wOC0uMTEtLjE3LS4xNS0uMjV6TTIxIDEydi0ySDN2Mmg5LjYyYy4xOC4wNy40LjE0LjU1LjIuMzcuMTcuNjYuMzQuODcuNTEuMjEuMTcuMzUuMzYuNDMuNTcuMDcuMi4xMS40My4xMS42OSAwIC4yMy0uMDUuNDUtLjE0LjY2LS4wOS4yLS4yMy4zOC0uNDIuNTMtLjE5LjE1LS40Mi4yNi0uNzEuMzUtLjI5LjA4LS42My4xMy0xLjAxLjEzLS40MyAwLS44My0uMDQtMS4xOC0uMTNzLS42Ni0uMjMtLjkxLS40MmMtLjI1LS4xOS0uNDUtLjQ0LS41OS0uNzUtLjE0LS4zMS0uMjUtLjc2LS4yNS0xLjIxSDYuNGMwIC41NS4wOCAxLjEzLjI0IDEuNTguMTYuNDUuMzcuODUuNjUgMS4yMS4yOC4zNS42LjY2Ljk4LjkyLjM3LjI2Ljc4LjQ4IDEuMjIuNjUuNDQuMTcuOS4zIDEuMzguMzkuNDguMDguOTYuMTMgMS40NC4xMy44IDAgMS41My0uMDkgMi4xOC0uMjhzMS4yMS0uNDUgMS42Ny0uNzljLjQ2LS4zNC44Mi0uNzcgMS4wNy0xLjI3cy4zOC0xLjA3LjM4LTEuNzFjMC0uNi0uMS0xLjE0LS4zMS0xLjYxLS4wNS0uMTEtLjExLS4yMy0uMTctLjMzSDIxeiIgLz48L2c+CjxnIGlkPSJ0ZXh0LWZpZWxkcyI+PHBhdGggZD0iTTIuNSA0djNoNXYxMmgzVjdoNVY0aC0xM3ptMTkgNWgtOXYzaDN2N2gzdi03aDNWOXoiIC8+PC9nPgo8ZyBpZD0idGl0bGUiPjxwYXRoIGQ9Ik01IDR2M2g1LjV2MTJoM1Y3SDE5VjR6IiAvPjwvZz4KPGcgaWQ9InZlcnRpY2FsLWFsaWduLWJvdHRvbSI+PHBhdGggZD0iTTE2IDEzaC0zVjNoLTJ2MTBIOGw0IDQgNC00ek00IDE5djJoMTZ2LTJINHoiIC8+PC9nPgo8ZyBpZD0idmVydGljYWwtYWxpZ24tY2VudGVyIj48cGF0aCBkPSJNOCAxOWgzdjRoMnYtNGgzbC00LTQtNCA0em04LTE0aC0zVjFoLTJ2NEg4bDQgNCA0LTR6TTQgMTF2MmgxNnYtMkg0eiIgLz48L2c+CjxnIGlkPSJ2ZXJ0aWNhbC1hbGlnbi10b3AiPjxwYXRoIGQ9Ik04IDExaDN2MTBoMlYxMWgzbC00LTQtNCA0ek00IDN2MmgxNlYzSDR6IiAvPjwvZz4KPGcgaWQ9IndyYXAtdGV4dCI+PHBhdGggZD0iTTQgMTloNnYtMkg0djJ6TTIwIDVINHYyaDE2VjV6bS0zIDZINHYyaDEzLjI1YzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMkgxNXYtMmwtMyAzIDMgM3YtMmgyYzIuMjEgMCA0LTEuNzkgNC00cy0xLjc5LTQtNC00eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgo8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJoYXJkd2FyZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iY2FzdCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2M2gyVjVoMTh2MTRoLTd2Mmg3YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTEgMTh2M2gzYzAtMS42Ni0xLjM0LTMtMy0zem0wLTR2MmMyLjc2IDAgNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0wLTR2MmM0Ljk3IDAgOSA0LjAzIDkgOWgyYzAtNi4wOC00LjkzLTExLTExLTExeiIgLz48L2c+CjxnIGlkPSJjYXN0LWNvbm5lY3RlZCI+PHBhdGggZD0iTTEgMTh2M2gzYzAtMS42Ni0xLjM0LTMtMy0zem0wLTR2MmMyLjc2IDAgNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xOC03SDV2MS42M2MzLjk2IDEuMjggNy4wOSA0LjQxIDguMzcgOC4zN0gxOVY3ek0xIDEwdjJjNC45NyAwIDkgNC4wMyA5IDloMmMwLTYuMDgtNC45My0xMS0xMS0xMXptMjAtN0gzYy0xLjEgMC0yIC45LTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iY29tcHV0ZXIiPjxwYXRoIGQ9Ik0yMCAxOGMxLjEgMCAxLjk5LS45IDEuOTktMkwyMiA2YzAtMS4xLS45LTItMi0ySDRjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJIMHYyaDI0di0yaC00ek00IDZoMTZ2MTBINFY2eiIgLz48L2c+CjxnIGlkPSJkZXNrdG9wLW1hYyI+PHBhdGggZD0iTTIxIDJIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3bC0yIDN2MWg4di0xbC0yLTNoN2MxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0wIDEySDNWNGgxOHYxMHoiIC8+PC9nPgo8ZyBpZD0iZGVza3RvcC13aW5kb3dzIj48cGF0aCBkPSJNMjEgMkgzYy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2Mkg4djJoOHYtMmgtMnYtMmg3YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTRIM1Y0aDE4djEyeiIgLz48L2c+CjxnIGlkPSJkZXZlbG9wZXItYm9hcmQiPjxwYXRoIGQ9Ik0yMiA5VjdoLTJWNWMwLTEuMS0uOS0yLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi0yaDJ2LTJoLTJ2LTJoMnYtMmgtMlY5aDJ6bS00IDEwSDRWNWgxNHYxNHpNNiAxM2g1djRINnptNi02aDR2M2gtNHpNNiA3aDV2NUg2em02IDRoNHY2aC00eiIgLz48L2c+CjxnIGlkPSJkZXZpY2UtaHViIj48cGF0aCBkPSJNMTcgMTZsLTQtNFY4LjgyQzE0LjE2IDguNCAxNSA3LjMgMTUgNmMwLTEuNjYtMS4zNC0zLTMtM1M5IDQuMzQgOSA2YzAgMS4zLjg0IDIuNCAyIDIuODJWMTJsLTQgNEgzdjVoNXYtMy4wNWw0LTQuMiA0IDQuMlYyMWg1di01aC00eiIgLz48L2c+CjxnIGlkPSJkZXZpY2VzLW90aGVyIj48cGF0aCBkPSJNMyA2aDE4VjRIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg0di0ySDNWNnptMTAgNkg5djEuNzhjLS42MS41NS0xIDEuMzMtMSAyLjIycy4zOSAxLjY3IDEgMi4yMlYyMGg0di0xLjc4Yy42MS0uNTUgMS0xLjM0IDEtMi4yMnMtLjM5LTEuNjctMS0yLjIyVjEyem0tMiA1LjVjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41ek0yMiA4aC02Yy0uNSAwLTEgLjUtMSAxdjEwYzAgLjUuNSAxIDEgMWg2Yy41IDAgMS0uNSAxLTFWOWMwLS41LS41LTEtMS0xem0tMSAxMGgtNHYtOGg0djh6IiAvPjwvZz4KPGcgaWQ9ImRvY2siPjxwYXRoIGQ9Ik04IDIzaDh2LTJIOHYyem04LTIxLjk5TDggMWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE1SDhWNWg4djEweiIgLz48L2c+CjxnIGlkPSJnYW1lcGFkIj48cGF0aCBkPSJNMTUgNy41VjJIOXY1LjVsMyAzIDMtM3pNNy41IDlIMnY2aDUuNWwzLTMtMy0zek05IDE2LjVWMjJoNnYtNS41bC0zLTMtMyAzek0xNi41IDlsLTMgMyAzIDNIMjJWOWgtNS41eiIgLz48L2c+CjxnIGlkPSJoZWFkc2V0Ij48cGF0aCBkPSJNMTIgMWMtNC45NyAwLTkgNC4wMy05IDl2N2MwIDEuNjYgMS4zNCAzIDMgM2gzdi04SDV2LTJjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgN3YyaC00djhoM2MxLjY2IDAgMy0xLjM0IDMtM3YtN2MwLTQuOTctNC4wMy05LTktOXoiIC8+PC9nPgo8ZyBpZD0iaGVhZHNldC1taWMiPjxwYXRoIGQ9Ik0xMiAxYy00Ljk3IDAtOSA0LjAzLTkgOXY3YzAgMS42NiAxLjM0IDMgMyAzaDN2LThINXYtMmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3djJoLTR2OGg0djFoLTd2Mmg2YzEuNjYgMCAzLTEuMzQgMy0zVjEwYzAtNC45Ny00LjAzLTktOS05eiIgLz48L2c+CjxnIGlkPSJrZXlib2FyZCI+PHBhdGggZD0iTTIwIDVINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE3YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptLTkgM2gydjJoLTJWOHptMCAzaDJ2MmgtMnYtMnpNOCA4aDJ2Mkg4Vjh6bTAgM2gydjJIOHYtMnptLTEgMkg1di0yaDJ2MnptMC0zSDVWOGgydjJ6bTkgN0g4di0yaDh2MnptMC00aC0ydi0yaDJ2MnptMC0zaC0yVjhoMnYyem0zIDNoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LWRvd24iPjxwYXRoIGQ9Ik03LjQxIDcuODRMMTIgMTIuNDJsNC41OS00LjU4TDE4IDkuMjVsLTYgNi02LTZ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSAxNi4wOWwtNC41OC00LjU5IDQuNTgtNC41OUwxNCA1LjVsLTYgNiA2IDZ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LXJpZ2h0Ij48cGF0aCBkPSJNOC41OSAxNi4zNGw0LjU4LTQuNTktNC41OC00LjU5TDEwIDUuNzVsNiA2LTYgNnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtYXJyb3ctdXAiPjxwYXRoIGQ9Ik03LjQxIDE1LjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNGwtNi02LTYgNnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtYmFja3NwYWNlIj48cGF0aCBkPSJNMjEgMTFINi44M2wzLjU4LTMuNTlMOSA2bC02IDYgNiA2IDEuNDEtMS40MUw2LjgzIDEzSDIxeiIgLz48L2c+CjxnIGlkPSJrZXlib2FyZC1jYXBzbG9jayI+PHBhdGggZD0iTTEyIDguNDFMMTYuNTkgMTMgMTggMTEuNTlsLTYtNi02IDZMNy40MSAxMyAxMiA4LjQxek02IDE4aDEydi0ySDZ2MnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtaGlkZSI+PHBhdGggZD0iTTIwIDNINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE1YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTkgM2gydjJoLTJWNnptMCAzaDJ2MmgtMlY5ek04IDZoMnYySDhWNnptMCAzaDJ2Mkg4Vjl6bS0xIDJINVY5aDJ2MnptMC0zSDVWNmgydjJ6bTkgN0g4di0yaDh2MnptMC00aC0yVjloMnYyem0wLTNoLTJWNmgydjJ6bTMgM2gtMlY5aDJ2MnptMC0zaC0yVjZoMnYyem0tNyAxNWw0LTRIOGw0IDR6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLXJldHVybiI+PHBhdGggZD0iTTE5IDd2NEg1LjgzbDMuNTgtMy41OUw4IDZsLTYgNiA2IDYgMS40MS0xLjQxTDUuODMgMTNIMjFWN3oiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtdGFiIj48cGF0aCBkPSJNMTEuNTkgNy40MUwxNS4xNyAxMUgxdjJoMTQuMTdsLTMuNTkgMy41OUwxMyAxOGw2LTYtNi02LTEuNDEgMS40MXpNMjAgNnYxMmgyVjZoLTJ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLXZvaWNlIj48cGF0aCBkPSJNMTIgMTVjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNmMwLTEuNjYtMS4zNC0zLTMtM1M5IDQuMzQgOSA2djZjMCAxLjY2IDEuMzQgMyAzIDN6bTUuMy0zYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNSA2LjcgMTJINWMwIDMuNDIgMi43MiA2LjIzIDYgNi43MlYyMmgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43eiIgLz48L2c+CjxnIGlkPSJsYXB0b3AiPjxwYXRoIGQ9Ik0yMCAxOGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0ySDRjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJIMHYyaDI0di0yaC00ek00IDZoMTZ2MTBINFY2eiIgLz48L2c+CjxnIGlkPSJsYXB0b3AtY2hyb21lYm9vayI+PHBhdGggZD0iTTIyIDE4VjNIMnYxNUgwdjJoMjR2LTJoLTJ6bS04IDBoLTR2LTFoNHYxem02LTNINFY1aDE2djEweiIgLz48L2c+CjxnIGlkPSJsYXB0b3AtbWFjIj48cGF0aCBkPSJNMjAgMThjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjIgNWMwLTEuMS0uOS0yLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAySDBjMCAxLjEuOSAyIDIgMmgyMGMxLjEgMCAyLS45IDItMmgtNHpNNCA1aDE2djExSDRWNXptOCAxNGMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiIgLz48L2c+CjxnIGlkPSJsYXB0b3Atd2luZG93cyI+PHBhdGggZD0iTTIwIDE4di0xYzEuMSAwIDEuOTktLjkgMS45OS0yTDIyIDVjMC0xLjEtLjktMi0yLTJINGMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMnYxSDB2MmgyNHYtMmgtNHpNNCA1aDE2djEwSDRWNXoiIC8+PC9nPgo8ZyBpZD0ibWVtb3J5Ij48cGF0aCBkPSJNMTUgOUg5djZoNlY5em0tMiA0aC0ydi0yaDJ2MnptOC0yVjloLTJWN2MwLTEuMS0uOS0yLTItMmgtMlYzaC0ydjJoLTJWM0g5djJIN2MtMS4xIDAtMiAuOS0yIDJ2MkgzdjJoMnYySDN2MmgydjJjMCAxLjEuOSAyIDIgMmgydjJoMnYtMmgydjJoMnYtMmgyYzEuMSAwIDItLjkgMi0ydi0yaDJ2LTJoLTJ2LTJoMnptLTQgNkg3VjdoMTB2MTB6IiAvPjwvZz4KPGcgaWQ9Im1vdXNlIj48cGF0aCBkPSJNMTMgMS4wN1Y5aDdjMC00LjA4LTMuMDUtNy40NC03LTcuOTN6TTQgMTVjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOHYtNEg0djR6bTctMTMuOTNDNy4wNSAxLjU2IDQgNC45MiA0IDloN1YxLjA3eiIgLz48L2c+CjxnIGlkPSJwaG9uZS1hbmRyb2lkIj48cGF0aCBkPSJNMTYgMUg4QzYuMzQgMSA1IDIuMzQgNSA0djE2YzAgMS42NiAxLjM0IDMgMyAzaDhjMS42NiAwIDMtMS4zNCAzLTNWNGMwLTEuNjYtMS4zNC0zLTMtM3ptLTIgMjBoLTR2LTFoNHYxem0zLjI1LTNINi43NVY0aDEwLjV2MTR6IiAvPjwvZz4KPGcgaWQ9InBob25lLWlwaG9uZSI+PHBhdGggZD0iTTE1LjUgMWgtOEM2LjEyIDEgNSAyLjEyIDUgMy41djE3QzUgMjEuODggNi4xMiAyMyA3LjUgMjNoOGMxLjM4IDAgMi41LTEuMTIgMi41LTIuNXYtMTdDMTggMi4xMiAxNi44OCAxIDE1LjUgMXptLTQgMjFjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41em00LjUtNEg3VjRoOXYxNHoiIC8+PC9nPgo8ZyBpZD0icGhvbmVsaW5rIj48cGF0aCBkPSJNNCA2aDE4VjRINGMtMS4xIDAtMiAuOS0yIDJ2MTFIMHYzaDE0di0zSDRWNnptMTkgMmgtNmMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjljMC0uNTUtLjQ1LTEtMS0xem0tMSA5aC00di03aDR2N3oiIC8+PC9nPgo8ZyBpZD0icGhvbmVsaW5rLW9mZiI+PHBhdGggZD0iTTIyIDZWNEg2LjgybDIgMkgyMnpNMS45MiAxLjY1TC42NSAyLjkybDEuODIgMS44MkMyLjE4IDUuMDggMiA1LjUyIDIgNnYxMUgwdjNoMTcuNzNsMi4zNSAyLjM1IDEuMjctMS4yN0wzLjg5IDMuNjIgMS45MiAxLjY1ek00IDYuMjdMMTQuNzMgMTdINFY2LjI3ek0yMyA4aC02Yy0uNTUgMC0xIC40NS0xIDF2NC4xOGwyIDJWMTBoNHY3aC0yLjE4bDMgM0gyM2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9InBvd2VyLWlucHV0Ij48cGF0aCBkPSJNMiA5djJoMTlWOUgyem0wIDZoNXYtMkgydjJ6bTcgMGg1di0ySDl2MnptNyAwaDV2LTJoLTV2MnoiIC8+PC9nPgo8ZyBpZD0icm91dGVyIj48cGF0aCBkPSJNMjAuMiA1LjlsLjgtLjhDMTkuNiAzLjcgMTcuOCAzIDE2IDNzLTMuNi43LTUgMi4xbC44LjhDMTMgNC44IDE0LjUgNC4yIDE2IDQuMnMzIC42IDQuMiAxLjd6bS0uOS44Yy0uOS0uOS0yLjEtMS40LTMuMy0xLjRzLTIuNC41LTMuMyAxLjRsLjguOGMuNy0uNyAxLjYtMSAyLjUtMSAuOSAwIDEuOC4zIDIuNSAxbC44LS44ek0xOSAxM2gtMlY5aC0ydjRINWMtMS4xIDAtMiAuOS0yIDJ2NGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi00YzAtMS4xLS45LTItMi0yek04IDE4SDZ2LTJoMnYyem0zLjUgMGgtMnYtMmgydjJ6bTMuNSAwaC0ydi0yaDJ2MnoiIC8+PC9nPgo8ZyBpZD0ic2Nhbm5lciI+PHBhdGggZD0iTTE5LjggMTAuN0w0LjIgNWwtLjcgMS45TDE3LjYgMTJINWMtMS4xIDAtMiAuOS0yIDJ2NGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi01LjVjMC0uOC0uNS0xLjYtMS4yLTEuOHpNNyAxN0g1di0yaDJ2MnptMTIgMEg5di0yaDEwdjJ6IiAvPjwvZz4KPGcgaWQ9InNlY3VyaXR5Ij48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bTAgMTAuOTloN2MtLjUzIDQuMTItMy4yOCA3Ljc5LTcgOC45NFYxMkg1VjYuM2w3LTMuMTF2OC44eiIgLz48L2c+CjxnIGlkPSJzaW0tY2FyZCI+PHBhdGggZD0iTTE5Ljk5IDRjMC0xLjEtLjg5LTItMS45OS0yaC04TDQgOHYxMmMwIDEuMS45IDIgMiAyaDEyLjAxYzEuMSAwIDEuOTktLjkgMS45OS0ybC0uMDEtMTZ6TTkgMTlIN3YtMmgydjJ6bTggMGgtMnYtMmgydjJ6bS04LTRIN3YtNGgydjR6bTQgNGgtMnYtNGgydjR6bTAtNmgtMnYtMmgydjJ6bTQgMmgtMnYtNGgydjR6IiAvPjwvZz4KPGcgaWQ9InNtYXJ0cGhvbmUiPjxwYXRoIGQ9Ik0xNyAxLjAxTDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InNwZWFrZXIiPjxwYXRoIGQ9Ik0xNyAySDdjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMS45OSAyIDEuOTlMMTcgMjJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDJjLTEuMTEgMC0yLS45LTItMnMuODktMiAyLTJ6bTAgMTZjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiIgLz48L2c+CjxnIGlkPSJzcGVha2VyLWdyb3VwIj48cGF0aCBkPSJNMTguMiAxSDkuOEM4LjgxIDEgOCAxLjgxIDggMi44djE0LjRjMCAuOTkuODEgMS43OSAxLjggMS43OWw4LjQuMDFjLjk5IDAgMS44LS44MSAxLjgtMS44VjIuOGMwLS45OS0uODEtMS44LTEuOC0xLjh6TTE0IDNjMS4xIDAgMiAuODkgMiAycy0uOSAyLTIgMi0yLS44OS0yLTIgLjktMiAyLTJ6bTAgMTMuNWMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0LTEuNzkgNC00IDR6IiAvPjxjaXJjbGUgY3g9IjE0IiBjeT0iMTIuNSIgcj0iMi41IiAvPjxwYXRoIGQ9Ik02IDVINHYxNmMwIDEuMS44OSAyIDIgMmgxMHYtMkg2VjV6IiAvPjwvZz4KPGcgaWQ9InRhYmxldCI+PHBhdGggZD0iTTIxIDRIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAxLjk5LS45IDEuOTktMkwyMyA2YzAtMS4xLS45LTItMi0yem0tMiAxNEg1VjZoMTR2MTJ6IiAvPjwvZz4KPGcgaWQ9InRhYmxldC1hbmRyb2lkIj48cGF0aCBkPSJNMTggMEg2QzQuMzQgMCAzIDEuMzQgMyAzdjE4YzAgMS42NiAxLjM0IDMgMyAzaDEyYzEuNjYgMCAzLTEuMzQgMy0zVjNjMC0xLjY2LTEuMzQtMy0zLTN6bS00IDIyaC00di0xaDR2MXptNS4yNS0zSDQuNzVWM2gxNC41djE2eiIgLz48L2c+CjxnIGlkPSJ0YWJsZXQtbWFjIj48cGF0aCBkPSJNMTguNSAwaC0xNEMzLjEyIDAgMiAxLjEyIDIgMi41djE5QzIgMjIuODggMy4xMiAyNCA0LjUgMjRoMTRjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjV2LTE5QzIxIDEuMTIgMTkuODggMCAxOC41IDB6bS03IDIzYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXptNy41LTRINFYzaDE1djE2eiIgLz48L2c+CjxnIGlkPSJ0b3lzIj48cGF0aCBkPSJNMTIgMTJjMC0zIDIuNS01LjUgNS41LTUuNVMyMyA5IDIzIDEySDEyem0wIDBjMCAzLTIuNSA1LjUtNS41IDUuNVMxIDE1IDEgMTJoMTF6bTAgMGMtMyAwLTUuNS0yLjUtNS41LTUuNVM5IDEgMTIgMXYxMXptMCAwYzMgMCA1LjUgMi41IDUuNSA1LjVTMTUgMjMgMTIgMjNWMTJ6IiAvPjwvZz4KPGcgaWQ9InR2Ij48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDV2Mmg4di0yaDVjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjMgNWMwLTEuMS0uOS0yLTItMnptMCAxNEgzVjVoMTh2MTJ6IiAvPjwvZz4KPGcgaWQ9InZpZGVvZ2FtZS1hc3NldCI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0xMCA3SDh2M0g2di0zSDN2LTJoM1Y4aDJ2M2gzdjJ6bTQuNSAyYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXptNC0zYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTguNjcgOSAxOS41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiIgLz48L2c+CjxnIGlkPSJ3YXRjaCI+PHBhdGggZD0iTTIwIDEyYzAtMi41NC0xLjE5LTQuODEtMy4wNC02LjI3TDE2IDBIOGwtLjk1IDUuNzNDNS4xOSA3LjE5IDQgOS40NSA0IDEyczEuMTkgNC44MSAzLjA1IDYuMjdMOCAyNGg4bC45Ni01LjczQzE4LjgxIDE2LjgxIDIwIDE0LjU0IDIwIDEyek02IDEyYzAtMy4zMSAyLjY5LTYgNi02czYgMi42OSA2IDYtMi42OSA2LTYgNi02LTIuNjktNi02eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLXBhZ2VzIj4KCiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKDpub3Qoc2xvdCk6bm90KC5pcm9uLXNlbGVjdGVkKSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRhYiI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgo8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6IiAvPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRhYnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwoKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwoKICAgICAgICAvKiBOT1RFOiBCb3RoIHZhbHVlcyBhcmUgbmVlZGVkLCBzaW5jZSBzb21lIHBob25lcyByZXF1aXJlIHRoZSB2YWx1ZSB0byBiZSBgdHJhbnNwYXJlbnRgLiAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOwogICAgICB9CgogICAgICAjdGFic0NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLW1vei1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIC1tcy1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250ZW50OwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudDpub3QoLnNjcm9sbGFibGUpLAogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyID4gOjpzbG90dGVkKCopIHsKICAgICAgICAvKiBJRSAtIHByZXZlbnQgdGFicyBmcm9tIGNvbXByZXNzaW5nIHdoZW4gdGhleSBzaG91bGQgc2Nyb2xsLiAqLwogICAgICAgIC1tcy1mbGV4OiAxIDAgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMCBhdXRvOwogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICB9CgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAubm90LXZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXI7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuYWxpZ24tYm90dG9tIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmV4cGFuZCB7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xNXM7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuY29udHJhY3QgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCA+IDo6c2xvdHRlZCg6bm90KCNzZWxlY3Rpb25CYXIpKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tbGVmdCIgY2xhc3MkPSJbW19jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3MoX2xlZnRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vbkxlZnRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogICAgPGRpdiBpZD0idGFic0NvbnRhaW5lciIgb24tdHJhY2s9Il9zY3JvbGwiIG9uLWRvd249Il9kb3duIj4KICAgICAgPGRpdiBpZD0idGFic0NvbnRlbnQiIGNsYXNzJD0iW1tfY29tcHV0ZVRhYnNDb250ZW50Q2xhc3Moc2Nyb2xsYWJsZSwgZml0Q29udGFpbmVyKV1dIj4KICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb25CYXIiIGNsYXNzJD0iW1tfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzKG5vQmFyLCBhbGlnbkJvdHRvbSldXSIgb24tdHJhbnNpdGlvbmVuZD0iX29uQmFyVHJhbnNpdGlvbkVuZCI+PC9kaXY+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tcmlnaHQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9yaWdodEhpZGRlbiwgc2Nyb2xsYWJsZSwgaGlkZVNjcm9sbEJ1dHRvbnMpXV0iIG9uLXVwPSJfb25TY3JvbGxCdXR0b25VcCIgb24tZG93bj0iX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1pbmZlcmVuY2UtcGFuZWwiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpZD0ibGludGVyLXBhcGVyLWJ1dHRvbi1zdHlsZSI+CiAgICAgIC8qKgogICAgICAgKiBUaGlzIHN0eWxlIHByZXNlcnZlcyB0aGUgc3R5bGluZyBwcmV2aW91cyB0bwogICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vUG9seW1lckVsZW1lbnRzL3BhcGVyLWJ1dHRvbi9wdWxsLzExNQogICAgICAgKiBUaGlzIGNoYW5nZSBjYW4gYnJlYWsgdGhlIGxheW91dCBvZiBwYXBlci1idXR0b24gY29udGVudC4KICAgICAgICogUmVtb3ZlIHRoaXMgc3R5bGUgdG8gYXBwbHkgdGhlIGNoYW5nZS4KICAgICAgICovCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICB0Zi1vcHRpb24tc2VsZWN0b3IgLm1vZGVsLXR5cGUtYnV0dG9uIHsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQogICAgICAuZmxleC1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgfQogICAgICAuaGVscC1pY29uIHsKICAgICAgICB3aWR0aDogMTVweDsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjb2xvcjogIzc1NzU3NTsKICAgICAgfQogICAgICAudG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICB9CiAgICAgIC5pbnB1dC1pbi1yb3cgewogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgfQogICAgICAuZmxleC1ncm93IHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLm1vZGVsLXR5cGUtbGFiZWwgewogICAgICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgICB9CiAgICAgIC5hZGQtbW9kZWwtYnV0dG9uLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY2hlY2tib3ggewogICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnByZWRpY3QtY2hlY2tib3ggewogICAgICAgIG1hcmdpbi10b3A6IDQzcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiAjZjU3YzAwOwogICAgICB9CiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yOiAjM2M0MDQzOwogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3I6ICMzYzQwNDM7CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvcjogIzNjNDA0MzsKICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWluay1jb2xvcjogIzNjNDA0MzsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InRpdGxlIj5TZXQgdXAgeW91ciBkYXRhIGFuZCBtb2RlbDwvZGl2PgogICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iSW5mZXJlbmNlIGFkZHJlc3MiIHBsYWNlaG9sZGVyPSJbW2luZmVyZW5jZUFkZHJlc3MxXV0iIHZhbHVlPSJ7e2luZmVyZW5jZUFkZHJlc3MxfX0iPgogICAgPC9wYXBlci1pbnB1dD4KICAgIDxkaXYgY2xhc3M9ImZsZXgtaG9sZGVyIj4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iTW9kZWwgbmFtZSIgcGxhY2Vob2xkZXI9IltbbW9kZWxOYW1lMV1dIiB2YWx1ZT0ie3ttb2RlbE5hbWUxfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItaW5wdXQgYWx3YXlzLWZsb2F0LWxhYmVsIGxhYmVsPSJNb2RlbCB2ZXJzaW9uIChvcHRpb25hbCkiIHBsYWNlaG9sZGVyPSJbW21vZGVsVmVyc2lvbjFdXSIgdmFsdWU9Int7bW9kZWxWZXJzaW9uMX19IiBjbGFzcz0iaW5wdXQtaW4tcm93Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iTW9kZWwgc2lnbmF0dXJlIChvcHRpb25hbCkiIHBsYWNlaG9sZGVyPSJbW21vZGVsU2lnbmF0dXJlMV1dIiB2YWx1ZT0ie3ttb2RlbFNpZ25hdHVyZTF9fSIgY2xhc3M9ImlucHV0LWluLXJvdyI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxkaXYgaGlkZGVuJD0ie3toaWRlTW9kZWxQYW5lMn19Ij4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iSW5mZXJlbmNlIGFkZHJlc3MiIHBsYWNlaG9sZGVyPSJbW2luZmVyZW5jZUFkZHJlc3MyXV0iIHZhbHVlPSJ7e2luZmVyZW5jZUFkZHJlc3MyfX0iPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iTW9kZWwgbmFtZSIgcGxhY2Vob2xkZXI9IltbbW9kZWxOYW1lMl1dIiB2YWx1ZT0ie3ttb2RlbE5hbWUyfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iTW9kZWwgdmVyc2lvbiAob3B0aW9uYWwpIiBwbGFjZWhvbGRlcj0iW1ttb2RlbFZlcnNpb24yXV0iIHZhbHVlPSJ7e21vZGVsVmVyc2lvbjJ9fSIgY2xhc3M9ImlucHV0LWluLXJvdyI+CiAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICA8cGFwZXItaW5wdXQgYWx3YXlzLWZsb2F0LWxhYmVsIGxhYmVsPSJNb2RlbCBzaWduYXR1cmUgKG9wdGlvbmFsKSIgcGxhY2Vob2xkZXI9IltbbW9kZWxTaWduYXR1cmUyXV0iIHZhbHVlPSJ7e21vZGVsU2lnbmF0dXJlMn19IiBjbGFzcz0iaW5wdXQtaW4tcm93Ij4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYWRkLW1vZGVsLWJ1dHRvbi1ob2xkZXIiIGhpZGRlbiQ9Int7IWhpZGVNb2RlbFBhbmUyfX0iPgogICAgICA8cGFwZXItYnV0dG9uIG9uLXRhcD0iYWRkTW9kZWxDbGlja2VkXyIgY2xhc3M9Im1haW4tYnV0dG9uIj4KICAgICAgICBBZGQgYW5vdGhlciBtb2RlbCBmb3IgY29tcGFyaXNvbgogICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZmxleC1ob2xkZXIiPgogICAgICA8ZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGVsLXR5cGUtbGFiZWwiPk1vZGVsIFR5cGU8L2Rpdj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7bW9kZWxUeXBlfX0iPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJjbGFzc2lmaWNhdGlvbiI+Q2xhc3NpZmljYXRpb248L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0icmVncmVzc2lvbiI+UmVncmVzc2lvbjwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3t1c2VQcmVkaWN0QXBpfX0iIGNsYXNzPSJwcmVkaWN0LWNoZWNrYm94Ij4KICAgICAgICBVc2VzIFByZWRpY3QgQVBJCiAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZsZXgtaG9sZGVyIj4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iSW5wdXQgdGVuc29yIG5hbWUiIHBsYWNlaG9sZGVyPSJbW3ByZWRpY3RJbnB1dFRlbnNvcl1dIiB2YWx1ZT0ie3twcmVkaWN0SW5wdXRUZW5zb3J9fSIgY2xhc3M9ImlucHV0LWluLXJvdyIgaGlkZGVuJD0iW1tzaG91bGREaXNhYmxlUHJlZGljdFRlbnNvckNvbnRyb2xzXyh1c2VQcmVkaWN0QXBpKV1dIj4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iT3V0cHV0IHRlbnNvciBuYW1lIiBwbGFjZWhvbGRlcj0iW1twcmVkaWN0T3V0cHV0VGVuc29yXV0iIHZhbHVlPSJ7e3ByZWRpY3RPdXRwdXRUZW5zb3J9fSIgY2xhc3M9ImlucHV0LWluLXJvdyIgaGlkZGVuJD0iW1tzaG91bGREaXNhYmxlUHJlZGljdFRlbnNvckNvbnRyb2xzXyh1c2VQcmVkaWN0QXBpKV1dIj4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZmxleC1ob2xkZXIiPgogICAgICA8cGFwZXItaW5wdXQgYWx3YXlzLWZsb2F0LWxhYmVsIGxhYmVsPSJQYXRoIHRvIGV4YW1wbGVzIiB2YWx1ZT0ie3tleGFtcGxlc1BhdGh9fSIgY2xhc3M9ImZsZXgtZ3JvdyI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e3NlcXVlbmNlRXhhbXBsZXN9fSIgY2xhc3M9ImNoZWNrYm94Ij4KICAgICAgICBTZXF1ZW5jZUV4YW1wbGVzCiAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZsZXgtaG9sZGVyIj4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCB0eXBlPSJudW1iZXIiIGNsYXNzPSJpbnB1dC1pbi1yb3cgZmxleC1ncm93IiBsYWJlbD0iTWF4aW11bSBudW1iZXIgb2YgZXhhbXBsZXMgdG8gbG9hZCIgcGxhY2Vob2xkZXI9IltbbWF4RXhhbXBsZXNdXSIgdmFsdWU9Int7bWF4RXhhbXBsZXN9fSI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgdHlwZT0ibnVtYmVyIiBjbGFzcz0iaW5wdXQtaW4tcm93IGZsZXgtZ3JvdyIgbGFiZWw9IlNhbXBsaW5nIHJhdGlvICgwLjIgPSBzYW1wbGUgfjIwJSBvZiBleGFtcGxlcykiIHBsYWNlaG9sZGVyPSJbW3NhbXBsaW5nT2Rkc11dIiB2YWx1ZT0ie3tzYW1wbGluZ09kZHN9fSI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9IlBhdGggdG8gbGFiZWwgZGljdGlvbmFyeSAob3B0aW9uYWwpIiBwbGFjZWhvbGRlcj0iW1tsYWJlbFZvY2FiUGF0aF1dIiB2YWx1ZT0ie3tsYWJlbFZvY2FiUGF0aH19IiBkaXNhYmxlZD0iW1tzaG91bGREaXNhYmxlQ2xhc3NpZmljYXRpb25Db250cm9sc18obW9kZWxUeXBlKV1dIj4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJoZWxwIiBjbGFzcz0iaGVscC1pY29uIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8ZGl2Pk1hcHMgcHJlZGljdGVkIGNsYXNzIGluZGljZXMgdG8gbGFiZWxzIGZyb20gdGV4dCBmaWxlPC9kaXY+CiAgICAgIDxwYXBlci10b29sdGlwIGNsYXNzPSJ0b29sdGlwIiBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJib3R0b20iIG9mZnNldD0iMCI+CiAgICAgICAgQW4gb3B0aW9uYWwgdGV4dCBmaWxlIGZvciB1c2Ugd2l0aCB0aGUgcmVzdWx0cyBvZiBhIGNsYXNzaWZpY2F0aW9uCiAgICAgICAgbW9kZWwuIENsYXNzaWZpY2F0aW9uIG1vZGVscyByZXR1cm4gcHJlZGljdGVkIGNsYXNzZXMgYXMgaW5kaWNlcy4gSWYgYQogICAgICAgIHZvY2FiIGZpbGUgaXMgcHJvdmlkZWQsIGVhY2ggcHJlZGljdGVkIGNsYXNzIGluZGV4IHdpbGwgYmUgbWFwcGVkIHRvIGEKICAgICAgICBsYWJlbCBmcm9tIHRoaXMgZmlsZSBmb3IgdXNlIGluIHRoZSBkaXNwbGF5LiBFYWNoIGxpbmUgaW4gdGhlIGZpbGUKICAgICAgICBjb3JyZXNwb25kcyB0byBhIGxhYmVsLCB3aXRoIHRoZSBmaXJzdCBsaW5lIGNvcnJlc3BvbmRpbmcgdG8gY2xhc3MgaW5kZXgKICAgICAgICAwLgogICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZsZXgtaG9sZGVyIj4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCB0eXBlPSJudW1iZXIiIGxhYmVsPSJNYXggY2xhc3NlcyB0byBkaXNwbGF5IiBwbGFjZWhvbGRlcj0iW1ttYXhDbGFzc2VzVG9EaXNwbGF5XV0iIHZhbHVlPSJ7e21heENsYXNzZXNUb0Rpc3BsYXl9fSIgY2xhc3M9ImlucHV0LWluLXJvdyIgZGlzYWJsZWQ9Iltbc2hvdWxkRGlzYWJsZU11bHRpQ2xhc3NDb250cm9sc18obXVsdGlDbGFzcyldXSI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxwYXBlci1jaGVja2JveCBkaXNhYmxlZD0iW1tzaG91bGREaXNhYmxlQ2xhc3NpZmljYXRpb25Db250cm9sc18obW9kZWxUeXBlKV1dIiBjaGVja2VkPSJ7e211bHRpQ2xhc3N9fSIgY2xhc3M9ImNoZWNrYm94Ij4KICAgICAgICBNdWx0aS1jbGFzcyBjbGFzc2lmaWNhdGlvbiBtb2RlbAogICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ2ei1iYXItY2hhcnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9InRvb2x0aXAiPgogICAgICA8dGFibGU+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgPHRyIGlkPSJ0b29sdGlwLXRhYmxlLWhlYWRlci1yb3ciPjwvdHI+CiAgICAgICAgPC90aGVhZD4KICAgICAgICA8dGJvZHk+PC90Ym9keT4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICAgIGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgICN0b29sdGlwIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgICAgY3Vyc29yOiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KICAgICAgLnN3YXRjaCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDApOwogICAgICB9CiAgICAgIC5jbG9zZXN0IC5zd2F0Y2ggewogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHdoaXRlOwogICAgICB9CiAgICAgIHRoIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNvbmZ1c2lvbi1tYXRyaXgiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgdGFibGUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICB0ZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgdGgsCiAgICAgIHRkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgICAgLmZsZXggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9CiAgICAgIC5wcmVkLWxhYmVsIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgICAudG90YWwtbGFiZWwgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC50b3RhbC1jZWxsIHsKICAgICAgICBjb2xvcjogIzVmNjM2ODsKICAgICAgfQogICAgICAuYWN0dWFsLWxhYmVsIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLm4tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICB9CiAgICAgIC52YWx1ZS1jZWxsIHsKICAgICAgICBjb2xvcjogIzIwMjEyNDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyZXk7CiAgICAgIH0KICAgICAgLnBhcmVudGhldGljYWwgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKICAgICAgICB3aWR0aDogNTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9ImhvbGRlciI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW5mZXJlbmNlLXZpZXdlciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLnJ1bnMtaG9sZGVyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgIH0KICAgICAgLnJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgICAgLmhlYWRlciB7CiAgICAgICAgY29sb3I6ICM4MDg2OGI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDRweCAwOwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjZGFkY2UwOwogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAjZGFkY2UwOwogICAgICB9CiAgICAgIC5kYXJrLXJvdy1vbmUgewogICAgICAgIGJhY2tncm91bmQ6ICNjYmYwZjg7CiAgICAgIH0KICAgICAgLmRhcmstcm93LXR3byB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjNlMDsKICAgICAgfQogICAgICAud2hpdGUtcm93IHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQogICAgICAubWFya2VyIHsKICAgICAgICBmbGV4OiAwLjU7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KICAgICAgLm1hcmtlci5tYXJrLW9uZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwN2I4MzsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDFweDsKICAgICAgfQogICAgICAubWFya2VyLm1hcmstdHdvIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY5ODAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMXB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZsZXg6IDEwOwogICAgICB9CiAgICAgIC5tdWx0aS1tb2RlbCB7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KICAgICAgLm9uZS1tb2RlbCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc2hvdy1sYWJlbCB7CiAgICAgICAgZmxleDogMjA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIC5uby1sYWJlbCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc2NvcmUgewogICAgICAgIGZsZXg6IDEwOwogICAgICB9CiAgICAgIC5hcnJvdyB7CiAgICAgICAgZmxleDogMjsKICAgICAgfQogICAgICAuZGVsdGEgewogICAgICAgIGZsZXg6IDEwOwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KICAgICAgLmdyZWVuIHsKICAgICAgICBjb2xvcjogZ3JlZW47CiAgICAgIH0KICAgICAgLnJlZCB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InJvdyBoZWFkZXIiPgogICAgICA8ZGl2IGNsYXNzPSJtYXJrZXIiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJydW4iPlJ1bjwvZGl2PgogICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRNb2RlbEhlYWRlckNsYXNzKGluZmVyZW5jZXMpXV0iPk1vZGVsPC9kaXY+CiAgICAgIDxkaXYgY2xhc3MkPSJbW2dldExhYmVsSGVhZGVyQ2xhc3MobW9kZWxUeXBlKV1dIj5MYWJlbDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzY29yZSI+W1tnZXRTY29yZUxhYmVsKG1vZGVsVHlwZSldXTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIj5EZWx0YTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJydW5zLWhvbGRlciI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaW5mZXJlbmNlc11dIiBhcz0ibW9kZWxzSW5mZXJlbmNlIiBpbmRleC1hcz0icnVuaW5kZXgiPgogICAgICAgIDxkaXYgY2xhc3M9InJvd3MtZm9yLXJ1biI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21vZGVsc0luZmVyZW5jZV1dIiBhcz0iaW5mZXJlbmNlIiBpbmRleC1hcz0ibW9kZWxpbmRleCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZ2V0SW5mZXJlbmNlTGlzdChpbmZlcmVuY2UsIG1heEVudHJpZXNQZXJSdW4pXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW2dldFJvd0NsYXNzKHJ1bmluZGV4LCBpbmZlcmVuY2VzLCBtb2RlbGluZGV4KV1dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW2dldE1hcmtlckNsYXNzKHJ1bmluZGV4LCBpbmZlcmVuY2VzLCBtb2RlbGluZGV4KV1dIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJ1biB0ZXh0Ij5bW2dldFJ1bk51bWJlcihydW5pbmRleCldXTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0TW9kZWxDbGFzcyhpbmZlcmVuY2VzKV1dIj4KICAgICAgICAgICAgICAgICAgPGRpdj5bW2dldE1vZGVsTmFtZShtb2RlbE5hbWVzLCBtb2RlbGluZGV4KV1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW2dldExhYmVsQ2xhc3MobW9kZWxUeXBlKV1dIj4KICAgICAgICAgICAgICAgICAgPGRpdj5bW2dldExhYmVsKGl0ZW0pXV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUgdGV4dCI+W1tnZXRQcmludGFibGVTY29yZShpdGVtLnNjb3JlKV1dPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhcnJvdyI+CiAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iW1tnZXRJY29uKHJ1bmluZGV4LCBpbmRleCwgbW9kZWxpbmRleCldXSIgY2xhc3MkPSJbW2dldEljb25DbGFzcyhydW5pbmRleCwgaW5kZXgsIG1vZGVsaW5kZXgpXV0iPgogICAgICAgICAgICAgICAgICA8L2lyb24taWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgdGV4dCI+CiAgICAgICAgICAgICAgICAgIFtbZ2V0UHJpbnRhYmxlRGVsdGEocnVuaW5kZXgsIGluZGV4LCBtb2RlbGluZGV4KV1dCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1kaXZlLXZpcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmxhYmVscyB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWhlYWRsaW5lOwogICAgICB9CiAgICAgIC5yb3RhdGUgewogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEuNSwgMC41OwogICAgICAgIGFuaW1hdGlvbjogcm90YXRlIDFzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQogICAgICBAa2V5ZnJhbWVzIHJvdGF0ZSB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDI7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iaG9sZGVyIj4KICAgICAgCiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtY29udHJvbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgLm1haW4tY29udHJvbHMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDYwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIC5vdmVyZmxvdy1ob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjb3ZlcmZsb3dtZW51IHsKICAgICAgICBtYXJnaW46IDAgNDBweDsKICAgICAgfQoKICAgICAgLm92ZXJmbG93LWRpdiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAub3ZlcmZsb3ctY2hlY2tib3ggewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgcGFkZGluZwogICAgICB9CgogICAgICAuZHJvcGRvd24taG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICBtYXJnaW46IDAgMTBweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLXRyaWdnZXIgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmQtYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzliOWI5YjsKICAgICAgICAtLXBhcGVyLWljb24tYnV0dG9uLWluay1jb2xvcjogIzliOWI5YjsKICAgICAgfQogICAgICBwYXBlci1tZW51IHBhcGVyLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTIuNXB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMCAxNHB4OwogICAgICAgIC0tcGFwZXItaXRlbS1taW4taGVpZ2h0OiAzNnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgcGFwZXItaXRlbSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7CiAgICAgIH0KCiAgICAgICN2ZXJ0aWNhbEZhY2V0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgY29sb3I6IHZhcigtLWdyaWQtZmFjZXRpbmctdmVydGljYWwtbGFiZWwtY29sb3IpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgI2hvcml6b250YWxGYWNldCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgI3ZlcnRpY2FsUG9zaXRpb24gewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBjb2xvcjogdmFyKC0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcik7CiAgICAgICAgfTsKICAgICAgfQogICAgICAjaG9yaXpvbnRhbFBvc2l0aW9uIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgY29sb3I6IHZhcigtLWl0ZW0tcG9zaXRpb25pbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcik7CiAgICAgICAgfTsKICAgICAgfQogICAgICAudmVydGljYWwtZmFjZXQgewogICAgICAgIGNvbG9yOiB2YXIoLS1ncmlkLWZhY2V0aW5nLXZlcnRpY2FsLWxhYmVsLWNvbG9yKTsKICAgICAgfQogICAgICAuaG9yaXpvbnRhbC1mYWNldCB7CiAgICAgICAgY29sb3I6IHZhcigtLWdyaWQtZmFjZXRpbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcik7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLXBvc2l0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcik7CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtcG9zaXRpb24gewogICAgICAgIGNvbG9yOiB2YXIoLS1pdGVtLXBvc2l0aW9uaW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9Im1haW4tY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciBob3Jpem9udGFsLWZhY2V0Ij4KICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9Imhvcml6b250YWxGYWNldCIgbGFiZWw9IkJpbm5pbmcgfCBYLUF4aXMiIGNsYXNzPSJmYWNldC1zZWxlY3RvciI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2hvcml6b250YWxGYWNldH19IiBhdHRyLWZvci1zZWxlY3RlZD0idmFsdWUiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1trZXlzXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iW1tpdGVtXV0iPltbX2JyZWFrVXBBbmRUcnVuY2F0ZShpdGVtKV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tob3Jpem9udGFsRmFjZXRdXSI+CiAgICAgICAgICA8cGFwZXItaW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEiIG1heD0iW1tfbWF4QnVja2V0cyhob3Jpem9udGFsRmFjZXQsIGhvcml6b250YWxCYWdPZldvcmRzKV1dIiB2YWx1ZT0ie3tob3Jpem9udGFsQnVja2V0c319IiBsYWJlbD0iQ291bnQiPgogICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciB2ZXJ0aWNhbC1mYWNldCI+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9InZlcnRpY2FsRmFjZXQiIGxhYmVsPSJCaW5uaW5nIHwgWS1BeGlzIiBjbGFzcz0iZmFjZXQtc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3ZlcnRpY2FsRmFjZXR9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW19icmVha1VwQW5kVHJ1bmNhdGUoaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3ZlcnRpY2FsRmFjZXRdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0IHR5cGU9Im51bWJlciIgbWluPSIxIiBtYXg9IltbX21heEJ1Y2tldHModmVydGljYWxGYWNldCx2ZXJ0aWNhbEJhZ09mV29yZHMpXV0iIHZhbHVlPSJ7e3ZlcnRpY2FsQnVja2V0c319IiBsYWJlbD0iQ291bnQiPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi1ob2xkZXIiPgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJjb2xvckJ5IiBsYWJlbD0iQ29sb3IgQnkiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2NvbG9yQnl9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24taG9sZGVyIj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBpZD0iaW1hZ2VGaWVsZE5hbWUiIGxhYmVsPSJMYWJlbCBCeSI+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7aW1hZ2VGaWVsZE5hbWV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+CiAgICAgICAgICAgICAgW1tfZ2V0SW1hZ2VGaWVsZE5hbWVEZWZhdWx0TGFiZWwoYXRsYXNVcmwpXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24taG9sZGVyIGhvcml6b250YWwtcG9zaXRpb24iPgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJob3Jpem9udGFsUG9zaXRpb24iIGxhYmVsPSJTY2F0dGVyIHwgWC1BeGlzIiBjbGFzcz0icG9zaXRpb24tc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2hvcml6b250YWxQb3NpdGlvbn19IiBhdHRyLWZvci1zZWxlY3RlZD0idmFsdWUiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iIj4oZGVmYXVsdCk8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltba2V5c11dIiBmaWx0ZXI9Il9pc0tleU51bWVyaWMiPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJbW2l0ZW1dXSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciB2ZXJ0aWNhbC1wb3NpdGlvbiI+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9InZlcnRpY2FsUG9zaXRpb24iIGxhYmVsPSJTY2F0dGVyIHwgWS1BeGlzIiBjbGFzcz0icG9zaXRpb24tc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3ZlcnRpY2FsUG9zaXRpb259fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KGRlZmF1bHQpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSIgZmlsdGVyPSJfaXNLZXlOdW1lcmljIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im92ZXJmbG93LWhvbGRlciI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2hvdWxkU2hvd092ZXJmbG93TWVudShjb2xvckJ5LCB2ZXJ0aWNhbEZhY2V0LCBob3Jpem9udGFsRmFjZXQpXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIgaWNvbj0ibW9yZS12ZXJ0IiBhbHQ9Im1vcmUtdmVydCIgaWQ9Im92ZXJmbG93YnRuIiBvbi1jbGljaz0iX29wZW5PdmVyZmxvdyI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZyBpZD0ib3ZlcmZsb3dtZW51IiBuby1vdmVybGFwIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0idG9wIj4KICAgICAgICA8ZGl2IGNsYXNzPSJvdmVyZmxvdy1kaXYiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19pc0tleUNhdGVnb3JpY2FsKGNvbG9yQnkpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi1ob2xkZXIiPgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJwYWxldHRlQ2hvaWNlIiBsYWJlbD0iRGlzcGxheSB8IENvbG9yIFBhbGV0dGUiPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3BhbGV0dGVDaG9pY2V9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9InN0YW5kYXJkIj5zdGFuZGFyZDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9Indhcm0iPndhcm08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJjb29sIj5jb29sPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iYXNzaXN0Ij5hc3Npc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc1dvcmRUcmVlKHZlcnRpY2FsRmFjZXQpXV0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9Im92ZXJmbG93LWNoZWNrYm94IiBjaGVja2VkPSJ7e3ZlcnRpY2FsQmFnT2ZXb3Jkc319Ij4KICAgICAgICAgICAgICBYLUF4aXMgQmFnIG9mIHdvcmRzCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzV29yZFRyZWUoaG9yaXpvbnRhbEZhY2V0KV1dIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJvdmVyZmxvdy1jaGVja2JveCIgY2hlY2tlZD0ie3tob3Jpem9udGFsQmFnT2ZXb3Jkc319Ij4KICAgICAgICAgICAgICBZLUF4aXMgQmFnIG9mIHdvcmRzCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1kaXZlLWluZm8tY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQogICAgICBkdCB7CiAgICAgICAgY29sb3I6ICM5ZTdjNjU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIGRkIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwogICAgICAgIGNvbG9yOiAjNTEzNzI2OwogICAgICAgIG1hcmdpbjogMCAwIDE2cHggMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9ImhvbGRlciI+PC9kaXY+CiAgICAKICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJmYWNldHMtZGl2ZS1sZWdlbmQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNhOWE5YTk7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgfQoKICAgICAgLnRvcGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNFNkU2RkE7CiAgICAgIH0KCiAgICAgIC5leHBhbmQtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1ib2R5IHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2E5YTlhOTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQgLmxheW91dC1yb3cgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgICAubGVnZW5kIC5sYXlvdXQtcm93IHNwYW4gewogICAgICAgIG1hcmdpbjogMnB4IDAgMCA4cHg7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBMZWdlbmQgdGFibGUgc2hpbS4gUG9seW1lcidzIGRvbS1yZXBlYXQgZmVhdHVyZSBoYXMgYSBrbm93biBpc3N1ZSBpbgogICAgICAgKiB3aGljaCBpdCBkb2Vzbid0IHdvcmsgd2l0aCA8dHI+IGVsZW1lbnRzIGluc2lkZSBvZiBhIDx0YWJsZT4uIFNvCiAgICAgICAqIGluc3RlYWQsIHdlIHVzZSBDU1Mgd2l0aCBjbGFzc2VkIGRpdnMgdG8gYWNoaWV2ZSB0YWJsZSBiZWhhdmlvci4KICAgICAgICovCiAgICAgIC5sZWdlbmQtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1yb3cgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQogICAgICAubGVnZW5kLWNlbGwgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb2xvciBsZWdlbmQuCiAgICAgICAqLwogICAgICAubGVnZW5kIC5jb2xvciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5sZWdlbmQgLmNvbG9yIGlyb24taWNvbiB7CiAgICAgICAgLS1pcm9uLWljb24td2lkdGg6IDE2cHg7CiAgICAgICAgLS1pcm9uLWljb24taGVpZ2h0OiAxNnB4OwogICAgICAgIG1hcmdpbjogMCAycHg7CiAgICAgIH0KICAgICAgLmxlZ2VuZCAuY29sb3IgaXJvbi1pY29uW2ZpbGw9IiNmZmZmZmYiXSB7CiAgICAgICAgYmFja2dyb3VuZDogI2RkZGRkZDsKICAgICAgfQogICAgICAubGVnZW5kIC5jb2xvciBzcGFuIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgICAgLmxlZ2VuZCAuc3BlY2lhbCB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAubGVnZW5kIGgyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgY29sb3I6ICM0ZjQyM2U7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICAgIC5sZWdlbmQgLmNvbG9yLWJ5LWZpZWxkIHsKICAgICAgICBjb2xvcjogIzk2OGU4YzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDEyLjVweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIG1hcmdpbjogMnB4IDAgNHB4IDIwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2FueUNvbG9yKGNvbG9yQnksIHBhbGV0dGUpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+TGVnZW5kPC9kaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3M9ImV4cGFuZC1idXR0b24iIG9uLWNsaWNrPSJfdG9nZ2xlT3BlbmVkIiBpY29uPSJbW19nZXRJY29uKF9vcGVuZWQpXV0iPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBpZD0iY29sbGFwc2UiIG9wZW5lZD0ie3tfb3BlbmVkfX0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWJvZHkiPgogICAgICAgICAgICA8aDI+Q29sb3JzPC9oMj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWJ5LWZpZWxkIj4KICAgICAgICAgICAgICBieSBbW19icmVha1VwQW5kVHJ1bmNhdGUoY29sb3JCeSldXQogICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIHBvc2l0aW9uPSJ0b3AiPltbY29sb3JCeV1dPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICA8L3NwYW4+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtdGFibGUiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbcGFsZXR0ZV1dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1yb3cgY29sb3IiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJhdjpmaWJlci1tYW51YWwtcmVjb3JkIiBmaWxsJD0iW1tpdGVtLmNvbG9yXV0iIHN0eWxlJD0iZmlsbDpbW2l0ZW0uY29sb3JdXSI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3MkPSJbW19zcGVjaWFsQ2xhc3MoaXRlbS5jb250ZW50LnNwZWNpYWwpXV0iPgogICAgICAgICAgICAgICAgICAgICAgW1tfYnJlYWtVcEFuZFRydW5jYXRlKGl0ZW0uY29udGVudC5sYWJlbCldXQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBwb3NpdGlvbj0idG9wIj5bW2l0ZW0uY29udGVudC5sYWJlbF1dPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1kaXZlIj4KICA8dGVtcGxhdGU+CgogICAgPHN0eWxlPgogICAgICAvKioKICAgICAgICogcGFwZXItaW5wdXQtY29udGFpbmVyIHVzZXMgYW4gZWxlbWVudCBjb250YWluaW5nIG9ubHkgJm5ic3A7IGZvcgogICAgICAgKiBzcGFjaW5nIHB1cnBvc2VzLiBBZ2dyZXNzaXZlIHZ1bGNhbml6ZXJzIHNvbWV0aW1lcyByZW1vdmUgdGhpcyBjb250ZW50LgogICAgICAgKiBUaGlzIENTUyBydWxlIGZvcmNlcyB0aGUgY29udGFpbmluZyBlbGVtZW50IHRvIGhhdmUgdGhlIGNvcnJlY3QgaGVpZ2h0CiAgICAgICAqIGluIGVpdGhlciBjYXNlLgogICAgICAgKi8KICAgICAgOmhvc3QgcGFwZXItaW5wdXQtY29udGFpbmVyID4gLmZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5maWxsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgLm1haW4gewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KICAgICAgZmFjZXRzLWRpdmUtY29udHJvbHMgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDNkM2QzOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgIH0KICAgICAgLnJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIGZhY2V0cy1kaXZlLWxlZ2VuZCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMTRweDsKICAgICAgICByaWdodDogMjRweDsKICAgICAgfQogICAgICAuem9vbS1jb250cm9scyB7CiAgICAgICAgYm90dG9tOiAxNHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KICAgICAgLnpvb20tY29udHJvbHMgcGFwZXItYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3OwogICAgICAgIGNsZWFyOiBsZWZ0OwogICAgICAgIGNvbG9yOiAjMmIyYjJiOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1hcmdpbjogNHB4IDhweDsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CiAgICAgIGZhY2V0cy1kaXZlLWluZm8tY2FyZCB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjhmNDsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjNmM2YzY7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgd2lkdGg6IDI0MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZpbGwgbWFpbiI+CiAgICAgIDxmYWNldHMtZGl2ZS1jb250cm9scyBpZD0iY29udHJvbHMiIGF0bGFzLXVybD0iW1thdGxhc1VybF1dIiBrZXlzPSJbW19rZXlzXV0iIHN0YXRzPSJbW3N0YXRzXV0iIHZlcnRpY2FsLWZhY2V0PSJ7e3ZlcnRpY2FsRmFjZXR9fSIgdmVydGljYWwtYnVja2V0cz0ie3t2ZXJ0aWNhbEJ1Y2tldHN9fSIgdmVydGljYWwtYmFnLW9mLXdvcmRzPSJ7e3ZlcnRpY2FsQmFnT2ZXb3Jkc319IiBob3Jpem9udGFsLWZhY2V0PSJ7e2hvcml6b250YWxGYWNldH19IiBob3Jpem9udGFsLWJ1Y2tldHM9Int7aG9yaXpvbnRhbEJ1Y2tldHN9fSIgaG9yaXpvbnRhbC1iYWctb2Ytd29yZHM9Int7aG9yaXpvbnRhbEJhZ09mV29yZHN9fSIgcG9zaXRpb24tbW9kZT0ie3twb3NpdGlvbk1vZGV9fSIgdmVydGljYWwtcG9zaXRpb249Int7dmVydGljYWxQb3NpdGlvbn19IiBob3Jpem9udGFsLXBvc2l0aW9uPSJ7e2hvcml6b250YWxQb3NpdGlvbn19IiBjb2xvci1ieT0ie3tjb2xvckJ5fX0iIGltYWdlLWZpZWxkLW5hbWU9Int7aW1hZ2VGaWVsZE5hbWV9fSIgcGFsZXR0ZT0iW1tfcGFsZXR0ZV1dIiBwYWxldHRlLWNob2ljZT0ie3twYWxldHRlQ2hvaWNlfX0iIGdyaWQtZmFjZXRpbmctdmVydGljYWwtbGFiZWwtY29sb3I9IltbZ3JpZEZhY2V0aW5nVmVydGljYWxMYWJlbENvbG9yXV0iIGdyaWQtZmFjZXRpbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcj0iW1tncmlkRmFjZXRpbmdIb3Jpem9udGFsTGFiZWxDb2xvcl1dIiBpdGVtLXBvc2l0aW9uaW5nLXZlcnRpY2FsLWxhYmVsLWNvbG9yPSJbW2l0ZW1Qb3NpdGlvbmluZ1ZlcnRpY2FsTGFiZWxDb2xvcl1dIiBpdGVtLXBvc2l0aW9uaW5nLWhvcml6b250YWwtbGFiZWwtY29sb3I9IltbaXRlbVBvc2l0aW9uaW5nSG9yaXpvbnRhbExhYmVsQ29sb3JdXSI+PC9mYWNldHMtZGl2ZS1jb250cm9scz4KCiAgICAgIDxkaXYgY2xhc3M9ImZpbGwgcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxsIj4KICAgICAgICAgIDxmYWNldHMtZGl2ZS12aXMgaWQ9InZpcyIgY2xhc3M9ImZpbGwiIGRhdGE9IltbZGF0YV1dIiBmaWx0ZXJlZC1kYXRhLWluZGljZXM9IltbZmlsdGVyZWREYXRhSW5kaWNlc11dIiBhdGxhcy11cmw9IltbYXRsYXNVcmxdXSIgc3ByaXRlLXVybD0iW1tzcHJpdGVVcmxdXSIgY3Jvc3Mtb3JpZ2luPSJbW2Nyb3NzT3JpZ2luXV0iIGtleXM9Int7X2tleXN9fSIgc3RhdHM9Int7c3RhdHN9fSIgc3ByaXRlLWltYWdlLXdpZHRoPSJbW3Nwcml0ZUltYWdlV2lkdGhdXSIgc3ByaXRlLWltYWdlLWhlaWdodD0iW1tzcHJpdGVJbWFnZUhlaWdodF1dIiB2ZXJ0aWNhbC1mYWNldD0iW1t2ZXJ0aWNhbEZhY2V0XV0iIHZlcnRpY2FsLWJ1Y2tldHM9IltbdmVydGljYWxCdWNrZXRzXV0iIHZlcnRpY2FsLWJhZy1vZi13b3Jkcz0iW1t2ZXJ0aWNhbEJhZ09mV29yZHNdXSIgaG9yaXpvbnRhbC1mYWNldD0iW1tob3Jpem9udGFsRmFjZXRdXSIgaG9yaXpvbnRhbC1idWNrZXRzPSJbW2hvcml6b250YWxCdWNrZXRzXV0iIGhvcml6b250YWwtYmFnLW9mLXdvcmRzPSJbW2hvcml6b250YWxCYWdPZldvcmRzXV0iIHBvc2l0aW9uLW1vZGU9IltbcG9zaXRpb25Nb2RlXV0iIHZlcnRpY2FsLXBvc2l0aW9uPSJbW3ZlcnRpY2FsUG9zaXRpb25dXSIgaG9yaXpvbnRhbC1wb3NpdGlvbj0iW1tob3Jpem9udGFsUG9zaXRpb25dXSIgY29sb3ItYnk9Int7Y29sb3JCeX19IiBpbWFnZS1maWVsZC1uYW1lPSJ7e2ltYWdlRmllbGROYW1lfX0iIHBhbGV0dGU9Int7X3BhbGV0dGV9fSIgcGFsZXR0ZS1jaG9pY2U9IltbcGFsZXR0ZUNob2ljZV1dIiBncmlkLWZhY2V0aW5nLXZlcnRpY2FsLWxhYmVsLWNvbG9yPSJ7e2dyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcn19IiBncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3I9Int7Z3JpZEZhY2V0aW5nSG9yaXpvbnRhbExhYmVsQ29sb3J9fSIgaXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcj0ie3tpdGVtUG9zaXRpb25pbmdWZXJ0aWNhbExhYmVsQ29sb3J9fSIgaXRlbS1wb3NpdGlvbmluZy1ob3Jpem9udGFsLWxhYmVsLWNvbG9yPSJ7e2l0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yfX0iIGZpdC1ncmlkLWFzcGVjdC1yYXRpby10by12aWV3cG9ydD0iW1tmaXRHcmlkQXNwZWN0UmF0aW9Ub1ZpZXdwb3J0XV0iIHNlbGVjdGVkLWRhdGE9Int7c2VsZWN0ZWREYXRhfX0iIHNlbGVjdGVkLWluZGljZXM9Int7c2VsZWN0ZWRJbmRpY2VzfX0iIGNvbXBhcmVkLWRhdGE9Int7Y29tcGFyZWREYXRhfX0iIGNvbXBhcmVkLWluZGljZXM9Int7Y29tcGFyZWRJbmRpY2VzfX0iIHN0YWJsZS1jb2xvcnM9Iltbc3RhYmxlQ29sb3JzXV0iPjwvZmFjZXRzLWRpdmUtdmlzPgoKICAgICAgICAgIDxkaXYgY2xhc3M9Inpvb20tY29udHJvbHMiPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBpZD0iem9vbUluQnV0dG9uIj4KICAgICAgICAgICAgICA8aXJvbi1pY29uIGljb249Imljb25zOmFkZCI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBpZD0iem9vbU91dEJ1dHRvbiI+CiAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJpY29uczpyZW1vdmUiPjwvaXJvbi1pY29uPgogICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgaWQ9ImZpdEJ1dHRvbiI+CiAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJpY29uczphc3BlY3QtcmF0aW8iPjwvaXJvbi1pY29uPgogICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxmYWNldHMtZGl2ZS1sZWdlbmQgaWQ9ImxlZ2VuZCIgY29sb3ItYnk9IltbY29sb3JCeV1dIiBwYWxldHRlPSJbW19wYWxldHRlXV0iPgogICAgICAgICAgPC9mYWNldHMtZGl2ZS1sZWdlbmQ+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGlkZUluZm9DYXJkXV0iPgogICAgICAgICAgPGZhY2V0cy1kaXZlLWluZm8tY2FyZCBpZD0iaW5mb0NhcmQiIHNlbGVjdGVkLWRhdGE9Iltbc2VsZWN0ZWREYXRhXV0iIGluZm8tcmVuZGVyZXI9IltbaW5mb1JlbmRlcmVyXV0iPgogICAgICAgICAgPC9mYWNldHMtZGl2ZS1pbmZvLWNhcmQ+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldy1yb3ctc3RhdHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgKiB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KICAgICAgLmRhdGEtZXJyb3IgewogICAgICAgIGNvbG9yOiByZWQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLmRhdGEtd2VpZ2h0ZWQgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAudGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQogICAgICAudGFibGUtY2VsbCB7CiAgICAgICAgbWluLXdpZHRoOiA3MHB4OwogICAgICAgIG1heC13aWR0aDogNzBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAuZGF0YS1jdXN0b20gewogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOzsKICAgICAgfQogICAgICAjbGVnZW5kLWJveCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InRhYmxlLXJvdyI+CiAgICAgIDxkaXYgaWQ9ImxlZ2VuZC1ib3giPjwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19lbnRyaWVzXV0iPgogICAgICAgIDxkaXYgY2xhc3MkPSJbW2l0ZW0uY3NzQ2xhc3NdXSB0YWJsZS1jZWxsIiB0aXRsZT0iW1tpdGVtLmZ1bGxTdHJdXSI+W1tpdGVtLnN0cl1dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC50YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2MSwxNDAsMjA3LDAuMSk7CiAgICAgICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDAuNXB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHBhZGRpbmc6IDIwcHggNHB4IDhweCAwOwogICAgICAgIG1pbi13aWR0aDogNjlweDsKICAgICAgICBtYXgtd2lkdGg6IDY5cHg7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgIH0KICAgICAgLmRhdGEtd2VpZ2h0ZWQgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAuZGF0YS1jdXN0b20gewogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgfQogICAgICAubGVnZW5kLXNwYWNlIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1yb3ciPgogICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtc3BhY2UiPjwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19lbnRyaWVzXV0iPgogICAgICAgIDxkaXYgY2xhc3MkPSJbW2l0ZW0uY3NzQ2xhc3NdXSB0YWJsZS1jZWxsIj5bW2l0ZW0uc3RyXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldy1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLnBsb3R0YWJsZS5jaGFydC1zbWFsbCB7CiAgICAgICAgaGVpZ2h0OiA0NnB4OwogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgfQogICAgICAucGxvdHRhYmxlLnhheGlzLXNtYWxsewogICAgICAgIGhlaWdodDogMzBweDsKICAgICAgICB3aWR0aDogMjUwcHg7CiAgICAgIH0KICAgICAgLnBsb3R0YWJsZS5jaGFydC1iaWcgewogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgIC5wbG90dGFibGUueGF4aXMtYmlnIHsKICAgICAgICBoZWlnaHQ6IDUwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgICNzaG93X3RhYmxlX2J1dHRvbiB7CiAgICAgICAgbWFyZ2luOiAwIDAgMCA1cHg7CiAgICAgICAgcGFkZGluZzogMCAzcHg7CiAgICAgICAgZm9udC1zaXplOiA3cHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2QzZDNkMzsKICAgICAgfQogICAgICAuZGlhbG9nLXJvdy1lbnRyeSB7CiAgICAgICAgcGFkZGluZzogMCAxMHB4IDAgMDsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7CiAgICAgIH0KICAgICAgLmRpYWxvZy1yb3csIC5kaWFsb2ctaGVhZGVyLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuZGlhbG9nLXJvdy5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2sKICAgICAgfQogICAgICAuZGlhbG9nLXJvdzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLmRpYWxvZy10YWJsZSB7CiAgICAgICAgY2xlYXI6IGxlZnQ7CiAgICAgIH0KICAgICAgLmxhYmVsLWNlbGwgewogICAgICAgIHdpZHRoOiA5MHB4OwogICAgICAgIG1heC13aWR0aDogOTBweDsKICAgICAgICBtaW4td2lkdGg6IDkwcHg7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubm9uLW92ZXJmbG93LWxhYmVsLWNlbGwgewogICAgICAgIHdpZHRoOiA5MHB4OwogICAgICAgIG1heC13aWR0aDogOTBweDsKICAgICAgICBtaW4td2lkdGg6IDkwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CiAgICAgIC5jb3VudC1jZWxsIHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMDBweDsKICAgICAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLndlaWdodGVkLWNlbGwgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAuZGF0YS1saXN0LXNtYWxsIHsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgIH0KICAgICAgLmRhdGEtbGlzdC1iaWcgewogICAgICAgIGhlaWdodDogMTgwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgIC5oaWRlY2hhcnQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNob3djaGFydCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICB9CiAgICAgICN0b29sdGlwIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLWJhY2tncm91bmQsICM2MTYxNjEpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOm5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBtYXJnaW4tbGVmdDogNTBweDsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICAgIHRvcDogMHB4OwogICAgICB9CiAgICAgIC50b3BsZXZlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InRvcGxldmVsIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1N0cmluZ0NoYXJ0KF9jaGFydFR5cGUsIGNoYXJ0U2VsZWN0aW9uKV1dIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzaG93X3RhYmxlX2J1dHRvbiIgb24tY2xpY2s9Il90b2dnbGVTaG93VGFibGUiPltbX2dldFNob3dUYWJsZUJ1dHRvblRleHQoX3Nob3dUYWJsZSldXTwvcGFwZXItYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY2hhcnRDbGFzc11dIj4KICAgICAgICA8ZGl2IGlkPSJjaGFydCIgY2xhc3MkPSJbW19jaGFydFN2Z0NsYXNzXV0iPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InhheGlzIiBjbGFzcyQ9IltbX3hBeGlzU3ZnQ2xhc3NdXSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nob3dUYWJsZV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGFibGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWhlYWRlci1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctcm93LWVudHJ5IHRhYmxlLWhlYWRlciBsYWJlbC1jZWxsIj5WYWx1ZTwvZGl2PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2RhdGFdXSIgYXM9ImRhdGEiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1yb3ctZW50cnkgdGFibGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vbi1vdmVyZmxvdy1sYWJlbC1jZWxsIj5bW2RhdGEubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxpcm9uLWxpc3QgaXRlbXM9IltbX3RhYmxlRGF0YV1dIiBhcz0iZW50cnkiIGNsYXNzJD0iW1tfdGFibGVEYXRhQ2xhc3NdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0RW50cnlSb3dDbGFzcyhlbnRyeSwgc2VsZWN0aW9uKV1dIiBvbi10YXA9Il9yb3dDbGljayIgZGF0YS12YWx1ZT0iW1tfZ2V0RW50cnlSb3dWYWx1ZShlbnRyeSldXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctcm93LWVudHJ5IGxhYmVsLWNlbGwiPltbZW50cnkudmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tlbnRyeS5jb3VudHNdXSIgYXM9ImNvdW50Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbX2dldENvdW50Q2VsbENsYXNzKHNob3dXZWlnaHRlZCldXSI+W1tjb3VudF1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPGlyb24tbGlzdD4KICAgICAgICA8L2lyb24tbGlzdD48L2lyb24tbGlzdD48L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJmYWNldHMtb3ZlcnZpZXctdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgICAuZmVhdHVyZS1uYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1heC13aWR0aDogNDgwcHg7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIG1hcmdpbjogMCAwIDRweCA0cHg7CiAgICAgIH0KICAgICAgLnRhYmxlLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgd29yZC13cmFwOmJyZWFrLXdvcmQ7CiAgICAgICAgcGFkZGluZzogNHB4IDAgNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDYxLDE0MCwyMDcsMC4zKTsKICAgICAgICBib3JkZXI6IHNvbGlkIDAuNXB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgfQogICAgICAuZmVhdHVyZS1pcm9uLWxpc3QgewogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgICAgIGhlaWdodDogODAwcHg7CiAgICAgIH0KICAgICAgLmNoYXJ0LWNvbHVtbiB7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICAgIG1pbi13aWR0aDogMjgwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICAgIC5jaGFydC1jb2x1bW4uaGVhZGVyLWNlbGwgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNjEsMTQwLDIwNywwLjEpOwogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDAuNXB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgICAgIH0KICAgICAgLm51bWVyaWMtcm93IHsKICAgICAgICBtaW4taGVpZ2h0OiA4MHB4OwogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQogICAgICAuY2F0ZWdvcmljYWwtcm93IHsKICAgICAgICBtaW4taGVpZ2h0OiA5OHB4OwogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQogICAgICAudGFibGUtY2VsbCB7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yZW07CiAgICAgIH0KICAgICAgLmNoYXJ0LWNvbHVtbi50YWJsZS1jZWxsIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgICAgcGFkZGluZzogMTBweCAwIDAgMjBweAogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgfQogICAgICAuaGVhZGVyLWNlbGwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiA2MHB4OwogICAgICB9CiAgICAgIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXNpemU6IDEycHg7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nOiAycHg7CiAgICAgIH0KICAgICAgLmNvbnRyb2wtaG9sZGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5jaGVja2JveC1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDJweDsKICAgICAgfQogICAgICAuY2hhcnQtY2hlY2tib3ggewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgICAgI3dlaWdodGJveCB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbCAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgfQogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldFRhYmxlV3JhcHBlckNsYXNzKGZlYXR1cmVzKV1dIj4KICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWNlbGwgdGFibGUtY2VsbCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1uYW1lIj5bW19nZXRUaXRsZShudW1lcmljKV1dIEZlYXR1cmVzIChbW19nZXRGZWF0dXJlQ291bnRUZXh0KGRhdGFNb2RlbCwgbnVtZXJpYywgZmVhdHVyZXMpXV0pCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxmYWNldHMtb3ZlcnZpZXctcm93LWxlZ2VuZCBudW1lcmljPSJbW251bWVyaWNdXSIgc2hvdy13ZWlnaHRlZD0iW1tfc2hvd1dlaWdodGVkXV0iIGhhcy1jdXN0b209IltbX2hhc0N1c3RvbVN0YXRzKGRhdGFNb2RlbCldXSIgZGF0YS1tb2RlbD0iW1tkYXRhTW9kZWxdXSI+CiAgICAgICAgICA8L2ZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwgY2hhcnQtY29sdW1uIGhlYWRlci1jZWxsIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IkNoYXJ0IHRvIHNob3ciPgogICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tfY2hhcnRTZWxlY3Rpb259fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NoYXJ0U2VsZWN0aW9uVHlwZXNdXSI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJbW2l0ZW1dXSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ob2xkZXIiPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0iY2hhcnQtY2hlY2tib3giIGlkPSJsb2dib3giIGNoZWNrZWQ9Int7X2xvZ1NjYWxlfX0iPmxvZzwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJjaGFydC1jaGVja2JveCIgaWQ9ImV4cGFuZGJveCIgY2hlY2tlZD0ie3tfZXhwYW5kQ2hhcnRzfX0iPmV4cGFuZDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNXZWlnaHRlZEhpc3RvZ3JhbShmZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9ImNoYXJ0LWNoZWNrYm94IiBpZD0id2VpZ2h0Ym94IiBjaGVja2VkPSJ7e19zaG93V2VpZ2h0ZWR9fSI+d2VpZ2h0ZWQ8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZURhdGFzZXRzKGRhdGFNb2RlbCldXSI+CiAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9ImNoYXJ0LWNoZWNrYm94IiBpZD0icGVyY2VudGJveCIgY2hlY2tlZD0ie3tfc2hvd1BlcmNlbnRhZ2V9fSIgZGlzYWJsZWQ9IltbX2NoYXJ0U2VsZWN0aW9uSGFzUXVhbnRpbGVzKF9jaGFydFNlbGVjdGlvbildXSI+cGVyY2VudGFnZXM8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1saXN0IGl0ZW1zPSJbW2ZlYXR1cmVzXV0iIGFzPSJmZWF0dXJlIiBjbGFzcz0iZmVhdHVyZS1pcm9uLWxpc3QiPgogICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW19nZXRUYWJsZVJvd0NsYXNzKG51bWVyaWMpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUiPltbX2dldEZlYXR1cmVOYW1lKGZlYXR1cmUpXV08L2Rpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19nZXREYXRhc2V0cyhkYXRhTW9kZWwpXV0iIGFzPSJkYXRhc2V0IiBpbmRleC1hcz0iZGF0YXNldEluZGV4Ij4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDxmYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzIHN0YXRzPSJbW19nZXRTdGF0cyhkYXRhTW9kZWwsIGRhdGFzZXQsIGZlYXR1cmUpXV0iIGN1c3RvbS1zdGF0cz0iW1tfZ2V0QWxsQ3VzdG9tU3RhdHMoZGF0YU1vZGVsLCBmZWF0dXJlKV1dIiBzaG93LXdlaWdodGVkPSJbW19zaG93V2VpZ2h0ZWRdXSIgaGFzLWN1c3RvbT0iW1tfaGFzQ3VzdG9tU3RhdHMoZGF0YU1vZGVsKV1dIiBkYXRhLW1vZGVsPSJbW2RhdGFNb2RlbF1dIiBkYXRhc2V0LWluZGV4PSJbW2RhdGFzZXRJbmRleF1dIiBjb21wYXJlLW1vZGU9IltbY29tcGFyZU1vZGVdXSI+CiAgICAgICAgICAgICAgICAgIDwvZmFjZXRzLW92ZXJ2aWV3LXJvdy1zdGF0cz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0Q2hhcnRDbGFzcyhfZXhwYW5kQ2hhcnRzKV1dIj4KICAgICAgICAgICAgICA8ZmFjZXRzLW92ZXJ2aWV3LWNoYXJ0IGRhdGE9IltbX2dldENoYXJ0RGF0YShkYXRhTW9kZWwsIGZlYXR1cmUpXV0iIGRhdGEtbW9kZWw9IltbZGF0YU1vZGVsXV0iIGZlYXR1cmU9IltbX2dldEZlYXR1cmVOYW1lKGZlYXR1cmUpXV0iIHNlbGVjdGlvbj0ie3tmZWF0dXJlU2xpY2VTZWxlY3Rpb259fSIgbG9nLXNjYWxlPSJbW19sb2dTY2FsZV1dIiBzaG93LXdlaWdodGVkPSJbW19zaG93V2VpZ2h0ZWRdXSIgc2hvdy1wZXJjZW50YWdlPSJbW19zaG93UGVyY2VudGFnZV1dIiBjaGFydC1zZWxlY3Rpb249IltbX2NoYXJ0U2VsZWN0aW9uXV0iIGV4cGFuZC1jaGFydD0iW1tfZXhwYW5kQ2hhcnRzXV0iPgogICAgICAgICAgICAgIDwvZmFjZXRzLW92ZXJ2aWV3LWNoYXJ0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaXJvbi1saXN0PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLW92ZXJ2aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlCiAgICAgICAgZm9udC1zaXplOiAxMHB0OwogICAgICB9CiAgICAgIC5jb250cm9scyB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzQsMjM0LDIzNCwwLjIpOwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuNXB4IHJnYmEoMCwwLDAsMC4yKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogNjBweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CgogICAgICB9CiAgICAgIC5mZWF0dXJlLWNoZWNrYm94ZXMgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM0LDIzNCwyMzQsMC4yKTsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMik7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgcGFkZGluZzogIDhweCAwIDhweCAyMHB4OwogICAgICB9CiAgICAgIC5mZWF0dXJlLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBhZGRpbmc6IDAgMCAwIDE2cHg7CiAgICAgIH0KICAgICAgcGFwZXItY2hlY2tib3ggewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICAuaW5wdXQtY29udHJvbCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9OwogICAgICB9CiAgICAgIC5mZWF0dXJlcy10ZXh0IHsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBwYWRkaW5nOiAxcHggMCAwIDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5sZWZ0LWRyb3Bkb3duIHsKICAgICAgICBwYWRkaW5nOiAwIDEwcHggMCAwOwogICAgICB9CiAgICAgIC5taWRkbGUtY2hlY2tib3ggewogICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgICAgcGFkZGluZzogMCAxMHB4OwogICAgICB9CiAgICAgIC5yaWdodC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDMwMHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTBweDsKICAgICAgfQogICAgICAuZmVhdHVyZS1pcm9uLWxpc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDgwMHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CiAgICAgIC5mZWF0dXJlLWNvbHVtbiB7CiAgICAgICAgd2lkdGg6IDIwMHB4OwogICAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5sZWdlbmQtY29sdW1uIHsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgIH0KICAgICAgLnN0YXRzLWNvbHVtbiB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIG1heC13aWR0aDogMTUwcHg7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgICAuY2hhcnQtY29sdW1uIHsKICAgICAgICB3aWR0aDogNTgwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICAgIC50YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQogICAgICAudGFibGUtY2VsbCB7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHBhZGRpbmc6IDEwcHggNXB4IDAKICAgICAgfQogICAgICAuY2hhcnQtY29sdW1uLnRhYmxlLWNlbGwgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDAgMCAyMHB4CiAgICAgIH0KICAgICAgLmhlYWRlci1yb3cgewogICAgICAgIGNsZWFyOiBib3RoOwogICAgICB9CiAgICAgIC5oZWFkZXItcm93ID4gLnRhYmxlLWNlbGwgewogICAgICAgIGZvbnQtc2l6ZTogMTRwdDsKICAgICAgICBwYWRkaW5nOiAwIDVweCAwOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsKICAgICAgfQogICAgICAuc3RhdHMtaGVhZGVyLXRleHQgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICAgIC5jaGFydC1oZWFkZXItdGV4dCB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICAgIC50YWJsZS1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHg7CiAgICAgIH0KICAgICAgLnRhYmxlLWxlZnQgewogICAgICAgIG1hcmdpbjogMjBweCAyMHB4IDAgMDsKICAgICAgfQogICAgICAudGFibGUtcmlnaHQgewogICAgICAgIG1hcmdpbjogMjBweCAwIDAgMDsKICAgICAgfQogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIG1hcmdpbjogOHB4IDAgMCAzOHB4OwogICAgICB9CiAgICAgIC5sZWdlbmQtYm94IHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgfQogICAgICAubGVnZW5kLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAubGVnZW5kLW5hbWUgewogICAgICAgIG1hcmdpbjogM3B4IDEwcHggMCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CiAgICAgIC8qIEdpdmUgbWluIGhlaWdodCB0byBwbGFjZWhvbGRlciBpbiBwYXBlci1pbnB1dCB0byBnZXQgYXJvdW5kIGNvbGFiIGVtYmVkZGluZwogICAgICAgKiBhbGlnbm1lbnQgaXNzdWUuCiAgICAgICAqLwogICAgICA6aG9zdCBwYXBlci1pbnB1dC1jb250YWluZXIgPiAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgbWluLWhlaWdodDogMjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU1vZGVsXV0iPgogICAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0Q29udHJvbHNXcmFwcGVyQ2xhc3MoX2RhdGFNb2RlbCldXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgY2xhc3M9ImxlZnQtZHJvcGRvd24gaW5wdXQtY29udHJvbCIgbGFiZWw9IlNvcnQgYnkiPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7X3NvcnRPcmRlcn19IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zb3J0T3B0aW9uc11dIiBhcz0ib3B0aW9uIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbb3B0aW9uLm5hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8cGFwZXItY2hlY2tib3ggbm9pbmsgY2xhc3M9Im1pZGRsZS1jaGVja2JveCIgY2hlY2tlZD0ie3tfcmV2ZXJzZU9yZGVyfX0iPgogICAgICAgICAgICBSZXZlcnNlIG9yZGVyCiAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPHBhcGVyLWlucHV0IGNsYXNzPSJyaWdodC1pbnB1dCBpbnB1dC1jb250cm9sIiBsYWJlbD0iRmVhdHVyZSBzZWFyY2ggKHJlZ2V4IGVuYWJsZWQpIiB2YWx1ZT0ie3tzZWFyY2hTdHJpbmd9fSIgYXV0by12YWxpZGF0ZT0idHJ1ZSIgdmFsaWRhdG9yPSJmaWx0ZXItdmFsaWRhdG9yIj4KICAgICAgICAgICAgPGZhY2V0cy1vdmVydmlldy1maWx0ZXItdmFsaWRhdG9yIHZhbGlkYXRvci1uYW1lPSJmaWx0ZXItdmFsaWRhdG9yIj4KICAgICAgICAgICAgPC9mYWNldHMtb3ZlcnZpZXctZmlsdGVyLXZhbGlkYXRvcj4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1jaGVja2JveGVzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmVzLXRleHQiPkZlYXR1cmVzOiA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2ZlYXR1cmVTcGVjQXJyYXldXSIgYXM9InNwZWNBbmRMaXN0Ij4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBub2luayBjaGVja2VkPSJ0cnVlIiBjbGFzcz0iZmVhdHVyZS1jaGVja2JveCIgaWQ9IltbX2dldFNwZWNDaGVja2JveElkKHNwZWNBbmRMaXN0KV1dIiBvbi1jaGFuZ2U9Il9mZWF0dXJlU3BlY0NoZWNrIj4KICAgICAgICAgICAgICBbW19nZXRTcGVjQ2hlY2tib3hUZXh0KHNwZWNBbmRMaXN0KV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZURhdGFzZXRzKF9kYXRhTW9kZWwpXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1ob2xkZXIiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZ2V0RGF0YXNldHMoX2RhdGFNb2RlbCldXSIgYXM9ImRhdGFzZXQiIGluZGV4LWFzPSJkYXRhc2V0SW5kZXgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtcm93Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtYm94IiBzdHlsZT0iW1tfZ2V0TGVnZW5kQm94U3R5bGUoX2RhdGFNb2RlbCwgZGF0YXNldEluZGV4KV1dIj48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtbmFtZSI+W1tfZ2V0RGF0YXNldE5hbWUoX2RhdGFNb2RlbCwgZGF0YXNldEluZGV4KV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGFibGUtaG9sZGVyIj4KICAgICAgICA8ZmFjZXRzLW92ZXJ2aWV3LXRhYmxlIGZlYXR1cmVzPSJbW19nZXROdW1lcmljRmVhdHVyZUxpc3RJdGVtcyhfZGF0YU1vZGVsLCBzZWFyY2hTdHJpbmcsIF9zb3J0T3JkZXIsIF9yZXZlcnNlT3JkZXIsIF9mZWF0dXJlU3BlY0NoZWNrYm94ZXMpXV0iIGRhdGEtbW9kZWw9IltbX2RhdGFNb2RlbF1dIiBmZWF0dXJlLXNsaWNlLXNlbGVjdGlvbj0ie3tmZWF0dXJlU2xpY2VTZWxlY3Rpb259fSIgbnVtZXJpYz0idHJ1ZSIgY2xhc3M9InRhYmxlLWxlZnQiIGNvbXBhcmUtbW9kZT0iW1tjb21wYXJlTW9kZV1dIj4KICAgICAgICA8L2ZhY2V0cy1vdmVydmlldy10YWJsZT4KICAgICAgICA8ZmFjZXRzLW92ZXJ2aWV3LXRhYmxlIGZlYXR1cmVzPSJbW19nZXROb25OdW1lcmljRmVhdHVyZUxpc3RJdGVtcyhfZGF0YU1vZGVsLCBzZWFyY2hTdHJpbmcsIF9zb3J0T3JkZXIsIF9yZXZlcnNlT3JkZXIsIF9mZWF0dXJlU3BlY0NoZWNrYm94ZXMpXV0iIGRhdGEtbW9kZWw9IltbX2RhdGFNb2RlbF1dIiBmZWF0dXJlLXNsaWNlLXNlbGVjdGlvbj0ie3tmZWF0dXJlU2xpY2VTZWxlY3Rpb259fSIgY2xhc3M9InRhYmxlLXJpZ2h0IiBjb21wYXJlLW1vZGU9IltbY29tcGFyZU1vZGVdXSI+CiAgICAgICAgPC9mYWNldHMtb3ZlcnZpZXctdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idnotZXhhbXBsZS12aWV3ZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpZD0ibGludGVyLXBhcGVyLWJ1dHRvbi1zdHlsZSI+CiAgICAgIC8qKgogICAgICAgKiBUaGlzIHN0eWxlIHByZXNlcnZlcyB0aGUgc3R5bGluZyBwcmV2aW91cyB0bwogICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vUG9seW1lckVsZW1lbnRzL3BhcGVyLWJ1dHRvbi9wdWxsLzExNQogICAgICAgKiBUaGlzIGNoYW5nZSBjYW4gYnJlYWsgdGhlIGxheW91dCBvZiBwYXBlci1idXR0b24gY29udGVudC4KICAgICAgICogUmVtb3ZlIHRoaXMgc3R5bGUgdG8gYXBwbHkgdGhlIGNoYW5nZSwgbW9yZSBkZXRhaWxzIGF0IGIvNzA1MjgzNTYuCiAgICAgICAqLwogICAgICBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnNlcS1mZWF0IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgfQoKICAgICAgLnZhbHVlLWxpc3QgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc2xpZGVyLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLnNsaWRlci1sYWJlbCB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5vdXRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC5pbWFnZSB7CiAgICAgICAgLyogPGltZz4gZWxlbWVudHMgYXJlIHVzZWQgdG8gbG9hZCB0byBhIGNhbnZhcyBzbyB0aGV5IGFyZW4ndCBkaXNwbGF5ZWQuICovCiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmZsZXgtY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAudmFsdWUtcGlsbHMtaG9sZGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1iYXNpczogMTAwJTsKICAgICAgfQoKICAgICAgaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2ZmZmZmZjsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgIH0KCiAgICAgIGlyb24tYXV0b2dyb3ctdGV4dGFyZWEudmFsdWUtc2FtZSB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgIH0KCiAgICAgIGlyb24tYXV0b2dyb3ctdGV4dGFyZWEudmFsdWUtZGlmZmVyZW50IHsKICAgICAgICBjb2xvcjogIzM0YTg1MzsKICAgICAgICAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE6IHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgfQogICAgICB9CgogICAgICAudmFsdWUtcGlsbCB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBtYXJnaW46IDRweDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICB9CgogICAgICAudmFsdWUtcGlsbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgfQoKICAgICAgLnZhbHVlLXBpbGxbZm9jdXNlZF0gewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZmViM2I7CiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgfQoKICAgICAgLnZhbHVlLWNvbXBhcmUgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgfQoKICAgICAgLnZhbHVlLXBpbGwtc3RhY2tlZCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiA0cHggNHB4IDRweCAwOwogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgfQoKICAgICAgLnZhbHVlLXBpbGwtZ3JpZCB7CiAgICAgICAgd2lkdGg6IDEyMHB4OwogICAgICAgIG1hcmdpbjogNHB4IDhweCA0cHggMDsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtbmFtZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDRweDsKICAgICAgICBtYXJnaW46IDRweCAyMHB4IDRweCA4cHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICB9CgogICAgICAuZmVhdHVyZS1uYW1lLXRleHQgewogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLW5hbWUtaGVhZGVyLXRleHQgewogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgY29sb3I6ICMyMDIxMjQ7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAuZmVhdHVyZS1uYW1lLmZlYXR1cmUtbmFtZS1oZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDRweCA0cHggMHB4IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhOwogICAgICAgIG1hcmdpbjogMHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZThlYWVkOwogICAgICB9CgogICAgICAuc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1pbnB1dDogewogICAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmhpZGUtY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5pbmRlbnQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxNnB4OwogICAgICB9CgogICAgICAuc2NhbGUtbGFiZWwgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICB9CgogICAgICAud2luZG93aW5nLWxhYmVsIHsKICAgICAgICB3aWR0aDogMTEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5leHBhbmQtYnV0dG9uLWhvbGRlciB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQoKICAgICAgLmRlbGV0ZS12YWx1ZS1idXR0b24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZlNjAzOwogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAyNHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7CiAgICAgIH0KCiAgICAgIC5kZWxldGUtdmFsdWUtYnV0dG9uLmRlbGV0ZS12YWx1ZS1idXR0b24taGlkZGVuIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zLCB2aXNpYmlsaXR5IDIwMG1zOwogICAgICB9CgogICAgICAuZGVsZXRlLWZlYXR1cmUtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMHB4OwogICAgICB9CgogICAgICAuYWRkLXZhbHVlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWluLXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgY29sb3I6ICM4MDg2OGI7CiAgICAgIH0KCiAgICAgIC5hZGQtZmVhdHVyZS1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgIC51cGxvYWQtaW1hZ2UtYnV0dG9uIHsKICAgICAgICBtYXJnaW46IDAgMCAwIDVweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC5pbWFnZWNhcmQgewogICAgICAgIG1hcmdpbjogNHB4OwogICAgICB9CgogICAgICAuaW1hZ2Utc2NhbGUtYnV0dG9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIC5zYWxpZW5jeS1sZWdlbmQtbGFiZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtZGlhbG9nIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWRpYWxvZy1idXR0b24gewogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5pbWFnZS1ib3R0b20tYmFyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAjM2M0MDQzOwogICAgICB9CgogICAgICAuaW1hZ2UtdXBsb2FkLWlucHV0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuc3BhY2UtZm9yLW1vcmUtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnZhbHVlLWhlYWRlci10ZXh0IHsKICAgICAgICBtaW4td2lkdGg6IDEzMHB4OwogICAgICAgIHdpZHRoOiAxMzBweDsKICAgICAgICBjb2xvcjogIzIwMjEyNDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RhZGNlMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b25bZGlzYWJsZWRdIHsKICAgICAgICBjb2xvcjogI2RhZGNlMDsKICAgICAgfQoKICAgICAgLnZhbHVlLXRleHQgewogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZmZlYjNiOwogICAgICB9CgogICAgICAuY29tcGFyZS12YWx1ZS10ZXh0IHsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzM0YTg1MzsKICAgICAgfQoKICAgICAgLm5vLWNvbXBhcmUtdmFsdWUtdGV4dCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9Im91dGVyIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dTZWFyY2hCb3hdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0IHZhbHVlPSJ7e2ZlYXR1cmVTZWFyY2hWYWx1ZX19IiBsYWJlbD0iU2VhcmNoIiBjbGFzcz0iZmlsdGVyLWlucHV0IiBuby1sYWJlbC1mbG9hdD4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6c2VhcmNoIiBwcmVmaXg+PC9pcm9uLWljb24+CiAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIGZlYXR1cmUtbmFtZS1oZWFkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbmFtZS1oZWFkZXItdGV4dCI+RmVhdHVyZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciBmbGV4LWNvbnRyb2xzIHZhbHVlLWhlYWRlci10ZXh0Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXRleHQiPlZhbHVlKHMpPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtcGlsbHMtaG9sZGVyIGZsZXgtY29udHJvbHMgdmFsdWUtaGVhZGVyLXRleHQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRDb21wYXJlSGVhZGVyQ2xhc3MoaGlnaGxpZ2h0RGlmZmVyZW5jZXMpXV0iPgogICAgICAgICAgICAgIFtbY29tcGFyZVRpdGxlXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLWZvci1tb3JlLWJ1dHRvbiI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2ZpbHRlcmVkRmVhdHVyZXNMaXN0XV0iIGFzPSJmZWF0Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXNJbWFnZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICA8cGFwZXItY2FyZCBpZD0iW1tnZXRJbWFnZUNhcmRJZChmZWF0Lm5hbWUpXV0iIGNsYXNzPSJpbWFnZWNhcmQiPgogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0SW1hZ2VTcmMoZmVhdC5uYW1lKV1dIiBpZD0iW1tnZXRJbWFnZUlkKGZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENhbnZhc0lkKGZlYXQubmFtZSldXSIgZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93SW1hZ2VDb250cm9scyhoYXNJbWFnZSwgYWxsb3dJbWFnZUNvbnRyb2xzKV1dIj4KICAgICAgICAgICAgICAgICAgPGRpdj5JbWFnZSB3aW5kb3dpbmcgKGNvbnRyYXN0KTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItaG9sZGVyIGluZGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWxhYmVsIHdpbmRvd2luZy1sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgY2VudGVyOgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iMjU1IiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93Q2VudGVyfX0iIHZhbHVlPSJbW3dpbmRvd0NlbnRlcl1dIj4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1ob2xkZXIgaW5kZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwgd2luZG93aW5nLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3aWR0aDoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyIGNsYXNzPSJzbGlkZXIiIGVkaXRhYmxlPSJ0cnVlIiBtYXg9IjUxMiIgbWluPSIxIiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93V2lkdGh9fSIgdmFsdWU9Iltbd2luZG93V2lkdGhdXSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzY2FsZS1sYWJlbCI+SW1hZ2Ugc2NhbGUgcGVyY2VudGFnZTo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwIiBtYXg9IjUwMCIgdmFsdWU9Int7aW1hZ2VTY2FsZVBlcmNlbnRhZ2V9fSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpbWFnZS1zY2FsZS1idXR0b24iIG9uLWNsaWNrPSJ1cGRhdGVJbWFnZXMiPgogICAgICAgICAgICAgICAgICAgICAgc2V0CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWJvdHRvbS1iYXIiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3MkPSJbW2dldFVwbG9hZEltYWdlQ2xhc3MocmVhZG9ubHkpXV0iIGljb249ImZpbGUtdXBsb2FkIiBvbi1jbGljaz0idXBsb2FkSW1hZ2VDbGlja2VkIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIHRpdGxlPSJVcGxvYWQgaW1hZ2UiPgogICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgY2xhc3M9ImltYWdlLXVwbG9hZC1pbnB1dCIgdHlwZT0iZmlsZSIgb24tY2hhbmdlPSJoYW5kbGVJbWFnZVVwbG9hZCIgZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIiBkYXRhLWluZGV4PSJbW2luZGV4XV0iPgogICAgICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItY2FyZCBpZD0iW1tnZXRDb21wYXJlSW1hZ2VDYXJkSWQoZmVhdC5uYW1lKV1dIiBjbGFzcz0iaW1hZ2VjYXJkIj4KICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0Q29tcGFyZUltYWdlU3JjKGZlYXQubmFtZSldXSIgaWQ9IltbZ2V0Q29tcGFyZUltYWdlSWQoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0iW1tnZXRDb21wYXJlQ2FudmFzSWQoZmVhdC5uYW1lKV1dIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1ib3R0b20tYmFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvcGFwZXItY2FyZD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIiBvbi1jbGljaz0iZmVhdHVyZU1vcmVDbGlja2VkIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgaWQ9IltbZ2V0RmVhdHVyZURpYWxvZ0lkKGZlYXQubmFtZSldXSIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtZGlhbG9nIj4KICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24gZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIiBvbi1jbGljaz0iZGVsZXRlRmVhdHVyZSIgY2xhc3M9ImZlYXR1cmUtZGlhbG9nLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgIERlbGV0ZSBmZWF0dXJlCiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaXNJbWFnZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1jb250cm9scyB2YWx1ZS1waWxscy1ob2xkZXIiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKGZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRGZWF0dXJlVmFsdWVzKGZlYXQubmFtZSldXSIgYXM9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKGZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbaW5kZXhdXSIgdmFsdWU9IltbdmFsdWVdXSI+CiAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICA8aXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSBjbGFzcyQ9IltbZ2V0SW5wdXRQaWxsQ2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIG9uLWlucHV0PSJvblZhbHVlQ2hhbmdlZCIgb24tZm9jdXM9Im9uSW5wdXRGb2N1cyIgb24tYmx1cj0ib25JbnB1dEJsdXIiIGRhdGEtZmVhdHVyZT0iW1tmZWF0Lm5hbWVdXSIgZGF0YS1pbmRleD0iW1t6ZXJvSW5kZXhdXSIgdmFsdWU9IltbZ2V0Rmlyc3RGZWF0dXJlVmFsdWUoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tmZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXMoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJleHBhbmRGZWF0dXJlIiBjbGFzcyQ9IltbZ2V0SW5wdXRQaWxsQ2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSI+CiAgICAgICAgICAgICAgICAgICAgLi4uCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udHJvbHMgdmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKGZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldENvbXBhcmVGZWF0dXJlVmFsdWVzKGZlYXQubmFtZSldXSIgYXM9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSBjbGFzcyQ9IltbZ2V0Q29tcGFyZUlucHV0Q2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSwgaW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW3ZhbHVlXV0iPgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzJD0iW1tnZXRDb21wYXJlSW5wdXRDbGFzcyhmZWF0Lm5hbWUsIGRpc3BsYXlNb2RlLCB6ZXJvSW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW2dldEZpcnN0Q29tcGFyZUZlYXR1cmVWYWx1ZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgICAgICAgICA8L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb21wYXJlRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzKGZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJleHBhbmRGZWF0dXJlIiBjbGFzcyQ9IltbZ2V0Q29tcGFyZUlucHV0Q2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ibW9yZS1ob3JpeiIgY2xhc3MkPSJbW2dldEFkZFZhbHVlQnV0dG9uQ2xhc3MocmVhZG9ubHkpXV0iIG9uLWNsaWNrPSJmZWF0dXJlTW9yZUNsaWNrZWQiIGRhdGEtZmVhdHVyZT0iW1tmZWF0Lm5hbWVdXSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBpZD0iW1tnZXRGZWF0dXJlRGlhbG9nSWQoZmVhdC5uYW1lKV1dIiBob3Jpem9udGFsLWFsaWduPSJyaWdodCIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ciPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ctYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgRGVsZXRlIGZlYXR1cmUKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJhZGRWYWx1ZSIgY2xhc3M9ImZlYXR1cmUtZGlhbG9nLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgIEFkZCBmZWF0dXJlIHZhbHVlCiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXNTZXFFeGFtcGxlKG1heFNlcU51bWJlcildXSI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWhvbGRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwiPlNlcXVlbmNlIE51bWJlcjo8L2Rpdj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iW1ttYXhTZXFOdW1iZXJdXSIgdmFsdWU9Int7c2VxTnVtYmVyfX0iPgogICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tmaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdF1dIiBhcz0ic2VxZmVhdCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZXFmZWF0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzSW1hZ2Uoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbc2VxZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1jYXJkIGlkPSJbW2dldEltYWdlQ2FyZElkKHNlcWZlYXQubmFtZSldXSIgY2xhc3M9ImltYWdlY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0U2VxSW1hZ2VTcmMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iIGlkPSJbW2dldEltYWdlSWQoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENhbnZhc0lkKHNlcWZlYXQubmFtZSldXSIgZGF0YS1mZWF0dXJlPSJbW3NlcWZlYXQubmFtZV1dIiBkYXRhLXNlcS1udW09Iltbc2VxTnVtYmVyXV0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93SW1hZ2VDb250cm9scyhoYXNJbWFnZSwgYWxsb3dJbWFnZUNvbnRyb2xzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5JbWFnZSB3aW5kb3dpbmcgKGNvbnRyYXN0KTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItaG9sZGVyIGluZGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWxhYmVsIHdpbmRvd2luZy1sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgY2VudGVyOgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iMjU1IiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93Q2VudGVyfX0iIHZhbHVlPSJbW3dpbmRvd0NlbnRlcl1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1ob2xkZXIgaW5kZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwgd2luZG93aW5nLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3aWR0aDoKICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyIGNsYXNzPSJzbGlkZXIiIGVkaXRhYmxlPSJ0cnVlIiBtYXg9IjUxMiIgbWluPSIxIiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93V2lkdGh9fSIgdmFsdWU9Iltbd2luZG93V2lkdGhdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzY2FsZS1sYWJlbCI+SW1hZ2Ugc2NhbGUgcGVyY2VudGFnZTo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwIiBtYXg9IjUwMCIgdmFsdWU9Int7aW1hZ2VTY2FsZVBlcmNlbnRhZ2V9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpbWFnZS1zY2FsZS1idXR0b24iIG9uLWNsaWNrPSJ1cGRhdGVJbWFnZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1ib3R0b20tYmFyIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcyQ9IltbZ2V0VXBsb2FkSW1hZ2VDbGFzcyhyZWFkb25seSldXSIgaWNvbj0iZmlsZS11cGxvYWQiIG9uLWNsaWNrPSJ1cGxvYWRJbWFnZUNsaWNrZWQiIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgdGl0bGU9IlVwbG9hZCBpbWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGNsYXNzPSJpbWFnZS11cGxvYWQtaW5wdXQiIHR5cGU9ImZpbGUiIG9uLWNoYW5nZT0iaGFuZGxlSW1hZ2VVcGxvYWQiIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgZGF0YS1pbmRleD0iW1tpbmRleF1dIiBkYXRhLXNlcS1udW09Iltbc2VxTnVtYmVyXV0iPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY29tcGFyZU1vZGVdXSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWNhcmQgaWQ9IltbZ2V0Q29tcGFyZUltYWdlQ2FyZElkKHNlcWZlYXQubmFtZSldXSIgY2xhc3M9ImltYWdlY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJpbWFnZSIgc3JjJD0iW1tnZXRDb21wYXJlU2VxSW1hZ2VTcmMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iIGlkPSJbW2dldENvbXBhcmVJbWFnZUlkKHNlcWZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENvbXBhcmVDYW52YXNJZChzZXFmZWF0Lm5hbWUpXV0iIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgZGF0YS1zZXEtbnVtPSJbW3NlcU51bWJlcl1dIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWJvdHRvbS1iYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItY2FyZD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICBEZWxldGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzSW1hZ2Uoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbc2VxZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udHJvbHMgdmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzRXhwYW5kZWQoc2VxZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRTZXFGZWF0dXJlVmFsdWVzKHNlcWZlYXQubmFtZSwgc2VxTnVtYmVyKV1dIiBhcz0ic2VxdmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbaW5kZXhdXSIgZGF0YS1zZXEtbnVtPSJbW3NlcU51bWJlcl1dIiB2YWx1ZT0iW1tzZXF2YWx1ZV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoc2VxZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbemVyb0luZGV4XV0iIGRhdGEtc2VxLW51bT0iW1tzZXFOdW1iZXJdXSIgdmFsdWU9IltbZ2V0Rmlyc3RTZXFGZWF0dXJlVmFsdWUoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2VxRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzKHNlcWZlYXQubmFtZSwgc2VxTnVtYmVyKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24gZGF0YS1mZWF0dXJlPSJbW3NlcWZlYXQubmFtZV1dIiBvbi1jbGljaz0iZXhwYW5kRmVhdHVyZSIgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb21wYXJlTW9kZV1dIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1jb250cm9scyB2YWx1ZS1waWxscy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKHNlcWZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRDb21wYXJlU2VxRmVhdHVyZVZhbHVlcyhzZXFmZWF0Lm5hbWUsIHNlcU51bWJlcildXSIgYXM9InNlcXZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldFNlcUNvbXBhcmVJbnB1dENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUsIHNlcU51bWJlciwgaW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW3NlcXZhbHVlXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFpc0V4cGFuZGVkKHNlcWZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldFNlcUNvbXBhcmVJbnB1dENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUsIHNlcU51bWJlciwgemVyb0luZGV4KV1dIiByZWFkb25seSB2YWx1ZT0iW1tnZXRGaXJzdENvbXBhcmVTZXFGZWF0dXJlVmFsdWUoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWF1dG9ncm93LXRleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVTZXFGZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgb24tY2xpY2s9ImV4cGFuZEZlYXR1cmUiIGNsYXNzJD0iW1tnZXRTZXFDb21wYXJlSW5wdXRDbGFzcyhzZXFmZWF0Lm5hbWUsIGRpc3BsYXlNb2RlLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICBEZWxldGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtc2VxLW51bT0iW1tzZXFOdW1iZXJdXSIgb24tY2xpY2s9ImFkZFZhbHVlIiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ctYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICBBZGQgZmVhdHVyZSB2YWx1ZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIG9uLWNsaWNrPSJvcGVuQWRkRmVhdHVyZURpYWxvZyIgaWNvbj0iYWRkIiB0aXRsZT0iQWRkIGZlYXR1cmUiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj4KICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHBhcGVyLWljb24tYnV0dG9uIGlkPSJkZWxldGV2YWx1ZSIgaWNvbj0iZGVsZXRlIiBjbGFzcyQ9IltbZ2V0RGVsZXRlVmFsdWVCdXR0b25DbGFzcyhyZWFkb25seSwgc2hvd0RlbGV0ZVZhbHVlQnV0dG9uKV1dIiBkYXRhLWZlYXR1cmU9IltbZm9jdXNlZEZlYXR1cmVOYW1lXV0iIGRhdGEtaW5kZXg9IltbZm9jdXNlZEZlYXR1cmVWYWx1ZUluZGV4XV0iIGRhdGEtc2VxLW51bT0iW1tmb2N1c2VkU2VxTnVtYmVyXV0iIG9uLWNsaWNrPSJkZWxldGVWYWx1ZSIgdGl0bGU9IkRlbGV0ZSB2YWx1ZSI+CiAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iYWRkRmVhdHVyZURpYWxvZyI+CiAgICAgIDxoMj5BZGQgRmVhdHVyZTwvaDI+CiAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iRmVhdHVyZSBuYW1lIiB2YWx1ZT0ie3tuZXdGZWF0dXJlTmFtZX19Ij48L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7bmV3RmVhdHVyZVR5cGV9fSI+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJpbnQiPkludDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iZmxvYXQiPkZsb2F0PC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJieXRlcyI+Qnl0ZXM8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctZGlzbWlzcyBjbGFzcz0iY29udHJvbC1idXR0b24iIG9uLWNsaWNrPSJhZGRGZWF0dXJlIiBkaXNhYmxlZD0iW1shc2hvdWxkRW5hYmxlQWRkRmVhdHVyZShuZXdGZWF0dXJlTmFtZSldXSI+CiAgICAgICAgQ3JlYXRlCiAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgPC9wYXBlci1kaWFsb2c+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1pbnRlcmFjdGl2ZS1pbmZlcmVuY2UtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaWQ9ImxpbnRlci1wYXBlci1idXR0b24tc3R5bGUiPgogICAgICAvKioKICAgICAgICogVGhpcyBzdHlsZSBwcmVzZXJ2ZXMgdGhlIHN0eWxpbmcgcHJldmlvdXMgdG8KICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXJFbGVtZW50cy9wYXBlci1idXR0b24vcHVsbC8xMTUKICAgICAgICogVGhpcyBjaGFuZ2UgY2FuIGJyZWFrIHRoZSBsYXlvdXQgb2YgcGFwZXItYnV0dG9uIGNvbnRlbnQuCiAgICAgICAqIFJlbW92ZSB0aGlzIHN0eWxlIHRvIGFwcGx5IHRoZSBjaGFuZ2UsIG1vcmUgZGV0YWlscyBhdCBiLzcwNTI4MzU2LgogICAgICAgKi8KICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCAnTm90bycsIHNhbnMtc2VyaWY7CiAgICAgICAgLS1wYXBlci10YWItaW5rOiB2YXIoLS10Yi1vcmFuZ2UtZGFyayk7CiAgICAgICAgLS13aXQtY29sb3ItZ3JheTMwMDogI2RhZGNlMDsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI2NsYXNzaWZpY2F0aW9uIHsKICAgICAgICB3aWR0aDogNDAlOwogICAgICB9CgogICAgICAuZXhhbXBsZS1ob2xkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5mZXJlbmNlLXNlY3Rpb24taG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweDsKICAgICAgfQoKICAgICAgLmluZmVyZW5jZS1zZWN0aW9uIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIC5pbmZlcmVuY2Utdmlld2VyIHsKICAgICAgICBtYXgtaGVpZ2h0OiAzNSU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29tcGFyZS1pbmZlcmVuY2Utdmlld2VyIHsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgfQoKICAgICAgLnRmLW9wdGlvbi1zZWxlY3Rvci0wIC5jb250ZW50LXdyYXBwZXIudGYtb3B0aW9uLXNlbGVjdG9yID4gKiB7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgfQoKICAgICAgcGFwZXItcHJvZ3Jlc3MgewogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA2MHB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wZHBsb3QtcHJvZ3Jlc3MgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9leGFtcGxlcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNzVweDsKICAgICAgICBsZWZ0OiAzMHB4OwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5pbmZvLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4yNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbjogMTJweCBhdXRvOwogICAgICB9CgogICAgICAucGQtaW5mby10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMTJweDsKICAgICAgfQoKICAgICAgLnBkLW5vLWZlYXR1cmVzLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBwYWRkaW5nOiAxMnB4IDQ4cHg7CiAgICAgIH0KCiAgICAgIC5hY2NlcHQtYnV0dG9uLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH0KCiAgICAgIC5zZXR0aW5ncy1idXR0b24gewogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1yaWdodC1jb250cm9scy1ob2xkZXIgLmNvbnRyb2wgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLmJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1hbmQtdG9vbHRpcCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxhYmVsLXZvY2FiLXBhdGgtaW5wdXQgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgLnRocmVzaG9sZC1kcm9wZG93biB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2hvcnQtZHJvcGRvd24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgbWluLXdpZHRoOiA1MHB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2xpZGVyLWxhYmVsIHsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5mYWNldC1sYWJlbCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOiB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGlkZXIgewogICAgICAgIHdpZHRoOiAyODBweDsKICAgICAgICAtLXBhcGVyLXNsaWRlci1pbnB1dDogewogICAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2xpZGVyLW1vZGVsLW9uZSB7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogIzEyYjVjZTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6ICMxMmI1Y2U7CiAgICAgIH0KCiAgICAgIC5zbGlkZXItbW9kZWwtdHdvIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiAjZmE3ODE3OwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogI2ZhNzgxNzsKICAgICAgfQoKICAgICAgcGFwZXItZGlhbG9nLmluZmVyZW5jZS1zZXR0aW5ncyB7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICB3aWR0aDogNDAlOwogICAgICAgIG1heC13aWR0aDogNDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgfQoKICAgICAgLmRhc2hib2FyZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICB3aWR0aDogNjAlOwogICAgICB9CgogICAgICAuc2lkZS1ob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogNDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zaWRlLWNvbnRlbnQgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxMHB4KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5zaWRlLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA1MHB4KTsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC5jb25maWctdGFiIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAuY29uZmlnLXNpZGUtY29udGVudCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgd2lkdGg6IDMwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgfQoKICAgICAgLmNvbmZpZy1tYWluLWNvbnRlbnQgewogICAgICAgIHdpZHRoOiA3MCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7CiAgICAgIH0KCiAgICAgIC5zdGF0cy10YWIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wZC10YWIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICB9CgogICAgICAucGQtcGxvdHMtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgbWluLWhlaWdodDogNTJweDsKICAgICAgICBtYXgtaGVpZ2h0OiA1MnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDJweCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5wZHBsb3RzLWhvbGRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7CiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgfQoKICAgICAgLnBkLXJhbmdlLWh5cGhlbiB7CiAgICAgICAgcGFkZGluZy1yaWdodDogNnB4OwogICAgICAgIHBhZGRpbmctdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wZC1yYW5nZS1jb250cm9sIHsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2ZjYzkzNDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgd2lkdGg6IDEwNHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogNnB4OwogICAgICB9CgogICAgICAjb3ZlcnZpZXcgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuaW5mZXJlbmNlLWhlYWRlci5oZWFkaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZTRmN2ZiOwogICAgICB9CgogICAgICAucmlnaHQtc2lkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIHsKICAgICAgICBtYXJnaW46IDRweDsKICAgICAgfQoKICAgICAgdGYtY29uZnVzaW9uLW1hdHJpeCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5kYXRhcG9pbnQtY29udHJvbHMtaG9sZGVyLmRhdGFwb2ludC1jb250cm9sLWJ1dHRvbnMtaG9sZGVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1jb250cm9scy1ob2xkZXIuZGF0YXBvaW50LWNvbnRyb2wtc2VhcmNoLWhvbGRlciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWNvbnRyb2xzLWhvbGRlciB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgbWFyZ2luLWxlZnQ6IDFweDsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1sZWZ0LWNvbnRyb2xzLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5kYXRhcG9pbnQtcmlnaHQtY29udHJvbHMtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudGYtY2F0ZWdvcnktcGFuZSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAudGYtY2F0ZWdvcnktcGFuZS1jb250ZW50IHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KCiAgICAgIDpob3N0IHZ6LWxpbmUtY2hhcnQyIHsKICAgICAgICBtYXJnaW46IDEycHggMTJweCAxMnB4IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCB2ei1iYXItY2hhcnQgewogICAgICAgIG1hcmdpbjogMTJweCAxMnB4IDEycHggMjRweDsKICAgICAgICBoZWlnaHQ6IDI0MHB4OwogICAgICAgIHdpZHRoOiA0NTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5wZC1pbnB1dC1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDQ4cHggMjRweCAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmZWY3ZTA7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2ZkZTI5MzsKICAgICAgfQoKICAgICAgLnN0eWxlLWlucHV0IHsKICAgICAgICB3aWR0aDogNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtY29udGFpbmVyLWhvbGRlciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1jb250cm9sLWZpbHRlci1pbnB1dCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1heC13aWR0aDogNjAlOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyOiB7CiAgICAgICAgICBwYWRkaW5nOiA0cHggNnB4IDJweCA0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1jb250cm9sLWZpbHRlci1pbnB1dCBpcm9uLWljb24gewogICAgICAgIGNvbG9yOiAjOWJhMGE2OwogICAgICB9CgogICAgICAuZmVhdHVyZS1zZWFyY2gtaW5wdXQgewogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1heC13aWR0aDogMTUwcHg7CiAgICAgIH0KCiAgICAgIC5udW0tYnVja2V0cy1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDQ1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1vcmFuZ2UtZGFyayk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgbWFyZ2luOiA1cHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7CiAgICAgIH0KCiAgICAgIC5tYWluLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLW9yYW5nZS1kYXJrKTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgbWFyZ2luOiA1cHg7CiAgICAgIH0KCiAgICAgIC5tYWluLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JheTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7CiAgICAgICAgY29sb3I6IGdyYXk7CiAgICAgIH0KCiAgICAgIC5vcHRpbWl6ZS10aHJlc2hvbGQtYnV0dG9uIHsKICAgICAgICBtYXJnaW46IDVweCAwOwogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLmNsb3NlLXBhcnRpYWwtZGVwcy1idXR0b24gewogICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgfQoKICAgICAgcGFwZXItdGFicyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICB9CgogICAgICBwYXBlci10YWIgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4xcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXRhYjpub3QoLmlyb24tc2VsZWN0ZWQpIHsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgfQoKICAgICAgcGFwZXItdGFiLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGNvbG9yOiAjMjAyMTI0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5wZXJmcy1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIG1hcmdpbjogNHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnBlcmYtaG9sZGVyIHsKICAgICAgICBtYXJnaW46IDhweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5wZXJmLWN1cnZlLXgtbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDJweDsKICAgICAgICBsZWZ0OiAxMzhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5wZXJmLWN1cnZlLXktbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiA0NHB4OwogICAgICAgIGJvdHRvbTogNTRweDsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgYm90dG9tOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzVmNjM2ODsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAuZmxleCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLnNwYWNlLWJldHdlZW4gewogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmZsZXgtd3JhcCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5vcHRpbWl6ZS10ZXh0IHsKICAgICAgICBtYXJnaW46IDVweCAwOwogICAgICAgIGNvbG9yOiBncmV5OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLnRocmVzaG9sZC1jb3N0LWlucHV0IHsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgY29sb3I6ICM4MDg2OGI7CiAgICAgICAgfQogICAgICB9CgogICAgICAuYm9sZCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmluZGVudCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWJyZWFrZG93biB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEycHg7CiAgICAgIH0KCiAgICAgIC5vcHRpbWl6ZS1zZWxlY3Rpb24tYnV0dG9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIC5yZWctdGFibGUtY2F0ZWdvcnkgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5yZWctdGFibGUtdmFsdWUgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CgogICAgICAuc3ViZmVhdHVyZS10YWJsZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb3VudGVyZmFjdHVhbC1idXR0b24taW50cm8gewogICAgICAgIHBhZGRpbmc6IDdweCAwIDAgMTBweDsKICAgICAgfQoKICAgICAgLm1haW4tdmVydGljYWwgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubWFpbi1ib3R0b20tYmFyIHsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgbWluLWhlaWdodDogNTJweDsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAvKiBib3gtc2hhZG93OiAwIDJweCA1cHggZ3JleTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzcHg7ICovCiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNkYWRjZTA7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubWFpbi1jb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5kaXN0LXN3aXRjaCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CgogICAgICAuZGlzdGFuY2UtdmlzLWRyb3Bkb3duIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CgogICAgICAjZGlzdGFuY2VkaWFsb2cgewogICAgICAgIHdpZHRoOiAzMCU7CiAgICAgIH0KCiAgICAgICNkaXN0YW5jZWRpYWxvZyAuYnV0dG9ucyB7CiAgICAgICAgY29sb3I6ICNmNTdjMDA7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3I6ICMzYzQwNDM7CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWluay1jb2xvcjogIzNjNDA0MzsKICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWNvbG9yOiAjM2M0MDQzOwogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yOiAjM2M0MDQzOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6ICM5YWEwYTY7CiAgICAgIH0KCiAgICAgIC5yZXNpemVyIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuZXhhbXBsZS1zdGF0dXMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzVmNjM2ODsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgcGFkZGluZy10b3A6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5leGFtcGxlLWlkLWxhYmVsIHsKICAgICAgICBwYWRkaW5nOiA5cHggNXB4IDlweCAwOwogICAgICB9CgogICAgICAuZXhhbXBsZS1pZC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDcwcHg7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgfQoKICAgICAgLmhlYWRpbmctYW5kLWNhcmQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgcGFkZGluZy10b3A6IDFweDsKICAgICAgfQoKICAgICAgLmVkaXRvci1oZWFkaW5nLWFuZC1jYXJkIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBjb2xvcjogIzVmNjM2ODsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogMTBweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZjdlMDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmNhcmQgewogICAgICAgIHBhZGRpbmc6IDAgMTBweCA1cHg7CiAgICAgIH0KCiAgICAgIC5uby1wYWRkaW5nLWNhcmQgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b29sdGlwIHsKICAgICAgICAtLXBhcGVyLXRvb2x0aXA6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci10b29sdGlwLWRlbGF5LW91dDogMjAwMG1zOwogICAgICB9CgogICAgICAuY29tbWVudC1pY29uIHsKICAgICAgICB3aWR0aDogMzBweDsKICAgICAgICBoZWlnaHQ6IDMwcHg7CiAgICAgICAgbWluLXdpZHRoOiAzMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICB9CgogICAgICAuYXJyb3ctaWNvbiB7CiAgICAgICAgd2lkdGg6IDUwcHg7CiAgICAgICAgaGVpZ2h0OiA1MHB4OwogICAgICAgIG1pbi13aWR0aDogNTBweDsKICAgICAgICBtaW4taGVpZ2h0OiA1MHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1vcmFuZ2UtZGFyayk7CiAgICAgIH0KCiAgICAgIC5wZC1hcnJvdy1pY29uIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbWluLXdpZHRoOiA0MHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIGNvbG9yOiBncmV5OwogICAgICB9CgogICAgICAucGQtdG9nZ2xlIHsKICAgICAgICBtYXJnaW46IDAgOHB4IDAgMjBweDsKICAgICAgfQoKICAgICAgLnBkLWVudHJ5LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgLmluZm8taWNvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1pbi13aWR0aDogMjBweDsKICAgICAgICBtaW4taGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgY29sb3I6IGdyZXk7CiAgICAgIH0KCiAgICAgIC5pbmZvLWljb24uY2YtaW5mby1pY29uIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICB9CgogICAgICAuaW5mby1pY29uLnRocmVzaC1pbmZvLWljb24gewogICAgICAgIG1hcmdpbi10b3A6IC0zcHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmluZm8taWNvbi5wZC1pbmZvLWljb24gewogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5pbmZvLWljb24udGhyZXNob2xkLWluZm8taWNvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5pbmZvLWljb24ucGVyZm9ybWFuY2UtaW5mby1pY29uIHsKICAgICAgICBtYXJnaW4tdG9wOiAxOHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vLXBhZGRpbmcgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaWNvbiB7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGNvbG9yOiBncmV5OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgICBtaW4td2lkdGg6IDEwcHg7CiAgICAgICAgbWluLWhlaWdodDogMTBweDsKICAgICAgfQoKICAgICAgLmhlbHAtdGV4dCB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLXRpdGxlIHsKICAgICAgICBjb2xvcjogIzAwN2I3YzsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAuaGVscC10aXRsZS1tYXJnaW4gewogICAgICAgIG1hcmdpbi10b3A6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLXRpdGxlLW1hcmdpbi1idXR0b24gewogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmhlbHAtdGl0bGUtbWFyZ2luLXRpdGxlIHsKICAgICAgICBtYXJnaW4tdG9wOiA3cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctbGluayB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5wZXJmLWN1cnZlLXRleHQgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogNDRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTBweDsKICAgICAgfQoKICAgICAgLmNvbmYtdGV4dCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgLmRpYWxvZy10ZXh0IHsKICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmRpYWxvZy10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC50aXRsZS13aWR0aCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5kYXRhcG9pbnQtaW5mby1ob2xkZXIgewogICAgICAgIG1hcmdpbjogMjRweCBhdXRvOwogICAgICAgIG1heC13aWR0aDogMzgwcHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgfQoKICAgICAgLm9uYm9hcmRpbmctaGVhZGVyIHsKICAgICAgICBjb2xvcjogIzIwMjEyNDsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjhweDsKICAgICAgfQoKICAgICAgLm9uYm9hcmRpbmctdGV4dCB7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWluZm8taGVhZGVyIHsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWluZm8tdGV4dCB7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgbWF4LXdpZHRoOiA0NjBweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1wcmVmaXgtbGFiZWwgewogICAgICAgIG1hcmdpbjogMTJweCAwIDAgMTJweDsKICAgICAgICBjb2xvcjogZ3JleTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5ib3JkZXItcmlnaHQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgfQoKICAgICAgcGFwZXItZGlhbG9nIHsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgIH0KCiAgICAgIC5tYWluLWJ1dHRvbi5ydW4tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuZG9jLWltYWdlIHsKICAgICAgICB3aWR0aDogMTI4cHg7CiAgICAgICAgaGVpZ2h0OiA5NnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtZGl2aWRlciB7CiAgICAgICAgbWFyZ2luOiA1cHggMCA1cHggNXB4OwogICAgICAgIHdpZHRoOiA1cHg7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIC5vcHRpbWl6YXRpb24tcmFkaW8gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDdweDsKICAgICAgfQoKICAgICAgLm9wdGltaXphdGlvbi1yYWRpby1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmluZmVyLWluZm8gewogICAgICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwogICAgICB9CgogICAgICAuc2Nyb2xsLXggewogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wZXJmLXRhYmxlLWNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAucGVyZi10YWJsZS10aXRsZS1yb3cgewogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBtaW4taGVpZ2h0OiA1MnB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQogICAgICAucGVyZi10YWJsZS10aXRsZSB7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtc29ydC1tZW51IHsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICM4MDg2OGI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjI1OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBtaW4taGVpZ2h0OiBtaW4tY29udGVudDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAucGVyZi10YWJsZS1lbnRyaWVzLWhvbGRlciB7CiAgICAgICAgb3ZlcmZsb3cteTogb3ZlcmxheTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KCiAgICAgIC5wZXJmLXRhYmxlLWVudHJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4IHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtZW50cnkucGVyZi10YWJsZS1lbnRyeS10cml2aWFsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjRmNGY0OwogICAgICB9CgogICAgICAucGVyZi10YWJsZS1lbnRyeS1leHBhbmRlZCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDEycHg7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KCiAgICAgIC5wZXJmLXRhYmxlLXJvdyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5wZXJmLXRhYmxlLXJvdy1leHBhbmRlZCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoNjAsIDY0LCA2NywgMC4zKSwKICAgICAgICAgIDAgMXB4IDNweCAxcHggcmdiYSg2MCwgNjQsIDY3LCAwLjE1KTsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5wZXJmLXRhYmxlLXRleHQtZW50cnkgewogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1udW0tZW50cnkgewogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1hcnJvdyB7CiAgICAgICAgbWluLXdpZHRoOiA0MHB4OwogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS12YWwgewogICAgICAgIHdpZHRoOiAzMCU7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtY291bnQgewogICAgICAgIHdpZHRoOiAxMCU7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLW1vZGVsIHsKICAgICAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1tb2RlbC1zaW5nbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtdGhyZXNob2xkIHsKICAgICAgICB3aWR0aDogMjgwcHg7CiAgICAgICAgbWluLXdpZHRoOiAyODBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtZXJyb3IgewogICAgICAgIHdpZHRoOiAxNSU7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtc3EtZXJyb3IgewogICAgICAgIHdpZHRoOiAxNSU7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLWZwIHsKICAgICAgICB3aWR0aDogMTUlOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLWZuIHsKICAgICAgICB3aWR0aDogMTUlOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLWFjYyB7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtZjEgewogICAgICAgIHdpZHRoOiAxMCU7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgICB9CiAgICAgIC5wZXJmLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLnBlcmYtc29ydC1ib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9CiAgICAgIC5jb3VudGVyZmFjdHVhbC10b2dnbGUgewogICAgICAgIG1hcmdpbjogNHB4IDRweCA0cHggNnB4OwogICAgICAgIHBhZGRpbmctdG9wOiA0cHg7CiAgICAgICAgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyLWNvbG9yOiAjODFjOTk1OwogICAgICB9CiAgICAgIC5jb3VudGVyZmFjdHVhbC1kZWx0YSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweDsKICAgICAgfQogICAgICAuY291bnRlcmZhY3R1YWwtZGVsdGEgbGFiZWwgewogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiByZ2IoNjAsIDY0LCA2Nyk7CiAgICAgIH0KICAgICAgLmNvdW50ZXJmYWN0dWFsLWRlbHRhIHBhcGVyLXNsaWRlciB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogIzgxYzk5NTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiAjODFjOTk1OwogICAgICAgIC0tcGFwZXItc2xpZGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgY29sb3I6IHJnYig2MCwgNjQsIDY3KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLmRhdGFwb2ludC1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjAyMTI0OwogICAgICAgIGJhY2tncm91bmQ6ICNmZGUyOTM7CiAgICAgIH0KICAgICAgLmluZmVyLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJhY2tncm91bmQ6ICMxMjhlYWY7CiAgICAgIH0KICAgICAgLmZsZXgtZ3JvdyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5mbGV4LXJvdy1yZXZlcnNlIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH0KICAgICAgLnRocmVzaG9sZC1pbmZvLWhvbGRlciB7CiAgICAgICAgbWFyZ2luLXRvcDogLTJweDsKICAgICAgfQogICAgICAudGFicyB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CiAgICAgIC5yb3RhdGVkLWljb24gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgIH0KICAgICAgLmRhdGFwb2ludC1jb250cm9sLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KICAgICAgLnBkLWhvbGRlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgfQogICAgICAucGQteS1sYWJlbCB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxlZnQ6IC0yMHB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA4MHB4OwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgIH0KICAgICAgLnBkLXgtbGFiZWwgewogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBjb2xvcjogIzVmNjM2ODsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiAwIDAgMCA0MHB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBwYXBlci10b2dnbGUtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYnV0dG9uLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLXRvZ2dsZS1idXR0b24tbGFiZWwtY29sb3I6ICMzYzQwNDM7CiAgICAgIH0KICAgICAgLmJ1dHRvbi1hbmQtcHJvZ3Jlc3MtaG9sZGVyIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIC5zb3J0LXByb2dyZXNzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgICAgbGVmdDogN3B4OwogICAgICAgIHdpZHRoOiAyMjBweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KICAgICAgI2F0dHJpYnV0aW9uTGVnZW5kIHsKICAgICAgICB3aWR0aDogMTYwcHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0Zi1wbHVnaW4tZGlhbG9nIGlkPSJpbml0aWFsRGlhbG9nIj48L3RmLXBsdWdpbi1kaWFsb2c+CiAgICA8cGFwZXItZGlhbG9nIGlkPSJpbmZlcmVuY2VzZXR0aW5ncyIgY2xhc3M9ImluZmVyZW5jZS1zZXR0aW5ncyIgb3BlbmVkPSJbWyFsb2NhbF1dIj4KICAgICAgPHRmLWluZmVyZW5jZS1wYW5lbCBpbmZlcmVuY2UtYWRkcmVzcz0ie3tpbmZlcmVuY2VBZGRyZXNzfX0iIG1vZGVsLW5hbWU9Int7bW9kZWxOYW1lfX0iIGV4YW1wbGVzLXBhdGg9Int7ZXhhbXBsZXNQYXRofX0iIG1vZGVsLXR5cGU9Int7bW9kZWxUeXBlfX0iIG1vZGVsLXZlcnNpb249Int7bW9kZWxWZXJzaW9ufX0iIG1vZGVsLXNpZ25hdHVyZT0ie3ttb2RlbFNpZ25hdHVyZX19IiBtYXgtZXhhbXBsZXM9Int7bWF4RXhhbXBsZXN9fSIgbGFiZWwtdm9jYWItcGF0aD0ie3tsYWJlbFZvY2FiUGF0aH19IiBtdWx0aS1jbGFzcz0ie3ttdWx0aUNsYXNzfX0iIHNhbXBsaW5nLW9kZHM9Int7c2FtcGxpbmdPZGRzfX0iIHNlcXVlbmNlLWV4YW1wbGVzPSJ7e3NlcXVlbmNlRXhhbXBsZXN9fSIgbWF4LWNsYXNzZXMtdG8tZGlzcGxheT0ie3ttYXhJbmZlcmVuY2VFbnRyaWVzUGVyUnVufX0iIHVzZS1wcmVkaWN0LWFwaT0ie3t1c2VQcmVkaWN0QXBpfX0iIHByZWRpY3Qtb3V0cHV0LXRlbnNvcj0ie3twcmVkaWN0T3V0cHV0VGVuc29yfX0iIHByZWRpY3QtaW5wdXQtdGVuc29yPSJ7e3ByZWRpY3RJbnB1dFRlbnNvcn19Ij4KICAgICAgPC90Zi1pbmZlcmVuY2UtcGFuZWw+CiAgICAgIDxkaXYgY2xhc3M9ImFjY2VwdC1idXR0b24taG9sZGVyIj4KICAgICAgICA8cGFwZXItYnV0dG9uIG9uLXRhcD0iZ2V0RXhhbXBsZXNBbmRDbG9zZVNldHRpbmdzXyIgY2xhc3M9Im1haW4tYnV0dG9uIiBkaXNhYmxlZCQ9Iltbc2hvdWxkRGlzYWJsZUdldEV4YW1wbGVzQnV0dG9uXyhleGFtcGxlc1BhdGgsIG1heEV4YW1wbGVzKV1dIj4KICAgICAgICAgIEFjY2VwdAogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgIDxwYXBlci1idXR0b24gZGlhbG9nLWRpc21pc3MgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIj5DYW5jZWw8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxwYXBlci1kaWFsb2cgaWQ9ImRlbGV0ZWRpYWxvZyI+CiAgICAgIDxwPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIGRhdGFwb2ludD8KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9ucyI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctZGlzbWlzcyBjbGFzcz0iY29udHJvbC1idXR0b24iPkNhbmNlbDwvcGFwZXItYnV0dG9uPgogICAgICAgIDxwYXBlci1idXR0b24gZGlhbG9nLWNvbmZpcm0gYXV0b2ZvY3VzIG9uLXRhcD0iZGVsZXRlRGF0YXBvaW50XyIgY2xhc3M9Im1haW4tYnV0dG9uIj5EZWxldGU8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxwYXBlci1kaWFsb2cgaWQ9ImRpc3RhbmNlZGlhbG9nIj4KICAgICAgPGgyPlNob3cgc2ltaWxhcml0eSB0byBzZWxlY3RlZCBkYXRhcG9pbnQ8L2gyPgogICAgICA8cGFwZXItaW5wdXQgdmFsdWU9Int7ZmFjZXREaXN0RmVhdHVyZU5hbWV9fSIgbGFiZWw9Ik1ldHJpYyBuYW1lIiBjbGFzcz0iZGF0YXBvaW50LWNvbnRyb2wtZmlsdGVyLWlucHV0Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPGRpdiBjbGFzcz0icmFkaW9sYWJlbCI+RGlzdGFuY2UgdHlwZTwvZGl2PgogICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgY2xhc3M9ImRpc3Qtc3dpdGNoIiBzZWxlY3RlZD0ie3tmYWNldERpc3RTd2l0Y2h9fSI+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBjbGFzcz0iZGlzdC1yYWRpbyIgbmFtZT0iTDEiIGRpc2FibGVkJD0iW1tjdXN0b21EaXN0YW5jZUZ1bmN0aW9uU2V0XV0iPkwxPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBjbGFzcz0iZGlzdC1yYWRpbyIgbmFtZT0iTDIiIGRpc2FibGVkJD0iW1tjdXN0b21EaXN0YW5jZUZ1bmN0aW9uU2V0XV0iPkwyPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBjbGFzcz0iZGlzdC1yYWRpbyIgbmFtZT0iQ3VzdG9tIiBoaWRkZW4kPSJbWyFjdXN0b21EaXN0YW5jZUZ1bmN0aW9uU2V0XV0iPlVzZXItc3BlY2lmaWVkPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJBcHBseSB0byBkYXRhcG9pbnRzIHZpc3VhbGl6YXRpb24iIGNsYXNzPSJ0aHJlc2hvbGQtZHJvcGRvd24gZGlzdGFuY2UtdmlzLWRyb3Bkb3duIj4KICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tmYWNldERpc3RTZXR0aW5nfX0iIGF0dHItZm9yLXNlbGVjdGVkPSJuYW1lIj4KICAgICAgICAgIDxwYXBlci1pdGVtIG5hbWU9ImNvbG9yQnkiPkNvbG9yIEJ5PC9wYXBlci1pdGVtPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iaG9yaXpvbnRhbEZhY2V0Ij5YLUF4aXMgQmlubmluZzwvcGFwZXItaXRlbT4KICAgICAgICAgIDxwYXBlci1pdGVtIG5hbWU9InZlcnRpY2FsRmFjZXQiPlktQXhpcyBCaW5uaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iaG9yaXpvbnRhbFBvc2l0aW9uIj5YLUF4aXMgU2NhdHRlcjwvcGFwZXItaXRlbT4KICAgICAgICAgIDxwYXBlci1pdGVtIG5hbWU9InZlcnRpY2FsUG9zaXRpb24iPlktQXhpcyBTY2F0dGVyPC9wYXBlci1pdGVtPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGRpYWxvZy1kaXNtaXNzIGNsYXNzPSJjb250cm9sLWJ1dHRvbiI+Q2FuY2VsPC9wYXBlci1idXR0b24+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctY29uZmlybSBhdXRvZm9jdXMgb24tdGFwPSJyZXF1ZXN0QWRkRGlzdGFuY2VNZXRyaWMiIGNsYXNzPSJtYWluLWJ1dHRvbiI+QXBwbHk8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxkaXYgY2xhc3M9ImRhc2hib2FyZC1sYXlvdXQiPgogICAgICA8ZGl2IGNsYXNzPSJtYWluLXZlcnRpY2FsIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluLWNvbnRlbnQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi1ib3R0b20tYmFyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YXBvaW50LWxlZnQtY29udHJvbHMtaG9sZGVyIj4KICAgICAgICAgICAgICA8cGFwZXItdGFicyBjbGFzcz0idGFicyIgbm9pbmsgc2VsZWN0ZWQ9Int7c2lkZVRhYlNlbGVjdGVkfX0iPgogICAgICAgICAgICAgICAgPHBhcGVyLXRhYj5EYXRhcG9pbnQgZWRpdG9yPC9wYXBlci10YWI+CiAgICAgICAgICAgICAgICA8cGFwZXItdGFiPltbZ2V0UGVyZm9ybWFuY2VUYWJUaXRsZShtb2RlbFR5cGUsIG11bHRpQ2xhc3MpXV08L3BhcGVyLXRhYj4KICAgICAgICAgICAgICAgIDxwYXBlci10YWI+RmVhdHVyZXM8L3BhcGVyLXRhYj4KICAgICAgICAgICAgICA8L3BhcGVyLXRhYnM+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhcG9pbnQtcmlnaHQtY29udHJvbHMtaG9sZGVyIj4KICAgICAgICAgICAgICA8YSB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImNvbnRyb2wiIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL3RyZWUvbWFzdGVyL3RlbnNvcmJvYXJkL3BsdWdpbnMvaW50ZXJhY3RpdmVfaW5mZXJlbmNlL1JFQURNRS5tZCIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJoZWxwLW91dGxpbmUiIGNsYXNzPSJzZXR0aW5ncy1idXR0b24iIHRpdGxlPSJXaGF0LUlmIFRvb2wgZG9jdW1lbnRhdGlvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InNldHRpbmdzIiBvbi10YXA9InNldHRpbmdzQ2xpY2tlZF8iIGNsYXNzPSJzZXR0aW5ncy1idXR0b24gY29udHJvbCIgdGl0bGU9IldoYXQtSWYgVG9vbCBzZXR0aW5ncyIgZGlzYWJsZWQkPSJbW2xvY2FsXV0iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZS1zdGF0dXMiPltbZXhhbXBsZVN0YXR1c1N0cl1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8aXJvbi1wYWdlcyBjbGFzcz0ic2lkZS10YWJzIiBzZWxlY3RlZD0ie3tzaWRlVGFiU2VsZWN0ZWR9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGFwb2ludC10YWIiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGUtaG9sZGVyIiBpZD0ic2lkZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWFuZC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9InRvZ2dsZUNvbnRleHRUb29scyI+CiAgICAgICAgICAgICAgICAgICAgICBWaXN1YWxpemUKICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJpZ2h0LXNpZGUgcmlnaHQtc2lkZS1wZXJmb3JtYW5jZS10YWIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aXJvbi1pY29uIGljb249IltbZ2V0RXhwYW5kQ29sbGFwc2VJY29uKG9wZW5lZENvbnRleHRUb29scyldXSIgY2xhc3M9ImV4cGFuZC1jb2xsYXBzZS1idXR0b24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2UgY2xhc3M9Im5vLXBhZGRpbmctY2FyZCIgaWQ9ImNvbGxhcHNlY29udGV4dHRvb2xzIiBvcGVuZWQ9Int7b3BlbmVkQ29udGV4dFRvb2xzfX0iPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIHNlbGVjdGVkPSJ7e3Zpc01vZGV9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iZGl2ZSI+RGF0YXBvaW50czwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InBkIj5QYXJ0aWFsIGRlcGVuZGVuY2UgcGxvdHM8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LXdyYXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJTZWxlY3QgYSBkYXRhcG9pbnQgdG8gdXNlIHRoaXMgZmVhdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2xhc3M9ImNvdW50ZXJmYWN0dWFsLXRvZ2dsZSIgY2hlY2tlZD0ie3tzaG93TmVhcmVzdENvdW50ZXJmYWN0dWFsfX0iIGRpc2FibGVkJD0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgbmVhcmVzdCBjb3VudGVyZmFjdHVhbCBkYXRhcG9pbnQKICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lYXJlc3QgY291bnRlcmZhY3R1YWwgKG5laWdoYm9yIG9mIGRpZmZlcmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmVzIHRoZSBzZWxlY3RlZCBkYXRhcG9pbnQgd2l0aCBpdHMgbmVhcmVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hib3IgZnJvbSBhIGRpZmZlcmVudCBjbGFzc2lmaWNhdGlvbiB1c2luZyBMMSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgTDIgZGlzdGFuY2UuIElmIGEgY3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uIGlzIHNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHVzZXMgdGhhdCBmdW5jdGlvbiBpbnN0ZWFkLgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIHNlbGVjdGVkPSJ7e25lYXJlc3RDb3VudGVyZmFjdHVhbERpc3R9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJMMSIgZGlzYWJsZWQkPSJbW2N1c3RvbURpc3RhbmNlRnVuY3Rpb25TZXRdXSI+TDE8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkwyIiBkaXNhYmxlZCQ9IltbY3VzdG9tRGlzdGFuY2VGdW5jdGlvblNldF1dIj5MMjwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iQ3VzdG9tIiBoaWRkZW4kPSJbWyFjdXN0b21EaXN0YW5jZUZ1bmN0aW9uU2V0XV0iPlVzZXItc3BlY2lmaWVkPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc1JlZ3Jlc3Npb25fKG1vZGVsVHlwZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iTWluaW11bSBkaXN0YW5jZSBpbiBpbmZlcnJlZCB2YWx1ZSB0byBjb25zaWRlciBjb3VudGVyZmFjdHVhbCIgY2xhc3M9ImNvdW50ZXJmYWN0dWFsLWRlbHRhIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5UaHJlc2hvbGQ8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlcmZhY3R1YWwgdGhyZXNob2xkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciByZWdyZXNzaW9uLCBhIG5laWdoYm9yIHBvaW50IGlzIGNvbnNpZGVyZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIGRpZmZlcmVudCBjbGFzc2lmaWNhdGlvbiBpZiB0aGUgZGlmZmVyZW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGluZmVycmVkIHZhbHVlIGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCB0aHJlc2hvbGQuPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0aHJlc2hvbGQgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHN0YW5kYXJkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWF0aW9uIG9mIHRoZSBpbmZlcnJlZCB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyIGVkaXRhYmxlIHZhbHVlPSJ7e21pbkNvdW50ZXJmYWN0dWFsVmFsdWVEaXN0fX0iIG1heD0iW1ttYXhDb3VudGVyZmFjdHVhbFZhbHVlRGlzdF1dIiBkaXNhYmxlZCQ9IltbIXNob3dOZWFyZXN0Q291bnRlcmZhY3R1YWxdXSI+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJNb2RlbDoiIG5vLWxhYmVsLWZsb2F0IGNsYXNzPSJzaG9ydC1kcm9wZG93biIgaGlkZGVuJD0iW1tzaG91bGRIaWRlTW9kZWxTZWxlY3Rvcl8ocGFyc2VkTW9kZWxOYW1lcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e25lYXJlc3RDb3VudGVyZmFjdHVhbE1vZGVsSW5kZXh9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3BhcnNlZE1vZGVsTmFtZXNdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbZ2V0TGFiZWxlZE1vZGVsTmFtZV8oaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlNlbGVjdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iY29udHJvbC1idXR0b24gZGF0YXBvaW50LWJ1dHRvbiIgZGlzYWJsZWQkPSJbWyFoYXNTZWxlY3RlZChzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UpXV0iIG9uLXRhcD0ic2hvd0Rpc3RhbmNlQ2xpY2tlZF8iIGFsdD0iU2hvdyBzaW1pbGFyaXR5IHRvIHNlbGVjdGVkIGRhdGFwb2ludCIgdGl0bGU9IlNob3cgc2ltaWxhcml0eSB0byBzZWxlY3RlZCBkYXRhcG9pbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyBzaW1pbGFyaXR5IHRvIHNlbGVjdGVkIGRhdGFwb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gY2YtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyBzaW1pbGFyaXR5IHRvIHNlbGVjdGVkIGRhdGFwb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxjdWxhdGVzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBzZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcG9pbnQgYW5kIGFsbCBvdGhlciBkYXRhcG9pbnRzIGFuZCBzaG93cyB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkYXRhcG9pbnRzIHZpc3VhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWFuZC1jYXJkIGVkaXRvci1oZWFkaW5nLWFuZC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIj4KICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0RGF0YXBvaW50RWRpdG9yVGl0bGUoc2VsZWN0ZWRFeGFtcGxlTnVtLAogICAgICAgICAgICAgICAgICAgICAgY29tcGFyZWRJbmRpY2VzKV1dCiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm8tcGFkZGluZy1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGFwb2ludC1jb250cm9scy1ob2xkZXIgZGF0YXBvaW50LWNvbnRyb2wtYnV0dG9ucy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhcG9pbnQtbGVmdC1jb250cm9scy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZGF0YXBvaW50LWNvbnRyb2wtYnV0dG9uIiBpY29uPSJjaGV2cm9uLWxlZnQiIGRpc2FibGVkJD0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIiBvbi10YXA9InNlbGVjdFByZXZEYXRhcG9pbnRfIiBhbHQ9InNlbGVjdCBwcmV2aW91cyBkYXRhcG9pbnQiIHRpdGxlPSJTZWxlY3QgcHJldmlvdXMgZGF0YXBvaW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZGF0YXBvaW50LWNvbnRyb2wtYnV0dG9uIiBpY29uPSJjaGV2cm9uLXJpZ2h0IiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSIgb24tdGFwPSJzZWxlY3ROZXh0RGF0YXBvaW50XyIgYWx0PSJzZWxlY3QgbmV4dCBkYXRhcG9pbnQiIHRpdGxlPSJTZWxlY3QgbmV4dCBkYXRhcG9pbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iRWRpdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZGF0YXBvaW50LWNvbnRyb2wtYnV0dG9uIiBpY29uPSJoaXN0b3J5IiBvbi10YXA9InJlc2V0RGF0YXBvaW50XyIgYWx0PSJ1bmRvIGNoYW5nZXMiIHRpdGxlPSJVbmRvIGNoYW5nZXMiIGRpc2FibGVkJD0iW1tzaG91bGREaXNhYmxlUmVzZXRfKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5jaGFuZ2VkKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iU2VsZWN0IGEgZGF0YXBvaW50IHRvIHVzZSB0aGlzIGZlYXR1cmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1idXR0b24iIGljb249ImNvbnRlbnQtY29weSIgZGlzYWJsZWQkPSJbWyFoYXNTZWxlY3RlZChzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UpXV0iIG9uLXRhcD0iY29weURhdGFwb2ludF8iIGFsdD0iZHVwbGljYXRlIGRhdGFwb2ludCIgdGl0bGU9IkR1cGxpY2F0ZSBkYXRhcG9pbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJTZWxlY3QgYSBkYXRhcG9pbnQgdG8gdXNlIHRoaXMgZmVhdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3M9ImRhdGFwb2ludC1jb250cm9sLWJ1dHRvbiIgaWNvbj0iZGVsZXRlIiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSIgb24tdGFwPSJkZWxldGVEYXRhcG9pbnREaWFsb2dfIiBhbHQ9ImRlbGV0ZSBkYXRhcG9pbnQiIHRpdGxlPSJEZWxldGUgZGF0YXBvaW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1kaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgdmFsdWU9Int7ZmVhdHVyZVNlYXJjaFZhbHVlfX0iIGxhYmVsPSJTZWFyY2ggZmVhdHVyZXMiIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1maWx0ZXItaW5wdXQgZmVhdHVyZS1zZWFyY2gtaW5wdXQiIGRpc2FibGVkJD0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIiBuby1sYWJlbC1mbG9hdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6c2VhcmNoIiBzbG90PSJwcmVmaXgiPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCIgaGlkZGVuPSJbWyFoYXNBdHRyaWJ1dGlvbnNfKGF0dHJpYnV0aW9ucyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IkZlYXR1cmUgc29ydCBvcmRlciIgY2xhc3M9InNob3J0LWRyb3Bkb3duIiBuby1sYWJlbC1mbG9hdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7ZXhhbXBsZUZlYXR1cmVTb3J0T3JkZXJ9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5hbWU9ImFscGhhYmV0aWNhbCI+QWxwaGFiZXRpY2FsPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5hbWU9ImF0dHJpYnV0aW9uIj5BdHRyaWJ1dGlvbnM8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0icmV2ZXJzZS1hdHRyaWJ1dGlvbiI+UmV2ZXJzZSBhdHRyaWJ1dGlvbnM8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iYWJzb2x1dGUtYXR0cmlidXRpb24iPkFic29sdXRlIGF0dHJpYnV0aW9uczwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBpZD0iYXR0cmlidXRpb25MZWdlbmQiPjwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9Ik1vZGVsOiIgbm8tbGFiZWwtZmxvYXQgY2xhc3M9InNob3J0LWRyb3Bkb3duIiBoaWRkZW4kPSJbWyFoYXNNdWx0aXBsZU1vZGVsQXR0cmlidXRpb25zXyhhdHRyaWJ1dGlvbnMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7YXR0cmlidXRpb25Nb2RlbEluZGV4fX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbcGFyc2VkTW9kZWxOYW1lc11dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbZ2V0TGFiZWxlZE1vZGVsTmFtZV8oaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhcG9pbnQtcmlnaHQtY29udHJvbHMtaG9sZGVyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUtYW5kLWluZmVyZW5jZS1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx2ei1leGFtcGxlLXZpZXdlciBjbGFzcz0iZXhhbXBsZS1ob2xkZXIiIGpzb249Int7c2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmV4YW1wbGV9fSIgY29tcGFyZS1qc29uPSJ7e2NvdW50ZXJmYWN0dWFsRXhhbXBsZUFuZEluZmVyZW5jZS5leGFtcGxlfX0iIG9uLWV4YW1wbGUtY2hhbmdlPSJleGFtcGxlQ2hhbmdlXyIgaWQ9InZpZXdlciIgZGlzcGxheS1tb2RlPSJbW2V4YW1wbGVEaXNwbGF5TW9kZV1dIiBmZWF0dXJlLXNlYXJjaC12YWx1ZT0ie3tmZWF0dXJlU2VhcmNoVmFsdWV9fSIgY29tcGFyZS10aXRsZT0iW1tjb21wYXJlVGl0bGVdXSIgc2FsaWVuY3k9IltbYXR0cmlidXRpb25dXSIgc2hvdy1zYWxpZW5jeSByZWFkb25seT0iW1shYXJlRXhhbXBsZXNFZGl0YWJsZV8obW9kZWxOYW1lLCBpbmZlcmVuY2VBZGRyZXNzKV1dIiBzb3J0LW9yZGVyPSJbW2V4YW1wbGVGZWF0dXJlU29ydE9yZGVyXV0iIG1pbi1zYWw9IltbbWluQXR0cmlidXRpb25dXSIgbWF4LXNhbD0iW1ttYXhBdHRyaWJ1dGlvbl1dIiBjb2xvcnM9IltbYXR0cmlidXRpb25Db2xvclNjYWxlXV0iIGhpZ2hsaWdodC1kaWZmZXJlbmNlcz0iW1tzaG93TmVhcmVzdENvdW50ZXJmYWN0dWFsXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdnotZXhhbXBsZS12aWV3ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YXBvaW50LWluZm8taG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhcG9pbnQtaW5mby1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggc3BhY2UtYmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9uYm9hcmRpbmctaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSBkYXRhcG9pbnQgdG8gYmVnaW4gZXhwbG9yaW5nIG1vZGVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IgZm9yIHlvdXIgc2VsZWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib25ib2FyZGluZy10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJvbGQiPkVkaXQgYW5kIEluZmVyOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdCB5b3VyIGRhdGFwb2ludCBoZXJlIGFuZCBydW4gaW5mZXJlbmNlIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZlciB0YWJsZSB0byBzZWUgZGlmZmVyZW5jZXMgaW4gbW9kZWwgYmVoYXZpb3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9uYm9hcmRpbmctdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj5WaXN1YWxpemU6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2ggYmV0d2VlbiB2aXN1YWxpemluZyBkYXRhcG9pbnRzIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsb3JpbmcgcGFydGlhbCBkZXBlbmRlbmNlIHBsb3RzIHRvIGdhaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWdodHMgaW50byB5b3VyIG1vZGVsJ3MgYmVoYXZpb3IuIEV4cGxvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcmZhY3R1YWxzIG9yIHNlZSBob3cgc2ltaWxhciAob3IgZGlmZmVyZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzdCBvZiB5b3VyIGRhdGFzZXQgaXMgZnJvbSB5b3VyIHNlbGVjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZlcmVuY2Utc2VjdGlvbi1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZmVyZW5jZS1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImluZmVyZW5jZS1oZWFkZXIgaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVJbmZlcmVuY2VSZXN1bHRzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0SW5mZXJUaXRsZShzZWxlY3RlZEV4YW1wbGVOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZEluZGljZXMpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iW1tnZXRFeHBhbmRDb2xsYXBzZUljb24ob3BlbmVkSW5mZXJlbmNlUmVzdWx0cyldXSIgY2xhc3M9ImV4cGFuZC1jb2xsYXBzZS1idXR0b24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2UgY2xhc3M9Im5vLXBhZGRpbmctY2FyZCIgaWQ9ImNvbGxhcHNlaW5mZXJlbmNlIiBvcGVuZWQ9Int7b3BlbmVkSW5mZXJlbmNlUmVzdWx0c319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iRWRpdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIG9uLXRhcD0iaW5mZXJDbGlja2VkXyIgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIGluZmVyLWJ1dHRvbiBmbGV4LWdyb3ciIGRpc2FibGVkJD0iW1tzaG91bGREaXNhYmxlSW5mZXJCdXR0b25fKGV4YW1wbGVzQW5kSW5mZXJlbmNlcywgbW9kZWxOYW1lLCBpbmZlcmVuY2VBZGRyZXNzLCB1cGRhdGVkRXhhbXBsZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW4gaW5mZXJlbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1pbmZlcmVuY2Utdmlld2VyIGNsYXNzPSJpbmZlcmVuY2Utdmlld2VyIiBpbmZlcmVuY2VzPSJbW3NlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5pbmZlcmVuY2VzXV0iIGlkJD0iW1tnZXRJbmZlcmVuY2VIb2xkZXJJZF8oKV1dIiBtb2RlbC10eXBlPSJbW21vZGVsVHlwZV1dIiBtb2RlbC1uYW1lcz0iW1twYXJzZWRNb2RlbE5hbWVzXV0iIG1heC1lbnRyaWVzLXBlci1ydW49IltbbWF4SW5mZXJlbmNlRW50cmllc1BlclJ1bl1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtaW5mZXJlbmNlLXZpZXdlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb3VudGVyZmFjdHVhbEV4YW1wbGVBbmRJbmZlcmVuY2VdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGYtaW5mZXJlbmNlLXZpZXdlciBjbGFzcz0iaW5mZXJlbmNlLXZpZXdlciBjb21wYXJlLWluZmVyZW5jZS12aWV3ZXIiIGluZmVyZW5jZXM9IltbY291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlLmluZmVyZW5jZXNdXSIgbW9kZWwtdHlwZT0iW1ttb2RlbFR5cGVdXSIgbW9kZWwtbmFtZXM9IltbcGFyc2VkTW9kZWxOYW1lc11dIiBtYXgtZW50cmllcy1wZXItcnVuPSJbW21heEluZmVyZW5jZUVudHJpZXNQZXJSdW5dXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RmLWluZmVyZW5jZS12aWV3ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNpemVyIiBpZD0icmVzaXplciI+CiAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXY6cGF1c2UiIGNsYXNzPSJyZXNpemUtaWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciIgaWQ9ImNlbnRlciI+CiAgICAgICAgICAgICAgICA8ZmFjZXRzLWRpdmUgaWQ9ImRpdmUiIGRhdGE9IltbdmlzZGF0YV1dIiBzZWxlY3RlZC1pbmRpY2VzPSJbW3NlbGVjdGVkXV0iIGNvbXBhcmVkLWluZGljZXM9IltbY29tcGFyZWRJbmRpY2VzXV0iIG9uLXNlbGVjdGVkLWluZGljZXMtY2hhbmdlZD0ic2VsZWN0ZWRJbmRpY2VzQ2hhbmdlZF8iIG9uLXN0YXRzLWNoYW5nZWQ9InN0YXRzQ2hhbmdlZF8iIGhpZGUtaW5mby1jYXJkPSJ0cnVlIiBzcHJpdGUtaW1hZ2Utd2lkdGg9IjMyIiBzcHJpdGUtaW1hZ2UtaGVpZ2h0PSIzMiIgZml0LWdyaWQtYXNwZWN0LXJhdGlvLXRvLXZpZXdwb3J0PSJ0cnVlIiBzdGFibGUtY29sb3JzPSJ0cnVlIj4KICAgICAgICAgICAgICAgIDwvZmFjZXRzLWRpdmU+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJub2V4YW1wbGVzIiBjbGFzcz0ibm9leGFtcGxlcyBpbmZvLXRleHQiPgogICAgICAgICAgICAgICAgICBEYXRhcG9pbnRzIGFuZCB0aGVpciBpbmZlcmVuY2UgcmVzdWx0cyB3aWxsIGJlIGRpc3BsYXllZCBoZXJlLgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgaW5kZXRlcm1pbmF0ZSBpZD0icHJvZ3Jlc3MiIGhpZGRlbj0iW1tsb2FkaW5nQmFySGlkZGVuX11dIj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWNvbnRhaW5lci1ob2xkZXIiIGlkPSJwYXJ0aWFscGxvdGhvbGRlciI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBkLXBsb3RzLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZC1pbmZvLXRleHQiPlBhcnRpYWwgRGVwZW5kZW5jZSBQbG90czwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiBwZC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPlBhcnRpYWwgRGVwZW5kZW5jZSBQbG90czwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnRpYWwgZGVwZW5kZW5jZSBwbG90cyB2aXN1YWxpemUgdGhlIGNoYW5nZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgIGluZmVyZW5jZSByZXN1bHRzIGZvciBldmVyeSBmZWF0dXJlLCBhcyB0aGUgdmFsdWUgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBmZWF0dXJlIGlzIGNoYW5nZWQgdG8gZGlmZmVyZW50IHZhbGlkIHZhbHVlcy4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG51bWVyaWMgZmVhdHVyZXMsIHlvdSBjYW4gc2V0IHRoZSBtaW5pbXVtIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW0gdmFsdWVzIHRvIHBsb3QuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzdHJpbmcgZmVhdHVyZXMsIHRoZSBtb3N0IHBvcHVsYXIgZmVhdHVyZSB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgc2hvd24gYXMgYWx0ZXJuYXRpdmVzIHRvIHRoZSBmZWF0dXJlIHZhbHVlIGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBkYXRhcG9pbnQuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBmZWF0dXJlcyB3aXRoIG11bHRpcGxlIGZlYXR1cmUgdmFsdWVzIHBlcgogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFwb2ludCwgYSBzaW5nbGUgcGxvdCBpcyBzaG93biBmb3IgZm9yIGVhY2ggZmVhdHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGluIHRoZSBzZWxlY3RlZCBkYXRhcG9pbnQuIFlvdSBjYW4gb3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBmZWF0dXJlIHZhbHVlcyBoYXZlIHBsb3RzIGNyZWF0ZWQgZm9yIHRoZW0gYnkKICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5aW5nIHRoZSBpbmRpY2VzIHRvIHNob3duIHBhcnRpYWwgZGVwZW5kZW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RzIGZvciwgaWYgdGhlIGRhdGFwb2ludCBjb250YWlucyBtdWx0aXBsZSBmZWF0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGZvciBhIGZlYXR1cmUuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGdsb2JhbCB0b2dnbGUgaXMgdHVybmVkIG9uLCB0aGUgcGxvdHMgc2hvdwogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdmVyYWdlIGVmZmVjdCBvZiByZXBlYXRlZGx5IGNoYW5naW5nIGEgc2luZ2xlCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBhY3Jvc3MgYWxsIGRhdGFwb2ludHMuIFdoZW4gaXQgaXMgdHVybmVkIG9mZiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGxvdHMgc2hvdyB0aGUgZWZmZWN0IG9mIGEgcmVwZWF0ZWRseSBjaGFuZ2luZyBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlIGZlYXR1cmUgb24gdGhlIHNlbGVjdGVkIGRhdGFwb2ludC4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tYW5kLXByb2dyZXNzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJjb250cm9sLWJ1dHRvbiBkYXRhcG9pbnQtYnV0dG9uIiBkaXNhYmxlZCQ9Iltbc2hvdWxkRGlzYWJsZVNvcnRGZWF0dXJlc0J1dHRvbihwYXJ0aWFsRGVwUGxvdEVsaWdpYmxlRmVhdHVyZXMsIGlzU29ydGluZ0VsaWdpYmxlRmVhdHVyZXMpXV0iIG9uLXRhcD0ic29ydFBkRmVhdHVyZXNfIiBhbHQ9IlNvcnQgZmVhdHVyZXMgYnkgaW50ZXJlc3RpbmduZXNzIiB0aXRsZT0iU29ydCBmZWF0dXJlcyBieSBpbnRlcmVzdGluZ25lc3MiPgogICAgICAgICAgICAgICAgICAgICAgICBTb3J0IGZlYXR1cmVzIGJ5IGludGVyZXN0aW5nbmVzcwogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgY2xhc3M9InNvcnQtcHJvZ3Jlc3MiIGhpZGRlbj0iW1shaXNTb3J0aW5nRWxpZ2libGVGZWF0dXJlc11dIiBpbmRldGVybWluYXRlPjwvcGFwZXItcHJvZ3Jlc3M+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2xhc3M9InBkLXRvZ2dsZSIgY2hlY2tlZD0ie3tnbG9iYWxQZFBsb3RzfX0iIG9uLWNoYW5nZT0iaGlkZUFsbFBkRWxlbWVudHNfIiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgcGFydGlhbCBkZXBlbmRlbmNlIHBsb3RzCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFhcmVUaGVyZVBkUGxvdEZlYXR1cmVzXyhwYXJ0aWFsRGVwUGxvdEVsaWdpYmxlRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBkLW5vLWZlYXR1cmVzLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgVGhlIGxvYWRlZCBkYXRhc2V0IGhhcyBubyBmZWF0dXJlcyB0byBzaG93IHBhcnRpYWwKICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2UgcGxvdHMgZm9yLgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZHBsb3RzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1twYXJ0aWFsRGVwUGxvdEVsaWdpYmxlRmVhdHVyZXNdXSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWNvbnRhaW5lciIgZGF0YS1mZWF0dXJlLW5hbWUkPSJbW2l0ZW0ubmFtZV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlRW50cnlDbGFzcyhpdGVtKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0icGQtcm93LWFycm93IHJvdGF0ZWQtaWNvbiIgaWNvbj0iYXJyb3ctZHJvcC1kb3duIiBvbi10YXA9ImNhdGVnb3J5UGFuZUNsaWNrZWQiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS12YWwgcGVyZi10YWJsZS1jbGlja2FibGUgdGYtY2F0ZWdvcnktcGFuZSBwZXJmLXRhYmxlLXRleHQtZW50cnkiIG9uLXRhcD0iY2F0ZWdvcnlQYW5lQ2xpY2tlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2l0ZW0ubmFtZV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZC1lbnRyeS1jb250YWluZXIgcGVyZi10YWJsZS1lbnRyeS1leHBhbmRlZCIgaGlkZGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBkLWlucHV0LWNvbnRhaW5lciIgaGlkZGVuJD0iW1tzaG91bGRIaWRlUGRJbnB1dENvbnRhaW5lcihpdGVtLCBzZWxlY3RlZCldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYW5nZS1pbnB1dC1jb250YWluZXIiIGhpZGRlbiQ9IltbaXRlbS5zYW1wbGVzXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLXRleHQiIHRpdGxlPSJUaGUgcmFuZ2Ugb2YgdmFsdWVzIHRvIHRlc3QgKGRlZmF1bHQgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IGluZmVycmVkKS4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCByYW5nZSBvZiB2YWx1ZXMgdG8gdGVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9InN0eWxlLWlucHV0IHgtbWluIHBkLXJhbmdlLWNvbnRyb2wiIHZhbHVlPSJbW2l0ZW0ub2JzZXJ2ZWRNaW5dXSIgdGl0bGU9IlRoZSBtaW5pbXVtIHZhbHVlIHRvIHRlc3QgKGRlZmF1bHQgdmFsdWUgaXMgYXV0b21hdGljYWxseSBpbmZlcnJlZCkuIiBvbi1pbnB1dD0icGRJbnB1dENoYW5nZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBkLXJhbmdlLWh5cGhlbiI+LTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJzdHlsZS1pbnB1dCB4LW1heCBwZC1yYW5nZS1jb250cm9sIiB2YWx1ZT0iW1tpdGVtLm9ic2VydmVkTWF4XV0iIHRpdGxlPSJUaGUgbWF4aW11bSB2YWx1ZSB0byB0ZXN0IChkZWZhdWx0IHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQpLiIgb24taW5wdXQ9InBkSW5wdXRDaGFuZ2VkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaW5kZXgtY29udGFpbmVyIiBoaWRkZW4kPSJbW3Nob3VsZEhpZGVGZWF0dXJlSW5kaWNlc1NlbGVjdG9yKGl0ZW0ubmFtZSwgc2VsZWN0ZWQpXV0iIHRpdGxlPSJBbiBvcHRpb25hbCBwcmludGVyLXBhZ2Utc3R5bGUgcGF0dGVybiBsaWtlICcwLDIsNC02JyB0byBzZWxlY3QgdGhlIGluZGljZXMgb2YgdGhlIGZlYXR1cmUgdmFsdWVzIHRvIGdlbmVyYXRlIHBsb3RzIGZvci4gVXNlZnVsIGZvciBmZWF0dXJlcyB3aXRoIG1hbnkgcmVwZWF0ZWQgZmllbGRzLiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IGZlYXR1cmUgaW5kaWNlcyA8aT4ob3B0aW9uYWwpPC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJzdHlsZS1pbnB1dCBmZWF0dXJlLWluZGV4LXBhdHRlcm4gcGQtcmFuZ2UtY29udHJvbCIgb24taW5wdXQ9InBkSW5wdXRDaGFuZ2VkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRmLWNhdGVnb3J5LXBhbmUtY29udGVudCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy10YWIiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zaWRlLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1hbmQtY2FyZCI+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImluZmVyZW5jZS1oZWFkZXIgaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVUcnVlTGFiZWxTZXR1cCI+CiAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmlnaHQtc2lkZSByaWdodC1zaWRlLXBlcmZvcm1hbmNlLXRhYiI+CiAgICAgICAgICAgICAgICAgICAgICA8aXJvbi1pY29uIGljb249IltbZ2V0RXhwYW5kQ29sbGFwc2VJY29uKG9wZW5lZFRydWVMYWJlbCldXSIgY2xhc3M9ImV4cGFuZC1jb2xsYXBzZS1idXR0b24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2UgY2xhc3M9ImNhcmQiIGlkPSJjb2xsYXBzZXRydWVsYWJlbCIgb3BlbmVkPSJ7e29wZW5lZFRydWVMYWJlbH19Ij4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd0xhYmVsRHJvcGRvd25fKHN0YXRzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iR3JvdW5kIFRydXRoIEZlYXR1cmUiIGNsYXNzPSJ0aHJlc2hvbGQtZHJvcGRvd24iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3NlbGVjdGVkTGFiZWxGZWF0dXJlfX0iIGF0dHItZm9yLXNlbGVjdGVkPSJuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZ2V0RmVhdHVyZUxpc3RfKHN0YXRzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbZ2V0RmVhdHVyZU5hbWVfKGl0ZW0pXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlbHAtdGl0bGUgaGVscC10aXRsZS1tYXJnaW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCBpcyBncm91bmQgdHJ1dGg/CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmZWF0dXJlIHRoYXQgeW91ciBtb2RlbCBpcyB0cnlpbmcgdG8gcHJlZGljdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpYWxvZy1saW5rIiBvbi10YXA9Im9wZW5EaWFsb2ciPk1vcmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdW5kIFRydXRoIEZlYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRhdGFwb2ludHMgY29udGFpbiBhIGZlYXR1cmUgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50cyB0aGUgZ3JvdW5kIHRydXRoIGZvciB3aGF0IHRoZSBtb2RlbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYXR0ZW1wdGluZyB0byBwcmVkaWN0LCB0aGVuIHNlbGVjdGluZyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlIGhlcmUgYWxsb3dzIHRoZSB0b29sIHRvIGludmVzdGlnYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIG1vZGVsIGJ5IGNvbXBhcmluZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsJ3MgcmVzdWx0cyB0byB0aGUgZ3JvdW5kIHRydXRoIGZlYXR1cmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd0Nvc3RSYXRpb18oc2VsZWN0ZWRMYWJlbEZlYXR1cmUsIG1vZGVsVHlwZSwgbXVsdGlDbGFzcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCB2YWx1ZT0ie3tpbmNvcnJlY3RQcmVkQ29zdFJhdGlvfX0iIGxhYmVsPSJDb3N0IFJhdGlvIChGUC9GTikiIHR5cGU9Im51bWJlciIgY2xhc3M9InRocmVzaG9sZC1jb3N0LWlucHV0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLXRpdGxlIGhlbHAtdGl0bGUtbWFyZ2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCBpcyBjb3N0IHJhdGlvPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb3N0IG9mIGZhbHNlIHBvc2l0aXZlcyByZWxhdGl2ZSB0byBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlcy4gUmVxdWlyZWQgZm9yIG9wdGltaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlhbG9nLWxpbmsiIG9uLXRhcD0ib3BlbkRpYWxvZyI+TW9yZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgaXMgY29zdCByYXRpbz8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZWxscyB0aGUgdG9vbCBob3cgdG8gb3B0aW1pemUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMgd2hlbiB5b3UgdXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgY29udHJvbHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMDAgPSBmYWxzZSBwb3NpdGl2ZXMgYXJlIGVxdWFsbHkgYXMgY29zdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGZhbHNlIG5lZ2F0aXZlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4wMCA9IGZhbHNlIHBvc2l0aXZlcyBhcmUgNCB0aW1lcyBtb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc3RseSB0aGFuIGZhbHNlIG5lZ2F0aXZlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI1ID0gZmFsc2UgbmVnYXRpdmVzIGFyZSA0IHRpbWVzIG1vcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zdGx5IHRoYW4gZmFsc2UgcG9zaXRpdmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93RmVhdHVyZURyb3Bkb3duXyhzdGF0cyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJTbGljZSBieSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEZlYXR1cmVMaXN0XyhzdGF0cyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbZ2V0RmVhdHVyZU5hbWVfKGl0ZW0pXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc051bWVyaWNGZWF0dXJlXyhzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IG1pbj0iMiIgdmFsdWU9Int7bnVtUHJpbWFyeUJ1Y2tldHN9fSIgbGFiZWw9IkJ1Y2tldHMiIHR5cGU9Im51bWJlciIgY2xhc3M9Im51bS1idWNrZXRzLWlucHV0Ij48L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlbHAtdGl0bGUgaGVscC10aXRsZS1tYXJnaW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0IGRvZXMgc2xpY2luZyBkbz8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBwZXJmb3JtYW5jZSBmb3IgZWFjaCB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dTZWNvbmRGZWF0dXJlRHJvcGRvd25fKHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iU2xpY2UgYnkgKHNlY29uZGFyeSkiIGNsYXNzPSJ0aHJlc2hvbGQtZHJvcGRvd24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZ2V0RmVhdHVyZUxpc3RfKHN0YXRzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5hbWU9IltbaXRlbV1dIj5bW2dldEZlYXR1cmVOYW1lXyhpdGVtKV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc051bWVyaWNGZWF0dXJlXyhzZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmUpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbWluPSIyIiB2YWx1ZT0ie3tudW1TZWNvbmRhcnlCdWNrZXRzfX0iIGxhYmVsPSJCdWNrZXRzIiB0eXBlPSJudW1iZXIiIGNsYXNzPSJudW0tYnVja2V0cy1pbnB1dCI+PC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzQmluYXJ5Q2xhc3NpZmljYXRpb25fKG1vZGVsVHlwZSwgbXVsdGlDbGFzcyldXSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctYW5kLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImluZmVyZW5jZS1oZWFkZXIgaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVFeHBsb3JlclNldHVwIj4KICAgICAgICAgICAgICAgICAgICAgIEZhaXJuZXNzCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJbW2dldEV4cGFuZENvbGxhcHNlSWNvbihvcGVuZWRFeHBsb3JlcildXSIgY2xhc3M9ImV4cGFuZC1jb2xsYXBzZS1idXR0b24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2UgY2xhc3M9ImNhcmQiIGlkPSJjb2xsYXBzZWV4cGxvcmVyIiBvcGVuZWQ9Int7b3BlbmVkRXhwbG9yZXJ9fSI+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd0ZlYXR1cmVEcm9wZG93bl8oc3RhdHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWluZm8taGVhZGVyIGhlbHAtdGl0bGUtbWFyZ2luLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgYW4gb3B0aW1pemF0aW9uIHN0cmF0ZWd5CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWluZm8tdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgc3RyYXRlZ3kgdG8gc2V0IGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMKICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc2V0IGNvc3QgcmF0aW8gYW5kIGRhdGEgc2xpY2VzLiBNYW51YWxseQogICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyaW5nIHRocmVzaG9sZHMgb3IgY2hhbmdpbmcgY29zdCByYXRpbyB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBiYWNrIHRvIGN1c3RvbSB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIGNsYXNzPSJvcHRpbWl6YXRpb24tcmFkaW8tZ3JvdXAiIHNlbGVjdGVkPSJ7e29wdGltaXphdGlvblNlbGVjdGVkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iY3VzdG9tIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBpZD0iY3VzdG9tdGhyZXNoIj5DdXN0b20gdGhyZXNob2xkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkN1c3RvbSB0aHJlc2hvbGRzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHlvdXIgb3duIHRocmVzaG9sZHMgdXNpbmcgdGhlIHRocmVzaG9sZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJ1bmF3YXJlIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIj5TaW5nbGUgdGhyZXNob2xkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+U2luZ2xlIHRocmVzaG9sZDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGltaXplIGEgc2luZ2xlIHRocmVzaG9sZCBmb3IgYWxsIGRhdGFwb2ludHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNvc3QgcmF0aW8uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJkZW1vcGFyaXR5IiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBkaXNhYmxlZCQ9IltbIXNob3VsZFNob3dGZWF0dXJlUGVyZkNoYXJ0c18oc2VsZWN0ZWRMYWJlbEZlYXR1cmUsIHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwgaW5mZXJlbmNlcyldXSI+RGVtb2dyYXBoaWMgcGFyaXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+RGVtb2dyYXBoaWMgcGFyaXR5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW1pemUgYSB0aHJlc2hvbGQgcGVyIHNsaWNlIGJhc2VkIG9uIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBjb3N0IHJhdGlvLCBlbnN1cmluZyB0aGUgZGlmZmVyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VzIGFjaGlldmUgZGVtb2dyYXBoaWMgcGFydHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbW9ncmFwaGljIHBhcml0eSBtZWFucyB0aGF0IHNpbWlsYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlcyBvZiBkYXRhcG9pbnRzIGZyb20gZWFjaCBzbGljZSBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWN0ZWQgYXMgcG9zaXRpdmUgY2xhc3NpZmljYXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iZXF1YWxvcHAiIGNsYXNzPSJvcHRpbWl6YXRpb24tcmFkaW8iIGRpc2FibGVkJD0iW1shc2hvdWxkU2hvd0ZlYXR1cmVQZXJmQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj5FcXVhbCBvcHBvcnR1bml0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkVxdWFsIG9wcG9ydHVuaXR5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW1pemUgYSB0aHJlc2hvbGQgcGVyIHNsaWNlIGJhc2VkIG9uIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBjb3N0IHJhdGlvLCBlbnN1cmluZyB0aGUgZGlmZmVyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VzIGFjaGlldmUgZXF1YWwgb3Bwb3J0dW5pdHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVxdWFsIG9wcG9ydHVuaXR5IG1lYW5zIHRoYXQgYW1vbmcgdGhvc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcG9pbnRzIHdpdGggdGhlIHBvc2l0aXZlIGdyb3VuZCB0cnV0aCBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhIHNpbWlsYXIgcGVyY2VudGFnZSBvZiBwb3NpdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb25zIGluIGVhY2ggc2xpY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJlcXVhbGFjYyIgY2xhc3M9Im9wdGltaXphdGlvbi1yYWRpbyIgZGlzYWJsZWQkPSJbWyFzaG91bGRTaG93RmVhdHVyZVBlcmZDaGFydHNfKHNlbGVjdGVkTGFiZWxGZWF0dXJlLCBzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsIGluZmVyZW5jZXMpXV0iPkVxdWFsIGFjY3VyYWN5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+RXF1YWwgYWNjdXJhY3k8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpbWl6ZSBhIHRocmVzaG9sZCBwZXIgc2xpY2UgYmFzZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGNvc3QgcmF0aW8sIGVuc3VyaW5nIHRoZSBkaWZmZXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZXMgYWNoaWV2ZSBlcXVhbCBhY2N1cmFjeS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXF1YWwgYWNjdXJhY3kgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIHNpbWlsYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlIG9mIGNvcnJlY3QgcHJlZGljdGlvbnMgaW4gZWFjaCBzbGljZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9Imdyb3VwIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBkaXNhYmxlZCQ9IltbIXNob3VsZFNob3dGZWF0dXJlUGVyZkNoYXJ0c18oc2VsZWN0ZWRMYWJlbEZlYXR1cmUsIHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwgaW5mZXJlbmNlcyldXSI+R3JvdXAgdGhyZXNob2xkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkdyb3VwIHRocmVzaG9sZHM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpbWl6ZSBhIHNlcGFyYXRlIHRocmVzaG9sZCBmb3IgZWFjaCBzbGljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgY29zdCByYXRpby4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLW1haW4tY29udGVudCI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXNCaW5hcnlDbGFzc2lmaWNhdGlvbl8obW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dIiByZXN0YW1wPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRQZXJmVGFibGVUaXRsZShzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZSwgb3B0aW1pemF0aW9uU2VsZWN0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVWYWx1ZVRocmVzaG9sZHMpXV0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiBwZXJmb3JtYW5jZS1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzaWZpY2F0aW9uIFBlcmZvcm1hbmNlIFRhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgZ3JvdW5kIHRydXRoIGZlYXR1cmUgdG8gZXhwbG9yZSBtb2RlbAogICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIGluY2x1ZGluZyBST0MgY3VydmVzIGFuZCBjb25mdXNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaWNlcy4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2xpY2UgdGhlIGRhdGFzZXQgYnkgZmVhdHVyZXMgYW5kIGV4cGxvcmUgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBieSBzbGljZS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmYWlybmVzcyBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBhbmQgc2VlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIGltcGFjdCBvbiB0aGUgdGhyZXNob2xkcyBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCBzbGljZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1zb3J0LWJveCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0idW5mb2xkLW1vcmUiIGNsYXNzPSJwZXJmLWJ1dHRvbiIgb24tdGFwPSJleHBhbmRBbGxQZXJmb3JtYW5jZSIgYWx0PSJleHBhbmQgYWxsIHNsaWNlcyIgdGl0bGU9IkV4cGFuZCBhbGwgc2xpY2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InVuZm9sZC1sZXNzIiBjbGFzcz0icGVyZi1idXR0b24iIG9uLXRhcD0iY29sbGFwc2VBbGxQZXJmb3JtYW5jZSIgYWx0PSJjb2xsYXBzZSBhbGwgc2xpY2VzIiB0aXRsZT0iQ29sbGFwc2UgYWxsIHNsaWNlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJTb3J0IGJ5IiBjbGFzcz0idGhyZXNob2xkLWRyb3Bkb3duIHBlcmYtdGFibGUtc29ydC1tZW51Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRGZWF0dXJlU29ydH19IiBhdHRyLWZvci1zZWxlY3RlZD0ibmFtZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRGZWF0dXJlU29ydEJ5KG1vZGVsVHlwZSwgbXVsdGlDbGFzcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJbW2l0ZW1dXSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtYXJyb3ciPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBjbGFzcz0iZXhwYW5kLWNvbGxhcHNlLWJ1dHRvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS12YWwiPkZlYXR1cmUgVmFsdWU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWNvdW50Ij5Db3VudDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW2dldFBlcmZUYWJsZU1vZGVsQ2xhc3MobnVtTW9kZWxzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIE1vZGVsCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10aHJlc2hvbGQgZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlRocmVzaG9sZDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGhyZXNob2xkLWluZm8taG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2hvbGQtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGxvcmluZyBDbGFzc2lmaWNhdGlvbiBQZXJmb3JtYW5jZQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBzbGlkZXIgdG8gYWRqdXN0IHRoZSBjbGFzc2lmaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkIGZvciB0aGlzIHNsaWNlLiBJbmZlcmVuY2UgdmFsdWVzIGF0IG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSB0aGlzIHRocmVzaG9sZCBhcmUgY29uc2lkZXJlZCBhIHBvc2l0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbiwgd2hpbGUgaW5mZXJlbmNlIHZhbHVlcyBiZWxvdyB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgYXJlIGNvbnNpZGVyZWQgYSBuZWdhdGl2ZSBjbGFzc2lmaWNhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWZwIj5GYWxzZSBQb3NpdGl2ZXMgKCUpPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1mbiI+RmFsc2UgTmVnYXRpdmVzICglKTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtYWNjIj5BY2N1cmFjeSAoJSk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWYxIj5GMTwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyaWVzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tmZWF0dXJlVmFsdWVUaHJlc2hvbGRzXV0iIGFzPSJmZWF0dXJlVmFsdWVUaHJlc2hvbGQiPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW2dldFBlcmZUYWJsZVJvd0NsYXNzKGZlYXR1cmVWYWx1ZVRocmVzaG9sZC5vcGVuZWQpXV0iIGRhdGEtaW5kZXgkPSJbW2luZGV4XV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtYXJyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzJD0iW1tnZXRFeHBhbmRDb2xsYXBzZVBlcmZJY29uQ2xhc3MoZmVhdHVyZVZhbHVlVGhyZXNob2xkLm9wZW5lZCldXSIgaWNvbj0iYXJyb3ctZHJvcC1kb3duIiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS12YWwgcGVyZi10YWJsZS1jbGlja2FibGUgcGVyZi10YWJsZS10ZXh0LWVudHJ5IiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRQcmludGFibGVWYWx1ZV8oZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1jb3VudCBwZXJmLXRhYmxlLWNsaWNrYWJsZSBwZXJmLXRhYmxlLW51bS1lbnRyeSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0RmVhdHVyZVZhbHVlQ291bnQoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVWYWx1ZVRocmVzaG9sZCldXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW2dldFBlcmZUYWJsZU1vZGVsQ2xhc3MobnVtTW9kZWxzKV1dIiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRleHQtZW50cnkgcGVyZi10YWJsZS1jbGlja2FibGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0TW9kZWxOYW1lXyhpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10aHJlc2hvbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyIGNsYXNzJD0iW1tnZXRTbGlkZXJDbGFzcyhpbmRleCldXSIgZWRpdGFibGU9InRydWUiIG1pbj0iMCIgbWF4PSIxIiBzdGVwPSIwLjAxIiBpbW1lZGlhdGUtdmFsdWU9Int7aXRlbS50aHJlc2hvbGR9fSIgdmFsdWU9IltbaXRlbS50aHJlc2hvbGRdXSIgb24tdmFsdWUtY2hhbmdlZD0icmVmcmVzaEluZmVyZW5jZXNOb1JlZ2VuXyIgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9InJlZnJlc2hJbmZlcmVuY2VzTm9SZWdlbl8iIG9uLWRvd249InJlc2V0T3B0aW1pemF0aW9uU2VsZWN0ZWRfIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZnAgcGVyZi10YWJsZS1jbGlja2FibGUiIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEZQTW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZCwgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWZuIHBlcmYtdGFibGUtY2xpY2thYmxlIiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGTk1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGQsIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVWYWx1ZVRocmVzaG9sZCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hY2MgcGVyZi10YWJsZS1jbGlja2FibGUiIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEFjY3VyYWN5TW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZCwgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWYxIHBlcmYtdGFibGUtY2xpY2thYmxlIiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGMU1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGQsIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVWYWx1ZVRocmVzaG9sZCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLm9wZW5lZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeS1leHBhbmRlZCBmbGV4LXJvdy1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd0ZlYXR1cmVQZXJmQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmZzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9DIGN1cnZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaG9sZC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPlJPQyBjdXJ2ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcmVjZWl2ZXIgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljIChST0MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUgcGxvdHMgdGhlIHRydWUgcG9zaXRpdmUgcmF0ZSAoVFBSKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIGZhbHNlIHBvc2l0aXZlIHJhdGUgKEZQUikgYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1jdXJ2ZS14LWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlIHBvc2l0aXZlIHJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXktbGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBwb3NpdGl2ZSByYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJbW2dldFJvY0NoYXJ0SWQoaW5kZXgpXV0iIHgtYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIiB5LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFIgY3VydmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gdGhyZXNob2xkLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJyaWdodCIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+UFIgY3VydmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHByZWNpc2lvbi1yZWNhbGwgKFBSKSBjdXJ2ZSBwbG90cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiBhZ2FpbnN0IHJlY2FsbCBhdCB2YXJpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24gdGhyZXNob2xkcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXgtbGFiZWwiPlJlY2FsbDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtY3VydmUteS1sYWJlbCI+UHJlY2lzaW9uPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJbW2dldFByQ2hhcnRJZChpbmRleCldXSIgeC1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iIHktYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Z6LWxpbmUtY2hhcnQyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtdGV4dCI+Q29uZnVzaW9uIG1hdHJpeDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1jb25mdXNpb24tbWF0cml4IGNvdW50cz0iW1tnZXRDb25mdXNpb25Db3VudHNNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywgZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZCwgaW5kZXgsIGZlYXR1cmVWYWx1ZVRocmVzaG9sZCldXSIgbGFiZWw9IltbZ2V0Q29uZnVzaW9uTWF0cml4TGFiZWwoaW5kZXgsIG51bU1vZGVscyldXSIgYmFja2dyb3VuZD0iW1tnZXRDb25mdXNpb25NYXRyaXhDb2xvcihpbmRleCldXSIgYWxsLWl0ZW1zPSJbW2FsbENvbmZNYXRyaXhMYWJlbHNdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RmLWNvbmZ1c2lvbi1tYXRyaXg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93T3ZlcmFsbFRocmVzaG9sZGVyXyhzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtcm93LWV4cGFuZGVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJhcnJvdy1kcm9wLWRvd24iIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyIgZGlzYWJsZWQ+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIGRhdGFwb2ludHMKICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWNvdW50IHBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0RmVhdHVyZVZhbHVlQ291bnQoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmFsbFRocmVzaG9sZHMpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRQZXJmVGFibGVNb2RlbENsYXNzKG51bU1vZGVscyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0TW9kZWxOYW1lXyhpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10aHJlc2hvbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlciBjbGFzcyQ9IltbZ2V0U2xpZGVyQ2xhc3MoaW5kZXgpXV0iIGVkaXRhYmxlPSJ0cnVlIiBtaW49IjAiIG1heD0iMSIgc3RlcD0iMC4wMSIgaW1tZWRpYXRlLXZhbHVlPSJ7e2l0ZW0udGhyZXNob2xkfX0iIHZhbHVlPSJbW2l0ZW0udGhyZXNob2xkXV0iIG9uLXZhbHVlLWNoYW5nZWQ9InJlZnJlc2hJbmZlcmVuY2VzTm9SZWdlbl8iIG9uLWltbWVkaWF0ZS12YWx1ZS1jaGFuZ2VkPSJyZWZyZXNoSW5mZXJlbmNlc05vUmVnZW5fIiBvbi1kb3duPSJyZXNldE9wdGltaXphdGlvblNlbGVjdGVkXyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWZwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3ZlcmFsbFRocmVzaG9sZHN9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEZQTW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmFsbFRocmVzaG9sZHMsIGluZGV4KV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWZuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3ZlcmFsbFRocmVzaG9sZHN9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEZOTW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmFsbFRocmVzaG9sZHMsIGluZGV4KV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRBY2N1cmFjeU1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxUaHJlc2hvbGRzLCBpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1mMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGMU1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxUaHJlc2hvbGRzLCBpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJ5LWV4cGFuZGVkIGZsZXgtcm93LXJldmVyc2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd092ZXJhbGxQZXJmQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmcy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPQyBjdXJ2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gdGhyZXNob2xkLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+Uk9DIGN1cnZlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHJlY2VpdmVyIG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpYyAoUk9DKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZSBwbG90cyB0aGUgdHJ1ZSBwb3NpdGl2ZSByYXRlIChUUFIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIGZhbHNlIHBvc2l0aXZlIHJhdGUgKEZQUikgYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaW91cyBjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXgtbGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlIHBvc2l0aXZlIHJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtY3VydmUteS1sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBwb3NpdGl2ZSByYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dnotbGluZS1jaGFydDIgaWQ9InJvY2NoYXJ0IiB4LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSIgeS1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Z6LWxpbmUtY2hhcnQyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtY3VydmUtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFIgY3VydmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaG9sZC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJyaWdodCIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPlBSIGN1cnZlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHByZWNpc2lvbi1yZWNhbGwgKFBSKSBjdXJ2ZSBwbG90cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gYWdhaW5zdCByZWNhbGwgYXQgdmFyaW91cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXgtbGFiZWwiPlJlY2FsbDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXktbGFiZWwiPlByZWNpc2lvbjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dnotbGluZS1jaGFydDIgaWQ9InByY2hhcnQiIHgtYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIiB5LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdnotbGluZS1jaGFydDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi10ZXh0Ij5Db25mdXNpb24gbWF0cml4PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3ZlcmFsbFRocmVzaG9sZHN9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRmLWNvbmZ1c2lvbi1tYXRyaXggY291bnRzPSJbW2dldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLCBvdmVyYWxsVGhyZXNob2xkcywgaW5kZXgpXV0iIGxhYmVsPSJbW2dldENvbmZ1c2lvbk1hdHJpeExhYmVsKGluZGV4LCBudW1Nb2RlbHMpXV0iIGJhY2tncm91bmQ9IltbZ2V0Q29uZnVzaW9uTWF0cml4Q29sb3IoaW5kZXgpXV0iIGFsbC1pdGVtcz0iW1thbGxDb25mTWF0cml4TGFiZWxzXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtY29uZnVzaW9uLW1hdHJpeD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzTXVsdGlDbGFzc18obW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dIiByZXN0YW1wPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXROb1RocmVzaG9sZFBlcmZUYWJsZVRpdGxlKHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGRzKV1dCiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gcGVyZm9ybWFuY2UtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc2lmaWNhdGlvbiBQZXJmb3JtYW5jZSBUYWJsZQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIGdyb3VuZCB0cnV0aCBmZWF0dXJlIHRvIGV4cGxvcmUgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBpbmNsdWRpbmcgY29uZnVzaW9uIG1hdHJpY2VzLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTbGljZSB0aGUgZGF0YXNldCBhbmQgZXhwbG9yZSBtb2RlbCBwZXJmb3JtYW5jZSBieQogICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtc29ydC1ib3giPgogICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InVuZm9sZC1tb3JlIiBjbGFzcz0icGVyZi1idXR0b24iIG9uLXRhcD0iZXhwYW5kQWxsUGVyZm9ybWFuY2UiIGFsdD0iZXhwYW5kIGFsbCBzbGljZXMiIHRpdGxlPSJFeHBhbmQgYWxsIHNsaWNlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJ1bmZvbGQtbGVzcyIgY2xhc3M9InBlcmYtYnV0dG9uIiBvbi10YXA9ImNvbGxhcHNlQWxsUGVyZm9ybWFuY2UiIGFsdD0iY29sbGFwc2UgYWxsIHNsaWNlcyIgdGl0bGU9IkNvbGxhcHNlIGFsbCBzbGljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iU29ydCBieSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biBwZXJmLXRhYmxlLXNvcnQtbWVudSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3NlbGVjdGVkRmVhdHVyZVNvcnR9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZ2V0RmVhdHVyZVNvcnRCeShtb2RlbFR5cGUsIG11bHRpQ2xhc3MpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCI+RmVhdHVyZSBWYWx1ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQiPkNvdW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgTW9kZWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyI+QWNjdXJhY3k8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cmllcy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZmVhdHVyZVZhbHVlVGhyZXNob2xkc11dIiBhcz0iZmVhdHVyZVZhbHVlVGhyZXNob2xkIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRQZXJmVGFibGVSb3dDbGFzcyhmZWF0dXJlVmFsdWVUaHJlc2hvbGQub3BlbmVkKV1dIiBkYXRhLWluZGV4JD0iW1tpbmRleF1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcyQ9IltbZ2V0RXhwYW5kQ29sbGFwc2VQZXJmSWNvbkNsYXNzKGZlYXR1cmVWYWx1ZVRocmVzaG9sZC5vcGVuZWQpXV0iIGljb249ImFycm93LWRyb3AtZG93biIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIHBlcmYtdGFibGUtY2xpY2thYmxlIHBlcmYtdGFibGUtdGV4dC1lbnRyeSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0UHJpbnRhYmxlVmFsdWVfKGZlYXR1cmVWYWx1ZVRocmVzaG9sZCldXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQgcGVyZi10YWJsZS1udW0tZW50cnkgcGVyZi10YWJsZS1jbGlja2FibGUgcGVyZi10YWJsZS10ZXh0LWVudHJ5IiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNdWx0aUNsYXNzRmVhdHVyZVZhbHVlQ291bnQoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGV4dC1lbnRyeSBwZXJmLXRhYmxlLWNsaWNrYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNb2RlbE5hbWVfKGluZGV4KV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyBwZXJmLXRhYmxlLWNsaWNrYWJsZSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10ZXh0LWVudHJ5IHBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE11bHRpQ2xhc3NBY2N1cmFjeU1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC5vcGVuZWR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnktZXhwYW5kZWQgZmxleC1yb3ctcmV2ZXJzZSBzY3JvbGwteCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dGZWF0dXJlUGVyZkNoYXJ0c18oc2VsZWN0ZWRMYWJlbEZlYXR1cmUsIHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwgaW5mZXJlbmNlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmcy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi10ZXh0Ij5Db25mdXNpb24gbWF0cml4PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tpbmZlcmVuY2VTdGF0c19dXSIgYXM9ImluZmVyZW5jZVN0YXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRmLWNvbmZ1c2lvbi1tYXRyaXggY291bnRzPSJbW2dldE11bHRpQ2xhc3NDb25mTWF0cml4KGluZmVyZW5jZVN0YXRzXywgaW5kZXgsIGZlYXR1cmVWYWx1ZVRocmVzaG9sZCldXSIgbGFiZWw9IltbZ2V0Q29uZnVzaW9uTWF0cml4TGFiZWwoaW5kZXgsIG51bU1vZGVscyldXSIgYmFja2dyb3VuZD0iW1tnZXRDb25mdXNpb25NYXRyaXhDb2xvcihpbmRleCldXSIgYWxsLWl0ZW1zPSJbW2FsbENvbmZNYXRyaXhMYWJlbHNdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RmLWNvbmZ1c2lvbi1tYXRyaXg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbYWxsQ29uZk1hdHJpeExhYmVsc11dIiBhcz0ibGFiZWwiIGluZGV4LWFzPSJsYWJlbEluZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmZzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1jdXJ2ZS10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9DIGN1cnZlIGZvciBbW2dldExhYmVsKGxhYmVsSW5kKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gdGhyZXNob2xkLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST0MgY3VydmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSByZWNlaXZlciBvcGVyYXRpbmcgY2hhcmFjdGVyaXN0aWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChST0MpIGN1cnZlIHBsb3RzIHRoZSB0cnVlIHBvc2l0aXZlIHJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUUFIpIGFnYWluc3QgdGhlIGZhbHNlIHBvc2l0aXZlIHJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGUFIpIGF0IHZhcmlvdXMgY2xhc3NpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIG11bHRpLWNsYXNzIGNsYXNzaWZpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ibGVtLCB3ZSBwbG90IG9uZSBST0MgY3VydmUgZm9yIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCBhdCBlYWNoIHRpbWUgY29uc2lkZXJpbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBpbiBxdWVzdGlvbiBhcyB0aGUgcG9zaXRpdmUgb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYWxsIHRoZSBvdGhlcnMgYXMgbmVnYXRpdmVzICg8aT5pLmUuPC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+YmluYXJpemVkPC9pPiB2ZXJzaW9ucyBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JsZW0pLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1jdXJ2ZS14LWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UgcG9zaXRpdmUgcmF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXktbGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlIHBvc2l0aXZlIHJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJbW2dldFJvY0NoYXJ0TGFiZWxJZChsYWJlbEluZCwgaW5kZXgpXV0iIHgtYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIiB5LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Z6LWxpbmUtY2hhcnQyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtY3VydmUtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSIGN1cnZlIGZvciBbW2dldExhYmVsKGxhYmVsSW5kKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gdGhyZXNob2xkLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+UFIgY3VydmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBwcmVjaXNpb24tcmVjYWxsIChQUikgY3VydmUgcGxvdHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiBhZ2FpbnN0IHJlY2FsbCBhdCB2YXJpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBtdWx0aS1jbGFzcyBjbGFzc2lmaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmxlbSwgd2UgcGxvdCBvbmUgUFIgY3VydmUgZm9yIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCBhdCBlYWNoIHRpbWUgY29uc2lkZXJpbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBpbiBxdWVzdGlvbiBhcyB0aGUgcG9zaXRpdmUgb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYWxsIHRoZSBvdGhlcnMgYXMgbmVnYXRpdmVzICg8aT5pLmUuPC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+YmluYXJpemVkPC9pPiB2ZXJzaW9ucyBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JsZW0pLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1jdXJ2ZS14LWxhYmVsIj5SZWNhbGw8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtY3VydmUteS1sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWNpc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dnotbGluZS1jaGFydDIgaWQ9IltbZ2V0UHJDaGFydExhYmVsSWQobGFiZWxJbmQsIGluZGV4KV1dIiB4LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSIgeS1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dPdmVyYWxsVGhyZXNob2xkZXJfKHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1yb3ctZXhwYW5kZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtYXJyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImFycm93LWRyb3AtZG93biIgb24tdGFwPSJ0b2dnbGVQZXJmUm93IiBkaXNhYmxlZD48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgZGF0YXBvaW50cwogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQgcGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNdWx0aUNsYXNzRmVhdHVyZVZhbHVlQ291bnQoaW5mZXJlbmNlU3RhdHNfKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE1vZGVsTmFtZV8oaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtYWNjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaW5mZXJlbmNlU3RhdHNfXV0iIGFzPSJpbmZlcmVuY2VTdGF0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10ZXh0LWVudHJ5IHBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE11bHRpQ2xhc3NBY2N1cmFjeU1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnktZXhwYW5kZWQgZmxleC1yb3ctcmV2ZXJzZSBzY3JvbGwteCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93T3ZlcmFsbFBlcmZDaGFydHNfKHNlbGVjdGVkTGFiZWxGZWF0dXJlLCBzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsIGluZmVyZW5jZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmZzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtdGV4dCI+Q29uZnVzaW9uIG1hdHJpeDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2luZmVyZW5jZVN0YXRzX11dIiBhcz0iaW5mZXJlbmNlU3RhdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRmLWNvbmZ1c2lvbi1tYXRyaXggY291bnRzPSJbW2dldE11bHRpQ2xhc3NDb25mTWF0cml4KGluZmVyZW5jZVN0YXRzXywgaW5kZXgpXV0iIGxhYmVsPSJbW2dldENvbmZ1c2lvbk1hdHJpeExhYmVsKGluZGV4LCBudW1Nb2RlbHMpXV0iIGJhY2tncm91bmQ9IltbZ2V0Q29uZnVzaW9uTWF0cml4Q29sb3IoaW5kZXgpXV0iIGFsbC1pdGVtcz0iW1thbGxDb25mTWF0cml4TGFiZWxzXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtY29uZnVzaW9uLW1hdHJpeD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbYWxsQ29uZk1hdHJpeExhYmVsc11dIiBhcz0ibGFiZWwiIGluZGV4LWFzPSJsYWJlbEluZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmcy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1jdXJ2ZS10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPQyBjdXJ2ZSBmb3IgW1tnZXRMYWJlbChsYWJlbEluZCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2hvbGQtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5ST0MgY3VydmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHJlY2VpdmVyIG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpYyAoUk9DKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlIHBsb3RzIHRoZSB0cnVlIHBvc2l0aXZlIHJhdGUgKFRQUikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSBmYWxzZSBwb3NpdGl2ZSByYXRlIChGUFIpIGF0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaW91cyBjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBtdWx0aS1jbGFzcyBjbGFzc2lmaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JsZW0sIHdlIHBsb3Qgb25lIFJPQyBjdXJ2ZSBmb3IgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCBhdCBlYWNoIHRpbWUgY29uc2lkZXJpbmcgdGhlIGNsYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gcXVlc3Rpb24gYXMgdGhlIHBvc2l0aXZlIG9uZSBhbmQgYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG90aGVycyBhcyBuZWdhdGl2ZXMgKDxpPmkuZS48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+YmluYXJpemVkPC9pPiB2ZXJzaW9ucyBvZiB0aGUgcHJvYmxlbSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1jdXJ2ZS14LWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlIHBvc2l0aXZlIHJhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXktbGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBwb3NpdGl2ZSByYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJbW2dldFJvY0NoYXJ0TGFiZWxJZChsYWJlbCwgJycpXV0iIHgtYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIiB5LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFIgY3VydmUgZm9yIFtbZ2V0TGFiZWwobGFiZWxJbmQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gdGhyZXNob2xkLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJyaWdodCIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+UFIgY3VydmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHByZWNpc2lvbi1yZWNhbGwgKFBSKSBjdXJ2ZSBwbG90cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiBhZ2FpbnN0IHJlY2FsbCBhdCB2YXJpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24gdGhyZXNob2xkcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgbXVsdGktY2xhc3MgY2xhc3NpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ibGVtLCB3ZSBwbG90IG9uZSBQUiBjdXJ2ZSBmb3IgZWFjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCBhdCBlYWNoIHRpbWUgY29uc2lkZXJpbmcgdGhlIGNsYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gcXVlc3Rpb24gYXMgdGhlIHBvc2l0aXZlIG9uZSBhbmQgYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG90aGVycyBhcyBuZWdhdGl2ZXMgKDxpPmkuZS48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+YmluYXJpemVkPC9pPiB2ZXJzaW9ucyBvZiB0aGUgcHJvYmxlbSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi1jdXJ2ZS14LWxhYmVsIj5SZWNhbGw8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLWN1cnZlLXktbGFiZWwiPlByZWNpc2lvbjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iW1tnZXRQckNoYXJ0TGFiZWxJZChsYWJlbCwgJycpXV0iIHgtYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIiB5LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzUmVncmVzc2lvbl8obW9kZWxUeXBlKV1dIiByZXN0YW1wPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXROb1RocmVzaG9sZFBlcmZUYWJsZVRpdGxlKHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGRzKV1dCiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gcGVyZm9ybWFuY2UtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdyZXNzaW9uIFBlcmZvcm1hbmNlIFRhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgZ3JvdW5kIHRydXRoIGZlYXR1cmUgdG8gZXhwbG9yZSBtb2RlbAogICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTbGljZSB0aGUgZGF0YXNldCBhbmQgZXhwbG9yZSBtb2RlbCBwZXJmb3JtYW5jZSBieQogICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJTb3J0IGJ5IiBjbGFzcz0idGhyZXNob2xkLWRyb3Bkb3duIHBlcmYtdGFibGUtc29ydC1tZW51Ij4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3NlbGVjdGVkRmVhdHVyZVNvcnR9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEZlYXR1cmVTb3J0QnkobW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJbW2l0ZW1dXSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtYXJyb3ciPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIj5GZWF0dXJlIFZhbHVlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1jb3VudCI+Q291bnQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVycm9yIj5NZWFuIGVycm9yPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciI+TWVkaWFuIGVycm9yPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciI+TWVhbiBhYnNvbHV0ZSBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZXJyb3IiPk1lZGlhbiBhYnNvbHV0ZSBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtc3EtZXJyb3IiPk1lYW4gc3F1YXJlZCBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtc3EtZXJyb3IiPk1lZGlhbiBzcXVhcmVkIGVycm9yPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJpZXMtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3JlZ3Jlc3Npb25FbnRyaWVzX11dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS12YWwgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbS5uYW1lXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWNvdW50IHBlcmYtdGFibGUtbnVtLWVudHJ5IHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2l0ZW0uY291bnRdXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZXJyb3IgcGVyZi10YWJsZS1udW0tZW50cnkgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZm9ybWF0RXJyb3IoaXRlbS5tZWFuRXJyb3IpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVycm9yIHBlcmYtdGFibGUtbnVtLWVudHJ5IHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvcm1hdEVycm9yKGl0ZW0ubWVkaWFuRXJyb3IpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVycm9yIHBlcmYtdGFibGUtbnVtLWVudHJ5IHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvcm1hdEVycm9yKGl0ZW0ubWVhbkFic0Vycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1zcS1lcnJvciBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb3JtYXRFcnJvcihpdGVtLm1lZGlhbkFic0Vycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb3JtYXRFcnJvcihpdGVtLm1lYW5TcXVhcmVkRXJyb3IpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXNxLWVycm9yIHBlcmYtdGFibGUtbnVtLWVudHJ5IHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvcm1hdEVycm9yKGl0ZW0ubWVkaWFuU3F1YXJlZEVycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtdGFiIj4KICAgICAgICAgICAgICA8ZmFjZXRzLW92ZXJ2aWV3IGlkPSJvdmVydmlldyIgc2VhcmNoLXN0cmluZz0ie3tmZWF0dXJlU2VhcmNoVmFsdWV9fSI+PC9mYWNldHMtb3ZlcnZpZXc+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9pcm9uLXBhZ2VzPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tc3BsaXQtbGF5b3V0Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbF0pIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA+ICNzcGxpdHRlciB7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBtaW4td2lkdGg6IDhweDsKICAgICAgICBtaW4taGVpZ2h0OiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvciwgI2NjYyk7CiAgICAgICAgZmlsbDogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKTsKICAgICAgICBAYXBwbHkgLS12YWFkaW4tc3BsaXQtbGF5b3V0LXNwbGl0dGVyOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFt2ZXJ0aWNhbF0pKSA+ICNzcGxpdHRlciB7CiAgICAgICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbF0pID4gI3NwbGl0dGVyIHsKICAgICAgICBjdXJzb3I6IG5zLXJlc2l6ZTsKICAgICAgfQoKICAgICAgI2hhbmRsZSwKICAgICAgI3NwbGl0dGVyIDo6c2xvdHRlZChbc2xvdD1oYW5kbGVdKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZlcnRpY2FsXSkgPiAjc3BsaXR0ZXIgI2hhbmRsZSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDkwZGVnKTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90IGlkPSJwcmltYXJ5IiBuYW1lPSJwcmltYXJ5Ij48L3Nsb3Q+CiAgICA8ZGl2IGlkPSJzcGxpdHRlciIgb24tdHJhY2s9Il9vbkhhbmRsZVRyYWNrIiBvbi1kb3duPSJfcHJldmVudERlZmF1bHQiPgogICAgICA8c2xvdCBuYW1lPSJoYW5kbGUiPgogICAgICAgIDxzdmcgaWQ9ImhhbmRsZSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIj4KICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyNCI+PC9yZWN0PgogICAgICAgIDwvc3ZnPgogICAgICA8L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzbG90IGlkPSJzZWNvbmRhcnkiIG5hbWU9InNlY29uZGFyeSI+PC9zbG90PgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy1xdWVyeS1wYW5lIj4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJwYW5lIj4KICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWw+CiAgICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWwgaWQ9Imh5cGVycGFyYW1ldGVycy1tZXRyaWNzLXN0YXR1c2VzIj4KICAgICAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsIGlkPSJoeXBlcnBhcmFtZXRlcnMtbWV0cmljcyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24gaHlwZXJwYXJhbWV0ZXJzIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5IeXBlcnBhcmFtZXRlcnM8L2Rpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19ocGFyYW1zfX0iIGFzPSJocGFyYW0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaHBhcmFtIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7aHBhcmFtLmRpc3BsYXllZH19IiBjbGFzcz0iaHBhcmFtLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbS5pbmZvKV1dCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7aXRlbS5jaGVja2VkfX0iIGNsYXNzPSJkaXNjcmV0ZS12YWx1ZS1jaGVja2JveCIgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICBbW19wcmV0dHlQcmludChpdGVtLnZhbHVlKV1dCiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbF1dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbGFiZWw9Ik1pbiIgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4udmFsdWV9fSIgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcLV0iIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi5pbnZhbGlkXV0iIHBsYWNlaG9sZGVyPSItaW5maW5pdHkiPgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGxhYmVsPSJNYXgiIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iIGFsbG93ZWRfcGF0dGVybj0iWzAtOS5lXC1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZF1dIiBwbGFjZWhvbGRlcj0iK2luZmluaXR5Ij4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIucmVnZXhwXV0iPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iUmVndWxhciBleHByZXNzaW9uIiB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLnJlZ2V4cH19IiBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiBtZXRyaWNzIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfbWV0cmljc319IiBhcz0ibWV0cmljIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3ttZXRyaWMuZGlzcGxheWVkfX0iIGNsYXNzPSJtZXRyaWMtY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0KICAgICAgICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQiPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iTWluIiB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IiBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVwtXSIgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIiBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IiBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWR9fSIgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbGFiZWw9Ik1heCIgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcLV0iIHZhbHVlPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIgaW52YWxpZD0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkfX0iIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiPgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIHN0YXR1cyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXR1czwvZGl2PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zdGF0dXNlc11dIiBhcz0ic3RhdHVzIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tzdGF0dXMuYWxsb3dlZH19IiBvbi1jaGFuZ2U9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICBbW3N0YXR1cy5kaXNwbGF5TmFtZV1dCiAgICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdmFhZGluLXNwbGl0LWxheW91dD4KICAgICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbCBpZD0ic29ydGluZy1wYWdpbmciPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiBzb3J0aW5nIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U29ydGluZzwvZGl2PgogICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iU29ydCBieSIgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiIGhvcml6b250YWwtYWxpZ249ImxlZnQiPgogICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tfc29ydEJ5SW5kZXh9fSIgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfaHBhcmFtc11dIiBhcz0iaHBhcmFtIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfbWV0cmljc11dIiBhcz0ibWV0cmljIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iRGlyZWN0aW9uIiBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zb3J0RGlyZWN0aW9ufX0iPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+QXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+RGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiBwYWdpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYWdpbmc8L2Rpdj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICBOdW1iZXIgb2YgbWF0Y2hpbmcgc2Vzc2lvbiBncm91cHM6IFtbX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2UtbnVtYmVyLWlucHV0Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbGFiZWw9IlBhZ2UgIyIgdmFsdWU9Int7X3BhZ2VOdW1iZXJJbnB1dC52YWx1ZX19IiBhbGxvd2VkLXBhdHRlcm49IlswLTldIiBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IiBpbnZhbGlkPSJbW19wYWdlTnVtYmVySW5wdXQuaW52YWxpZF1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICAgICAgPGRpdiBzbG90PSJzdWZmaXgiIGNsYXNzPSJwYWdlLXN1ZmZpeCI+LyBbW19wYWdlQ291bnRTdHJdXTwvZGl2PgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCBwYWdlLXNpemUtaW5wdXQiPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iTWF4ICMgb2Ygc2Vzc2lvbiBncm91cHMgcGVyIHBhZ2U6IiB2YWx1ZT0ie3tfcGFnZVNpemVJbnB1dC52YWx1ZX19IiBhbGxvd2VkLXBhdHRlcm49IlswLTldIiBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IiBpbnZhbGlkPSJbW19wYWdlU2l6ZUlucHV0LmludmFsaWRdXSIgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIj4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdmFhZGluLXNwbGl0LWxheW91dD4KICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5wYW5lIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBtYXJnaW46IDVweCAxMHB4IDVweCAxMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgICAgfQogICAgICAjaHlwZXJwYXJhbWV0ZXJzLW1ldHJpY3Mtc3RhdHVzZXMgewogICAgICAgIGZsZXgtYmFzaXM6IDcwJTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgI2h5cGVycGFyYW1ldGVycy1tZXRyaWNzIHsKICAgICAgICBmbGV4LWJhc2lzOiA5MCU7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5oeXBlcnBhcmFtZXRlcnMgewogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5tZXRyaWNzIHsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAuc3RhdHVzZXMgewogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgICNzb3J0aW5nLXBhZ2luZyB7CiAgICAgICAgZmxleC1iYXNpczogMzAlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICAuc29ydGluZyB7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KICAgICAgLnBhZ2luZyB7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KICAgICAgLmRpc2NyZXRlLXZhbHVlLWNoZWNrYm94LAogICAgICAubWV0cmljLWNoZWNrYm94LAogICAgICAuaHBhcmFtLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3ggewogICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwogICAgICB9CiAgICAgIC5ocGFyYW0sCiAgICAgIC5tZXRyaWMgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5pbmxpbmUtZWxlbWVudCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiA0MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnBhZ2UtbnVtYmVyLWlucHV0IHsKICAgICAgICB3aWR0aDogMjAlOwogICAgICB9CiAgICAgIC5wYWdlLXNpemUtaW5wdXQgewogICAgICAgIHdpZHRoOiA2MCU7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLWxpc3Rib3ggewogICAgICAgIG1heC1oZWlnaHQ6IDE1ZW07CiAgICAgIH0KICAgICAgLnBhZ2Utc3VmZml4IHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItaGVhZGVyLXBhbmVsIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWw7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAjbWFpblBhbmVsIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWJvZHk7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzY3JvbGwKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNjcm9sbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2Nyb2xsLWNvbnRhaW5lcjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogY292ZXIKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPWNvdmVyXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb3Zlci1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpblBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogc3RhdGljOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzdGFuZGFyZAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c3RhbmRhcmRdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXN0YW5kYXJkLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc2VhbWVkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zZWFtZWRdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNlYW1lZC1jb250YWluZXI7CiAgICAgIH0KCgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXdhdGVyZmFsbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtd2F0ZXJmYWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogd2F0ZXJmYWxsLXRhbGwKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXdhdGVyZmFsbC10YWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtdGFsbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICNkcm9wU2hhZG93IHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXM7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNoYWRvdzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cuaGFzLXNoYWRvdyB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgPiA6OnNsb3R0ZWQoLmZpdCkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICA8L3N0eWxlPgoKICAgIDxzbG90IGlkPSJoZWFkZXJTbG90IiBuYW1lPSJoZWFkZXIiPjwvc2xvdD4KCiAgICA8ZGl2IGlkPSJtYWluUGFuZWwiPgogICAgICA8ZGl2IGlkPSJtYWluQ29udGFpbmVyIiBjbGFzcyQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10b29sYmFyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICAtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQ6IHZhcigtLXBhcGVyLXRvb2xiYXItaGVpZ2h0LCA2NHB4KTsKICAgICAgICAtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQ6IHZhcigtLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0LCA1NnB4KTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci10b29sYmFyLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbGJhci1jb2xvciwgdmFyKC0tZGFyay10aGVtZS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbGJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoLmFuaW1hdGUpIHsKICAgICAgICB0cmFuc2l0aW9uOiB2YXIoLS1wYXBlci10b29sYmFyLXRyYW5zaXRpb24sIGhlaWdodCAwLjE4cyBlYXNlLWluKTsKICAgICAgfQoKICAgICAgOmhvc3QoLm1lZGl1bS10YWxsKSB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpICogMik7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbGJhci1tZWRpdW07CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpICogMyk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbGJhci10YWxsOwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCk7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbGJhci1jb250ZW50OwogICAgICB9CgogICAgICAvKgogICAgICAgKiBUT0RPOiBXaGVyZSBzaG91bGQgbWVkaWEgcXVlcnkgYnJlYWtwb2ludHMgbGl2ZSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBlbGVtZW50cz8KICAgICAgICovCgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHsKICAgICAgICA6aG9zdCB7CiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLm1lZGl1bS10YWxsKSB7CiAgICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCkgKiAyKTsKICAgICAgICB9CgogICAgICAgIDpob3N0KC50YWxsKSB7CiAgICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCkgKiAzKTsKICAgICAgICB9CgogICAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAjdG9wQmFyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC8qIG1pZGRsZSBiYXIgKi8KICAgICAgI21pZGRsZUJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdCgudGFsbCkgI21pZGRsZUJhciwKICAgICAgOmhvc3QoLm1lZGl1bS10YWxsKSAjbWlkZGxlQmFyIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7CiAgICAgIH0KCiAgICAgIC8qIGJvdHRvbSBiYXIgKi8KICAgICAgI2JvdHRvbUJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtYWtlIGVsZW1lbnRzIChlLmcuIGJ1dHRvbnMpIHJlc3BvbmQgdG8gbW91c2UvdG91Y2ggZXZlbnRzCiAgICAgICAqCiAgICAgICAqIGAudG9vbGJhci10b29sc2AgZGlzYWJsZXMgdG91Y2ggZXZlbnRzIHNvIG11bHRpcGxlIHRvb2xiYXJzIGNhbiBzdGFjayBhbmQgbm90CiAgICAgICAqIGFic29yYiBldmVudHMuIEFsbCBjaGlsZHJlbiBtdXN0IGhhdmUgcG9pbnRlciBldmVudHMgcmUtZW5hYmxlZCB0byB3b3JrIGFzCiAgICAgICAqIGV4cGVjdGVkLgogICAgICAgKi8KICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoKjpub3QoW2Rpc2FibGVkXSkpIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIG1hcmdpbi1sZWZ0OiA1NnB4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZChwYXBlci1pY29uLWJ1dHRvbiArIC50aXRsZSkgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CgogICAgICAvKioKICAgICAgICogVGhlIC0tcGFwZXItdG9vbGJhci10aXRsZSBtaXhpbiBpcyBhcHBsaWVkIGhlcmUgaW5zdGVhZCBvZiBhYm92ZSB0bwogICAgICAgKiBmaXggdGhlIGlzc3VlIHdpdGggbWFyZ2luLWxlZnQgYmVpbmcgaWdub3JlZCBkdWUgdG8gY3NzIG9yZGVyaW5nLgogICAgICAgKi8KICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbGJhci10aXRsZTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b25baWNvbj1tZW51XSkgewogICAgICAgIG1hcmdpbi1yaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLmZpdCkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IGF1dG87CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAvKiBUT0RPKG5vbXMpOiBVbnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIGZvciBjbGFzc2VzIHRoYXQgZG9uJ3QgdXNlCiAgICAgICAqIC9kZWVwLyBjcmVhdGUgb3VyIG93bi4KICAgICAgICovCiAgICAgIC5zdGFydC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1zdGFydC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5jZW50ZXItanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmVuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1lbmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuYXJvdW5kLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWFyb3VuZC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9wQmFyIiBjbGFzcyQ9InRvb2xiYXItdG9vbHMgW1tfY29tcHV0ZUJhckV4dHJhQ2xhc3NlcyhqdXN0aWZ5KV1dIj4KICAgICAgPHNsb3QgbmFtZT0idG9wIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJtaWRkbGVCYXIiIGNsYXNzJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3MkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMoYm90dG9tSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9ImJvdHRvbSI+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy1zY2FsZS1hbmQtY29sb3ItY29udHJvbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICAKICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IkNvbG9yIGJ5IiBpZD0iY29sb3JCeURyb3BEb3duTWVudSIgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCI+CiAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e29wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4fX0iIGlkPSJjb2xvckJ5TGlzdEJveCI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIiBhcz0iY29sdW1uIiBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIj4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gZGlzYWJsZWQ9IltbIV9pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgICBbW2NvbHVtbi5uYW1lXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KCiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zLWNvbnRhaW5lciI+CiAgICAgICAgCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+CiAgICAgICAgICAgICAgICBbW2NvbHVtbi5uYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIGNsYXNzPSJzY2FsZS1yYWRpby1ncm91cCIgc2VsZWN0ZWQ9Int7Y29sdW1uLnNjYWxlfX0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ibG9nU2NhbGVCdXR0b25fW1tjb2x1bW4ubmFtZV1dIiBuYW1lPSJMT0ciIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSI+CiAgICAgICAgICAgICAgICAgICAgTG9nYXJpdGhtaWMKICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iUVVBTlRJTEUiPgogICAgICAgICAgICAgICAgICAgIFF1YW50aWxlCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmNvbnRyb2wtcGFuZWwgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CiAgICAgIC5jb2x1bW4gewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgICBib3JkZXI6IHNvbGlkIDFweCBkYXJrZ3JheTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgIH0KICAgICAgLmNvbHVtbi10aXRsZSB7CiAgICAgICAgLyogRml0IGV2ZXJ5IHRpdGxlIGluIG9uZSBsaW5lIHNvIHRoZSByYWRpbyBib3hlcyBhbGlnbiB2ZXJ0aWNhbGx5LiAqLwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgICAgLmNvbHVtbnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KICAgICAgLnNjYWxlLXJhZGlvLWdyb3VwIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMnB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIHBhcGVyLWxpc3Rib3ggewogICAgICAgIG1heC1oZWlnaHQ6IDE1ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLWFjdGl2ZS1pdGVtLXRoZW1hYmlsaXR5LXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICB2YWFkaW4tZ3JpZC10YWJsZSAudmFhZGluLWdyaWQtcm93W2FjdGl2ZV0gLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1ib2R5LXJvdy1hY3RpdmUtY2VsbCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS10YWJsZS1zY3JvbGwtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgICN0YWJsZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICB6LWluZGV4OiAtMjsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbaW9zXSAjdGFibGUgewogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbZml4ZWQtc2VjdGlvbnNdICN0YWJsZSB7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS1zY3JvbGwtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUtZm9vdGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1ib2R5IHsKICAgICAgICB6LWluZGV4OiAtMTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbZml4ZWQtc2VjdGlvbnNdIHsKICAgICAgICAvKiBBbnkgdmFsdWUgb3RoZXIgdGhhbiDigJhub25l4oCZIGZvciB0aGUgdHJhbnNmb3JtIHJlc3VsdHMgaW4gdGhlIGNyZWF0aW9uIG9mIGJvdGggYSBzdGFja2luZyBjb250ZXh0IGFuZAogICAgICAgIGEgY29udGFpbmluZyBibG9jay4gVGhlIG9iamVjdCBhY3RzIGFzIGEgY29udGFpbmluZyBibG9jayBmb3IgZml4ZWQgcG9zaXRpb25lZCBkZXNjZW5kYW50cy4gKi8KICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbZml4ZWQtc2VjdGlvbnNdIHZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlciwKICAgICAgdmFhZGluLWdyaWQtdGFibGVbZml4ZWQtc2VjdGlvbnNdIHZhYWRpbi1ncmlkLXRhYmxlLWZvb3RlciB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gdmFhZGluLWdyaWQtdGFibGUtYm9keSNpdGVtcyB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtY2VsbCI+PC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLWNlbGwiPjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLWZvb3Rlci1jZWxsIj48L2RvbS1tb2R1bGU+Cjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1zaXplci1jZWxsIj48L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtc2l6ZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuY2VsbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgICAgZm9udC1zaXplOiAxcHg7CiAgICAgICAgbWFyZ2luLXRvcDogLTFlbTsKICAgICAgfQoKICAgICAgLmNlbGxbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jb2x1bW5zXV0iIGFzPSJjb2x1bW4iPgogICAgICA8dmFhZGluLWdyaWQtc2l6ZXItY2VsbCBjbGFzcz0iY2VsbCIgY29sdW1uPSJbW2NvbHVtbl1dIj4mbmJzcDs8L3ZhYWRpbi1ncmlkLXNpemVyLWNlbGw+CiAgICA8L3RlbXBsYXRlPgoKICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbcGFzc3Rocm91Z2hdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpb3NdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB6LWluZGV4OiAtMzsKICAgICAgfQoKICAgICAgOmhvc3QoW2lvc11bc2Nyb2xsaW5nXSkgewogICAgICAgIHotaW5kZXg6IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgoKICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS1mb2N1cy10cmFwIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgOmhvc3QgewogICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgei1pbmRleDogLTM7CiAgICAgICBoZWlnaHQ6IDA7CiAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgIH0KCiAgICAgOmhvc3QoOmZvY3VzKSwKICAgICAucHJpbWFyeTpmb2N1cywKICAgICA6OnNsb3R0ZWQoLnByaW1hcnk6Zm9jdXMpLAogICAgIC5zZWNvbmRhcnk6Zm9jdXMsCiAgICAgOjpzbG90dGVkKC5zZWNvbmRhcnk6Zm9jdXMpIHsKICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgfQogICAgPC9zdHlsZT4KCiAgICAKICAgIDxkaXYgY2xhc3M9InByaW1hcnkiIHRhYmluZGV4PSIwIiByb2xlPSJncmlkY2VsbCIgb24tZm9jdXM9Il9vbkJhaXRGb2N1cyIgb24tYmx1cj0iX29uQmFpdEJsdXIiPjxkaXYgYXJpYS1oaWRkZW49InRydWUiPiZuYnNwOzwvZGl2PjwvZGl2PgogICAgPGRpdiBjbGFzcz0ic2Vjb25kYXJ5IiB0YWJpbmRleD0iLTEiIHJvbGU9ImdyaWRjZWxsIiBvbi1mb2N1cz0iX29uQmFpdEZvY3VzIiBvbi1ibHVyPSJfb25CYWl0Qmx1ciI+PGRpdiBhcmlhLWhpZGRlbj0idHJ1ZSI+Jm5ic3A7PC9kaXY+PC9kaXY+CgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXJvdyI+PC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLXJvdyI+PC9kb20tbW9kdWxlPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1yb3ctZGV0YWlscy1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgW2RldGFpbHNjZWxsXSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLXRoZW1hYmlsaXR5LXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAudmFhZGluLWdyaWQtY2VsbFtkZXRhaWxzY2VsbF0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctZGV0YWlscy1jZWxsKTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtZGF0YS1wcm92aWRlci10aGVtYWJpbGl0eS1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KCiAgICAgIC8qIEFuaW0gKi8KICAgICAgQGtleWZyYW1lcyB2YWFkaW4tZ3JpZC1zcGluLTM2MCB7CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgdmFhZGluLWdyaWQtc3Bpbi0zNjAgewogICAgICAgIDEwMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICNzcGlubmVyIHsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wcmltYXJ5LWNvbG9yLCAjMDNBOUY0KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4OwogICAgICAgIG1hcmdpbi10b3A6IC04cHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtbG9hZGluZy1zcGlubmVyKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2xvYWRpbmddKSAjc3Bpbm5lciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogdmFhZGluLWdyaWQtc3Bpbi0zNjAgNDAwbXMgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogdmFhZGluLWdyaWQtc3Bpbi0zNjAgNDAwbXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICA6aG9zdChbbG9hZGluZ10pICNpdGVtcyB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3dbc2VsZWN0ZWRdIC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS0xMDAsIHJnYigyNDMsIDI0MywgMjQzKSk7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctc2VsZWN0ZWQtY2VsbCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLW5hdmlnYXRpb24tdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KDpmb2N1cyksCiAgICAgICN0YWJsZTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW25hdmlnYXRpbmddOm5vdChbaW50ZXJhY3RpbmddKSkgW2ZvY3VzZWRdID4gLnZhYWRpbi1ncmlkLXJvd1tmb2N1c2VkXSA+IFtmb2N1c2VkXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgM3B4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1mb2N1c2VkLWNlbGwpOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLWNvbHVtbi1yZW9yZGVyaW5nLXRoZW1hYmlsaXR5LXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtyZW9yZGVyaW5nXSAudmFhZGluLWdyaWQtY2VsbCB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoW3Jlb3JkZXJpbmddKSAudmFhZGluLWdyaWQtY2VsbFtyZW9yZGVyLXN0YXR1cz0iZHJhZ2dpbmciXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeS1jb2xvciwgIzAwMCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW3Jlb3JkZXJpbmddIC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAzMDBtczsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAjc2Nyb2xsZXIgLnZhYWRpbi1ncmlkLWNlbGxbcmVvcmRlci1zdGF0dXM9ImFsbG93ZWQiXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgI3Njcm9sbGVyIC52YWFkaW4tZ3JpZC1jZWxsW3Jlb3JkZXItc3RhdHVzPSJkcmFnZ2luZyJdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWNvbG9yLCAjMDAwKTsKICAgICAgfQoKICAgICAgI3Njcm9sbGVyIC52YWFkaW4tZ3JpZC1jZWxsW3Jlb3JkZXItc3RhdHVzPSJkcmFnZ2luZyJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBvcGFjaXR5OiAwLjk1OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgoKICAgICAgQGtleWZyYW1lcyBhcHBlYXIgewogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGFuaW1hdGlvbjogMW1zIGFwcGVhcjsKICAgICAgfQoKICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1tYXgtZGV2aWNlLXBpeGVsLXJhdGlvOiAxKSB7CiAgICAgICAgOmhvc3QgewogICAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICNpdGVtcyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIGJvcmRlci10b3A6IDAgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgI2l0ZW1zID4gLnZhYWRpbi1ncmlkLXJvdyB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1ib2R5IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUtaGVhZGVyIC52YWFkaW4tZ3JpZC1jZWxsLAogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXIgLnZhYWRpbi1ncmlkLWNlbGwgewogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnZhYWRpbi1ncmlkLWNlbGwgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICAudmFhZGluLWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGU6OmJlZm9yZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMzVweDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICAgIH0KCiAgICAgIFtsYXN0Y29sdW1uXSAudmFhZGluLWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGU6OmJlZm9yZSwKICAgICAgW2xhc3QtZnJvemVuXSAudmFhZGluLWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGU6OmJlZm9yZSB7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZF0gI2hlYWRlciwKICAgICAgdmFhZGluLWdyaWQtdGFibGVbY29sdW1uLXJlc2l6aW5nXSB7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbY29sdW1uLXJlc2l6aW5nXSB7CiAgICAgICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgICB9CgogICAgICAudmFhZGluLWdyaWQtcm93Om5vdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIFtmcm96ZW5dIHsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbbm8tY29udGVudC1wb2ludGVyLWV2ZW50c10gLnZhYWRpbi1ncmlkLWNlbGwgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS10YWJsZS1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QoW2lvc11bY29sdW1uLXJlc2l6aW5nXSkgI291dGVyc2Nyb2xsZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgICNmaXhlZHNpemVyLAogICAgICAjb3V0ZXJzaXplciB7CiAgICAgICAgYm9yZGVyLXRvcDogMCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItYm90dG9tOiAwIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAjdGFibGUgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjdGFibGVbb3ZlcmZsb3ctaGlkZGVuXSwKICAgICAgI291dGVyc2Nyb2xsZXJbb3ZlcmZsb3ctaGlkZGVuXSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtc2l6ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3NpemVyd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHotaW5kZXg6IC0xMDA7CiAgICAgIH0KCiAgICAgICNyZW9yZGVyZ2hvc3QgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY29sdW1uKSwKICAgICAgOjpzbG90dGVkKHZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4pLAogICAgICA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY29sdW1uLWdyb3VwKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXRoZW1hYmlsaXR5LXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgoKICAgICAgLyogRGVmYXVsdCBib3JkZXJzICovCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlciAudmFhZGluLWdyaWQtcm93Omxhc3QtY2hpbGQgLnZhYWRpbi1ncmlkLWNlbGwgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUtZm9vdGVyIC52YWFkaW4tZ3JpZC1yb3c6Zmlyc3QtY2hpbGQgLnZhYWRpbi1ncmlkLWNlbGwgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUtYm9keSAudmFhZGluLWdyaWQtcm93Om5vdChbbGFzdHJvd10pIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgIH0KCiAgICAgIFtsYXN0LWZyb3plbl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpOwogICAgICB9CgogICAgICAvKiBDb2x1bW4gcmVzaXplIGhhbmRsZSAqLwoKICAgICAgLnZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZSk7CiAgICAgIH0KCiAgICAgIC8qIENlbGxzICovCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3cgLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtY2VsbCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlciAudmFhZGluLWdyaWQtcm93IC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1oZWFkZXItY2VsbCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWZvb3RlciAudmFhZGluLWdyaWQtcm93IC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1mb290ZXItY2VsbCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWJvZHkgLnZhYWRpbi1ncmlkLXJvdyAudmFhZGluLWdyaWQtY2VsbDpub3QoW2RldGFpbHNjZWxsXSkgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIEBhcHBseSgtLXZhYWRpbi1ncmlkLWJvZHktY2VsbCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWJvZHkgW29kZF0gLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1ib2R5LXJvdy1vZGQtY2VsbCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3cgLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pW2xhc3QtZnJvemVuXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtY2VsbC1sYXN0LWZyb3plbik7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlOm5vdChbc2Nyb2xsaW5nXSkgdmFhZGluLWdyaWQtdGFibGUtYm9keSAudmFhZGluLWdyaWQtcm93OmhvdmVyIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1ib2R5LXJvdy1ob3Zlci1jZWxsKTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUgLnZhYWRpbi1ncmlkLXJvdyAudmFhZGluLWdyaWQtY2VsbC52YWFkaW4tZ3JpZC1jZWxsW2xhc3Rjb2x1bW5dIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIH0KCiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZSI+CiAgPHRlbXBsYXRlPgogICAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtdGFibGUtdGFibGUtc2Nyb2xsLXN0eWxlcyI+PC9zdHlsZT4KICAgICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXRhYmxlLXRhYmxlLXN0eWxlcyI+PC9zdHlsZT4KCiAgICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC1kYXRhLXByb3ZpZGVyLXRoZW1hYmlsaXR5LXN0eWxlcyI+PC9zdHlsZT4KCiAgICAgIDxkaXYgaWQ9InNwaW5uZXIiPjwvZGl2PgogICAgICA8ZGl2IGlkPSJ0YWJsZSIgdGFiaW5kZXg9Ii0xIiBvdmVyZmxvdy1oaWRkZW4kPSJbW19oaWRlVGFibGVPdmVyZmxvdyhzY3JvbGxiYXJXaWR0aCwgc2FmYXJpKV1dIj4KICAgICAgICA8ZGl2IGlkPSJzaXplcndyYXBwZXIiPgogICAgICAgICAgPHZhYWRpbi1ncmlkLXNpemVyIGlkPSJmaXhlZHNpemVyIiB0b3A9IltbX2VzdFNjcm9sbEhlaWdodF1dIiBjb2x1bW4tdHJlZT0iW1tjb2x1bW5UcmVlXV0iPjwvdmFhZGluLWdyaWQtc2l6ZXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHNsb3QgbmFtZT0iaGVhZGVyIj48L3Nsb3Q+CiAgICAgICAgPHNsb3QgbmFtZT0iaXRlbXMiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJmb290ZXIiPjwvc2xvdD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJyZW9yZGVyZ2hvc3QiPjwvZGl2PgogICAgICA8dmFhZGluLWdyaWQtdGFibGUtb3V0ZXItc2Nyb2xsZXIgaWQ9Im91dGVyc2Nyb2xsZXIiIHNjcm9sbC10YXJnZXQ9Iltbc2Nyb2xsVGFyZ2V0XV0iIG92ZXJmbG93LWhpZGRlbiQ9IltbX2hpZGVPdXRlclNjcm9sbGVyKHNjcm9sbGJhcldpZHRoLCBzYWZhcmkpXV0iIGlvcyQ9IltbaW9zXV0iIHNjcm9sbGluZyQ9Iltbc2Nyb2xsaW5nXV0iPgogICAgICA8dmFhZGluLWdyaWQtc2l6ZXIgaWQ9Im91dGVyc2l6ZXIiIHRvcD0iW1tfZXN0U2Nyb2xsSGVpZ2h0XV0iIGNvbHVtbi10cmVlPSJbW2NvbHVtblRyZWVdXSI+PC92YWFkaW4tZ3JpZC1zaXplcj4KICAgIDwvdmFhZGluLWdyaWQtdGFibGUtb3V0ZXItc2Nyb2xsZXI+CiAgICA8c2xvdD48L3Nsb3Q+CiAgICA8c2xvdCBuYW1lPSJmb290ZXJGb2N1c1RyYXAiPjwvc2xvdD4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLWNvbHVtbiI+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvciwgI2ZmZik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgI3Njcm9sbGVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXRhYmxlLXNjcm9sbC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtcm93LWRldGFpbHMtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXRhYmxlLXN0eWxlcyI+PC9zdHlsZT4KCiAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtdGFibGUtdGhlbWFiaWxpdHktc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXNlbGVjdGlvbi10aGVtYWJpbGl0eS1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtbmF2aWdhdGlvbi10aGVtYWJpbGl0eS1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtYWN0aXZlLWl0ZW0tdGhlbWFiaWxpdHktc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLXRoZW1hYmlsaXR5LXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC1jb2x1bW4tcmVvcmRlcmluZy10aGVtYWJpbGl0eS1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHZhYWRpbi1ncmlkLXRhYmxlIGlkPSJzY3JvbGxlciIgbG9hZGluZyQ9IltbX2xvYWRpbmddXSIgYmluZC1kYXRhPSJbW19iaW5kRGF0YV1dIiBzaXplPSJbW3NpemVdXSIgY29sdW1uLXRyZWU9IltbX2NvbHVtblRyZWVdXSIgcm93LWRldGFpbHMtdGVtcGxhdGU9IltbX3Jvd0RldGFpbHNUZW1wbGF0ZV1dIiBjb2x1bW4tcmVvcmRlcmluZy1hbGxvd2VkPSJbW2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkXV0iPgogICAgICA8dmFhZGluLWdyaWQtdGFibGUtaGVhZGVyIGlkPSJoZWFkZXIiIHNsb3Q9ImhlYWRlciIgdGFyZ2V0PSJbW19nZXRDb250ZW50VGFyZ2V0KCldXSIgY29sdW1uLXRyZWU9IltbX2NvbHVtblRyZWVdXSI+PC92YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXI+CiAgICAgIDx2YWFkaW4tZ3JpZC10YWJsZS1ib2R5IGlkPSJpdGVtcyIgc2xvdD0iaXRlbXMiPjwvdmFhZGluLWdyaWQtdGFibGUtYm9keT4KICAgICAgPHZhYWRpbi1ncmlkLXRhYmxlLWZvb3RlciBpZD0iZm9vdGVyIiBzbG90PSJmb290ZXIiIHRhcmdldD0iW1tfZ2V0Q29udGVudFRhcmdldCgpXV0iIGNvbHVtbi10cmVlPSJbW19jb2x1bW5UcmVlXV0iPjwvdmFhZGluLWdyaWQtdGFibGUtZm9vdGVyPgoKICAgICAgCiAgICAgIDxzbG90IG5hbWU9ImZvb3RlckZvY3VzVHJhcCI+PC9zbG90PgoKICAgICAgCiAgICAgIAogICAgICA8c2xvdD48L3Nsb3Q+CgogICAgICA8dmFhZGluLWdyaWQtdGFibGUtZm9jdXMtdHJhcCBpZD0iZm9vdGVyRm9jdXNUcmFwIiBzbG90PSJmb290ZXJGb2N1c1RyYXAiIG9uLWZvY3VzLWdhaW5lZD0iX29uRm9vdGVyRm9jdXMiIG9uLWZvY3VzLWxvc3Q9Il9vbkZvY3Vzb3V0Ij4KICAgICAgPC92YWFkaW4tZ3JpZC10YWJsZS1mb2N1cy10cmFwPgogICAgPC92YWFkaW4tZ3JpZC10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgPHRlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFzZXNzaW9uR3JvdXBdXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIHNlc3Npb24gZ3JvdXAgc2VsZWN0ZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBzZWxlY3QgYSBzZXNzaW9uIGdyb3VwIHRvIHNlZSBpdHMgbWV0cmljLWdyYXBocyBoZXJlLgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9oYXZlTWV0cmljcyh2aXNpYmxlU2NoZW1hLiopXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBtZXRyaWNzIGFyZSBlbmFibGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2UgZW5hYmxlIHNvbWUgbWV0cmljcyB0byBzZWUgY29udGVudCBoZXJlLgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGF2ZU1ldHJpY3NBbmRTZXNzaW9uR3JvdXAodmlzaWJsZVNjaGVtYS4qLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25Hcm91cCldXSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zXV0iIGFzPSJtZXRyaWNJbmZvIj4KICAgICAgICAgIAogICAgICAgICAgPHRmLXNjYWxhci1jYXJkIGNsYXNzPSJzY2FsYXItY2FyZCIgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIgZGF0YS10by1sb2FkPSJbW19jb21wdXRlU2VyaWVzRm9yU2Vzc2lvbkdyb3VwTWV0cmljKHNlc3Npb25Hcm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNJbmZvKV1dIiB0YWc9IltbbWV0cmljSW5mby5uYW1lLnRhZ11dIiB0YWctbWV0YWRhdGE9IltbX2NvbXB1dGVUYWdNZXRhZGF0YShtZXRyaWNJbmZvKV1dIiB4LXR5cGU9IltbX3hUeXBlXV0iIG11bHRpLWV4cGVyaW1lbnRzPSJbW19ub011bHRpRXhwZXJpbWVudHNdXSIgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIiBhY3RpdmU+CiAgICAgICAgICA8L3RmLXNjYWxhci1jYXJkPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIAogICAgPHN0eWxlIGluY2x1ZGU9Imlyb24tZmxleCI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXRhYmxlLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDx2YWFkaW4tZ3JpZCBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iPgogICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMCIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT4KICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+VHJpYWwgSUQ8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPltbaXRlbS5uYW1lXV08L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VuYWJsZVNob3dNZXRyaWNzXV0iPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iNWVtIiByZXNpemFibGU+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tleHBhbmRlZH19Ij4KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIiBhcz0iaHBhcmFtSW5mbyIgaW5kZXgtYXM9ImhwYXJhbUluZGV4Ij4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cEhQYXJhbShpdGVtLCBocGFyYW1JbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIgYXM9Im1ldHJpY0luZm8iIGluZGV4LWFzPSJtZXRyaWNJbmRleCI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjIiIHdpZHRoPSIxMGVtIiByZXNpemFibGU+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpY0luZm8pXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19zZXNzaW9uR3JvdXBNZXRyaWMoaXRlbSwgbWV0cmljSW5mby5uYW1lKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGNsYXNzPSJyb3ctZGV0YWlscyI+CiAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzIGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgc2Vzc2lvbi1ncm91cD0iW1tpdGVtXV0iIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIgY2xhc3M9InNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdmFhZGluLWdyaWQ+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMiPgogIDx0ZW1wbGF0ZT4KICAgIAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSI+CiAgICAgIAogICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3IHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIgc2Vzc2lvbi1ncm91cHM9IltbX3NpbmdsZXRvblNlc3Npb25Hcm91cHMoc2Vzc2lvbkdyb3VwKV1dIj4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iPgogICAgICA8ZGl2PgogICAgICAgIENsaWNrIG9yIGhvdmVyIG92ZXIgYSBzZXNzaW9uIGdyb3VwIHRvIGRpc3BsYXkgaXRzIHZhbHVlcyBoZXJlLgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIHN2ZyB7CiAgICAgICAgZm9udDogMTBweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuYmFja2dyb3VuZCBwYXRoIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgICAgIH0KCiAgICAgIC5mb3JlZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNzsKICAgICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICAgIH0KCiAgICAgIC8qIFdpbGwgYmUgc2V0IG9uIGZvcmVncm91bmQgcGF0aHMgdGhhdCBhcmUgbm90ICJjb250YWluZWQiIGluIHRoZSBjdXJyZW50CiAgICAgICAgIGF4ZXMgYnJ1c2hlcy4gSWYgbm8gYnJ1c2hlcyBhcmUgc2V0LCBubyBwYXRoIHdpbGwgaGF2ZSB0aGlzIGNsYXNzLiAqLwogICAgICAuZm9yZWdyb3VuZCAuaW52aXNpYmxlLXBhdGggewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0eWxlIGZvciB0aGUgcGF0aCBjbG9zZXN0IHRvIHRoZSBtb3VzZSBwb2ludGVyICh0eXBpY2FsbHkgd2lsbCBiZWNvbWUKICAgICAgdGhlIHNlbGVjdGVkIHBhdGggd2hlbiB0aGUgdXNlciBjbGlja3MpLiAqLwogICAgICAuZm9yZWdyb3VuZCAucGVha2VkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgfQoKICAgICAgLyogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXRoIGNsYXNzLiBXZSB1c2UgIWltcG9ydGFudCB0byBvdmVycmlkZSB0aGUKICAgICAgICAgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBjb2xvciBvZiBhIHBhdGguICovCiAgICAgIC5mb3JlZ3JvdW5kIC5zZWxlY3RlZC1wYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDMgIWltcG9ydGFudDsKICAgICAgICBzdHJva2U6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI2NvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmF4aXMgdGV4dCB7CiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwgMXB4IDAgMCAjZmZmLCAwIC0xcHggMCAjZmZmLCAtMXB4IDAgMCAjZmZmOwogICAgICAgIGZpbGw6ICMwMDA7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAogIAogIAogIAo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIAogICAgPGRpdiBjbGFzcz0icGFuZSI+CiAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsPgogICAgICAgIAogICAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyBpZD0iY29udHJvbHMiIGNsYXNzPSJzZWN0aW9uIiBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIiBvcHRpb25zPSJ7e19vcHRpb25zfX0iPgogICAgICAgIDwvdGYtaHBhcmFtcy1zY2FsZS1hbmQtY29sb3ItY29udHJvbHM+CiAgICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWw+CiAgICAgICAgICAKICAgICAgICAgIDx0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IGlkPSJwbG90IiBjbGFzcz0ic2VjdGlvbiIgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIiBzZWxlY3RlZC1zZXNzaW9uLWdyb3VwPSJ7e19zZWxlY3RlZEdyb3VwfX0iIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iIG9wdGlvbnM9IltbX29wdGlvbnNdXSI+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3Q+CiAgICAgICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbD4KICAgICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMgaWQ9InZhbHVlcyIgY2xhc3M9InNlY3Rpb24iIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIiBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcz4KICAgICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzIGlkPSJkZXRhaWxzIiBjbGFzcz0ic2VjdGlvbiIgYmFja2VuZD0iW1tiYWNrZW5kXV0iIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIiBzZXNzaW9uLWdyb3VwPSJbW19zZWxlY3RlZEdyb3VwXV0iIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIj4KICAgICAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgICAgICAgIDwvdmFhZGluLXNwbGl0LWxheW91dD4KICAgICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgIDwvdmFhZGluLXNwbGl0LWxheW91dD4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgLnBhbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlY3Rpb24gewogICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgfQogICAgICAjY29udHJvbHMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNwbG90IHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAjdmFsdWVzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IDk1cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJwYW5lIj4KICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWw+CiAgICAgICAgCiAgICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIGNsYXNzPSJzZWN0aW9uIiBpZD0iY29udHJvbHMiIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIiBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iIG9wdGlvbnM9Int7X29wdGlvbnN9fSI+CiAgICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbD4KICAgICAgICAgIAogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IGNsYXNzPSJzZWN0aW9uIiBpZD0icGxvdCIgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IiBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IiBvcHRpb25zPSJbW19vcHRpb25zXV0iPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdD4KICAgICAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsPgogICAgICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyBjbGFzcz0ic2VjdGlvbiIgaWQ9InZhbHVlcyIgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcz4KICAgICAgICAgICAgCiAgICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyBjbGFzcz0ic2VjdGlvbiIgaWQ9ImRldGFpbHMiIGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnBhbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlY3Rpb24gewogICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgfQogICAgICAjY29udHJvbHMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNwbG90IHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjdmFsdWVzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IDk1cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIAogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InBhcmFsbGVsLWNvb3Jkcy12aWV3Ij4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldyI+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbYnVnUmVwb3J0VXJsXV0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0iYnVnLXJlcG9ydCIgcmFpc2VkIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiPgogICAgICAgICAgICAgICAgICBCdWcgUmVwb3J0IC8gRmVhdHVyZSBSZXF1ZXN0CiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWxwVXJsXV0iPgogICAgICAgICAgICAgIDxhIGhyZWYkPSJbW2hlbHBVcmxdXSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscC1vdXRsaW5lIiB0aXRsZT0iVmlldyBkb2N1bWVudGF0aW9uIj4KICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci10YWJzPgogICAgICA8L3BhcGVyLXRvb2xiYXI+CiAgICAgIDxpcm9uLXBhZ2VzIHNlbGVjdGVkPSJbW19zZWxlY3RlZFRhYl1dIiBjbGFzcz0iZml0IHRhYi12aWV3Ij4KICAgICAgICA8ZGl2IGlkPSIwIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgYmFja2VuZD0iW1tiYWNrZW5kXV0iIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIiBlbmFibGUtc2hvdy1tZXRyaWNzPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldyBiYWNrZW5kPSJbW2JhY2tlbmRdXSIgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIiBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjIiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3IGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSI+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3PgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tcGFnZXM+CiAgICA8L3BhcGVyLWhlYWRlci1wYW5lbD4KCiAgICA8c3R5bGU+CiAgICAgIC50YWItdmlldyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC50YWItYmFyIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgfQogICAgICAudGFiIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItdGFicyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci10YWJzLWNvbnRlbnQ6IHsKICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIH0KICAgICAgfQogICAgICB0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAuaGVscC1hbmQtZmVlZGJhY2sgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyAvKiBFbnN1cmUgdGhhdCBpY29ucyBzdGF5IGFsaWduZWQgKi8KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICAgICNidWctcmVwb3J0IHsKICAgICAgICBib3JkZXI6IHNvbGlkIGJsYWNrOwogICAgICAgIGJhY2tncm91bmQ6IHJlZDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmRzOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXgtd2lkdGg6IDE1MHB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIGEgewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLW1haW4iPgogIDx0ZW1wbGF0ZT4KICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8dGYtaHBhcmFtcy1xdWVyeS1wYW5lIGlkPSJxdWVyeS1wYW5lIiBiYWNrZW5kPSJbW2JhY2tlbmRdXSIgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iIGNvbmZpZ3VyYXRpb249Int7X2NvbmZpZ3VyYXRpb259fSIgc2Vzc2lvbi1ncm91cHM9Int7X3Nlc3Npb25Hcm91cHN9fSI+CiAgICAgICAgPC90Zi1ocGFyYW1zLXF1ZXJ5LXBhbmU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZSBpZD0ic2Vzc2lvbnMtcGFuZSIgYmFja2VuZD0iW1tiYWNrZW5kXV0iIGhlbHAtdXJsPSJbW2hlbHBVcmxdXSIgYnVnLXJlcG9ydC11cmw9IltbYnVnUmVwb3J0VXJsXV0iIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIiBjb25maWd1cmF0aW9uPSJbW19jb25maWd1cmF0aW9uXV0iIHNlc3Npb24tZ3JvdXBzPSJbW19zZXNzaW9uR3JvdXBzXV0iPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lPgogICAgICA8L2Rpdj4KICAgIDwvdmFhZGluLXNwbGl0LWxheW91dD4KICAgIDx0Zi1ocGFyYW1zLWdvb2dsZS1hbmFseXRpY3MtdHJhY2tlciBpZD0idHJhY2tlciIgdHJhY2tpbmctaWQ9IltbdHJhY2tpbmdJZF1dIiBuYW1lPSJ0Zl9ocGFyYW1zIj4KICAgIDwvdGYtaHBhcmFtcy1nb29nbGUtYW5hbHl0aWNzLXRyYWNrZXI+CgogICAgPHN0eWxlPgogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtaW4td2lkdGg6IDEwJTsKICAgICAgfQoKICAgICAgLmNlbnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIAo8L2RvbS1tb2R1bGU+CgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIAogICAgPHRmLWhwYXJhbXMtbWFpbiBpZD0iaHBhcmFtcy1tYWluIiBiYWNrZW5kPSJbW19iYWNrZW5kXV0iIGV4cGVyaW1lbnQtbmFtZT0iIj4KICAgIDwvdGYtaHBhcmFtcy1tYWluPgogIDwvdGVtcGxhdGU+CiAgCjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtbWVzaC1sb2FkZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudFdhbGxUaW1lXV0iPgogICAgICAgICAgICAgIFtbX2N1cnJlbnRXYWxsVGltZV1dCiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIHJpZ2h0Ij4KICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBhY3RpdmUgaGlkZGVuJD0iW1shX2lzTWVzaExvYWRpbmddXSI+CiAgICAgICAgICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwcyhfc3RlcHMpXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyIGlkPSJzdGVwcyIgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIgbWF4PSJbW19nZXRNYXhTdGVwSW5kZXgoX3N0ZXBzKV1dIiBtYXgtbWFya2Vycz0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7X3N0ZXBJbmRleH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJtZXNoLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciIgY2xhc3M9ImFsbC1jb250cm9scyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHZpZXctY29udHJvbCI+CiAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cCBpZD0idmlldy1yYWRpby1ncm91cCIgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319Ij4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJhbGwtcmFkaW8tYnV0dG9uIiBuYW1lPSJhbGwiPgogICAgICAgICAgICAgICAgRGlzcGxheSBhbGwgcG9pbnRzCiAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9ImFsbC1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsIHRoYXQKICAgICAgICAgICAgICAgIHNvbWUgcG9pbnRzIGNvdWxkIGJlIHRvbyBmYXIgKGkuZS4gdG9vIHNtYWxsKSB0byBiZSB2aXNpYmxlLgogICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICBDdXJyZW50IHZpZXcKICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIGZvcj0idXNlci1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgIEtlZXAgY3VycmVudCBjYW1lcmEgcG9zaXRpb24gYW5kIHpvb20gbGV2ZWwuCiAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9InNoYXJlLXJhZGlvLWJ1dHRvbiIgbmFtZT0ic2hhcmUiPgogICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50CiAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9InNoYXJlLXJhZGlvLWJ1dHRvbiIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwb2ludCBjbG91ZCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiPlJFQURNRTwvYT4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIj5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYT4uCiAgICAgICAgICAgIAoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIj50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICAKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldyBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIiBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW1lc2gtbG9hZGVyIGFjdGl2ZT0iW1thY3RpdmVdXSIgc2VsZWN0ZWQtdmlldz0iW1tfc2VsZWN0ZWRWaWV3XV0iIHJ1bj0iW1tpdGVtLnJ1bl1dIiB0YWc9IltbaXRlbS50YWddXSIgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIiBjbGFzcz0idGYtbWVzaC1sb2FkZXItY29udGFpbmVyIiBvbi1jYW1lcmEtcG9zaXRpb24tY2hhbmdlPSJfb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQiPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzLnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIC5ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KCiAgICAgIHRmLXJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC52aWV3LWNvbnRyb2wgewogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC52aWV3LWNvbnRyb2wgaDMudGl0bGUgewogICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLnZpZXctY29udHJvbCBwYXBlci1yYWRpby1ncm91cCB7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CiAgICAgIC8qIExheW91dCBtdXN0IGJlIGhvcml6b250YWwsIGkuZS4gaXRlbXMgYXJyYW5nZWQgaW4gYSByb3cuIElmIGl0ZW1zIGNhbm5vdCBmaXQgaW4gYSByb3csCiAgICAgICAqIHRoZXkgc2hvdWxkIGJlIG1vdmVkIHRvIG5leHQgbGluZS4gQWxsIGl0ZW1zIG11c3QgYmUgc3F1YXJlIGF0IGFsbCB0aW1lcy4gTWluaW11bSBzaXplIG9mCiAgICAgICAqIHRoZSBpdGVtIGlzIDQ4MHB4LiBUaGlzIG1lYW5zIHRoYXQgbWF4aW11bSBzaXplIG9mIHRoZSBpdGVtIG11c3QgYmUgNDgwcHggKyA0NzlweCA9IDk1OXB4LgogICAgICAgKiAqLwogICAgICAuaG9yaXpvbnRhbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICB0Zi1tZXNoLWxvYWRlciB7CiAgICAgICAgd2lkdGg6IDQ4MHB4OwogICAgICAgIGZsZXgtYmFzaXM6IDQ4MHB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICAKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi10ZW5zb3Jib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWRpYWxvZyB3aXRoLWJhY2tkcm9wIGlkPSJzZXR0aW5ncyI+CiAgICAgIDxoMj5TZXR0aW5nczwvaDI+CiAgICAgIDxwYXBlci1jaGVja2JveCBpZD0iYXV0by1yZWxvYWQtY2hlY2tib3giIGNoZWNrZWQ9Int7YXV0b1JlbG9hZEVuYWJsZWR9fSI+CiAgICAgICAgUmVsb2FkIGRhdGEgZXZlcnkgPHNwYW4+W1thdXRvUmVsb2FkSW50ZXJ2YWxTZWNzXV08L3NwYW4+cy4KICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgPHBhcGVyLWlucHV0IGlkPSJwYWdpbmF0aW9uTGltaXRJbnB1dCIgbGFiZWw9IlBhZ2luYXRpb24gbGltaXQiIGFsd2F5cy1mbG9hdC1sYWJlbCB0eXBlPSJudW1iZXIiIG1pbj0iMSIgc3RlcD0iMSIgb24tY2hhbmdlPSJfcGFnaW5hdGlvbkxpbWl0Q2hhbmdlZCIgb24tdmFsdWUtY2hhbmdlZD0iX3BhZ2luYXRpb25MaW1pdFZhbGlkYXRlIj48L3BhcGVyLWlucHV0PgogICAgPC9wYXBlci1kaWFsb2c+CiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBpZD0idG9vbGJhciIgc2xvdD0iaGVhZGVyIiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICA8ZGl2IGlkPSJ0b29sYmFyLWNvbnRlbnQiIHNsb3Q9InRvcCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLXRpdGxlIj5bW2JyYW5kXV08L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfYWN0aXZlRGFzaGJvYXJkc05vdExvYWRlZF1dIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRvb2xiYXItbWVzc2FnZSI+CiAgICAgICAgICAgICAgTG9hZGluZyBhY3RpdmUgZGFzaGJvYXJkc+KApgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19hY3RpdmVEYXNoYm9hcmRzTG9hZGVkXV0iPgogICAgICAgICAgICA8cGFwZXItdGFicyBub2luayBzY3JvbGxhYmxlIHNlbGVjdGVkPSJ7e19zZWxlY3RlZERhc2hib2FyZH19IiBhdHRyLWZvci1zZWxlY3RlZD0iZGF0YS1kYXNoYm9hcmQiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2Rhc2hib2FyZERhdGFdXSIgYXM9ImRhc2hib2FyZERhdHVtIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNEYXNoYm9hcmRBY3RpdmUoZGlzYWJsZWREYXNoYm9hcmRzLCBfYWN0aXZlRGFzaGJvYXJkcywgZGFzaGJvYXJkRGF0dW0pXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItdGFiIGRhdGEtZGFzaGJvYXJkJD0iW1tkYXNoYm9hcmREYXR1bS5wbHVnaW5dXSIgdGl0bGU9IltbZGFzaGJvYXJkRGF0dW0udGFiTmFtZV1dIj4KICAgICAgICAgICAgICAgICAgICBbW2Rhc2hib2FyZERhdHVtLnRhYk5hbWVdXQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXRhYj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci10YWJzPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2luYWN0aXZlRGFzaGJvYXJkc0V4aXN0KF9kYXNoYm9hcmREYXRhLCBkaXNhYmxlZERhc2hib2FyZHMsIF9hY3RpdmVEYXNoYm9hcmRzKV1dIj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iSU5BQ1RJVkUiIG5vLWxhYmVsLWZsb2F0IG5vaW5rIHN0eWxlPSJtYXJnaW4tbGVmdDogMTJweCI+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBpZD0iaW5hY3RpdmUtZGFzaGJvYXJkcy1tZW51IiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tfc2VsZWN0ZWREYXNoYm9hcmR9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9ImRhdGEtZGFzaGJvYXJkIj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZGFzaGJvYXJkRGF0YV1dIiBhcz0iZGFzaGJvYXJkRGF0dW0iPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNEYXNoYm9hcmRJbmFjdGl2ZShkaXNhYmxlZERhc2hib2FyZHMsIF9hY3RpdmVEYXNoYm9hcmRzLCBkYXNoYm9hcmREYXR1bSldXSIgcmVzdGFtcD4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIGRhdGEtZGFzaGJvYXJkJD0iW1tkYXNoYm9hcmREYXR1bS5wbHVnaW5dXSI+W1tkYXNoYm9hcmREYXR1bS50YWJOYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0iZ2xvYmFsLWFjdGlvbnMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpbmplY3RlZC1oZWFkZXItaXRlbXMiPjwvc2xvdD4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGlkPSJyZWxvYWQtYnV0dG9uIiBjbGFzcyQ9IltbX2dldERhdGFSZWZyZXNoaW5nQ2xhc3MoX3JlZnJlc2hpbmcpXV0iIGRpc2FibGVkJD0iW1tfaXNSZWxvYWREaXNhYmxlZF1dIiBpY29uPSJyZWZyZXNoIiBvbi10YXA9InJlbG9hZCIgdGl0bGUkPSJMYXN0IHVwZGF0ZWQ6IFtbX2xhc3RSZWxvYWRUaW1lU2hvcnRdXSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InNldHRpbmdzIiBvbi10YXA9Im9wZW5TZXR0aW5ncyIgaWQ9InNldHRpbmdzLWJ1dHRvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhYmluZGV4PSItMSIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJoZWxwLW91dGxpbmUiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgIDwvYT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLXRvb2xiYXI+CgogICAgICA8ZGl2IGlkPSJjb250ZW50LXBhbmUiIGNsYXNzPSJmaXQiPgogICAgICAgIDxzbG90IG5hbWU9ImluamVjdGVkLW92ZXJ2aWV3Ij48L3Nsb3Q+CiAgICAgICAgPGRpdiBpZD0iY29udGVudCI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2FjdGl2ZURhc2hib2FyZHNGYWlsZWRUb0xvYWRdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmctbWVzc2FnZSI+CiAgICAgICAgICAgICAgPGgzPkZhaWxlZCB0byBsb2FkIHRoZSBzZXQgb2YgYWN0aXZlIGRhc2hib2FyZHMuPC9oMz4KICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIFRoaXMgY2FuIG9jY3VyIGlmIHRoZSBUZW5zb3JCb2FyZCBiYWNrZW5kIGlzIG5vIGxvbmdlciBydW5uaW5nLgogICAgICAgICAgICAgICAgUGVyaGFwcyB0aGlzIHBhZ2UgaXMgY2FjaGVkPwogICAgICAgICAgICAgIAoKICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIElmIHlvdSB0aGluayB0aGF0IHlvdeKAmXZlIGZpeGVkIHRoZSBwcm9ibGVtLCBjbGljayB0aGUgcmVsb2FkCiAgICAgICAgICAgICAgICBidXR0b24gaW4gdGhlIHRvcC1yaWdodC4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1thdXRvUmVsb2FkRW5hYmxlZF1dIj4KICAgICAgICAgICAgICAgICAgV2XigJlsbCB0cnkgdG8gcmVsb2FkIGV2ZXJ5CiAgICAgICAgICAgICAgICAgIFtbYXV0b1JlbG9hZEludGVydmFsU2Vjc11dJm5ic3A7c2Vjb25kcyBhcyB3ZWxsLgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8aT5MYXN0IHJlbG9hZDogW1tfbGFzdFJlbG9hZFRpbWVdXTwvaT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YUxvY2F0aW9uXV0iPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPjxwPgogICAgICAgICAgICAgICAgICAgIDxpPkxvZyBkaXJlY3Rvcnk6CiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZGF0YV9sb2NhdGlvbiI+W1tfZGF0YUxvY2F0aW9uXV08L3NwYW4+PC9pPgogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgIDxwPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nob3dOb0Rhc2hib2FyZHNNZXNzYWdlXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nLW1lc3NhZ2UiPgogICAgICAgICAgICAgIDxoMz5ObyBkYXNoYm9hcmRzIGFyZSBhY3RpdmUgZm9yIHRoZSBjdXJyZW50IGRhdGEgc2V0LjwvaDM+CiAgICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiPlJFQURNRTwvYT4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIj5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYT4uCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICAgIAoKICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxpPkxhc3QgcmVsb2FkOiBbW19sYXN0UmVsb2FkVGltZV1dPC9pPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9jYXRpb25dXSI+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+PHA+CiAgICAgICAgICAgICAgICAgICAgPGk+RGF0YSBsb2NhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkYXRhX2xvY2F0aW9uIj5bW19kYXRhTG9jYXRpb25dXTwvc3Bhbj48L2k+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2hvd05vU3VjaERhc2hib2FyZE1lc3NhZ2VdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmctbWVzc2FnZSI+CiAgICAgICAgICAgICAgPGgzPgogICAgICAgICAgICAgICAgVGhlcmXigJlzIG5vIGRhc2hib2FyZCBieSB0aGUgbmFtZSBvZgogICAgICAgICAgICAgICAg4oCcPHR0PltbX3NlbGVjdGVkRGFzaGJvYXJkXV08L3R0Pi7igJ0KICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfYWN0aXZlRGFzaGJvYXJkc0xvYWRlZF1dIj4KICAgICAgICAgICAgICAgIDxwPllvdSBjYW4gc2VsZWN0IGEgZGFzaGJvYXJkIGZyb20gdGhlIGxpc3QgYWJvdmUuPC90ZW1wbGF0ZT4KCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8aT5MYXN0IHJlbG9hZDogW1tfbGFzdFJlbG9hZFRpbWVdXTwvaT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YUxvY2F0aW9uXV0iPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPjxwPgogICAgICAgICAgICAgICAgICAgIDxpPkRhdGEgbG9jYXRpb246CiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZGF0YV9sb2NhdGlvbiI+W1tfZGF0YUxvY2F0aW9uXV08L3NwYW4+PC9pPgogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgIDxwPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGlkPSJkYXNoYm9hcmRzLXRlbXBsYXRlIiBpdGVtcz0iW1tfZGFzaGJvYXJkRGF0YV1dIiBhcz0iZGFzaGJvYXJkRGF0dW0iIG9uLWRvbS1jaGFuZ2U9Il9vblRlbXBsYXRlQ2hhbmdlZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhc2hib2FyZC1jb250YWluZXIiIGRhdGEtZGFzaGJvYXJkJD0iW1tkYXNoYm9hcmREYXR1bS5wbHVnaW5dXSIgZGF0YS1zZWxlY3RlZCQ9IltbX3NlbGVjdGVkU3RhdHVzKF9zZWxlY3RlZERhc2hib2FyZCwgZGFzaGJvYXJkRGF0dW0ucGx1Z2luKV1dIj4KICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItaGVhZGVyLXBhbmVsPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTEwMCk7CiAgICAgIH0KCiAgICAgICN0b29sYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGRpc3BsYXk6IHZhcigtLXRiLXRvb2xiYXItdGl0bGUtZGlzcGxheSwgYmxvY2spOwogICAgICB9CgogICAgICAudG9vbGJhci1tZXNzYWdlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci1kcm9wZG93bi1tZW51LWljb246IHsKICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1kcm9wZG93bi1tZW51LWlucHV0OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHBhcGVyLWl0ZW0gewogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH0KCiAgICAgICNpbmFjdGl2ZS1kYXNoYm9hcmRzLW1lbnUgewogICAgICAgIC0tcGFwZXItbGlzdGJveC1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgICAtLXBhcGVyLWxpc3Rib3gtY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuZ2xvYmFsLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyAvKiBFbnN1cmUgdGhhdCBpY29ucyBzdGF5IGFsaWduZWQgKi8KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuZ2xvYmFsLWFjdGlvbnMgYSB7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAjdG9vbGJhci1jb250ZW50IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAjY29udGVudC1wYW5lIHsKICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRlbnQgewogICAgICAgIGZsZXg6IDEgMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZGFzaGJvYXJkLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAvKiBIaWRlIHVuc2VsZWN0ZWQgZGFzaGJvYXJkcy4gV2Ugc3RpbGwgZGlzcGxheSB0aGVtIHdpdGhpbiBhIGNvbnRhaW5lcgogICAgICAgICBvZiBoZWlnaHQgMCBzaW5jZSBQbG90dGFibGUgcHJvZHVjZXMgZGVnZW5lcmF0ZSBjaGFydHMgd2hlbiBjaGFydHMgYXJlCiAgICAgICAgIHJlbG9hZGVkIHdoaWxlIG5vdCBkaXNwbGF5ZWQuICovCiAgICAgIC5kYXNoYm9hcmQtY29udGFpbmVyOm5vdChbZGF0YS1zZWxlY3RlZF0pIHsKICAgICAgICBtYXgtaGVpZ2h0OiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC8qKiBXZSBmdXJ0aGVyIG1ha2UgY29udGFpbmVycyBpbnZpc2libGUuIFNvbWUgZWxlbWVudHMgbWF5IGFuY2hvciB0bwogICAgICAgICAgICB0aGUgdmlld3BvcnQgaW5zdGVhZCBvZiB0aGUgY29udGFpbmVyLCBpbiB3aGljaCBjYXNlIHNldHRpbmcgdGhlIG1heAogICAgICAgICAgICBoZWlnaHQgaGVyZSB0byAwIHdpbGwgbm90IGhpZGUgdGhlbS4gKi8KICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5kYXNoYm9hcmQtY29udGFpbmVyIGlmcmFtZSB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLndhcm5pbmctbWVzc2FnZSB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KCiAgICAgIFtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgICNyZWxvYWQtYnV0dG9uLnJlZnJlc2hpbmcgewogICAgICAgIGFuaW1hdGlvbjogcm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyByb3RhdGUgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIAogIAo8L2RvbS1tb2R1bGU+Cgo8Ym9keT4KICA8dGYtdGVuc29yYm9hcmQgdXNlLWhhc2ggYnJhbmQ9IlRlbnNvckJvYXJkIj48L3RmLXRlbnNvcmJvYXJkPgoKPHNjcmlwdCBzcmM9ImluZGV4LmpzIj48L3NjcmlwdD4=", "headers": [ [ "content-type", "text/html; charset=utf-8" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/environment": { "data": "eyJkYXRhX2xvY2F0aW9uIjogImxvZ3MvZml0IiwgIndpbmRvd190aXRsZSI6ICIifQ==", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/experiments": { "data": "W10=", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/plugin/scalars/scalars?tag=epoch_accuracy&run=20200312-072600%2Ftrain": { "data": "W1sxNTgzOTk3OTg1LjQ1OTUzMywgMCwgMC40MjcwODMzNDMyNjc0NDA4XSwgWzE1ODM5OTc5OTkuMDQxNzc0LCAxLCAwLjUxOTc2NzQ2MzIwNzI0NDldLCBbMTU4Mzk5ODAwOS42Mjk0OTMsIDIsIDAuNTcyNjc0MzkzNjUzODY5Nl0sIFsxNTgzOTk4MDI0LjIyOTc1NywgMywgMC42MjczMjU1OTQ0MjUyMDE0XSwgWzE1ODM5OTgwMzguNTM4OTU3LCA0LCAwLjY2MTI0OTk5NTIzMTYyODRdLCBbMTU4Mzk5ODA1Mi4xNjQ0NjQsIDUsIDAuNjk3MDkzMDA5OTQ4NzMwNV0sIFsxNTgzOTk4MDY1LjkxMzM2MiwgNiwgMC43MTY4NjA0NzMxNTU5NzUzXSwgWzE1ODM5OTgwNzcuNTU0MTEsIDcsIDAuNzY0NTM0ODkwNjUxNzAyOV0sIFsxNTgzOTk4MDkxLjg1OTEzNiwgOCwgMC43NjU4MzMzMTgyMzM0OV0sIFsxNTgzOTk4MTA2LjcxNDUzLCA5LCAwLjc4NjYyNzg4ODY3OTUwNDRdLCBbMTU4Mzk5ODExOS41NjAxMDQsIDEwLCAwLjgwMjkwNjk5MDA1MTI2OTVdLCBbMTU4Mzk5ODEzMS40NzM2MzgsIDExLCAwLjgxNDUzNDkwMjU3MjYzMThdLCBbMTU4Mzk5ODE0NS45MDQ0MDQsIDEyLCAwLjgxNDk5OTk5NzYxNTgxNDJdLCBbMTU4Mzk5ODE2MS4zMTE4MDIsIDEzLCAwLjgyNzkwNjk2NjIwOTQxMTZdLCBbMTU4Mzk5ODE3Mi44MzQ5NjksIDE0LCAwLjgzMTM5NTMyODA0NDg5MTRdLCBbMTU4Mzk5ODE4Ny43NzgzNzQsIDE1LCAwLjgzOTUzNDg3ODczMDc3MzldLCBbMTU4Mzk5ODIwMi4zODkwMjEsIDE2LCAwLjg0MzMzMzMwMzkyODM3NTJdLCBbMTU4Mzk5ODIxNy4xNDQ3NDMsIDE3LCAwLjgzOTUzNDg3ODczMDc3MzldLCBbMTU4Mzk5ODIyOC43OTc3NTQsIDE4LCAwLjg1NDA2OTc2OTM4MjQ3NjhdLCBbMTU4Mzk5ODI0My41MTgyNDUsIDE5LCAwLjg2Mjc5MDcwMzc3MzQ5ODVdLCBbMTU4Mzk5ODI3MS4xNTc5ODIsIDIwLCAwLjg4NzA4MzM1MTYxMjA5MTFdLCBbMTU4Mzk5ODI4NS40NDQ3MTYsIDIxLCAwLjkzNzIwOTMwODE0NzQzMDRdLCBbMTU4Mzk5ODI5OC45MTEzNDYsIDIyLCAwLjk0MTg2MDQzNzM5MzE4ODVdLCBbMTU4Mzk5ODMxMy44NDgzMDIsIDIzLCAwLjk0MjQ0MTg4MDcwMjk3MjRdLCBbMTU4Mzk5ODMyOC4yNDczNjUsIDI0LCAwLjk1MTY2NjY1MzE1NjI4MDVdLCBbMTU4Mzk5ODM0MS45NTY4NjQsIDI1LCAwLjk1MjMyNTU4MjUwNDI3MjVdLCBbMTU4Mzk5ODM1Ni4yOTQxMjcsIDI2LCAwLjk1NDA2OTc5MzIyNDMzNDddLCBbMTU4Mzk5ODM2OC4wOTE5NDQsIDI3LCAwLjk2MTA0NjUxNjg5NTI5NDJdLCBbMTU4Mzk5ODM4Mi42NTI3MTMsIDI4LCAwLjk2NTQxNjY2OTg0NTU4MV0sIFsxNTgzOTk4Mzk3LjEyMzA3MywgMjksIDAuOTY5NzY3NDUxMjg2MzE1OV1d", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/plugin/scalars/scalars?tag=epoch_accuracy&run=20200312-072600%2Fvalidation": { "data": "W1sxNTgzOTk3OTg1LjQ2NjExNywgMCwgMC4zNDY3NzQxOTA2NjQyOTE0XSwgWzE1ODM5OTc5OTkuMDgxNzA3LCAxLCAwLjQwMzIyNTgwOTMzNTcwODZdLCBbMTU4Mzk5ODAwOS42MzAyODUsIDIsIDAuNDY3NzQxOTM2NDQ1MjM2Ml0sIFsxNTgzOTk4MDI0LjIzMDUxNCwgMywgMC41Nzc5NTY5NzQ1MDYzNzgyXSwgWzE1ODM5OTgwMzguNTM5NDg1LCA0LCAwLjQzODE3MjA0MjM2OTg0MjUzXSwgWzE1ODM5OTgwNTIuMTY1MzY3LCA1LCAwLjQyMjA0MzAyNTQ5MzYyMThdLCBbMTU4Mzk5ODA2NS45MTQxOTEsIDYsIDAuNTAyNjg4MTY5NDc5MzcwMV0sIFsxNTgzOTk4MDc3LjYxMDUwMSwgNywgMC42MDQ4Mzg3Mjg5MDQ3MjQxXSwgWzE1ODM5OTgwOTEuODY5NDc5LCA4LCAwLjUyMTUwNTM1NTgzNDk2MDldLCBbMTU4Mzk5ODEwNi43NzYyMjQsIDksIDAuNDc1ODA2NDQ0ODgzMzQ2NTZdLCBbMTU4Mzk5ODExOS42MTM3NDMsIDEwLCAwLjU0MzAxMDc3MTI3NDU2NjddLCBbMTU4Mzk5ODEzMS41MDk2MTYsIDExLCAwLjY3NDczMTE5NDk3Mjk5MTldLCBbMTU4Mzk5ODE0NS45MDUwMywgMTIsIDAuNjM0NDA4NTkzMTc3Nzk1NF0sIFsxNTgzOTk4MTYxLjMxMjgzMywgMTMsIDAuNTY3MjA0Mjk2NTg4ODk3N10sIFsxNTgzOTk4MTcyLjgzNTkwNSwgMTQsIDAuNjM3MDk2NzYyNjU3MTY1NV0sIFsxNTgzOTk4MTg3Ljc3OTE4MiwgMTUsIDAuNjQyNDczMTAxNjE1OTA1OF0sIFsxNTgzOTk4MjAyLjM4OTg1MywgMTYsIDAuNjY2NjY2Njg2NTM0ODgxNl0sIFsxNTgzOTk4MjE3LjE0NTY5NywgMTcsIDAuNTg4NzA5NjUyNDIzODU4Nl0sIFsxNTgzOTk4MjI4LjgxNDgyNSwgMTgsIDAuNTg2MDIxNDgyOTQ0NDg4NV0sIFsxNTgzOTk4MjQzLjUxOTA0NCwgMTksIDAuNjgwMTA3NTMzOTMxNzMyMl0sIFsxNTgzOTk4MjcxLjE1OTM0MSwgMjAsIDAuNjcyMDQzMDI1NDkzNjIxOF0sIFsxNTgzOTk4Mjg1LjQ2ODc0NywgMjEsIDAuNjM3MDk2NzYyNjU3MTY1NV0sIFsxNTgzOTk4Mjk4LjkxMjIwMiwgMjIsIDAuNjM3MDk2NzYyNjU3MTY1NV0sIFsxNTgzOTk4MzEzLjg3MDY5OSwgMjMsIDAuNjQ1MTYxMjcxMDk1Mjc1OV0sIFsxNTgzOTk4MzI4LjI0ODIzMiwgMjQsIDAuNjk2MjM2NTUwODA3OTUyOV0sIFsxNTgzOTk4MzQxLjk1OTE1NiwgMjUsIDAuNjUwNTM3NjEwMDU0MDE2MV0sIFsxNTgzOTk4MzU2LjMyMTg4MywgMjYsIDAuNTk2Nzc0MjIwNDY2NjEzOF0sIFsxNTgzOTk4MzY4LjEyNDg1LCAyNywgMC41OTk0NjIzODk5NDU5ODM5XSwgWzE1ODM5OTgzODIuNjUzNDcxLCAyOCwgMC41OTY3NzQyMjA0NjY2MTM4XSwgWzE1ODM5OTgzOTcuMTQ3NDQyLCAyOSwgMC41ODMzMzMzMTM0NjUxMTg0XV0=", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/plugin/scalars/scalars?tag=epoch_loss&run=20200312-072600%2Ftrain": { "data": "W1sxNTgzOTk3OTg1LjQ0NzA1NywgMCwgMS40MTU1NzUzODUwOTM2ODldLCBbMTU4Mzk5Nzk5OS4wNDEzNjgsIDEsIDEuMTU3NzM4Njg1NjA3OTEwMl0sIFsxNTgzOTk4MDA5LjYyOTE1NiwgMiwgMS4wMDQ5ODgxOTM1MTE5NjNdLCBbMTU4Mzk5ODAyNC4yMjkyNDYsIDMsIDAuOTA3NTgzODMyNzQwNzgzN10sIFsxNTgzOTk4MDM4LjUzODcyNCwgNCwgMC44MzE1ODkxNjIzNDk3MDA5XSwgWzE1ODM5OTgwNTIuMTMwNTM1LCA1LCAwLjc0MTQxNzIyOTE3NTU2NzZdLCBbMTU4Mzk5ODA2NS45MTI4NDEsIDYsIDAuNzEwNjc3MjY2MTIwOTEwNl0sIFsxNTgzOTk4MDc3LjU1Mzc1OSwgNywgMC42NTQ2MDU5ODQ2ODc4MDUyXSwgWzE1ODM5OTgwOTEuODU4ODA4LCA4LCAwLjY1MDgwMDUyNjE0MjEyMDRdLCBbMTU4Mzk5ODEwNi43MTQxOTYsIDksIDAuNTczMzg1OTUzOTAzMTk4Ml0sIFsxNTgzOTk4MTE5LjU1OTc0OCwgMTAsIDAuNTcxMzY2NDI5MzI4OTE4NV0sIFsxNTgzOTk4MTMxLjQ3MzEyNSwgMTEsIDAuNTIwNjQ3ODgzNDE1MjIyMl0sIFsxNTgzOTk4MTQ1LjkwNDEzMywgMTIsIDAuNTI2Nzc0ODgzMjcwMjYzN10sIFsxNTgzOTk4MTYxLjMxMTE5NywgMTMsIDAuNDg3NzU0MjI1NzMwODk2XSwgWzE1ODM5OTgxNzIuODE4NDk1LCAxNCwgMC40OTM2MjgyMDM4Njg4NjU5N10sIFsxNTgzOTk4MTg3Ljc3ODA0MywgMTUsIDAuNDU3NzUwNDk5MjQ4NTA0NjRdLCBbMTU4Mzk5ODIwMi4zODg2NTQsIDE2LCAwLjQ2MTE2OTAwNDQ0MDMwNzZdLCBbMTU4Mzk5ODIxNy4xMjAyNzcsIDE3LCAwLjQ2MjExNjE4MTg1MDQzMzM1XSwgWzE1ODM5OTgyMjguNzk3Mjk5LCAxOCwgMC40NDEwODMyMjI2Mjc2Mzk3N10sIFsxNTgzOTk4MjQzLjUxNzc0MSwgMTksIDAuNDE5ODYyODA2Nzk3MDI3Nl0sIFsxNTgzOTk4MjcxLjE1NzUyNiwgMjAsIDAuMzUwNTI5NzYwMTIyMjk5Ml0sIFsxNTgzOTk4Mjg1LjQ0NDMzNiwgMjEsIDAuMjU2NzI1MTAyNjYzMDQwMTZdLCBbMTU4Mzk5ODI5OC45MTA5NzYsIDIyLCAwLjIyMjc1NzM2OTI3OTg2MTQ1XSwgWzE1ODM5OTgzMTMuODI1NTI4LCAyMywgMC4yMjIxNjIxMjc0OTQ4MTJdLCBbMTU4Mzk5ODMyOC4yNDY5ODUsIDI0LCAwLjE5NDk1MzA2OTA5MDg0MzJdLCBbMTU4Mzk5ODM0MS45NTIwNzcsIDI1LCAwLjE5NTM2NDkzNzE4NjI0MTE1XSwgWzE1ODM5OTgzNTYuMjkzNzI4LCAyNiwgMC4xODIwMTY5Mzg5MjQ3ODk0M10sIFsxNTgzOTk4MzY4LjA5MTU5LCAyNywgMC4xNjQ3MzA2NTMxNjY3NzA5NF0sIFsxNTgzOTk4MzgyLjY1MjA5NywgMjgsIDAuMTU2ODY5NDcxMDczMTUwNjNdLCBbMTU4Mzk5ODM5Ny4xMjI2NDEsIDI5LCAwLjE1MDgwNjMwNzc5MjY2MzU3XV0=", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/plugin/scalars/scalars?tag=epoch_loss&run=20200312-072600%2Fvalidation": { "data": "W1sxNTgzOTk3OTg1LjQ2NTc4OSwgMCwgMS4zNjAxNDc4MzM4MjQxNTc3XSwgWzE1ODM5OTc5OTkuMDQyMjgsIDEsIDEuMDY2Nzk0Mjc2MjM3NDg3OF0sIFsxNTgzOTk4MDA5LjYyOTk3OCwgMiwgMS4wMTcyOTEzMDc0NDkzNDA4XSwgWzE1ODM5OTgwMjQuMjMwMjIyLCAzLCAwLjg3OTg1MjgzMTM2MzY3OF0sIFsxNTgzOTk4MDM4LjUzOTI3MSwgNCwgMC45Nzg5NTAxNDI4NjA0MTI2XSwgWzE1ODM5OTgwNTIuMTY1MDQ5LCA1LCAxLjAyOTcxMDA1NDM5NzU4M10sIFsxNTgzOTk4MDY1LjkxMzg4LCA2LCAwLjkzNTE2MzMxOTExMDg3MDRdLCBbMTU4Mzk5ODA3Ny42MTAwNSwgNywgMC45MjM3MTA1ODQ2NDA1MDI5XSwgWzE1ODM5OTgwOTEuODY5MTU1LCA4LCAwLjk4MzI3MDQwNjcyMzAyMjVdLCBbMTU4Mzk5ODEwNi43MTUxNTIsIDksIDEuMDM4MzA0OTI0OTY0OTA0OF0sIFsxNTgzOTk4MTE5LjYxMzA3NCwgMTAsIDAuOTA0NTM3NDM5MzQ2MzEzNV0sIFsxNTgzOTk4MTMxLjQ3NDI0OSwgMTEsIDAuODMwNDI4MTgzMDc4NzY1OV0sIFsxNTgzOTk4MTQ1LjkwNDgxOCwgMTIsIDAuOTE4MDM2ODc4MTA4OTc4M10sIFsxNTgzOTk4MTYxLjMxMjM5LCAxMywgMC45OTI4Nzg3MzUwNjU0NjAyXSwgWzE1ODM5OTgxNzIuODM1NTA2LCAxNCwgMC44Mzg5OTM2Njg1NTYyMTM0XSwgWzE1ODM5OTgxODcuNzc4ODY3LCAxNSwgMS4wMTQxODQyMzY1MjY0ODkzXSwgWzE1ODM5OTgyMDIuMzg5NTE0LCAxNiwgMC45MTgxMjkzMjQ5MTMwMjQ5XSwgWzE1ODM5OTgyMTcuMTQ1MjgzLCAxNywgMS4wMjQ2NDQ2MTMyNjU5OTEyXSwgWzE1ODM5OTgyMjguNzk4Mzk3LCAxOCwgMC45MjY2MTk3NjgxNDI3MDAyXSwgWzE1ODM5OTgyNDMuNTE4NzM4LCAxOSwgMC45MDA4ODQ5ODU5MjM3NjcxXSwgWzE1ODM5OTgyNzEuMTU5MTAyLCAyMCwgMS4wMjcyNTg4NzI5ODU4Mzk4XSwgWzE1ODM5OTgyODUuNDQ1MzAzLCAyMSwgMS4wNzk1NTMwMDgwNzk1Mjg4XSwgWzE1ODM5OTgyOTguOTExODkyLCAyMiwgMS4xMTk1ODk0NDc5NzUxNTg3XSwgWzE1ODM5OTgzMTMuODQ4OTU3LCAyMywgMS4wOTI1OTQ2MjM1NjU2NzM4XSwgWzE1ODM5OTgzMjguMjQ3OTA5LCAyNCwgMS4wNDExNTU2OTU5MTUyMjIyXSwgWzE1ODM5OTgzNDEuOTU4ODQ1LCAyNSwgMS4xNTE5NDQ1MTgwODkyOTQ0XSwgWzE1ODM5OTgzNTYuMzIxNDQsIDI2LCAxLjMwNTA0OTUzODYxMjM2NTddLCBbMTU4Mzk5ODM2OC4wOTIzODgsIDI3LCAxLjI4NjIxMjA4NjY3NzU1MTNdLCBbMTU4Mzk5ODM4Mi42NTMxNzMsIDI4LCAxLjMxOTk5MTcwNzgwMTgxODhdLCBbMTU4Mzk5ODM5Ny4xMjM2ODUsIDI5LCAxLjQ0MzIxMjAzMjMxODExNTJdXQ==", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/plugin/scalars/tags": { "data": "eyIyMDIwMDMxMi0wNzI2MDAvdHJhaW4iOiB7ImVwb2NoX2xvc3MiOiB7ImRpc3BsYXlOYW1lIjogImVwb2NoX2xvc3MiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJlcG9jaF9hY2N1cmFjeSI6IHsiZGlzcGxheU5hbWUiOiAiZXBvY2hfYWNjdXJhY3kiLCAiZGVzY3JpcHRpb24iOiAiIn19LCAiMjAyMDAzMTItMDcyNjAwL3ZhbGlkYXRpb24iOiB7ImVwb2NoX2xvc3MiOiB7ImRpc3BsYXlOYW1lIjogImVwb2NoX2xvc3MiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJlcG9jaF9hY2N1cmFjeSI6IHsiZGlzcGxheU5hbWUiOiAiZXBvY2hfYWNjdXJhY3kiLCAiZGVzY3JpcHRpb24iOiAiIn19fQ==", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/plugins_listing": { "data": "eyJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiZGVidWdnZXIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWRlYnVnZ2VyLWRhc2hib2FyZCJ9fSwgImdyYXBocyI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJncmFwaHMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWdyYXBoLWRhc2hib2FyZCJ9fSwgImRpc3RyaWJ1dGlvbnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImRpc3RyaWJ1dGlvbnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQifX0sICJoaXN0b2dyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJoaXN0b2dyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIn19LCAidGV4dCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogInRleHQiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXRleHQtZGFzaGJvYXJkIn19LCAicHJfY3VydmVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiUFIgQ3VydmVzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQifX0sICJwcm9maWxlIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogInByb2ZpbGUiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByb2ZpbGUtZGFzaGJvYXJkIn19LCAiYmVob2xkZXIiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogdHJ1ZSwgInRhYl9uYW1lIjogImJlaG9sZGVyIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1iZWhvbGRlci1kYXNoYm9hcmQifX0sICJ3aGF0aWYiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJXaGF0LUlmIFRvb2wiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWludGVyYWN0aXZlLWluZmVyZW5jZS1kYXNoYm9hcmQifX0sICJocGFyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaHBhcmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaHBhcmFtcy1kYXNoYm9hcmQifX0sICJtZXNoIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAibWVzaCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAibWVzaC1kYXNoYm9hcmQifX0sICJwcm9qZWN0b3IiOiB7ImRpc2FibGVfcmVsb2FkIjogdHJ1ZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogInByb2plY3RvciIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJJRlJBTUUiLCAibW9kdWxlX3BhdGgiOiAiL2RhdGEvcGx1Z2luL3Byb2plY3Rvci9pbmRleC5qcyJ9fX0=", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/runs": { "data": "WyIyMDIwMDMxMi0wNzI2MDAvdHJhaW4iLCAiMjAyMDAzMTItMDcyNjAwL3ZhbGlkYXRpb24iXQ==", "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", "application/octet-stream" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { "data": "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", "headers": [ [ "content-type", "application/octet-stream" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/index.js": { "data": "Ly8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvYmFzZS5qcwp2YXIgTjtmdW5jdGlvbiB0YShhKXt2YXIgYz0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjPGEubGVuZ3RoP3tkb25lOiExLHZhbHVlOmFbYysrXX06e2RvbmU6ITB9fX1mdW5jdGlvbiBNYShhKXtyZXR1cm57bmV4dDp0YShhKX19ZnVuY3Rpb24gY2IoYSl7dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBjP2MuY2FsbChhKTpNYShhKX12YXIgZ2I9ZnVuY3Rpb24oYSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PWE/YToidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDphfSh0aGlzKSxpYj0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYyxkKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2NdPWQudmFsdWUpfTsKZnVuY3Rpb24gcGIoYSxjKXtpZihjKXt2YXIgZD1nYjthPWEuc3BsaXQoIi4iKTtmb3IodmFyIGY9MDtmPGEubGVuZ3RoLTE7ZisrKXt2YXIgZz1hW2ZdO2cgaW4gZHx8KGRbZ109e30pO2Q9ZFtnXX1hPWFbYS5sZW5ndGgtMV07Zj1kW2FdO2M9YyhmKTtjIT1mJiZudWxsIT1jJiZpYihkLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpjfSl9fQpwYigiUHJvbWlzZSIsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhuKXt0aGlzLnN0YXRlXz0wO3RoaXMucmVzdWx0Xz12b2lkIDA7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPVtdO3ZhciBwPXRoaXMuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF8oKTt0cnl7bihwLnJlc29sdmUscC5yZWplY3QpfWNhdGNoKHEpe3AucmVqZWN0KHEpfX1mdW5jdGlvbiBkKCl7dGhpcy5iYXRjaF89bnVsbH1mdW5jdGlvbiBmKG4pe3N3aXRjaCh0eXBlb2Ygbil7Y2FzZSAib2JqZWN0IjpyZXR1cm4gbnVsbCE9bjtjYXNlICJmdW5jdGlvbiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gZyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGM/bjpuZXcgYyhmdW5jdGlvbihwKXtwKG4pfSl9aWYoYSlyZXR1cm4gYTtkLnByb3RvdHlwZS5hc3luY0V4ZWN1dGU9ZnVuY3Rpb24obil7aWYobnVsbD09dGhpcy5iYXRjaF8pe3RoaXMuYmF0Y2hfPVtdO3ZhciBwPXRoaXM7dGhpcy5hc3luY0V4ZWN1dGVGdW5jdGlvbihmdW5jdGlvbigpe3AuZXhlY3V0ZUJhdGNoXygpfSl9dGhpcy5iYXRjaF8ucHVzaChuKX07CnZhciBsPWdiLnNldFRpbWVvdXQ7ZC5wcm90b3R5cGUuYXN5bmNFeGVjdXRlRnVuY3Rpb249ZnVuY3Rpb24obil7bChuLDApfTtkLnByb3RvdHlwZS5leGVjdXRlQmF0Y2hfPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmJhdGNoXyYmdGhpcy5iYXRjaF8ubGVuZ3RoOyl7dmFyIG49dGhpcy5iYXRjaF87dGhpcy5iYXRjaF89W107Zm9yKHZhciBwPTA7cDxuLmxlbmd0aDsrK3Ape3ZhciBxPW5bcF07bltwXT1udWxsO3RyeXtxKCl9Y2F0Y2gocil7dGhpcy5hc3luY1Rocm93XyhyKX19fXRoaXMuYmF0Y2hfPW51bGx9O2QucHJvdG90eXBlLmFzeW5jVGhyb3dfPWZ1bmN0aW9uKG4pe3RoaXMuYXN5bmNFeGVjdXRlRnVuY3Rpb24oZnVuY3Rpb24oKXt0aHJvdyBuO30pfTtjLnByb3RvdHlwZS5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0Xz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4ocil7cmV0dXJuIGZ1bmN0aW9uKHQpe3F8fChxPSEwLHIuY2FsbChwLHQpKX19dmFyIHA9dGhpcyxxPSExO3JldHVybntyZXNvbHZlOm4odGhpcy5yZXNvbHZlVG9fKSwKcmVqZWN0Om4odGhpcy5yZWplY3RfKX19O2MucHJvdG90eXBlLnJlc29sdmVUb189ZnVuY3Rpb24obil7bj09PXRoaXM/dGhpcy5yZWplY3RfKG5ldyBUeXBlRXJyb3IoIkEgUHJvbWlzZSBjYW5ub3QgcmVzb2x2ZSB0byBpdHNlbGYiKSk6biBpbnN0YW5jZW9mIGM/dGhpcy5zZXR0bGVTYW1lQXNQcm9taXNlXyhuKTpmKG4pP3RoaXMucmVzb2x2ZVRvTm9uUHJvbWlzZU9ial8obik6dGhpcy5mdWxmaWxsXyhuKX07Yy5wcm90b3R5cGUucmVzb2x2ZVRvTm9uUHJvbWlzZU9ial89ZnVuY3Rpb24obil7dmFyIHA9dm9pZCAwO3RyeXtwPW4udGhlbn1jYXRjaChxKXt0aGlzLnJlamVjdF8ocSk7cmV0dXJufSJmdW5jdGlvbiI9PXR5cGVvZiBwP3RoaXMuc2V0dGxlU2FtZUFzVGhlbmFibGVfKHAsbik6dGhpcy5mdWxmaWxsXyhuKX07Yy5wcm90b3R5cGUucmVqZWN0Xz1mdW5jdGlvbihuKXt0aGlzLnNldHRsZV8oMixuKX07Yy5wcm90b3R5cGUuZnVsZmlsbF89ZnVuY3Rpb24obil7dGhpcy5zZXR0bGVfKDEsCm4pfTtjLnByb3RvdHlwZS5zZXR0bGVfPWZ1bmN0aW9uKG4scCl7aWYoMCE9dGhpcy5zdGF0ZV8pdGhyb3cgRXJyb3IoIkNhbm5vdCBzZXR0bGUoIituKyIsICIrcCsiKTogUHJvbWlzZSBhbHJlYWR5IHNldHRsZWQgaW4gc3RhdGUiK3RoaXMuc3RhdGVfKTt0aGlzLnN0YXRlXz1uO3RoaXMucmVzdWx0Xz1wO3RoaXMuZXhlY3V0ZU9uU2V0dGxlZENhbGxiYWNrc18oKX07Yy5wcm90b3R5cGUuZXhlY3V0ZU9uU2V0dGxlZENhbGxiYWNrc189ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLm9uU2V0dGxlZENhbGxiYWNrc18pe2Zvcih2YXIgbj0wO248dGhpcy5vblNldHRsZWRDYWxsYmFja3NfLmxlbmd0aDsrK24pay5hc3luY0V4ZWN1dGUodGhpcy5vblNldHRsZWRDYWxsYmFja3NfW25dKTt0aGlzLm9uU2V0dGxlZENhbGxiYWNrc189bnVsbH19O3ZhciBrPW5ldyBkO2MucHJvdG90eXBlLnNldHRsZVNhbWVBc1Byb21pc2VfPWZ1bmN0aW9uKG4pe3ZhciBwPXRoaXMuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF8oKTsKbi5jYWxsV2hlblNldHRsZWRfKHAucmVzb2x2ZSxwLnJlamVjdCl9O2MucHJvdG90eXBlLnNldHRsZVNhbWVBc1RoZW5hYmxlXz1mdW5jdGlvbihuLHApe3ZhciBxPXRoaXMuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF8oKTt0cnl7bi5jYWxsKHAscS5yZXNvbHZlLHEucmVqZWN0KX1jYXRjaChyKXtxLnJlamVjdChyKX19O2MucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKHkseil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHk/ZnVuY3Rpb24oeCl7dHJ5e3IoeSh4KSl9Y2F0Y2goQyl7dChDKX19Onp9dmFyIHIsdCx2PW5ldyBjKGZ1bmN0aW9uKHkseil7cj15O3Q9en0pO3RoaXMuY2FsbFdoZW5TZXR0bGVkXyhxKG4scikscShwLHQpKTtyZXR1cm4gdn07Yy5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsbil9O2MucHJvdG90eXBlLmNhbGxXaGVuU2V0dGxlZF89ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKCl7c3dpdGNoKHIuc3RhdGVfKXtjYXNlIDE6bihyLnJlc3VsdF8pOwpicmVhaztjYXNlIDI6cChyLnJlc3VsdF8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgc3RhdGU6ICIrci5zdGF0ZV8pO319dmFyIHI9dGhpcztudWxsPT10aGlzLm9uU2V0dGxlZENhbGxiYWNrc18/ay5hc3luY0V4ZWN1dGUocSk6dGhpcy5vblNldHRsZWRDYWxsYmFja3NfLnB1c2gocSl9O2MucmVzb2x2ZT1nO2MucmVqZWN0PWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgYyhmdW5jdGlvbihwLHEpe3Eobil9KX07Yy5yYWNlPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgYyhmdW5jdGlvbihwLHEpe2Zvcih2YXIgcj1jYihuKSx0PXIubmV4dCgpOyF0LmRvbmU7dD1yLm5leHQoKSlnKHQudmFsdWUpLmNhbGxXaGVuU2V0dGxlZF8ocCxxKX0pfTtjLmFsbD1mdW5jdGlvbihuKXt2YXIgcD1jYihuKSxxPXAubmV4dCgpO3JldHVybiBxLmRvbmU/ZyhbXSk6bmV3IGMoZnVuY3Rpb24ocix0KXtmdW5jdGlvbiB2KHgpe3JldHVybiBmdW5jdGlvbihDKXt5W3hdPUM7ei0tOzA9PQp6JiZyKHkpfX12YXIgeT1bXSx6PTA7ZG8geS5wdXNoKHZvaWQgMCkseisrLGcocS52YWx1ZSkuY2FsbFdoZW5TZXR0bGVkXyh2KHkubGVuZ3RoLTEpLHQpLHE9cC5uZXh0KCk7d2hpbGUoIXEuZG9uZSl9KX07cmV0dXJuIGN9KTtwYigiUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoYygpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGR9KX0sZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShjKCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBkO30pfSl9fSk7CmZ1bmN0aW9uIHZiKGEpe2Z1bmN0aW9uIGMoZil7cmV0dXJuIGEubmV4dChmKX1mdW5jdGlvbiBkKGYpe3JldHVybiBhLnRocm93KGYpfXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLGcpe2Z1bmN0aW9uIGwoayl7ay5kb25lP2Yoay52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGsudmFsdWUpLnRoZW4oYyxkKS50aGVuKGwsZyl9bChhLm5leHQoKSl9KX1mdW5jdGlvbiBCYihhKXtyZXR1cm4gdmIoYSgpKX1mdW5jdGlvbiBDYihhKXtyZXR1cm4gdm9pZCAwIT09YX1mdW5jdGlvbiBIYihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGF9CmZ1bmN0aW9uIExiKGEpe3ZhciBjPXR5cGVvZiBhO2lmKCJvYmplY3QiPT1jKWlmKGEpe2lmKGEgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4iYXJyYXkiO2lmKGEgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIGM7dmFyIGQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpO2lmKCJbb2JqZWN0IFdpbmRvd10iPT1kKXJldHVybiJvYmplY3QiO2lmKCJbb2JqZWN0IEFycmF5XSI9PWR8fCJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5zcGxpY2UmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWEucHJvcGVydHlJc0VudW1lcmFibGUoInNwbGljZSIpKXJldHVybiJhcnJheSI7aWYoIltvYmplY3QgRnVuY3Rpb25dIj09ZHx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmNhbGwmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWEucHJvcGVydHlJc0VudW1lcmFibGUoImNhbGwiKSlyZXR1cm4iZnVuY3Rpb24ifWVsc2UgcmV0dXJuIm51bGwiOwplbHNlIGlmKCJmdW5jdGlvbiI9PWMmJiJ1bmRlZmluZWQiPT10eXBlb2YgYS5jYWxsKXJldHVybiJvYmplY3QiO3JldHVybiBjfWZ1bmN0aW9uIE1iKGEpe3JldHVybiBudWxsPT09YX1mdW5jdGlvbiBRYihhKXtyZXR1cm4iYXJyYXkiPT1MYihhKX1mdW5jdGlvbiBUYihhLGMpe2Z1bmN0aW9uIGQoKXt9ZC5wcm90b3R5cGU9Yy5wcm90b3R5cGU7YS5zdXBlckNsYXNzXz1jLnByb3RvdHlwZTthLnByb3RvdHlwZT1uZXcgZDthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hO2EuYmFzZT1mdW5jdGlvbihmLGcsbCl7Zm9yKHZhciBrPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMiksbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspa1tuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gYy5wcm90b3R5cGVbZ10uYXBwbHkoZixrKX19OwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy90cmFuc2l0aW9uYWxmb3J3YXJkZGVjbGFyYXRpb25zLmpzCi8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2RlYnVnL2Vycm9yLmpzCmZ1bmN0aW9uIFZiKGEpe2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsVmIpO2Vsc2V7dmFyIGM9RXJyb3IoKS5zdGFjaztjJiYodGhpcy5zdGFjaz1jKX1hJiYodGhpcy5tZXNzYWdlPVN0cmluZyhhKSk7dGhpcy5yZXBvcnRFcnJvclRvU2VydmVyPSEwfVRiKFZiLEVycm9yKTtWYi5wcm90b3R5cGUubmFtZT0iQ3VzdG9tRXJyb3IiOwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9kb20vbm9kZXR5cGUuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvYXNzZXJ0cy9hc3NlcnRzLmpzCmZ1bmN0aW9uIFhiKGEsYyl7VmIuY2FsbCh0aGlzLFpiKGEsYykpO3RoaXMubWVzc2FnZVBhdHRlcm49YX1UYihYYixWYik7WGIucHJvdG90eXBlLm5hbWU9IkFzc2VydGlvbkVycm9yIjtmdW5jdGlvbiBhYyhhKXt0aHJvdyBhO31mdW5jdGlvbiBaYihhLGMpe2E9YS5zcGxpdCgiJXMiKTtmb3IodmFyIGQ9IiIsZj1hLmxlbmd0aC0xLGc9MDtnPGY7ZysrKWQrPWFbZ10rKGc8Yy5sZW5ndGg/Y1tnXToiJXMiKTtyZXR1cm4gZCthW2ZdfWZ1bmN0aW9uIGRjKGEsYyl7YWMobmV3IFhiKCJGYWlsdXJlIisoYT8iOiAiK2E6IiIpLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSkpfTsKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvYXJyYXkvYXJyYXkuanMKdmFyIGdjPUFycmF5LnByb3RvdHlwZS5mb3JFYWNoP2Z1bmN0aW9uKGEsYyl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhLGMsdm9pZCAwKX06ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZj1IYihhKT9hLnNwbGl0KCIiKTphLGc9MDtnPGQ7ZysrKWcgaW4gZiYmYy5jYWxsKHZvaWQgMCxmW2ddLGcsYSl9LGhjPUFycmF5LnByb3RvdHlwZS5tYXA/ZnVuY3Rpb24oYSxjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGEsYyx2b2lkIDApfTpmdW5jdGlvbihhLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxmPUFycmF5KGQpLGc9SGIoYSk/YS5zcGxpdCgiIik6YSxsPTA7bDxkO2wrKylsIGluIGcmJihmW2xdPWMuY2FsbCh2b2lkIDAsZ1tsXSxsLGEpKTtyZXR1cm4gZn07CmZ1bmN0aW9uIGtjKGEsYyxkKXtyZXR1cm4gMj49YXJndW1lbnRzLmxlbmd0aD9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLGMpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsYyxkKX07Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2NyeXB0L2NyeXB0LmpzCmZ1bmN0aW9uIGxjKGEpe2lmKDgxOTI+PWEubGVuZ3RoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYSk7Zm9yKHZhciBjPSIiLGQ9MDtkPGEubGVuZ3RoO2QrPTgxOTIpYys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGtjKGEsZCxkKzgxOTIpKTtyZXR1cm4gY307Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2RvbS9hc3NlcnRzLmpzCi8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2Z1bmN0aW9ucy9mdW5jdGlvbnMuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvZG9tL2h0bWxlbGVtZW50LmpzCi8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2RvbS90YWduYW1lLmpzCi8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL29iamVjdC9vYmplY3QuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvZG9tL3RhZ3MuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvaHRtbC90cnVzdGVkdHlwZXMuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvc3RyaW5nL3R5cGVkc3RyaW5nLmpzCi8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL3N0cmluZy9jb25zdC5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9odG1sL3NhZmVzY3JpcHQuanMKZnVuY3Rpb24gcWMoKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfPSIiO3RoaXMuU0FGRV9TQ1JJUFRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPXJjfXFjLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwO3ZhciByYz17fTtxYy5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfLnRvU3RyaW5nKCl9O3FjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJTYWZlU2NyaXB0eyIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU2NyaXB0V3JhcHBlZFZhbHVlXysifSJ9OwpxYy5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihhKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTY3JpcHRXcmFwcGVkVmFsdWVfPWE7cmV0dXJuIHRoaXN9OyhmdW5jdGlvbihhKXtyZXR1cm4obmV3IHFjKS5pbml0U2VjdXJpdHlQcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VfKGEpfSkoIiIpOwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9mcy91cmwuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvaTE4bi9iaWRpLmpzCi8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2h0bWwvdHJ1c3RlZHJlc291cmNldXJsLmpzCi8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL3N0cmluZy9pbnRlcm5hbC5qcwpmdW5jdGlvbiBzYyhhKXtyZXR1cm4vXltcc1x4YTBdKiQvLnRlc3QoYSl9ZnVuY3Rpb24gdGMoYSl7cmV0dXJuLTEhPSJceDNkLiIuaW5kZXhPZihhKX07Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2h0bWwvc2FmZXVybC5qcwpmdW5jdGlvbiB3Yygpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV89IiI7dGhpcy5TQUZFX1VSTF9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89RGN9Tj13Yy5wcm90b3R5cGU7Ti5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwO04uZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVVcmxXcmFwcGVkVmFsdWVfLnRvU3RyaW5nKCl9O04uaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwO04uZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIDF9O04udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iU2FmZVVybHsiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVVybFdyYXBwZWRWYWx1ZV8rIn0ifTt2YXIgRGM9e307CihmdW5jdGlvbihhKXt2YXIgYz1uZXcgd2M7Yy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlVXJsV3JhcHBlZFZhbHVlXz1hO3JldHVybiBjfSkoImFib3V0OmJsYW5rIik7Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2h0bWwvc2FmZXN0eWxlLmpzCmZ1bmN0aW9uIE5jKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVXcmFwcGVkVmFsdWVfPSIiO3RoaXMuU0FGRV9TVFlMRV9UWVBFX01BUktFUl9HT09HX0hUTUxfU0VDVVJJVFlfUFJJVkFURV89T2N9TmMucHJvdG90eXBlLmltcGxlbWVudHNHb29nU3RyaW5nVHlwZWRTdHJpbmc9ITA7dmFyIE9jPXt9O05jLnByb3RvdHlwZS5nZXRUeXBlZFN0cmluZ1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlX307TmMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNhZmVTdHlsZXsiK3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZVN0eWxlV3JhcHBlZFZhbHVlXysifSJ9OwpOYy5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihhKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVdyYXBwZWRWYWx1ZV89YTtyZXR1cm4gdGhpc307KGZ1bmN0aW9uKGEpe3JldHVybihuZXcgTmMpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oYSl9KSgiIik7Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2h0bWwvc2FmZXN0eWxlc2hlZXQuanMKZnVuY3Rpb24gUGMoKXt0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlXz0iIjt0aGlzLlNBRkVfU1RZTEVfU0hFRVRfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPVRjfVBjLnByb3RvdHlwZS5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwO3ZhciBUYz17fTtQYy5wcm90b3R5cGUuZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVTdHlsZVNoZWV0V3JhcHBlZFZhbHVlX307UGMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNhZmVTdHlsZVNoZWV0eyIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV8rIn0ifTsKUGMucHJvdG90eXBlLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV89ZnVuY3Rpb24oYSl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlU3R5bGVTaGVldFdyYXBwZWRWYWx1ZV89YTtyZXR1cm4gdGhpc307KGZ1bmN0aW9uKGEpe3JldHVybihuZXcgUGMpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oYSl9KSgiIik7Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2xhYnMvdXNlcmFnZW50L3V0aWwuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvbGFicy91c2VyYWdlbnQvYnJvd3Nlci5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9odG1sL3NhZmVodG1sLmpzCmZ1bmN0aW9uIFVjKCl7dGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV89IiI7dGhpcy5TQUZFX0hUTUxfVFlQRV9NQVJLRVJfR09PR19IVE1MX1NFQ1VSSVRZX1BSSVZBVEVfPVZjO3RoaXMuZGlyXz1udWxsfU49VWMucHJvdG90eXBlO04uaW1wbGVtZW50c0dvb2dJMThuQmlkaURpcmVjdGlvbmFsU3RyaW5nPSEwO04uZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyX307Ti5pbXBsZW1lbnRzR29vZ1N0cmluZ1R5cGVkU3RyaW5nPSEwO04uZ2V0VHlwZWRTdHJpbmdWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByaXZhdGVEb05vdEFjY2Vzc09yRWxzZVNhZmVIdG1sV3JhcHBlZFZhbHVlXy50b1N0cmluZygpfTtOLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNhZmVIdG1seyIrdGhpcy5wcml2YXRlRG9Ob3RBY2Nlc3NPckVsc2VTYWZlSHRtbFdyYXBwZWRWYWx1ZV8rIn0ifTt2YXIgVmM9e307CmZ1bmN0aW9uIFdjKGEpeyhuZXcgVWMpLmluaXRTZWN1cml0eVByaXZhdGVEb05vdEFjY2Vzc09yRWxzZV8oYSwwKX1VYy5wcm90b3R5cGUuaW5pdFNlY3VyaXR5UHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlXz1mdW5jdGlvbihhLGMpe3RoaXMucHJpdmF0ZURvTm90QWNjZXNzT3JFbHNlU2FmZUh0bWxXcmFwcGVkVmFsdWVfPWE7dGhpcy5kaXJfPWM7cmV0dXJuIHRoaXN9O1djKCJceDNjIURPQ1RZUEUgaHRtbFx4M2UiKTtXYygiIik7V2MoIlx4M2Niclx4M2UiKTsKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvaHRtbC91bmNoZWNrZWRjb252ZXJzaW9ucy5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9kb20vc2FmZS5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9zdHJpbmcvc3RyaW5nLmpzCi8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2xhYnMvdXNlcmFnZW50L2VuZ2luZS5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9sYWJzL3VzZXJhZ2VudC9wbGF0Zm9ybS5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9yZWZsZWN0L3JlZmxlY3QuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvdXNlcmFnZW50L3VzZXJhZ2VudC5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy91c2VyYWdlbnQvcHJvZHVjdC5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9jcnlwdC9iYXNlNjQuanMKZnVuY3Rpb24gWGMoYSl7cmV0dXJuIHRjKGEpfXZhciBZYz17fSxuZD1udWxsO2Z1bmN0aW9uIG9kKGEsYyl7ITE9PT1jfHx2b2lkIDA9PT1jP2M9MDohMD09PWMmJihjPTMpO3BkKCk7Yz1ZY1tjXTtmb3IodmFyIGQ9W10sZj0wO2Y8YS5sZW5ndGg7Zis9Myl7dmFyIGc9YVtmXSxsPWYrMTxhLmxlbmd0aCxrPWw/YVtmKzFdOjAsbj1mKzI8YS5sZW5ndGgscD1uP2FbZisyXTowLHE9Zz4+MjtnPShnJjMpPDw0fGs+PjQ7az0oayYxNSk8PDJ8cD4+NjtwJj02MztufHwocD02NCxsfHwoaz02NCkpO2QucHVzaChjW3FdLGNbZ10sY1trXXx8IiIsY1twXXx8IiIpfXJldHVybiBkLmpvaW4oIiIpfQpmdW5jdGlvbiBxZChhKXt2YXIgYz1hLmxlbmd0aCxkPTMqYy80O2QlMz9kPU1hdGguZmxvb3IoZCk6WGMoYVtjLTFdKSYmKGQ9WGMoYVtjLTJdKT9kLTI6ZC0xKTt2YXIgZj1uZXcgVWludDhBcnJheShkKSxnPTA7cmQoYSxmdW5jdGlvbihsKXtmW2crK109bH0pO3JldHVybiBmLnN1YmFycmF5KDAsZyl9ZnVuY3Rpb24gcmQoYSxjKXtmdW5jdGlvbiBkKHApe2Zvcig7ZjxhLmxlbmd0aDspe3ZhciBxPWEuY2hhckF0KGYrKykscj1uZFtxXTtpZihudWxsIT1yKXJldHVybiByO2lmKCFzYyhxKSl0aHJvdyBFcnJvcigiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogIitxKTt9cmV0dXJuIHB9cGQoKTtmb3IodmFyIGY9MDs7KXt2YXIgZz1kKC0xKSxsPWQoMCksaz1kKDY0KSxuPWQoNjQpO2lmKDY0PT09biYmLTE9PT1nKWJyZWFrO2MoZzw8MnxsPj40KTs2NCE9ayYmKGMobDw8NCYyNDB8az4+MiksNjQhPW4mJmMoazw8NiYxOTJ8bikpfX0KZnVuY3Rpb24gcGQoKXtpZighbmQpe25kPXt9O2Zvcih2YXIgYT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLnNwbGl0KCIiKSxjPVsiKy9ceDNkIiwiKy8iLCItX1x4M2QiLCItXy4iLCItXyJdLGQ9MDs1PmQ7ZCsrKXt2YXIgZj1hLmNvbmNhdChjW2RdLnNwbGl0KCIiKSk7WWNbZF09Zjtmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGw9ZltnXTt2b2lkIDA9PT1uZFtsXSYmKG5kW2xdPWcpfX19fTsKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9wcm90b2J1Zl9qcy9iaW5hcnkvYXJpdGguanMKZnVuY3Rpb24gc2QoYSxjKXt0aGlzLmxvPWE7dGhpcy5oaT1jfU49c2QucHJvdG90eXBlO04uY21wPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhpPGEuaGl8fHRoaXMuaGk9PWEuaGkmJnRoaXMubG88YS5sbz8tMTp0aGlzLmhpPT1hLmhpJiZ0aGlzLmxvPT1hLmxvPzA6MX07Ti5yaWdodFNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzZCgodGhpcy5sbz4+PjF8KHRoaXMuaGkmMSk8PDMxKT4+PjAsdGhpcy5oaT4+PjE+Pj4wKX07Ti5sZWZ0U2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHNkKHRoaXMubG88PDE+Pj4wLCh0aGlzLmhpPDwxfHRoaXMubG8+Pj4zMSk+Pj4wKX07Ti5tc2I9ZnVuY3Rpb24oKXtyZXR1cm4hISh0aGlzLmhpJjIxNDc0ODM2NDgpfTtOLmxzYj1mdW5jdGlvbigpe3JldHVybiEhKHRoaXMubG8mMSl9O04uemVybz1mdW5jdGlvbigpe3JldHVybiAwPT10aGlzLmxvJiYwPT10aGlzLmhpfTsKTi5hZGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBzZCgodGhpcy5sbythLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpK2EuaGkmNDI5NDk2NzI5NSk+Pj4wKSsoNDI5NDk2NzI5Njw9dGhpcy5sbythLmxvPzE6MCk+Pj4wKX07Ti5zdWI9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBzZCgodGhpcy5sby1hLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpLWEuaGkmNDI5NDk2NzI5NSk+Pj4wKS0oMD50aGlzLmxvLWEubG8/MTowKT4+PjApfTtmdW5jdGlvbiBJZChhKXt2YXIgYz1hJjY1NTM1LGQ9YT4+PjE2O2E9MTAqYys2NTUzNiooMCpjJjY1NTM1KSs2NTUzNiooMTAqZCY2NTUzNSk7Zm9yKGM9MCpkKygwKmM+Pj4xNikrKDEwKmQ+Pj4xNik7NDI5NDk2NzI5Njw9YTspYS09NDI5NDk2NzI5NixjKz0xO3JldHVybiBuZXcgc2QoYT4+PjAsYz4+PjApfQpOLm11bD1mdW5jdGlvbigpe3ZhciBhPUlkKHRoaXMubG8pLGM9SWQodGhpcy5oaSk7Yy5oaT1jLmxvO2MubG89MDtyZXR1cm4gYS5hZGQoYyl9O04uZGl2PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBzZCgwLDApLGM9bmV3IHNkKHRoaXMubG8sdGhpcy5oaSksZD1uZXcgc2QoMTAsMCksZj1uZXcgc2QoMSwwKTshZC5tc2IoKTspZD1kLmxlZnRTaGlmdCgpLGY9Zi5sZWZ0U2hpZnQoKTtmb3IoOyFmLnplcm8oKTspMD49ZC5jbXAoYykmJihhPWEuYWRkKGYpLGM9Yy5zdWIoZCkpLGQ9ZC5yaWdodFNoaWZ0KCksZj1mLnJpZ2h0U2hpZnQoKTtyZXR1cm5bYSxjXX07Ti50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgYT0iIixjPXRoaXM7IWMuemVybygpOyl7Yz1jLmRpdigpO3ZhciBkPWNbMF07YT1jWzFdLmxvK2E7Yz1kfSIiPT1hJiYoYT0iMCIpO3JldHVybiBhfTsKZnVuY3Rpb24gSmQoYSl7Zm9yKHZhciBjPW5ldyBzZCgwLDApLGQ9bmV3IHNkKDAsMCksZj0wO2Y8YS5sZW5ndGg7ZisrKXtpZigiMCI+YVtmXXx8IjkiPGFbZl0pcmV0dXJuIG51bGw7ZC5sbz1wYXJzZUludChhW2ZdLDEwKTtjPWMubXVsKCkuYWRkKGQpfXJldHVybiBjfU4uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHNkKHRoaXMubG8sdGhpcy5oaSl9O2Z1bmN0aW9uIEtkKGEsYyl7dGhpcy5sbz1hO3RoaXMuaGk9Y31LZC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgS2QoKHRoaXMubG8rYS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaSthLmhpJjQyOTQ5NjcyOTUpPj4+MCkrKDQyOTQ5NjcyOTY8PXRoaXMubG8rYS5sbz8xOjApPj4+MCl9OwpLZC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgS2QoKHRoaXMubG8tYS5sbyY0Mjk0OTY3Mjk1KT4+PjA+Pj4wLCgodGhpcy5oaS1hLmhpJjQyOTQ5NjcyOTUpPj4+MCktKDA+dGhpcy5sby1hLmxvPzE6MCk+Pj4wKX07S2QucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLZCh0aGlzLmxvLHRoaXMuaGkpfTtLZC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT0wIT0odGhpcy5oaSYyMTQ3NDgzNjQ4KSxjPW5ldyBzZCh0aGlzLmxvLHRoaXMuaGkpO2EmJihjPShuZXcgc2QoMCwwKSkuc3ViKGMpKTtyZXR1cm4oYT8iLSI6IiIpK2MudG9TdHJpbmcoKX07ZnVuY3Rpb24gWmQoYSl7dmFyIGM9MDxhLmxlbmd0aCYmIi0iPT1hWzBdO2MmJihhPWEuc3Vic3RyaW5nKDEpKTthPUpkKGEpO2lmKG51bGw9PT1hKXJldHVybiBudWxsO2MmJihhPShuZXcgc2QoMCwwKSkuc3ViKGEpKTtyZXR1cm4gbmV3IEtkKGEubG8sYS5oaSl9OwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9jb25zdGFudHMuanMKZnVuY3Rpb24gJGQoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDM6Y2FzZSAxMzpjYXNlIDQ6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgODpjYXNlIDE0OmNhc2UgMzE6cmV0dXJuIDA7Y2FzZSAxOmNhc2UgNjpjYXNlIDE2OmNhc2UgMzA6cmV0dXJuIDE7Y2FzZSA5OmNhc2UgMTE6Y2FzZSAxMjpyZXR1cm4gMjtjYXNlIDI6Y2FzZSA3OmNhc2UgMTU6cmV0dXJuIDU7ZGVmYXVsdDpyZXR1cm4tMX19OwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS91dGlscy5qcwp2YXIgYWU9MCxiZT0wO2Z1bmN0aW9uIGNlKGEpe3ZhciBjPWE+Pj4wO2E9TWF0aC5mbG9vcigoYS1jKS80Mjk0OTY3Mjk2KT4+PjA7YWU9YztiZT1hfWZ1bmN0aW9uIGRlKGEpe3ZhciBjPTA+YTthPU1hdGguYWJzKGEpO3ZhciBkPWE+Pj4wO2E9TWF0aC5mbG9vcigoYS1kKS80Mjk0OTY3Mjk2KTthPj4+PTA7YyYmKGE9fmE+Pj4wLGQ9KH5kPj4+MCkrMSw0Mjk0OTY3Mjk1PGQmJihkPTAsYSsrLDQyOTQ5NjcyOTU8YSYmKGE9MCkpKTthZT1kO2JlPWF9ZnVuY3Rpb24gZWUoYSl7dmFyIGM9MD5hO2E9MipNYXRoLmFicyhhKTtjZShhKTthPWFlO3ZhciBkPWJlO2MmJigwPT1hPzA9PWQ/ZD1hPTQyOTQ5NjcyOTU6KGQtLSxhPTQyOTQ5NjcyOTUpOmEtLSk7YWU9YTtiZT1kfQpmdW5jdGlvbiBmZShhKXt2YXIgYz0wPmE/MTowO2E9Yz8tYTphO2lmKDA9PT1hKTA8MS9hP2FlPWJlPTA6KGJlPTAsYWU9MjE0NzQ4MzY0OCk7ZWxzZSBpZihpc05hTihhKSliZT0wLGFlPTIxNDc0ODM2NDc7ZWxzZSBpZigzLjQwMjgyMzQ2NjM4NTI4ODZFMzg8YSliZT0wLGFlPShjPDwzMXwyMTM5MDk1MDQwKT4+PjA7ZWxzZSBpZigxLjE3NTQ5NDM1MDgyMjI4NzVFLTM4PmEpYT1NYXRoLnJvdW5kKGEvTWF0aC5wb3coMiwtMTQ5KSksYmU9MCxhZT0oYzw8MzF8YSk+Pj4wO2Vsc2V7dmFyIGQ9TWF0aC5mbG9vcihNYXRoLmxvZyhhKS9NYXRoLkxOMik7YSo9TWF0aC5wb3coMiwtZCk7YT1NYXRoLnJvdW5kKDgzODg2MDgqYSkmODM4ODYwNztiZT0wO2FlPShjPDwzMXxkKzEyNzw8MjN8YSk+Pj4wfX0KZnVuY3Rpb24gZ2UoYSl7dmFyIGM9MD5hPzE6MDthPWM/LWE6YTtpZigwPT09YSliZT0wPDEvYT8wOjIxNDc0ODM2NDgsYWU9MDtlbHNlIGlmKGlzTmFOKGEpKWJlPTIxNDc0ODM2NDcsYWU9NDI5NDk2NzI5NTtlbHNlIGlmKDEuNzk3NjkzMTM0ODYyMzE1N0UzMDg8YSliZT0oYzw8MzF8MjE0NjQzNTA3Mik+Pj4wLGFlPTA7ZWxzZSBpZigyLjIyNTA3Mzg1ODUwNzIwMTRFLTMwOD5hKWEvPU1hdGgucG93KDIsLTEwNzQpLGJlPShjPDwzMXxhLzQyOTQ5NjcyOTYpPj4+MCxhZT1hPj4+MDtlbHNle3ZhciBkPU1hdGguZmxvb3IoTWF0aC5sb2coYSkvTWF0aC5MTjIpOzEwMjQ9PWQmJihkPTEwMjMpO2EqPU1hdGgucG93KDIsLWQpO2JlPShjPDwzMXxkKzEwMjM8PDIwfDEwNDg1NzYqYSYxMDQ4NTc1KT4+PjA7YWU9NDUwMzU5OTYyNzM3MDQ5NiphPj4+MH19CmZ1bmN0aW9uIGhlKGEpe3ZhciBjPWEuY2hhckNvZGVBdCg0KSxkPWEuY2hhckNvZGVBdCg1KSxmPWEuY2hhckNvZGVBdCg2KSxnPWEuY2hhckNvZGVBdCg3KTthZT1hLmNoYXJDb2RlQXQoMCkrKGEuY2hhckNvZGVBdCgxKTw8OCkrKGEuY2hhckNvZGVBdCgyKTw8MTYpKyhhLmNoYXJDb2RlQXQoMyk8PDI0KT4+PjA7YmU9YysoZDw8OCkrKGY8PDE2KSsoZzw8MjQpPj4+MH1mdW5jdGlvbiBBZShhLGMpe3JldHVybiA0Mjk0OTY3Mjk2KmMrYX1mdW5jdGlvbiBCZShhLGMpe3ZhciBkPWMmMjE0NzQ4MzY0ODtkJiYoYT1+YSsxPj4+MCxjPX5jPj4+MCwwPT1hJiYoYz1jKzE+Pj4wKSk7YT1BZShhLGMpO3JldHVybiBkPy1hOmF9ZnVuY3Rpb24gQ2UoYSxjKXt2YXIgZD1hJjE7YT0oYT4+PjF8Yzw8MzEpPj4+MDtjPj4+PTE7ZCYmKGE9YSsxPj4+MCwwPT1hJiYoYz1jKzE+Pj4wKSk7YT1BZShhLGMpO3JldHVybiBkPy1hOmF9CmZ1bmN0aW9uIERlKGEpe3ZhciBjPTIqKGE+PjMxKSsxLGQ9YT4+PjIzJjI1NTthJj04Mzg4NjA3O3JldHVybiAyNTU9PWQ/YT9OYU46SW5maW5pdHkqYzowPT1kP2MqTWF0aC5wb3coMiwtMTQ5KSphOmMqTWF0aC5wb3coMixkLTE1MCkqKGErTWF0aC5wb3coMiwyMykpfWZ1bmN0aW9uIEVlKGEsYyl7dmFyIGQ9MiooYz4+MzEpKzEsZj1jPj4+MjAmMjA0NzthPTQyOTQ5NjcyOTYqKGMmMTA0ODU3NSkrYTtyZXR1cm4gMjA0Nz09Zj9hP05hTjpJbmZpbml0eSpkOjA9PWY/ZCpNYXRoLnBvdygyLC0xMDc0KSphOmQqTWF0aC5wb3coMixmLTEwNzUpKihhKzQ1MDM1OTk2MjczNzA0OTYpfWZ1bmN0aW9uIEZlKGEsYyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYT4+PjAmMjU1LGE+Pj44JjI1NSxhPj4+MTYmMjU1LGE+Pj4yNCYyNTUsYz4+PjAmMjU1LGM+Pj44JjI1NSxjPj4+MTYmMjU1LGM+Pj4yNCYyNTUpfXZhciBHZT0iMDEyMzQ1Njc4OWFiY2RlZiIuc3BsaXQoIiIpOwpmdW5jdGlvbiBIZShhLGMpe2Z1bmN0aW9uIGQobil7Zm9yKHZhciBwPTFFNyxxPTA7Nz5xO3ErKyl7cC89MTA7dmFyIHI9bi9wJTEwPj4+MDtpZigwIT1yfHxsKWw9ITAsays9Z1tyXX19aWYoMjA5NzE1MT49YylyZXR1cm4iIisoNDI5NDk2NzI5NipjK2EpO3ZhciBmPShhPj4+MjR8Yzw8OCk+Pj4wJjE2Nzc3MjE1O2M9Yz4+MTYmNjU1MzU7YT0oYSYxNjc3NzIxNSkrNjc3NzIxNipmKzY3MTA2NTYqYztmKz04MTQ3NDk3KmM7Yyo9MjsxRTc8PWEmJihmKz1NYXRoLmZsb29yKGEvMUU3KSxhJT0xRTcpOzFFNzw9ZiYmKGMrPU1hdGguZmxvb3IoZi8xRTcpLGYlPTFFNyk7dmFyIGc9R2UsbD0hMSxrPSIiOyhjfHxsKSYmZChjKTsoZnx8bCkmJmQoZik7KGF8fGwpJiZkKGEpO3JldHVybiBrfWZ1bmN0aW9uIG1mKGEsYyl7dmFyIGQ9YyYyMTQ3NDgzNjQ4O2QmJihhPX5hKzE+Pj4wLGM9fmMrKDA9PWE/MTowKT4+PjApO2E9SGUoYSxjKTtyZXR1cm4gZD8iLSIrYTphfQpmdW5jdGlvbiBuZihhKXtmdW5jdGlvbiBjKGssbil7Zm9yKHZhciBwPTA7OD5wJiYoMSE9PWt8fDA8bik7cCsrKW49aypnW3BdK24sZ1twXT1uJjI1NSxuPj4+PTh9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgaz0wOzg+aztrKyspZ1trXT1+Z1trXSYyNTV9dmFyIGY9ITE7Ii0iPT09YVswXSYmKGY9ITAsYT1hLnNsaWNlKDEpKTtmb3IodmFyIGc9WzAsMCwwLDAsMCwwLDAsMF0sbD0wO2w8YS5sZW5ndGg7bCsrKWMoMTAsR2UuaW5kZXhPZihhW2xdKSk7ZiYmKGQoKSxjKDEsMSkpO3JldHVybiBsYyhnKX0KZnVuY3Rpb24gb2YoYSl7aWYoYS5jb25zdHJ1Y3Rvcj09PVVpbnQ4QXJyYXkpcmV0dXJuIGE7aWYoYS5jb25zdHJ1Y3Rvcj09PUFycmF5QnVmZmVyKXJldHVybiBuZXcgVWludDhBcnJheShhKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlciYmYS5jb25zdHJ1Y3Rvcj09PUJ1ZmZlcilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSk7aWYoYS5jb25zdHJ1Y3Rvcj09PUFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShhKTtpZihhLmNvbnN0cnVjdG9yPT09U3RyaW5nKXJldHVybiBxZChhKTtkYygiVHlwZSBub3QgY29udmVydGlibGUgdG8gVWludDhBcnJheS4iKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCl9OwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9kZWNvZGVyLmpzCmZ1bmN0aW9uIHBmKGEsYyxkKXt0aGlzLmJ5dGVzXz1udWxsO3RoaXMudGVtcEhpZ2hfPXRoaXMudGVtcExvd189dGhpcy5jdXJzb3JfPXRoaXMuZW5kXz10aGlzLnN0YXJ0Xz0wO3RoaXMuZXJyb3JfPSExO2EmJnRoaXMuc2V0QmxvY2soYSxjLGQpfXZhciBxZj1bXTtmdW5jdGlvbiByZihhLGMsZCl7aWYocWYubGVuZ3RoKXt2YXIgZj1xZi5wb3AoKTthJiZmLnNldEJsb2NrKGEsYyxkKTtyZXR1cm4gZn1yZXR1cm4gbmV3IHBmKGEsYyxkKX1OPXBmLnByb3RvdHlwZTtOLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCk7MTAwPnFmLmxlbmd0aCYmcWYucHVzaCh0aGlzKX07Ti5jbG9uZT1mdW5jdGlvbigpe3JldHVybiByZih0aGlzLmJ5dGVzXyx0aGlzLnN0YXJ0Xyx0aGlzLmVuZF8tdGhpcy5zdGFydF8pfTtOLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5ieXRlc189bnVsbDt0aGlzLmN1cnNvcl89dGhpcy5lbmRfPXRoaXMuc3RhcnRfPTA7dGhpcy5lcnJvcl89ITF9OwpOLmdldEJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ5dGVzX307Ti5zZXRCbG9jaz1mdW5jdGlvbihhLGMsZCl7dGhpcy5ieXRlc189b2YoYSk7dGhpcy5zdGFydF89Q2IoYyk/YzowO3RoaXMuZW5kXz1DYihkKT90aGlzLnN0YXJ0XytkOnRoaXMuYnl0ZXNfLmxlbmd0aDt0aGlzLmN1cnNvcl89dGhpcy5zdGFydF99O04uZ2V0RW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kX307Ti5zZXRFbmQ9ZnVuY3Rpb24oYSl7dGhpcy5lbmRfPWF9O04ucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnNvcl89dGhpcy5zdGFydF99O04uZ2V0Q3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3Vyc29yX307Ti5zZXRDdXJzb3I9ZnVuY3Rpb24oYSl7dGhpcy5jdXJzb3JfPWF9O04uYWR2YW5jZT1mdW5jdGlvbihhKXt0aGlzLmN1cnNvcl8rPWF9O04uYXRFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JfPT10aGlzLmVuZF99OwpOLnBhc3RFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JfPnRoaXMuZW5kX307Ti5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yX3x8MD50aGlzLmN1cnNvcl98fHRoaXMuY3Vyc29yXz50aGlzLmVuZF99OwpOLnJlYWRTcGxpdFZhcmludDY0Xz1mdW5jdGlvbigpe2Zvcih2YXIgYSxjPTAsZCxmPTA7ND5mO2YrKylpZihhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXSxjfD0oYSYxMjcpPDw3KmYsMTI4PmEpe3RoaXMudGVtcExvd189Yz4+PjA7dGhpcy50ZW1wSGlnaF89MDtyZXR1cm59YT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK107Y3w9KGEmMTI3KTw8Mjg7ZD0wfChhJjEyNyk+PjQ7aWYoMTI4PmEpdGhpcy50ZW1wTG93Xz1jPj4+MCx0aGlzLnRlbXBIaWdoXz1kPj4+MDtlbHNle2ZvcihmPTA7NT5mO2YrKylpZihhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXSxkfD0oYSYxMjcpPDw3KmYrMywxMjg+YSl7dGhpcy50ZW1wTG93Xz1jPj4+MDt0aGlzLnRlbXBIaWdoXz1kPj4+MDtyZXR1cm59ZGMoIkZhaWxlZCB0byByZWFkIHZhcmludCwgZW5jb2RpbmcgaXMgaW52YWxpZC4iKTt0aGlzLmVycm9yXz0hMH19OwpOLnNraXBWYXJpbnQ9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yX10mMTI4Oyl0aGlzLmN1cnNvcl8rKzt0aGlzLmN1cnNvcl8rK307Ti51bnNraXBWYXJpbnQ9ZnVuY3Rpb24oYSl7Zm9yKDsxMjg8YTspdGhpcy5jdXJzb3JfLS0sYT4+Pj03O3RoaXMuY3Vyc29yXy0tfTsKTi5yZWFkVW5zaWduZWRWYXJpbnQzMj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfO3ZhciBjPWFbdGhpcy5jdXJzb3JfKzBdO3ZhciBkPWMmMTI3O2lmKDEyOD5jKXJldHVybiB0aGlzLmN1cnNvcl8rPTEsZDtjPWFbdGhpcy5jdXJzb3JfKzFdO2R8PShjJjEyNyk8PDc7aWYoMTI4PmMpcmV0dXJuIHRoaXMuY3Vyc29yXys9MixkO2M9YVt0aGlzLmN1cnNvcl8rMl07ZHw9KGMmMTI3KTw8MTQ7aWYoMTI4PmMpcmV0dXJuIHRoaXMuY3Vyc29yXys9MyxkO2M9YVt0aGlzLmN1cnNvcl8rM107ZHw9KGMmMTI3KTw8MjE7aWYoMTI4PmMpcmV0dXJuIHRoaXMuY3Vyc29yXys9NCxkO2M9YVt0aGlzLmN1cnNvcl8rNF07ZHw9KGMmMTUpPDwyODtpZigxMjg+YylyZXR1cm4gdGhpcy5jdXJzb3JfKz01LGQ+Pj4wO3RoaXMuY3Vyc29yXys9NTsxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiYxMjg8PWFbdGhpcy5jdXJzb3JfKytdJiYKdGhpcy5jdXJzb3JfKys7cmV0dXJuIGR9O04ucmVhZFNpZ25lZFZhcmludDMyPXBmLnByb3RvdHlwZS5yZWFkVW5zaWduZWRWYXJpbnQzMjtOLnJlYWRVbnNpZ25lZFZhcmludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKS50b1N0cmluZygpfTtOLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTaWduZWRWYXJpbnQzMigpLnRvU3RyaW5nKCl9O04ucmVhZFppZ3phZ1ZhcmludDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiBhPj4+MV4tKGEmMSl9O04ucmVhZFVuc2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oKXt0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpO3JldHVybiBBZSh0aGlzLnRlbXBMb3dfLHRoaXMudGVtcEhpZ2hfKX07Ck4ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXt0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpO3JldHVybiBIZSh0aGlzLnRlbXBMb3dfLHRoaXMudGVtcEhpZ2hfKX07Ti5yZWFkU2lnbmVkVmFyaW50NjQ9ZnVuY3Rpb24oKXt0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpO3JldHVybiBCZSh0aGlzLnRlbXBMb3dfLHRoaXMudGVtcEhpZ2hfKX07Ti5yZWFkU2lnbmVkVmFyaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXt0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpO3JldHVybiBtZih0aGlzLnRlbXBMb3dfLHRoaXMudGVtcEhpZ2hfKX07Ti5yZWFkWmlnemFnVmFyaW50NjQ9ZnVuY3Rpb24oKXt0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpO3JldHVybiBDZSh0aGlzLnRlbXBMb3dfLHRoaXMudGVtcEhpZ2hfKX07Ti5yZWFkWmlnemFnVmFyaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkWmlnemFnVmFyaW50NjQoKS50b1N0cmluZygpfTsKTi5yZWFkVWludDg9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF07dGhpcy5jdXJzb3JfKz0xO3JldHVybiBhfTtOLnJlYWRVaW50MTY9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sYz10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV07dGhpcy5jdXJzb3JfKz0yO3JldHVybiBhPDwwfGM8PDh9O04ucmVhZFVpbnQzMj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSxjPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXSxkPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysyXSxmPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyszXTt0aGlzLmN1cnNvcl8rPTQ7cmV0dXJuKGE8PDB8Yzw8OHxkPDwxNnxmPDwyNCk+Pj4wfTtOLnJlYWRVaW50NjQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxjPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBBZShhLGMpfTsKTi5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVWludDMyKCksYz10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4gSGUoYSxjKX07Ti5yZWFkSW50OD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXTt0aGlzLmN1cnNvcl8rPTE7cmV0dXJuIGE8PDI0Pj4yNH07Ti5yZWFkSW50MTY9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sYz10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV07dGhpcy5jdXJzb3JfKz0yO3JldHVybihhPDwwfGM8PDgpPDwxNj4+MTZ9O04ucmVhZEludDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLGM9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdLGQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzJdLGY9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzNdO3RoaXMuY3Vyc29yXys9NDtyZXR1cm4gYTw8MHxjPDw4fGQ8PDE2fGY8PDI0fTsKTi5yZWFkSW50NjQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxjPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBCZShhLGMpfTtOLnJlYWRJbnQ2NFN0cmluZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGM9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIG1mKGEsYyl9O04ucmVhZEZsb2F0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIERlKGEpfTtOLnJlYWREb3VibGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxjPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBFZShhLGMpfTtOLnJlYWRCb29sPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rK119O04ucmVhZEVudW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkU2lnbmVkVmFyaW50MzIoKX07Ck4ucmVhZFN0cmluZz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmJ5dGVzXyxkPXRoaXMuY3Vyc29yXzthPWQrYTtmb3IodmFyIGY9W10sZz0iIjtkPGE7KXt2YXIgbD1jW2QrK107aWYoMTI4PmwpZi5wdXNoKGwpO2Vsc2UgaWYoMTkyPmwpY29udGludWU7ZWxzZSBpZigyMjQ+bCl7dmFyIGs9Y1tkKytdO2YucHVzaCgobCYzMSk8PDZ8ayY2Myl9ZWxzZSBpZigyNDA+bCl7az1jW2QrK107dmFyIG49Y1tkKytdO2YucHVzaCgobCYxNSk8PDEyfChrJjYzKTw8NnxuJjYzKX1lbHNlIGlmKDI0OD5sKXtrPWNbZCsrXTtuPWNbZCsrXTt2YXIgcD1jW2QrK107bD0obCY3KTw8MTh8KGsmNjMpPDwxMnwobiY2Myk8PDZ8cCY2MztsLT02NTUzNjtmLnB1c2goKGw+PjEwJjEwMjMpKzU1Mjk2LChsJjEwMjMpKzU2MzIwKX04MTkyPD1mLmxlbmd0aCYmKGcrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxmKSxmLmxlbmd0aD0wKX1nKz1sYyhmKTt0aGlzLmN1cnNvcl89ZDtyZXR1cm4gZ307Ck4ucmVhZFN0cmluZ1dpdGhMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIHRoaXMucmVhZFN0cmluZyhhKX07Ti5yZWFkQnl0ZXM9ZnVuY3Rpb24oYSl7aWYoMD5hfHx0aGlzLmN1cnNvcl8rYT50aGlzLmJ5dGVzXy5sZW5ndGgpcmV0dXJuIHRoaXMuZXJyb3JfPSEwLGRjKCJJbnZhbGlkIGJ5dGUgbGVuZ3RoISIpLG5ldyBVaW50OEFycmF5KDApO3ZhciBjPXRoaXMuYnl0ZXNfLnN1YmFycmF5KHRoaXMuY3Vyc29yXyx0aGlzLmN1cnNvcl8rYSk7dGhpcy5jdXJzb3JfKz1hO3JldHVybiBjfTtOLnJlYWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXt0aGlzLnJlYWRTcGxpdFZhcmludDY0XygpO3JldHVybiBGZSh0aGlzLnRlbXBMb3dfLHRoaXMudGVtcEhpZ2hfKX07Ck4ucmVhZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc18sYz10aGlzLmN1cnNvcl8sZD1hW2MrMF0sZj1hW2MrMV0sZz1hW2MrMl0sbD1hW2MrM10saz1hW2MrNF0sbj1hW2MrNV0scD1hW2MrNl07YT1hW2MrN107dGhpcy5jdXJzb3JfKz04O3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGQsZixnLGwsayxuLHAsYSl9OwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9lbmNvZGVyLmpzCmZ1bmN0aW9uIHNmKCl7dGhpcy5idWZmZXJfPVtdfU49c2YucHJvdG90eXBlO04ubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmZmVyXy5sZW5ndGh9O04uZW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5idWZmZXJfO3RoaXMuYnVmZmVyXz1bXTtyZXR1cm4gYX07Ti53cml0ZVNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oYSxjKXtmb3IoOzA8Y3x8MTI3PGE7KXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT0oYT4+Pjd8Yzw8MjUpPj4+MCxjPj4+PTc7dGhpcy5idWZmZXJfLnB1c2goYSl9O04ud3JpdGVTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oYSxjKXt0aGlzLndyaXRlVWludDMyKGEpO3RoaXMud3JpdGVVaW50MzIoYyl9O04ud3JpdGVVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGEpe2Zvcig7MTI3PGE7KXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGEpfTsKTi53cml0ZVNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGEpe2lmKDA8PWEpdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYSk7ZWxzZXtmb3IodmFyIGM9MDs5PmM7YysrKXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT4+PTc7dGhpcy5idWZmZXJfLnB1c2goMSl9fTtOLndyaXRlVW5zaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihhKXtkZShhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChhZSxiZSl9O04ud3JpdGVTaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihhKXtkZShhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChhZSxiZSl9O04ud3JpdGVaaWd6YWdWYXJpbnQzMj1mdW5jdGlvbihhKXt0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMigoYTw8MV5hPj4zMSk+Pj4wKX07Ti53cml0ZVppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGEpe2VlKGEpO3RoaXMud3JpdGVTcGxpdFZhcmludDY0KGFlLGJlKX07Ck4ud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbihhKXt0aGlzLndyaXRlWmlnemFnVmFyaW50NjQocGFyc2VJbnQoYSwxMCkpfTtOLndyaXRlVWludDg9ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KX07Ti53cml0ZVVpbnQxNj1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj44JjI1NSl9O04ud3JpdGVVaW50MzI9ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+OCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4xNiYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4yNCYyNTUpfTtOLndyaXRlVWludDY0PWZ1bmN0aW9uKGEpe2NlKGEpO3RoaXMud3JpdGVVaW50MzIoYWUpO3RoaXMud3JpdGVVaW50MzIoYmUpfTtOLndyaXRlSW50OD1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpfTsKTi53cml0ZUludDE2PWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjgmMjU1KX07Ti53cml0ZUludDMyPWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjgmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MTYmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MjQmMjU1KX07Ti53cml0ZUludDY0PWZ1bmN0aW9uKGEpe2RlKGEpO3RoaXMud3JpdGVTcGxpdEZpeGVkNjQoYWUsYmUpfTtOLndyaXRlSW50NjRTdHJpbmc9ZnVuY3Rpb24oYSl7aGUobmYoYSkpO3RoaXMud3JpdGVTcGxpdEZpeGVkNjQoYWUsYmUpfTtOLndyaXRlRmxvYXQ9ZnVuY3Rpb24oYSl7ZmUoYSk7dGhpcy53cml0ZVVpbnQzMihhZSl9O04ud3JpdGVEb3VibGU9ZnVuY3Rpb24oYSl7Z2UoYSk7dGhpcy53cml0ZVVpbnQzMihhZSk7dGhpcy53cml0ZVVpbnQzMihiZSl9OwpOLndyaXRlQm9vbD1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPzE6MCl9O04ud3JpdGVFbnVtPWZ1bmN0aW9uKGEpe3RoaXMud3JpdGVTaWduZWRWYXJpbnQzMihhKX07Ti53cml0ZUJ5dGVzPWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoLmFwcGx5KHRoaXMuYnVmZmVyXyxhKX07Ti53cml0ZVZhcmludEhhc2g2ND1mdW5jdGlvbihhKXtoZShhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChhZSxiZSl9O04ud3JpdGVGaXhlZEhhc2g2ND1mdW5jdGlvbihhKXtoZShhKTt0aGlzLndyaXRlVWludDMyKGFlKTt0aGlzLndyaXRlVWludDMyKGJlKX07Ck4ud3JpdGVTdHJpbmc9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPXRoaXMuYnVmZmVyXy5sZW5ndGgsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZj1hLmNoYXJDb2RlQXQoZCk7aWYoMTI4PmYpdGhpcy5idWZmZXJfLnB1c2goZik7ZWxzZSBpZigyMDQ4PmYpdGhpcy5idWZmZXJfLnB1c2goZj4+NnwxOTIpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KTtlbHNlIGlmKDY1NTM2PmYpaWYoNTUyOTY8PWYmJjU2MzE5Pj1mJiZkKzE8YS5sZW5ndGgpe3ZhciBnPWEuY2hhckNvZGVBdChkKzEpOzU2MzIwPD1nJiY1NzM0Mz49ZyYmKGY9MTAyNCooZi01NTI5NikrZy01NjMyMCs2NTUzNix0aGlzLmJ1ZmZlcl8ucHVzaChmPj4xOHwyNDApLHRoaXMuYnVmZmVyXy5wdXNoKGY+PjEyJjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2goZj4+NiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KSxkKyspfWVsc2UgdGhpcy5idWZmZXJfLnB1c2goZj4+MTJ8MjI0KSx0aGlzLmJ1ZmZlcl8ucHVzaChmPj4KNiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KX1yZXR1cm4gdGhpcy5idWZmZXJfLmxlbmd0aC1jfTsKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9wcm90b2J1Zl9qcy9iaW5hcnkvcmVhZGVyLmpzCmZ1bmN0aW9uIHVmKGEsYyxkKXt0aGlzLmRlY29kZXJfPXJmKGEsYyxkKTt0aGlzLmZpZWxkQ3Vyc29yXz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpO3RoaXMubmV4dFdpcmVUeXBlXz10aGlzLm5leHRGaWVsZF89LTE7dGhpcy5lcnJvcl89ITE7dGhpcy5yZWFkQ2FsbGJhY2tzXz1udWxsfXZhciB2Zj1bXTtOPXVmLnByb3RvdHlwZTtOLmFsbG9jPWZ1bmN0aW9uKGEsYyxkKXtpZih2Zi5sZW5ndGgpe3ZhciBmPXZmLnBvcCgpO2EmJmYuZGVjb2Rlcl8uc2V0QmxvY2soYSxjLGQpO3JldHVybiBmfXJldHVybiBuZXcgdWYoYSxjLGQpfTtOLmZyZWU9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLmNsZWFyKCk7dGhpcy5uZXh0V2lyZVR5cGVfPXRoaXMubmV4dEZpZWxkXz0tMTt0aGlzLmVycm9yXz0hMTt0aGlzLnJlYWRDYWxsYmFja3NfPW51bGw7MTAwPnZmLmxlbmd0aCYmdmYucHVzaCh0aGlzKX07Ti5nZXRGaWVsZEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpZWxkQ3Vyc29yX307Ck4uZ2V0Q3Vyc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCl9O04uZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8uZ2V0QnVmZmVyKCl9O04uZ2V0RmllbGROdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZXh0RmllbGRffTtOLmdldFdpcmVUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dFdpcmVUeXBlX307Ti5pc0VuZEdyb3VwPWZ1bmN0aW9uKCl7cmV0dXJuIDQ9PXRoaXMubmV4dFdpcmVUeXBlX307Ti5nZXRFcnJvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yX3x8dGhpcy5kZWNvZGVyXy5nZXRFcnJvcigpfTtOLnNldEJsb2NrPWZ1bmN0aW9uKGEsYyxkKXt0aGlzLmRlY29kZXJfLnNldEJsb2NrKGEsYyxkKTt0aGlzLm5leHRXaXJlVHlwZV89dGhpcy5uZXh0RmllbGRfPS0xfTsKTi5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGVjb2Rlcl8ucmVzZXQoKTt0aGlzLm5leHRXaXJlVHlwZV89dGhpcy5uZXh0RmllbGRfPS0xfTtOLmFkdmFuY2U9ZnVuY3Rpb24oYSl7dGhpcy5kZWNvZGVyXy5hZHZhbmNlKGEpfTsKTi5uZXh0RmllbGQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRlY29kZXJfLmF0RW5kKCkpcmV0dXJuITE7aWYodGhpcy5nZXRFcnJvcigpKXJldHVybiBkYygiRGVjb2RlciBoaXQgYW4gZXJyb3IiKSwhMTt0aGlzLmZpZWxkQ3Vyc29yXz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpO3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKSxjPWE+Pj4zO2EmPTc7aWYoMCE9YSYmNSE9YSYmMSE9YSYmMiE9YSYmMyE9YSYmNCE9YSlyZXR1cm4gZGMoIkludmFsaWQgd2lyZSB0eXBlOiAlcyAoYXQgcG9zaXRpb24gJXMpIixhLHRoaXMuZmllbGRDdXJzb3JfKSx0aGlzLmVycm9yXz0hMCwhMTt0aGlzLm5leHRGaWVsZF89Yzt0aGlzLm5leHRXaXJlVHlwZV89YTtyZXR1cm4hMH07Ti51bnNraXBIZWFkZXI9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLnVuc2tpcFZhcmludCh0aGlzLm5leHRGaWVsZF88PDN8dGhpcy5uZXh0V2lyZVR5cGVfKX07Ck4uc2tpcE1hdGNoaW5nRmllbGRzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uZXh0RmllbGRfO2Zvcih0aGlzLnVuc2tpcEhlYWRlcigpO3RoaXMubmV4dEZpZWxkKCkmJnRoaXMuZ2V0RmllbGROdW1iZXIoKT09YTspdGhpcy5za2lwRmllbGQoKTt0aGlzLmRlY29kZXJfLmF0RW5kKCl8fHRoaXMudW5za2lwSGVhZGVyKCl9O04uc2tpcFZhcmludEZpZWxkPWZ1bmN0aW9uKCl7MCE9dGhpcy5uZXh0V2lyZVR5cGVfPyhkYygiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBWYXJpbnRGaWVsZCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uc2tpcFZhcmludCgpfTtOLnNraXBEZWxpbWl0ZWRGaWVsZD1mdW5jdGlvbigpe2lmKDIhPXRoaXMubmV4dFdpcmVUeXBlXylkYygiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBEZWxpbWl0ZWRGaWVsZCIpLHRoaXMuc2tpcEZpZWxkKCk7ZWxzZXt2YXIgYT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7dGhpcy5kZWNvZGVyXy5hZHZhbmNlKGEpfX07Ck4uc2tpcEZpeGVkMzJGaWVsZD1mdW5jdGlvbigpezUhPXRoaXMubmV4dFdpcmVUeXBlXz8oZGMoIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRml4ZWQzMkZpZWxkIiksdGhpcy5za2lwRmllbGQoKSk6dGhpcy5kZWNvZGVyXy5hZHZhbmNlKDQpfTtOLnNraXBGaXhlZDY0RmllbGQ9ZnVuY3Rpb24oKXsxIT10aGlzLm5leHRXaXJlVHlwZV8/KGRjKCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkNjRGaWVsZCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uYWR2YW5jZSg4KX07Ck4uc2tpcEdyb3VwPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uZXh0RmllbGRfO2Rve2lmKCF0aGlzLm5leHRGaWVsZCgpKXtkYygiVW5tYXRjaGVkIHN0YXJ0LWdyb3VwIHRhZzogc3RyZWFtIEVPRiIpO3RoaXMuZXJyb3JfPSEwO2JyZWFrfWlmKDQ9PXRoaXMubmV4dFdpcmVUeXBlXyl7dGhpcy5uZXh0RmllbGRfIT1hJiYoZGMoIlVubWF0Y2hlZCBlbmQtZ3JvdXAgdGFnIiksdGhpcy5lcnJvcl89ITApO2JyZWFrfXRoaXMuc2tpcEZpZWxkKCl9d2hpbGUoMSl9O04uc2tpcEZpZWxkPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMubmV4dFdpcmVUeXBlXyl7Y2FzZSAwOnRoaXMuc2tpcFZhcmludEZpZWxkKCk7YnJlYWs7Y2FzZSAxOnRoaXMuc2tpcEZpeGVkNjRGaWVsZCgpO2JyZWFrO2Nhc2UgMjp0aGlzLnNraXBEZWxpbWl0ZWRGaWVsZCgpO2JyZWFrO2Nhc2UgNTp0aGlzLnNraXBGaXhlZDMyRmllbGQoKTticmVhaztjYXNlIDM6dGhpcy5za2lwR3JvdXAoKTticmVhaztkZWZhdWx0OmRjKCJJbnZhbGlkIHdpcmUgZW5jb2RpbmcgZm9yIGZpZWxkLiIpfX07Ck4ucmVnaXN0ZXJSZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oYSxjKXtNYih0aGlzLnJlYWRDYWxsYmFja3NfKSYmKHRoaXMucmVhZENhbGxiYWNrc189e30pO3RoaXMucmVhZENhbGxiYWNrc19bYV09Y307Ti5ydW5SZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7cmV0dXJuKDAsdGhpcy5yZWFkQ2FsbGJhY2tzX1thXSkodGhpcyl9OwpOLnJlYWRBbnk9ZnVuY3Rpb24oYSl7dGhpcy5uZXh0V2lyZVR5cGVfPSRkKGEpO3N3aXRjaChhKXtjYXNlIDE6cmV0dXJuIHRoaXMucmVhZERvdWJsZSgpO2Nhc2UgMjpyZXR1cm4gdGhpcy5yZWFkRmxvYXQoKTtjYXNlIDM6cmV0dXJuIHRoaXMucmVhZEludDY0KCk7Y2FzZSA0OnJldHVybiB0aGlzLnJlYWRVaW50NjQoKTtjYXNlIDU6cmV0dXJuIHRoaXMucmVhZEludDMyKCk7Y2FzZSA2OnJldHVybiB0aGlzLnJlYWRGaXhlZDY0KCk7Y2FzZSA3OnJldHVybiB0aGlzLnJlYWRGaXhlZDMyKCk7Y2FzZSA4OnJldHVybiB0aGlzLnJlYWRCb29sKCk7Y2FzZSA5OnJldHVybiB0aGlzLnJlYWRTdHJpbmcoKTtjYXNlIDEwOmRjKCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gcmVhZEFueSgpIik7Y2FzZSAxMTpkYygiTWVzc2FnZSBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gcmVhZEFueSgpIik7Y2FzZSAxMjpyZXR1cm4gdGhpcy5yZWFkQnl0ZXMoKTtjYXNlIDEzOnJldHVybiB0aGlzLnJlYWRVaW50MzIoKTsKY2FzZSAxNDpyZXR1cm4gdGhpcy5yZWFkRW51bSgpO2Nhc2UgMTU6cmV0dXJuIHRoaXMucmVhZFNmaXhlZDMyKCk7Y2FzZSAxNjpyZXR1cm4gdGhpcy5yZWFkU2ZpeGVkNjQoKTtjYXNlIDE3OnJldHVybiB0aGlzLnJlYWRTaW50MzIoKTtjYXNlIDE4OnJldHVybiB0aGlzLnJlYWRTaW50NjQoKTtjYXNlIDMwOnJldHVybiB0aGlzLnJlYWRGaXhlZEhhc2g2NCgpO2Nhc2UgMzE6cmV0dXJuIHRoaXMucmVhZFZhcmludEhhc2g2NCgpO2RlZmF1bHQ6ZGMoIkludmFsaWQgZmllbGQgdHlwZSBpbiByZWFkQW55KCkiKX1yZXR1cm4gMH07Ti5yZWFkTWVzc2FnZT1mdW5jdGlvbihhLGMpe3ZhciBkPXRoaXMuZGVjb2Rlcl8uZ2V0RW5kKCksZj10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7Zj10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpK2Y7dGhpcy5kZWNvZGVyXy5zZXRFbmQoZik7YyhhLHRoaXMpO3RoaXMuZGVjb2Rlcl8uc2V0Q3Vyc29yKGYpO3RoaXMuZGVjb2Rlcl8uc2V0RW5kKGQpfTsKTi5yZWFkR3JvdXA9ZnVuY3Rpb24oYSxjLGQpe2QoYyx0aGlzKTt0aGlzLmVycm9yX3x8ND09dGhpcy5uZXh0V2lyZVR5cGVffHwoZGMoIkdyb3VwIHN1Ym1lc3NhZ2UgZGlkIG5vdCBlbmQgd2l0aCBhbiBFTkRfR1JPVVAgdGFnIiksdGhpcy5lcnJvcl89ITApfTtOLmdldEZpZWxkRGVjb2Rlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKSxjPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCksZD1jK2E7YT1yZih0aGlzLmRlY29kZXJfLmdldEJ1ZmZlcigpLGMsYSk7dGhpcy5kZWNvZGVyXy5zZXRDdXJzb3IoZCk7cmV0dXJuIGF9O04ucmVhZEludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyKCl9O04ucmVhZEludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nKCl9O04ucmVhZEludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCl9OwpOLnJlYWRJbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZygpfTtOLnJlYWRVaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpfTtOLnJlYWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZygpfTtOLnJlYWRVaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NCgpfTtOLnJlYWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZygpfTtOLnJlYWRTaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50MzIoKX07Ti5yZWFkU2ludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0KCl9OwpOLnJlYWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjRTdHJpbmcoKX07Ti5yZWFkRml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVaW50MzIoKX07Ti5yZWFkRml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVaW50NjQoKX07Ti5yZWFkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRVaW50NjRTdHJpbmcoKX07Ti5yZWFkU2ZpeGVkMzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKX07Ti5yZWFkU2ZpeGVkMzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50MzIoKS50b1N0cmluZygpfTtOLnJlYWRTZml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCgpfTtOLnJlYWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NFN0cmluZygpfTsKTi5yZWFkRmxvYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkRmxvYXQoKX07Ti5yZWFkRG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZERvdWJsZSgpfTtOLnJlYWRCb29sPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCl9O04ucmVhZEVudW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjQoKX07Ti5yZWFkU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTdHJpbmcoYSl9O04ucmVhZEJ5dGVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRCeXRlcyhhKX07Ti5yZWFkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFZhcmludEhhc2g2NCgpfTsKTi5yZWFkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkRml4ZWRIYXNoNjQoKX07Ti5yZWFkUGFja2VkRmllbGRfPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtjPXRoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCkrYztmb3IodmFyIGQ9W107dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTxjOylkLnB1c2goYS5jYWxsKHRoaXMuZGVjb2Rlcl8pKTtyZXR1cm4gZH07Ti5yZWFkUGFja2VkSW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyKX07Ti5yZWFkUGFja2VkSW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nKX07Ti5yZWFkUGFja2VkSW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KX07Ck4ucmVhZFBhY2tlZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZyl9O04ucmVhZFBhY2tlZFVpbnQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMil9O04ucmVhZFBhY2tlZFVpbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMlN0cmluZyl9O04ucmVhZFBhY2tlZFVpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NCl9O04ucmVhZFBhY2tlZFVpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZyl9OwpOLnJlYWRQYWNrZWRTaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDMyKX07Ti5yZWFkUGFja2VkU2ludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NCl9O04ucmVhZFBhY2tlZFNpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjRTdHJpbmcpfTtOLnJlYWRQYWNrZWRGaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50MzIpfTtOLnJlYWRQYWNrZWRGaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50NjQpfTtOLnJlYWRQYWNrZWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRVaW50NjRTdHJpbmcpfTsKTi5yZWFkUGFja2VkU2ZpeGVkMzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKX07Ti5yZWFkUGFja2VkU2ZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0KX07Ti5yZWFkUGFja2VkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEludDY0U3RyaW5nKX07Ti5yZWFkUGFja2VkRmxvYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEZsb2F0KX07Ti5yZWFkUGFja2VkRG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWREb3VibGUpfTtOLnJlYWRQYWNrZWRCb29sPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRCb29sKX07Ck4ucmVhZFBhY2tlZEVudW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZEVudW0pfTtOLnJlYWRQYWNrZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFZhcmludEhhc2g2NCl9O04ucmVhZFBhY2tlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGaXhlZEhhc2g2NCl9OwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS93cml0ZXIuanMKZnVuY3Rpb24gd2YoKXt0aGlzLmJsb2Nrc189W107dGhpcy50b3RhbExlbmd0aF89MDt0aGlzLmVuY29kZXJfPW5ldyBzZjt0aGlzLmJvb2ttYXJrc189W119Tj13Zi5wcm90b3R5cGU7Ti5hcHBlbmRVaW50OEFycmF5Xz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmVuY29kZXJfLmVuZCgpO3RoaXMuYmxvY2tzXy5wdXNoKGMpO3RoaXMuYmxvY2tzXy5wdXNoKGEpO3RoaXMudG90YWxMZW5ndGhfKz1jLmxlbmd0aCthLmxlbmd0aH07Ti5iZWdpbkRlbGltaXRlZF89ZnVuY3Rpb24oYSl7dGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpO2E9dGhpcy5lbmNvZGVyXy5lbmQoKTt0aGlzLmJsb2Nrc18ucHVzaChhKTt0aGlzLnRvdGFsTGVuZ3RoXys9YS5sZW5ndGg7YS5wdXNoKHRoaXMudG90YWxMZW5ndGhfKTtyZXR1cm4gYX07Ck4uZW5kRGVsaW1pdGVkXz1mdW5jdGlvbihhKXt2YXIgYz1hLnBvcCgpO2ZvcihjPXRoaXMudG90YWxMZW5ndGhfK3RoaXMuZW5jb2Rlcl8ubGVuZ3RoKCktYzsxMjc8YzspYS5wdXNoKGMmMTI3fDEyOCksYz4+Pj03LHRoaXMudG90YWxMZW5ndGhfKys7YS5wdXNoKGMpO3RoaXMudG90YWxMZW5ndGhfKyt9O04ud3JpdGVTZXJpYWxpemVkTWVzc2FnZT1mdW5jdGlvbihhLGMsZCl7dGhpcy5hcHBlbmRVaW50OEFycmF5XyhhLnN1YmFycmF5KGMsZCkpfTtOLm1heWJlV3JpdGVTZXJpYWxpemVkTWVzc2FnZT1mdW5jdGlvbihhLGMsZCl7bnVsbCE9YSYmbnVsbCE9YyYmbnVsbCE9ZCYmdGhpcy53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlKGEsYyxkKX07Ti5yZXNldD1mdW5jdGlvbigpe3RoaXMuYmxvY2tzXz1bXTt0aGlzLmVuY29kZXJfLmVuZCgpO3RoaXMudG90YWxMZW5ndGhfPTA7dGhpcy5ib29rbWFya3NfPVtdfTsKTi5nZXRSZXN1bHRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkodGhpcy50b3RhbExlbmd0aF8rdGhpcy5lbmNvZGVyXy5sZW5ndGgoKSksYz10aGlzLmJsb2Nrc18sZD1jLmxlbmd0aCxmPTAsZz0wO2c8ZDtnKyspe3ZhciBsPWNbZ107YS5zZXQobCxmKTtmKz1sLmxlbmd0aH1jPXRoaXMuZW5jb2Rlcl8uZW5kKCk7YS5zZXQoYyxmKTt0aGlzLmJsb2Nrc189W2FdO3JldHVybiBhfTtOLmdldFJlc3VsdEJhc2U2NFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gb2QodGhpcy5nZXRSZXN1bHRCdWZmZXIoKSxhKX07Ti5iZWdpblN1Yk1lc3NhZ2U9ZnVuY3Rpb24oYSl7dGhpcy5ib29rbWFya3NfLnB1c2godGhpcy5iZWdpbkRlbGltaXRlZF8oYSkpfTtOLmVuZFN1Yk1lc3NhZ2U9ZnVuY3Rpb24oKXt0aGlzLmVuZERlbGltaXRlZF8odGhpcy5ib29rbWFya3NfLnBvcCgpKX07Ck4ud3JpdGVGaWVsZEhlYWRlcl89ZnVuY3Rpb24oYSxjKXt0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmErYyl9OwpOLndyaXRlQW55PWZ1bmN0aW9uKGEsYyxkKXtzd2l0Y2goYSl7Y2FzZSAxOnRoaXMud3JpdGVEb3VibGUoYyxkKTticmVhaztjYXNlIDI6dGhpcy53cml0ZUZsb2F0KGMsZCk7YnJlYWs7Y2FzZSAzOnRoaXMud3JpdGVJbnQ2NChjLGQpO2JyZWFrO2Nhc2UgNDp0aGlzLndyaXRlVWludDY0KGMsZCk7YnJlYWs7Y2FzZSA1OnRoaXMud3JpdGVJbnQzMihjLGQpO2JyZWFrO2Nhc2UgNjp0aGlzLndyaXRlRml4ZWQ2NChjLGQpO2JyZWFrO2Nhc2UgNzp0aGlzLndyaXRlRml4ZWQzMihjLGQpO2JyZWFrO2Nhc2UgODp0aGlzLndyaXRlQm9vbChjLGQpO2JyZWFrO2Nhc2UgOTp0aGlzLndyaXRlU3RyaW5nKGMsZCk7YnJlYWs7Y2FzZSAxMDpkYygiR3JvdXAgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHdyaXRlQW55KCkiKTticmVhaztjYXNlIDExOmRjKCJNZXNzYWdlIGZpZWxkIHR5cGUgbm90IHN1cHBvcnRlZCBpbiB3cml0ZUFueSgpIik7YnJlYWs7Y2FzZSAxMjp0aGlzLndyaXRlQnl0ZXMoYywKZCk7YnJlYWs7Y2FzZSAxMzp0aGlzLndyaXRlVWludDMyKGMsZCk7YnJlYWs7Y2FzZSAxNDp0aGlzLndyaXRlRW51bShjLGQpO2JyZWFrO2Nhc2UgMTU6dGhpcy53cml0ZVNmaXhlZDMyKGMsZCk7YnJlYWs7Y2FzZSAxNjp0aGlzLndyaXRlU2ZpeGVkNjQoYyxkKTticmVhaztjYXNlIDE3OnRoaXMud3JpdGVTaW50MzIoYyxkKTticmVhaztjYXNlIDE4OnRoaXMud3JpdGVTaW50NjQoYyxkKTticmVhaztjYXNlIDMwOnRoaXMud3JpdGVGaXhlZEhhc2g2NChjLGQpO2JyZWFrO2Nhc2UgMzE6dGhpcy53cml0ZVZhcmludEhhc2g2NChjLGQpO2JyZWFrO2RlZmF1bHQ6ZGMoIkludmFsaWQgZmllbGQgdHlwZSBpbiB3cml0ZUFueSgpIil9fTtOLndyaXRlVW5zaWduZWRWYXJpbnQzMl89ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGMpKX07Ck4ud3JpdGVTaWduZWRWYXJpbnQzMl89ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihjKSl9O04ud3JpdGVVbnNpZ25lZFZhcmludDY0Xz1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50NjQoYykpfTtOLndyaXRlU2lnbmVkVmFyaW50NjRfPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50NjQoYykpfTtOLndyaXRlWmlnemFnVmFyaW50MzJfPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50MzIoYykpfTsKTi53cml0ZVppZ3phZ1ZhcmludDY0Xz1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KGMpKX07Ti53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXz1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nKGMpKX07Ti53cml0ZUludDMyPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhhLGMpfTtOLndyaXRlSW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiZ0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGEscGFyc2VJbnQoYywxMCkpfTtOLndyaXRlSW50NjQ9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiZ0aGlzLndyaXRlU2lnbmVkVmFyaW50NjRfKGEsYyl9OwpOLndyaXRlSW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYoYz1aZChjKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoYy5sbyxjLmhpKSl9O04ud3JpdGVVaW50MzI9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiZ0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMl8oYSxjKX07Ti53cml0ZVVpbnQzMlN0cmluZz1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhhLHBhcnNlSW50KGMsMTApKX07Ti53cml0ZVVpbnQ2ND1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVVbnNpZ25lZFZhcmludDY0XyhhLGMpfTtOLndyaXRlVWludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKGM9SmQoYyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KGMubG8sYy5oaSkpfTsKTi53cml0ZVNpbnQzMj1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVaaWd6YWdWYXJpbnQzMl8oYSxjKX07Ti53cml0ZVNpbnQ2ND1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NF8oYSxjKX07Ti53cml0ZVNpbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ18oYSxjKX07Ti53cml0ZUZpeGVkMzI9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDUpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50MzIoYykpfTtOLndyaXRlRml4ZWQ2ND1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMSksdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQ2NChjKSl9OwpOLndyaXRlRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe251bGwhPWMmJihjPUpkKGMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwxKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KGMubG8sYy5oaSkpfTtOLndyaXRlU2ZpeGVkMzI9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDUpLHRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQzMihjKSl9O04ud3JpdGVTZml4ZWQ2ND1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMSksdGhpcy5lbmNvZGVyXy53cml0ZUludDY0KGMpKX07Ti53cml0ZVNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKGM9WmQoYyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDEpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoYy5sbyxjLmhpKSl9OwpOLndyaXRlRmxvYXQ9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDUpLHRoaXMuZW5jb2Rlcl8ud3JpdGVGbG9hdChjKSl9O04ud3JpdGVEb3VibGU9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDEpLHRoaXMuZW5jb2Rlcl8ud3JpdGVEb3VibGUoYykpfTtOLndyaXRlQm9vbD1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZUJvb2woYykpfTtOLndyaXRlRW51bT1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGMpKX07Ti53cml0ZVN0cmluZz1mdW5jdGlvbihhLGMpe251bGwhPWMmJihhPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTdHJpbmcoYyksdGhpcy5lbmREZWxpbWl0ZWRfKGEpKX07Ck4ud3JpdGVCeXRlcz1mdW5jdGlvbihhLGMpe251bGwhPWMmJihjPW9mKGMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwyKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMihjLmxlbmd0aCksdGhpcy5hcHBlbmRVaW50OEFycmF5XyhjKSl9O04ud3JpdGVNZXNzYWdlPWZ1bmN0aW9uKGEsYyxkKXtudWxsIT1jJiYoYT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKSxkKGMsdGhpcyksdGhpcy5lbmREZWxpbWl0ZWRfKGEpKX07Ti53cml0ZU1lc3NhZ2VTZXQ9ZnVuY3Rpb24oYSxjLGQpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsMyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXygyLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihhKSxhPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKDMpLGQoYyx0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8oYSksdGhpcy53cml0ZUZpZWxkSGVhZGVyXygxLDQpKX07Ck4ud3JpdGVHcm91cD1mdW5jdGlvbihhLGMsZCl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwzKSxkKGMsdGhpcyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDQpKX07Ti53cml0ZUZpeGVkSGFzaDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwxKSx0aGlzLmVuY29kZXJfLndyaXRlRml4ZWRIYXNoNjQoYykpfTtOLndyaXRlVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlVmFyaW50SGFzaDY0KGMpKX07Ti53cml0ZVJlcGVhdGVkSW50MzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oYSxjW2RdKX07Ck4ud3JpdGVSZXBlYXRlZEludDMyU3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlSW50MzJTdHJpbmcoYSxjW2RdKX07Ti53cml0ZVJlcGVhdGVkSW50NjQ9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oYSxjW2RdKX07Ti53cml0ZVJlcGVhdGVkSW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVJbnQ2NFN0cmluZyhhLGNbZF0pfTtOLndyaXRlUmVwZWF0ZWRVaW50MzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhhLGNbZF0pfTsKTi53cml0ZVJlcGVhdGVkVWludDMyU3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlVWludDMyU3RyaW5nKGEsY1tkXSl9O04ud3JpdGVSZXBlYXRlZFVpbnQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50NjRfKGEsY1tkXSl9O04ud3JpdGVSZXBlYXRlZFVpbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVVpbnQ2NFN0cmluZyhhLGNbZF0pfTtOLndyaXRlUmVwZWF0ZWRTaW50MzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQzMl8oYSxjW2RdKX07Ck4ud3JpdGVSZXBlYXRlZFNpbnQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0XyhhLGNbZF0pfTtOLndyaXRlUmVwZWF0ZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZ18oYSxjW2RdKX07Ti53cml0ZVJlcGVhdGVkRml4ZWQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZUZpeGVkMzIoYSxjW2RdKX07Ti53cml0ZVJlcGVhdGVkRml4ZWQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZUZpeGVkNjQoYSxjW2RdKX07Ck4ud3JpdGVSZXBlYXRlZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVGaXhlZDY0U3RyaW5nKGEsY1tkXSl9O04ud3JpdGVSZXBlYXRlZFNmaXhlZDMyPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlU2ZpeGVkMzIoYSxjW2RdKX07Ti53cml0ZVJlcGVhdGVkU2ZpeGVkNjQ9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVTZml4ZWQ2NChhLGNbZF0pfTtOLndyaXRlUmVwZWF0ZWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVNmaXhlZDY0U3RyaW5nKGEsY1tkXSl9OwpOLndyaXRlUmVwZWF0ZWRGbG9hdD1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZUZsb2F0KGEsY1tkXSl9O04ud3JpdGVSZXBlYXRlZERvdWJsZT1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZURvdWJsZShhLGNbZF0pfTtOLndyaXRlUmVwZWF0ZWRCb29sPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlQm9vbChhLGNbZF0pfTtOLndyaXRlUmVwZWF0ZWRFbnVtPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRW51bShhLGNbZF0pfTtOLndyaXRlUmVwZWF0ZWRTdHJpbmc9ZnVuY3Rpb24oYSl7aWYobnVsbCE9YSlmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl0aGlzLndyaXRlU3RyaW5nKDEsYVtjXSl9OwpOLndyaXRlUmVwZWF0ZWRCeXRlcz1mdW5jdGlvbihhKXtpZihudWxsIT1hKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXRoaXMud3JpdGVCeXRlcygxLGFbY10pfTtOLndyaXRlUmVwZWF0ZWRNZXNzYWdlPWZ1bmN0aW9uKGEsYyxkKXtpZihudWxsIT1jKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZz10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtkKGNbZl0sdGhpcyk7dGhpcy5lbmREZWxpbWl0ZWRfKGcpfX07Ti53cml0ZVJlcGVhdGVkR3JvdXA9ZnVuY3Rpb24oYSxjLGQpe2lmKG51bGwhPWMpZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDMpLGQoY1tmXSx0aGlzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNCl9O04ud3JpdGVSZXBlYXRlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRml4ZWRIYXNoNjQoYSxjW2RdKX07Ck4ud3JpdGVSZXBlYXRlZFZhcmludEhhc2g2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVZhcmludEhhc2g2NChhLGNbZF0pfTtOLndyaXRlUGFja2VkSW50MzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIoY1tkXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07Ti53cml0ZVBhY2tlZEludDMyU3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKHBhcnNlSW50KGNbZF0sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTsKTi53cml0ZVBhY2tlZEludDY0PWZ1bmN0aW9uKGEpe2lmKG51bGwhPWEmJmEubGVuZ3RoKXtmb3IodmFyIGM9dGhpcy5iZWdpbkRlbGltaXRlZF8oMSksZD0wO2Q8YS5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQ2NChhW2RdKTt0aGlzLmVuZERlbGltaXRlZF8oYyl9fTtOLndyaXRlUGFja2VkSW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGY9WmQoY1tkXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoZi5sbyxmLmhpKX10aGlzLmVuZERlbGltaXRlZF8oYSl9fTsKTi53cml0ZVBhY2tlZFVpbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGNbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O04ud3JpdGVQYWNrZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMihwYXJzZUludChjW2RdLDEwKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07Ck4ud3JpdGVQYWNrZWRVaW50NjQ9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQ2NChjW2RdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtOLndyaXRlUGFja2VkVWludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBmPUpkKGNbZF0pO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdFZhcmludDY0KGYubG8sZi5oaSl9dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07Ck4ud3JpdGVQYWNrZWRTaW50MzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50MzIoY1tkXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07Ti53cml0ZVBhY2tlZFNpbnQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQ2NChjW2RdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTsKTi53cml0ZVBhY2tlZFNpbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQ2NChwYXJzZUludChjW2RdLDEwKSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07Ti53cml0ZVBhY2tlZEZpeGVkMzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlVWludDMyKGNbYV0pfTsKTi53cml0ZVBhY2tlZEZpeGVkNjQ9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlVWludDY0KGNbYV0pfTtOLndyaXRlUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXt2YXIgZD1KZChjW2FdKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRGaXhlZDY0KGQubG8sZC5oaSl9fTsKTi53cml0ZVBhY2tlZFNmaXhlZDMyPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwyKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig0KmMubGVuZ3RoKSxhPTA7YTxjLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUludDMyKGNbYV0pfTtOLndyaXRlUGFja2VkU2ZpeGVkNjQ9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlSW50NjQoY1thXSl9OwpOLndyaXRlUGFja2VkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlSW50NjRTdHJpbmcoY1thXSl9O04ud3JpdGVQYWNrZWRGbG9hdD1mdW5jdGlvbihhKXtpZihudWxsIT1hJiZhLmxlbmd0aCl7dGhpcy53cml0ZUZpZWxkSGVhZGVyXygxLDIpO3RoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqYS5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXRoaXMuZW5jb2Rlcl8ud3JpdGVGbG9hdChhW2NdKX19OwpOLndyaXRlUGFja2VkRG91YmxlPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwyKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmMubGVuZ3RoKSxhPTA7YTxjLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZURvdWJsZShjW2FdKX07Ti53cml0ZVBhY2tlZEJvb2w9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGMubGVuZ3RoKSxhPTA7YTxjLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUJvb2woY1thXSl9OwpOLndyaXRlUGFja2VkRW51bT1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVFbnVtKGNbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O04ud3JpdGVQYWNrZWRGaXhlZEhhc2g2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVGaXhlZEhhc2g2NChjW2FdKX07Ck4ud3JpdGVQYWNrZWRWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLmVuY29kZXJfLndyaXRlVmFyaW50SGFzaDY0KGNbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19OwovLyMgc291cmNlVVJMPWJ1aWxkOi9leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL21hcC5qcwpmdW5jdGlvbiB4ZihhLGMpe3RoaXMuYXJyXz1hO3RoaXMudmFsdWVDdG9yXz1jO3RoaXMubWFwXz17fTt0aGlzLmFyckNsZWFuPSEwOzA8dGhpcy5hcnJfLmxlbmd0aCYmdGhpcy5sb2FkRnJvbUFycmF5XygpfXhmLnByb3RvdHlwZS5sb2FkRnJvbUFycmF5Xz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy5hcnJfLmxlbmd0aDthKyspe3ZhciBjPXRoaXMuYXJyX1thXSxkPWNbMF07dGhpcy5tYXBfW2QudG9TdHJpbmcoKV09bmV3IHlmKGQsY1sxXSl9dGhpcy5hcnJDbGVhbj0hMH07CnhmLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJDbGVhbil7aWYodGhpcy52YWx1ZUN0b3JfKXt2YXIgYT10aGlzLm1hcF8sYztmb3IoYyBpbiBhKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpKXt2YXIgZD1hW2NdLnZhbHVlV3JhcHBlcjtkJiZkLnRvQXJyYXkoKX19fWVsc2V7dGhpcy5hcnJfLmxlbmd0aD0wO2E9dGhpcy5zdHJpbmdLZXlzXygpO2Euc29ydCgpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBmPXRoaXMubWFwX1thW2NdXTsoZD1mLnZhbHVlV3JhcHBlcikmJmQudG9BcnJheSgpO3RoaXMuYXJyXy5wdXNoKFtmLmtleSxmLnZhbHVlXSl9dGhpcy5hcnJDbGVhbj0hMH1yZXR1cm4gdGhpcy5hcnJffTsKeGYucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBkPXRoaXMudG9BcnJheSgpLGY9W10sZz0wO2c8ZC5sZW5ndGg7ZysrKXt2YXIgbD10aGlzLm1hcF9bZFtnXVswXS50b1N0cmluZygpXTt0aGlzLndyYXBFbnRyeV8obCk7dmFyIGs9bC52YWx1ZVdyYXBwZXI7az9mLnB1c2goW2wua2V5LGMoYSxrKV0pOmYucHVzaChbbC5rZXksbC52YWx1ZV0pfXJldHVybiBmfTtmdW5jdGlvbiB6ZyhhKXt0aGlzLmlkeF89MDt0aGlzLmFycl89YX16Zy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkeF88dGhpcy5hcnJfLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTp0aGlzLmFycl9bdGhpcy5pZHhfKytdfTp7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fTsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmKHpnLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtOPXhmLnByb3RvdHlwZTtOLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZ0tleXNfKCkubGVuZ3RofTsKTi5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwXz17fTt0aGlzLmFyckNsZWFuPSExfTtOLmRlbD1mdW5jdGlvbihhKXthPWEudG9TdHJpbmcoKTt2YXIgYz10aGlzLm1hcF8uaGFzT3duUHJvcGVydHkoYSk7ZGVsZXRlIHRoaXMubWFwX1thXTt0aGlzLmFyckNsZWFuPSExO3JldHVybiBjfTtOLmdldEVudHJ5TGlzdD1mdW5jdGlvbigpe3ZhciBhPVtdLGM9dGhpcy5zdHJpbmdLZXlzXygpO2Muc29ydCgpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLm1hcF9bY1tkXV07YS5wdXNoKFtmLmtleSxmLnZhbHVlXSl9cmV0dXJuIGF9O04uZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdLGM9dGhpcy5zdHJpbmdLZXlzXygpO2Muc29ydCgpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLm1hcF9bY1tkXV07YS5wdXNoKFtmLmtleSx0aGlzLndyYXBFbnRyeV8oZildKX1yZXR1cm4gbmV3IHpnKGEpfTsKTi5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYz10aGlzLnN0cmluZ0tleXNfKCk7Yy5zb3J0KCk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYS5wdXNoKHRoaXMubWFwX1tjW2RdXS5rZXkpO3JldHVybiBuZXcgemcoYSl9O04udmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYz10aGlzLnN0cmluZ0tleXNfKCk7Yy5zb3J0KCk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYS5wdXNoKHRoaXMud3JhcEVudHJ5Xyh0aGlzLm1hcF9bY1tkXV0pKTtyZXR1cm4gbmV3IHpnKGEpfTtOLmZvckVhY2g9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLnN0cmluZ0tleXNfKCk7ZC5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPXRoaXMubWFwX1tkW2ZdXTthLmNhbGwoYyx0aGlzLndyYXBFbnRyeV8oZyksZy5rZXksdGhpcyl9fTsKTi5zZXQ9ZnVuY3Rpb24oYSxjKXt2YXIgZD1uZXcgeWYoYSk7dGhpcy52YWx1ZUN0b3JfPyhkLnZhbHVlV3JhcHBlcj1jLGQudmFsdWU9Yy50b0FycmF5KCkpOmQudmFsdWU9Yzt0aGlzLm1hcF9bYS50b1N0cmluZygpXT1kO3RoaXMuYXJyQ2xlYW49ITE7cmV0dXJuIHRoaXN9O04ud3JhcEVudHJ5Xz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZUN0b3JfPyhhLnZhbHVlV3JhcHBlcnx8KGEudmFsdWVXcmFwcGVyPW5ldyB0aGlzLnZhbHVlQ3Rvcl8oYS52YWx1ZSkpLGEudmFsdWVXcmFwcGVyKTphLnZhbHVlfTtOLmdldD1mdW5jdGlvbihhKXtpZihhPXRoaXMubWFwX1thLnRvU3RyaW5nKCldKXJldHVybiB0aGlzLndyYXBFbnRyeV8oYSl9O04uaGFzPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKClpbiB0aGlzLm1hcF99OwpOLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihhLGMsZCxmLGcpe3ZhciBsPXRoaXMuc3RyaW5nS2V5c18oKTtsLnNvcnQoKTtmb3IodmFyIGs9MDtrPGwubGVuZ3RoO2srKyl7dmFyIG49dGhpcy5tYXBfW2xba11dO2MuYmVnaW5TdWJNZXNzYWdlKGEpO2QuY2FsbChjLDEsbi5rZXkpO3RoaXMudmFsdWVDdG9yXz9mLmNhbGwoYywyLHRoaXMud3JhcEVudHJ5XyhuKSxnKTpmLmNhbGwoYywyLG4udmFsdWUpO2MuZW5kU3ViTWVzc2FnZSgpfX07ZnVuY3Rpb24gQWcoYSxjLGQpe2Zvcih2YXIgZj11Zi5wcm90b3R5cGUucmVhZFN0cmluZyxnPXVmLnByb3RvdHlwZS5yZWFkTWVzc2FnZSxsPSIiLGs9dm9pZCAwO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspe3ZhciBuPWMuZ2V0RmllbGROdW1iZXIoKTsxPT1uP2w9Zi5jYWxsKGMpOjI9PW4mJihhLnZhbHVlQ3Rvcl8/KGs9bmV3IGEudmFsdWVDdG9yXyxnLmNhbGwoYyxrLGQpKTprPWcuY2FsbChjKSl9YS5zZXQobCxrKX0KTi5zdHJpbmdLZXlzXz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWFwXyxjPVtdLGQ7Zm9yKGQgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxkKSYmYy5wdXNoKGQpO3JldHVybiBjfTtmdW5jdGlvbiB5ZihhLGMpe3RoaXMua2V5PWE7dGhpcy52YWx1ZT1jO3RoaXMudmFsdWVXcmFwcGVyPXZvaWQgMH07Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfcHJvdG9idWZfanMvbWVzc2FnZS5qcwpmdW5jdGlvbiBCZygpe312YXIgQ2c9ImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXk7QmcucHJvdG90eXBlLmdldEpzUGJNZXNzYWdlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSWRffTtmdW5jdGlvbiBEZyhhLGMpe3JldHVybiBjK2EuYXJyYXlJbmRleE9mZnNldF99ZnVuY3Rpb24gRWcoYSxjKXtyZXR1cm4gYy1hLmFycmF5SW5kZXhPZmZzZXRffQpmdW5jdGlvbiBGZyhhLGMsZCxmKXthLndyYXBwZXJzXz1udWxsO2N8fChjPVtdKTthLm1lc3NhZ2VJZF89dm9pZCAwO2EuYXJyYXlJbmRleE9mZnNldF89LTE7YS5hcnJheT1jO0dnKGEpO2EuY29udmVydGVkUHJpbWl0aXZlRmllbGRzXz17fTtpZihkKWZvcihjPTA7YzxkLmxlbmd0aDtjKyspe3ZhciBnPWRbY107ZzxhLnBpdm90Xz8oZz1EZyhhLGcpLGEuYXJyYXlbZ109YS5hcnJheVtnXXx8SGcpOihJZyhhKSxhLmV4dGVuc2lvbk9iamVjdF9bZ109YS5leHRlbnNpb25PYmplY3RfW2ddfHxIZyl9aWYoZiYmZi5sZW5ndGgpZm9yKGM9MDtjPGYubGVuZ3RoO2MrKylKZyhhLGZbY10pfXZhciBIZz1PYmplY3QuZnJlZXplP09iamVjdC5mcmVlemUoW10pOltdO2Z1bmN0aW9uIEtnKGEpe3JldHVybiBRYihhKX1mdW5jdGlvbiBMZyhhKXtyZXR1cm4gbnVsbCE9PWEmJiJvYmplY3QiPT10eXBlb2YgYSYmIUtnKGEpJiYhKENnJiZhIGluc3RhbmNlb2YgVWludDhBcnJheSl9CmZ1bmN0aW9uIEdnKGEpe3ZhciBjPWEuYXJyYXkubGVuZ3RoO2lmKGMpey0tYzt2YXIgZD1hLmFycmF5W2NdO2lmKExnKGQpKXthLnBpdm90Xz1FZyhhLGMpO2EuZXh0ZW5zaW9uT2JqZWN0Xz1kO3JldHVybn19YS5waXZvdF89TnVtYmVyLk1BWF9WQUxVRX1mdW5jdGlvbiBJZyhhKXt2YXIgYz1EZyhhLGEucGl2b3RfKTthLmFycmF5W2NdfHwoYS5leHRlbnNpb25PYmplY3RfPWEuYXJyYXlbY109e30pfWZ1bmN0aW9uIE1nKGEsYyxkKXtmb3IodmFyIGY9W10sZz0wO2c8YS5sZW5ndGg7ZysrKWZbZ109Yy5jYWxsKGFbZ10sZCxhW2ddKTtyZXR1cm4gZn1mdW5jdGlvbiBOZyhhLGMpe2lmKGM8YS5waXZvdF8pe2M9RGcoYSxjKTt2YXIgZD1hLmFycmF5W2NdO3JldHVybiBkPT09SGc/YS5hcnJheVtjXT1bXTpkfWlmKGEuZXh0ZW5zaW9uT2JqZWN0XylyZXR1cm4gZD1hLmV4dGVuc2lvbk9iamVjdF9bY10sZD09PUhnP2EuZXh0ZW5zaW9uT2JqZWN0X1tjXT1bXTpkfQpmdW5jdGlvbiBPZyhhLGMpe3JldHVybiBOZyhhLGMpfWZ1bmN0aW9uIFBnKGEsYyl7YT1OZyhhLGMpO3JldHVybiBudWxsPT1hP2E6K2F9ZnVuY3Rpb24gUWcoYSl7dmFyIGM9T2coYSwxKTthLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc198fChhLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e30pO2lmKCFhLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc19bMV0pe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF09K2NbZF07YS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfWzFdPSEwfXJldHVybiBjfWZ1bmN0aW9uIFJnKGEpe2lmKG51bGw9PWF8fEhiKGEpKXJldHVybiBhO2lmKENnJiZhIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gb2QoYSk7ZGMoIkNhbm5vdCBjb2VyY2UgdG8gYjY0IHN0cmluZzogIitMYihhKSk7cmV0dXJuIG51bGx9CmZ1bmN0aW9uIFNnKGEpe2lmKG51bGw9PWF8fGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBhO2lmKEhiKGEpKXJldHVybiBxZChhKTtkYygiQ2Fubm90IGNvZXJjZSB0byBVaW50OEFycmF5OiAiK0xiKGEpKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBUZyhhKXtVZyhhKTtyZXR1cm4hYS5sZW5ndGh8fEhiKGFbMF0pP2E6aGMoYSxSZyl9ZnVuY3Rpb24gVmcoYSl7VWcoYSk7cmV0dXJuIWEubGVuZ3RofHxhWzBdaW5zdGFuY2VvZiBVaW50OEFycmF5P2E6aGMoYSxTZyl9ZnVuY3Rpb24gVWcoYSl7aWYoYSYmMTxhLmxlbmd0aCl7dmFyIGM9TGIoYVswXSk7Z2MoYSxmdW5jdGlvbihkKXtMYihkKSE9YyYmZGMoIkluY29uc2lzdGVudCB0eXBlIGluIEpTUEIgcmVwZWF0ZWQgZmllbGQgYXJyYXkuIEdvdCAiK0xiKGQpKyIgZXhwZWN0ZWQgIitjKX0pfX1mdW5jdGlvbiBXZyhhLGMsZCl7YT1OZyhhLGMpO3JldHVybiBudWxsPT1hP2Q6YX0KZnVuY3Rpb24gWGcoYSxjKXthPVBnKGEsYyk7cmV0dXJuIG51bGw9PWE/MDphfWZ1bmN0aW9uIFdoKGEsYyxkKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTtpZigxIGluIGEud3JhcHBlcnNfKXJldHVybiBhLndyYXBwZXJzX1sxXTtpZighYylyZXR1cm4gYz1OZyhhLDEpLGN8fChjPVtdLFhoKGEsMSxjKSksYS53cmFwcGVyc19bMV09bmV3IHhmKGMsZCl9ZnVuY3Rpb24gWGgoYSxjLGQpe2M8YS5waXZvdF8/YS5hcnJheVtEZyhhLGMpXT1kOihJZyhhKSxhLmV4dGVuc2lvbk9iamVjdF9bY109ZCl9ZnVuY3Rpb24gWWgoYSxjLGQpe1poKGEsYyxkLDApfWZ1bmN0aW9uICRoKGEsYyxkKXtaaChhLGMsZCwwKX1mdW5jdGlvbiBhaShhLGMsZCl7WmgoYSxjLGQsIiIpfWZ1bmN0aW9uIGJpKGEsYyxkKXtaaChhLGMsZCwwKX1mdW5jdGlvbiBaaChhLGMsZCxmKXtkIT09Zj9YaChhLGMsZCk6YS5hcnJheVtEZyhhLGMpXT1udWxsfQpmdW5jdGlvbiBjaShhLGMsZCl7YT1PZyhhLDEpO3ZvaWQgMCE9ZD9hLnNwbGljZShkLDAsYyk6YS5wdXNoKGMpfWZ1bmN0aW9uIGRpKGEsYyxkLGYpeyhkPUpnKGEsZCkpJiZkIT09YyYmdm9pZCAwIT09ZiYmKGEud3JhcHBlcnNfJiZkIGluIGEud3JhcHBlcnNfJiYoYS53cmFwcGVyc19bZF09dm9pZCAwKSxYaChhLGQsdm9pZCAwKSk7WGgoYSxjLGYpfWZ1bmN0aW9uIEpnKGEsYyl7Zm9yKHZhciBkLGYsZz0wO2c8Yy5sZW5ndGg7ZysrKXt2YXIgbD1jW2ddLGs9TmcoYSxsKTtudWxsIT1rJiYoZD1sLGY9ayxYaChhLGwsdm9pZCAwKSl9cmV0dXJuIGQ/KFhoKGEsZCxmKSxkKTowfWZ1bmN0aW9uIGVpKGEsYyxkKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTtpZighYS53cmFwcGVyc19bZF0pe3ZhciBmPU5nKGEsZCk7ZiYmKGEud3JhcHBlcnNfW2RdPW5ldyBjKGYpKX1yZXR1cm4gYS53cmFwcGVyc19bZF19CmZ1bmN0aW9uIGZpKGEsYyxkKXtnaShhLGMsZCk7Yz1hLndyYXBwZXJzX1tkXTtjPT1IZyYmKGM9YS53cmFwcGVyc19bZF09W10pO3JldHVybiBjfWZ1bmN0aW9uIGdpKGEsYyxkKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTtpZighYS53cmFwcGVyc19bZF0pe2Zvcih2YXIgZj1PZyhhLGQpLGc9W10sbD0wO2w8Zi5sZW5ndGg7bCsrKWdbbF09bmV3IGMoZltsXSk7YS53cmFwcGVyc19bZF09Z319ZnVuY3Rpb24gaGkoYSxjLGQpe2Eud3JhcHBlcnNffHwoYS53cmFwcGVyc189e30pO3ZhciBmPWQ/ZC50b0FycmF5KCk6ZDthLndyYXBwZXJzX1tjXT1kO1hoKGEsYyxmKX1mdW5jdGlvbiBpaShhLGMsZCxmKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTt2YXIgZz1mP2YudG9BcnJheSgpOmY7YS53cmFwcGVyc19bY109ZjtkaShhLGMsZCxnKX0KZnVuY3Rpb24gamkoYSxjLGQpe2Eud3JhcHBlcnNffHwoYS53cmFwcGVyc189e30pO2Q9ZHx8W107Zm9yKHZhciBmPVtdLGc9MDtnPGQubGVuZ3RoO2crKylmW2ddPWRbZ10udG9BcnJheSgpO2Eud3JhcHBlcnNfW2NdPWQ7WGgoYSxjLGYpfWZ1bmN0aW9uIGtpKGEsYyxkLGYsZyl7Z2koYSxmLGMpO3ZhciBsPWEud3JhcHBlcnNfW2NdO2x8fChsPWEud3JhcHBlcnNfW2NdPVtdKTtkPWQ/ZDpuZXcgZjthPU9nKGEsYyk7dm9pZCAwIT1nPyhsLnNwbGljZShnLDAsZCksYS5zcGxpY2UoZywwLGQudG9BcnJheSgpKSk6KGwucHVzaChkKSxhLnB1c2goZC50b0FycmF5KCkpKTtyZXR1cm4gZH1OPUJnLnByb3RvdHlwZTsKTi5zeW5jTWFwRmllbGRzXz1mdW5jdGlvbigpe2lmKHRoaXMud3JhcHBlcnNfKWZvcih2YXIgYSBpbiB0aGlzLndyYXBwZXJzXyl7dmFyIGM9dGhpcy53cmFwcGVyc19bYV07aWYoUWIoYykpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXSYmY1tkXS50b0FycmF5KCk7ZWxzZSBjJiZjLnRvQXJyYXkoKX19O04udG9BcnJheT1mdW5jdGlvbigpe3RoaXMuc3luY01hcEZpZWxkc18oKTtyZXR1cm4gdGhpcy5hcnJheX07Ti50b1N0cmluZz1mdW5jdGlvbigpe3RoaXMuc3luY01hcEZpZWxkc18oKTtyZXR1cm4gdGhpcy5hcnJheS50b1N0cmluZygpfTsKTi5nZXRFeHRlbnNpb249ZnVuY3Rpb24oYSl7aWYodGhpcy5leHRlbnNpb25PYmplY3RfKXt0aGlzLndyYXBwZXJzX3x8KHRoaXMud3JhcHBlcnNfPXt9KTt2YXIgYz1hLmZpZWxkSW5kZXg7aWYoYS5pc1JlcGVhdGVkKXtpZihhLmlzTWVzc2FnZVR5cGUoKSlyZXR1cm4gdGhpcy53cmFwcGVyc19bY118fCh0aGlzLndyYXBwZXJzX1tjXT1oYyh0aGlzLmV4dGVuc2lvbk9iamVjdF9bY118fFtdLGZ1bmN0aW9uKGQpe3JldHVybiBuZXcgYS5jdG9yKGQpfSkpLHRoaXMud3JhcHBlcnNfW2NdfWVsc2UgaWYoYS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIXRoaXMud3JhcHBlcnNfW2NdJiZ0aGlzLmV4dGVuc2lvbk9iamVjdF9bY10mJih0aGlzLndyYXBwZXJzX1tjXT1uZXcgYS5jdG9yKHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tjXSkpLHRoaXMud3JhcHBlcnNfW2NdO3JldHVybiB0aGlzLmV4dGVuc2lvbk9iamVjdF9bY119fTsKTi5zZXRFeHRlbnNpb249ZnVuY3Rpb24oYSxjKXt0aGlzLndyYXBwZXJzX3x8KHRoaXMud3JhcHBlcnNfPXt9KTtJZyh0aGlzKTt2YXIgZD1hLmZpZWxkSW5kZXg7YS5pc1JlcGVhdGVkPyhjPWN8fFtdLGEuaXNNZXNzYWdlVHlwZSgpPyh0aGlzLndyYXBwZXJzX1tkXT1jLHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tkXT1oYyhjLGZ1bmN0aW9uKGYpe3JldHVybiBmLnRvQXJyYXkoKX0pKTp0aGlzLmV4dGVuc2lvbk9iamVjdF9bZF09Yyk6YS5pc01lc3NhZ2VUeXBlKCk/KHRoaXMud3JhcHBlcnNfW2RdPWMsdGhpcy5leHRlbnNpb25PYmplY3RfW2RdPWM/Yy50b0FycmF5KCk6Yyk6dGhpcy5leHRlbnNpb25PYmplY3RfW2RdPWM7cmV0dXJuIHRoaXN9O04uY2xvbmVNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIGxpKHRoaXMpfTtOLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGxpKHRoaXMpfTsKZnVuY3Rpb24gbGkoYSl7cmV0dXJuIG5ldyBhLmNvbnN0cnVjdG9yKG1pKGEudG9BcnJheSgpKSl9ZnVuY3Rpb24gbWkoYSl7aWYoUWIoYSkpe2Zvcih2YXIgYz1BcnJheShhLmxlbmd0aCksZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZj1hW2RdO251bGwhPWYmJihjW2RdPSJvYmplY3QiPT10eXBlb2YgZj9taShmKTpmKX1yZXR1cm4gY31pZihDZyYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIG5ldyBVaW50OEFycmF5KGEpO2M9e307Zm9yKGQgaW4gYSlmPWFbZF0sbnVsbCE9ZiYmKGNbZF09Im9iamVjdCI9PXR5cGVvZiBmP21pKGYpOmYpO3JldHVybiBjfTsKLy8jIHNvdXJjZVVSTD1idWlsZDovZXh0ZXJuYWwvY29tX2dvb2dsZV9wcm90b2J1Zl9qcy9kZWJ1Zy5qcwovLyMgc291cmNlVVJMPWJ1aWxkOi9iYXplbC1vdXQvaG9zdC9iaW4vZXh0ZXJuYWwvb3JnX3RlbnNvcmZsb3cvdGVuc29yZmxvdy9jb3JlL2V4YW1wbGVfcHJvdG9zLmpzCmZ1bmN0aW9uIG5pKGEpe0ZnKHRoaXMsYSxvaSxudWxsKX1UYihuaSxCZyk7ZnVuY3Rpb24gQmooYSl7RmcodGhpcyxhLENqLG51bGwpfVRiKEJqLEJnKTtmdW5jdGlvbiBEaihhKXtGZyh0aGlzLGEsRWosbnVsbCl9VGIoRGosQmcpO2Z1bmN0aW9uIEZqKGEpe0ZnKHRoaXMsYSxudWxsLEdqKX1UYihGaixCZyk7ZnVuY3Rpb24gSGooYSl7RmcodGhpcyxhLG51bGwsbnVsbCl9VGIoSGosQmcpO2Z1bmN0aW9uIElqKGEpe0ZnKHRoaXMsYSxKaixudWxsKX1UYihJaixCZyk7ZnVuY3Rpb24gS2ooYSl7RmcodGhpcyxhLG51bGwsbnVsbCl9VGIoS2osQmcpO3ZhciBvaT1bMV07Tj1uaS5wcm90b3R5cGU7Ti50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gTGooYSx0aGlzKX07ZnVuY3Rpb24gTGooYSxjKXt2YXIgZD17dmFsdWVMaXN0OmMuZ2V0VmFsdWVMaXN0X2FzQjY0KCl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBNaihhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkQnl0ZXMoKTthLmFkZFZhbHVlKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1OLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3ZjtOaih0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBOaihhLGMpe2E9YS5nZXRWYWx1ZUxpc3RfYXNVOCgpOzA8YS5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZEJ5dGVzKGEpfU4uZ2V0VmFsdWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIE9nKHRoaXMsMSl9O04uZ2V0VmFsdWVMaXN0X2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIFRnKHRoaXMuZ2V0VmFsdWVMaXN0KCkpfTtOLmdldFZhbHVlTGlzdF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIFZnKHRoaXMuZ2V0VmFsdWVMaXN0KCkpfTsKTi5zZXRWYWx1ZUxpc3Q9ZnVuY3Rpb24oYSl7WGgodGhpcywxLGF8fFtdKX07Ti5hZGRWYWx1ZT1mdW5jdGlvbihhLGMpe2NpKHRoaXMsYSxjKX07Ti5jbGVhclZhbHVlTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0VmFsdWVMaXN0KFtdKX07dmFyIENqPVsxXTtOPUJqLnByb3RvdHlwZTtOLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBPaihhLHRoaXMpfTtmdW5jdGlvbiBPaihhLGMpe3ZhciBkLGY9e3ZhbHVlTGlzdDpudWxsPT0oZD1RZyhjKSk/dm9pZCAwOmR9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfWZ1bmN0aW9uIFBqKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWRQYWNrZWRGbG9hdCgpO2Euc2V0VmFsdWVMaXN0KGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX0KTi5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7UWoodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gUWooYSxjKXthPWEuZ2V0VmFsdWVMaXN0KCk7MDxhLmxlbmd0aCYmYy53cml0ZVBhY2tlZEZsb2F0KGEpfU4uZ2V0VmFsdWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFFnKHRoaXMpfTtOLnNldFZhbHVlTGlzdD1mdW5jdGlvbihhKXtYaCh0aGlzLDEsYXx8W10pfTtOLmFkZFZhbHVlPWZ1bmN0aW9uKGEsYyl7Y2kodGhpcyxhLGMpfTtOLmNsZWFyVmFsdWVMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRWYWx1ZUxpc3QoW10pfTt2YXIgRWo9WzFdO049RGoucHJvdG90eXBlO04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFJqKGEsdGhpcyl9O2Z1bmN0aW9uIFJqKGEsYyl7dmFyIGQsZj17dmFsdWVMaXN0Om51bGw9PShkPU9nKGMsMSkpP3ZvaWQgMDpkfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gU2ooYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFBhY2tlZEludDY0KCk7YS5zZXRWYWx1ZUxpc3QoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU4uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHdmO1RqKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIFRqKGEsYyl7YT1hLmdldFZhbHVlTGlzdCgpOzA8YS5sZW5ndGgmJmMud3JpdGVQYWNrZWRJbnQ2NChhKX1OLmdldFZhbHVlTGlzdD1mdW5jdGlvbigpe3JldHVybiBPZyh0aGlzLDEpfTtOLnNldFZhbHVlTGlzdD1mdW5jdGlvbihhKXtYaCh0aGlzLDEsYXx8W10pfTtOLmFkZFZhbHVlPWZ1bmN0aW9uKGEsYyl7Y2kodGhpcyxhLGMpfTtOLmNsZWFyVmFsdWVMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRWYWx1ZUxpc3QoW10pfTsKdmFyIEdqPVtbMSwyLDNdXTtOPUZqLnByb3RvdHlwZTtOLmdldEtpbmRDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEpnKHRoaXMsR2pbMF0pfTtOLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBVaihhLHRoaXMpfTtmdW5jdGlvbiBVaihhLGMpe3ZhciBkLGY9e2J5dGVzTGlzdDooZD1jLmdldEJ5dGVzTGlzdCgpKSYmTGooYSxkKSxmbG9hdExpc3Q6KGQ9Yy5nZXRGbG9hdExpc3QoKSkmJk9qKGEsZCksaW50NjRMaXN0OihkPWMuZ2V0SW50NjRMaXN0KCkpJiZSaihhLGQpfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gVmooYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBuaTtjLnJlYWRNZXNzYWdlKGQsTWopO2Euc2V0Qnl0ZXNMaXN0KGQpO2JyZWFrO2Nhc2UgMjpkPW5ldyBCajtjLnJlYWRNZXNzYWdlKGQsUGopO2Euc2V0RmxvYXRMaXN0KGQpO2JyZWFrO2Nhc2UgMzpkPW5ldyBEajtjLnJlYWRNZXNzYWdlKGQsU2opO2Euc2V0SW50NjRMaXN0KGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1OLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3ZjtXaih0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gV2ooYSxjKXt2YXIgZD1hLmdldEJ5dGVzTGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDEsZCxOaik7ZD1hLmdldEZsb2F0TGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDIsZCxRaik7ZD1hLmdldEludDY0TGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDMsZCxUail9Ti5nZXRCeXRlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxuaSwxKX07Ti5zZXRCeXRlc0xpc3Q9ZnVuY3Rpb24oYSl7aWkodGhpcywxLEdqWzBdLGEpfTtOLmNsZWFyQnl0ZXNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRCeXRlc0xpc3Qodm9pZCAwKX07Ti5oYXNCeXRlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcywxKX07Ti5nZXRGbG9hdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxCaiwyKX07Ti5zZXRGbG9hdExpc3Q9ZnVuY3Rpb24oYSl7aWkodGhpcywyLEdqWzBdLGEpfTtOLmNsZWFyRmxvYXRMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRGbG9hdExpc3Qodm9pZCAwKX07Ck4uaGFzRmxvYXRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsMil9O04uZ2V0SW50NjRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGVpKHRoaXMsRGosMyl9O04uc2V0SW50NjRMaXN0PWZ1bmN0aW9uKGEpe2lpKHRoaXMsMyxHalswXSxhKX07Ti5jbGVhckludDY0TGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0SW50NjRMaXN0KHZvaWQgMCl9O04uaGFzSW50NjRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsMyl9O0hqLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gWGooYSx0aGlzKX07ZnVuY3Rpb24gWGooYSxjKXt2YXIgZCxmPXtmZWF0dXJlTWFwOihkPWMuZ2V0RmVhdHVyZU1hcCgpKT9kLnRvT2JqZWN0KGEsVWopOltdfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gWWooYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWEuZ2V0RmVhdHVyZU1hcCgpO2MucmVhZE1lc3NhZ2UoZCxmdW5jdGlvbihmLGcpe0FnKGYsZyxWail9KTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9SGoucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3Zjtaaih0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBaaihhLGMpeyhhPWEuZ2V0RmVhdHVyZU1hcCghMCkpJiYwPGEuZ2V0TGVuZ3RoKCkmJmEuc2VyaWFsaXplQmluYXJ5KDEsYyx3Zi5wcm90b3R5cGUud3JpdGVTdHJpbmcsd2YucHJvdG90eXBlLndyaXRlTWVzc2FnZSxXail9SGoucHJvdG90eXBlLmdldEZlYXR1cmVNYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIFdoKHRoaXMsYSxGail9OwpIai5wcm90b3R5cGUuY2xlYXJGZWF0dXJlTWFwPWZ1bmN0aW9uKCl7dGhpcy5nZXRGZWF0dXJlTWFwKCkuY2xlYXIoKX07dmFyIEpqPVsxXTtOPUlqLnByb3RvdHlwZTtOLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBhayhhLHRoaXMpfTtmdW5jdGlvbiBhayhhLGMpe3ZhciBkPXtmZWF0dXJlTGlzdDpNZyhjLmdldEZlYXR1cmVMaXN0KCksVWosYSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfWZ1bmN0aW9uIGJrKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgRmo7Yy5yZWFkTWVzc2FnZShkLFZqKTthLmFkZEZlYXR1cmUoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU4uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHdmO2NrKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBjayhhLGMpe2E9YS5nZXRGZWF0dXJlTGlzdCgpOzA8YS5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxhLFdqKX1OLmdldEZlYXR1cmVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMsRmosMSl9O04uc2V0RmVhdHVyZUxpc3Q9ZnVuY3Rpb24oYSl7amkodGhpcywxLGEpfTtOLmFkZEZlYXR1cmU9ZnVuY3Rpb24oYSxjKXtyZXR1cm4ga2kodGhpcywxLGEsRmosYyl9O04uY2xlYXJGZWF0dXJlTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZUxpc3QoW10pfTtLai5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGRrKGEsdGhpcyl9O2Z1bmN0aW9uIGRrKGEsYyl7dmFyIGQsZj17ZmVhdHVyZUxpc3RNYXA6KGQ9Yy5nZXRGZWF0dXJlTGlzdE1hcCgpKT9kLnRvT2JqZWN0KGEsYWspOltdfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gZWsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWEuZ2V0RmVhdHVyZUxpc3RNYXAoKTtjLnJlYWRNZXNzYWdlKGQsZnVuY3Rpb24oZixnKXtBZyhmLGcsYmspfSk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfUtqLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7ZmsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gZmsoYSxjKXsoYT1hLmdldEZlYXR1cmVMaXN0TWFwKCEwKSkmJjA8YS5nZXRMZW5ndGgoKSYmYS5zZXJpYWxpemVCaW5hcnkoMSxjLHdmLnByb3RvdHlwZS53cml0ZVN0cmluZyx3Zi5wcm90b3R5cGUud3JpdGVNZXNzYWdlLGNrKX1Lai5wcm90b3R5cGUuZ2V0RmVhdHVyZUxpc3RNYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIFdoKHRoaXMsYSxJail9OwpLai5wcm90b3R5cGUuY2xlYXJGZWF0dXJlTGlzdE1hcD1mdW5jdGlvbigpe3RoaXMuZ2V0RmVhdHVyZUxpc3RNYXAoKS5jbGVhcigpfTtmdW5jdGlvbiBnayhhKXtGZyh0aGlzLGEsbnVsbCxudWxsKX1UYihnayxCZyk7ZnVuY3Rpb24gaGsoYSl7RmcodGhpcyxhLG51bGwsbnVsbCl9VGIoaGssQmcpO049Z2sucHJvdG90eXBlO04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGlrKGEsdGhpcyl9O2Z1bmN0aW9uIGlrKGEsYyl7dmFyIGQsZj17ZmVhdHVyZXM6KGQ9Yy5nZXRGZWF0dXJlcygpKSYmWGooYSxkKX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9ZnVuY3Rpb24gamsoYSl7YT1uZXcgdWYoYSk7dmFyIGM9bmV3IGdrO3JldHVybiBrayhjLGEpfQpmdW5jdGlvbiBrayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IEhqO2MucmVhZE1lc3NhZ2UoZCxZaik7YS5zZXRGZWF0dXJlcyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9Ti5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7d2wodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gd2woYSxjKXthPWEuZ2V0RmVhdHVyZXMoKTtudWxsIT1hJiZjLndyaXRlTWVzc2FnZSgxLGEsWmopfU4uZ2V0RmVhdHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxIaiwxKX07Ti5zZXRGZWF0dXJlcz1mdW5jdGlvbihhKXtoaSh0aGlzLDEsYSl9O04uY2xlYXJGZWF0dXJlcz1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZXModm9pZCAwKX07Ck4uaGFzRmVhdHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcywxKX07Tj1oay5wcm90b3R5cGU7Ti50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4geGwoYSx0aGlzKX07ZnVuY3Rpb24geGwoYSxjKXt2YXIgZCxmPXtjb250ZXh0OihkPWMuZ2V0Q29udGV4dCgpKSYmWGooYSxkKSxmZWF0dXJlTGlzdHM6KGQ9Yy5nZXRGZWF0dXJlTGlzdHMoKSkmJmRrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfWZ1bmN0aW9uIHlsKGEpe2E9bmV3IHVmKGEpO3ZhciBjPW5ldyBoaztyZXR1cm4gemwoYyxhKX0KZnVuY3Rpb24gemwoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBIajtjLnJlYWRNZXNzYWdlKGQsWWopO2Euc2V0Q29udGV4dChkKTticmVhaztjYXNlIDI6ZD1uZXcgS2o7Yy5yZWFkTWVzc2FnZShkLGVrKTthLnNldEZlYXR1cmVMaXN0cyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9Ti5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7QWwodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gQWwoYSxjKXt2YXIgZD1hLmdldENvbnRleHQoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgxLGQsWmopO2Q9YS5nZXRGZWF0dXJlTGlzdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgyLGQsZmspfU4uZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLEhqLDEpfTsKTi5zZXRDb250ZXh0PWZ1bmN0aW9uKGEpe2hpKHRoaXMsMSxhKX07Ti5jbGVhckNvbnRleHQ9ZnVuY3Rpb24oKXt0aGlzLnNldENvbnRleHQodm9pZCAwKX07Ti5oYXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsMSl9O04uZ2V0RmVhdHVyZUxpc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIGVpKHRoaXMsS2osMil9O04uc2V0RmVhdHVyZUxpc3RzPWZ1bmN0aW9uKGEpe2hpKHRoaXMsMixhKX07Ti5jbGVhckZlYXR1cmVMaXN0cz1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZUxpc3RzKHZvaWQgMCl9O04uaGFzRmVhdHVyZUxpc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsMil9OwovLyMgc291cmNlVVJMPWJ1aWxkOi9iYXplbC1vdXQvaG9zdC9iaW4vZXh0ZXJuYWwvYWlfZ29vZ2xlX3BhaXJfZmFjZXRzL2ZhY2V0c19vdmVydmlldy9wcm90by9mZWF0dXJlX3N0YXRpc3RpY3NfcHJvdG8uanMKZnVuY3Rpb24gQmwoYSl7RmcodGhpcyxhLENsLG51bGwpfVRiKEJsLEJnKTtmdW5jdGlvbiBEbChhKXtGZyh0aGlzLGEsRWwsbnVsbCl9VGIoRGwsQmcpO2Z1bmN0aW9uIEZsKGEpe0ZnKHRoaXMsYSxHbCxudWxsKX1UYihGbCxCZyk7ZnVuY3Rpb24gSGwoYSl7RmcodGhpcyxhLElsLEpsKX1UYihIbCxCZyk7ZnVuY3Rpb24gS2woYSl7RmcodGhpcyxhLG51bGwsbnVsbCl9VGIoS2wsQmcpO2Z1bmN0aW9uIExsKGEpe0ZnKHRoaXMsYSxudWxsLE1sKX1UYihMbCxCZyk7ZnVuY3Rpb24gTmwoYSl7RmcodGhpcyxhLE9sLG51bGwpfVRiKE5sLEJnKTtmdW5jdGlvbiBQbChhKXtGZyh0aGlzLGEsUWwsbnVsbCl9VGIoUGwsQmcpO2Z1bmN0aW9uIFJsKGEpe0ZnKHRoaXMsYSxudWxsLG51bGwpfVRiKFJsLEJnKTtmdW5jdGlvbiBTbChhKXtGZyh0aGlzLGEsVGwsbnVsbCl9VGIoU2wsQmcpO2Z1bmN0aW9uIFVsKGEpe0ZnKHRoaXMsYSxWbCxudWxsKX1UYihVbCxCZyk7CmZ1bmN0aW9uIFdsKGEpe0ZnKHRoaXMsYSxudWxsLG51bGwpfVRiKFdsLEJnKTtmdW5jdGlvbiBYbChhKXtGZyh0aGlzLGEsbnVsbCxudWxsKX1UYihYbCxCZyk7ZnVuY3Rpb24gWWwoYSl7RmcodGhpcyxhLG51bGwsbnVsbCl9VGIoWWwsQmcpO2Z1bmN0aW9uIFpsKGEpe0ZnKHRoaXMsYSwkbCxudWxsKX1UYihabCxCZyk7ZnVuY3Rpb24gYW0oYSl7RmcodGhpcyxhLG51bGwsbnVsbCl9VGIoYW0sQmcpO2Z1bmN0aW9uIGJtKGEpe0ZnKHRoaXMsYSxjbSxudWxsKX1UYihibSxCZyk7ZnVuY3Rpb24gZG0oYSl7RmcodGhpcyxhLG51bGwsbnVsbCl9VGIoZG0sQmcpO3ZhciBDbD1bMV07Tj1CbC5wcm90b3R5cGU7Ti50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gZW0oYSx0aGlzKX07ZnVuY3Rpb24gZW0oYSxjKXt2YXIgZD17ZGF0YXNldHNMaXN0Ok1nKGMuZ2V0RGF0YXNldHNMaXN0KCksZm0sYSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBnbShhKXthPW5ldyB1ZihhKTt2YXIgYz1uZXcgQmw7cmV0dXJuIGhtKGMsYSl9ZnVuY3Rpb24gaG0oYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBGbDtjLnJlYWRNZXNzYWdlKGQsaW0pO2EuYWRkRGF0YXNldHMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU4uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHdmO2ptKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIGptKGEsYyl7YT1hLmdldERhdGFzZXRzTGlzdCgpOzA8YS5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxhLGttKX1OLmdldERhdGFzZXRzTGlzdD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzLEZsLDEpfTtOLnNldERhdGFzZXRzTGlzdD1mdW5jdGlvbigpe2ppKHRoaXMsMSxbXSl9OwpOLmFkZERhdGFzZXRzPWZ1bmN0aW9uKGEpe2tpKHRoaXMsMSxhLEZsLHZvaWQgMCl9O04uY2xlYXJEYXRhc2V0c0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldERhdGFzZXRzTGlzdCgpfTt2YXIgRWw9WzFdO049RGwucHJvdG90eXBlO04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGxtKGEsdGhpcyl9O2Z1bmN0aW9uIGxtKGEsYyl7dmFyIGQsZj17c3RlcExpc3Q6bnVsbD09KGQ9T2coYywxKSk/dm9pZCAwOmR9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfWZ1bmN0aW9uIG1tKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWRTdHJpbmcoKTthLmFkZFN0ZXAoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU4uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHdmO25tKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBubShhLGMpe2E9YS5nZXRTdGVwTGlzdCgpOzA8YS5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZFN0cmluZyhhKX1OLmdldFN0ZXBMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIE9nKHRoaXMsMSl9O04uc2V0U3RlcExpc3Q9ZnVuY3Rpb24oKXtYaCh0aGlzLDEsW10pfTtOLmFkZFN0ZXA9ZnVuY3Rpb24oYSl7Y2kodGhpcyxhLHZvaWQgMCl9O04uY2xlYXJTdGVwTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0U3RlcExpc3QoKX07dmFyIEdsPVszXTtOPUZsLnByb3RvdHlwZTtOLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBmbShhLHRoaXMpfTtmdW5jdGlvbiBmbShhLGMpe3ZhciBkPXtuYW1lOldnKGMsMSwiIiksbnVtRXhhbXBsZXM6V2coYywyLDApLHdlaWdodGVkTnVtRXhhbXBsZXM6WGcoYyw0KSxmZWF0dXJlc0xpc3Q6TWcoYy5nZXRGZWF0dXJlc0xpc3QoKSxvbSxhKX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9CmZ1bmN0aW9uIGltKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWRTdHJpbmcoKTthLnNldE5hbWUoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1FeGFtcGxlcyhkKTticmVhaztjYXNlIDQ6ZD1jLnJlYWREb3VibGUoKTthLnNldFdlaWdodGVkTnVtRXhhbXBsZXMoZCk7YnJlYWs7Y2FzZSAzOmQ9bmV3IEhsO2MucmVhZE1lc3NhZ2UoZCxwbSk7YS5hZGRGZWF0dXJlcyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9Ti5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7a20odGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIGttKGEsYyl7dmFyIGQ9YS5nZXROYW1lKCk7MDxkLmxlbmd0aCYmYy53cml0ZVN0cmluZygxLGQpO2Q9YS5nZXROdW1FeGFtcGxlcygpOzAhPT1kJiZjLndyaXRlVWludDY0KDIsZCk7ZD1hLmdldFdlaWdodGVkTnVtRXhhbXBsZXMoKTswIT09ZCYmYy53cml0ZURvdWJsZSg0LGQpO2Q9YS5nZXRGZWF0dXJlc0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsZCxxbSl9Ti5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsMSwiIil9O04uc2V0TmFtZT1mdW5jdGlvbihhKXthaSh0aGlzLDEsYSl9O04uZ2V0TnVtRXhhbXBsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcywyLDApfTtOLnNldE51bUV4YW1wbGVzPWZ1bmN0aW9uKGEpe1loKHRoaXMsMixhKX07Ti5nZXRXZWlnaHRlZE51bUV4YW1wbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFhnKHRoaXMsNCl9OwpOLnNldFdlaWdodGVkTnVtRXhhbXBsZXM9ZnVuY3Rpb24oYSl7JGgodGhpcyw0LGEpfTtOLmdldEZlYXR1cmVzTGlzdD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzLEhsLDMpfTtOLnNldEZlYXR1cmVzTGlzdD1mdW5jdGlvbigpe2ppKHRoaXMsMyxbXSl9O04uYWRkRmVhdHVyZXM9ZnVuY3Rpb24oYSl7a2kodGhpcywzLGEsSGwsdm9pZCAwKX07Ti5jbGVhckZlYXR1cmVzTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZXNMaXN0KCl9O3ZhciBJbD1bNl0sSmw9W1sxLDhdLFszLDQsNSw3XV07Tj1IbC5wcm90b3R5cGU7Ti5nZXRGaWVsZElkQ2FzZT1mdW5jdGlvbigpe3JldHVybiBKZyh0aGlzLEpsWzBdKX07Ti5nZXRTdGF0c0Nhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gSmcodGhpcyxKbFsxXSl9O04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIG9tKGEsdGhpcyl9OwpmdW5jdGlvbiBvbShhLGMpe3ZhciBkLGY9e25hbWU6V2coYywxLCIiKSxwYXRoOihkPWMuZ2V0UGF0aCgpKSYmbG0oYSxkKSx0eXBlOldnKGMsMiwwKSxudW1TdGF0czooZD1jLmdldE51bVN0YXRzKCkpJiZybShhLGQpLHN0cmluZ1N0YXRzOihkPWMuZ2V0U3RyaW5nU3RhdHMoKSkmJnNtKGEsZCksYnl0ZXNTdGF0czooZD1jLmdldEJ5dGVzU3RhdHMoKSkmJnRtKGEsZCksc3RydWN0U3RhdHM6KGQ9Yy5nZXRTdHJ1Y3RTdGF0cygpKSYmdW0oYSxkKSxjdXN0b21TdGF0c0xpc3Q6TWcoYy5nZXRDdXN0b21TdGF0c0xpc3QoKSx2bSxhKX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIHBtKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWRTdHJpbmcoKTthLnNldE5hbWUoZCk7YnJlYWs7Y2FzZSA4OmQ9bmV3IERsO2MucmVhZE1lc3NhZ2UoZCxtbSk7YS5zZXRQYXRoKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZEVudW0oKTthLnNldFR5cGUoZCk7YnJlYWs7Y2FzZSAzOmQ9bmV3IE5sO2MucmVhZE1lc3NhZ2UoZCx3bSk7YS5zZXROdW1TdGF0cyhkKTticmVhaztjYXNlIDQ6ZD1uZXcgUGw7Yy5yZWFkTWVzc2FnZShkLHhtKTthLnNldFN0cmluZ1N0YXRzKGQpO2JyZWFrO2Nhc2UgNTpkPW5ldyBXbDtjLnJlYWRNZXNzYWdlKGQseW0pO2Euc2V0Qnl0ZXNTdGF0cyhkKTticmVhaztjYXNlIDc6ZD1uZXcgWGw7Yy5yZWFkTWVzc2FnZShkLHptKTthLnNldFN0cnVjdFN0YXRzKGQpO2JyZWFrO2Nhc2UgNjpkPW5ldyBMbDtjLnJlYWRNZXNzYWdlKGQsQW0pOwphLmFkZEN1c3RvbVN0YXRzKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1OLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3ZjtxbSh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gcW0oYSxjKXt2YXIgZD1OZyhhLDEpO251bGwhPWQmJmMud3JpdGVTdHJpbmcoMSxkKTtkPWEuZ2V0UGF0aCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDgsZCxubSk7ZD1hLmdldFR5cGUoKTswIT09ZCYmYy53cml0ZUVudW0oMixkKTtkPWEuZ2V0TnVtU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgzLGQsQm0pO2Q9YS5nZXRTdHJpbmdTdGF0cygpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDQsZCxDbSk7ZD1hLmdldEJ5dGVzU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg1LGQsRG0pO2Q9YS5nZXRTdHJ1Y3RTdGF0cygpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDcsZCxFbSk7ZD1hLmdldEN1c3RvbVN0YXRzTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNixkLEZtKX1OLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcywxLCIiKX07Ti5zZXROYW1lPWZ1bmN0aW9uKGEpe2RpKHRoaXMsMSxKbFswXSxhKX07Ck4uY2xlYXJOYW1lPWZ1bmN0aW9uKCl7ZGkodGhpcywxLEpsWzBdLHZvaWQgMCl9O04uaGFzTmFtZT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1OZyh0aGlzLDEpfTtOLmdldFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxEbCw4KX07Ti5zZXRQYXRoPWZ1bmN0aW9uKGEpe2lpKHRoaXMsOCxKbFswXSxhKX07Ti5jbGVhclBhdGg9ZnVuY3Rpb24oKXt0aGlzLnNldFBhdGgodm9pZCAwKX07Ti5oYXNQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsOCl9O04uZ2V0VHlwZT1mdW5jdGlvbigpe3JldHVybiBXZyh0aGlzLDIsMCl9O04uc2V0VHlwZT1mdW5jdGlvbihhKXtiaSh0aGlzLDIsYSl9O04uZ2V0TnVtU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxObCwzKX07Ti5zZXROdW1TdGF0cz1mdW5jdGlvbihhKXtpaSh0aGlzLDMsSmxbMV0sYSl9O04uY2xlYXJOdW1TdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0TnVtU3RhdHModm9pZCAwKX07Ck4uaGFzTnVtU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcywzKX07Ti5nZXRTdHJpbmdTdGF0cz1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLFBsLDQpfTtOLnNldFN0cmluZ1N0YXRzPWZ1bmN0aW9uKGEpe2lpKHRoaXMsNCxKbFsxXSxhKX07Ti5jbGVhclN0cmluZ1N0YXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXRTdHJpbmdTdGF0cyh2b2lkIDApfTtOLmhhc1N0cmluZ1N0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsNCl9O04uZ2V0Qnl0ZXNTdGF0cz1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLFdsLDUpfTtOLnNldEJ5dGVzU3RhdHM9ZnVuY3Rpb24oYSl7aWkodGhpcyw1LEpsWzFdLGEpfTtOLmNsZWFyQnl0ZXNTdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0Qnl0ZXNTdGF0cyh2b2lkIDApfTtOLmhhc0J5dGVzU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcyw1KX07Ck4uZ2V0U3RydWN0U3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxYbCw3KX07Ti5zZXRTdHJ1Y3RTdGF0cz1mdW5jdGlvbihhKXtpaSh0aGlzLDcsSmxbMV0sYSl9O04uY2xlYXJTdHJ1Y3RTdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0U3RydWN0U3RhdHModm9pZCAwKX07Ti5oYXNTdHJ1Y3RTdGF0cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1OZyh0aGlzLDcpfTtOLmdldEN1c3RvbVN0YXRzTGlzdD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzLExsLDYpfTtOLnNldEN1c3RvbVN0YXRzTGlzdD1mdW5jdGlvbigpe2ppKHRoaXMsNixbXSl9O04uYWRkQ3VzdG9tU3RhdHM9ZnVuY3Rpb24oYSl7a2kodGhpcyw2LGEsTGwsdm9pZCAwKX07Ti5jbGVhckN1c3RvbVN0YXRzTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0Q3VzdG9tU3RhdHNMaXN0KCl9O049S2wucHJvdG90eXBlO04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIEdtKGEsdGhpcyl9OwpmdW5jdGlvbiBHbShhLGMpe3ZhciBkPXtudW1Ob25NaXNzaW5nOlhnKGMsMSksbnVtTWlzc2luZzpYZyhjLDIpLGF2Z051bVZhbHVlczpYZyhjLDMpLHRvdE51bVZhbHVlczpYZyhjLDQpfTthJiYoZC4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZH1mdW5jdGlvbiBIbShhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkRG91YmxlKCk7YS5zZXROdW1Ob25NaXNzaW5nKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZERvdWJsZSgpO2Euc2V0TnVtTWlzc2luZyhkKTticmVhaztjYXNlIDM6ZD1jLnJlYWREb3VibGUoKTthLnNldEF2Z051bVZhbHVlcyhkKTticmVhaztjYXNlIDQ6ZD1jLnJlYWREb3VibGUoKTthLnNldFRvdE51bVZhbHVlcyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9Ck4uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHdmO0ltKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIEltKGEsYyl7dmFyIGQ9YS5nZXROdW1Ob25NaXNzaW5nKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMSxkKTtkPWEuZ2V0TnVtTWlzc2luZygpOzAhPT1kJiZjLndyaXRlRG91YmxlKDIsZCk7ZD1hLmdldEF2Z051bVZhbHVlcygpOzAhPT1kJiZjLndyaXRlRG91YmxlKDMsZCk7ZD1hLmdldFRvdE51bVZhbHVlcygpOzAhPT1kJiZjLndyaXRlRG91YmxlKDQsZCl9Ti5nZXROdW1Ob25NaXNzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFhnKHRoaXMsMSl9O04uc2V0TnVtTm9uTWlzc2luZz1mdW5jdGlvbihhKXskaCh0aGlzLDEsYSl9O04uZ2V0TnVtTWlzc2luZz1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDIpfTtOLnNldE51bU1pc3Npbmc9ZnVuY3Rpb24oYSl7JGgodGhpcywyLGEpfTsKTi5nZXRBdmdOdW1WYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gWGcodGhpcywzKX07Ti5zZXRBdmdOdW1WYWx1ZXM9ZnVuY3Rpb24oYSl7JGgodGhpcywzLGEpfTtOLmdldFRvdE51bVZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDQpfTtOLnNldFRvdE51bVZhbHVlcz1mdW5jdGlvbihhKXskaCh0aGlzLDQsYSl9O3ZhciBNbD1bWzIsMyw0LDVdXTtOPUxsLnByb3RvdHlwZTtOLmdldFZhbENhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gSmcodGhpcyxNbFswXSl9O04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHZtKGEsdGhpcyl9OwpmdW5jdGlvbiB2bShhLGMpe3ZhciBkLGY9e25hbWU6V2coYywxLCIiKSxudW06WGcoYywyKSxzdHI6V2coYywzLCIiKSxoaXN0b2dyYW06KGQ9Yy5nZXRIaXN0b2dyYW0oKSkmJkptKGEsZCkscmFua0hpc3RvZ3JhbTooZD1jLmdldFJhbmtIaXN0b2dyYW0oKSkmJkttKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBBbShhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZERvdWJsZSgpO2Euc2V0TnVtKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZFN0cmluZygpO2Euc2V0U3RyKGQpO2JyZWFrO2Nhc2UgNDpkPW5ldyBabDtjLnJlYWRNZXNzYWdlKGQsTG0pO2Euc2V0SGlzdG9ncmFtKGQpO2JyZWFrO2Nhc2UgNTpkPW5ldyBibTtjLnJlYWRNZXNzYWdlKGQsTW0pO2Euc2V0UmFua0hpc3RvZ3JhbShkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9Ti5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7Rm0odGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIEZtKGEsYyl7dmFyIGQ9YS5nZXROYW1lKCk7MDxkLmxlbmd0aCYmYy53cml0ZVN0cmluZygxLGQpO2Q9TmcoYSwyKTtudWxsIT1kJiZjLndyaXRlRG91YmxlKDIsZCk7ZD1OZyhhLDMpO251bGwhPWQmJmMud3JpdGVTdHJpbmcoMyxkKTtkPWEuZ2V0SGlzdG9ncmFtKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoNCxkLE5tKTtkPWEuZ2V0UmFua0hpc3RvZ3JhbSgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDUsZCxPbSl9Ti5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsMSwiIil9O04uc2V0TmFtZT1mdW5jdGlvbihhKXthaSh0aGlzLDEsYSl9O04uZ2V0TnVtPWZ1bmN0aW9uKCl7cmV0dXJuIFhnKHRoaXMsMil9O04uc2V0TnVtPWZ1bmN0aW9uKGEpe2RpKHRoaXMsMixNbFswXSxhKX07Ti5jbGVhck51bT1mdW5jdGlvbigpe2RpKHRoaXMsMixNbFswXSx2b2lkIDApfTtOLmhhc051bT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1OZyh0aGlzLDIpfTsKTi5nZXRTdHI9ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcywzLCIiKX07Ti5zZXRTdHI9ZnVuY3Rpb24oYSl7ZGkodGhpcywzLE1sWzBdLGEpfTtOLmNsZWFyU3RyPWZ1bmN0aW9uKCl7ZGkodGhpcywzLE1sWzBdLHZvaWQgMCl9O04uaGFzU3RyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsMyl9O04uZ2V0SGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIGVpKHRoaXMsWmwsNCl9O04uc2V0SGlzdG9ncmFtPWZ1bmN0aW9uKGEpe2lpKHRoaXMsNCxNbFswXSxhKX07Ti5jbGVhckhpc3RvZ3JhbT1mdW5jdGlvbigpe3RoaXMuc2V0SGlzdG9ncmFtKHZvaWQgMCl9O04uaGFzSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsNCl9O04uZ2V0UmFua0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLGJtLDUpfTtOLnNldFJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oYSl7aWkodGhpcyw1LE1sWzBdLGEpfTtOLmNsZWFyUmFua0hpc3RvZ3JhbT1mdW5jdGlvbigpe3RoaXMuc2V0UmFua0hpc3RvZ3JhbSh2b2lkIDApfTsKTi5oYXNSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsNSl9O3ZhciBPbD1bOF07Tj1ObC5wcm90b3R5cGU7Ti50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gcm0oYSx0aGlzKX07ZnVuY3Rpb24gcm0oYSxjKXt2YXIgZCxmPXtjb21tb25TdGF0czooZD1jLmdldENvbW1vblN0YXRzKCkpJiZQbShhLGQpLG1lYW46WGcoYywyKSxzdGREZXY6WGcoYywzKSxudW1aZXJvczpXZyhjLDQsMCksbWluOlhnKGMsNSksbWVkaWFuOlhnKGMsNiksbWF4OlhnKGMsNyksaGlzdG9ncmFtc0xpc3Q6TWcoYy5nZXRIaXN0b2dyYW1zTGlzdCgpLEptLGEpLHdlaWdodGVkTnVtZXJpY1N0YXRzOihkPWMuZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoKSkmJlFtKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiB3bShhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IFlsO2MucmVhZE1lc3NhZ2UoZCxSbSk7YS5zZXRDb21tb25TdGF0cyhkKTticmVhaztjYXNlIDI6ZD1jLnJlYWREb3VibGUoKTthLnNldE1lYW4oZCk7YnJlYWs7Y2FzZSAzOmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRTdGREZXYoZCk7YnJlYWs7Y2FzZSA0OmQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1aZXJvcyhkKTticmVhaztjYXNlIDU6ZD1jLnJlYWREb3VibGUoKTthLnNldE1pbihkKTticmVhaztjYXNlIDY6ZD1jLnJlYWREb3VibGUoKTthLnNldE1lZGlhbihkKTticmVhaztjYXNlIDc6ZD1jLnJlYWREb3VibGUoKTthLnNldE1heChkKTticmVhaztjYXNlIDg6ZD1uZXcgWmw7Yy5yZWFkTWVzc2FnZShkLExtKTthLmFkZEhpc3RvZ3JhbXMoZCk7YnJlYWs7Y2FzZSA5OmQ9bmV3IFNsO2MucmVhZE1lc3NhZ2UoZCwKU20pO2Euc2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU4uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHdmO0JtKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBCbShhLGMpe3ZhciBkPWEuZ2V0Q29tbW9uU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgxLGQsVG0pO2Q9YS5nZXRNZWFuKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMixkKTtkPWEuZ2V0U3RkRGV2KCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMyxkKTtkPWEuZ2V0TnVtWmVyb3MoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCg0LGQpO2Q9YS5nZXRNaW4oKTswIT09ZCYmYy53cml0ZURvdWJsZSg1LGQpO2Q9YS5nZXRNZWRpYW4oKTswIT09ZCYmYy53cml0ZURvdWJsZSg2LGQpO2Q9YS5nZXRNYXgoKTswIT09ZCYmYy53cml0ZURvdWJsZSg3LGQpO2Q9YS5nZXRIaXN0b2dyYW1zTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoOCxkLE5tKTtkPWEuZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg5LGQsVW0pfU4uZ2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxZbCwxKX07Ck4uc2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oYSl7aGkodGhpcywxLGEpfTtOLmNsZWFyQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldENvbW1vblN0YXRzKHZvaWQgMCl9O04uaGFzQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcywxKX07Ti5nZXRNZWFuPWZ1bmN0aW9uKCl7cmV0dXJuIFhnKHRoaXMsMil9O04uc2V0TWVhbj1mdW5jdGlvbihhKXskaCh0aGlzLDIsYSl9O04uZ2V0U3RkRGV2PWZ1bmN0aW9uKCl7cmV0dXJuIFhnKHRoaXMsMyl9O04uc2V0U3RkRGV2PWZ1bmN0aW9uKGEpeyRoKHRoaXMsMyxhKX07Ti5nZXROdW1aZXJvcz1mdW5jdGlvbigpe3JldHVybiBXZyh0aGlzLDQsMCl9O04uc2V0TnVtWmVyb3M9ZnVuY3Rpb24oYSl7WWgodGhpcyw0LGEpfTtOLmdldE1pbj1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDUpfTtOLnNldE1pbj1mdW5jdGlvbihhKXskaCh0aGlzLDUsYSl9OwpOLmdldE1lZGlhbj1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDYpfTtOLnNldE1lZGlhbj1mdW5jdGlvbihhKXskaCh0aGlzLDYsYSl9O04uZ2V0TWF4PWZ1bmN0aW9uKCl7cmV0dXJuIFhnKHRoaXMsNyl9O04uc2V0TWF4PWZ1bmN0aW9uKGEpeyRoKHRoaXMsNyxhKX07Ti5nZXRIaXN0b2dyYW1zTGlzdD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzLFpsLDgpfTtOLnNldEhpc3RvZ3JhbXNMaXN0PWZ1bmN0aW9uKGEpe2ppKHRoaXMsOCxhKX07Ti5hZGRIaXN0b2dyYW1zPWZ1bmN0aW9uKGEpe3JldHVybiBraSh0aGlzLDgsYSxabCx2b2lkIDApfTtOLmNsZWFySGlzdG9ncmFtc0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEhpc3RvZ3JhbXNMaXN0KFtdKX07Ti5nZXRXZWlnaHRlZE51bWVyaWNTdGF0cz1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLFNsLDkpfTtOLnNldFdlaWdodGVkTnVtZXJpY1N0YXRzPWZ1bmN0aW9uKGEpe2hpKHRoaXMsOSxhKX07Ck4uY2xlYXJXZWlnaHRlZE51bWVyaWNTdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0V2VpZ2h0ZWROdW1lcmljU3RhdHModm9pZCAwKX07Ti5oYXNXZWlnaHRlZE51bWVyaWNTdGF0cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1OZyh0aGlzLDkpfTt2YXIgUWw9WzNdO1BsLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gc20oYSx0aGlzKX07ZnVuY3Rpb24gc20oYSxjKXt2YXIgZCxmPXtjb21tb25TdGF0czooZD1jLmdldENvbW1vblN0YXRzKCkpJiZQbShhLGQpLHVuaXF1ZTpXZyhjLDIsMCksdG9wVmFsdWVzTGlzdDpNZyhjLmdldFRvcFZhbHVlc0xpc3QoKSxWbSxhKSxhdmdMZW5ndGg6WGcoYyw0KSxyYW5rSGlzdG9ncmFtOihkPWMuZ2V0UmFua0hpc3RvZ3JhbSgpKSYmS20oYSxkKSx3ZWlnaHRlZFN0cmluZ1N0YXRzOihkPWMuZ2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cygpKSYmV20oYSxkKX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIHhtKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgWWw7Yy5yZWFkTWVzc2FnZShkLFJtKTthLnNldENvbW1vblN0YXRzKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0VW5pcXVlKGQpO2JyZWFrO2Nhc2UgMzpkPW5ldyBSbDtjLnJlYWRNZXNzYWdlKGQsWG0pO2EuYWRkVG9wVmFsdWVzKGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZEZsb2F0KCk7YS5zZXRBdmdMZW5ndGgoZCk7YnJlYWs7Y2FzZSA1OmQ9bmV3IGJtO2MucmVhZE1lc3NhZ2UoZCxNbSk7YS5zZXRSYW5rSGlzdG9ncmFtKGQpO2JyZWFrO2Nhc2UgNjpkPW5ldyBVbDtjLnJlYWRNZXNzYWdlKGQsWW0pO2Euc2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9ClBsLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7Q20odGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gQ20oYSxjKXt2YXIgZD1hLmdldENvbW1vblN0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoMSxkLFRtKTtkPWEuZ2V0VW5pcXVlKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMixkKTtkPWEuZ2V0VG9wVmFsdWVzTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMyxkLFptKTtkPWEuZ2V0QXZnTGVuZ3RoKCk7MCE9PWQmJmMud3JpdGVGbG9hdCg0LGQpO2Q9YS5nZXRSYW5rSGlzdG9ncmFtKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoNSxkLE9tKTtkPWEuZ2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cygpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDYsZCwkbSl9Tj1SbC5wcm90b3R5cGU7Ti50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gVm0oYSx0aGlzKX07CmZ1bmN0aW9uIFZtKGEsYyl7dmFyIGQ9e2RlcHJlY2F0ZWRGcmVxOldnKGMsMSwwKSx2YWx1ZTpXZyhjLDIsIiIpLGZyZXF1ZW5jeTpYZyhjLDMpfTthJiYoZC4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZH1mdW5jdGlvbiBYbShhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkVWludDY0KCk7YS5zZXREZXByZWNhdGVkRnJlcShkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRTdHJpbmcoKTthLnNldFZhbHVlKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZERvdWJsZSgpO2Euc2V0RnJlcXVlbmN5KGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1OLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3ZjtabSh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gWm0oYSxjKXt2YXIgZD1hLmdldERlcHJlY2F0ZWRGcmVxKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMSxkKTtkPWEuZ2V0VmFsdWUoKTswPGQubGVuZ3RoJiZjLndyaXRlU3RyaW5nKDIsZCk7ZD1hLmdldEZyZXF1ZW5jeSgpOzAhPT1kJiZjLndyaXRlRG91YmxlKDMsZCl9Ti5nZXREZXByZWNhdGVkRnJlcT1mdW5jdGlvbigpe3JldHVybiBXZyh0aGlzLDEsMCl9O04uc2V0RGVwcmVjYXRlZEZyZXE9ZnVuY3Rpb24oYSl7WWgodGhpcywxLGEpfTtOLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsMiwiIil9O04uc2V0VmFsdWU9ZnVuY3Rpb24oYSl7YWkodGhpcywyLGEpfTtOLmdldEZyZXF1ZW5jeT1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDMpfTtOLnNldEZyZXF1ZW5jeT1mdW5jdGlvbihhKXskaCh0aGlzLDMsYSl9O049UGwucHJvdG90eXBlO04uZ2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxZbCwxKX07Ck4uc2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oYSl7aGkodGhpcywxLGEpfTtOLmNsZWFyQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldENvbW1vblN0YXRzKHZvaWQgMCl9O04uaGFzQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcywxKX07Ti5nZXRVbmlxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcywyLDApfTtOLnNldFVuaXF1ZT1mdW5jdGlvbihhKXtZaCh0aGlzLDIsYSl9O04uZ2V0VG9wVmFsdWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiBmaSh0aGlzLFJsLDMpfTtOLnNldFRvcFZhbHVlc0xpc3Q9ZnVuY3Rpb24oYSl7amkodGhpcywzLGEpfTtOLmFkZFRvcFZhbHVlcz1mdW5jdGlvbihhKXtyZXR1cm4ga2kodGhpcywzLGEsUmwsdm9pZCAwKX07Ti5jbGVhclRvcFZhbHVlc0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldFRvcFZhbHVlc0xpc3QoW10pfTtOLmdldEF2Z0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDQpfTsKTi5zZXRBdmdMZW5ndGg9ZnVuY3Rpb24oYSl7JGgodGhpcyw0LGEpfTtOLmdldFJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxibSw1KX07Ti5zZXRSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKGEpe2hpKHRoaXMsNSxhKX07Ti5jbGVhclJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldFJhbmtIaXN0b2dyYW0odm9pZCAwKX07Ti5oYXNSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPU5nKHRoaXMsNSl9O04uZ2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cz1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLFVsLDYpfTtOLnNldFdlaWdodGVkU3RyaW5nU3RhdHM9ZnVuY3Rpb24oYSl7aGkodGhpcyw2LGEpfTtOLmNsZWFyV2VpZ2h0ZWRTdHJpbmdTdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cyh2b2lkIDApfTtOLmhhc1dlaWdodGVkU3RyaW5nU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcyw2KX07CnZhciBUbD1bNF07Tj1TbC5wcm90b3R5cGU7Ti50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gUW0oYSx0aGlzKX07ZnVuY3Rpb24gUW0oYSxjKXt2YXIgZD17bWVhbjpYZyhjLDEpLHN0ZERldjpYZyhjLDIpLG1lZGlhbjpYZyhjLDMpLGhpc3RvZ3JhbXNMaXN0Ok1nKGMuZ2V0SGlzdG9ncmFtc0xpc3QoKSxKbSxhKX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9CmZ1bmN0aW9uIFNtKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWREb3VibGUoKTthLnNldE1lYW4oZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRTdGREZXYoZCk7YnJlYWs7Y2FzZSAzOmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNZWRpYW4oZCk7YnJlYWs7Y2FzZSA0OmQ9bmV3IFpsO2MucmVhZE1lc3NhZ2UoZCxMbSk7YS5hZGRIaXN0b2dyYW1zKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1OLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3ZjtVbSh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gVW0oYSxjKXt2YXIgZD1hLmdldE1lYW4oKTswIT09ZCYmYy53cml0ZURvdWJsZSgxLGQpO2Q9YS5nZXRTdGREZXYoKTswIT09ZCYmYy53cml0ZURvdWJsZSgyLGQpO2Q9YS5nZXRNZWRpYW4oKTswIT09ZCYmYy53cml0ZURvdWJsZSgzLGQpO2Q9YS5nZXRIaXN0b2dyYW1zTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoNCxkLE5tKX1OLmdldE1lYW49ZnVuY3Rpb24oKXtyZXR1cm4gWGcodGhpcywxKX07Ti5zZXRNZWFuPWZ1bmN0aW9uKGEpeyRoKHRoaXMsMSxhKX07Ti5nZXRTdGREZXY9ZnVuY3Rpb24oKXtyZXR1cm4gWGcodGhpcywyKX07Ti5zZXRTdGREZXY9ZnVuY3Rpb24oYSl7JGgodGhpcywyLGEpfTtOLmdldE1lZGlhbj1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDMpfTtOLnNldE1lZGlhbj1mdW5jdGlvbihhKXskaCh0aGlzLDMsYSl9O04uZ2V0SGlzdG9ncmFtc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyxabCw0KX07Ck4uc2V0SGlzdG9ncmFtc0xpc3Q9ZnVuY3Rpb24oYSl7amkodGhpcyw0LGEpfTtOLmFkZEhpc3RvZ3JhbXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGtpKHRoaXMsNCxhLFpsLHZvaWQgMCl9O04uY2xlYXJIaXN0b2dyYW1zTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0SGlzdG9ncmFtc0xpc3QoW10pfTt2YXIgVmw9WzFdO049VWwucHJvdG90eXBlO04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFdtKGEsdGhpcyl9O2Z1bmN0aW9uIFdtKGEsYyl7dmFyIGQsZj17dG9wVmFsdWVzTGlzdDpNZyhjLmdldFRvcFZhbHVlc0xpc3QoKSxWbSxhKSxyYW5rSGlzdG9ncmFtOihkPWMuZ2V0UmFua0hpc3RvZ3JhbSgpKSYmS20oYSxkKX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIFltKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgUmw7Yy5yZWFkTWVzc2FnZShkLFhtKTthLmFkZFRvcFZhbHVlcyhkKTticmVhaztjYXNlIDI6ZD1uZXcgYm07Yy5yZWFkTWVzc2FnZShkLE1tKTthLnNldFJhbmtIaXN0b2dyYW0oZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU4uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHdmOyRtKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uICRtKGEsYyl7dmFyIGQ9YS5nZXRUb3BWYWx1ZXNMaXN0KCk7MDxkLmxlbmd0aCYmYy53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLGQsWm0pO2Q9YS5nZXRSYW5rSGlzdG9ncmFtKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoMixkLE9tKX0KTi5nZXRUb3BWYWx1ZXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMsUmwsMSl9O04uc2V0VG9wVmFsdWVzTGlzdD1mdW5jdGlvbihhKXtqaSh0aGlzLDEsYSl9O04uYWRkVG9wVmFsdWVzPWZ1bmN0aW9uKGEpe3JldHVybiBraSh0aGlzLDEsYSxSbCx2b2lkIDApfTtOLmNsZWFyVG9wVmFsdWVzTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0VG9wVmFsdWVzTGlzdChbXSl9O04uZ2V0UmFua0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLGJtLDIpfTtOLnNldFJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oYSl7aGkodGhpcywyLGEpfTtOLmNsZWFyUmFua0hpc3RvZ3JhbT1mdW5jdGlvbigpe3RoaXMuc2V0UmFua0hpc3RvZ3JhbSh2b2lkIDApfTtOLmhhc1JhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcywyKX07Tj1XbC5wcm90b3R5cGU7Ti50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gdG0oYSx0aGlzKX07CmZ1bmN0aW9uIHRtKGEsYyl7dmFyIGQsZj17Y29tbW9uU3RhdHM6KGQ9Yy5nZXRDb21tb25TdGF0cygpKSYmUG0oYSxkKSx1bmlxdWU6V2coYywyLDApLGF2Z051bUJ5dGVzOlhnKGMsMyksbWluTnVtQnl0ZXM6WGcoYyw0KSxtYXhOdW1CeXRlczpYZyhjLDUpfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24geW0oYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBZbDtjLnJlYWRNZXNzYWdlKGQsUm0pO2Euc2V0Q29tbW9uU3RhdHMoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkVWludDY0KCk7YS5zZXRVbmlxdWUoZCk7YnJlYWs7Y2FzZSAzOmQ9Yy5yZWFkRmxvYXQoKTthLnNldEF2Z051bUJ5dGVzKGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZEZsb2F0KCk7YS5zZXRNaW5OdW1CeXRlcyhkKTticmVhaztjYXNlIDU6ZD1jLnJlYWRGbG9hdCgpO2Euc2V0TWF4TnVtQnl0ZXMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU4uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHdmO0RtKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBEbShhLGMpe3ZhciBkPWEuZ2V0Q29tbW9uU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgxLGQsVG0pO2Q9YS5nZXRVbmlxdWUoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgyLGQpO2Q9YS5nZXRBdmdOdW1CeXRlcygpOzAhPT1kJiZjLndyaXRlRmxvYXQoMyxkKTtkPWEuZ2V0TWluTnVtQnl0ZXMoKTswIT09ZCYmYy53cml0ZUZsb2F0KDQsZCk7ZD1hLmdldE1heE51bUJ5dGVzKCk7MCE9PWQmJmMud3JpdGVGbG9hdCg1LGQpfU4uZ2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxZbCwxKX07Ti5zZXRDb21tb25TdGF0cz1mdW5jdGlvbihhKXtoaSh0aGlzLDEsYSl9O04uY2xlYXJDb21tb25TdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0Q29tbW9uU3RhdHModm9pZCAwKX07Ti5oYXNDb21tb25TdGF0cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1OZyh0aGlzLDEpfTtOLmdldFVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBXZyh0aGlzLDIsMCl9OwpOLnNldFVuaXF1ZT1mdW5jdGlvbihhKXtZaCh0aGlzLDIsYSl9O04uZ2V0QXZnTnVtQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gWGcodGhpcywzKX07Ti5zZXRBdmdOdW1CeXRlcz1mdW5jdGlvbihhKXskaCh0aGlzLDMsYSl9O04uZ2V0TWluTnVtQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gWGcodGhpcyw0KX07Ti5zZXRNaW5OdW1CeXRlcz1mdW5jdGlvbihhKXskaCh0aGlzLDQsYSl9O04uZ2V0TWF4TnVtQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gWGcodGhpcyw1KX07Ti5zZXRNYXhOdW1CeXRlcz1mdW5jdGlvbihhKXskaCh0aGlzLDUsYSl9O049WGwucHJvdG90eXBlO04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHVtKGEsdGhpcyl9O2Z1bmN0aW9uIHVtKGEsYyl7dmFyIGQsZj17Y29tbW9uU3RhdHM6KGQ9Yy5nZXRDb21tb25TdGF0cygpKSYmUG0oYSxkKX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIHptKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgWWw7Yy5yZWFkTWVzc2FnZShkLFJtKTthLnNldENvbW1vblN0YXRzKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1OLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3ZjtFbSh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBFbShhLGMpe2E9YS5nZXRDb21tb25TdGF0cygpO251bGwhPWEmJmMud3JpdGVNZXNzYWdlKDEsYSxUbSl9Ti5nZXRDb21tb25TdGF0cz1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLFlsLDEpfTtOLnNldENvbW1vblN0YXRzPWZ1bmN0aW9uKGEpe2hpKHRoaXMsMSxhKX07Ti5jbGVhckNvbW1vblN0YXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXRDb21tb25TdGF0cyh2b2lkIDApfTsKTi5oYXNDb21tb25TdGF0cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1OZyh0aGlzLDEpfTtOPVlsLnByb3RvdHlwZTtOLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBQbShhLHRoaXMpfTsKZnVuY3Rpb24gUG0oYSxjKXt2YXIgZCxmPXtudW1Ob25NaXNzaW5nOldnKGMsMSwwKSxudW1NaXNzaW5nOldnKGMsMiwwKSxtaW5OdW1WYWx1ZXM6V2coYywzLDApLG1heE51bVZhbHVlczpXZyhjLDQsMCksYXZnTnVtVmFsdWVzOlhnKGMsNSksdG90TnVtVmFsdWVzOldnKGMsOCwwKSxudW1WYWx1ZXNIaXN0b2dyYW06KGQ9Yy5nZXROdW1WYWx1ZXNIaXN0b2dyYW0oKSkmJkptKGEsZCksd2VpZ2h0ZWRDb21tb25TdGF0czooZD1jLmdldFdlaWdodGVkQ29tbW9uU3RhdHMoKSkmJkdtKGEsZCksZmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW06KGQ9Yy5nZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbSgpKSYmSm0oYSxkKX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIFJtKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWRVaW50NjQoKTthLnNldE51bU5vbk1pc3NpbmcoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1NaXNzaW5nKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TWluTnVtVmFsdWVzKGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TWF4TnVtVmFsdWVzKGQpO2JyZWFrO2Nhc2UgNTpkPWMucmVhZEZsb2F0KCk7YS5zZXRBdmdOdW1WYWx1ZXMoZCk7YnJlYWs7Y2FzZSA4OmQ9Yy5yZWFkVWludDY0KCk7YS5zZXRUb3ROdW1WYWx1ZXMoZCk7YnJlYWs7Y2FzZSA2OmQ9bmV3IFpsO2MucmVhZE1lc3NhZ2UoZCxMbSk7YS5zZXROdW1WYWx1ZXNIaXN0b2dyYW0oZCk7YnJlYWs7Y2FzZSA3OmQ9bmV3IEtsO2MucmVhZE1lc3NhZ2UoZCxIbSk7YS5zZXRXZWlnaHRlZENvbW1vblN0YXRzKGQpOwpicmVhaztjYXNlIDk6ZD1uZXcgWmw7Yy5yZWFkTWVzc2FnZShkLExtKTthLnNldEZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1OLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3ZjtUbSh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gVG0oYSxjKXt2YXIgZD1hLmdldE51bU5vbk1pc3NpbmcoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgxLGQpO2Q9YS5nZXROdW1NaXNzaW5nKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMixkKTtkPWEuZ2V0TWluTnVtVmFsdWVzKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMyxkKTtkPWEuZ2V0TWF4TnVtVmFsdWVzKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoNCxkKTtkPWEuZ2V0QXZnTnVtVmFsdWVzKCk7MCE9PWQmJmMud3JpdGVGbG9hdCg1LGQpO2Q9YS5nZXRUb3ROdW1WYWx1ZXMoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCg4LGQpO2Q9YS5nZXROdW1WYWx1ZXNIaXN0b2dyYW0oKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg2LGQsTm0pO2Q9YS5nZXRXZWlnaHRlZENvbW1vblN0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoNyxkLEltKTtkPWEuZ2V0RmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW0oKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg5LGQsTm0pfQpOLmdldE51bU5vbk1pc3Npbmc9ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcywxLDApfTtOLnNldE51bU5vbk1pc3Npbmc9ZnVuY3Rpb24oYSl7WWgodGhpcywxLGEpfTtOLmdldE51bU1pc3Npbmc9ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcywyLDApfTtOLnNldE51bU1pc3Npbmc9ZnVuY3Rpb24oYSl7WWgodGhpcywyLGEpfTtOLmdldE1pbk51bVZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBXZyh0aGlzLDMsMCl9O04uc2V0TWluTnVtVmFsdWVzPWZ1bmN0aW9uKGEpe1loKHRoaXMsMyxhKX07Ti5nZXRNYXhOdW1WYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcyw0LDApfTtOLnNldE1heE51bVZhbHVlcz1mdW5jdGlvbihhKXtZaCh0aGlzLDQsYSl9O04uZ2V0QXZnTnVtVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIFhnKHRoaXMsNSl9O04uc2V0QXZnTnVtVmFsdWVzPWZ1bmN0aW9uKGEpeyRoKHRoaXMsNSxhKX07Ck4uZ2V0VG90TnVtVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsOCwwKX07Ti5zZXRUb3ROdW1WYWx1ZXM9ZnVuY3Rpb24oYSl7WWgodGhpcyw4LGEpfTtOLmdldE51bVZhbHVlc0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBlaSh0aGlzLFpsLDYpfTtOLnNldE51bVZhbHVlc0hpc3RvZ3JhbT1mdW5jdGlvbihhKXtoaSh0aGlzLDYsYSl9O04uY2xlYXJOdW1WYWx1ZXNIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldE51bVZhbHVlc0hpc3RvZ3JhbSh2b2lkIDApfTtOLmhhc051bVZhbHVlc0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT1OZyh0aGlzLDYpfTtOLmdldFdlaWdodGVkQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gZWkodGhpcyxLbCw3KX07Ti5zZXRXZWlnaHRlZENvbW1vblN0YXRzPWZ1bmN0aW9uKGEpe2hpKHRoaXMsNyxhKX07Ti5jbGVhcldlaWdodGVkQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldFdlaWdodGVkQ29tbW9uU3RhdHModm9pZCAwKX07Ck4uaGFzV2VpZ2h0ZWRDb21tb25TdGF0cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT1OZyh0aGlzLDcpfTtOLmdldEZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIGVpKHRoaXMsWmwsOSl9O04uc2V0RmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW09ZnVuY3Rpb24oYSl7aGkodGhpcyw5LGEpfTtOLmNsZWFyRmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldEZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtKHZvaWQgMCl9O04uaGFzRmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9TmcodGhpcyw5KX07dmFyICRsPVszXTtabC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIEptKGEsdGhpcyl9OwpmdW5jdGlvbiBKbShhLGMpe3ZhciBkPXtudW1OYW46V2coYywxLDApLG51bVVuZGVmaW5lZDpXZyhjLDIsMCksYnVja2V0c0xpc3Q6TWcoYy5nZXRCdWNrZXRzTGlzdCgpLGFuLGEpLHR5cGU6V2coYyw0LDApLG5hbWU6V2coYyw1LCIiKX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9CmZ1bmN0aW9uIExtKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWRVaW50NjQoKTthLnNldE51bU5hbihkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRVaW50NjQoKTthLnNldE51bVVuZGVmaW5lZChkKTticmVhaztjYXNlIDM6ZD1uZXcgYW07Yy5yZWFkTWVzc2FnZShkLGJuKTthLmFkZEJ1Y2tldHMoZCk7YnJlYWs7Y2FzZSA0OmQ9Yy5yZWFkRW51bSgpO2Euc2V0VHlwZShkKTticmVhaztjYXNlIDU6ZD1jLnJlYWRTdHJpbmcoKTthLnNldE5hbWUoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfVpsLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7Tm0odGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIE5tKGEsYyl7dmFyIGQ9YS5nZXROdW1OYW4oKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgxLGQpO2Q9YS5nZXROdW1VbmRlZmluZWQoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgyLGQpO2Q9YS5nZXRCdWNrZXRzTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMyxkLGNuKTtkPWEuZ2V0VHlwZSgpOzAhPT1kJiZjLndyaXRlRW51bSg0LGQpO2Q9YS5nZXROYW1lKCk7MDxkLmxlbmd0aCYmYy53cml0ZVN0cmluZyg1LGQpfU49YW0ucHJvdG90eXBlO04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGFuKGEsdGhpcyl9O2Z1bmN0aW9uIGFuKGEsYyl7dmFyIGQ9e2xvd1ZhbHVlOlhnKGMsMSksaGlnaFZhbHVlOlhnKGMsMiksZGVwcmVjYXRlZENvdW50OldnKGMsMywwKSxzYW1wbGVDb3VudDpYZyhjLDQpfTthJiYoZC4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZH0KZnVuY3Rpb24gYm4oYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZERvdWJsZSgpO2Euc2V0TG93VmFsdWUoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRIaWdoVmFsdWUoZCk7YnJlYWs7Y2FzZSAzOmQ9Yy5yZWFkVWludDY0KCk7YS5zZXREZXByZWNhdGVkQ291bnQoZCk7YnJlYWs7Y2FzZSA0OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRTYW1wbGVDb3VudChkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9Ti5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7Y24odGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIGNuKGEsYyl7dmFyIGQ9YS5nZXRMb3dWYWx1ZSgpOzAhPT1kJiZjLndyaXRlRG91YmxlKDEsZCk7ZD1hLmdldEhpZ2hWYWx1ZSgpOzAhPT1kJiZjLndyaXRlRG91YmxlKDIsZCk7ZD1hLmdldERlcHJlY2F0ZWRDb3VudCgpOzAhPT1kJiZjLndyaXRlVWludDY0KDMsZCk7ZD1hLmdldFNhbXBsZUNvdW50KCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNCxkKX1OLmdldExvd1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIFhnKHRoaXMsMSl9O04uc2V0TG93VmFsdWU9ZnVuY3Rpb24oYSl7JGgodGhpcywxLGEpfTtOLmdldEhpZ2hWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDIpfTtOLnNldEhpZ2hWYWx1ZT1mdW5jdGlvbihhKXskaCh0aGlzLDIsYSl9O04uZ2V0RGVwcmVjYXRlZENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsMywwKX07Ti5zZXREZXByZWNhdGVkQ291bnQ9ZnVuY3Rpb24oYSl7WWgodGhpcywzLGEpfTsKTi5nZXRTYW1wbGVDb3VudD1mdW5jdGlvbigpe3JldHVybiBYZyh0aGlzLDQpfTtOLnNldFNhbXBsZUNvdW50PWZ1bmN0aW9uKGEpeyRoKHRoaXMsNCxhKX07Tj1abC5wcm90b3R5cGU7Ti5nZXROdW1OYW49ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcywxLDApfTtOLnNldE51bU5hbj1mdW5jdGlvbihhKXtZaCh0aGlzLDEsYSl9O04uZ2V0TnVtVW5kZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsMiwwKX07Ti5zZXROdW1VbmRlZmluZWQ9ZnVuY3Rpb24oYSl7WWgodGhpcywyLGEpfTtOLmdldEJ1Y2tldHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGZpKHRoaXMsYW0sMyl9O04uc2V0QnVja2V0c0xpc3Q9ZnVuY3Rpb24oYSl7amkodGhpcywzLGEpfTtOLmFkZEJ1Y2tldHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGtpKHRoaXMsMyxhLGFtLHZvaWQgMCl9O04uY2xlYXJCdWNrZXRzTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0QnVja2V0c0xpc3QoW10pfTsKTi5nZXRUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsNCwwKX07Ti5zZXRUeXBlPWZ1bmN0aW9uKGEpe2JpKHRoaXMsNCxhKX07Ti5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsNSwiIil9O04uc2V0TmFtZT1mdW5jdGlvbihhKXthaSh0aGlzLDUsYSl9O3ZhciBjbT1bMV07Ym0ucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBLbShhLHRoaXMpfTtmdW5jdGlvbiBLbShhLGMpe3ZhciBkPXtidWNrZXRzTGlzdDpNZyhjLmdldEJ1Y2tldHNMaXN0KCksZG4sYSksbmFtZTpXZyhjLDIsIiIpfTthJiYoZC4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZH0KZnVuY3Rpb24gTW0oYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBkbTtjLnJlYWRNZXNzYWdlKGQsZW4pO2EuYWRkQnVja2V0cyhkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRTdHJpbmcoKTthLnNldE5hbWUoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfWJtLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgd2Y7T20odGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gT20oYSxjKXt2YXIgZD1hLmdldEJ1Y2tldHNMaXN0KCk7MDxkLmxlbmd0aCYmYy53cml0ZVJlcGVhdGVkTWVzc2FnZSgxLGQsZm4pO2Q9YS5nZXROYW1lKCk7MDxkLmxlbmd0aCYmYy53cml0ZVN0cmluZygyLGQpfU49ZG0ucHJvdG90eXBlO04udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGRuKGEsdGhpcyl9OwpmdW5jdGlvbiBkbihhLGMpe3ZhciBkPXtsb3dSYW5rOldnKGMsMSwwKSxoaWdoUmFuazpXZyhjLDIsMCksZGVwcmVjYXRlZENvdW50OldnKGMsMywwKSxsYWJlbDpXZyhjLDQsIiIpLHNhbXBsZUNvdW50OlhnKGMsNSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBlbihhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkVWludDY0KCk7YS5zZXRMb3dSYW5rKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0SGlnaFJhbmsoZCk7YnJlYWs7Y2FzZSAzOmQ9Yy5yZWFkVWludDY0KCk7YS5zZXREZXByZWNhdGVkQ291bnQoZCk7YnJlYWs7Y2FzZSA0OmQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXRMYWJlbChkKTticmVhaztjYXNlIDU6ZD1jLnJlYWREb3VibGUoKTthLnNldFNhbXBsZUNvdW50KGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1OLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyB3Zjtmbih0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gZm4oYSxjKXt2YXIgZD1hLmdldExvd1JhbmsoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgxLGQpO2Q9YS5nZXRIaWdoUmFuaygpOzAhPT1kJiZjLndyaXRlVWludDY0KDIsZCk7ZD1hLmdldERlcHJlY2F0ZWRDb3VudCgpOzAhPT1kJiZjLndyaXRlVWludDY0KDMsZCk7ZD1hLmdldExhYmVsKCk7MDxkLmxlbmd0aCYmYy53cml0ZVN0cmluZyg0LGQpO2Q9YS5nZXRTYW1wbGVDb3VudCgpOzAhPT1kJiZjLndyaXRlRG91YmxlKDUsZCl9Ti5nZXRMb3dSYW5rPWZ1bmN0aW9uKCl7cmV0dXJuIFdnKHRoaXMsMSwwKX07Ti5zZXRMb3dSYW5rPWZ1bmN0aW9uKGEpe1loKHRoaXMsMSxhKX07Ti5nZXRIaWdoUmFuaz1mdW5jdGlvbigpe3JldHVybiBXZyh0aGlzLDIsMCl9O04uc2V0SGlnaFJhbms9ZnVuY3Rpb24oYSl7WWgodGhpcywyLGEpfTtOLmdldERlcHJlY2F0ZWRDb3VudD1mdW5jdGlvbigpe3JldHVybiBXZyh0aGlzLDMsMCl9OwpOLnNldERlcHJlY2F0ZWRDb3VudD1mdW5jdGlvbihhKXtZaCh0aGlzLDMsYSl9O04uZ2V0TGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gV2codGhpcyw0LCIiKX07Ti5zZXRMYWJlbD1mdW5jdGlvbihhKXthaSh0aGlzLDQsYSl9O04uZ2V0U2FtcGxlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWGcodGhpcyw1KX07Ti5zZXRTYW1wbGVDb3VudD1mdW5jdGlvbihhKXskaCh0aGlzLDUsYSl9O049Ym0ucHJvdG90eXBlO04uZ2V0QnVja2V0c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZmkodGhpcyxkbSwxKX07Ti5zZXRCdWNrZXRzTGlzdD1mdW5jdGlvbihhKXtqaSh0aGlzLDEsYSl9O04uYWRkQnVja2V0cz1mdW5jdGlvbihhKXtyZXR1cm4ga2kodGhpcywxLGEsZG0sdm9pZCAwKX07Ti5jbGVhckJ1Y2tldHNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRCdWNrZXRzTGlzdChbXSl9O04uZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBXZyh0aGlzLDIsIiIpfTsKTi5zZXROYW1lPWZ1bmN0aW9uKGEpe2FpKHRoaXMsMixhKX07Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6L2V4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2RlcHMuanMKLy8jIHNvdXJjZVVSTD1idWlsZDovL2FuYWx5dGljcy5odG1sLmpzCndpbmRvdy5nYT1mdW5jdGlvbigpe307CgovLyBDb3B5cmlnaHQgMjAxNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci8vCi8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAovLwovLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgovLyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiFmdW5jdGlvbihhLGIpe3ZhciBjPXt9LGQ9e30sZT17fSxmPW51bGw7IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXd9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT11LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09di5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIDA+YXx8YT4xfHwwPmN8fGM+MT93OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKDA9PWV8fDE9PWUpcmV0dXJuIGU7Zm9yKHZhciBnPTAsaD0xOzspe3ZhciBpPShnK2gpLzIsaj1mKGEsYyxpKTtpZihNYXRoLmFicyhlLWopPDFlLTQpcmV0dXJuIGYoYixkLGkpO2U+aj9nPWk6aD1pfX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4gYys9YipkLGMtYyVkfX1mdW5jdGlvbiBrKGEpe0J8fChCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlKSxCLmFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uPSIiLEIuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249YTt2YXIgYj1CLmFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uO2lmKCIiPT1iJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihhKyIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIGVhc2luZyIpO3ZhciBjPUQuZXhlYyhiKTtpZihjKXJldHVybiBpLmFwcGx5KHRoaXMsYy5zbGljZSgxKS5tYXAoTnVtYmVyKSk7dmFyIGQ9RS5leGVjKGIpO2lmKGQpcmV0dXJuIGooTnVtYmVyKGRbMV0pLHtzdGFydDp4LG1pZGRsZTp5LGVuZDp6fVtkWzJdXSk7dmFyIGY9QVtiXTtyZXR1cm4gZj9mOnd9ZnVuY3Rpb24gbChhKXtyZXR1cm4gTWF0aC5hYnMobShhKS9hLnBsYXliYWNrUmF0ZSl9ZnVuY3Rpb24gbShhKXtyZXR1cm4gYS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/RjpiPGMuZGVsYXk/RzpiPj1jLmRlbGF5K2E/SDpJfWZ1bmN0aW9uIG8oYSxiLGMsZCxlKXtzd2l0Y2goZCl7Y2FzZSBHOnJldHVybiJiYWNrd2FyZHMiPT1ifHwiYm90aCI9PWI/MDpudWxsO2Nhc2UgSTpyZXR1cm4gYy1lO2Nhc2UgSDpyZXR1cm4iZm9yd2FyZHMiPT1ifHwiYm90aCI9PWI/YTpudWxsO2Nhc2UgRjpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gcChhLGIsYyxkKXtyZXR1cm4oZC5wbGF5YmFja1JhdGU8MD9iLWE6YikqZC5wbGF5YmFja1JhdGUrY31mdW5jdGlvbiBxKGEsYixjLGQsZSl7cmV0dXJuIGM9PT0xLzB8fGM9PT0tKDEvMCl8fGMtZD09YiYmZS5pdGVyYXRpb25zJiYoZS5pdGVyYXRpb25zK2UuaXRlcmF0aW9uU3RhcnQpJTE9PTA/YTpjJWF9ZnVuY3Rpb24gcihhLGIsYyxkKXtyZXR1cm4gMD09PWM/MDpiPT1hP2QuaXRlcmF0aW9uU3RhcnQrZC5pdGVyYXRpb25zLTE6TWF0aC5mbG9vcihjL2EpfWZ1bmN0aW9uIHMoYSxiLGMsZCl7dmFyIGU9YSUyPj0xLGY9Im5vcm1hbCI9PWQuZGlyZWN0aW9ufHxkLmRpcmVjdGlvbj09KGU/ImFsdGVybmF0ZS1yZXZlcnNlIjoiYWx0ZXJuYXRlIiksZz1mP2M6Yi1jLGg9Zy9iO3JldHVybiBiKmQuX2Vhc2luZ0Z1bmN0aW9uKGgpfWZ1bmN0aW9uIHQoYSxiLGMpe3ZhciBkPW4oYSxiLGMpLGU9byhhLGMuZmlsbCxiLGQsYy5kZWxheSk7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7aWYoMD09PWEpcmV0dXJuIGQ9PT1HPzA6MTt2YXIgZj1jLml0ZXJhdGlvblN0YXJ0KmMuZHVyYXRpb24sZz1wKGEsZSxmLGMpLGg9cShjLmR1cmF0aW9uLG0oYyksZyxmLGMpLGk9cihjLmR1cmF0aW9uLGgsZyxjKTtyZXR1cm4gcyhpLGMuZHVyYXRpb24saCxjKS9jLmR1cmF0aW9ufXZhciB1PSJiYWNrd2FyZHN8Zm9yd2FyZHN8Ym90aHxub25lIi5zcGxpdCgifCIpLHY9InJldmVyc2V8YWx0ZXJuYXRlfGFsdGVybmF0ZS1yZXZlcnNlIi5zcGxpdCgifCIpLHc9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9O2QucHJvdG90eXBlPXtfc2V0TWVtYmVyOmZ1bmN0aW9uKGIsYyl7dGhpc1siXyIrYl09Yyx0aGlzLl9lZmZlY3QmJih0aGlzLl9lZmZlY3QuX3RpbWluZ0lucHV0W2JdPWMsdGhpcy5fZWZmZWN0Ll90aW1pbmc9YS5ub3JtYWxpemVUaW1pbmdJbnB1dCh0aGlzLl9lZmZlY3QuX3RpbWluZ0lucHV0KSx0aGlzLl9lZmZlY3QuYWN0aXZlRHVyYXRpb249YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbih0aGlzLl9lZmZlY3QuX3RpbWluZyksdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24mJnRoaXMuX2VmZmVjdC5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpKX0sZ2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9wbGF5YmFja1JhdGV9LHNldCBkZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImRlbGF5IixhKX0sZ2V0IGRlbGF5KCl7cmV0dXJuIHRoaXMuX2RlbGF5fSxzZXQgZW5kRGVsYXkoYSl7dGhpcy5fc2V0TWVtYmVyKCJlbmREZWxheSIsYSl9LGdldCBlbmREZWxheSgpe3JldHVybiB0aGlzLl9lbmREZWxheX0sc2V0IGZpbGwoYSl7dGhpcy5fc2V0TWVtYmVyKCJmaWxsIixhKX0sZ2V0IGZpbGwoKXtyZXR1cm4gdGhpcy5fZmlsbH0sc2V0IGl0ZXJhdGlvblN0YXJ0KGEpe2lmKChpc05hTihhKXx8MD5hKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvblN0YXJ0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLCByZWNlaXZlZDogIit0aW1pbmcuaXRlcmF0aW9uU3RhcnQpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8MD5hKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1rKGEpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8MD5hKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeD0xLHk9LjUsej0wLEE9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHgpLCJzdGVwLW1pZGRsZSI6aigxLHkpLCJzdGVwLWVuZCI6aigxLHopfSxCPW51bGwsQz0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRD1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0MrIiwiK0MrIiwiK0MrIiwiK0MrIlxcKSIpLEU9L3N0ZXBzXChccyooXGQrKVxzKixccyooc3RhcnR8bWlkZGxlfGVuZClccypcKS8sRj0wLEc9MSxIPTIsST0zO2EuY2xvbmVUaW1pbmdJbnB1dD1jLGEubWFrZVRpbWluZz1mLGEubnVtZXJpY1RpbWluZ1RvT2JqZWN0PWcsYS5ub3JtYWxpemVUaW1pbmdJbnB1dD1oLGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb249bCxhLmNhbGN1bGF0ZVRpbWVGcmFjdGlvbj10LGEuY2FsY3VsYXRlUGhhc2U9bixhLnRvVGltaW5nRnVuY3Rpb249a30oYyxmKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBqP2pbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEsYixkKXt2YXIgZT1nW2FdO2lmKGUpe2guc3R5bGVbYV09Yjtmb3IodmFyIGYgaW4gZSl7dmFyIGk9ZVtmXSxqPWguc3R5bGVbaV07ZFtpXT1jKGksail9fWVsc2UgZFthXT1jKGEsYil9ZnVuY3Rpb24gZShhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtmPmc7ZysrKWU9e30sIm9mZnNldCJpbiBhP2Uub2Zmc2V0PWEub2Zmc2V0OjE9PWY/ZS5vZmZzZXQ9MTplLm9mZnNldD1nLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBmKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYT1jLmxlbmd0aDtudWxsPT1jW2EtMV0ub2Zmc2V0JiYoY1thLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWNbMF0ub2Zmc2V0JiYoY1swXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsZD1jWzBdLm9mZnNldCxlPTE7YT5lO2UrKyl7dmFyIGY9Y1tlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZS1iPmc7ZysrKWNbYitnXS5vZmZzZXQ9ZCsoZi1kKSpnLyhlLWIpO2I9ZSxkPWZ9fX1pZihudWxsPT1hKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmFbU3ltYm9sLml0ZXJhdG9yXSYmKGE9QXJyYXkuZnJvbShhKSksQXJyYXkuaXNBcnJheShhKXx8KGE9ZShhKSk7Zm9yKHZhciBjPWEubWFwKGZ1bmN0aW9uKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKXt2YXIgZT1hW2NdO2lmKCJvZmZzZXQiPT1jKXtpZihudWxsIT1lJiYoZT1OdW1iZXIoZSksIWlzRmluaXRlKGUpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJrZXlmcmFtZSBvZmZzZXRzIG11c3QgYmUgbnVtYmVycy4iKX1lbHNle2lmKCJjb21wb3NpdGUiPT1jKXRocm93e3R5cGU6RE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLG5hbWU6Ik5vdFN1cHBvcnRlZEVycm9yIixtZXNzYWdlOiJhZGQgY29tcG9zaXRpbmcgaXMgbm90IHN1cHBvcnRlZCJ9O2U9IiIrZX1kKGMsZSxiKX1yZXR1cm4gdm9pZCAwPT1iLm9mZnNldCYmKGIub2Zmc2V0PW51bGwpLGJ9KSxmPSEwLGc9LSgxLzApLGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGk9Y1toXS5vZmZzZXQ7aWYobnVsbCE9aSl7aWYoZz5pKXRocm93e2NvZGU6RE9NRXhjZXB0aW9uLklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUixuYW1lOiJJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IiLG1lc3NhZ2U6IktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIn07Zz1pfWVsc2UgZj0hMX1yZXR1cm4gYz1jLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZnx8YigpLGN9dmFyIGc9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2IiksaT17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGo9e2JvcmRlckJvdHRvbVdpZHRoOmksYm9yZGVyTGVmdFdpZHRoOmksYm9yZGVyUmlnaHRXaWR0aDppLGJvcmRlclRvcFdpZHRoOmksZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aSx0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWUsYS5ub3JtYWxpemVLZXlmcmFtZXM9Zn0oYyxmKSxmdW5jdGlvbihhKXt2YXIgYj17fTthLmlzRGVwcmVjYXRlZD1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZj1lPyJhcmUiOiJpcyIsZz1uZXcgRGF0ZSxoPW5ldyBEYXRlKGMpO3JldHVybiBoLnNldE1vbnRoKGguZ2V0TW9udGgoKSszKSxoPmc/KGEgaW4gYnx8Y29uc29sZS53YXJuKCJXZWIgQW5pbWF0aW9uczogIithKyIgIitmKyIgZGVwcmVjYXRlZCBhbmQgd2lsbCBzdG9wIHdvcmtpbmcgb24gIitoLnRvRGF0ZVN0cmluZygpKyIuICIrZCksYlthXT0hMCwhMSk6ITB9LGEuZGVwcmVjYXRlZD1mdW5jdGlvbihiLGMsZCxlKXt2YXIgZj1lPyJhcmUiOiJpcyI7aWYoYS5pc0RlcHJlY2F0ZWQoYixjLGQsZSkpdGhyb3cgbmV3IEVycm9yKGIrIiAiK2YrIiBubyBsb25nZXIgc3VwcG9ydGVkLiAiK2QpfX0oYyksZnVuY3Rpb24oKXtpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYW5pbWF0ZSl7dmFyIGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUoW10sMCksYj0hMDtpZihhJiYoYj0hMSwicGxheXxjdXJyZW50VGltZXxwYXVzZXxyZXZlcnNlfHBsYXliYWNrUmF0ZXxjYW5jZWx8ZmluaXNofHN0YXJ0VGltZXxwbGF5U3RhdGUiLnNwbGl0KCJ8IikuZm9yRWFjaChmdW5jdGlvbihjKXt2b2lkIDA9PT1hW2NdJiYoYj0hMCl9KSksIWIpcmV0dXJufSFmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7YysrKWZvcih2YXIgZCBpbiBhW2NdKWlmKCJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQpe3ZhciBlPXtvZmZzZXQ6YVtjXS5vZmZzZXQsZWFzaW5nOmFbY10uZWFzaW5nLHZhbHVlOmFbY11bZF19O2JbZF09YltkXXx8W10sYltkXS5wdXNoKGUpfWZvcih2YXIgZiBpbiBiKXt2YXIgZz1iW2ZdO2lmKDAhPWdbMF0ub2Zmc2V0fHwxIT1nW2cubGVuZ3RoLTFdLm9mZnNldCl0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiUGFydGlhbCBrZXlmcmFtZXMgYXJlIG5vdCBzdXBwb3J0ZWQifX1yZXR1cm4gYn1mdW5jdGlvbiBlKGMpe3ZhciBkPVtdO2Zvcih2YXIgZSBpbiBjKWZvcih2YXIgZj1jW2VdLGc9MDtnPGYubGVuZ3RoLTE7ZysrKXt2YXIgaD1mW2ddLm9mZnNldCxpPWZbZysxXS5vZmZzZXQsaj1mW2ddLnZhbHVlLGs9ZltnKzFdLnZhbHVlLGw9ZltnXS5lYXNpbmc7aD09aSYmKDE9PWk/aj1rOms9aiksZC5wdXNoKHtzdGFydFRpbWU6aCxlbmRUaW1lOmksZWFzaW5nOmEudG9UaW1pbmdGdW5jdGlvbihsP2w6ImxpbmVhciIpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGosayl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRUaW1lLWIuc3RhcnRUaW1lfSksZH1iLmNvbnZlcnRFZmZlY3RJbnB1dD1mdW5jdGlvbihjKXt2YXIgZj1hLm5vcm1hbGl6ZUtleWZyYW1lcyhjKSxnPWQoZiksaD1lKGcpO3JldHVybiBmdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpaC5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIDA+PWMmJjA9PWEuc3RhcnRUaW1lfHxjPj0xJiYxPT1hLmVuZFRpbWV8fGM+PWEuc3RhcnRUaW1lJiZjPD1hLmVuZFRpbWV9KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydFRpbWUsZj1kLmVuZFRpbWUtZC5zdGFydFRpbWUsZz0wPT1mPzA6ZC5lYXNpbmcoZS9mKTtiLmFwcGx5KGEsZC5wcm9wZXJ0eSxkLmludGVycG9sYXRpb24oZykpfSk7ZWxzZSBmb3IodmFyIGQgaW4gZykib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kJiZiLmNsZWFyKGEsZCl9fX0oYyxkLGYpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBnPWNbZl07ZShhLGIsZChnKSl9fWZ1bmN0aW9uIGcoYyxlLGYpe3ZhciBnPWM7Ly0vLnRlc3QoYykmJiFhLmlzRGVwcmVjYXRlZCgiSHlwaGVuYXRlZCBwcm9wZXJ0eSBuYW1lcyIsIjIwMTYtMDMtMjIiLCJVc2UgY2FtZWxDYXNlIGluc3RlYWQuIiwhMCkmJihnPWQoYykpLCJpbml0aWFsIiE9ZSYmImluaXRpYWwiIT1mfHwoImluaXRpYWwiPT1lJiYoZT1pW2ddKSwiaW5pdGlhbCI9PWYmJihmPWlbZ10pKTtmb3IodmFyIGo9ZT09Zj9bXTpoW2ddLGs9MDtqJiZrPGoubGVuZ3RoO2srKyl7dmFyIGw9altrXVswXShlKSxtPWpba11bMF0oZik7aWYodm9pZCAwIT09bCYmdm9pZCAwIT09bSl7dmFyIG49altrXVsxXShsLG0pO2lmKG4pe3ZhciBvPWIuSW50ZXJwb2xhdGlvbi5hcHBseShudWxsLG4pO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gMD09YT9lOjE9PWE/ZjpvKGEpfX19fXJldHVybiBiLkludGVycG9sYXRpb24oITEsITAsZnVuY3Rpb24oYSl7cmV0dXJuIGE/ZjplfSl9dmFyIGg9e307Yi5hZGRQcm9wZXJ0aWVzSGFuZGxlcj1mO3ZhciBpPXtiYWNrZ3JvdW5kQ29sb3I6InRyYW5zcGFyZW50IixiYWNrZ3JvdW5kUG9zaXRpb246IjAlIDAlIixib3JkZXJCb3R0b21Db2xvcjoiY3VycmVudENvbG9yIixib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiIwcHgiLGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiIwcHgiLGJvcmRlckJvdHRvbVdpZHRoOiIzcHgiLGJvcmRlckxlZnRDb2xvcjoiY3VycmVudENvbG9yIixib3JkZXJMZWZ0V2lkdGg6IjNweCIsYm9yZGVyUmlnaHRDb2xvcjoiY3VycmVudENvbG9yIixib3JkZXJSaWdodFdpZHRoOiIzcHgiLGJvcmRlclNwYWNpbmc6IjJweCIsYm9yZGVyVG9wQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyVG9wTGVmdFJhZGl1czoiMHB4Iixib3JkZXJUb3BSaWdodFJhZGl1czoiMHB4Iixib3JkZXJUb3BXaWR0aDoiM3B4Iixib3R0b206ImF1dG8iLGNsaXA6InJlY3QoMHB4LCAwcHgsIDBweCwgMHB4KSIsY29sb3I6ImJsYWNrIixmb250U2l6ZToiMTAwJSIsZm9udFdlaWdodDoiNDAwIixoZWlnaHQ6ImF1dG8iLGxlZnQ6ImF1dG8iLGxldHRlclNwYWNpbmc6Im5vcm1hbCIsbGluZUhlaWdodDoiMTIwJSIsbWFyZ2luQm90dG9tOiIwcHgiLG1hcmdpbkxlZnQ6IjBweCIsbWFyZ2luUmlnaHQ6IjBweCIsbWFyZ2luVG9wOiIwcHgiLG1heEhlaWdodDoibm9uZSIsbWF4V2lkdGg6Im5vbmUiLG1pbkhlaWdodDoiMHB4IixtaW5XaWR0aDoiMHB4IixvcGFjaXR5OiIxLjAiLG91dGxpbmVDb2xvcjoiaW52ZXJ0IixvdXRsaW5lT2Zmc2V0OiIwcHgiLG91dGxpbmVXaWR0aDoiM3B4IixwYWRkaW5nQm90dG9tOiIwcHgiLHBhZGRpbmdMZWZ0OiIwcHgiLHBhZGRpbmdSaWdodDoiMHB4IixwYWRkaW5nVG9wOiIwcHgiLHJpZ2h0OiJhdXRvIix0ZXh0SW5kZW50OiIwcHgiLHRleHRTaGFkb3c6IjBweCAwcHggMHB4IHRyYW5zcGFyZW50Iix0b3A6ImF1dG8iLHRyYW5zZm9ybToiIix2ZXJ0aWNhbEFsaWduOiIwcHgiLHZpc2liaWxpdHk6InZpc2libGUiLHdpZHRoOiJhdXRvIix3b3JkU3BhY2luZzoibm9ybWFsIix6SW5kZXg6ImF1dG8ifTtiLnByb3BlcnR5SW50ZXJwb2xhdGlvbj1nfShjLGQsZiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZVRpbWVGcmFjdGlvbihjLGQsYil9O3JldHVybiBkLl90b3RhbER1cmF0aW9uPWIuZGVsYXkrYytiLmVuZERlbGF5LGQuX2lzQ3VycmVudD1mdW5jdGlvbihkKXt2YXIgZT1hLmNhbGN1bGF0ZVBoYXNlKGMsZCxiKTtyZXR1cm4gZT09PVBoYXNlQWN0aXZlfHxlPT09UGhhc2VCZWZvcmV9LGR9Yi5LZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihjLGUsZixnKXt2YXIgaCxpPWQoYS5ub3JtYWxpemVUaW1pbmdJbnB1dChmKSksaj1iLmNvbnZlcnRFZmZlY3RJbnB1dChlKSxrPWZ1bmN0aW9uKCl7aihjLGgpfTtyZXR1cm4gay5fdXBkYXRlPWZ1bmN0aW9uKGEpe3JldHVybiBoPWkoYSksbnVsbCE9PWh9LGsuX2NsZWFyPWZ1bmN0aW9uKCl7aihjLG51bGwpfSxrLl9oYXNTYW1lVGFyZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBjPT09YX0say5faXNDdXJyZW50PWkuX2lzQ3VycmVudCxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfSxiLk51bGxFZmZlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXthJiYoYSgpLGE9bnVsbCl9O3JldHVybiBiLl91cGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sYi5fdG90YWxEdXJhdGlvbj0wLGIuX2lzQ3VycmVudD1mdW5jdGlvbigpe3JldHVybiExfSxiLl9oYXNTYW1lVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGJ9fShjLGQsZiksZnVuY3Rpb24oYSxiKXthLmFwcGx5PWZ1bmN0aW9uKGIsYyxkKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT1kfSxhLmNsZWFyPWZ1bmN0aW9uKGIsYyl7Yi5zdHlsZVthLnByb3BlcnR5TmFtZShjKV09IiJ9fShkLGYpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShkKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybi41PmQ/YTpiO2lmKGEubGVuZ3RoPT1iLmxlbmd0aCl7Zm9yKHZhciBlPVtdLGY9MDtmPGEubGVuZ3RoO2YrKyllLnB1c2goYyhhW2ZdLGJbZl0sZCkpO3JldHVybiBlfXRocm93Ik1pc21hdGNoZWQgaW50ZXJwb2xhdGlvbiBhcmd1bWVudHMgIithKyI6IitifWEuSW50ZXJwb2xhdGlvbj1mdW5jdGlvbihhLGIsZCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBkKGMoYSxiLGUpKX19fShkLGYpLGZ1bmN0aW9uKGEsYixjKXthLnNlcXVlbmNlTnVtYmVyPTA7dmFyIGQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGltZT1iLHRoaXMudGltZWxpbmVUaW1lPWMsdGhpcy50eXBlPSJmaW5pc2giLHRoaXMuYnViYmxlcz0hMSx0aGlzLmNhbmNlbGFibGU9ITEsdGhpcy5jdXJyZW50VGFyZ2V0PWEsdGhpcy5kZWZhdWx0UHJldmVudGVkPSExLHRoaXMuZXZlbnRQaGFzZT1FdmVudC5BVF9UQVJHRVQsdGhpcy50aW1lU3RhbXA9RGF0ZS5ub3coKX07Yi5BbmltYXRpb249ZnVuY3Rpb24oYil7dGhpcy5pZD0iIixiJiZiLl9pZCYmKHRoaXMuaWQ9Yi5faWQpLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9jdXJyZW50VGltZT0wLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9pblRpbWVsaW5lPSEwLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMCx0aGlzLm9uZmluaXNoPW51bGwsdGhpcy5fZmluaXNoSGFuZGxlcnM9W10sdGhpcy5fZWZmZWN0PWIsdGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUoMCksdGhpcy5faWRsZT0hMCx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITF9LGIuQW5pbWF0aW9uLnByb3RvdHlwZT17X2Vuc3VyZUFsaXZlOmZ1bmN0aW9uKCl7dGhpcy5wbGF5YmFja1JhdGU8MCYmMD09PXRoaXMuY3VycmVudFRpbWU/dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUoLTEpOnRoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKHRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2luVGltZWxpbmV8fCF0aGlzLl9pbkVmZmVjdCYmdGhpcy5fZmluaXNoZWRGbGFnfHwodGhpcy5faW5UaW1lbGluZT0hMCxiLnRpbWVsaW5lLl9hbmltYXRpb25zLnB1c2godGhpcykpfSxfdGlja0N1cnJlbnRUaW1lOmZ1bmN0aW9uKGEsYil7YSE9dGhpcy5fY3VycmVudFRpbWUmJih0aGlzLl9jdXJyZW50VGltZT1hLHRoaXMuX2lzRmluaXNoZWQmJiFiJiYodGhpcy5fY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowKSx0aGlzLl9lbnN1cmVBbGl2ZSgpKX0sZ2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuX2lkbGV8fHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz9udWxsOnRoaXMuX2N1cnJlbnRUaW1lfSxzZXQgY3VycmVudFRpbWUoYSl7YT0rYSxpc05hTihhKXx8KGIucmVzdGFydCgpLHRoaXMuX3BhdXNlZHx8bnVsbD09dGhpcy5fc3RhcnRUaW1lfHwodGhpcy5fc3RhcnRUaW1lPXRoaXMuX3RpbWVsaW5lLmN1cnJlbnRUaW1lLWEvdGhpcy5fcGxheWJhY2tSYXRlKSx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fY3VycmVudFRpbWUhPWEmJih0aGlzLl90aWNrQ3VycmVudFRpbWUoYSwhMCksYi5pbnZhbGlkYXRlRWZmZWN0cygpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5pbnZhbGlkYXRlRWZmZWN0cygpKX0sZ2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9wbGF5YmFja1JhdGV9LHNldCBwbGF5YmFja1JhdGUoYSl7aWYoYSE9dGhpcy5fcGxheWJhY2tSYXRlKXt2YXIgYj10aGlzLmN1cnJlbnRUaW1lO3RoaXMuX3BsYXliYWNrUmF0ZT1hLHRoaXMuX3N0YXJ0VGltZT1udWxsLCJwYXVzZWQiIT10aGlzLnBsYXlTdGF0ZSYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSYmdGhpcy5wbGF5KCksbnVsbCE9YiYmKHRoaXMuY3VycmVudFRpbWU9Yil9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3BsYXliYWNrUmF0ZT4wPzA6dGhpcy5fdG90YWxEdXJhdGlvbix0aGlzLl9zdGFydFRpbWU9bnVsbCksdGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmludmFsaWRhdGVFZmZlY3RzKCl9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5faXNGaW5pc2hlZHx8dGhpcy5fcGF1c2VkfHx0aGlzLl9pZGxlfHwodGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwKSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9wYXVzZWQ9ITB9LGZpbmlzaDpmdW5jdGlvbigpe3RoaXMuX2lkbGV8fCh0aGlzLmN1cnJlbnRUaW1lPXRoaXMuX3BsYXliYWNrUmF0ZT4wP3RoaXMuX3RvdGFsRHVyYXRpb246MCx0aGlzLl9zdGFydFRpbWU9dGhpcy5fdG90YWxEdXJhdGlvbi10aGlzLmN1cnJlbnRUaW1lLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSxiLmludmFsaWRhdGVFZmZlY3RzKCkpfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLl9pbkVmZmVjdCYmKHRoaXMuX2luRWZmZWN0PSExLHRoaXMuX2lkbGU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmludmFsaWRhdGVFZmZlY3RzKCkpfSxyZXZlcnNlOmZ1bmN0aW9uKCl7dGhpcy5wbGF5YmFja1JhdGUqPS0xLHRoaXMucGxheSgpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJmaW5pc2giPT1hJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5wdXNoKGIpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7aWYoImZpbmlzaCI9PWEpe3ZhciBjPXRoaXMuX2ZpbmlzaEhhbmRsZXJzLmluZGV4T2YoYik7Yz49MCYmdGhpcy5fZmluaXNoSGFuZGxlcnMuc3BsaWNlKGMsMSl9fSxfZmlyZUV2ZW50czpmdW5jdGlvbihhKXtpZih0aGlzLl9pc0ZpbmlzaGVkKXtpZighdGhpcy5fZmluaXNoZWRGbGFnKXt2YXIgYj1uZXcgZCh0aGlzLHRoaXMuX2N1cnJlbnRUaW1lLGEpLGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuY29uY2F0KHRoaXMub25maW5pc2g/W3RoaXMub25maW5pc2hdOltdKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuY2FsbChiLnRhcmdldCxiKX0pfSwwKSx0aGlzLl9maW5pc2hlZEZsYWc9ITB9fWVsc2UgdGhpcy5fZmluaXNoZWRGbGFnPSExfSxfdGljazpmdW5jdGlvbihhLGIpe3RoaXMuX2lkbGV8fHRoaXMuX3BhdXNlZHx8KG51bGw9PXRoaXMuX3N0YXJ0VGltZT9iJiYodGhpcy5zdGFydFRpbWU9YS10aGlzLl9jdXJyZW50VGltZS90aGlzLnBsYXliYWNrUmF0ZSk6dGhpcy5faXNGaW5pc2hlZHx8dGhpcy5fdGlja0N1cnJlbnRUaW1lKChhLXRoaXMuX3N0YXJ0VGltZSkqdGhpcy5wbGF5YmFja1JhdGUpKSxiJiYodGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLHRoaXMuX2ZpcmVFdmVudHMoYSkpfSxnZXQgX25lZWRzVGljaygpe3JldHVybiB0aGlzLnBsYXlTdGF0ZSBpbntwZW5kaW5nOjEscnVubmluZzoxfXx8IXRoaXMuX2ZpbmlzaGVkRmxhZ319fShjLGQsZiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGI9ajtqPVtdLGE8cC5jdXJyZW50VGltZSYmKGE9cC5jdXJyZW50VGltZSksaChhLCEwKSxiLmZvckVhY2goZnVuY3Rpb24oYil7YlsxXShhKX0pLGcoKSxsPXZvaWQgMH1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGEuX3NlcXVlbmNlTnVtYmVyLWIuX3NlcXVlbmNlTnVtYmVyfWZ1bmN0aW9uIGYoKXt0aGlzLl9hbmltYXRpb25zPVtdLHRoaXMuY3VycmVudFRpbWU9d2luZG93LnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2Uubm93KCk6MH1mdW5jdGlvbiBnKCl7by5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoKX0pLG8ubGVuZ3RoPTB9ZnVuY3Rpb24gaChhLGMpe249ITE7dmFyIGQ9Yi50aW1lbGluZTtkLmN1cnJlbnRUaW1lPWEsZC5fYW5pbWF0aW9ucy5zb3J0KGUpLG09ITE7dmFyIGY9ZC5fYW5pbWF0aW9ucztkLl9hbmltYXRpb25zPVtdO3ZhciBnPVtdLGg9W107Zj1mLmZpbHRlcihmdW5jdGlvbihiKXtiLl90aWNrKGEsYyksYi5faW5FZmZlY3Q/aC5wdXNoKGIuX2VmZmVjdCk6Zy5wdXNoKGIuX2VmZmVjdCksYi5fbmVlZHNUaWNrJiYobT0hMCk7dmFyIGQ9Yi5faW5FZmZlY3R8fGIuX25lZWRzVGljaztyZXR1cm4gYi5faW5UaW1lbGluZT1kLGR9KSxvLnB1c2guYXBwbHkobyxnKSxvLnB1c2guYXBwbHkobyxoKSxkLl9hbmltYXRpb25zLnB1c2guYXBwbHkoZC5fYW5pbWF0aW9ucyxmKSxtJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt9KX12YXIgaT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGo9W10saz0wO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7dmFyIGI9aysrO3JldHVybiAwPT1qLmxlbmd0aCYmaShkKSxqLnB1c2goW2IsYV0pLGJ9LHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZT1mdW5jdGlvbihhKXtqLmZvckVhY2goZnVuY3Rpb24oYil7YlswXT09YSYmKGJbMV09ZnVuY3Rpb24oKXt9KX0pfSxmLnByb3RvdHlwZT17X3BsYXk6ZnVuY3Rpb24oYyl7Yy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy50aW1pbmcpO3ZhciBkPW5ldyBiLkFuaW1hdGlvbihjKTtyZXR1cm4gZC5faWRsZT0hMSxkLl90aW1lbGluZT10aGlzLHRoaXMuX2FuaW1hdGlvbnMucHVzaChkKSxiLnJlc3RhcnQoKSxiLmludmFsaWRhdGVFZmZlY3RzKCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuaW52YWxpZGF0ZUVmZmVjdHM9ZnVuY3Rpb24oKXtoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEpLGcoKX07dmFyIG89W10scD1uZXcgZjtiLnRpbWVsaW5lPXB9KGMsZCxmKSxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYil7dmFyIGM9YS5leGVjKGIpO3JldHVybiBjPyhjPWEuaWdub3JlQ2FzZT9jWzBdLnRvTG93ZXJDYXNlKCk6Y1swXSxbYyxiLnN1YnN0cihjLmxlbmd0aCldKTp2b2lkIDB9ZnVuY3Rpb24gYyhhLGIpe2I9Yi5yZXBsYWNlKC9eXHMqLywiIik7dmFyIGM9YShiKTtyZXR1cm4gYz9bY1swXSxjWzFdLnJlcGxhY2UoL15ccyovLCIiKV06dm9pZCAwfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSxnPWIoZCxlKSwhZ3x8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKywwPj1jKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD1hKGMpO3JldHVybiBkP2Q6W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfXJldHVybiIiPT1jP2Q6dm9pZCAwfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2o+aztrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oZCksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtpZihjKXJldHVybiBkLmluc2V0PSEwLGM7dmFyIGM9YS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50KGIpO2lmKGMpcmV0dXJuIGQubGVuZ3Rocy5wdXNoKGNbMF0pLGM7dmFyIGM9YS5jb25zdW1lQ29sb3IoYik7cmV0dXJuIGM/KGQuY29sb3I9Y1swXSxjKTp2b2lkIDB9dmFyIGQ9e2luc2V0OiExLGxlbmd0aHM6W10sY29sb3I6bnVsbH0sZT1hLmNvbnN1bWVSZXBlYXRlZChjLC9eLyxiKTtyZXR1cm4gZSYmZVswXS5sZW5ndGg/W2QsZVsxXV06dm9pZCAwfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO3JldHVybiBkJiYiIj09ZFsxXT9kWzBdOnZvaWQgMH1mdW5jdGlvbiBkKGIsYyl7Zm9yKDtiLmxlbmd0aHMubGVuZ3RoPE1hdGgubWF4KGIubGVuZ3Rocy5sZW5ndGgsYy5sZW5ndGhzLmxlbmd0aCk7KWIubGVuZ3Rocy5wdXNoKHtweDowfSk7Zm9yKDtjLmxlbmd0aHMubGVuZ3RoPE1hdGgubWF4KGIubGVuZ3Rocy5sZW5ndGgsYy5sZW5ndGhzLmxlbmd0aCk7KWMubGVuZ3Rocy5wdXNoKHtweDowfSk7aWYoYi5pbnNldD09Yy5pbnNldCYmISFiLmNvbG9yPT0hIWMuY29sb3Ipe2Zvcih2YXIgZCxlPVtdLGY9W1tdLDBdLGc9W1tdLDBdLGg9MDtoPGIubGVuZ3Rocy5sZW5ndGg7aCsrKXt2YXIgaT1hLm1lcmdlRGltZW5zaW9ucyhiLmxlbmd0aHNbaF0sYy5sZW5ndGhzW2hdLDI9PWgpO2ZbMF0ucHVzaChpWzBdKSxnWzBdLnB1c2goaVsxXSksZS5wdXNoKGlbMl0pfWlmKGIuY29sb3ImJmMuY29sb3Ipe3ZhciBqPWEubWVyZ2VDb2xvcnMoYi5jb2xvcixjLmNvbG9yKTtmWzFdPWpbMF0sZ1sxXT1qWzFdLGQ9alsyXX1yZXR1cm5bZixnLGZ1bmN0aW9uKGEpe2Zvcih2YXIgYz1iLmluc2V0PyJpbnNldCAiOiIgIixmPTA7ZjxlLmxlbmd0aDtmKyspYys9ZVtmXShhWzBdW2ZdKSsiICI7cmV0dXJuIGQmJihjKz1kKGFbMV0pKSxjfV19fWZ1bmN0aW9uIGUoYixjLGQsZSl7ZnVuY3Rpb24gZihhKXtyZXR1cm57aW5zZXQ6YSxjb2xvcjpbMCwwLDAsMF0sbGVuZ3Roczpbe3B4OjB9LHtweDowfSx7cHg6MH0se3B4OjB9XX19Zm9yKHZhciBnPVtdLGg9W10saT0wO2k8ZC5sZW5ndGh8fGk8ZS5sZW5ndGg7aSsrKXt2YXIgaj1kW2ldfHxmKGVbaV0uaW5zZXQpLGs9ZVtpXXx8ZihkW2ldLmluc2V0KTtnLnB1c2goaiksaC5wdXNoKGspfXJldHVybiBhLm1lcmdlTmVzdGVkUmVwZWF0ZWQoYixjLGcsaCl9dmFyIGY9ZS5iaW5kKG51bGwsZCwiLCAiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZixbImJveC1zaGFkb3ciLCJ0ZXh0LXNoYWRvdyJdKX0oZCksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBhLnRvRml4ZWQoMykucmVwbGFjZSgiLjAwMCIsIiIpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVybiBNYXRoLm1pbihiLE1hdGgubWF4KGEsYykpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuL15ccypbLStdPyhcZCpcLik/XGQrXHMqJC8udGVzdChhKT9OdW1iZXIoYSk6dm9pZCAwfWZ1bmN0aW9uIGYoYSxiKXtyZXR1cm5bYSxiLGNdfWZ1bmN0aW9uIGcoYSxiKXtyZXR1cm4gMCE9YT9pKDAsMS8wKShhLGIpOnZvaWQgMH1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEsYil7cmV0dXJuW2EsYixNYXRoLnJvdW5kXX1hLmNsYW1wPWQsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGkoMCwxLzApLFsiYm9yZGVyLWltYWdlLXdpZHRoIiwibGluZS1oZWlnaHQiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGkoMCwxKSxbIm9wYWNpdHkiLCJzaGFwZS1pbWFnZS10aHJlc2hvbGQiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGcsWyJmbGV4LWdyb3ciLCJmbGV4LXNocmluayJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaCxbIm9ycGhhbnMiLCJ3aWRvd3MiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGosWyJ6LWluZGV4Il0pLGEucGFyc2VOdW1iZXI9ZSxhLm1lcmdlTnVtYmVycz1mLGEubnVtYmVyVG9TdHJpbmc9Y30oZCxmKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4idmlzaWJsZSI9PWF8fCJ2aXNpYmxlIj09Yj9bMCwxLGZ1bmN0aW9uKGMpe3JldHVybiAwPj1jP2E6Yz49MT9iOiJ2aXNpYmxlIn1dOnZvaWQgMH1hLmFkZFByb3BlcnRpZXNIYW5kbGVyKFN0cmluZyxjLFsidmlzaWJpbGl0eSJdKX0oZCksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2E9YS50cmltKCksZi5maWxsU3R5bGU9IiMwMDAiLGYuZmlsbFN0eWxlPWE7dmFyIGI9Zi5maWxsU3R5bGU7aWYoZi5maWxsU3R5bGU9IiNmZmYiLGYuZmlsbFN0eWxlPWEsYj09Zi5maWxsU3R5bGUpe2YuZmlsbFJlY3QoMCwwLDEsMSk7dmFyIGM9Zi5nZXRJbWFnZURhdGEoMCwwLDEsMSkuZGF0YTtmLmNsZWFyUmVjdCgwLDAsMSwxKTt2YXIgZD1jWzNdLzI1NTtyZXR1cm5bY1swXSpkLGNbMV0qZCxjWzJdKmQsZF19fWZ1bmN0aW9uIGQoYixjKXtyZXR1cm5bYixjLGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LGEpKX1pZihiWzNdKWZvcih2YXIgZD0wOzM+ZDtkKyspYltkXT1NYXRoLnJvdW5kKGMoYltkXS9iWzNdKSk7cmV0dXJuIGJbM109YS5udW1iZXJUb1N0cmluZyhhLmNsYW1wKDAsMSxiWzNdKSksInJnYmEoIitiLmpvaW4oIiwiKSsiKSJ9XX12YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKTtlLndpZHRoPWUuaGVpZ2h0PTE7dmFyIGY9ZS5nZXRDb250ZXh0KCIyZCIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxkLFsiYmFja2dyb3VuZC1jb2xvciIsImJvcmRlci1ib3R0b20tY29sb3IiLCJib3JkZXItbGVmdC1jb2xvciIsImJvcmRlci1yaWdodC1jb2xvciIsImJvcmRlci10b3AtY29sb3IiLCJjb2xvciIsIm91dGxpbmUtY29sb3IiLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiXSksYS5jb25zdW1lQ29sb3I9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsYyksYS5tZXJnZUNvbG9ycz1kfShkLGYpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKGI9Yi50cmltKCkudG9Mb3dlckNhc2UoKSwiMCI9PWImJiJweCIuc2VhcmNoKGEpPj0wKXJldHVybntweDowfTtpZigvXlteKF0qJHxeY2FsYy8udGVzdChiKSl7Yj1iLnJlcGxhY2UoL2NhbGNcKC9nLCIoIik7dmFyIGM9e307Yj1iLnJlcGxhY2UoYSxmdW5jdGlvbihhKXtyZXR1cm4gY1thXT1udWxsLCJVIithfSk7Zm9yKHZhciBkPSJVKCIrYS5zb3VyY2UrIikiLGU9Yi5yZXBsYWNlKC9bLStdPyhcZCpcLik/XGQrL2csIk4iKS5yZXBsYWNlKG5ldyBSZWdFeHAoIk4iK2QsImciKSwiRCIpLnJlcGxhY2UoL1xzWystXVxzL2csIk8iKS5yZXBsYWNlKC9ccy9nLCIiKSxmPVsvTlwqKEQpL2csLyhOfEQpWypcL11OL2csLyhOfEQpT1wxL2csL1woKE58RClcKS9nXSxnPTA7ZzxmLmxlbmd0aDspZltnXS50ZXN0KGUpPyhlPWUucmVwbGFjZShmW2ddLCIkMSIpLGc9MCk6ZysrO2lmKCJEIj09ZSl7Zm9yKHZhciBoIGluIGMpe3ZhciBpPWV2YWwoYi5yZXBsYWNlKG5ldyBSZWdFeHAoIlUiK2gsImciKSwiIikucmVwbGFjZShuZXcgUmVnRXhwKGQsImciKSwiKjAiKSk7aWYoIWlzRmluaXRlKGkpKXJldHVybjtjW2hdPWl9cmV0dXJuIGN9fX1mdW5jdGlvbiBkKGEsYil7cmV0dXJuIGUoYSxiLCEwKX1mdW5jdGlvbiBlKGIsYyxkKXt2YXIgZSxmPVtdO2ZvcihlIGluIGIpZi5wdXNoKGUpO2ZvcihlIGluIGMpZi5pbmRleE9mKGUpPDAmJmYucHVzaChlKTtyZXR1cm4gYj1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYlthXXx8MH0pLGM9Zi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV18fDB9KSxbYixjLGZ1bmN0aW9uKGIpe3ZhciBjPWIubWFwKGZ1bmN0aW9uKGMsZSl7cmV0dXJuIDE9PWIubGVuZ3RoJiZkJiYoYz1NYXRoLm1heChjLDApKSxhLm51bWJlclRvU3RyaW5nKGMpK2ZbZV19KS5qb2luKCIgKyAiKTtyZXR1cm4gYi5sZW5ndGg+MT8iY2FsYygiK2MrIikiOmN9XX12YXIgZj0icHh8ZW18ZXh8Y2h8cmVtfHZ3fHZofHZtaW58dm1heHxjbXxtbXxpbnxwdHxwYyIsZz1jLmJpbmQobnVsbCxuZXcgUmVnRXhwKGYsImciKSksaD1jLmJpbmQobnVsbCxuZXcgUmVnRXhwKGYrInwlIiwiZyIpKSxpPWMuYmluZChudWxsLC9kZWd8cmFkfGdyYWR8dHVybi9nKTthLnBhcnNlTGVuZ3RoPWcsYS5wYXJzZUxlbmd0aE9yUGVyY2VudD1oLGEuY29uc3VtZUxlbmd0aE9yUGVyY2VudD1hLmNvbnN1bWVQYXJlbnRoZXNpc2VkLmJpbmQobnVsbCxoKSxhLnBhcnNlQW5nbGU9aSxhLm1lcmdlRGltZW5zaW9ucz1lO3ZhciBqPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGcpLGs9YS5jb25zdW1lUmVwZWF0ZWQuYmluZCh2b2lkIDAsaiwvXi8pLGw9YS5jb25zdW1lUmVwZWF0ZWQuYmluZCh2b2lkIDAsaywvXiwvKTthLmNvbnN1bWVTaXplUGFpckxpc3Q9bDt2YXIgbT1mdW5jdGlvbihhKXt2YXIgYj1sKGEpO3JldHVybiBiJiYiIj09YlsxXT9iWzBdOnZvaWQgMH0sbj1hLm1lcmdlTmVzdGVkUmVwZWF0ZWQuYmluZCh2b2lkIDAsZCwiICIpLG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLG4sIiwiKTthLm1lcmdlTm9uTmVnYXRpdmVTaXplUGFpcj1uLGEuYWRkUHJvcGVydGllc0hhbmRsZXIobSxvLFsiYmFja2dyb3VuZC1zaXplIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaCxkLFsiYm9yZGVyLWJvdHRvbS13aWR0aCIsImJvcmRlci1pbWFnZS13aWR0aCIsImJvcmRlci1sZWZ0LXdpZHRoIiwiYm9yZGVyLXJpZ2h0LXdpZHRoIiwiYm9yZGVyLXRvcC13aWR0aCIsImZsZXgtYmFzaXMiLCJmb250LXNpemUiLCJoZWlnaHQiLCJsaW5lLWhlaWdodCIsIm1heC1oZWlnaHQiLCJtYXgtd2lkdGgiLCJvdXRsaW5lLXdpZHRoIiwid2lkdGgiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihoLGUsWyJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLCJib3JkZXItdG9wLWxlZnQtcmFkaXVzIiwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCJib3R0b20iLCJsZWZ0IiwibGV0dGVyLXNwYWNpbmciLCJtYXJnaW4tYm90dG9tIiwibWFyZ2luLWxlZnQiLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW4tdG9wIiwibWluLWhlaWdodCIsIm1pbi13aWR0aCIsIm91dGxpbmUtb2Zmc2V0IiwicGFkZGluZy1ib3R0b20iLCJwYWRkaW5nLWxlZnQiLCJwYWRkaW5nLXJpZ2h0IiwicGFkZGluZy10b3AiLCJwZXJzcGVjdGl2ZSIsInJpZ2h0Iiwic2hhcGUtbWFyZ2luIiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oZCxmKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYil7cmV0dXJuIGEuY29uc3VtZUxlbmd0aE9yUGVyY2VudChiKXx8YS5jb25zdW1lVG9rZW4oL15hdXRvLyxiKX1mdW5jdGlvbiBkKGIpe3ZhciBkPWEuY29uc3VtZUxpc3QoW2EuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXnJlY3QvKSksYS5pZ25vcmUoYS5jb25zdW1lVG9rZW4uYmluZChudWxsLC9eXCgvKSksYS5jb25zdW1lUmVwZWF0ZWQuYmluZChudWxsLGMsL14sLyksYS5pZ25vcmUoYS5jb25zdW1lVG9rZW4uYmluZChudWxsLC9eXCkvKSldLGIpO3JldHVybiBkJiY0PT1kWzBdLmxlbmd0aD9kWzBdOnZvaWQgMH1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShkLGYpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9MDtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1rP2JbYysrXTphfSl9fWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gZShiKXtpZihiPWIudG9Mb3dlckNhc2UoKS50cmltKCksIm5vbmUiPT1iKXJldHVybltdO2Zvcih2YXIgYyxkPS9ccyooXHcrKVwoKFteKV0qKVwpL2csZT1bXSxmPTA7Yz1kLmV4ZWMoYik7KXtpZihjLmluZGV4IT1mKXJldHVybjtmPWMuaW5kZXgrY1swXS5sZW5ndGg7dmFyIGc9Y1sxXSxoPW5bZ107aWYoIWgpcmV0dXJuO3ZhciBpPWNbMl0uc3BsaXQoIiwiKSxqPWhbMF07aWYoai5sZW5ndGg8aS5sZW5ndGgpcmV0dXJuO2Zvcih2YXIgaz1bXSxvPTA7bzxqLmxlbmd0aDtvKyspe3ZhciBwLHE9aVtvXSxyPWpbb107aWYocD1xP3tBOmZ1bmN0aW9uKGIpe3JldHVybiIwIj09Yi50cmltKCk/bTphLnBhcnNlQW5nbGUoYil9LE46YS5wYXJzZU51bWJlcixUOmEucGFyc2VMZW5ndGhPclBlcmNlbnQsTDphLnBhcnNlTGVuZ3RofVtyLnRvVXBwZXJDYXNlKCldKHEpOnthOm0sbjprWzBdLHQ6bH1bcl0sdm9pZCAwPT09cClyZXR1cm47ay5wdXNoKHApfWlmKGUucHVzaCh7dDpnLGQ6a30pLGQubGFzdEluZGV4PT1iLmxlbmd0aClyZXR1cm4gZX19ZnVuY3Rpb24gZihhKXtyZXR1cm4gYS50b0ZpeGVkKDYpLnJlcGxhY2UoIi4wMDAwMDAiLCIiKX1mdW5jdGlvbiBnKGIsYyl7aWYoYi5kZWNvbXBvc2l0aW9uUGFpciE9PWMpe2IuZGVjb21wb3NpdGlvblBhaXI9Yzt2YXIgZD1hLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uKGIpfWlmKGMuZGVjb21wb3NpdGlvblBhaXIhPT1iKXtjLmRlY29tcG9zaXRpb25QYWlyPWI7dmFyIGU9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihjKX1yZXR1cm4gbnVsbD09ZFswXXx8bnVsbD09ZVswXT9bWyExXSxbITBdLGZ1bmN0aW9uKGEpe3JldHVybiBhP2NbMF0uZDpiWzBdLmR9XTooZFswXS5wdXNoKDApLGVbMF0ucHVzaCgxKSxbZCxlLGZ1bmN0aW9uKGIpe3ZhciBjPWEucXVhdChkWzBdWzNdLGVbMF1bM10sYls1XSksZz1hLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKSxoPWcubWFwKGYpLmpvaW4oIiwiKTtyZXR1cm4gaH1dKX1mdW5jdGlvbiBoKGEpe3JldHVybiBhLnJlcGxhY2UoL1t4eV0vLCIiKX1mdW5jdGlvbiBpKGEpe3JldHVybiBhLnJlcGxhY2UoLyh4fHl8enwzZCk/JC8sIjNkIil9ZnVuY3Rpb24gaihiLGMpe3ZhciBkPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24mJiEwLGU9ITE7aWYoIWIubGVuZ3RofHwhYy5sZW5ndGgpe2IubGVuZ3RofHwoZT0hMCxiPWMsYz1bXSk7Zm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqPWJbZl0udCxrPWJbZl0uZCxsPSJzY2FsZSI9PWouc3Vic3RyKDAsNSk/MTowO2MucHVzaCh7dDpqLGQ6ay5tYXAoZnVuY3Rpb24oYSl7aWYoIm51bWJlciI9PXR5cGVvZiBhKXJldHVybiBsO3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbY109bDtyZXR1cm4gYn0pfSl9fXZhciBtPWZ1bmN0aW9uKGEsYil7cmV0dXJuInBlcnNwZWN0aXZlIj09YSYmInBlcnNwZWN0aXZlIj09Ynx8KCJtYXRyaXgiPT1hfHwibWF0cml4M2QiPT1hKSYmKCJtYXRyaXgiPT1ifHwibWF0cml4M2QiPT1iKX0sbz1bXSxwPVtdLHE9W107aWYoYi5sZW5ndGghPWMubGVuZ3RoKXtpZighZClyZXR1cm47dmFyIHI9ZyhiLGMpO289W3JbMF1dLHA9W3JbMV1dLHE9W1sibWF0cml4IixbclsyXV1dXX1lbHNlIGZvcih2YXIgZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaixzPWJbZl0udCx0PWNbZl0udCx1PWJbZl0uZCx2PWNbZl0uZCx3PW5bc10seD1uW3RdO2lmKG0ocyx0KSl7aWYoIWQpcmV0dXJuO3ZhciByPWcoW2JbZl1dLFtjW2ZdXSk7by5wdXNoKHJbMF0pLHAucHVzaChyWzFdKSxxLnB1c2goWyJtYXRyaXgiLFtyWzJdXV0pfWVsc2V7aWYocz09dClqPXM7ZWxzZSBpZih3WzJdJiZ4WzJdJiZoKHMpPT1oKHQpKWo9aChzKSx1PXdbMl0odSksdj14WzJdKHYpO2Vsc2V7aWYoIXdbMV18fCF4WzFdfHxpKHMpIT1pKHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhiLGMpO289W3JbMF1dLHA9W3JbMV1dLHE9W1sibWF0cml4IixbclsyXV1dXTticmVha31qPWkocyksdT13WzFdKHUpLHY9eFsxXSh2KX1mb3IodmFyIHk9W10sej1bXSxBPVtdLEI9MDtCPHUubGVuZ3RoO0IrKyl7dmFyIEM9Im51bWJlciI9PXR5cGVvZiB1W0JdP2EubWVyZ2VOdW1iZXJzOmEubWVyZ2VEaW1lbnNpb25zLHI9Qyh1W0JdLHZbQl0pO3lbQl09clswXSx6W0JdPXJbMV0sQS5wdXNoKHJbMl0pfW8ucHVzaCh5KSxwLnB1c2goeikscS5wdXNoKFtqLEFdKX19aWYoZSl7dmFyIEQ9bztvPXAscD1EfXJldHVybltvLHAsZnVuY3Rpb24oYSl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5tYXAoZnVuY3Rpb24oYSxjKXtyZXR1cm4gcVtiXVsxXVtjXShhKX0pLmpvaW4oIiwiKTtyZXR1cm4ibWF0cml4Ij09cVtiXVswXSYmMTY9PWMuc3BsaXQoIiwiKS5sZW5ndGgmJihxW2JdWzBdPSJtYXRyaXgzZCIpLHFbYl1bMF0rIigiK2MrIikifSkuam9pbigiICIpfV19dmFyIGs9bnVsbCxsPXtweDowfSxtPXtkZWc6MH0sbj17bWF0cml4OlsiTk5OTk5OIixbayxrLDAsMCxrLGssMCwwLDAsMCwxLDAsayxrLDAsMV0sZF0sbWF0cml4M2Q6WyJOTk5OTk5OTk5OTk5OTk5OIixkXSxyb3RhdGU6WyJBIl0scm90YXRleDpbIkEiXSxyb3RhdGV5OlsiQSJdLHJvdGF0ZXo6WyJBIl0scm90YXRlM2Q6WyJOTk5BIl0scGVyc3BlY3RpdmU6WyJMIl0sc2NhbGU6WyJObiIsYyhbayxrLDFdKSxkXSxzY2FsZXg6WyJOIixjKFtrLDEsMV0pLGMoW2ssMV0pXSxzY2FsZXk6WyJOIixjKFsxLGssMV0pLGMoWzEsa10pXSxzY2FsZXo6WyJOIixjKFsxLDEsa10pXSxzY2FsZTNkOlsiTk5OIixkXSxza2V3OlsiQWEiLG51bGwsZF0sc2tld3g6WyJBIixudWxsLGMoW2ssbV0pXSxza2V3eTpbIkEiLG51bGwsYyhbbSxrXSldLHRyYW5zbGF0ZTpbIlR0IixjKFtrLGssbF0pLGRdLHRyYW5zbGF0ZXg6WyJUIixjKFtrLGwsbF0pLGMoW2ssbF0pXSx0cmFuc2xhdGV5OlsiVCIsYyhbbCxrLGxdKSxjKFtsLGtdKV0sdHJhbnNsYXRlejpbIkwiLGMoW2wsbCxrXSldLHRyYW5zbGF0ZTNkOlsiVFRMIixkXX07YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGosWyJ0cmFuc2Zvcm0iXSl9KGQsZiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKX0pfXZhciBkPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfX0oZCxmKX0oKSwhZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5hbmltYXRlKFtdKS5vbmNhbmNlbCl7dmFyIGE7aWYod2luZG93LnBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3cpdmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9O2Vsc2UgdmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX07dmFyIGI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGltZT1iLHRoaXMudGltZWxpbmVUaW1lPWMsdGhpcy50eXBlPSJjYW5jZWwiLHRoaXMuYnViYmxlcz0hMSx0aGlzLmNhbmNlbGFibGU9ITEsdGhpcy5jdXJyZW50VGFyZ2V0PWEsdGhpcy5kZWZhdWx0UHJldmVudGVkPSExLHRoaXMuZXZlbnRQaGFzZT1FdmVudC5BVF9UQVJHRVQsdGhpcy50aW1lU3RhbXA9RGF0ZS5ub3coKX0sYz13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTt3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihkLGUpe3ZhciBmPWMuY2FsbCh0aGlzLGQsZSk7Zi5fY2FuY2VsSGFuZGxlcnM9W10sZi5vbmNhbmNlbD1udWxsO3ZhciBnPWYuY2FuY2VsO2YuY2FuY2VsPWZ1bmN0aW9uKCl7Zy5jYWxsKHRoaXMpO3ZhciBjPW5ldyBiKHRoaXMsbnVsbCxhKCkpLGQ9dGhpcy5fY2FuY2VsSGFuZGxlcnMuY29uY2F0KHRoaXMub25jYW5jZWw/W3RoaXMub25jYW5jZWxdOltdKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuY2FsbChjLnRhcmdldCxjKX0pfSwwKX07dmFyIGg9Zi5hZGRFdmVudExpc3RlbmVyO2YuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBiJiYiY2FuY2VsIj09YT90aGlzLl9jYW5jZWxIYW5kbGVycy5wdXNoKGIpOmguY2FsbCh0aGlzLGEsYil9O3ZhciBpPWYucmVtb3ZlRXZlbnRMaXN0ZW5lcjtyZXR1cm4gZi5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7aWYoImNhbmNlbCI9PWEpe3ZhciBjPXRoaXMuX2NhbmNlbEhhbmRsZXJzLmluZGV4T2YoYik7Yz49MCYmdGhpcy5fY2FuY2VsSGFuZGxlcnMuc3BsaWNlKGMsMSl9ZWxzZSBpLmNhbGwodGhpcyxhLGIpfSxmfX19KCksZnVuY3Rpb24oYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGM9bnVsbCxkPSExO3RyeXt2YXIgZT1nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoIm9wYWNpdHkiKSxmPSIwIj09ZT8iMSI6IjAiO2M9Yi5hbmltYXRlKHtvcGFjaXR5OltmLGZdfSx7ZHVyYXRpb246MX0pLGMuY3VycmVudFRpbWU9MCxkPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpPT1mfWNhdGNoKGcpe31maW5hbGx5e2MmJmMuY2FuY2VsKCl9aWYoIWQpe3ZhciBoPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHdpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8bnVsbD09PWJ8fChiPWEuY29udmVydFRvQXJyYXlGb3JtKGIpKSxoLmNhbGwodGhpcyxiLGMpfX19KGMpLCFmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj13aW5kb3cuZG9jdW1lbnQudGltZWxpbmU7Yi5jdXJyZW50VGltZT1hLGIuX2Rpc2NhcmRBbmltYXRpb25zKCksMD09Yi5fYW5pbWF0aW9ucy5sZW5ndGg/Zj0hMTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCk7Cn12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYil7d2luZG93LmRvY3VtZW50LnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSxhKGIpLHdpbmRvdy5kb2N1bWVudC50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCl9KX0sYi5BbmltYXRpb25UaW1lbGluZT1mdW5jdGlvbigpe3RoaXMuX2FuaW1hdGlvbnM9W10sdGhpcy5jdXJyZW50VGltZT12b2lkIDB9LGIuQW5pbWF0aW9uVGltZWxpbmUucHJvdG90eXBlPXtnZXRBbmltYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2NhcmRBbmltYXRpb25zKCksdGhpcy5fYW5pbWF0aW9ucy5zbGljZSgpfSxfdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzOmZ1bmN0aW9uKCl7Yi5hbmltYXRpb25zV2l0aFByb21pc2VzPWIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuX3VwZGF0ZVByb21pc2VzKCl9KX0sX2Rpc2NhcmRBbmltYXRpb25zOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksdGhpcy5fYW5pbWF0aW9ucz10aGlzLl9hbmltYXRpb25zLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4iZmluaXNoZWQiIT1hLnBsYXlTdGF0ZSYmImlkbGUiIT1hLnBsYXlTdGF0ZX0pfSxfcGxheTpmdW5jdGlvbihhKXt2YXIgYz1uZXcgYi5BbmltYXRpb24oYSx0aGlzKTtyZXR1cm4gdGhpcy5fYW5pbWF0aW9ucy5wdXNoKGMpLGIucmVzdGFydFdlYkFuaW1hdGlvbnNOZXh0VGljaygpLGMuX3VwZGF0ZVByb21pc2VzKCksYy5fYW5pbWF0aW9uLnBsYXkoKSxjLl91cGRhdGVQcm9taXNlcygpLGN9LHBsYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEucmVtb3ZlKCksdGhpcy5fcGxheShhKX19O3ZhciBmPSExO2IucmVzdGFydFdlYkFuaW1hdGlvbnNOZXh0VGljaz1mdW5jdGlvbigpe2Z8fChmPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShkKSl9O3ZhciBnPW5ldyBiLkFuaW1hdGlvblRpbWVsaW5lO2IudGltZWxpbmU9Zzt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5kb2N1bWVudCwidGltZWxpbmUiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGd9fSl9Y2F0Y2goaCl7fXRyeXt3aW5kb3cuZG9jdW1lbnQudGltZWxpbmU9Z31jYXRjaChoKXt9fShjLGUsZiksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9d2luZG93LmRvY3VtZW50LnRpbWVsaW5lLl9wbGF5KGMpO3RoaXMuX2NoaWxkQW5pbWF0aW9ucy5wdXNoKGQpLGQucGxheWJhY2tSYXRlPXRoaXMucGxheWJhY2tSYXRlLHRoaXMuX3BhdXNlZCYmZC5wYXVzZSgpLGMuX2FuaW1hdGlvbj10aGlzLmVmZmVjdC5fYW5pbWF0aW9uLHRoaXMuX2FycmFuZ2VDaGlsZHJlbihkLGEpLHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0JiYoYSs9Yi5ncm91cENoaWxkRHVyYXRpb24oYykpfS5iaW5kKHRoaXMpKX19LF9hcnJhbmdlQ2hpbGRyZW46ZnVuY3Rpb24oYSxiKXtudWxsPT09dGhpcy5zdGFydFRpbWU/YS5jdXJyZW50VGltZT10aGlzLmN1cnJlbnRUaW1lLWIvdGhpcy5wbGF5YmFja1JhdGU6YS5zdGFydFRpbWUhPT10aGlzLnN0YXJ0VGltZStiL3RoaXMucGxheWJhY2tSYXRlJiYoYS5zdGFydFRpbWU9dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSl9LGdldCB0aW1lbGluZSgpe3JldHVybiB0aGlzLl90aW1lbGluZX0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9hbmltYXRpb24/dGhpcy5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSJ9LGdldCBmaW5pc2hlZCgpe3JldHVybiB3aW5kb3cuUHJvbWlzZT8odGhpcy5fZmluaXNoZWRQcm9taXNlfHwoLTE9PWIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5pbmRleE9mKHRoaXMpJiZiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMucHVzaCh0aGlzKSx0aGlzLl9maW5pc2hlZFByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oYSxiKXt0aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlPWZ1bmN0aW9uKCl7YSh0aGlzKX0sdGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlPWZ1bmN0aW9uKCl7Yih7dHlwZTpET01FeGNlcHRpb24uQUJPUlRfRVJSLG5hbWU6IkFib3J0RXJyb3IifSl9fS5iaW5kKHRoaXMpKSwiZmluaXNoZWQiPT10aGlzLnBsYXlTdGF0ZSYmdGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZSgpKSx0aGlzLl9maW5pc2hlZFByb21pc2UpOihjb25zb2xlLndhcm4oIkFuaW1hdGlvbiBQcm9taXNlcyByZXF1aXJlIEphdmFTY3JpcHQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpLG51bGwpfSxnZXQgcmVhZHkoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX3JlYWR5UHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fcmVhZHlQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZVJlYWR5UHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdFJlYWR5UHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksInBlbmRpbmciIT09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKSksdGhpcy5fcmVhZHlQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IG9uZmluaXNoKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbi5vbmZpbmlzaH0sc2V0IG9uZmluaXNoKGEpeyJmdW5jdGlvbiI9PXR5cGVvZiBhP3RoaXMuX2FuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbihiKXtiLnRhcmdldD10aGlzLGEuY2FsbCh0aGlzLGIpfS5iaW5kKHRoaXMpOnRoaXMuX2FuaW1hdGlvbi5vbmZpbmlzaD1hfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7ImZ1bmN0aW9uIj09dHlwZW9mIGE/dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPWZ1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPWF9LGdldCBjdXJyZW50VGltZSgpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lO3JldHVybiB0aGlzLl91cGRhdGVQcm9taXNlcygpLGF9LHNldCBjdXJyZW50VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5jdXJyZW50VGltZT1pc0Zpbml0ZShhKT9hOk1hdGguc2lnbihhKSpOdW1iZXIuTUFYX1ZBTFVFLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGIsYyl7Yi5jdXJyZW50VGltZT1hLWN9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxnZXQgc3RhcnRUaW1lKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWV9LHNldCBzdGFydFRpbWUoYSl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb24uc3RhcnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLnN0YXJ0VGltZT1hK2N9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbi5wbGF5YmFja1JhdGV9LHNldCBwbGF5YmFja1JhdGUoYSl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYj10aGlzLmN1cnJlbnRUaW1lO3RoaXMuX2FuaW1hdGlvbi5wbGF5YmFja1JhdGU9YSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYil7Yi5wbGF5YmFja1JhdGU9YX0pLCJwYXVzZWQiIT10aGlzLnBsYXlTdGF0ZSYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSYmdGhpcy5wbGF5KCksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZVRpbWVGcmFjdGlvbihhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGQpLGUsZCkpLChudWxsPT1lfHxpc05hTihlKSkmJnRoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpfX19LHdpbmRvdy5BbmltYXRpb249Yi5BbmltYXRpb259KGMsZSxmKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspe3ZhciBiPWkuc2hpZnQoKTtiLl91cGRhdGVDaGlsZHJlbigpLGE9ITB9cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXt3aW5kb3cuZG9jdW1lbnQudGltZWxpbmUuX3VwZGF0ZUFuaW1hdGlvbnNQcm9taXNlcygpO3ZhciBhPWouYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlKCkmJihhPWouYXBwbHkodGhpcyxhcmd1bWVudHMpKSx3aW5kb3cuZG9jdW1lbnQudGltZWxpbmUuX3VwZGF0ZUFuaW1hdGlvbnNQcm9taXNlcygpLGF9fSksd2luZG93LktleWZyYW1lRWZmZWN0PWIuS2V5ZnJhbWVFZmZlY3Qsd2luZG93LkVsZW1lbnQucHJvdG90eXBlLmdldEFuaW1hdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQudGltZWxpbmUuZ2V0QW5pbWF0aW9ucygpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PWEuZWZmZWN0JiZhLmVmZmVjdC50YXJnZXQ9PXRoaXN9LmJpbmQodGhpcykpfX0oYyxlLGYpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVUaW1lRnJhY3Rpb24oYS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihoKSxkLGgpLGlzTmFOKGQpJiYoZD1udWxsKSksZCE9PWkmJihnP2MoZCxlLGIuZWZmZWN0KTpjKGQsYi5lZmZlY3QsYi5lZmZlY3QuX2FuaW1hdGlvbikpLGk9ZH07ai5fYW5pbWF0aW9uPWIsai5fcmVnaXN0ZXJlZD0hMSxqLl9zZXF1ZW5jZU51bWJlcj1mKyssYi5fY2FsbGJhY2s9aixkKGopfTt2YXIgZz1bXSxoPSExO2IuQW5pbWF0aW9uLnByb3RvdHlwZS5fcmVnaXN0ZXI9ZnVuY3Rpb24oKXt0aGlzLl9jYWxsYmFjayYmZCh0aGlzLl9jYWxsYmFjayl9fShjLGUsZiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO3JldHVybiBjJiYicGVuZGluZyIhPWMucGxheVN0YXRlJiZjLmVmZmVjdD9udWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZVRpbWVGcmFjdGlvbihhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGUpLC0xLGUpLGlzTmFOKGIpfHxudWxsPT1iKT8oYy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EuY3VycmVudFRpbWU9LTF9KSx2b2lkIGMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpKTp2b2lkIDA6dm9pZCAwfSxnPW5ldyBLZXlmcmFtZUVmZmVjdChudWxsLFtdLGMuX3RpbWluZyxjLl9pZCk7cmV0dXJuIGcub25zYW1wbGU9ZixkPWIudGltZWxpbmUuX3BsYXkoZyl9LGIuYmluZEFuaW1hdGlvbkZvckdyb3VwPWZ1bmN0aW9uKGEpe2EuX2FuaW1hdGlvbi5fd3JhcHBlcj1hLGEuX2lzR3JvdXA9ITAsYi5hd2FpdFN0YXJ0VGltZShhKSxhLl9jb25zdHJ1Y3RDaGlsZEFuaW1hdGlvbnMoKSxhLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sYi5ncm91cENoaWxkRHVyYXRpb249ZH0oYyxlLGYpLGJbInRydWUiXT1hfSh7fSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKTsKCi8qKgpAbGljZW5zZSBAbm9jb21waWxlCkNvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCihmdW5jdGlvbigpey8qCgogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwondXNlIHN0cmljdCc7dmFyIG4scD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09dGhpcz90aGlzOiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZudWxsIT1nbG9iYWw/Z2xvYmFsOnRoaXMsYWE9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihhLGIsYyl7YSE9QXJyYXkucHJvdG90eXBlJiZhIT1PYmplY3QucHJvdG90eXBlJiYoYVtiXT1jLnZhbHVlKX07ZnVuY3Rpb24gYmEoKXtiYT1mdW5jdGlvbigpe307cC5TeW1ib2x8fChwLlN5bWJvbD1jYSl9dmFyIGNhPWZ1bmN0aW9uKCl7dmFyIGE9MDtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuImpzY29tcF9zeW1ib2xfIisoYnx8IiIpK2ErK319KCk7CmZ1bmN0aW9uIGRhKCl7YmEoKTt2YXIgYT1wLlN5bWJvbC5pdGVyYXRvcjthfHwoYT1wLlN5bWJvbC5pdGVyYXRvcj1wLlN5bWJvbCgiaXRlcmF0b3IiKSk7ImZ1bmN0aW9uIiE9dHlwZW9mIEFycmF5LnByb3RvdHlwZVthXSYmYWEoQXJyYXkucHJvdG90eXBlLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlYSh0aGlzKX19KTtkYT1mdW5jdGlvbigpe319ZnVuY3Rpb24gZWEoYSl7dmFyIGI9MDtyZXR1cm4gZmEoZnVuY3Rpb24oKXtyZXR1cm4gYjxhLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTphW2IrK119Ontkb25lOiEwfX0pfWZ1bmN0aW9uIGZhKGEpe2RhKCk7YT17bmV4dDphfTthW3AuU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtyZXR1cm4gYX1mdW5jdGlvbiBpYShhKXtkYSgpO3ZhciBiPWFbU3ltYm9sLml0ZXJhdG9yXTtyZXR1cm4gYj9iLmNhbGwoYSk6ZWEoYSl9CmZ1bmN0aW9uIGphKGEpe2Zvcih2YXIgYixjPVtdOyEoYj1hLm5leHQoKSkuZG9uZTspYy5wdXNoKGIudmFsdWUpO3JldHVybiBjfQooZnVuY3Rpb24oKXtpZighZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTthLmluaXRFdmVudCgiZm9vIiwhMCwhMCk7YS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBhLmRlZmF1bHRQcmV2ZW50ZWR9KCkpe3ZhciBhPUV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdDtFdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGFibGUmJihhLmNhbGwodGhpcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImRlZmF1bHRQcmV2ZW50ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sY29uZmlndXJhYmxlOiEwfSkpfX12YXIgYj0vVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZighd2luZG93LkN1c3RvbUV2ZW50fHxiJiYiZnVuY3Rpb24iIT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudCl3aW5kb3cuQ3VzdG9tRXZlbnQ9ZnVuY3Rpb24oYSxiKXtiPWJ8fHt9O3ZhciBjPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpOwpjLmluaXRDdXN0b21FdmVudChhLCEhYi5idWJibGVzLCEhYi5jYW5jZWxhYmxlLGIuZGV0YWlsKTtyZXR1cm4gY30sd2luZG93LkN1c3RvbUV2ZW50LnByb3RvdHlwZT13aW5kb3cuRXZlbnQucHJvdG90eXBlO2lmKCF3aW5kb3cuRXZlbnR8fGImJiJmdW5jdGlvbiIhPT10eXBlb2Ygd2luZG93LkV2ZW50KXt2YXIgYz13aW5kb3cuRXZlbnQ7d2luZG93LkV2ZW50PWZ1bmN0aW9uKGEsYil7Yj1ifHx7fTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTtjLmluaXRFdmVudChhLCEhYi5idWJibGVzLCEhYi5jYW5jZWxhYmxlKTtyZXR1cm4gY307aWYoYylmb3IodmFyIGQgaW4gYyl3aW5kb3cuRXZlbnRbZF09Y1tkXTt3aW5kb3cuRXZlbnQucHJvdG90eXBlPWMucHJvdG90eXBlfWlmKCF3aW5kb3cuTW91c2VFdmVudHx8YiYmImZ1bmN0aW9uIiE9PXR5cGVvZiB3aW5kb3cuTW91c2VFdmVudCl7Yj13aW5kb3cuTW91c2VFdmVudDt3aW5kb3cuTW91c2VFdmVudD1mdW5jdGlvbihhLApiKXtiPWJ8fHt9O3ZhciBjPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50Iik7Yy5pbml0TW91c2VFdmVudChhLCEhYi5idWJibGVzLCEhYi5jYW5jZWxhYmxlLGIudmlld3x8d2luZG93LGIuZGV0YWlsLGIuc2NyZWVuWCxiLnNjcmVlblksYi5jbGllbnRYLGIuY2xpZW50WSxiLmN0cmxLZXksYi5hbHRLZXksYi5zaGlmdEtleSxiLm1ldGFLZXksYi5idXR0b24sYi5yZWxhdGVkVGFyZ2V0KTtyZXR1cm4gY307aWYoYilmb3IoZCBpbiBiKXdpbmRvdy5Nb3VzZUV2ZW50W2RdPWJbZF07d2luZG93Lk1vdXNlRXZlbnQucHJvdG90eXBlPWIucHJvdG90eXBlfUFycmF5LmZyb218fChBcnJheS5mcm9tPWZ1bmN0aW9uKGEpe3JldHVybltdLnNsaWNlLmNhbGwoYSl9KTtPYmplY3QuYXNzaWdufHwoT2JqZWN0LmFzc2lnbj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxkPTAsZTtkPGMubGVuZ3RoO2QrKylpZihlPWNbZF0pZm9yKHZhciBmPQphLG09ZSxxPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG0pLHg9MDt4PHEubGVuZ3RoO3grKyllPXFbeF0sZltlXT1tW2VdO3JldHVybiBhfSl9KSh3aW5kb3cuV2ViQ29tcG9uZW50cyk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe31mdW5jdGlvbiBiKGEsYil7aWYoIWEuY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuW107c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgTm9kZS5ET0NVTUVOVF9OT0RFOnJldHVybiB1YS5jYWxsKGEsYik7Y2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6cmV0dXJuIGxiLmNhbGwoYSxiKTtkZWZhdWx0OnJldHVybiBVLmNhbGwoYSxiKX19dmFyIGM9InVuZGVmaW5lZCI9PT10eXBlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCxkPSEoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmNsb25lTm9kZSgpaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSxlPSExOy9UcmlkZW50Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtpZihhIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClmb3IodmFyIGQ7ZD1hLmZpcnN0Q2hpbGQ7KWMuY2FsbCh0aGlzLGQsYik7ZWxzZSBjLmNhbGwodGhpcywKYSxiKTtyZXR1cm4gYX1lPSEwO3ZhciBiPU5vZGUucHJvdG90eXBlLmNsb25lTm9kZTtOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGU9ZnVuY3Rpb24oYSl7YT1iLmNhbGwodGhpcyxhKTt0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCYmKGEuX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlKTtyZXR1cm4gYX07RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbD1IVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yPUhUTUxFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLHtub2RlVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERX0sY29uZmlndXJhYmxlOiEwfSxsb2NhbE5hbWU6e2dldDpmdW5jdGlvbigpe30sCmNvbmZpZ3VyYWJsZTohMH0sbm9kZU5hbWU6e2dldDpmdW5jdGlvbigpe3JldHVybiIjZG9jdW1lbnQtZnJhZ21lbnQifSxjb25maWd1cmFibGU6ITB9fSk7dmFyIGM9Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlO05vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1hO3ZhciBkPU5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO05vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGIpe2IgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P2EuY2FsbCh0aGlzLGIsbnVsbCk6ZC5jYWxsKHRoaXMsYik7cmV0dXJuIGJ9O3ZhciBmPU5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkLGc9Tm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkO05vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZD1mdW5jdGlvbihiLGMpe2IgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50PyhhLmNhbGwodGhpcyxiLGMpLGYuY2FsbCh0aGlzLGMpKTpnLmNhbGwodGhpcyxiLGMpO3JldHVybiBjfTtEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD0KZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNyZWF0ZUVsZW1lbnQoImRmIik7YS5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7cmV0dXJuIGF9O3ZhciBoPURvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlO0RvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlPWZ1bmN0aW9uKGEsYil7Yj1oLmNhbGwodGhpcyxhLGJ8fCExKTthIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCYmKGIuX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlKTtyZXR1cm4gYn19KCk7dmFyIGY9Tm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlLGc9RG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQsaD1Eb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSxrPU5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkLGw9Tm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQsbT1Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQscT1ET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZywKeD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIpfHx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXJIVE1MfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5pbm5lckhUTUw9YX19LE09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuTm9kZS5wcm90b3R5cGUsImNoaWxkTm9kZXMiKXx8e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9fSxVPUVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwsdWE9RG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwsbGI9RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCxtYj1mdW5jdGlvbigpe2lmKCFjKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtiLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOwphLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYik7YT1hLmNsb25lTm9kZSghMCk7cmV0dXJuIDA9PT1hLmNvbnRlbnQuY2hpbGROb2Rlcy5sZW5ndGh8fDA9PT1hLmNvbnRlbnQuZmlyc3RDaGlsZC5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RofHxkfX0oKTtpZihjKXt2YXIgUz1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInRlbXBsYXRlIiksQz0hMCxWPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Vi50ZXh0Q29udGVudD0idGVtcGxhdGV7ZGlzcGxheTpub25lO30iO3ZhciBoYT1kb2N1bWVudC5oZWFkO2hhLmluc2VydEJlZm9yZShWLGhhLmZpcnN0RWxlbWVudENoaWxkKTthLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSk7dmFyIHZhPSFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5oYXNPd25Qcm9wZXJ0eSgiaW5uZXJIVE1MIik7YS5HPWZ1bmN0aW9uKGIpe2lmKCFiLmNvbnRlbnQmJmIubmFtZXNwYWNlVVJJPT09CmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkpe2IuY29udGVudD1TLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IodmFyIGM7Yz1iLmZpcnN0Q2hpbGQ7KWwuY2FsbChiLmNvbnRlbnQsYyk7aWYodmEpYi5fX3Byb3RvX189YS5wcm90b3R5cGU7ZWxzZSBpZihiLmNsb25lTm9kZT1mdW5jdGlvbihiKXtyZXR1cm4gYS5hKHRoaXMsYil9LEMpdHJ5e1AoYiksVyhiKX1jYXRjaChUZyl7Qz0hMX1hLkMoYi5jb250ZW50KX19O3ZhciBYPXtvcHRpb246WyJzZWxlY3QiXSx0aGVhZDpbInRhYmxlIl0sY29sOlsiY29sZ3JvdXAiLCJ0YWJsZSJdLHRyOlsidGJvZHkiLCJ0YWJsZSJdLHRoOlsidHIiLCJ0Ym9keSIsInRhYmxlIl0sdGQ6WyJ0ciIsInRib2R5IiwidGFibGUiXX0sUD1mdW5jdGlvbihiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiaW5uZXJIVE1MIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5iKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oYil7dmFyIGM9WFsoLzwoW2Etel1bXi9cMD5ceDIwXHRcclxuXGZdKykvaS5leGVjKGIpfHwKWyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV07aWYoYylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyliPSI8IitjW2RdKyI+IitiKyI8LyIrY1tkXSsiPiI7Uy5ib2R5LmlubmVySFRNTD1iO2ZvcihhLkMoUyk7dGhpcy5jb250ZW50LmZpcnN0Q2hpbGQ7KWsuY2FsbCh0aGlzLmNvbnRlbnQsdGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpO2I9Uy5ib2R5O2lmKGMpZm9yKGQ9MDtkPGMubGVuZ3RoO2QrKyliPWIubGFzdENoaWxkO2Zvcig7Yi5maXJzdENoaWxkOylsLmNhbGwodGhpcy5jb250ZW50LGIuZmlyc3RDaGlsZCl9LGNvbmZpZ3VyYWJsZTohMH0pfSxXPWZ1bmN0aW9uKGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJvdXRlckhUTUwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iPHRlbXBsYXRlPiIrdGhpcy5pbm5lckhUTUwrIjwvdGVtcGxhdGU+In0sc2V0OmZ1bmN0aW9uKGEpe2lmKHRoaXMucGFyZW50Tm9kZSl7Uy5ib2R5LmlubmVySFRNTD1hO2ZvcihhPXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Uy5ib2R5LmZpcnN0Q2hpbGQ7KWwuY2FsbChhLApTLmJvZHkuZmlyc3RDaGlsZCk7bS5jYWxsKHRoaXMucGFyZW50Tm9kZSxhLHRoaXMpfWVsc2UgdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBzZXQgdGhlICdvdXRlckhUTUwnIHByb3BlcnR5IG9uICdFbGVtZW50JzogVGhpcyBlbGVtZW50IGhhcyBubyBwYXJlbnQgbm9kZS4iKTt9LGNvbmZpZ3VyYWJsZTohMH0pfTtQKGEucHJvdG90eXBlKTtXKGEucHJvdG90eXBlKTthLkM9ZnVuY3Rpb24oYyl7Yz1iKGMsInRlbXBsYXRlIik7Zm9yKHZhciBkPTAsZT1jLmxlbmd0aCxmO2Q8ZSYmKGY9Y1tkXSk7ZCsrKWEuRyhmKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZnVuY3Rpb24oKXthLkMoZG9jdW1lbnQpfSk7RG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgYj1nLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsidGVtcGxhdGUiPT09Yi5sb2NhbE5hbWUmJmEuRyhiKTtyZXR1cm4gYn07RE9NUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmc9CmZ1bmN0aW9uKCl7dmFyIGI9cS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YS5DKGIpO3JldHVybiBifTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJpbm5lckhUTUwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmIodGhpcyl9LHNldDpmdW5jdGlvbihiKXt4LnNldC5jYWxsKHRoaXMsYik7YS5DKHRoaXMpfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO3ZhciBWZT0vWyZcdTAwQTAiXS9nLHljPS9bJlx1MDBBMDw+XS9nLHpjPWZ1bmN0aW9uKGEpe3N3aXRjaChhKXtjYXNlICImIjpyZXR1cm4iJmFtcDsiO2Nhc2UgIjwiOnJldHVybiImbHQ7IjtjYXNlICI+IjpyZXR1cm4iJmd0OyI7Y2FzZSAnIic6cmV0dXJuIiZxdW90OyI7Y2FzZSAiXHUwMGEwIjpyZXR1cm4iJm5ic3A7In19O1Y9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKyliW2FbY11dPSEwO3JldHVybiBifTt2YXIgV2U9VigiYXJlYSBiYXNlIGJyIGNvbCBjb21tYW5kIGVtYmVkIGhyIGltZyBpbnB1dCBrZXlnZW4gbGluayBtZXRhIHBhcmFtIHNvdXJjZSB0cmFjayB3YnIiLnNwbGl0KCIgIikpLApYZT1WKCJzdHlsZSBzY3JpcHQgeG1wIGlmcmFtZSBub2VtYmVkIG5vZnJhbWVzIHBsYWludGV4dCBub3NjcmlwdCIuc3BsaXQoIiAiKSksbmI9ZnVuY3Rpb24oYSxiKXsidGVtcGxhdGUiPT09YS5sb2NhbE5hbWUmJihhPWEuY29udGVudCk7Zm9yKHZhciBjPSIiLGQ9Yj9iKGEpOk0uZ2V0LmNhbGwoYSksZT0wLGY9ZC5sZW5ndGgsZztlPGYmJihnPWRbZV0pO2UrKyl7YTp7dmFyIGg9Zzt2YXIgaz1hO3ZhciBsPWI7c3dpdGNoKGgubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6Zm9yKHZhciBQPWgubG9jYWxOYW1lLG09IjwiK1AsVz1oLmF0dHJpYnV0ZXMscT0wO2s9V1txXTtxKyspbSs9IiAiK2submFtZSsnPSInK2sudmFsdWUucmVwbGFjZShWZSx6YykrJyInO20rPSI+IjtoPVdlW1BdP206bStuYihoLGwpKyI8LyIrUCsiPiI7YnJlYWsgYTtjYXNlIE5vZGUuVEVYVF9OT0RFOmg9aC5kYXRhO2g9ayYmWGVbay5sb2NhbE5hbWVdP2g6aC5yZXBsYWNlKHljLHpjKTticmVhayBhOwpjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOmg9Ilx4M2MhLS0iK2guZGF0YSsiLS1ceDNlIjticmVhayBhO2RlZmF1bHQ6dGhyb3cgd2luZG93LmNvbnNvbGUuZXJyb3IoaCksRXJyb3IoIm5vdCBpbXBsZW1lbnRlZCIpO319Yys9aH1yZXR1cm4gY319aWYoY3x8bWIpe2EuYT1mdW5jdGlvbihhLGIpe3ZhciBjPWYuY2FsbChhLCExKTt0aGlzLkcmJnRoaXMuRyhjKTtiJiYobC5jYWxsKGMuY29udGVudCxmLmNhbGwoYS5jb250ZW50LCEwKSksb2IoYy5jb250ZW50LGEuY29udGVudCkpO3JldHVybiBjfTt2YXIgb2I9ZnVuY3Rpb24oYyxkKXtpZihkLnF1ZXJ5U2VsZWN0b3JBbGwmJihkPWIoZCwidGVtcGxhdGUiKSwwIT09ZC5sZW5ndGgpKXtjPWIoYywidGVtcGxhdGUiKTtmb3IodmFyIGU9MCxmPWMubGVuZ3RoLGcsaDtlPGY7ZSsrKWg9ZFtlXSxnPWNbZV0sYSYmYS5HJiZhLkcoaCksbS5jYWxsKGcucGFyZW50Tm9kZSxZZS5jYWxsKGgsITApLGcpfX0sWWU9Tm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlPQpmdW5jdGlvbihiKXtpZighZSYmZCYmdGhpcyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpaWYoYil2YXIgYz1aZS5jYWxsKHRoaXMub3duZXJEb2N1bWVudCx0aGlzLCEwKTtlbHNlIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Vsc2UgdGhpcy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYidGVtcGxhdGUiPT09dGhpcy5sb2NhbE5hbWUmJnRoaXMubmFtZXNwYWNlVVJJPT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJP2M9YS5hKHRoaXMsYik6Yz1mLmNhbGwodGhpcyxiKTtiJiZvYihjLHRoaXMpO3JldHVybiBjfSxaZT1Eb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZT1mdW5jdGlvbihjLGQpe2Q9ZHx8ITE7aWYoInRlbXBsYXRlIj09PWMubG9jYWxOYW1lKXJldHVybiBhLmEoYyxkKTt2YXIgZT1oLmNhbGwodGhpcyxjLGQpO2lmKGQpe29iKGUsYyk7Yz1iKGUsJ3NjcmlwdDpub3QoW3R5cGVdKSxzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCJdLHNjcmlwdFt0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiXScpOwpmb3IodmFyIGYsaz0wO2s8Yy5sZW5ndGg7aysrKXtmPWNba107ZD1nLmNhbGwoZG9jdW1lbnQsInNjcmlwdCIpO2QudGV4dENvbnRlbnQ9Zi50ZXh0Q29udGVudDtmb3IodmFyIGw9Zi5hdHRyaWJ1dGVzLFA9MCxXO1A8bC5sZW5ndGg7UCsrKVc9bFtQXSxkLnNldEF0dHJpYnV0ZShXLm5hbWUsVy52YWx1ZSk7bS5jYWxsKGYucGFyZW50Tm9kZSxkLGYpfX1yZXR1cm4gZX19YyYmKHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50PWEpfSkoKTt2YXIga2E9c2V0VGltZW91dDtmdW5jdGlvbiBsYSgpe31mdW5jdGlvbiBtYShhLGIpe3JldHVybiBmdW5jdGlvbigpe2EuYXBwbHkoYixhcmd1bWVudHMpfX1mdW5jdGlvbiByKGEpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldyIpO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJub3QgYSBmdW5jdGlvbiIpO3RoaXMudT0wO3RoaXMubWE9ITE7dGhpcy5oPXZvaWQgMDt0aGlzLkk9W107bmEoYSx0aGlzKX0KZnVuY3Rpb24gb2EoYSxiKXtmb3IoOzM9PT1hLnU7KWE9YS5oOzA9PT1hLnU/YS5JLnB1c2goYik6KGEubWE9ITAscGEoZnVuY3Rpb24oKXt2YXIgYz0xPT09YS51P2IuTmE6Yi5PYTtpZihudWxsPT09YykoMT09PWEudT9xYTpyYSkoYi5nYSxhLmgpO2Vsc2V7dHJ5e3ZhciBkPWMoYS5oKX1jYXRjaChlKXtyYShiLmdhLGUpO3JldHVybn1xYShiLmdhLGQpfX0pKX1mdW5jdGlvbiBxYShhLGIpe3RyeXtpZihiPT09YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBIHByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXRzZWxmLiIpO2lmKGImJigib2JqZWN0Ij09PXR5cGVvZiBifHwiZnVuY3Rpb24iPT09dHlwZW9mIGIpKXt2YXIgYz1iLnRoZW47aWYoYiBpbnN0YW5jZW9mIHIpe2EudT0zO2EuaD1iO3NhKGEpO3JldHVybn1pZigiZnVuY3Rpb24iPT09dHlwZW9mIGMpe25hKG1hKGMsYiksYSk7cmV0dXJufX1hLnU9MTthLmg9YjtzYShhKX1jYXRjaChkKXtyYShhLGQpfX0KZnVuY3Rpb24gcmEoYSxiKXthLnU9MjthLmg9YjtzYShhKX1mdW5jdGlvbiBzYShhKXsyPT09YS51JiYwPT09YS5JLmxlbmd0aCYmcGEoZnVuY3Rpb24oKXthLm1hfHwidW5kZWZpbmVkIiE9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlJiZjb25zb2xlLndhcm4oIlBvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjoiLGEuaCl9KTtmb3IodmFyIGI9MCxjPWEuSS5sZW5ndGg7YjxjO2IrKylvYShhLGEuSVtiXSk7YS5JPW51bGx9ZnVuY3Rpb24gdGEoYSxiLGMpe3RoaXMuTmE9ImZ1bmN0aW9uIj09PXR5cGVvZiBhP2E6bnVsbDt0aGlzLk9hPSJmdW5jdGlvbiI9PT10eXBlb2YgYj9iOm51bGw7dGhpcy5nYT1jfWZ1bmN0aW9uIG5hKGEsYil7dmFyIGM9ITE7dHJ5e2EoZnVuY3Rpb24oYSl7Y3x8KGM9ITAscWEoYixhKSl9LGZ1bmN0aW9uKGEpe2N8fChjPSEwLHJhKGIsYSkpfSl9Y2F0Y2goZCl7Y3x8KGM9ITAscmEoYixkKSl9fQpyLnByb3RvdHlwZVsiY2F0Y2giXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsYSl9O3IucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihsYSk7b2EodGhpcyxuZXcgdGEoYSxiLGMpKTtyZXR1cm4gY307ci5wcm90b3R5cGVbImZpbmFsbHkiXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbnN0cnVjdG9yO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24oYyl7cmV0dXJuIGIucmVzb2x2ZShhKCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gY30pfSxmdW5jdGlvbihjKXtyZXR1cm4gYi5yZXNvbHZlKGEoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBiLnJlamVjdChjKX0pfSl9OwpmdW5jdGlvbiB3YShhKXtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBkKGEsZyl7dHJ5e2lmKGcmJigib2JqZWN0Ij09PXR5cGVvZiBnfHwiZnVuY3Rpb24iPT09dHlwZW9mIGcpKXt2YXIgaD1nLnRoZW47aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBoKXtoLmNhbGwoZyxmdW5jdGlvbihiKXtkKGEsYil9LGMpO3JldHVybn19ZVthXT1nOzA9PT0tLWYmJmIoZSl9Y2F0Y2gobSl7YyhtKX19aWYoIWF8fCJ1bmRlZmluZWQiPT09dHlwZW9mIGEubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXkiKTt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGIoW10pO2Zvcih2YXIgZj1lLmxlbmd0aCxnPTA7ZzxlLmxlbmd0aDtnKyspZChnLGVbZ10pfSl9CmZ1bmN0aW9uIHhhKGEpe3JldHVybiBhJiYib2JqZWN0Ij09PXR5cGVvZiBhJiZhLmNvbnN0cnVjdG9yPT09cj9hOm5ldyByKGZ1bmN0aW9uKGIpe2IoYSl9KX1mdW5jdGlvbiB5YShhKXtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oYixjKXtjKGEpfSl9ZnVuY3Rpb24gemEoYSl7cmV0dXJuIG5ldyByKGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKWFbZF0udGhlbihiLGMpfSl9dmFyIHBhPSJmdW5jdGlvbiI9PT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZmdW5jdGlvbihhKXtzZXRJbW1lZGlhdGUoYSl9fHxmdW5jdGlvbihhKXtrYShhLDApfTsvKgoKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KaWYoIXdpbmRvdy5Qcm9taXNlKXt3aW5kb3cuUHJvbWlzZT1yO3IucHJvdG90eXBlLnRoZW49ci5wcm90b3R5cGUudGhlbjtyLmFsbD13YTtyLnJhY2U9emE7ci5yZXNvbHZlPXhhO3IucmVqZWN0PXlhO3ZhciBBYT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksQmE9W107KG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPUJhLmxlbmd0aCxiPTA7YjxhO2IrKylCYVtiXSgpO0JhLnNwbGljZSgwLGEpfSkpLm9ic2VydmUoQWEse2NoYXJhY3RlckRhdGE6ITB9KTtwYT1mdW5jdGlvbihhKXtCYS5wdXNoKGEpO0FhLnRleHRDb250ZW50PTA8QWEudGV4dENvbnRlbnQubGVuZ3RoPyIiOiJhIn19OyhmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYil7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQpcmV0dXJuIG5ldyBDdXN0b21FdmVudChhLGIpO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO2MuaW5pdEN1c3RvbUV2ZW50KGEsISFiLmJ1YmJsZXMsISFiLmNhbmNlbGFibGUsYi5kZXRhaWwpO3JldHVybiBjfWZ1bmN0aW9uIGMoYSl7aWYoTSlyZXR1cm4gYS5vd25lckRvY3VtZW50IT09ZG9jdW1lbnQ/YS5vd25lckRvY3VtZW50Om51bGw7dmFyIGI9YS5fX2ltcG9ydERvYztpZighYiYmYS5wYXJlbnROb2RlKXtiPWEucGFyZW50Tm9kZTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGIuY2xvc2VzdCliPWIuY2xvc2VzdCgibGlua1tyZWw9aW1wb3J0XSIpO2Vsc2UgZm9yKDshaChiKSYmKGI9Yi5wYXJlbnROb2RlKTspO2EuX19pbXBvcnREb2M9Yn1yZXR1cm4gYn1mdW5jdGlvbiBkKGEpe3ZhciBiPW0oZG9jdW1lbnQsImxpbmtbcmVsPWltcG9ydF06bm90KFtpbXBvcnQtZGVwZW5kZW5jeV0pIiksCmM9Yi5sZW5ndGg7Yz9xKGIsZnVuY3Rpb24oYil7cmV0dXJuIGcoYixmdW5jdGlvbigpezA9PT0tLWMmJmEoKX0pfSk6YSgpfWZ1bmN0aW9uIGUoYSl7ZnVuY3Rpb24gYigpeyJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGUmJmRvY3VtZW50LmJvZHkmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixiKSxhKCkpfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGIpO2IoKX1mdW5jdGlvbiBmKGEpe2UoZnVuY3Rpb24oKXtyZXR1cm4gZChmdW5jdGlvbigpe3JldHVybiBhJiZhKCl9KX0pfWZ1bmN0aW9uIGcoYSxiKXtpZihhLl9fbG9hZGVkKWImJmIoKTtlbHNlIGlmKCJzY3JpcHQiPT09YS5sb2NhbE5hbWUmJiFhLnNyY3x8InN0eWxlIj09PWEubG9jYWxOYW1lJiYhYS5maXJzdENoaWxkKWEuX19sb2FkZWQ9ITAsYiYmYigpO2Vsc2V7dmFyIGM9ZnVuY3Rpb24oZCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKGQudHlwZSwKYyk7YS5fX2xvYWRlZD0hMDtiJiZiKCl9O2EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsYyk7aGEmJiJzdHlsZSI9PT1hLmxvY2FsTmFtZXx8YS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYyl9fWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmImxpbmsiPT09YS5sb2NhbE5hbWUmJiJpbXBvcnQiPT09YS5yZWx9ZnVuY3Rpb24gaygpe3ZhciBhPXRoaXM7dGhpcy5hPXt9O3RoaXMuYj0wO3RoaXMuYz1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihiKXtyZXR1cm4gYS5KYShiKX0pO3RoaXMuYy5vYnNlcnZlKGRvY3VtZW50LmhlYWQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSk7dGhpcy5sb2FkSW1wb3J0cyhkb2N1bWVudCl9ZnVuY3Rpb24gbChhKXtxKG0oYSwidGVtcGxhdGUiKSxmdW5jdGlvbihhKXtxKG0oYS5jb250ZW50LCdzY3JpcHQ6bm90KFt0eXBlXSksc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiXSxzY3JpcHRbdHlwZT0idGV4dC9qYXZhc2NyaXB0Il0sc2NyaXB0W3R5cGU9Im1vZHVsZSJdJyksCmZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3EoYS5hdHRyaWJ1dGVzLGZ1bmN0aW9uKGEpe3JldHVybiBiLnNldEF0dHJpYnV0ZShhLm5hbWUsYS52YWx1ZSl9KTtiLnRleHRDb250ZW50PWEudGV4dENvbnRlbnQ7YS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChiLGEpfSk7bChhLmNvbnRlbnQpfSl9ZnVuY3Rpb24gbShhLGIpe3JldHVybiBhLmNoaWxkTm9kZXMubGVuZ3RoP2EucXVlcnlTZWxlY3RvckFsbChiKTpVfWZ1bmN0aW9uIHEoYSxiLGMpe3ZhciBkPWE/YS5sZW5ndGg6MCxlPWM/LTE6MTtmb3IoYz1jP2QtMTowO2M8ZCYmMDw9YztjKz1lKWIoYVtjXSxjKX12YXIgeD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIiksTT0iaW1wb3J0ImluIHgsVT14LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSx1YT1udWxsOyExPT09ImN1cnJlbnRTY3JpcHQiaW4gZG9jdW1lbnQmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudCwiY3VycmVudFNjcmlwdCIsCntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdWF8fCgiY29tcGxldGUiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9kb2N1bWVudC5zY3JpcHRzW2RvY3VtZW50LnNjcmlwdHMubGVuZ3RoLTFdOm51bGwpfSxjb25maWd1cmFibGU6ITB9KTt2YXIgbGI9Lyh1cmxcKCkoW14pXSopKFwpKS9nLG1iPS8oQGltcG9ydFtcc10rKD8hdXJsXCgpKShbXjtdKikoOykvZyxTPS8oPGxpbmtbXj5dKikocmVsPVsnfCJdP3N0eWxlc2hlZXRbJ3wiXT9bXj5dKj4pL2csQz17RWE6ZnVuY3Rpb24oYSxiKXthLmhyZWYmJmEuc2V0QXR0cmlidXRlKCJocmVmIixDLlgoYS5nZXRBdHRyaWJ1dGUoImhyZWYiKSxiKSk7YS5zcmMmJmEuc2V0QXR0cmlidXRlKCJzcmMiLEMuWChhLmdldEF0dHJpYnV0ZSgic3JjIiksYikpO2lmKCJzdHlsZSI9PT1hLmxvY2FsTmFtZSl7dmFyIGM9Qy5xYShhLnRleHRDb250ZW50LGIsbGIpO2EudGV4dENvbnRlbnQ9Qy5xYShjLGIsbWIpfX0scWE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhLnJlcGxhY2UoYywKZnVuY3Rpb24oYSxjLGQsZSl7YT1kLnJlcGxhY2UoL1siJ10vZywiIik7YiYmKGE9Qy5YKGEsYikpO3JldHVybiBjKyInIithKyInIitlfSl9LFg6ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT1DLmFhKXtDLmFhPSExO3RyeXt2YXIgYz1uZXcgVVJMKCJiIiwiaHR0cDovL2EiKTtjLnBhdGhuYW1lPSJjJTIwZCI7Qy5hYT0iaHR0cDovL2EvYyUyMGQiPT09Yy5ocmVmfWNhdGNoKHljKXt9fWlmKEMuYWEpcmV0dXJuKG5ldyBVUkwoYSxiKSkuaHJlZjtjPUMueGE7Y3x8KGM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksQy54YT1jLGMuamE9Yy5jcmVhdGVFbGVtZW50KCJiYXNlIiksYy5oZWFkLmFwcGVuZENoaWxkKGMuamEpLGMuaWE9Yy5jcmVhdGVFbGVtZW50KCJhIikpO2MuamEuaHJlZj1iO2MuaWEuaHJlZj1hO3JldHVybiBjLmlhLmhyZWZ8fGF9fSxWPXthc3luYzohMCxsb2FkOmZ1bmN0aW9uKGEsYixjKXtpZihhKWlmKGEubWF0Y2goL15kYXRhOi8pKXthPQphLnNwbGl0KCIsIik7dmFyIGQ9YVsxXTtkPS0xPGFbMF0uaW5kZXhPZigiO2Jhc2U2NCIpP2F0b2IoZCk6ZGVjb2RlVVJJQ29tcG9uZW50KGQpO2IoZCl9ZWxzZXt2YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5vcGVuKCJHRVQiLGEsVi5hc3luYyk7ZS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT1lLnJlc3BvbnNlVVJMfHxlLmdldFJlc3BvbnNlSGVhZGVyKCJMb2NhdGlvbiIpO2EmJjA9PT1hLmluZGV4T2YoIi8iKSYmKGE9KGxvY2F0aW9uLm9yaWdpbnx8bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KSthKTt2YXIgZD1lLnJlc3BvbnNlfHxlLnJlc3BvbnNlVGV4dDszMDQ9PT1lLnN0YXR1c3x8MD09PWUuc3RhdHVzfHwyMDA8PWUuc3RhdHVzJiYzMDA+ZS5zdGF0dXM/YihkLGEpOmMoZCl9O2Uuc2VuZCgpfWVsc2UgYygiZXJyb3I6IGhyZWYgbXVzdCBiZSBzcGVjaWZpZWQiKX19LGhhPS9UcmlkZW50Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwvRWRnZVwvXGQuL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKay5wcm90b3R5cGUubG9hZEltcG9ydHM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthPW0oYSwibGlua1tyZWw9aW1wb3J0XSIpO3EoYSxmdW5jdGlvbihhKXtyZXR1cm4gYi5nKGEpfSl9O2sucHJvdG90eXBlLmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWEuaHJlZjtpZih2b2lkIDAhPT10aGlzLmFbY10pe3ZhciBkPXRoaXMuYVtjXTtkJiZkLl9fbG9hZGVkJiYoYS5fX2ltcG9ydD1kLHRoaXMuZihhKSl9ZWxzZSB0aGlzLmIrKyx0aGlzLmFbY109InBlbmRpbmciLFYubG9hZChjLGZ1bmN0aW9uKGEsZCl7YT1iLkthKGEsZHx8Yyk7Yi5hW2NdPWE7Yi5iLS07Yi5sb2FkSW1wb3J0cyhhKTtiLmwoKX0sZnVuY3Rpb24oKXtiLmFbY109bnVsbDtiLmItLTtiLmwoKX0pfTtrLnByb3RvdHlwZS5LYT1mdW5jdGlvbihhLGIpe2lmKCFhKXJldHVybiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aGEmJihhPWEucmVwbGFjZShTLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4tMT09PQphLmluZGV4T2YoInR5cGU9Iik/YisiIHR5cGU9aW1wb3J0LWRpc2FibGUgIitjOmF9KSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtjLmlubmVySFRNTD1hO2lmKGMuY29udGVudClhPWMuY29udGVudCxsKGEpO2Vsc2UgZm9yKGE9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2MuZmlyc3RDaGlsZDspYS5hcHBlbmRDaGlsZChjLmZpcnN0Q2hpbGQpO2lmKGM9YS5xdWVyeVNlbGVjdG9yKCJiYXNlIikpYj1DLlgoYy5nZXRBdHRyaWJ1dGUoImhyZWYiKSxiKSxjLnJlbW92ZUF0dHJpYnV0ZSgiaHJlZiIpO2M9bShhLCdsaW5rW3JlbD1pbXBvcnRdLGxpbmtbcmVsPXN0eWxlc2hlZXRdW2hyZWZdW3R5cGU9aW1wb3J0LWRpc2FibGVdLHN0eWxlOm5vdChbdHlwZV0pLGxpbmtbcmVsPXN0eWxlc2hlZXRdW2hyZWZdOm5vdChbdHlwZV0pLHNjcmlwdDpub3QoW3R5cGVdKSxzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCJdLHNjcmlwdFt0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiXSxzY3JpcHRbdHlwZT0ibW9kdWxlIl0nKTsKdmFyIGQ9MDtxKGMsZnVuY3Rpb24oYSl7ZyhhKTtDLkVhKGEsYik7YS5zZXRBdHRyaWJ1dGUoImltcG9ydC1kZXBlbmRlbmN5IiwiIik7aWYoInNjcmlwdCI9PT1hLmxvY2FsTmFtZSYmIWEuc3JjJiZhLnRleHRDb250ZW50KXtpZigibW9kdWxlIj09PWEudHlwZSl0aHJvdyBFcnJvcigiSW5saW5lIG1vZHVsZSBzY3JpcHRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEhUTUwgSW1wb3J0cy4iKTthLnNldEF0dHJpYnV0ZSgic3JjIiwiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCwiK2VuY29kZVVSSUNvbXBvbmVudChhLnRleHRDb250ZW50KygiXG4vLyMgc291cmNlVVJMPSIrYisoZD8iLSIrZDoiIikrIi5qc1xuIikpKTthLnRleHRDb250ZW50PSIiO2QrK319KTtyZXR1cm4gYX07ay5wcm90b3R5cGUubD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7aWYoIXRoaXMuYil7dGhpcy5jLmRpc2Nvbm5lY3QoKTt0aGlzLmZsYXR0ZW4oZG9jdW1lbnQpO3ZhciBiPSExLGM9ITEsZD1mdW5jdGlvbigpe2MmJgpiJiYoYS5sb2FkSW1wb3J0cyhkb2N1bWVudCksYS5ifHwoYS5jLm9ic2VydmUoZG9jdW1lbnQuaGVhZCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhLmRhKCkpKX07dGhpcy5NYShmdW5jdGlvbigpe2M9ITA7ZCgpfSk7dGhpcy5MYShmdW5jdGlvbigpe2I9ITA7ZCgpfSl9fTtrLnByb3RvdHlwZS5mbGF0dGVuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7YT1tKGEsImxpbmtbcmVsPWltcG9ydF0iKTtxKGEsZnVuY3Rpb24oYSl7dmFyIGM9Yi5hW2EuaHJlZl07KGEuX19pbXBvcnQ9YykmJmMubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihiLmFbYS5ocmVmXT1hLGEucmVhZHlTdGF0ZT0ibG9hZGluZyIsYS5fX2ltcG9ydD1hLGIuZmxhdHRlbihjKSxhLmFwcGVuZENoaWxkKGMpKX0pfTtrLnByb3RvdHlwZS5MYT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGUpe2lmKGU8ZCl7dmFyIGY9Y1tlXSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2YucmVtb3ZlQXR0cmlidXRlKCJpbXBvcnQtZGVwZW5kZW5jeSIpOwpxKGYuYXR0cmlidXRlcyxmdW5jdGlvbihhKXtyZXR1cm4gaC5zZXRBdHRyaWJ1dGUoYS5uYW1lLGEudmFsdWUpfSk7dWE9aDtmLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGgsZik7ZyhoLGZ1bmN0aW9uKCl7dWE9bnVsbDtiKGUrMSl9KX1lbHNlIGEoKX12YXIgYz1tKGRvY3VtZW50LCJzY3JpcHRbaW1wb3J0LWRlcGVuZGVuY3ldIiksZD1jLmxlbmd0aDtiKDApfTtrLnByb3RvdHlwZS5NYT1mdW5jdGlvbihhKXt2YXIgYj1tKGRvY3VtZW50LCJzdHlsZVtpbXBvcnQtZGVwZW5kZW5jeV0sbGlua1tyZWw9c3R5bGVzaGVldF1baW1wb3J0LWRlcGVuZGVuY3ldIiksZD1iLmxlbmd0aDtpZihkKXt2YXIgZT1oYSYmISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJsaW5rW3JlbD1zdHlsZXNoZWV0XVtocmVmXVt0eXBlPWltcG9ydC1kaXNhYmxlXSIpO3EoYixmdW5jdGlvbihiKXtnKGIsZnVuY3Rpb24oKXtiLnJlbW92ZUF0dHJpYnV0ZSgiaW1wb3J0LWRlcGVuZGVuY3kiKTswPT09LS1kJiYKYSgpfSk7aWYoZSYmYi5wYXJlbnROb2RlIT09ZG9jdW1lbnQuaGVhZCl7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChiLmxvY2FsTmFtZSk7Zi5fX2FwcGxpZWRFbGVtZW50PWI7Zi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJpbXBvcnQtcGxhY2Vob2xkZXIiKTtiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGYsYi5uZXh0U2libGluZyk7Zm9yKGY9YyhiKTtmJiZjKGYpOylmPWMoZik7Zi5wYXJlbnROb2RlIT09ZG9jdW1lbnQuaGVhZCYmKGY9bnVsbCk7ZG9jdW1lbnQuaGVhZC5pbnNlcnRCZWZvcmUoYixmKTtiLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpfX0pfWVsc2UgYSgpfTtrLnByb3RvdHlwZS5kYT1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1tKGRvY3VtZW50LCJsaW5rW3JlbD1pbXBvcnRdIik7cShiLGZ1bmN0aW9uKGIpe3JldHVybiBhLmYoYil9LCEwKX07ay5wcm90b3R5cGUuZj1mdW5jdGlvbihhKXthLl9fbG9hZGVkfHwoYS5fX2xvYWRlZD0hMCxhLmltcG9ydCYmKGEuaW1wb3J0LnJlYWR5U3RhdGU9CiJjb21wbGV0ZSIpLGEuZGlzcGF0Y2hFdmVudChiKGEuaW1wb3J0PyJsb2FkIjoiZXJyb3IiLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITEsZGV0YWlsOnZvaWQgMH0pKSl9O2sucHJvdG90eXBlLkphPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7cShhLGZ1bmN0aW9uKGEpe3JldHVybiBxKGEuYWRkZWROb2RlcyxmdW5jdGlvbihhKXthJiZhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJihoKGEpP2IuZyhhKTpiLmxvYWRJbXBvcnRzKGEpKX0pfSl9O3ZhciB2YT1udWxsO2lmKE0peD1tKGRvY3VtZW50LCJsaW5rW3JlbD1pbXBvcnRdIikscSh4LGZ1bmN0aW9uKGEpe2EuaW1wb3J0JiYibG9hZGluZyI9PT1hLmltcG9ydC5yZWFkeVN0YXRlfHwoYS5fX2xvYWRlZD0hMCl9KSx4PWZ1bmN0aW9uKGEpe2E9YS50YXJnZXQ7aChhKSYmKGEuX19sb2FkZWQ9ITApfSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4LCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsCngsITApO2Vsc2V7dmFyIFg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSwiYmFzZVVSSSIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgoIVh8fFguY29uZmlndXJhYmxlP05vZGU6RWxlbWVudCkucHJvdG90eXBlLCJiYXNlVVJJIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9aCh0aGlzKT90aGlzOmModGhpcyk7cmV0dXJuIGE/YS5ocmVmOlgmJlguZ2V0P1guZ2V0LmNhbGwodGhpcyk6KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKXx8d2luZG93LmxvY2F0aW9uKS5ocmVmfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCJpbXBvcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ltcG9ydHx8bnVsbH0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KTtlKGZ1bmN0aW9uKCl7dmE9bmV3IGt9KX1mKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoYigiSFRNTEltcG9ydHNMb2FkZWQiLAp7Y2FuY2VsYWJsZTohMCxidWJibGVzOiEwLGRldGFpbDp2b2lkIDB9KSl9KTthLnVzZU5hdGl2ZT1NO2Eud2hlblJlYWR5PWY7YS5pbXBvcnRGb3JFbGVtZW50PWM7YS5sb2FkSW1wb3J0cz1mdW5jdGlvbihhKXt2YSYmdmEubG9hZEltcG9ydHMoYSl9fSkod2luZG93LkhUTUxJbXBvcnRzPXdpbmRvdy5IVE1MSW1wb3J0c3x8e30pOy8qCgogQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwp3aW5kb3cuV2ViQ29tcG9uZW50cz13aW5kb3cuV2ViQ29tcG9uZW50c3x8e2ZsYWdzOnt9fTt2YXIgQ2E9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYyo9IndlYmNvbXBvbmVudHMtbGl0ZS5qcyJdJyksRGE9L3djLSguKykvLHQ9e307aWYoIXQubm9PcHRzKXtsb2NhdGlvbi5zZWFyY2guc2xpY2UoMSkuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2E9YS5zcGxpdCgiPSIpO3ZhciBiO2FbMF0mJihiPWFbMF0ubWF0Y2goRGEpKSYmKHRbYlsxXV09YVsxXXx8ITApfSk7aWYoQ2EpZm9yKHZhciBFYT0wLEZhPXZvaWQgMDtGYT1DYS5hdHRyaWJ1dGVzW0VhXTtFYSsrKSJzcmMiIT09RmEubmFtZSYmKHRbRmEubmFtZV09RmEudmFsdWV8fCEwKTtpZih0LmxvZyYmdC5sb2cuc3BsaXQpe3ZhciBHYT10LmxvZy5zcGxpdCgiLCIpO3QubG9nPXt9O0dhLmZvckVhY2goZnVuY3Rpb24oYSl7dC5sb2dbYV09ITB9KX1lbHNlIHQubG9nPXt9fQp3aW5kb3cuV2ViQ29tcG9uZW50cy5mbGFncz10O3ZhciBIYT10LnNoYWR5ZG9tO0hhJiYod2luZG93LlNoYWR5RE9NPXdpbmRvdy5TaGFkeURPTXx8e30sd2luZG93LlNoYWR5RE9NLmZvcmNlPUhhKTt2YXIgSWE9dC5yZWdpc3Rlcnx8dC5jZTtJYSYmd2luZG93LmN1c3RvbUVsZW1lbnRzJiYod2luZG93LmN1c3RvbUVsZW1lbnRzLmZvcmNlUG9seWZpbGw9SWEpOy8qCgpDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwpmdW5jdGlvbiBKYSgpe3RoaXMucGE9dGhpcy5yb290PW51bGw7dGhpcy5UPSExO3RoaXMuRD10aGlzLlA9dGhpcy5jYT10aGlzLmFzc2lnbmVkU2xvdD10aGlzLmFzc2lnbmVkTm9kZXM9dGhpcy5IPW51bGw7dGhpcy5jaGlsZE5vZGVzPXRoaXMubmV4dFNpYmxpbmc9dGhpcy5wcmV2aW91c1NpYmxpbmc9dGhpcy5sYXN0Q2hpbGQ9dGhpcy5maXJzdENoaWxkPXRoaXMucGFyZW50Tm9kZT10aGlzLks9dm9pZCAwO3RoaXMua2E9dGhpcy5sYT0hMTt0aGlzLk89e319SmEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt9fTtmdW5jdGlvbiB1KGEpe2EuX19zaGFkeXx8KGEuX19zaGFkeT1uZXcgSmEpO3JldHVybiBhLl9fc2hhZHl9ZnVuY3Rpb24gdihhKXtyZXR1cm4gYSYmYS5fX3NoYWR5fTt2YXIgdz13aW5kb3cuU2hhZHlET018fHt9O3cuR2E9ISghRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93fHwhTm9kZS5wcm90b3R5cGUuZ2V0Um9vdE5vZGUpO3ZhciBLYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLCJmaXJzdENoaWxkIik7dy5tPSEhKEthJiZLYS5jb25maWd1cmFibGUmJkthLmdldCk7dy5lYT13LmZvcmNlfHwhdy5HYTt3Lko9dy5ub1BhdGNofHwhMTt3Lm9hPXcucHJlZmVyUGVyZm9ybWFuY2U7ZnVuY3Rpb24geShhKXtyZXR1cm4oYT12KGEpKSYmdm9pZCAwIT09YS5maXJzdENoaWxkfWZ1bmN0aW9uIHooYSl7cmV0dXJuIlNoYWR5Um9vdCI9PT1hLnphfWZ1bmN0aW9uIExhKGEpe3JldHVybihhPShhPXYoYSkpJiZhLnJvb3QpJiZNYShhKX0KdmFyIE5hPUVsZW1lbnQucHJvdG90eXBlLE9hPU5hLm1hdGNoZXN8fE5hLm1hdGNoZXNTZWxlY3Rvcnx8TmEubW96TWF0Y2hlc1NlbGVjdG9yfHxOYS5tc01hdGNoZXNTZWxlY3Rvcnx8TmEub01hdGNoZXNTZWxlY3Rvcnx8TmEud2Via2l0TWF0Y2hlc1NlbGVjdG9yLFBhPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxRYT0wLFJhPVtdOyhuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe2Zvcig7UmEubGVuZ3RoOyl0cnl7UmEuc2hpZnQoKSgpfWNhdGNoKGEpe3Rocm93IFBhLnRleHRDb250ZW50PVFhKyssYTt9fSkpLm9ic2VydmUoUGEse2NoYXJhY3RlckRhdGE6ITB9KTtmdW5jdGlvbiBTYShhKXtSYS5wdXNoKGEpO1BhLnRleHRDb250ZW50PVFhKyt9dmFyIFRhPSEhZG9jdW1lbnQuY29udGFpbnM7ZnVuY3Rpb24gVWEoYSxiKXtmb3IoO2I7KXtpZihiPT1hKXJldHVybiEwO2I9Yi5fX3NoYWR5X3BhcmVudE5vZGV9cmV0dXJuITF9CmZ1bmN0aW9uIFZhKGEpe2Zvcih2YXIgYj1hLmxlbmd0aC0xOzA8PWI7Yi0tKXt2YXIgYz1hW2JdLGQ9Yy5nZXRBdHRyaWJ1dGUoImlkIil8fGMuZ2V0QXR0cmlidXRlKCJuYW1lIik7ZCYmImxlbmd0aCIhPT1kJiZpc05hTihkKSYmKGFbZF09Yyl9YS5pdGVtPWZ1bmN0aW9uKGIpe3JldHVybiBhW2JdfTthLm5hbWVkSXRlbT1mdW5jdGlvbihiKXtpZigibGVuZ3RoIiE9PWImJmlzTmFOKGIpJiZhW2JdKXJldHVybiBhW2JdO2Zvcih2YXIgYz1pYShhKSxkPWMubmV4dCgpOyFkLmRvbmU7ZD1jLm5leHQoKSlpZihkPWQudmFsdWUsKGQuZ2V0QXR0cmlidXRlKCJpZCIpfHxkLmdldEF0dHJpYnV0ZSgibmFtZSIpKT09YilyZXR1cm4gZDtyZXR1cm4gbnVsbH07cmV0dXJuIGF9CmZ1bmN0aW9uIEEoYSxiLGMsZCl7Yz12b2lkIDA9PT1jPyIiOmM7Zm9yKHZhciBlIGluIGIpe3ZhciBmPWJbZV07aWYoIShkJiYwPD1kLmluZGV4T2YoZSkpKXtmLmNvbmZpZ3VyYWJsZT0hMDt2YXIgZz1jK2U7aWYoZi52YWx1ZSlhW2ddPWYudmFsdWU7ZWxzZSB0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZyxmKX1jYXRjaChoKXt9fX19ZnVuY3Rpb24gQihhKXt2YXIgYj17fTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2JbY109T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGMpfSk7cmV0dXJuIGJ9O3ZhciBXYT1bXSxYYTtmdW5jdGlvbiBZYShhKXtYYXx8KFhhPSEwLFNhKFphKSk7V2EucHVzaChhKX1mdW5jdGlvbiBaYSgpe1hhPSExO2Zvcih2YXIgYT0hIVdhLmxlbmd0aDtXYS5sZW5ndGg7KVdhLnNoaWZ0KCkoKTtyZXR1cm4gYX1aYS5saXN0PVdhO2Z1bmN0aW9uICRhKCl7dGhpcy5hPSExO3RoaXMuYWRkZWROb2Rlcz1bXTt0aGlzLnJlbW92ZWROb2Rlcz1bXTt0aGlzLlM9bmV3IFNldH1mdW5jdGlvbiBhYihhKXthLmF8fChhLmE9ITAsU2EoZnVuY3Rpb24oKXthLmZsdXNoKCl9KSl9JGEucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5hKXt0aGlzLmE9ITE7dmFyIGE9dGhpcy50YWtlUmVjb3JkcygpO2EubGVuZ3RoJiZ0aGlzLlMuZm9yRWFjaChmdW5jdGlvbihiKXtiKGEpfSl9fTskYS5wcm90b3R5cGUudGFrZVJlY29yZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmFkZGVkTm9kZXMubGVuZ3RofHx0aGlzLnJlbW92ZWROb2Rlcy5sZW5ndGgpe3ZhciBhPVt7YWRkZWROb2Rlczp0aGlzLmFkZGVkTm9kZXMscmVtb3ZlZE5vZGVzOnRoaXMucmVtb3ZlZE5vZGVzfV07dGhpcy5hZGRlZE5vZGVzPVtdO3RoaXMucmVtb3ZlZE5vZGVzPVtdO3JldHVybiBhfXJldHVybltdfTsKZnVuY3Rpb24gYmIoYSxiKXt2YXIgYz11KGEpO2MuSHx8KGMuSD1uZXcgJGEpO2MuSC5TLmFkZChiKTt2YXIgZD1jLkg7cmV0dXJue3lhOmIsRjpkLEFhOmEsdGFrZVJlY29yZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWtlUmVjb3JkcygpfX19ZnVuY3Rpb24gY2IoYSl7dmFyIGI9YSYmYS5GO2ImJihiLlMuZGVsZXRlKGEueWEpLGIuUy5zaXplfHwodShhLkFhKS5IPW51bGwpKX0KZnVuY3Rpb24gZGIoYSxiKXt2YXIgYz1iLmdldFJvb3ROb2RlKCk7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3ZhciBiPWM9PT1hLnRhcmdldC5nZXRSb290Tm9kZSgpO2lmKGImJmEuYWRkZWROb2Rlcyl7aWYoYj1BcnJheS5mcm9tKGEuYWRkZWROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPT09YS5nZXRSb290Tm9kZSgpfSksYi5sZW5ndGgpcmV0dXJuIGE9T2JqZWN0LmNyZWF0ZShhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiYWRkZWROb2RlcyIse3ZhbHVlOmIsY29uZmlndXJhYmxlOiEwfSksYX1lbHNlIGlmKGIpcmV0dXJuIGF9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KX07dmFyIGViPS9bJlx1MDBBMCJdL2csZmI9L1smXHUwMEEwPD5dL2c7ZnVuY3Rpb24gZ2IoYSl7c3dpdGNoKGEpe2Nhc2UgIiYiOnJldHVybiImYW1wOyI7Y2FzZSAiPCI6cmV0dXJuIiZsdDsiO2Nhc2UgIj4iOnJldHVybiImZ3Q7IjtjYXNlICciJzpyZXR1cm4iJnF1b3Q7IjtjYXNlICJcdTAwYTAiOnJldHVybiImbmJzcDsifX1mdW5jdGlvbiBoYihhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9dmFyIGliPWhiKCJhcmVhIGJhc2UgYnIgY29sIGNvbW1hbmQgZW1iZWQgaHIgaW1nIGlucHV0IGtleWdlbiBsaW5rIG1ldGEgcGFyYW0gc291cmNlIHRyYWNrIHdiciIuc3BsaXQoIiAiKSksamI9aGIoInN0eWxlIHNjcmlwdCB4bXAgaWZyYW1lIG5vZW1iZWQgbm9mcmFtZXMgcGxhaW50ZXh0IG5vc2NyaXB0Ii5zcGxpdCgiICIpKTsKZnVuY3Rpb24ga2IoYSxiKXsidGVtcGxhdGUiPT09YS5sb2NhbE5hbWUmJihhPWEuY29udGVudCk7Zm9yKHZhciBjPSIiLGQ9Yj9iKGEpOmEuY2hpbGROb2RlcyxlPTAsZj1kLmxlbmd0aCxnPXZvaWQgMDtlPGYmJihnPWRbZV0pO2UrKyl7YTp7dmFyIGg9Zzt2YXIgaz1hLGw9Yjtzd2l0Y2goaC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTprPWgubG9jYWxOYW1lO2Zvcih2YXIgbT0iPCIrayxxPWguYXR0cmlidXRlcyx4PTAsTTtNPXFbeF07eCsrKW0rPSIgIitNLm5hbWUrJz0iJytNLnZhbHVlLnJlcGxhY2UoZWIsZ2IpKyciJzttKz0iPiI7aD1pYltrXT9tOm0ra2IoaCxsKSsiPC8iK2srIj4iO2JyZWFrIGE7Y2FzZSBOb2RlLlRFWFRfTk9ERTpoPWguZGF0YTtoPWsmJmpiW2subG9jYWxOYW1lXT9oOmgucmVwbGFjZShmYixnYik7YnJlYWsgYTtjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOmg9Ilx4M2MhLS0iK2guZGF0YSsiLS1ceDNlIjticmVhayBhO2RlZmF1bHQ6dGhyb3cgd2luZG93LmNvbnNvbGUuZXJyb3IoaCksCkVycm9yKCJub3QgaW1wbGVtZW50ZWQiKTt9fWMrPWh9cmV0dXJuIGN9O3ZhciBwYj13Lm0scWI9e3F1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvcihhKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9xdWVyeVNlbGVjdG9yQWxsKGEpfX0scmI9e307ZnVuY3Rpb24gc2IoYSl7cmJbYV09ZnVuY3Rpb24oYil7cmV0dXJuIGJbIl9fc2hhZHlfbmF0aXZlXyIrYV19fWZ1bmN0aW9uIHRiKGEsYil7QShhLGIsIl9fc2hhZHlfbmF0aXZlXyIpO2Zvcih2YXIgYyBpbiBiKXNiKGMpfWZ1bmN0aW9uIEQoYSxiKXtiPXZvaWQgMD09PWI/W106Yjtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXSxlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxkKTtlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIl9fc2hhZHlfbmF0aXZlXyIrZCxlKSxlLnZhbHVlP3FiW2RdfHwocWJbZF09ZS52YWx1ZSk6c2IoZCkpfX0KdmFyIEU9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihkb2N1bWVudCxOb2RlRmlsdGVyLlNIT1dfQUxMLG51bGwsITEpLEY9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihkb2N1bWVudCxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCxudWxsLCExKSx1Yj1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImluZXJ0Iik7ZnVuY3Rpb24gdmIoYSl7Zm9yKHZhciBiO2I9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOylhLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpfXZhciB3Yj1bImZpcnN0RWxlbWVudENoaWxkIiwibGFzdEVsZW1lbnRDaGlsZCIsImNoaWxkcmVuIiwiY2hpbGRFbGVtZW50Q291bnQiXSx4Yj1bInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl07CmZ1bmN0aW9uIHliKCl7dmFyIGE9WyJkaXNwYXRjaEV2ZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXTt3aW5kb3cuRXZlbnRUYXJnZXQ/RCh3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlLGEpOihEKE5vZGUucHJvdG90eXBlLGEpLEQoV2luZG93LnByb3RvdHlwZSxhKSk7cGI/RChOb2RlLnByb3RvdHlwZSwicGFyZW50Tm9kZSBmaXJzdENoaWxkIGxhc3RDaGlsZCBwcmV2aW91c1NpYmxpbmcgbmV4dFNpYmxpbmcgY2hpbGROb2RlcyBwYXJlbnRFbGVtZW50IHRleHRDb250ZW50Ii5zcGxpdCgiICIpKTp0YihOb2RlLnByb3RvdHlwZSx7cGFyZW50Tm9kZTp7Z2V0OmZ1bmN0aW9uKCl7RS5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBFLnBhcmVudE5vZGUoKX19LGZpcnN0Q2hpbGQ6e2dldDpmdW5jdGlvbigpe0UuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gRS5maXJzdENoaWxkKCl9fSxsYXN0Q2hpbGQ6e2dldDpmdW5jdGlvbigpe0UuY3VycmVudE5vZGU9CnRoaXM7cmV0dXJuIEUubGFzdENoaWxkKCl9fSxwcmV2aW91c1NpYmxpbmc6e2dldDpmdW5jdGlvbigpe0UuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gRS5wcmV2aW91c1NpYmxpbmcoKX19LG5leHRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtFLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEUubmV4dFNpYmxpbmcoKX19LGNoaWxkTm9kZXM6e2dldDpmdW5jdGlvbigpe3ZhciBhPVtdO0UuY3VycmVudE5vZGU9dGhpcztmb3IodmFyIGM9RS5maXJzdENoaWxkKCk7YzspYS5wdXNoKGMpLGM9RS5uZXh0U2libGluZygpO3JldHVybiBhfX0scGFyZW50RWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7Ri5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBGLnBhcmVudE5vZGUoKX19LHRleHRDb250ZW50OntnZXQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpmb3IodmFyIGE9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcih0aGlzLApOb2RlRmlsdGVyLlNIT1dfVEVYVCxudWxsLCExKSxjPSIiLGQ7ZD1hLm5leHROb2RlKCk7KWMrPWQubm9kZVZhbHVlO3JldHVybiBjO2RlZmF1bHQ6cmV0dXJuIHRoaXMubm9kZVZhbHVlfX0sc2V0OmZ1bmN0aW9uKGEpe2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGF8fG51bGw9PT1hKWE9IiI7c3dpdGNoKHRoaXMubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6Y2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6dmIodGhpcyk7KDA8YS5sZW5ndGh8fHRoaXMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSkmJnRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpLHZvaWQgMCk7YnJlYWs7ZGVmYXVsdDp0aGlzLm5vZGVWYWx1ZT1hfX19fSk7RChOb2RlLnByb3RvdHlwZSwiYXBwZW5kQ2hpbGQgaW5zZXJ0QmVmb3JlIHJlbW92ZUNoaWxkIHJlcGxhY2VDaGlsZCBjbG9uZU5vZGUgY29udGFpbnMiLnNwbGl0KCIgIikpOwphPXtmaXJzdEVsZW1lbnRDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7Ri5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBGLmZpcnN0Q2hpbGQoKX19LGxhc3RFbGVtZW50Q2hpbGQ6e2dldDpmdW5jdGlvbigpe0YuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gRi5sYXN0Q2hpbGQoKX19LGNoaWxkcmVuOntnZXQ6ZnVuY3Rpb24oKXt2YXIgYT1bXTtGLmN1cnJlbnROb2RlPXRoaXM7Zm9yKHZhciBjPUYuZmlyc3RDaGlsZCgpO2M7KWEucHVzaChjKSxjPUYubmV4dFNpYmxpbmcoKTtyZXR1cm4gVmEoYSl9fSxjaGlsZEVsZW1lbnRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4/dGhpcy5jaGlsZHJlbi5sZW5ndGg6MH19fTtwYj8oRChFbGVtZW50LnByb3RvdHlwZSx3YiksRChFbGVtZW50LnByb3RvdHlwZSxbInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJuZXh0RWxlbWVudFNpYmxpbmciLCJpbm5lckhUTUwiXSksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsCiJjaGlsZHJlbiIpJiZEKEhUTUxFbGVtZW50LnByb3RvdHlwZSxbImNoaWxkcmVuIl0pLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJpbm5lckhUTUwiKSYmRChIVE1MRWxlbWVudC5wcm90b3R5cGUsWyJpbm5lckhUTUwiXSkpOih0YihFbGVtZW50LnByb3RvdHlwZSxhKSx0YihFbGVtZW50LnByb3RvdHlwZSx7cHJldmlvdXNFbGVtZW50U2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7Ri5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBGLnByZXZpb3VzU2libGluZygpfX0sbmV4dEVsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtGLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEYubmV4dFNpYmxpbmcoKX19LGlubmVySFRNTDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtiKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19zaGFkeV9uYXRpdmVfY2hpbGROb2Rlc30pfSxzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9InRlbXBsYXRlIj09PXRoaXMubG9jYWxOYW1lPwp0aGlzLmNvbnRlbnQ6dGhpczt2YihiKTt2YXIgZD10aGlzLmxvY2FsTmFtZXx8ImRpdiI7ZD10aGlzLm5hbWVzcGFjZVVSSSYmdGhpcy5uYW1lc3BhY2VVUkkhPT11Yi5uYW1lc3BhY2VVUkk/dWIuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFtZXNwYWNlVVJJLGQpOnViLmNyZWF0ZUVsZW1lbnQoZCk7ZC5pbm5lckhUTUw9YTtmb3IoYT0idGVtcGxhdGUiPT09dGhpcy5sb2NhbE5hbWU/ZC5jb250ZW50OmQ7ZD1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7KWIuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGQsdm9pZCAwKX19fSkpO0QoRWxlbWVudC5wcm90b3R5cGUsInNldEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGUgaGFzQXR0cmlidXRlIHJlbW92ZUF0dHJpYnV0ZSBmb2N1cyBibHVyIi5zcGxpdCgiICIpKTtEKEVsZW1lbnQucHJvdG90eXBlLHhiKTtEKEhUTUxFbGVtZW50LnByb3RvdHlwZSxbImZvY3VzIiwiYmx1ciIsImNvbnRhaW5zIl0pO3BiJiZEKEhUTUxFbGVtZW50LnByb3RvdHlwZSwKWyJwYXJlbnRFbGVtZW50IiwiY2hpbGRyZW4iLCJpbm5lckhUTUwiXSk7d2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkQod2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLFsiaW5uZXJIVE1MIl0pO3BiP0QoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsd2IpOnRiKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLGEpO0QoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUseGIpO3BiPyhEKERvY3VtZW50LnByb3RvdHlwZSx3YiksRChEb2N1bWVudC5wcm90b3R5cGUsWyJhY3RpdmVFbGVtZW50Il0pKTp0YihEb2N1bWVudC5wcm90b3R5cGUsYSk7RChEb2N1bWVudC5wcm90b3R5cGUsWyJpbXBvcnROb2RlIiwiZ2V0RWxlbWVudEJ5SWQiXSk7RChEb2N1bWVudC5wcm90b3R5cGUseGIpfTt2YXIgemI9Qih7Z2V0IGNoaWxkTm9kZXMoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NoaWxkTm9kZXN9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9sYXN0Q2hpbGR9LGdldCB0ZXh0Q29udGVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfdGV4dENvbnRlbnR9LHNldCB0ZXh0Q29udGVudChhKXt0aGlzLl9fc2hhZHlfdGV4dENvbnRlbnQ9YX0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7cmV0dXJuIHRoaXMuX19zaGFkeV9jaGlsZEVsZW1lbnRDb3VudH0sZ2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9jaGlsZHJlbn0sZ2V0IGZpcnN0RWxlbWVudENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9maXJzdEVsZW1lbnRDaGlsZH0sZ2V0IGxhc3RFbGVtZW50Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2xhc3RFbGVtZW50Q2hpbGR9LGdldCBpbm5lckhUTUwoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2lubmVySFRNTH0sCnNldCBpbm5lckhUTUwoYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9pbm5lckhUTUw9YX0sZ2V0IHNoYWRvd1Jvb3QoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3NoYWRvd1Jvb3R9fSksQWI9Qih7Z2V0IHBhcmVudEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3BhcmVudEVsZW1lbnR9LGdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9wYXJlbnROb2RlfSxnZXQgbmV4dFNpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X25leHRTaWJsaW5nfSxnZXQgcHJldmlvdXNTaWJsaW5nKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9wcmV2aW91c1NpYmxpbmd9LGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X25leHRFbGVtZW50U2libGluZ30sZ2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9LGdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NsYXNzTmFtZX0sCnNldCBjbGFzc05hbWUoYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9jbGFzc05hbWU9YX19KSxCYjtmb3IoQmIgaW4gemIpemJbQmJdLmVudW1lcmFibGU9ITE7Zm9yKHZhciBDYiBpbiBBYilBYltDYl0uZW51bWVyYWJsZT0hMTt2YXIgRGI9dy5tfHx3LkosRWI9RGI/ZnVuY3Rpb24oKXt9OmZ1bmN0aW9uKGEpe3ZhciBiPXUoYSk7Yi5sYXx8KGIubGE9ITAsQShhLEFiKSl9LEZiPURiP2Z1bmN0aW9uKCl7fTpmdW5jdGlvbihhKXt2YXIgYj11KGEpO2Iua2F8fChiLmthPSEwLEEoYSx6YikpfTt2YXIgR2I9Il9fZXZlbnRXcmFwcGVycyIrRGF0ZS5ub3coKSxIYj1mdW5jdGlvbigpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXZlbnQucHJvdG90eXBlLCJjb21wb3NlZCIpO3JldHVybiBhP2Z1bmN0aW9uKGIpe3JldHVybiBhLmdldC5jYWxsKGIpfTpudWxsfSgpLEliPXtibHVyOiEwLGZvY3VzOiEwLGZvY3VzaW46ITAsZm9jdXNvdXQ6ITAsY2xpY2s6ITAsZGJsY2xpY2s6ITAsbW91c2Vkb3duOiEwLG1vdXNlZW50ZXI6ITAsbW91c2VsZWF2ZTohMCxtb3VzZW1vdmU6ITAsbW91c2VvdXQ6ITAsbW91c2VvdmVyOiEwLG1vdXNldXA6ITAsd2hlZWw6ITAsYmVmb3JlaW5wdXQ6ITAsaW5wdXQ6ITAsa2V5ZG93bjohMCxrZXl1cDohMCxjb21wb3NpdGlvbnN0YXJ0OiEwLGNvbXBvc2l0aW9udXBkYXRlOiEwLGNvbXBvc2l0aW9uZW5kOiEwLHRvdWNoc3RhcnQ6ITAsdG91Y2hlbmQ6ITAsdG91Y2htb3ZlOiEwLHRvdWNoY2FuY2VsOiEwLHBvaW50ZXJvdmVyOiEwLApwb2ludGVyZW50ZXI6ITAscG9pbnRlcmRvd246ITAscG9pbnRlcm1vdmU6ITAscG9pbnRlcnVwOiEwLHBvaW50ZXJjYW5jZWw6ITAscG9pbnRlcm91dDohMCxwb2ludGVybGVhdmU6ITAsZ290cG9pbnRlcmNhcHR1cmU6ITAsbG9zdHBvaW50ZXJjYXB0dXJlOiEwLGRyYWdzdGFydDohMCxkcmFnOiEwLGRyYWdlbnRlcjohMCxkcmFnbGVhdmU6ITAsZHJhZ292ZXI6ITAsZHJvcDohMCxkcmFnZW5kOiEwLERPTUFjdGl2YXRlOiEwLERPTUZvY3VzSW46ITAsRE9NRm9jdXNPdXQ6ITAsa2V5cHJlc3M6ITB9LEpiPXtET01BdHRyTW9kaWZpZWQ6ITAsRE9NQXR0cmlidXRlTmFtZUNoYW5nZWQ6ITAsRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiEwLERPTUVsZW1lbnROYW1lQ2hhbmdlZDohMCxET01Ob2RlSW5zZXJ0ZWQ6ITAsRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50OiEwLERPTU5vZGVSZW1vdmVkOiEwLERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50OiEwLERPTVN1YnRyZWVNb2RpZmllZDohMH07CmZ1bmN0aW9uIEtiKGEpe3JldHVybiBhIGluc3RhbmNlb2YgTm9kZT9hLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTphfWZ1bmN0aW9uIExiKGEsYil7dmFyIGM9W10sZD1hO2ZvcihhPUtiKGEpO2Q7KWMucHVzaChkKSxkLl9fc2hhZHlfYXNzaWduZWRTbG90P2Q9ZC5fX3NoYWR5X2Fzc2lnbmVkU2xvdDpkLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiZkLmhvc3QmJihifHxkIT09YSk/ZD1kLmhvc3Q6ZD1kLl9fc2hhZHlfcGFyZW50Tm9kZTtjW2MubGVuZ3RoLTFdPT09ZG9jdW1lbnQmJmMucHVzaCh3aW5kb3cpO3JldHVybiBjfWZ1bmN0aW9uIE1iKGEpe2EuX19jb21wb3NlZFBhdGh8fChhLl9fY29tcG9zZWRQYXRoPUxiKGEudGFyZ2V0LCEwKSk7cmV0dXJuIGEuX19jb21wb3NlZFBhdGh9CmZ1bmN0aW9uIE5iKGEsYil7aWYoIXopcmV0dXJuIGE7YT1MYihhLCEwKTtmb3IodmFyIGM9MCxkLGU9dm9pZCAwLGYsZz12b2lkIDA7YzxiLmxlbmd0aDtjKyspaWYoZD1iW2NdLGY9S2IoZCksZiE9PWUmJihnPWEuaW5kZXhPZihmKSxlPWYpLCF6KGYpfHwtMTxnKXJldHVybiBkfWZ1bmN0aW9uIE9iKGEpe2Z1bmN0aW9uIGIoYixkKXtiPW5ldyBhKGIsZCk7Yi5fX2NvbXBvc2VkPWQmJiEhZC5jb21wb3NlZDtyZXR1cm4gYn1iLl9fcHJvdG9fXz1hO2IucHJvdG90eXBlPWEucHJvdG90eXBlO3JldHVybiBifXZhciBQYj17Zm9jdXM6ITAsYmx1cjohMH07ZnVuY3Rpb24gUWIoYSl7cmV0dXJuIGEuX190YXJnZXQhPT1hLnRhcmdldHx8YS5fX3JlbGF0ZWRUYXJnZXQhPT1hLnJlbGF0ZWRUYXJnZXR9CmZ1bmN0aW9uIFJiKGEsYixjKXtpZihjPWIuX19oYW5kbGVycyYmYi5fX2hhbmRsZXJzW2EudHlwZV0mJmIuX19oYW5kbGVyc1thLnR5cGVdW2NdKWZvcih2YXIgZD0wLGU7KGU9Y1tkXSkmJighUWIoYSl8fGEudGFyZ2V0IT09YS5yZWxhdGVkVGFyZ2V0KSYmKGUuY2FsbChiLGEpLCFhLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKTtkKyspO30KZnVuY3Rpb24gU2IoYSl7dmFyIGI9YS5jb21wb3NlZFBhdGgoKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiY3VycmVudFRhcmdldCIse2dldDpmdW5jdGlvbigpe3JldHVybiBkfSxjb25maWd1cmFibGU6ITB9KTtmb3IodmFyIGM9Yi5sZW5ndGgtMTswPD1jO2MtLSl7dmFyIGQ9YltjXTtSYihhLGQsImNhcHR1cmUiKTtpZihhLlopcmV0dXJufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJldmVudFBoYXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEV2ZW50LkFUX1RBUkdFVH19KTt2YXIgZTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKXtkPWJbY107dmFyIGY9dihkKTtmPWYmJmYucm9vdDtpZigwPT09Y3x8ZiYmZj09PWUpaWYoUmIoYSxkLCJidWJibGUiKSxkIT09d2luZG93JiYoZT1kLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKSksYS5aKWJyZWFrfX0KZnVuY3Rpb24gVGIoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7ZysrKXt2YXIgaD1hW2ddLGs9aC50eXBlLGw9aC5jYXB0dXJlLG09aC5vbmNlLHE9aC5wYXNzaXZlO2lmKGI9PT1oLm5vZGUmJmM9PT1rJiZkPT09bCYmZT09PW0mJmY9PT1xKXJldHVybiBnfXJldHVybi0xfQpmdW5jdGlvbiBVYihhLGIsYyl7aWYoYil7dmFyIGQ9dHlwZW9mIGI7aWYoImZ1bmN0aW9uIj09PWR8fCJvYmplY3QiPT09ZClpZigib2JqZWN0IiE9PWR8fGIuaGFuZGxlRXZlbnQmJiJmdW5jdGlvbiI9PT10eXBlb2YgYi5oYW5kbGVFdmVudCl7aWYoSmJbYV0pcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyk7aWYoYyYmIm9iamVjdCI9PT10eXBlb2YgYyl7dmFyIGU9ISFjLmNhcHR1cmU7dmFyIGY9ISFjLm9uY2U7dmFyIGc9ISFjLnBhc3NpdmV9ZWxzZSBlPSEhYyxnPWY9ITE7dmFyIGg9YyYmYy4kfHx0aGlzLGs9YltHYl07aWYoayl7aWYoLTE8VGIoayxoLGEsZSxmLGcpKXJldHVybn1lbHNlIGJbR2JdPVtdO2s9ZnVuY3Rpb24oZSl7ZiYmdGhpcy5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpO2UuX190YXJnZXR8fFZiKGUpO2lmKGghPT10aGlzKXt2YXIgZz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsImN1cnJlbnRUYXJnZXQiKTsKT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImN1cnJlbnRUYXJnZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sY29uZmlndXJhYmxlOiEwfSl9ZS5fX3ByZXZpb3VzQ3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQ7aWYoIXooaCl8fC0xIT1lLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YoaCkpaWYoZS5jb21wb3NlZHx8LTE8ZS5jb21wb3NlZFBhdGgoKS5pbmRleE9mKGgpKWlmKFFiKGUpJiZlLnRhcmdldD09PWUucmVsYXRlZFRhcmdldCllLmV2ZW50UGhhc2U9PT1FdmVudC5CVUJCTElOR19QSEFTRSYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtlbHNlIGlmKGUuZXZlbnRQaGFzZT09PUV2ZW50LkNBUFRVUklOR19QSEFTRXx8ZS5idWJibGVzfHxlLnRhcmdldD09PWh8fGggaW5zdGFuY2VvZiBXaW5kb3cpe3ZhciBrPSJmdW5jdGlvbiI9PT1kP2IuY2FsbChoLGUpOmIuaGFuZGxlRXZlbnQmJmIuaGFuZGxlRXZlbnQoZSk7aCE9PXRoaXMmJihnPyhPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwKImN1cnJlbnRUYXJnZXQiLGcpLGc9bnVsbCk6ZGVsZXRlIGUuY3VycmVudFRhcmdldCk7cmV0dXJuIGt9fTtiW0diXS5wdXNoKHtub2RlOmgsdHlwZTphLGNhcHR1cmU6ZSxvbmNlOmYscGFzc2l2ZTpnLFlhOmt9KTtQYlthXT8odGhpcy5fX2hhbmRsZXJzPXRoaXMuX19oYW5kbGVyc3x8e30sdGhpcy5fX2hhbmRsZXJzW2FdPXRoaXMuX19oYW5kbGVyc1thXXx8e2NhcHR1cmU6W10sYnViYmxlOltdfSx0aGlzLl9faGFuZGxlcnNbYV1bZT8iY2FwdHVyZSI6ImJ1YmJsZSJdLnB1c2goaykpOnRoaXMuX19zaGFkeV9uYXRpdmVfYWRkRXZlbnRMaXN0ZW5lcihhLGssYyl9fX0KZnVuY3Rpb24gV2IoYSxiLGMpe2lmKGIpe2lmKEpiW2FdKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpO2lmKGMmJiJvYmplY3QiPT09dHlwZW9mIGMpe3ZhciBkPSEhYy5jYXB0dXJlO3ZhciBlPSEhYy5vbmNlO3ZhciBmPSEhYy5wYXNzaXZlfWVsc2UgZD0hIWMsZj1lPSExO3ZhciBnPWMmJmMuJHx8dGhpcyxoPXZvaWQgMDt2YXIgaz1udWxsO3RyeXtrPWJbR2JdfWNhdGNoKGwpe31rJiYoZT1UYihrLGcsYSxkLGUsZiksLTE8ZSYmKGg9ay5zcGxpY2UoZSwxKVswXS5ZYSxrLmxlbmd0aHx8KGJbR2JdPXZvaWQgMCkpKTt0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxofHxiLGMpO2gmJlBiW2FdJiZ0aGlzLl9faGFuZGxlcnMmJnRoaXMuX19oYW5kbGVyc1thXSYmKGE9dGhpcy5fX2hhbmRsZXJzW2FdW2Q/ImNhcHR1cmUiOiJidWJibGUiXSxoPWEuaW5kZXhPZihoKSwtMTxoJiZhLnNwbGljZShoLDEpKX19CmZ1bmN0aW9uIFhiKCl7Zm9yKHZhciBhIGluIFBiKXdpbmRvdy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYSl7YS5fX3RhcmdldHx8KFZiKGEpLFNiKGEpKX0sITApfQp2YXIgWWI9Qih7Z2V0IGNvbXBvc2VkKCl7dm9pZCAwPT09dGhpcy5fX2NvbXBvc2VkJiYoSGI/dGhpcy5fX2NvbXBvc2VkPSJmb2N1c2luIj09PXRoaXMudHlwZXx8ImZvY3Vzb3V0Ij09PXRoaXMudHlwZXx8SGIodGhpcyk6ITEhPT10aGlzLmlzVHJ1c3RlZCYmKHRoaXMuX19jb21wb3NlZD1JYlt0aGlzLnR5cGVdKSk7cmV0dXJuIHRoaXMuX19jb21wb3NlZHx8ITF9LGNvbXBvc2VkUGF0aDpmdW5jdGlvbigpe3RoaXMuX19jb21wb3NlZFBhdGh8fCh0aGlzLl9fY29tcG9zZWRQYXRoPUxiKHRoaXMuX190YXJnZXQsdGhpcy5jb21wb3NlZCkpO3JldHVybiB0aGlzLl9fY29tcG9zZWRQYXRofSxnZXQgdGFyZ2V0KCl7cmV0dXJuIE5iKHRoaXMuY3VycmVudFRhcmdldHx8dGhpcy5fX3ByZXZpb3VzQ3VycmVudFRhcmdldCx0aGlzLmNvbXBvc2VkUGF0aCgpKX0sZ2V0IHJlbGF0ZWRUYXJnZXQoKXtpZighdGhpcy5fX3JlbGF0ZWRUYXJnZXQpcmV0dXJuIG51bGw7dGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGh8fAoodGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGg9TGIodGhpcy5fX3JlbGF0ZWRUYXJnZXQsITApKTtyZXR1cm4gTmIodGhpcy5jdXJyZW50VGFyZ2V0fHx0aGlzLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0LHRoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMuWj0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMuWj10aGlzLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPSEwfX0pOwpmdW5jdGlvbiBWYihhKXthLl9fdGFyZ2V0PWEudGFyZ2V0O2EuX19yZWxhdGVkVGFyZ2V0PWEucmVsYXRlZFRhcmdldDtpZih3Lm0pe3ZhciBiPU9iamVjdC5nZXRQcm90b3R5cGVPZihhKTtpZighT2JqZWN0Lmhhc093blByb3BlcnR5KGIsIl9fc2hhZHlfcGF0Y2hlZFByb3RvIikpe3ZhciBjPU9iamVjdC5jcmVhdGUoYik7Yy5fX3NoYWR5X3NvdXJjZVByb3RvPWI7QShjLFliKTtiLl9fc2hhZHlfcGF0Y2hlZFByb3RvPWN9YS5fX3Byb3RvX189Yi5fX3NoYWR5X3BhdGNoZWRQcm90b31lbHNlIEEoYSxZYil9dmFyIFpiPU9iKEV2ZW50KSwkYj1PYihDdXN0b21FdmVudCksYWM9T2IoTW91c2VFdmVudCk7CmZ1bmN0aW9uIGJjKCl7aWYoIUhiJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV2ZW50LnByb3RvdHlwZSwiaXNUcnVzdGVkIikpe3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IE1vdXNlRXZlbnQoImNsaWNrIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNvbXBvc2VkOiEwfSk7dGhpcy5fX3NoYWR5X2Rpc3BhdGNoRXZlbnQoYSl9O0VsZW1lbnQucHJvdG90eXBlLmNsaWNrP0VsZW1lbnQucHJvdG90eXBlLmNsaWNrPWE6SFRNTEVsZW1lbnQucHJvdG90eXBlLmNsaWNrJiYoSFRNTEVsZW1lbnQucHJvdG90eXBlLmNsaWNrPWEpfX12YXIgY2M9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRG9jdW1lbnQucHJvdG90eXBlKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIm9uIj09PWEuc3Vic3RyaW5nKDAsMil9KTtmdW5jdGlvbiBkYyhhLGIpe3JldHVybntpbmRleDphLEw6W10sUjpifX0KZnVuY3Rpb24gZWMoYSxiLGMsZCl7dmFyIGU9MCxmPTAsZz0wLGg9MCxrPU1hdGgubWluKGItZSxkLWYpO2lmKDA9PWUmJjA9PWYpYTp7Zm9yKGc9MDtnPGs7ZysrKWlmKGFbZ10hPT1jW2ddKWJyZWFrIGE7Zz1rfWlmKGI9PWEubGVuZ3RoJiZkPT1jLmxlbmd0aCl7aD1hLmxlbmd0aDtmb3IodmFyIGw9Yy5sZW5ndGgsbT0wO208ay1nJiZmYyhhWy0taF0sY1stLWxdKTspbSsrO2g9bX1lKz1nO2YrPWc7Yi09aDtkLT1oO2lmKDA9PWItZSYmMD09ZC1mKXJldHVybltdO2lmKGU9PWIpe2ZvcihiPWRjKGUsMCk7ZjxkOyliLkwucHVzaChjW2YrK10pO3JldHVybltiXX1pZihmPT1kKXJldHVybltkYyhlLGItZSldO2s9ZTtnPWY7ZD1kLWcrMTtoPWItaysxO2I9QXJyYXkoZCk7Zm9yKGw9MDtsPGQ7bCsrKWJbbF09QXJyYXkoaCksYltsXVswXT1sO2ZvcihsPTA7bDxoO2wrKyliWzBdW2xdPWw7Zm9yKGw9MTtsPGQ7bCsrKWZvcihtPTE7bTxoO20rKylpZihhW2srbS0xXT09PWNbZytsLTFdKWJbbF1bbV09CmJbbC0xXVttLTFdO2Vsc2V7dmFyIHE9YltsLTFdW21dKzEseD1iW2xdW20tMV0rMTtiW2xdW21dPXE8eD9xOnh9az1iLmxlbmd0aC0xO2c9YlswXS5sZW5ndGgtMTtkPWJba11bZ107Zm9yKGE9W107MDxrfHwwPGc7KTA9PWs/KGEucHVzaCgyKSxnLS0pOjA9PWc/KGEucHVzaCgzKSxrLS0pOihoPWJbay0xXVtnLTFdLGw9YltrLTFdW2ddLG09YltrXVtnLTFdLHE9bDxtP2w8aD9sOmg6bTxoP206aCxxPT1oPyhoPT1kP2EucHVzaCgwKTooYS5wdXNoKDEpLGQ9aCksay0tLGctLSk6cT09bD8oYS5wdXNoKDMpLGstLSxkPWwpOihhLnB1c2goMiksZy0tLGQ9bSkpO2EucmV2ZXJzZSgpO2I9dm9pZCAwO2s9W107Zm9yKGc9MDtnPGEubGVuZ3RoO2crKylzd2l0Y2goYVtnXSl7Y2FzZSAwOmImJihrLnB1c2goYiksYj12b2lkIDApO2UrKztmKys7YnJlYWs7Y2FzZSAxOmJ8fChiPWRjKGUsMCkpO2IuUisrO2UrKztiLkwucHVzaChjW2ZdKTtmKys7YnJlYWs7Y2FzZSAyOmJ8fChiPWRjKGUsMCkpOwpiLlIrKztlKys7YnJlYWs7Y2FzZSAzOmJ8fChiPWRjKGUsMCkpLGIuTC5wdXNoKGNbZl0pLGYrK31iJiZrLnB1c2goYik7cmV0dXJuIGt9ZnVuY3Rpb24gZmMoYSxiKXtyZXR1cm4gYT09PWJ9O2Z1bmN0aW9uIGdjKGEsYixjKXtFYihhKTtjPWN8fG51bGw7dmFyIGQ9dShhKSxlPXUoYiksZj1jP3UoYyk6bnVsbDtkLnByZXZpb3VzU2libGluZz1jP2YucHJldmlvdXNTaWJsaW5nOmIuX19zaGFkeV9sYXN0Q2hpbGQ7aWYoZj12KGQucHJldmlvdXNTaWJsaW5nKSlmLm5leHRTaWJsaW5nPWE7aWYoZj12KGQubmV4dFNpYmxpbmc9YykpZi5wcmV2aW91c1NpYmxpbmc9YTtkLnBhcmVudE5vZGU9YjtjP2M9PT1lLmZpcnN0Q2hpbGQmJihlLmZpcnN0Q2hpbGQ9YSk6KGUubGFzdENoaWxkPWEsZS5maXJzdENoaWxkfHwoZS5maXJzdENoaWxkPWEpKTtlLmNoaWxkTm9kZXM9bnVsbH0KZnVuY3Rpb24gaGMoYSxiLGMpe0ZiKGIpO3ZhciBkPXUoYik7dm9pZCAwIT09ZC5maXJzdENoaWxkJiYoZC5jaGlsZE5vZGVzPW51bGwpO2lmKGEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2Q9YS5fX3NoYWR5X2NoaWxkTm9kZXM7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspZ2MoZFtlXSxiLGMpO2E9dShhKTtiPXZvaWQgMCE9PWEuZmlyc3RDaGlsZD9udWxsOnZvaWQgMDthLmZpcnN0Q2hpbGQ9YS5sYXN0Q2hpbGQ9YjthLmNoaWxkTm9kZXM9Yn1lbHNlIGdjKGEsYixjKX0KZnVuY3Rpb24gaWMoYSxiKXt2YXIgYz11KGEpO2I9dShiKTthPT09Yi5maXJzdENoaWxkJiYoYi5maXJzdENoaWxkPWMubmV4dFNpYmxpbmcpO2E9PT1iLmxhc3RDaGlsZCYmKGIubGFzdENoaWxkPWMucHJldmlvdXNTaWJsaW5nKTthPWMucHJldmlvdXNTaWJsaW5nO3ZhciBkPWMubmV4dFNpYmxpbmc7YSYmKHUoYSkubmV4dFNpYmxpbmc9ZCk7ZCYmKHUoZCkucHJldmlvdXNTaWJsaW5nPWEpO2MucGFyZW50Tm9kZT1jLnByZXZpb3VzU2libGluZz1jLm5leHRTaWJsaW5nPXZvaWQgMDt2b2lkIDAhPT1iLmNoaWxkTm9kZXMmJihiLmNoaWxkTm9kZXM9bnVsbCl9CmZ1bmN0aW9uIGpjKGEpe3ZhciBiPXUoYSk7aWYodm9pZCAwPT09Yi5maXJzdENoaWxkKXtiLmNoaWxkTm9kZXM9bnVsbDt2YXIgYz1iLmZpcnN0Q2hpbGQ9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkfHxudWxsO2IubGFzdENoaWxkPWEuX19zaGFkeV9uYXRpdmVfbGFzdENoaWxkfHxudWxsO0ZiKGEpO2I9Yztmb3IoYz12b2lkIDA7YjtiPWIuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmcpe3ZhciBkPXUoYik7ZC5wYXJlbnROb2RlPWE7ZC5uZXh0U2libGluZz1iLl9fc2hhZHlfbmF0aXZlX25leHRTaWJsaW5nfHxudWxsO2QucHJldmlvdXNTaWJsaW5nPWN8fG51bGw7Yz1iO0ViKGIpfX19O3ZhciBrYz1udWxsO2Z1bmN0aW9uIEcoKXtrY3x8KGtjPXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltKTtyZXR1cm4ga2N8fG51bGx9ZnVuY3Rpb24gbGMoYSxiKXt2YXIgYz1HKCk7YyYmYy51bnNjb3BlTm9kZShhLGIpfWZ1bmN0aW9uIG1jKGEsYil7dmFyIGM9RygpO2lmKCFjKXJldHVybiEwO2lmKGEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2M9ITA7YT1hLl9fc2hhZHlfY2hpbGROb2Rlcztmb3IodmFyIGQ9MDtjJiZkPGEubGVuZ3RoO2QrKyljPWMmJm1jKGFbZF0sYik7cmV0dXJuIGN9cmV0dXJuIGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERT8hMDpjLmN1cnJlbnRTY29wZUZvck5vZGUoYSk9PT1ifWZ1bmN0aW9uIG5jKGEpe2lmKGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4iIjt2YXIgYj1HKCk7cmV0dXJuIGI/Yi5jdXJyZW50U2NvcGVGb3JOb2RlKGEpOiIifQpmdW5jdGlvbiBvYyhhLGIpe2lmKGEpe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmYihhKTthPWEuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgYz0wLGQ7YzxhLmxlbmd0aDtjKyspZD1hW2NdLGQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmb2MoZCxiKX19O3ZhciBwYz13aW5kb3cuZG9jdW1lbnQscWM9dy5vYSxyYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLCJpc0Nvbm5lY3RlZCIpLHNjPXJjJiZyYy5nZXQ7ZnVuY3Rpb24gdGMoYSl7Zm9yKHZhciBiO2I9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7KWEuX19zaGFkeV9yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiB1YyhhKXt2YXIgYj12KGEpO2lmKGImJnZvaWQgMCE9PWIuSyl7Yj1hLl9fc2hhZHlfY2hpbGROb2Rlcztmb3IodmFyIGM9MCxkPWIubGVuZ3RoLGU9dm9pZCAwO2M8ZCYmKGU9YltjXSk7YysrKXVjKGUpfWlmKGE9dihhKSlhLks9dm9pZCAwfWZ1bmN0aW9uIHZjKGEpe3ZhciBiPWE7YSYmInNsb3QiPT09YS5sb2NhbE5hbWUmJihiPShiPShiPXYoYSkpJiZiLkQpJiZiLmxlbmd0aD9iWzBdOnZjKGEuX19zaGFkeV9uZXh0U2libGluZykpO3JldHVybiBifQpmdW5jdGlvbiB3YyhhLGIsYyl7aWYoYT0oYT12KGEpKSYmYS5IKWImJmEuYWRkZWROb2Rlcy5wdXNoKGIpLGMmJmEucmVtb3ZlZE5vZGVzLnB1c2goYyksYWIoYSl9CnZhciBDYz1CKHtnZXQgcGFyZW50Tm9kZSgpe3ZhciBhPXYodGhpcyk7YT1hJiZhLnBhcmVudE5vZGU7cmV0dXJuIHZvaWQgMCE9PWE/YTp0aGlzLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGV9LGdldCBmaXJzdENoaWxkKCl7dmFyIGE9dih0aGlzKTthPWEmJmEuZmlyc3RDaGlsZDtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZH0sZ2V0IGxhc3RDaGlsZCgpe3ZhciBhPXYodGhpcyk7YT1hJiZhLmxhc3RDaGlsZDtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfbGFzdENoaWxkfSxnZXQgbmV4dFNpYmxpbmcoKXt2YXIgYT12KHRoaXMpO2E9YSYmYS5uZXh0U2libGluZztyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmd9LGdldCBwcmV2aW91c1NpYmxpbmcoKXt2YXIgYT12KHRoaXMpO2E9YSYmYS5wcmV2aW91c1NpYmxpbmc7cmV0dXJuIHZvaWQgMCE9PWE/YTp0aGlzLl9fc2hhZHlfbmF0aXZlX3ByZXZpb3VzU2libGluZ30sCmdldCBjaGlsZE5vZGVzKCl7aWYoeSh0aGlzKSl7dmFyIGE9dih0aGlzKTtpZighYS5jaGlsZE5vZGVzKXthLmNoaWxkTm9kZXM9W107Zm9yKHZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpYS5jaGlsZE5vZGVzLnB1c2goYil9dmFyIGM9YS5jaGlsZE5vZGVzfWVsc2UgYz10aGlzLl9fc2hhZHlfbmF0aXZlX2NoaWxkTm9kZXM7Yy5pdGVtPWZ1bmN0aW9uKGEpe3JldHVybiBjW2FdfTtyZXR1cm4gY30sZ2V0IHBhcmVudEVsZW1lbnQoKXt2YXIgYT12KHRoaXMpOyhhPWEmJmEucGFyZW50Tm9kZSkmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSYmKGE9bnVsbCk7cmV0dXJuIHZvaWQgMCE9PWE/YTp0aGlzLl9fc2hhZHlfbmF0aXZlX3BhcmVudEVsZW1lbnR9LGdldCBpc0Nvbm5lY3RlZCgpe2lmKHNjJiZzYy5jYWxsKHRoaXMpKXJldHVybiEwO2lmKHRoaXMubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSlyZXR1cm4hMTsKdmFyIGE9dGhpcy5vd25lckRvY3VtZW50O2lmKFRhKXtpZihhLl9fc2hhZHlfbmF0aXZlX2NvbnRhaW5zKHRoaXMpKXJldHVybiEwfWVsc2UgaWYoYS5kb2N1bWVudEVsZW1lbnQmJmEuZG9jdW1lbnRFbGVtZW50Ll9fc2hhZHlfbmF0aXZlX2NvbnRhaW5zKHRoaXMpKXJldHVybiEwO2ZvcihhPXRoaXM7YSYmIShhIGluc3RhbmNlb2YgRG9jdW1lbnQpOylhPWEuX19zaGFkeV9wYXJlbnROb2RlfHwoeihhKT9hLmhvc3Q6dm9pZCAwKTtyZXR1cm4hIShhJiZhIGluc3RhbmNlb2YgRG9jdW1lbnQpfSxnZXQgdGV4dENvbnRlbnQoKXtpZih5KHRoaXMpKXtmb3IodmFyIGE9W10sYj0wLGM9dGhpcy5fX3NoYWR5X2NoaWxkTm9kZXMsZDtkPWNbYl07YisrKWQubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmYS5wdXNoKGQuX19zaGFkeV90ZXh0Q29udGVudCk7cmV0dXJuIGEuam9pbigiIil9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnR9LHNldCB0ZXh0Q29udGVudChhKXtpZigidW5kZWZpbmVkIj09PQp0eXBlb2YgYXx8bnVsbD09PWEpYT0iIjtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTppZigheSh0aGlzKSYmdy5tKXt2YXIgYj10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDsoYiE9dGhpcy5fX3NoYWR5X2xhc3RDaGlsZHx8YiYmYi5ub2RlVHlwZSE9Tm9kZS5URVhUX05PREUpJiZ0Yyh0aGlzKTt0aGlzLl9fc2hhZHlfbmF0aXZlX3RleHRDb250ZW50PWF9ZWxzZSB0Yyh0aGlzKSwoMDxhLmxlbmd0aHx8dGhpcy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKSYmdGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShhKSk7YnJlYWs7ZGVmYXVsdDp0aGlzLm5vZGVWYWx1ZT1hfX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGEsYil7aWYodGhpcy5vd25lckRvY3VtZW50IT09cGMmJmEub3duZXJEb2N1bWVudCE9PXBjKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShhLApiKSxhO2lmKGE9PT10aGlzKXRocm93IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXBwZW5kQ2hpbGQnIG9uICdOb2RlJzogVGhlIG5ldyBjaGlsZCBlbGVtZW50IGNvbnRhaW5zIHRoZSBwYXJlbnQuIik7aWYoYil7dmFyIGM9dihiKTtjPWMmJmMucGFyZW50Tm9kZTtpZih2b2lkIDAhPT1jJiZjIT09dGhpc3x8dm9pZCAwPT09YyYmYi5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlIT09dGhpcyl0aHJvdyBFcnJvcigiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS4iKTt9aWYoYj09PWEpcmV0dXJuIGE7dmFyIGQ9W10sZT0oYz14Yyh0aGlzKSk/Yy5ob3N0LmxvY2FsTmFtZTpuYyh0aGlzKSxmPWEuX19zaGFkeV9wYXJlbnROb2RlO2lmKGYpe3ZhciBnPW5jKGEpO2YuX19zaGFkeV9yZW1vdmVDaGlsZChhLCEhY3x8CiF4YyhhKSl9Zj0hMDt2YXIgaD0oIXFjfHx2b2lkIDA9PT1hLl9fbm9JbnNlcnRpb25Qb2ludCkmJiFtYyhhLGUpLGs9YyYmIWEuX19ub0luc2VydGlvblBvaW50JiYoIXFjfHxhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTtpZihrfHxoKWgmJihnPWd8fG5jKGEpKSxvYyhhLGZ1bmN0aW9uKGEpe2smJiJzbG90Ij09PWEubG9jYWxOYW1lJiZkLnB1c2goYSk7aWYoaCl7dmFyIGI9ZztHKCkmJihiJiZsYyhhLGIpLChiPUcoKSkmJmIuc2NvcGVOb2RlKGEsZSkpfX0pO2lmKCJzbG90Ij09PXRoaXMubG9jYWxOYW1lfHxkLmxlbmd0aClkLmxlbmd0aCYmKGMuYz1jLmN8fFtdLGMuYT1jLmF8fFtdLGMuYj1jLmJ8fHt9LGMuYy5wdXNoLmFwcGx5KGMuYyxkIGluc3RhbmNlb2YgQXJyYXk/ZDpqYShpYShkKSkpKSxjJiZBYyhjKTt5KHRoaXMpJiYoaGMoYSx0aGlzLGIpLGM9dih0aGlzKSxMYSh0aGlzKT8oQWMoYy5yb290KSxmPSExKTpjLnJvb3QmJihmPSExKSk7Zj8KKGM9eih0aGlzKT90aGlzLmhvc3Q6dGhpcyxiPyhiPXZjKGIpLGMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGEsYikpOmMuX19zaGFkeV9uYXRpdmVfYXBwZW5kQ2hpbGQoYSkpOmEub3duZXJEb2N1bWVudCE9PXRoaXMub3duZXJEb2N1bWVudCYmdGhpcy5vd25lckRvY3VtZW50LmFkb3B0Tm9kZShhKTt3Yyh0aGlzLGEpO3JldHVybiBhfSxhcHBlbmRDaGlsZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oYSxiKXtiPXZvaWQgMD09PWI/ITE6YjtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1wYylyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChhKTtpZihhLl9fc2hhZHlfcGFyZW50Tm9kZSE9PXRoaXMpdGhyb3cgRXJyb3IoIlRoZSBub2RlIHRvIGJlIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlOiAiK2EpO3ZhciBjPXhjKGEpLGQ9YyYmQmMoYyxhKSxlPXYodGhpcyk7CmlmKHkodGhpcykmJihpYyhhLHRoaXMpLExhKHRoaXMpKSl7QWMoZS5yb290KTt2YXIgZj0hMH1pZihHKCkmJiFiJiZjKXt2YXIgZz1uYyhhKTtvYyhhLGZ1bmN0aW9uKGEpe2xjKGEsZyl9KX11YyhhKTtjJiYoKGI9dGhpcyYmInNsb3QiPT09dGhpcy5sb2NhbE5hbWUpJiYoZj0hMCksKGR8fGIpJiZBYyhjKSk7Znx8KGY9eih0aGlzKT90aGlzLmhvc3Q6dGhpcywoIWUucm9vdCYmInNsb3QiIT09YS5sb2NhbE5hbWV8fGY9PT1hLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUpJiZmLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpKTt3Yyh0aGlzLG51bGwsYSk7cmV0dXJuIGF9LHJlcGxhY2VDaGlsZDpmdW5jdGlvbihhLGIpe3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoYSxiKTt0aGlzLl9fc2hhZHlfcmVtb3ZlQ2hpbGQoYik7cmV0dXJuIGF9LGNsb25lTm9kZTpmdW5jdGlvbihhKXtpZigidGVtcGxhdGUiPT10aGlzLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9jbG9uZU5vZGUoYSk7CnZhciBiPXRoaXMuX19zaGFkeV9uYXRpdmVfY2xvbmVOb2RlKCExKTtpZihhJiZiLm5vZGVUeXBlIT09Tm9kZS5BVFRSSUJVVEVfTk9ERSl7YT10aGlzLl9fc2hhZHlfY2hpbGROb2Rlcztmb3IodmFyIGM9MCxkO2M8YS5sZW5ndGg7YysrKWQ9YVtjXS5fX3NoYWR5X2Nsb25lTm9kZSghMCksYi5fX3NoYWR5X2FwcGVuZENoaWxkKGQpfXJldHVybiBifSxnZXRSb290Tm9kZTpmdW5jdGlvbihhKXtpZih0aGlzJiZ0aGlzLm5vZGVUeXBlKXt2YXIgYj11KHRoaXMpLGM9Yi5LO3ZvaWQgMD09PWMmJih6KHRoaXMpPyhjPXRoaXMsYi5LPWMpOihjPShjPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlKT9jLl9fc2hhZHlfZ2V0Um9vdE5vZGUoYSk6dGhpcyxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykmJihiLks9YykpKTtyZXR1cm4gY319LGNvbnRhaW5zOmZ1bmN0aW9uKGEpe3JldHVybiBVYSh0aGlzLGEpfX0pO2Z1bmN0aW9uIERjKGEsYixjKXt2YXIgZD1bXTtFYyhhLl9fc2hhZHlfY2hpbGROb2RlcyxiLGMsZCk7cmV0dXJuIGR9ZnVuY3Rpb24gRWMoYSxiLGMsZCl7Zm9yKHZhciBlPTAsZj1hLmxlbmd0aCxnPXZvaWQgMDtlPGYmJihnPWFbZV0pO2UrKyl7dmFyIGg7aWYoaD1nLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2g9Zzt2YXIgaz1iLGw9YyxtPWQscT1rKGgpO3EmJm0ucHVzaChoKTtsJiZsKHEpP2g9cTooRWMoaC5fX3NoYWR5X2NoaWxkTm9kZXMsayxsLG0pLGg9dm9pZCAwKX1pZihoKWJyZWFrfX0KdmFyIEZjPUIoe2dldCBmaXJzdEVsZW1lbnRDaGlsZCgpe3ZhciBhPXYodGhpcyk7aWYoYSYmdm9pZCAwIT09YS5maXJzdENoaWxkKXtmb3IoYT10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2ZpcnN0RWxlbWVudENoaWxkfSxnZXQgbGFzdEVsZW1lbnRDaGlsZCgpe3ZhciBhPXYodGhpcyk7aWYoYSYmdm9pZCAwIT09YS5sYXN0Q2hpbGQpe2ZvcihhPXRoaXMuX19zaGFkeV9sYXN0Q2hpbGQ7YSYmYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFOylhPWEuX19zaGFkeV9wcmV2aW91c1NpYmxpbmc7cmV0dXJuIGF9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfbGFzdEVsZW1lbnRDaGlsZH0sZ2V0IGNoaWxkcmVuKCl7cmV0dXJuIHkodGhpcyk/VmEoQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHRoaXMuX19zaGFkeV9jaGlsZE5vZGVzLApmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSkpOnRoaXMuX19zaGFkeV9uYXRpdmVfY2hpbGRyZW59LGdldCBjaGlsZEVsZW1lbnRDb3VudCgpe3ZhciBhPXRoaXMuX19zaGFkeV9jaGlsZHJlbjtyZXR1cm4gYT9hLmxlbmd0aDowfX0pLEdjPUIoe3F1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYSl7cmV0dXJuIERjKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIE9hLmNhbGwoYixhKX0sZnVuY3Rpb24oYSl7cmV0dXJuISFhfSlbMF18fG51bGx9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYSxiKXtpZihiKXtiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvckFsbChhKSk7dmFyIGM9dGhpcy5fX3NoYWR5X2dldFJvb3ROb2RlKCk7cmV0dXJuIGIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKT09Y30pfXJldHVybiBEYyh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBPYS5jYWxsKGIsCmEpfSl9fSksSGM9dy5vYT9PYmplY3QuYXNzaWduKHt9LEZjKTpGYztPYmplY3QuYXNzaWduKEZjLEdjKTt2YXIgSWM9Qih7Z2V0RWxlbWVudEJ5SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIiI9PT1hP251bGw6RGModGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYi5pZD09YX0sZnVuY3Rpb24oYSl7cmV0dXJuISFhfSlbMF18fG51bGx9fSk7dmFyIEpjPUIoe2dldCBhY3RpdmVFbGVtZW50KCl7dmFyIGE9dy5tP2RvY3VtZW50Ll9fc2hhZHlfbmF0aXZlX2FjdGl2ZUVsZW1lbnQ6ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZighYXx8IWEubm9kZVR5cGUpcmV0dXJuIG51bGw7dmFyIGI9ISF6KHRoaXMpO2lmKCEodGhpcz09PWRvY3VtZW50fHxiJiZ0aGlzLmhvc3QhPT1hJiZ0aGlzLmhvc3QuX19zaGFkeV9uYXRpdmVfY29udGFpbnMoYSkpKXJldHVybiBudWxsO2ZvcihiPXhjKGEpO2ImJmIhPT10aGlzOylhPWIuaG9zdCxiPXhjKGEpO3JldHVybiB0aGlzPT09ZG9jdW1lbnQ/Yj9udWxsOmE6Yj09PXRoaXM/YTpudWxsfX0pO3ZhciBLYz1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImluZXJ0IiksTGM9Qih7Z2V0IGlubmVySFRNTCgpe3JldHVybiB5KHRoaXMpP2tiKCJ0ZW1wbGF0ZSI9PT10aGlzLmxvY2FsTmFtZT90aGlzLmNvbnRlbnQ6dGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3NoYWR5X2NoaWxkTm9kZXN9KTp0aGlzLl9fc2hhZHlfbmF0aXZlX2lubmVySFRNTH0sc2V0IGlubmVySFRNTChhKXtpZigidGVtcGxhdGUiPT09dGhpcy5sb2NhbE5hbWUpdGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTtlbHNle3RjKHRoaXMpO3ZhciBiPXRoaXMubG9jYWxOYW1lfHwiZGl2IjtiPXRoaXMubmFtZXNwYWNlVVJJJiZ0aGlzLm5hbWVzcGFjZVVSSSE9PUtjLm5hbWVzcGFjZVVSST9LYy5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksYik6S2MuY3JlYXRlRWxlbWVudChiKTtmb3Iody5tP2IuX19zaGFkeV9uYXRpdmVfaW5uZXJIVE1MPWE6Yi5pbm5lckhUTUw9CmE7YT1iLl9fc2hhZHlfZmlyc3RDaGlsZDspdGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhKX19fSk7dmFyIE1jPUIoe2FkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpeyJvYmplY3QiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO2MuJD10aGlzO3RoaXMuaG9zdC5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoYSxiLGMpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXsib2JqZWN0IiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTtjLiQ9dGhpczt0aGlzLmhvc3QuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKX19KTtmdW5jdGlvbiBOYyhhLGIpe0EoYSxNYyxiKTtBKGEsSmMsYik7QShhLExjLGIpO0EoYSxGYyxiKTt3LkomJiFiPyhBKGEsQ2MsYiksQShhLEljLGIpKTp3Lm18fChBKGEsQWIpLEEoYSx6YikpfTt2YXIgT2M9e30sUGM9dy5kZWZlckNvbm5lY3Rpb25DYWxsYmFja3MmJiJsb2FkaW5nIj09PWRvY3VtZW50LnJlYWR5U3RhdGUsUWM7ZnVuY3Rpb24gUmMoYSl7dmFyIGI9W107ZG8gYi51bnNoaWZ0KGEpO3doaWxlKGE9YS5fX3NoYWR5X3BhcmVudE5vZGUpO3JldHVybiBifQpmdW5jdGlvbiBTYyhhLGIsYyl7aWYoYSE9PU9jKXRocm93IG5ldyBUeXBlRXJyb3IoIklsbGVnYWwgY29uc3RydWN0b3IiKTt0aGlzLnphPSJTaGFkeVJvb3QiO3RoaXMuaG9zdD1iO3RoaXMubW9kZT1jJiZjLm1vZGU7amMoYik7YT11KGIpO2Eucm9vdD10aGlzO2EucGE9ImNsb3NlZCIhPT10aGlzLm1vZGU/dGhpczpudWxsO2E9dSh0aGlzKTthLmZpcnN0Q2hpbGQ9YS5sYXN0Q2hpbGQ9YS5wYXJlbnROb2RlPWEubmV4dFNpYmxpbmc9YS5wcmV2aW91c1NpYmxpbmc9bnVsbDthLmNoaWxkTm9kZXM9W107dGhpcy5iYT10aGlzLkI9ITE7dGhpcy5jPXRoaXMuYj10aGlzLmE9bnVsbDtpZih3LnByZWZlclBlcmZvcm1hbmNlKWZvcig7YT1iLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7KWIuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoYSk7ZWxzZSBBYyh0aGlzKX1mdW5jdGlvbiBBYyhhKXthLkJ8fChhLkI9ITAsWWEoZnVuY3Rpb24oKXtyZXR1cm4gVGMoYSl9KSl9CmZ1bmN0aW9uIFRjKGEpe3ZhciBiO2lmKGI9YS5CKXtmb3IodmFyIGM7YTspYTp7YS5CJiYoYz1hKSxiPWE7YT1iLmhvc3QuX19zaGFkeV9nZXRSb290Tm9kZSgpO2lmKHooYSkmJihiPXYoYi5ob3N0KSkmJjA8Yi5OKWJyZWFrIGE7YT12b2lkIDB9Yj1jfShjPWIpJiZjLl9yZW5kZXJTZWxmKCl9ClNjLnByb3RvdHlwZS5fcmVuZGVyU2VsZj1mdW5jdGlvbigpe3ZhciBhPVBjO1BjPSEwO3RoaXMuQj0hMTtpZih0aGlzLmEpe1VjKHRoaXMpO2Zvcih2YXIgYj0wLGM7Yjx0aGlzLmEubGVuZ3RoO2IrKyl7Yz10aGlzLmFbYl07dmFyIGQ9dihjKSxlPWQuYXNzaWduZWROb2RlcztkLmFzc2lnbmVkTm9kZXM9W107ZC5EPVtdO2lmKGQuY2E9ZSlmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgZj12KGVbZF0pO2YuUD1mLmFzc2lnbmVkU2xvdDtmLmFzc2lnbmVkU2xvdD09PWMmJihmLmFzc2lnbmVkU2xvdD1udWxsKX19Zm9yKGI9dGhpcy5ob3N0Ll9fc2hhZHlfZmlyc3RDaGlsZDtiO2I9Yi5fX3NoYWR5X25leHRTaWJsaW5nKVZjKHRoaXMsYik7Zm9yKGI9MDtiPHRoaXMuYS5sZW5ndGg7YisrKXtjPXRoaXMuYVtiXTtlPXYoYyk7aWYoIWUuYXNzaWduZWROb2Rlcy5sZW5ndGgpZm9yKGQ9Yy5fX3NoYWR5X2ZpcnN0Q2hpbGQ7ZDtkPWQuX19zaGFkeV9uZXh0U2libGluZylWYyh0aGlzLApkLGMpOyhkPShkPXYoYy5fX3NoYWR5X3BhcmVudE5vZGUpKSYmZC5yb290KSYmKE1hKGQpfHxkLkIpJiZkLl9yZW5kZXJTZWxmKCk7V2ModGhpcyxlLkQsZS5hc3NpZ25lZE5vZGVzKTtpZihkPWUuY2Epe2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspdihkW2ZdKS5QPW51bGw7ZS5jYT1udWxsO2QubGVuZ3RoPmUuYXNzaWduZWROb2Rlcy5sZW5ndGgmJihlLlQ9ITApfWUuVCYmKGUuVD0hMSxYYyh0aGlzLGMpKX1jPXRoaXMuYTtiPVtdO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspZD1jW2VdLl9fc2hhZHlfcGFyZW50Tm9kZSwoZj12KGQpKSYmZi5yb290fHwhKDA+Yi5pbmRleE9mKGQpKXx8Yi5wdXNoKGQpO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2Y9YltjXTtlPWY9PT10aGlzP3RoaXMuaG9zdDpmO2Q9W107Zj1mLl9fc2hhZHlfY2hpbGROb2Rlcztmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXTtpZigic2xvdCI9PWgubG9jYWxOYW1lKXtoPXYoaCkuRDtmb3IodmFyIGs9CjA7azxoLmxlbmd0aDtrKyspZC5wdXNoKGhba10pfWVsc2UgZC5wdXNoKGgpfWY9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5fX3NoYWR5X25hdGl2ZV9jaGlsZE5vZGVzKTtnPWVjKGQsZC5sZW5ndGgsZixmLmxlbmd0aCk7az1oPTA7Zm9yKHZhciBsPXZvaWQgMDtoPGcubGVuZ3RoJiYobD1nW2hdKTtoKyspe2Zvcih2YXIgbT0wLHE9dm9pZCAwO208bC5MLmxlbmd0aCYmKHE9bC5MW21dKTttKyspcS5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlPT09ZSYmZS5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChxKSxmLnNwbGljZShsLmluZGV4K2ssMSk7ay09bC5SfWs9MDtmb3IobD12b2lkIDA7azxnLmxlbmd0aCYmKGw9Z1trXSk7aysrKWZvcihoPWZbbC5pbmRleF0sbT1sLmluZGV4O208bC5pbmRleCtsLlI7bSsrKXE9ZFttXSxlLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShxLGgpLGYuc3BsaWNlKG0sMCxxKX19aWYoIXcucHJlZmVyUGVyZm9ybWFuY2UmJiF0aGlzLmJhKWZvcihiPQp0aGlzLmhvc3QuX19zaGFkeV9jaGlsZE5vZGVzLGM9MCxlPWIubGVuZ3RoO2M8ZTtjKyspZD1iW2NdLGY9dihkKSxkLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT10aGlzLmhvc3R8fCJzbG90IiE9PWQubG9jYWxOYW1lJiZmLmFzc2lnbmVkU2xvdHx8dGhpcy5ob3N0Ll9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGQpO3RoaXMuYmE9ITA7UGM9YTtRYyYmUWMoKX07ZnVuY3Rpb24gVmMoYSxiLGMpe3ZhciBkPXUoYiksZT1kLlA7ZC5QPW51bGw7Y3x8KGM9KGE9YS5iW2IuX19zaGFkeV9zbG90fHwiX19jYXRjaGFsbCJdKSYmYVswXSk7Yz8odShjKS5hc3NpZ25lZE5vZGVzLnB1c2goYiksZC5hc3NpZ25lZFNsb3Q9Yyk6ZC5hc3NpZ25lZFNsb3Q9dm9pZCAwO2UhPT1kLmFzc2lnbmVkU2xvdCYmZC5hc3NpZ25lZFNsb3QmJih1KGQuYXNzaWduZWRTbG90KS5UPSEwKX0KZnVuY3Rpb24gV2MoYSxiLGMpe2Zvcih2YXIgZD0wLGU9dm9pZCAwO2Q8Yy5sZW5ndGgmJihlPWNbZF0pO2QrKylpZigic2xvdCI9PWUubG9jYWxOYW1lKXt2YXIgZj12KGUpLmFzc2lnbmVkTm9kZXM7ZiYmZi5sZW5ndGgmJldjKGEsYixmKX1lbHNlIGIucHVzaChjW2RdKX1mdW5jdGlvbiBYYyhhLGIpe2IuX19zaGFkeV9uYXRpdmVfZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInNsb3RjaGFuZ2UiKSk7Yj12KGIpO2IuYXNzaWduZWRTbG90JiZYYyhhLGIuYXNzaWduZWRTbG90KX0KZnVuY3Rpb24gVWMoYSl7aWYoYS5jJiZhLmMubGVuZ3RoKXtmb3IodmFyIGI9YS5jLGMsZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdO2pjKGUpO3ZhciBmPWUuX19zaGFkeV9wYXJlbnROb2RlO2pjKGYpO2Y9dihmKTtmLk49KGYuTnx8MCkrMTtmPVljKGUpO2EuYltmXT8oYz1jfHx7fSxjW2ZdPSEwLGEuYltmXS5wdXNoKGUpKTphLmJbZl09W2VdO2EuYS5wdXNoKGUpfWlmKGMpZm9yKHZhciBnIGluIGMpYS5iW2ddPVpjKGEuYltnXSk7YS5jPVtdfX1mdW5jdGlvbiBZYyhhKXt2YXIgYj1hLm5hbWV8fGEuZ2V0QXR0cmlidXRlKCJuYW1lIil8fCJfX2NhdGNoYWxsIjtyZXR1cm4gYS53YT1ifQpmdW5jdGlvbiBaYyhhKXtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKGEsYyl7YT1SYyhhKTtmb3IodmFyIGI9UmMoYyksZT0wO2U8YS5sZW5ndGg7ZSsrKXtjPWFbZV07dmFyIGY9YltlXTtpZihjIT09ZilyZXR1cm4gYT1BcnJheS5mcm9tKGMuX19zaGFkeV9wYXJlbnROb2RlLl9fc2hhZHlfY2hpbGROb2RlcyksYS5pbmRleE9mKGMpLWEuaW5kZXhPZihmKX19KX0KZnVuY3Rpb24gQmMoYSxiKXtpZihhLmEpe1VjKGEpO3ZhciBjPWEuYixkO2ZvcihkIGluIGMpZm9yKHZhciBlPWNbZF0sZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgZz1lW2ZdO2lmKFVhKGIsZykpe2Uuc3BsaWNlKGYsMSk7dmFyIGg9YS5hLmluZGV4T2YoZyk7MDw9aCYmKGEuYS5zcGxpY2UoaCwxKSwoaD12KGcuX19zaGFkeV9wYXJlbnROb2RlKSkmJmguTiYmaC5OLS0pO2YtLTtnPXYoZyk7aWYoaD1nLkQpZm9yKHZhciBrPTA7azxoLmxlbmd0aDtrKyspe3ZhciBsPWhba10sbT1sLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGU7bSYmbS5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChsKX1nLkQ9W107Zy5hc3NpZ25lZE5vZGVzPVtdO2g9ITB9fXJldHVybiBofX1mdW5jdGlvbiBNYShhKXtVYyhhKTtyZXR1cm4hKCFhLmF8fCFhLmEubGVuZ3RoKX0KKGZ1bmN0aW9uKGEpe2EuX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO05jKGEsIl9fc2hhZHlfIik7TmMoYSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYSx7bm9kZVR5cGU6e3ZhbHVlOk5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSxjb25maWd1cmFibGU6ITB9LG5vZGVOYW1lOnt2YWx1ZToiI2RvY3VtZW50LWZyYWdtZW50Iixjb25maWd1cmFibGU6ITB9LG5vZGVWYWx1ZTp7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9fSk7WyJsb2NhbE5hbWUiLCJuYW1lc3BhY2VVUkkiLCJwcmVmaXgiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOnZvaWQgMCxjb25maWd1cmFibGU6ITB9KX0pO1sib3duZXJEb2N1bWVudCIsImJhc2VVUkkiLCJpc0Nvbm5lY3RlZCJdLmZvckVhY2goZnVuY3Rpb24oYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG9zdFtiXX0sCmNvbmZpZ3VyYWJsZTohMH0pfSl9KShTYy5wcm90b3R5cGUpOwppZih3aW5kb3cuY3VzdG9tRWxlbWVudHMmJncuZWEmJiF3LnByZWZlclBlcmZvcm1hbmNlKXt2YXIgJGM9bmV3IE1hcDtRYz1mdW5jdGlvbigpe3ZhciBhPVtdOyRjLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goW2MsYl0pfSk7JGMuY2xlYXIoKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9YVtiXVswXTthW2JdWzFdP2MudWEoKTpjLnZhKCl9fTtQYyYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24oKXtQYz0hMTtRYygpfSx7b25jZTohMH0pO3ZhciBhZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MCxlPSJfX2lzQ29ubmVjdGVkIitkKys7aWYoYnx8YylhLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaz1hLnByb3RvdHlwZS51YT1mdW5jdGlvbigpe1BjPyRjLnNldCh0aGlzLCEwKTp0aGlzW2VdfHwodGhpc1tlXT0hMCxiJiZiLmNhbGwodGhpcykpfSxhLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz0KYS5wcm90b3R5cGUudmE9ZnVuY3Rpb24oKXtQYz90aGlzLmlzQ29ubmVjdGVkfHwkYy5zZXQodGhpcywhMSk6dGhpc1tlXSYmKHRoaXNbZV09ITEsYyYmYy5jYWxsKHRoaXMpKX07cmV0dXJuIGF9LGJkPXdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5DdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLCJkZWZpbmUiLHt2YWx1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPWIucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrLGQ9Yi5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s7YmQuY2FsbCh3aW5kb3cuY3VzdG9tRWxlbWVudHMsYSxhZChiLGMsZCkpO2IucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWM7Yi5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZH19KX1mdW5jdGlvbiB4YyhhKXthPWEuX19zaGFkeV9nZXRSb290Tm9kZSgpO2lmKHooYSkpcmV0dXJuIGF9O2Z1bmN0aW9uIGNkKGEpe3RoaXMubm9kZT1hfW49Y2QucHJvdG90eXBlO24uYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoYSxiLGMpfTtuLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKX07bi5hcHBlbmRDaGlsZD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYXBwZW5kQ2hpbGQoYSl9O24uaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2luc2VydEJlZm9yZShhLGIpfTtuLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZW1vdmVDaGlsZChhKX07bi5yZXBsYWNlQ2hpbGQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcmVwbGFjZUNoaWxkKGEsYil9OwpuLmNsb25lTm9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2xvbmVOb2RlKGEpfTtuLmdldFJvb3ROb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9nZXRSb290Tm9kZShhKX07bi5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY29udGFpbnMoYSl9O24uZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChhKX07bi5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGUuX19zaGFkeV9zZXRBdHRyaWJ1dGUoYSxiKX07bi5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9nZXRBdHRyaWJ1dGUoYSl9O24uaGFzQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uYXRpdmVfaGFzQXR0cmlidXRlKGEpfTtuLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihhKXt0aGlzLm5vZGUuX19zaGFkeV9yZW1vdmVBdHRyaWJ1dGUoYSl9OwpuLmF0dGFjaFNoYWRvdz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYXR0YWNoU2hhZG93KGEpfTtuLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5ub2RlLl9fc2hhZHlfbmF0aXZlX2ZvY3VzKCl9O24uYmx1cj1mdW5jdGlvbigpe3RoaXMubm9kZS5fX3NoYWR5X2JsdXIoKX07bi5pbXBvcnROb2RlPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5ub2RlLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9OT0RFKXJldHVybiB0aGlzLm5vZGUuX19zaGFkeV9pbXBvcnROb2RlKGEsYil9O24uZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oYSl7aWYodGhpcy5ub2RlLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9OT0RFKXJldHVybiB0aGlzLm5vZGUuX19zaGFkeV9nZXRFbGVtZW50QnlJZChhKX07bi5xdWVyeVNlbGVjdG9yPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9xdWVyeVNlbGVjdG9yKGEpfTsKbi5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3JBbGwoYSxiKX07bi5hc3NpZ25lZE5vZGVzPWZ1bmN0aW9uKGEpe2lmKCJzbG90Ij09PXRoaXMubm9kZS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkTm9kZXMoYSl9OwpwLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNkLnByb3RvdHlwZSx7YWN0aXZlRWxlbWVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoeih0aGlzLm5vZGUpfHx0aGlzLm5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2FjdGl2ZUVsZW1lbnR9fSxfYWN0aXZlRWxlbWVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWxlbWVudH19LGhvc3Q6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHoodGhpcy5ub2RlKSlyZXR1cm4gdGhpcy5ub2RlLmhvc3R9fSxwYXJlbnROb2RlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcGFyZW50Tm9kZX19LGZpcnN0Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCwKZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZmlyc3RDaGlsZH19LGxhc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2xhc3RDaGlsZH19LG5leHRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmV4dFNpYmxpbmd9fSxwcmV2aW91c1NpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmV2aW91c1NpYmxpbmd9fSxjaGlsZE5vZGVzOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGROb2Rlc319LHBhcmVudEVsZW1lbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLApnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcGFyZW50RWxlbWVudH19LGZpcnN0RWxlbWVudENoaWxkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZmlyc3RFbGVtZW50Q2hpbGR9fSxsYXN0RWxlbWVudENoaWxkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbGFzdEVsZW1lbnRDaGlsZH19LG5leHRFbGVtZW50U2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25leHRFbGVtZW50U2libGluZ319LHByZXZpb3VzRWxlbWVudFNpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmV2aW91c0VsZW1lbnRTaWJsaW5nfX0sCmNoaWxkcmVuOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGRyZW59fSxjaGlsZEVsZW1lbnRDb3VudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NoaWxkRWxlbWVudENvdW50fX0sc2hhZG93Um9vdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3NoYWRvd1Jvb3R9fSxhc3NpZ25lZFNsb3Q6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hc3NpZ25lZFNsb3R9fSxpc0Nvbm5lY3RlZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2lzQ29ubmVjdGVkfX0saW5uZXJIVE1MOntjb25maWd1cmFibGU6ITAsCmVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2lubmVySFRNTH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X2lubmVySFRNTD1hfX0sdGV4dENvbnRlbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV90ZXh0Q29udGVudH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3RleHRDb250ZW50PWF9fSxzbG90Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2xvdH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3Nsb3Q9YX19fSk7CmNjLmZvckVhY2goZnVuY3Rpb24oYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGNkLnByb3RvdHlwZSxhLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlWyJfX3NoYWR5XyIrYV19LHNldDpmdW5jdGlvbihiKXt0aGlzLm5vZGVbIl9fc2hhZHlfIithXT1ifSxjb25maWd1cmFibGU6ITB9KX0pO3ZhciBkZD1uZXcgV2Vha01hcDtmdW5jdGlvbiBlZChhKXtpZih6KGEpfHxhIGluc3RhbmNlb2YgY2QpcmV0dXJuIGE7dmFyIGI9ZGQuZ2V0KGEpO2J8fChiPW5ldyBjZChhKSxkZC5zZXQoYSxiKSk7cmV0dXJuIGJ9O3ZhciBmZD1CKHtkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKGEpe1phKCk7cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfZGlzcGF0Y2hFdmVudChhKX0sYWRkRXZlbnRMaXN0ZW5lcjpVYixyZW1vdmVFdmVudExpc3RlbmVyOldifSk7dmFyIGdkPUIoe2dldCBhc3NpZ25lZFNsb3QoKXt2YXIgYT10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTsoYT1hJiZhLl9fc2hhZHlfc2hhZG93Um9vdCkmJlRjKGEpO3JldHVybihhPXYodGhpcykpJiZhLmFzc2lnbmVkU2xvdHx8bnVsbH19KTt2YXIgaGQ9d2luZG93LmRvY3VtZW50O2Z1bmN0aW9uIGlkKGEsYil7aWYoInNsb3QiPT09YilhPWEuX19zaGFkeV9wYXJlbnROb2RlLExhKGEpJiZBYyh2KGEpLnJvb3QpO2Vsc2UgaWYoInNsb3QiPT09YS5sb2NhbE5hbWUmJiJuYW1lIj09PWImJihiPXhjKGEpKSl7aWYoYi5hKXtVYyhiKTt2YXIgYz1hLndhLGQ9WWMoYSk7aWYoZCE9PWMpe2M9Yi5iW2NdO3ZhciBlPWMuaW5kZXhPZihhKTswPD1lJiZjLnNwbGljZShlLDEpO2M9Yi5iW2RdfHwoYi5iW2RdPVtdKTtjLnB1c2goYSk7MTxjLmxlbmd0aCYmKGIuYltkXT1aYyhjKSl9fUFjKGIpfX0KdmFyIGpkPUIoe2dldCBwcmV2aW91c0VsZW1lbnRTaWJsaW5nKCl7dmFyIGE9dih0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLnByZXZpb3VzU2libGluZyl7Zm9yKGE9dGhpcy5fX3NoYWR5X3ByZXZpb3VzU2libGluZzthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X3ByZXZpb3VzU2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9wcmV2aW91c0VsZW1lbnRTaWJsaW5nfSxnZXQgbmV4dEVsZW1lbnRTaWJsaW5nKCl7dmFyIGE9dih0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLm5leHRTaWJsaW5nKXtmb3IoYT10aGlzLl9fc2hhZHlfbmV4dFNpYmxpbmc7YSYmYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFOylhPWEuX19zaGFkeV9uZXh0U2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0RWxlbWVudFNpYmxpbmd9LGdldCBzbG90KCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCJzbG90Iil9LApzZXQgc2xvdChhKXt0aGlzLl9fc2hhZHlfc2V0QXR0cmlidXRlKCJzbG90IixhKX0sZ2V0IHNoYWRvd1Jvb3QoKXt2YXIgYT12KHRoaXMpO3JldHVybiBhJiZhLnBhfHxudWxsfSxnZXQgY2xhc3NOYW1lKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn0sc2V0IGNsYXNzTmFtZShhKXt0aGlzLl9fc2hhZHlfc2V0QXR0cmlidXRlKCJjbGFzcyIsYSl9LHNldEF0dHJpYnV0ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMub3duZXJEb2N1bWVudCE9PWhkKXRoaXMuX19zaGFkeV9uYXRpdmVfc2V0QXR0cmlidXRlKGEsYik7ZWxzZXt2YXIgYzsoYz1HKCkpJiYiY2xhc3MiPT09YT8oYy5zZXRFbGVtZW50Q2xhc3ModGhpcyxiKSxjPSEwKTpjPSExO2N8fCh0aGlzLl9fc2hhZHlfbmF0aXZlX3NldEF0dHJpYnV0ZShhLGIpLGlkKHRoaXMsYSkpfX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKGEpe3RoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQXR0cmlidXRlKGEpO2lkKHRoaXMsCmEpfSxhdHRhY2hTaGFkb3c6ZnVuY3Rpb24oYSl7aWYoIXRoaXMpdGhyb3cgRXJyb3IoIk11c3QgcHJvdmlkZSBhIGhvc3QuIik7aWYoIWEpdGhyb3cgRXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzLiIpO3JldHVybiBuZXcgU2MoT2MsdGhpcyxhKX19KTt2YXIga2Q9Qih7Ymx1cjpmdW5jdGlvbigpe3ZhciBhPXYodGhpcyk7KGE9KGE9YSYmYS5yb290KSYmYS5hY3RpdmVFbGVtZW50KT9hLl9fc2hhZHlfYmx1cigpOnRoaXMuX19zaGFkeV9uYXRpdmVfYmx1cigpfX0pO2NjLmZvckVhY2goZnVuY3Rpb24oYSl7a2RbYV09e3NldDpmdW5jdGlvbihiKXt2YXIgYz11KHRoaXMpLGQ9YS5zdWJzdHJpbmcoMik7Yy5PW2FdJiZ0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxjLk9bYV0pO3RoaXMuX19zaGFkeV9hZGRFdmVudExpc3RlbmVyKGQsYik7Yy5PW2FdPWJ9LGdldDpmdW5jdGlvbigpe3ZhciBiPXYodGhpcyk7cmV0dXJuIGImJmIuT1thXX0sY29uZmlndXJhYmxlOiEwfX0pO3ZhciBsZD1CKHthc3NpZ25lZE5vZGVzOmZ1bmN0aW9uKGEpe2lmKCJzbG90Ij09PXRoaXMubG9jYWxOYW1lKXt2YXIgYj10aGlzLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtiJiZ6KGIpJiZUYyhiKTtyZXR1cm4oYj12KHRoaXMpKT8oYSYmYS5mbGF0dGVuP2IuRDpiLmFzc2lnbmVkTm9kZXMpfHxbXTpbXX19fSk7dmFyIG1kPXdpbmRvdy5kb2N1bWVudCxuZD1CKHtpbXBvcnROb2RlOmZ1bmN0aW9uKGEsYil7aWYoYS5vd25lckRvY3VtZW50IT09bWR8fCJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9pbXBvcnROb2RlKGEsYik7dmFyIGM9dGhpcy5fX3NoYWR5X25hdGl2ZV9pbXBvcnROb2RlKGEsITEpO2lmKGIpe2E9YS5fX3NoYWR5X2NoaWxkTm9kZXM7Yj0wO2Zvcih2YXIgZDtiPGEubGVuZ3RoO2IrKylkPXRoaXMuX19zaGFkeV9pbXBvcnROb2RlKGFbYl0sITApLGMuX19zaGFkeV9hcHBlbmRDaGlsZChkKX1yZXR1cm4gY319KTt2YXIgb2Q9Qih7YWRkRXZlbnRMaXN0ZW5lcjpVYi5iaW5kKHdpbmRvdykscmVtb3ZlRXZlbnRMaXN0ZW5lcjpXYi5iaW5kKHdpbmRvdyl9KTt2YXIgcGQ9e307T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsInBhcmVudEVsZW1lbnQiKSYmKHBkLnBhcmVudEVsZW1lbnQ9Q2MucGFyZW50RWxlbWVudCk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsImNvbnRhaW5zIikmJihwZC5jb250YWlucz1DYy5jb250YWlucyk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsImNoaWxkcmVuIikmJihwZC5jaGlsZHJlbj1GYy5jaGlsZHJlbik7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIpJiYocGQuaW5uZXJIVE1MPUxjLmlubmVySFRNTCk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsImNsYXNzTmFtZSIpJiYocGQuY2xhc3NOYW1lPWpkLmNsYXNzTmFtZSk7CnZhciBxZD17RXZlbnRUYXJnZXQ6W2ZkXSxOb2RlOltDYyx3aW5kb3cuRXZlbnRUYXJnZXQ/bnVsbDpmZF0sVGV4dDpbZ2RdLEVsZW1lbnQ6W2pkLEZjLGdkLCF3Lm18fCJpbm5lckhUTUwiaW4gRWxlbWVudC5wcm90b3R5cGU/TGM6bnVsbCx3aW5kb3cuSFRNTFNsb3RFbGVtZW50P251bGw6bGRdLEhUTUxFbGVtZW50OltrZCxwZF0sSFRNTFNsb3RFbGVtZW50OltsZF0sRG9jdW1lbnRGcmFnbWVudDpbSGMsSWNdLERvY3VtZW50OltuZCxIYyxJYyxKY10sV2luZG93OltvZF19LHJkPXcubT9udWxsOlsiaW5uZXJIVE1MIiwidGV4dENvbnRlbnQiXTtmdW5jdGlvbiBzZChhKXt2YXIgYj1hP251bGw6cmQsYz17fSxkO2ZvcihkIGluIHFkKWMuVz13aW5kb3dbZF0mJndpbmRvd1tkXS5wcm90b3R5cGUscWRbZF0uZm9yRWFjaChmdW5jdGlvbihjKXtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuIGMuVyYmZCYmQShjLlcsZCxhLGIpfX0oYykpLGM9e1c6Yy5XfX07aWYody5lYSl7dmFyIFNoYWR5RE9NPXtpblVzZTp3LmVhLHBhdGNoOmZ1bmN0aW9uKGEpe0ZiKGEpO0ViKGEpO3JldHVybiBhfSxpc1NoYWR5Um9vdDp6LGVucXVldWU6WWEsZmx1c2g6WmEsZmx1c2hJbml0aWFsOmZ1bmN0aW9uKGEpeyFhLmJhJiZhLkImJlRjKGEpfSxzZXR0aW5nczp3LGZpbHRlck11dGF0aW9uczpkYixvYnNlcnZlQ2hpbGRyZW46YmIsdW5vYnNlcnZlQ2hpbGRyZW46Y2IsZGVmZXJDb25uZWN0aW9uQ2FsbGJhY2tzOncuZGVmZXJDb25uZWN0aW9uQ2FsbGJhY2tzLHByZWZlclBlcmZvcm1hbmNlOncucHJlZmVyUGVyZm9ybWFuY2UsaGFuZGxlc0R5bmFtaWNTY29waW5nOiEwLHdyYXA6dy5KP2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxXcmFwcGVyOmNkLGNvbXBvc2VkUGF0aDpNYixub1BhdGNoOncuSixuYXRpdmVNZXRob2RzOnFiLG5hdGl2ZVRyZWU6cmJ9O3dpbmRvdy5TaGFkeURPTT1TaGFkeURPTTt5YigpO3NkKCJfX3NoYWR5XyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudCwKIl9hY3RpdmVFbGVtZW50IixKYy5hY3RpdmVFbGVtZW50KTtBKFdpbmRvdy5wcm90b3R5cGUsb2QsIl9fc2hhZHlfIik7dy5KfHwoc2QoKSxiYygpKTtYYigpO3dpbmRvdy5FdmVudD1aYjt3aW5kb3cuQ3VzdG9tRXZlbnQ9JGI7d2luZG93Lk1vdXNlRXZlbnQ9YWM7d2luZG93LlNoYWRvd1Jvb3Q9U2N9O3ZhciB0ZD1uZXcgU2V0KCJhbm5vdGF0aW9uLXhtbCBjb2xvci1wcm9maWxlIGZvbnQtZmFjZSBmb250LWZhY2Utc3JjIGZvbnQtZmFjZS11cmkgZm9udC1mYWNlLWZvcm1hdCBmb250LWZhY2UtbmFtZSBtaXNzaW5nLWdseXBoIi5zcGxpdCgiICIpKTtmdW5jdGlvbiB1ZChhKXt2YXIgYj10ZC5oYXMoYSk7YT0vXlthLXpdWy4wLTlfYS16XSotW1wtLjAtOV9hLXpdKiQvLnRlc3QoYSk7cmV0dXJuIWImJmF9ZnVuY3Rpb24gSChhKXt2YXIgYj1hLmlzQ29ubmVjdGVkO2lmKHZvaWQgMCE9PWIpcmV0dXJuIGI7Zm9yKDthJiYhKGEuX19DRV9pc0ltcG9ydERvY3VtZW50fHxhIGluc3RhbmNlb2YgRG9jdW1lbnQpOylhPWEucGFyZW50Tm9kZXx8KHdpbmRvdy5TaGFkb3dSb290JiZhIGluc3RhbmNlb2YgU2hhZG93Um9vdD9hLmhvc3Q6dm9pZCAwKTtyZXR1cm4hKCFhfHwhKGEuX19DRV9pc0ltcG9ydERvY3VtZW50fHxhIGluc3RhbmNlb2YgRG9jdW1lbnQpKX0KZnVuY3Rpb24gdmQoYSxiKXtmb3IoO2ImJmIhPT1hJiYhYi5uZXh0U2libGluZzspYj1iLnBhcmVudE5vZGU7cmV0dXJuIGImJmIhPT1hP2IubmV4dFNpYmxpbmc6bnVsbH0KZnVuY3Rpb24gd2QoYSxiLGMpe2M9dm9pZCAwPT09Yz9uZXcgU2V0OmM7Zm9yKHZhciBkPWE7ZDspe2lmKGQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7dmFyIGU9ZDtiKGUpO3ZhciBmPWUubG9jYWxOYW1lO2lmKCJsaW5rIj09PWYmJiJpbXBvcnQiPT09ZS5nZXRBdHRyaWJ1dGUoInJlbCIpKXtkPWUuaW1wb3J0O2lmKGQgaW5zdGFuY2VvZiBOb2RlJiYhYy5oYXMoZCkpZm9yKGMuYWRkKGQpLGQ9ZC5maXJzdENoaWxkO2Q7ZD1kLm5leHRTaWJsaW5nKXdkKGQsYixjKTtkPXZkKGEsZSk7Y29udGludWV9ZWxzZSBpZigidGVtcGxhdGUiPT09Zil7ZD12ZChhLGUpO2NvbnRpbnVlfWlmKGU9ZS5fX0NFX3NoYWRvd1Jvb3QpZm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKXdkKGUsYixjKX1kPWQuZmlyc3RDaGlsZD9kLmZpcnN0Q2hpbGQ6dmQoYSxkKX19ZnVuY3Rpb24gSShhLGIsYyl7YVtiXT1jfTtmdW5jdGlvbiB4ZCgpe3RoaXMuYT1uZXcgTWFwO3RoaXMuZz1uZXcgTWFwO3RoaXMuZj1bXTt0aGlzLmM9ITF9ZnVuY3Rpb24geWQoYSxiLGMpe2EuYS5zZXQoYixjKTthLmcuc2V0KGMuY29uc3RydWN0b3JGdW5jdGlvbixjKX1mdW5jdGlvbiB6ZChhLGIpe2EuYz0hMDthLmYucHVzaChiKX1mdW5jdGlvbiBBZChhLGIpe2EuYyYmd2QoYixmdW5jdGlvbihiKXtyZXR1cm4gYS5iKGIpfSl9eGQucHJvdG90eXBlLmI9ZnVuY3Rpb24oYSl7aWYodGhpcy5jJiYhYS5fX0NFX3BhdGNoZWQpe2EuX19DRV9wYXRjaGVkPSEwO2Zvcih2YXIgYj0wO2I8dGhpcy5mLmxlbmd0aDtiKyspdGhpcy5mW2JdKGEpfX07ZnVuY3Rpb24gSihhLGIpe3ZhciBjPVtdO3dkKGIsZnVuY3Rpb24oYSl7cmV0dXJuIGMucHVzaChhKX0pO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspe3ZhciBkPWNbYl07MT09PWQuX19DRV9zdGF0ZT9hLmNvbm5lY3RlZENhbGxiYWNrKGQpOkJkKGEsZCl9fQpmdW5jdGlvbiBLKGEsYil7dmFyIGM9W107d2QoYixmdW5jdGlvbihhKXtyZXR1cm4gYy5wdXNoKGEpfSk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKyl7dmFyIGQ9Y1tiXTsxPT09ZC5fX0NFX3N0YXRlJiZhLmRpc2Nvbm5lY3RlZENhbGxiYWNrKGQpfX0KZnVuY3Rpb24gTChhLGIsYyl7Yz12b2lkIDA9PT1jP3t9OmM7dmFyIGQ9Yy5YYXx8bmV3IFNldCxlPWMuWXx8ZnVuY3Rpb24oYil7cmV0dXJuIEJkKGEsYil9LGY9W107d2QoYixmdW5jdGlvbihiKXtpZigibGluayI9PT1iLmxvY2FsTmFtZSYmImltcG9ydCI9PT1iLmdldEF0dHJpYnV0ZSgicmVsIikpe3ZhciBjPWIuaW1wb3J0O2MgaW5zdGFuY2VvZiBOb2RlJiYoYy5fX0NFX2lzSW1wb3J0RG9jdW1lbnQ9ITAsYy5fX0NFX2hhc1JlZ2lzdHJ5PSEwKTtjJiYiY29tcGxldGUiPT09Yy5yZWFkeVN0YXRlP2MuX19DRV9kb2N1bWVudExvYWRIYW5kbGVkPSEwOmIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXt2YXIgYz1iLmltcG9ydDtpZighYy5fX0NFX2RvY3VtZW50TG9hZEhhbmRsZWQpe2MuX19DRV9kb2N1bWVudExvYWRIYW5kbGVkPSEwO3ZhciBmPW5ldyBTZXQoZCk7Zi5kZWxldGUoYyk7TChhLGMse1hhOmYsWTplfSl9fSl9ZWxzZSBmLnB1c2goYil9LGQpO2lmKGEuYylmb3IoYj0KMDtiPGYubGVuZ3RoO2IrKylhLmIoZltiXSk7Zm9yKGI9MDtiPGYubGVuZ3RoO2IrKyllKGZbYl0pfQpmdW5jdGlvbiBCZChhLGIpe2lmKHZvaWQgMD09PWIuX19DRV9zdGF0ZSl7dmFyIGM9Yi5vd25lckRvY3VtZW50O2lmKGMuZGVmYXVsdFZpZXd8fGMuX19DRV9pc0ltcG9ydERvY3VtZW50JiZjLl9fQ0VfaGFzUmVnaXN0cnkpaWYoYz1hLmEuZ2V0KGIubG9jYWxOYW1lKSl7Yy5jb25zdHJ1Y3Rpb25TdGFjay5wdXNoKGIpO3ZhciBkPWMuY29uc3RydWN0b3JGdW5jdGlvbjt0cnl7dHJ5e2lmKG5ldyBkIT09Yil0aHJvdyBFcnJvcigiVGhlIGN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yIGRpZCBub3QgcHJvZHVjZSB0aGUgZWxlbWVudCBiZWluZyB1cGdyYWRlZC4iKTt9ZmluYWxseXtjLmNvbnN0cnVjdGlvblN0YWNrLnBvcCgpfX1jYXRjaChnKXt0aHJvdyBiLl9fQ0Vfc3RhdGU9MixnO31iLl9fQ0Vfc3RhdGU9MTtiLl9fQ0VfZGVmaW5pdGlvbj1jO2lmKGMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKWZvcihjPWMub2JzZXJ2ZWRBdHRyaWJ1dGVzLGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9CmNbZF0sZj1iLmdldEF0dHJpYnV0ZShlKTtudWxsIT09ZiYmYS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYixlLG51bGwsZixudWxsKX1IKGIpJiZhLmNvbm5lY3RlZENhbGxiYWNrKGIpfX19eGQucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPWEuX19DRV9kZWZpbml0aW9uO2IuY29ubmVjdGVkQ2FsbGJhY2smJmIuY29ubmVjdGVkQ2FsbGJhY2suY2FsbChhKX07eGQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPWEuX19DRV9kZWZpbml0aW9uO2IuZGlzY29ubmVjdGVkQ2FsbGJhY2smJmIuZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbChhKX07CnhkLnByb3RvdHlwZS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1hLl9fQ0VfZGVmaW5pdGlvbjtmLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmLTE8Zi5vYnNlcnZlZEF0dHJpYnV0ZXMuaW5kZXhPZihiKSYmZi5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2suY2FsbChhLGIsYyxkLGUpfTtmdW5jdGlvbiBDZChhKXt2YXIgYj1kb2N1bWVudDt0aGlzLmI9YTt0aGlzLmE9Yjt0aGlzLkY9dm9pZCAwO0wodGhpcy5iLHRoaXMuYSk7ImxvYWRpbmciPT09dGhpcy5hLnJlYWR5U3RhdGUmJih0aGlzLkY9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5jLmJpbmQodGhpcykpLHRoaXMuRi5vYnNlcnZlKHRoaXMuYSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSl9ZnVuY3Rpb24gRGQoYSl7YS5GJiZhLkYuZGlzY29ubmVjdCgpfUNkLnByb3RvdHlwZS5jPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYS5yZWFkeVN0YXRlOyJpbnRlcmFjdGl2ZSIhPT1iJiYiY29tcGxldGUiIT09Ynx8RGQodGhpcyk7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylmb3IodmFyIGM9YVtiXS5hZGRlZE5vZGVzLGQ9MDtkPGMubGVuZ3RoO2QrKylMKHRoaXMuYixjW2RdKX07ZnVuY3Rpb24gRWQoKXt2YXIgYT10aGlzO3RoaXMuYT10aGlzLmg9dm9pZCAwO3RoaXMuYj1uZXcgUHJvbWlzZShmdW5jdGlvbihiKXthLmE9YjthLmgmJmIoYS5oKX0pfUVkLnByb3RvdHlwZS5yZXNvbHZlPWZ1bmN0aW9uKGEpe2lmKHRoaXMuaCl0aHJvdyBFcnJvcigiQWxyZWFkeSByZXNvbHZlZC4iKTt0aGlzLmg9YTt0aGlzLmEmJnRoaXMuYShhKX07ZnVuY3Rpb24gTihhKXt0aGlzLmM9ITE7dGhpcy5hPWE7dGhpcy5sPW5ldyBNYXA7dGhpcy5mPWZ1bmN0aW9uKGEpe3JldHVybiBhKCl9O3RoaXMuYj0hMTt0aGlzLmc9W107dGhpcy5kYT1uZXcgQ2QoYSl9bj1OLnByb3RvdHlwZTsKbi5zYT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7aWYoIShiIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9ycyBtdXN0IGJlIGZ1bmN0aW9ucy4iKTtpZighdWQoYSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJUaGUgZWxlbWVudCBuYW1lICciK2ErIicgaXMgbm90IHZhbGlkLiIpO2lmKHRoaXMuYS5hLmdldChhKSl0aHJvdyBFcnJvcigiQSBjdXN0b20gZWxlbWVudCB3aXRoIG5hbWUgJyIrYSsiJyBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIik7aWYodGhpcy5jKXRocm93IEVycm9yKCJBIGN1c3RvbSBlbGVtZW50IGlzIGFscmVhZHkgYmVpbmcgZGVmaW5lZC4iKTt0aGlzLmM9ITA7dHJ5e3ZhciBkPWZ1bmN0aW9uKGEpe3ZhciBiPWVbYV07aWYodm9pZCAwIT09YiYmIShiIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IEVycm9yKCJUaGUgJyIrYSsiJyBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uIik7CnJldHVybiBifSxlPWIucHJvdG90eXBlO2lmKCEoZSBpbnN0YW5jZW9mIE9iamVjdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuIik7dmFyIGY9ZCgiY29ubmVjdGVkQ2FsbGJhY2siKTt2YXIgZz1kKCJkaXNjb25uZWN0ZWRDYWxsYmFjayIpO3ZhciBoPWQoImFkb3B0ZWRDYWxsYmFjayIpO3ZhciBrPWQoImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpO3ZhciBsPWIub2JzZXJ2ZWRBdHRyaWJ1dGVzfHxbXX1jYXRjaChtKXtyZXR1cm59ZmluYWxseXt0aGlzLmM9ITF9Yj17bG9jYWxOYW1lOmEsY29uc3RydWN0b3JGdW5jdGlvbjpiLGNvbm5lY3RlZENhbGxiYWNrOmYsZGlzY29ubmVjdGVkQ2FsbGJhY2s6ZyxhZG9wdGVkQ2FsbGJhY2s6aCxhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2s6ayxvYnNlcnZlZEF0dHJpYnV0ZXM6bCxjb25zdHJ1Y3Rpb25TdGFjazpbXX07eWQodGhpcy5hLAphLGIpO3RoaXMuZy5wdXNoKGIpO3RoaXMuYnx8KHRoaXMuYj0hMCx0aGlzLmYoZnVuY3Rpb24oKXtyZXR1cm4gRmQoYyl9KSl9O24uWT1mdW5jdGlvbihhKXtMKHRoaXMuYSxhKX07CmZ1bmN0aW9uIEZkKGEpe2lmKCExIT09YS5iKXthLmI9ITE7Zm9yKHZhciBiPWEuZyxjPVtdLGQ9bmV3IE1hcCxlPTA7ZTxiLmxlbmd0aDtlKyspZC5zZXQoYltlXS5sb2NhbE5hbWUsW10pO0woYS5hLGRvY3VtZW50LHtZOmZ1bmN0aW9uKGIpe2lmKHZvaWQgMD09PWIuX19DRV9zdGF0ZSl7dmFyIGU9Yi5sb2NhbE5hbWUsZj1kLmdldChlKTtmP2YucHVzaChiKTphLmEuYS5nZXQoZSkmJmMucHVzaChiKX19fSk7Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKylCZChhLmEsY1tlXSk7Zm9yKDswPGIubGVuZ3RoOyl7dmFyIGY9Yi5zaGlmdCgpO2U9Zi5sb2NhbE5hbWU7Zj1kLmdldChmLmxvY2FsTmFtZSk7Zm9yKHZhciBnPTA7ZzxmLmxlbmd0aDtnKyspQmQoYS5hLGZbZ10pOyhlPWEubC5nZXQoZSkpJiZlLnJlc29sdmUodm9pZCAwKX19fW4uZ2V0PWZ1bmN0aW9uKGEpe2lmKGE9dGhpcy5hLmEuZ2V0KGEpKXJldHVybiBhLmNvbnN0cnVjdG9yRnVuY3Rpb259OwpuLnRhPWZ1bmN0aW9uKGEpe2lmKCF1ZChhKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN5bnRheEVycm9yKCInIithKyInIGlzIG5vdCBhIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUuIikpO3ZhciBiPXRoaXMubC5nZXQoYSk7aWYoYilyZXR1cm4gYi5iO2I9bmV3IEVkO3RoaXMubC5zZXQoYSxiKTt0aGlzLmEuYS5nZXQoYSkmJiF0aGlzLmcuc29tZShmdW5jdGlvbihiKXtyZXR1cm4gYi5sb2NhbE5hbWU9PT1hfSkmJmIucmVzb2x2ZSh2b2lkIDApO3JldHVybiBiLmJ9O24uUGE9ZnVuY3Rpb24oYSl7RGQodGhpcy5kYSk7dmFyIGI9dGhpcy5mO3RoaXMuZj1mdW5jdGlvbihjKXtyZXR1cm4gYShmdW5jdGlvbigpe3JldHVybiBiKGMpfSl9fTt3aW5kb3cuQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5PU47Ti5wcm90b3R5cGUuZGVmaW5lPU4ucHJvdG90eXBlLnNhO04ucHJvdG90eXBlLnVwZ3JhZGU9Ti5wcm90b3R5cGUuWTtOLnByb3RvdHlwZS5nZXQ9Ti5wcm90b3R5cGUuZ2V0OwpOLnByb3RvdHlwZS53aGVuRGVmaW5lZD1OLnByb3RvdHlwZS50YTtOLnByb3RvdHlwZS5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrPU4ucHJvdG90eXBlLlBhO3ZhciBHZD13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQsSGQ9d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlMsSWQ9d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlLEpkPXdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUucHJlcGVuZCxLZD13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmFwcGVuZCxMZD13aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucHJlcGVuZCxNZD13aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuYXBwZW5kLE5kPXdpbmRvdy5Ob2RlLnByb3RvdHlwZS5jbG9uZU5vZGUsT2Q9d2luZG93Lk5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkLFBkPXdpbmRvdy5Ob2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUsUWQ9d2luZG93Lk5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkLFJkPXdpbmRvdy5Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQsU2Q9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuTm9kZS5wcm90b3R5cGUsCiJ0ZXh0Q29udGVudCIpLFRkPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3csVWQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIpLFZkPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGUsV2Q9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZSxYZD13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlLFlkPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOUyxaZD13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlMsJGQ9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TLGFlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5pbnNlcnRBZGphY2VudEVsZW1lbnQsYmU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50SFRNTCxjZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucHJlcGVuZCwKZGU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFwcGVuZCxlZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYmVmb3JlLGZlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hZnRlcixnZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVwbGFjZVdpdGgsaGU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSxpZT13aW5kb3cuSFRNTEVsZW1lbnQsamU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLCJpbm5lckhUTUwiKSxrZT13aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50RWxlbWVudCxsZT13aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50SFRNTDt2YXIgbWU9bmV3IGZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBuZSgpe3ZhciBhPW9lO3dpbmRvdy5IVE1MRWxlbWVudD1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoKXt2YXIgYj10aGlzLmNvbnN0cnVjdG9yLGQ9YS5nLmdldChiKTtpZighZCl0aHJvdyBFcnJvcigiVGhlIGN1c3RvbSBlbGVtZW50IGJlaW5nIGNvbnN0cnVjdGVkIHdhcyBub3QgcmVnaXN0ZXJlZCB3aXRoIGBjdXN0b21FbGVtZW50c2AuIik7dmFyIGU9ZC5jb25zdHJ1Y3Rpb25TdGFjaztpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU9R2QuY2FsbChkb2N1bWVudCxkLmxvY2FsTmFtZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYi5wcm90b3R5cGUpLGUuX19DRV9zdGF0ZT0xLGUuX19DRV9kZWZpbml0aW9uPWQsYS5iKGUpLGU7ZD1lLmxlbmd0aC0xO3ZhciBmPWVbZF07aWYoZj09PW1lKXRocm93IEVycm9yKCJUaGUgSFRNTEVsZW1lbnQgY29uc3RydWN0b3Igd2FzIGVpdGhlciBjYWxsZWQgcmVlbnRyYW50bHkgZm9yIHRoaXMgY29uc3RydWN0b3Igb3IgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiIpOwplW2RdPW1lO09iamVjdC5zZXRQcm90b3R5cGVPZihmLGIucHJvdG90eXBlKTthLmIoZik7cmV0dXJuIGZ9Yi5wcm90b3R5cGU9aWUucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpifSk7cmV0dXJuIGJ9KCl9O2Z1bmN0aW9uIHBlKGEsYixjKXtmdW5jdGlvbiBkKGIpe3JldHVybiBmdW5jdGlvbihjKXtmb3IodmFyIGQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDsrK2UpZFtlXT1hcmd1bWVudHNbZV07ZT1bXTtmb3IodmFyIGY9W10sbD0wO2w8ZC5sZW5ndGg7bCsrKXt2YXIgbT1kW2xdO20gaW5zdGFuY2VvZiBFbGVtZW50JiZIKG0pJiZmLnB1c2gobSk7aWYobSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpZm9yKG09bS5maXJzdENoaWxkO207bT1tLm5leHRTaWJsaW5nKWUucHVzaChtKTtlbHNlIGUucHVzaChtKX1iLmFwcGx5KHRoaXMsZCk7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylLKGEsZltkXSk7aWYoSCh0aGlzKSlmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKWY9ZVtkXSxmIGluc3RhbmNlb2YgRWxlbWVudCYmSihhLGYpfX12b2lkIDAhPT1jLlYmJihiLnByZXBlbmQ9ZChjLlYpKTt2b2lkIDAhPT1jLmFwcGVuZCYmKGIuYXBwZW5kPWQoYy5hcHBlbmQpKX07ZnVuY3Rpb24gcWUoKXt2YXIgYT1vZTtJKERvY3VtZW50LnByb3RvdHlwZSwiY3JlYXRlRWxlbWVudCIsZnVuY3Rpb24oYil7aWYodGhpcy5fX0NFX2hhc1JlZ2lzdHJ5KXt2YXIgYz1hLmEuZ2V0KGIpO2lmKGMpcmV0dXJuIG5ldyBjLmNvbnN0cnVjdG9yRnVuY3Rpb259Yj1HZC5jYWxsKHRoaXMsYik7YS5iKGIpO3JldHVybiBifSk7SShEb2N1bWVudC5wcm90b3R5cGUsImltcG9ydE5vZGUiLGZ1bmN0aW9uKGIsYyl7Yj1JZC5jYWxsKHRoaXMsYiwhIWMpO3RoaXMuX19DRV9oYXNSZWdpc3RyeT9MKGEsYik6QWQoYSxiKTtyZXR1cm4gYn0pO0koRG9jdW1lbnQucHJvdG90eXBlLCJjcmVhdGVFbGVtZW50TlMiLGZ1bmN0aW9uKGIsYyl7aWYodGhpcy5fX0NFX2hhc1JlZ2lzdHJ5JiYobnVsbD09PWJ8fCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj09PWIpKXt2YXIgZD1hLmEuZ2V0KGMpO2lmKGQpcmV0dXJuIG5ldyBkLmNvbnN0cnVjdG9yRnVuY3Rpb259Yj1IZC5jYWxsKHRoaXMsCmIsYyk7YS5iKGIpO3JldHVybiBifSk7cGUoYSxEb2N1bWVudC5wcm90b3R5cGUse1Y6SmQsYXBwZW5kOktkfSl9O2Z1bmN0aW9uIHJlKCl7ZnVuY3Rpb24gYShhLGQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJ0ZXh0Q29udGVudCIse2VudW1lcmFibGU6ZC5lbnVtZXJhYmxlLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZC5nZXQsc2V0OmZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlkLnNldC5jYWxsKHRoaXMsYSk7ZWxzZXt2YXIgYz12b2lkIDA7aWYodGhpcy5maXJzdENoaWxkKXt2YXIgZT10aGlzLmNoaWxkTm9kZXMsaD1lLmxlbmd0aDtpZigwPGgmJkgodGhpcykpe2M9QXJyYXkoaCk7Zm9yKHZhciBrPTA7azxoO2srKyljW2tdPWVba119fWQuc2V0LmNhbGwodGhpcyxhKTtpZihjKWZvcihhPTA7YTxjLmxlbmd0aDthKyspSyhiLGNbYV0pfX19KX12YXIgYj1vZTtJKE5vZGUucHJvdG90eXBlLCJpbnNlcnRCZWZvcmUiLGZ1bmN0aW9uKGEsZCl7aWYoYSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhLmNoaWxkTm9kZXMpOwphPVBkLmNhbGwodGhpcyxhLGQpO2lmKEgodGhpcykpZm9yKGQ9MDtkPGMubGVuZ3RoO2QrKylKKGIsY1tkXSk7cmV0dXJuIGF9Yz1IKGEpO2Q9UGQuY2FsbCh0aGlzLGEsZCk7YyYmSyhiLGEpO0godGhpcykmJkooYixhKTtyZXR1cm4gZH0pO0koTm9kZS5wcm90b3R5cGUsImFwcGVuZENoaWxkIixmdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCl7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGEuY2hpbGROb2Rlcyk7YT1PZC5jYWxsKHRoaXMsYSk7aWYoSCh0aGlzKSlmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylKKGIsY1tlXSk7cmV0dXJuIGF9Yz1IKGEpO2U9T2QuY2FsbCh0aGlzLGEpO2MmJksoYixhKTtIKHRoaXMpJiZKKGIsYSk7cmV0dXJuIGV9KTtJKE5vZGUucHJvdG90eXBlLCJjbG9uZU5vZGUiLGZ1bmN0aW9uKGEpe2E9TmQuY2FsbCh0aGlzLCEhYSk7dGhpcy5vd25lckRvY3VtZW50Ll9fQ0VfaGFzUmVnaXN0cnk/TChiLGEpOgpBZChiLGEpO3JldHVybiBhfSk7SShOb2RlLnByb3RvdHlwZSwicmVtb3ZlQ2hpbGQiLGZ1bmN0aW9uKGEpe3ZhciBjPUgoYSksZT1RZC5jYWxsKHRoaXMsYSk7YyYmSyhiLGEpO3JldHVybiBlfSk7SShOb2RlLnByb3RvdHlwZSwicmVwbGFjZUNoaWxkIixmdW5jdGlvbihhLGQpe2lmKGEgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYS5jaGlsZE5vZGVzKTthPVJkLmNhbGwodGhpcyxhLGQpO2lmKEgodGhpcykpZm9yKEsoYixkKSxkPTA7ZDxjLmxlbmd0aDtkKyspSihiLGNbZF0pO3JldHVybiBhfWM9SChhKTt2YXIgZj1SZC5jYWxsKHRoaXMsYSxkKSxnPUgodGhpcyk7ZyYmSyhiLGQpO2MmJksoYixhKTtnJiZKKGIsYSk7cmV0dXJuIGZ9KTtTZCYmU2QuZ2V0P2EoTm9kZS5wcm90b3R5cGUsU2QpOnpkKGIsZnVuY3Rpb24oYil7YShiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGE9CltdLGI9MDtiPHRoaXMuY2hpbGROb2Rlcy5sZW5ndGg7YisrKWEucHVzaCh0aGlzLmNoaWxkTm9kZXNbYl0udGV4dENvbnRlbnQpO3JldHVybiBhLmpvaW4oIiIpfSxzZXQ6ZnVuY3Rpb24oYSl7Zm9yKDt0aGlzLmZpcnN0Q2hpbGQ7KVFkLmNhbGwodGhpcyx0aGlzLmZpcnN0Q2hpbGQpO09kLmNhbGwodGhpcyxkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShhKSl9fSl9KX07ZnVuY3Rpb24gc2UoYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gZnVuY3Rpb24oYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7KytlKWRbZV09YXJndW1lbnRzW2VdO2U9W107Zm9yKHZhciBoPVtdLGs9MDtrPGQubGVuZ3RoO2srKyl7dmFyIGw9ZFtrXTtsIGluc3RhbmNlb2YgRWxlbWVudCYmSChsKSYmaC5wdXNoKGwpO2lmKGwgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KWZvcihsPWwuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZyllLnB1c2gobCk7ZWxzZSBlLnB1c2gobCl9Yi5hcHBseSh0aGlzLGQpO2ZvcihkPTA7ZDxoLmxlbmd0aDtkKyspSyhhLGhbZF0pO2lmKEgodGhpcykpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyloPWVbZF0saCBpbnN0YW5jZW9mIEVsZW1lbnQmJkooYSxoKX19dmFyIGM9RWxlbWVudC5wcm90b3R5cGU7dm9pZCAwIT09ZWUmJihjLmJlZm9yZT1iKGVlKSk7dm9pZCAwIT09ZWUmJihjLmFmdGVyPWIoZmUpKTt2b2lkIDAhPT1nZSYmCkkoYywicmVwbGFjZVdpdGgiLGZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhcmd1bWVudHMubGVuZ3RoOysrZCljW2RdPWFyZ3VtZW50c1tkXTtkPVtdO2Zvcih2YXIgZz1bXSxoPTA7aDxjLmxlbmd0aDtoKyspe3ZhciBrPWNbaF07ayBpbnN0YW5jZW9mIEVsZW1lbnQmJkgoaykmJmcucHVzaChrKTtpZihrIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClmb3Ioaz1rLmZpcnN0Q2hpbGQ7aztrPWsubmV4dFNpYmxpbmcpZC5wdXNoKGspO2Vsc2UgZC5wdXNoKGspfWg9SCh0aGlzKTtnZS5hcHBseSh0aGlzLGMpO2ZvcihjPTA7YzxnLmxlbmd0aDtjKyspSyhhLGdbY10pO2lmKGgpZm9yKEsoYSx0aGlzKSxjPTA7YzxkLmxlbmd0aDtjKyspZz1kW2NdLGcgaW5zdGFuY2VvZiBFbGVtZW50JiZKKGEsZyl9KTt2b2lkIDAhPT1oZSYmSShjLCJyZW1vdmUiLGZ1bmN0aW9uKCl7dmFyIGI9SCh0aGlzKTtoZS5jYWxsKHRoaXMpO2ImJksoYSx0aGlzKX0pfTtmdW5jdGlvbiB0ZSgpe2Z1bmN0aW9uIGEoYSxiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiaW5uZXJIVE1MIix7ZW51bWVyYWJsZTpiLmVudW1lcmFibGUsY29uZmlndXJhYmxlOiEwLGdldDpiLmdldCxzZXQ6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcyxlPXZvaWQgMDtIKHRoaXMpJiYoZT1bXSx3ZCh0aGlzLGZ1bmN0aW9uKGEpe2EhPT1jJiZlLnB1c2goYSl9KSk7Yi5zZXQuY2FsbCh0aGlzLGEpO2lmKGUpZm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnPWVbZl07MT09PWcuX19DRV9zdGF0ZSYmZC5kaXNjb25uZWN0ZWRDYWxsYmFjayhnKX10aGlzLm93bmVyRG9jdW1lbnQuX19DRV9oYXNSZWdpc3RyeT9MKGQsdGhpcyk6QWQoZCx0aGlzKTtyZXR1cm4gYX19KX1mdW5jdGlvbiBiKGEsYil7SShhLCJpbnNlcnRBZGphY2VudEVsZW1lbnQiLGZ1bmN0aW9uKGEsYyl7dmFyIGU9SChjKTthPWIuY2FsbCh0aGlzLGEsYyk7ZSYmSyhkLGMpO0goYSkmJkooZCxjKTtyZXR1cm4gYX0pfQpmdW5jdGlvbiBjKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2Zvcih2YXIgYz1bXTthIT09YjthPWEubmV4dFNpYmxpbmcpYy5wdXNoKGEpO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspTChkLGNbYl0pfUkoYSwiaW5zZXJ0QWRqYWNlbnRIVE1MIixmdW5jdGlvbihhLGQpe2E9YS50b0xvd2VyQ2FzZSgpO2lmKCJiZWZvcmViZWdpbiI9PT1hKXt2YXIgZT10aGlzLnByZXZpb3VzU2libGluZztiLmNhbGwodGhpcyxhLGQpO2MoZXx8dGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsdGhpcyl9ZWxzZSBpZigiYWZ0ZXJiZWdpbiI9PT1hKWU9dGhpcy5maXJzdENoaWxkLGIuY2FsbCh0aGlzLGEsZCksYyh0aGlzLmZpcnN0Q2hpbGQsZSk7ZWxzZSBpZigiYmVmb3JlZW5kIj09PWEpZT10aGlzLmxhc3RDaGlsZCxiLmNhbGwodGhpcyxhLGQpLGMoZXx8dGhpcy5maXJzdENoaWxkLG51bGwpO2Vsc2UgaWYoImFmdGVyZW5kIj09PWEpZT10aGlzLm5leHRTaWJsaW5nLGIuY2FsbCh0aGlzLGEsZCksYyh0aGlzLm5leHRTaWJsaW5nLAplKTtlbHNlIHRocm93IG5ldyBTeW50YXhFcnJvcigiVGhlIHZhbHVlIHByb3ZpZGVkICgiK1N0cmluZyhhKSsiKSBpcyBub3Qgb25lIG9mICdiZWZvcmViZWdpbicsICdhZnRlcmJlZ2luJywgJ2JlZm9yZWVuZCcsIG9yICdhZnRlcmVuZCcuIik7fSl9dmFyIGQ9b2U7VGQmJkkoRWxlbWVudC5wcm90b3R5cGUsImF0dGFjaFNoYWRvdyIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19DRV9zaGFkb3dSb290PWE9VGQuY2FsbCh0aGlzLGEpfSk7VWQmJlVkLmdldD9hKEVsZW1lbnQucHJvdG90eXBlLFVkKTpqZSYmamUuZ2V0P2EoSFRNTEVsZW1lbnQucHJvdG90eXBlLGplKTp6ZChkLGZ1bmN0aW9uKGIpe2EoYix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5kLmNhbGwodGhpcywhMCkuaW5uZXJIVE1MfSxzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9InRlbXBsYXRlIj09PXRoaXMubG9jYWxOYW1lLGM9Yj90aGlzLmNvbnRlbnQ6dGhpcyxkPUhkLmNhbGwoZG9jdW1lbnQsCnRoaXMubmFtZXNwYWNlVVJJLHRoaXMubG9jYWxOYW1lKTtmb3IoZC5pbm5lckhUTUw9YTswPGMuY2hpbGROb2Rlcy5sZW5ndGg7KVFkLmNhbGwoYyxjLmNoaWxkTm9kZXNbMF0pO2ZvcihhPWI/ZC5jb250ZW50OmQ7MDxhLmNoaWxkTm9kZXMubGVuZ3RoOylPZC5jYWxsKGMsYS5jaGlsZE5vZGVzWzBdKX19KX0pO0koRWxlbWVudC5wcm90b3R5cGUsInNldEF0dHJpYnV0ZSIsZnVuY3Rpb24oYSxiKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiBXZC5jYWxsKHRoaXMsYSxiKTt2YXIgYz1WZC5jYWxsKHRoaXMsYSk7V2QuY2FsbCh0aGlzLGEsYik7Yj1WZC5jYWxsKHRoaXMsYSk7ZC5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxhLGMsYixudWxsKX0pO0koRWxlbWVudC5wcm90b3R5cGUsInNldEF0dHJpYnV0ZU5TIixmdW5jdGlvbihhLGIsYyl7aWYoMSE9PXRoaXMuX19DRV9zdGF0ZSlyZXR1cm4gWmQuY2FsbCh0aGlzLGEsYixjKTt2YXIgZT1ZZC5jYWxsKHRoaXMsYSwKYik7WmQuY2FsbCh0aGlzLGEsYixjKTtjPVlkLmNhbGwodGhpcyxhLGIpO2QuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMsYixlLGMsYSl9KTtJKEVsZW1lbnQucHJvdG90eXBlLCJyZW1vdmVBdHRyaWJ1dGUiLGZ1bmN0aW9uKGEpe2lmKDEhPT10aGlzLl9fQ0Vfc3RhdGUpcmV0dXJuIFhkLmNhbGwodGhpcyxhKTt2YXIgYj1WZC5jYWxsKHRoaXMsYSk7WGQuY2FsbCh0aGlzLGEpO251bGwhPT1iJiZkLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0aGlzLGEsYixudWxsLG51bGwpfSk7SShFbGVtZW50LnByb3RvdHlwZSwicmVtb3ZlQXR0cmlidXRlTlMiLGZ1bmN0aW9uKGEsYil7aWYoMSE9PXRoaXMuX19DRV9zdGF0ZSlyZXR1cm4gJGQuY2FsbCh0aGlzLGEsYik7dmFyIGM9WWQuY2FsbCh0aGlzLGEsYik7JGQuY2FsbCh0aGlzLGEsYik7dmFyIGU9WWQuY2FsbCh0aGlzLGEsYik7YyE9PWUmJmQuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMsYixjLGUsYSl9KTtrZT9iKEhUTUxFbGVtZW50LnByb3RvdHlwZSwKa2UpOmFlP2IoRWxlbWVudC5wcm90b3R5cGUsYWUpOmNvbnNvbGUud2FybigiQ3VzdG9tIEVsZW1lbnRzOiBgRWxlbWVudCNpbnNlcnRBZGphY2VudEVsZW1lbnRgIHdhcyBub3QgcGF0Y2hlZC4iKTtsZT9jKEhUTUxFbGVtZW50LnByb3RvdHlwZSxsZSk6YmU/YyhFbGVtZW50LnByb3RvdHlwZSxiZSk6Y29uc29sZS53YXJuKCJDdXN0b20gRWxlbWVudHM6IGBFbGVtZW50I2luc2VydEFkamFjZW50SFRNTGAgd2FzIG5vdCBwYXRjaGVkLiIpO3BlKGQsRWxlbWVudC5wcm90b3R5cGUse1Y6Y2UsYXBwZW5kOmRlfSk7c2UoZCl9O3ZhciB1ZT13aW5kb3cuY3VzdG9tRWxlbWVudHM7aWYoIXVlfHx1ZS5mb3JjZVBvbHlmaWxsfHwiZnVuY3Rpb24iIT10eXBlb2YgdWUuZGVmaW5lfHwiZnVuY3Rpb24iIT10eXBlb2YgdWUuZ2V0KXt2YXIgb2U9bmV3IHhkO25lKCk7cWUoKTtwZShvZSxEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSx7VjpMZCxhcHBlbmQ6TWR9KTtyZSgpO3RlKCk7ZG9jdW1lbnQuX19DRV9oYXNSZWdpc3RyeT0hMDt2YXIgY3VzdG9tRWxlbWVudHM9bmV3IE4ob2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csImN1c3RvbUVsZW1lbnRzIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6Y3VzdG9tRWxlbWVudHN9KX07ZnVuY3Rpb24gdmUoKXt0aGlzLmVuZD10aGlzLnN0YXJ0PTA7dGhpcy5ydWxlcz10aGlzLnBhcmVudD10aGlzLnByZXZpb3VzPW51bGw7dGhpcy5jc3NUZXh0PXRoaXMucGFyc2VkQ3NzVGV4dD0iIjt0aGlzLmF0UnVsZT0hMTt0aGlzLnR5cGU9MDt0aGlzLnBhcnNlZFNlbGVjdG9yPXRoaXMuc2VsZWN0b3I9dGhpcy5rZXlmcmFtZXNOYW1lPSIifQpmdW5jdGlvbiB3ZShhKXthPWEucmVwbGFjZSh4ZSwiIikucmVwbGFjZSh5ZSwiIik7dmFyIGI9emUsYz1hLGQ9bmV3IHZlO2Quc3RhcnQ9MDtkLmVuZD1jLmxlbmd0aDtmb3IodmFyIGU9ZCxmPTAsZz1jLmxlbmd0aDtmPGc7ZisrKWlmKCJ7Ij09PWNbZl0pe2UucnVsZXN8fChlLnJ1bGVzPVtdKTt2YXIgaD1lLGs9aC5ydWxlc1toLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtlPW5ldyB2ZTtlLnN0YXJ0PWYrMTtlLnBhcmVudD1oO2UucHJldmlvdXM9aztoLnJ1bGVzLnB1c2goZSl9ZWxzZSJ9Ij09PWNbZl0mJihlLmVuZD1mKzEsZT1lLnBhcmVudHx8ZCk7cmV0dXJuIGIoZCxhKX0KZnVuY3Rpb24gemUoYSxiKXt2YXIgYz1iLnN1YnN0cmluZyhhLnN0YXJ0LGEuZW5kLTEpO2EucGFyc2VkQ3NzVGV4dD1hLmNzc1RleHQ9Yy50cmltKCk7YS5wYXJlbnQmJihjPWIuc3Vic3RyaW5nKGEucHJldmlvdXM/YS5wcmV2aW91cy5lbmQ6YS5wYXJlbnQuc3RhcnQsYS5zdGFydC0xKSxjPUFlKGMpLGM9Yy5yZXBsYWNlKEJlLCIgIiksYz1jLnN1YnN0cmluZyhjLmxhc3RJbmRleE9mKCI7IikrMSksYz1hLnBhcnNlZFNlbGVjdG9yPWEuc2VsZWN0b3I9Yy50cmltKCksYS5hdFJ1bGU9MD09PWMuaW5kZXhPZigiQCIpLGEuYXRSdWxlPzA9PT1jLmluZGV4T2YoIkBtZWRpYSIpP2EudHlwZT1DZTpjLm1hdGNoKERlKSYmKGEudHlwZT1FZSxhLmtleWZyYW1lc05hbWU9YS5zZWxlY3Rvci5zcGxpdChCZSkucG9wKCkpOmEudHlwZT0wPT09Yy5pbmRleE9mKCItLSIpP0ZlOkdlKTtpZihjPWEucnVsZXMpZm9yKHZhciBkPTAsZT1jLmxlbmd0aCxmPXZvaWQgMDtkPGUmJihmPWNbZF0pO2QrKyl6ZShmLApiKTtyZXR1cm4gYX1mdW5jdGlvbiBBZShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cXChbMC05YS1mXXsxLDZ9KVxzL2dpLGZ1bmN0aW9uKGEsYyl7YT1jO2ZvcihjPTYtYS5sZW5ndGg7Yy0tOylhPSIwIithO3JldHVybiJcXCIrYX0pfQpmdW5jdGlvbiBIZShhLGIsYyl7Yz12b2lkIDA9PT1jPyIiOmM7dmFyIGQ9IiI7aWYoYS5jc3NUZXh0fHxhLnJ1bGVzKXt2YXIgZT1hLnJ1bGVzLGY7aWYoZj1lKWY9ZVswXSxmPSEoZiYmZi5zZWxlY3RvciYmMD09PWYuc2VsZWN0b3IuaW5kZXhPZigiLS0iKSk7aWYoZil7Zj0wO2Zvcih2YXIgZz1lLmxlbmd0aCxoPXZvaWQgMDtmPGcmJihoPWVbZl0pO2YrKylkPUhlKGgsYixkKX1lbHNlIGI/Yj1hLmNzc1RleHQ6KGI9YS5jc3NUZXh0LGI9Yi5yZXBsYWNlKEllLCIiKS5yZXBsYWNlKEplLCIiKSxiPWIucmVwbGFjZShLZSwiIikucmVwbGFjZShMZSwiIikpLChkPWIudHJpbSgpKSYmKGQ9IiAgIitkKyJcbiIpfWQmJihhLnNlbGVjdG9yJiYoYys9YS5zZWxlY3RvcisiIHtcbiIpLGMrPWQsYS5zZWxlY3RvciYmKGMrPSJ9XG5cbiIpKTtyZXR1cm4gY30KdmFyIEdlPTEsRWU9NyxDZT00LEZlPTFFMyx4ZT0vXC9cKlteKl0qXCorKFteLypdW14qXSpcKispKlwvL2dpbSx5ZT0vQGltcG9ydFteO10qOy9naW0sSWU9Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/KD86Wztcbl18JCkvZ2ltLEplPS8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxLZT0vQGFwcGx5XHMqXCg/W14pO10qXCk/XHMqKD86Wztcbl18JCk/L2dpbSxMZT0vW147Ol0qPzpbXjtdKj92YXJcKFteO10qXCkoPzpbO1xuXXwkKT8vZ2ltLERlPS9eQFteXHNdKmtleWZyYW1lcy8sQmU9L1xzKy9nO3ZhciBPPSEod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLE1lO2Z1bmN0aW9uIE5lKGEpe01lPWEmJmEuc2hpbWNzc3Byb3BlcnRpZXM/ITE6T3x8IShuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFwvNjAxfEVkZ2VcLzE1Lyl8fCF3aW5kb3cuQ1NTfHwhQ1NTLnN1cHBvcnRzfHwhQ1NTLnN1cHBvcnRzKCJib3gtc2hhZG93IiwiMCAwIDAgdmFyKC0tZm9vKSIpKX12YXIgT2U7d2luZG93LlNoYWR5Q1NTJiZ2b2lkIDAhPT13aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQmJihPZT13aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQpO3ZhciBQZT0hKCF3aW5kb3cuU2hhZHlDU1N8fCF3aW5kb3cuU2hhZHlDU1MuZGlzYWJsZVJ1bnRpbWUpOwp3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M/TWU9d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzczp3aW5kb3cuU2hhZHlDU1M/KE5lKHdpbmRvdy5TaGFkeUNTUyksd2luZG93LlNoYWR5Q1NTPXZvaWQgMCk6TmUod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgUT1NZSxRZT1PZTt2YXIgUmU9Lyg/Ol58Wztcc3tdXHMqKSgtLVtcdy1dKj8pXHMqOlxzKig/OigoPzonKD86XFwnfC4pKj8nfCIoPzpcXCJ8LikqPyJ8XChbXildKj9cKXxbXn07e10pKyl8XHsoW159XSopXH0oPzooPz1bO1xzfV0pfCQpKS9naSxTZT0vKD86XnxcVyspQGFwcGx5XHMqXCg/KFteKTtcbl0qKVwpPy9naSxUZT0vKC0tW1x3LV0rKVxzKihbOiw7KV18JCkvZ2ksVWU9LyhhbmltYXRpb25ccyo6KXwoYW5pbWF0aW9uLW5hbWVccyo6KS8sJGU9L0BtZWRpYVxzKC4qKS8sYWY9L1x7W159XSpcfS9nO3ZhciBiZj1uZXcgU2V0O2Z1bmN0aW9uIGNmKGEsYil7aWYoIWEpcmV0dXJuIiI7InN0cmluZyI9PT10eXBlb2YgYSYmKGE9d2UoYSkpO2ImJmRmKGEsYik7cmV0dXJuIEhlKGEsUSl9ZnVuY3Rpb24gZWYoYSl7IWEuX19jc3NSdWxlcyYmYS50ZXh0Q29udGVudCYmKGEuX19jc3NSdWxlcz13ZShhLnRleHRDb250ZW50KSk7cmV0dXJuIGEuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBmZihhKXtyZXR1cm4hIWEucGFyZW50JiZhLnBhcmVudC50eXBlPT09RWV9ZnVuY3Rpb24gZGYoYSxiLGMsZCl7aWYoYSl7dmFyIGU9ITEsZj1hLnR5cGU7aWYoZCYmZj09PUNlKXt2YXIgZz1hLnNlbGVjdG9yLm1hdGNoKCRlKTtnJiYod2luZG93Lm1hdGNoTWVkaWEoZ1sxXSkubWF0Y2hlc3x8KGU9ITApKX1mPT09R2U/YihhKTpjJiZmPT09RWU/YyhhKTpmPT09RmUmJihlPSEwKTtpZigoYT1hLnJ1bGVzKSYmIWUpZm9yKGU9MCxmPWEubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9YVtlXSk7ZSsrKWRmKGcsYixjLGQpfX0KZnVuY3Rpb24gZ2YoYSxiLGMsZCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtiJiZlLnNldEF0dHJpYnV0ZSgic2NvcGUiLGIpO2UudGV4dENvbnRlbnQ9YTtoZihlLGMsZCk7cmV0dXJuIGV9dmFyIGpmPW51bGw7ZnVuY3Rpb24ga2YoYSl7YT1kb2N1bWVudC5jcmVhdGVDb21tZW50KCIgU2hhZHkgRE9NIHN0eWxlcyBmb3IgIithKyIgIik7dmFyIGI9ZG9jdW1lbnQuaGVhZDtiLmluc2VydEJlZm9yZShhLChqZj9qZi5uZXh0U2libGluZzpudWxsKXx8Yi5maXJzdENoaWxkKTtyZXR1cm4gamY9YX1mdW5jdGlvbiBoZihhLGIsYyl7Yj1ifHxkb2N1bWVudC5oZWFkO2IuaW5zZXJ0QmVmb3JlKGEsYyYmYy5uZXh0U2libGluZ3x8Yi5maXJzdENoaWxkKTtqZj9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGpmKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HJiYoamY9YSk6amY9YX0KZnVuY3Rpb24gbGYoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2I8ZDtiKyspaWYoIigiPT09YVtiXSljKys7ZWxzZSBpZigiKSI9PT1hW2JdJiYwPT09LS1jKXJldHVybiBiO3JldHVybi0xfWZ1bmN0aW9uIG1mKGEsYil7dmFyIGM9YS5pbmRleE9mKCJ2YXIoIik7aWYoLTE9PT1jKXJldHVybiBiKGEsIiIsIiIsIiIpO3ZhciBkPWxmKGEsYyszKSxlPWEuc3Vic3RyaW5nKGMrNCxkKTtjPWEuc3Vic3RyaW5nKDAsYyk7YT1tZihhLnN1YnN0cmluZyhkKzEpLGIpO2Q9ZS5pbmRleE9mKCIsIik7cmV0dXJuLTE9PT1kP2IoYyxlLnRyaW0oKSwiIixhKTpiKGMsZS5zdWJzdHJpbmcoMCxkKS50cmltKCksZS5zdWJzdHJpbmcoZCsxKS50cmltKCksYSl9ZnVuY3Rpb24gbmYoYSxiKXtPP2Euc2V0QXR0cmlidXRlKCJjbGFzcyIsYik6d2luZG93LlNoYWR5RE9NLm5hdGl2ZU1ldGhvZHMuc2V0QXR0cmlidXRlLmNhbGwoYSwiY2xhc3MiLGIpfQp2YXIgb2Y9d2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00ud3JhcHx8ZnVuY3Rpb24oYSl7cmV0dXJuIGF9O2Z1bmN0aW9uIHBmKGEpe3ZhciBiPWEubG9jYWxOYW1lLGM9IiI7Yj8tMTxiLmluZGV4T2YoIi0iKXx8KGM9YixiPWEuZ2V0QXR0cmlidXRlJiZhLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihiPWEuaXMsYz1hLmV4dGVuZHMpO3JldHVybntpczpiLE06Y319ZnVuY3Rpb24gcWYoYSl7Zm9yKHZhciBiPVtdLGM9IiIsZD0wOzA8PWQmJmQ8YS5sZW5ndGg7ZCsrKWlmKCIoIj09PWFbZF0pe3ZhciBlPWxmKGEsZCk7Yys9YS5zbGljZShkLGUrMSk7ZD1lfWVsc2UiLCI9PT1hW2RdPyhiLnB1c2goYyksYz0iIik6Yys9YVtkXTtjJiZiLnB1c2goYyk7cmV0dXJuIGJ9CmZ1bmN0aW9uIHJmKGEpe2lmKHZvaWQgMCE9PVFlKXJldHVybiBRZTtpZih2b2lkIDA9PT1hLl9fY3NzQnVpbGQpe3ZhciBiPWEuZ2V0QXR0cmlidXRlKCJjc3MtYnVpbGQiKTtpZihiKWEuX19jc3NCdWlsZD1iO2Vsc2V7YTp7Yj0idGVtcGxhdGUiPT09YS5sb2NhbE5hbWU/YS5jb250ZW50LmZpcnN0Q2hpbGQ6YS5maXJzdENoaWxkO2lmKGIgaW5zdGFuY2VvZiBDb21tZW50JiYoYj1iLnRleHRDb250ZW50LnRyaW0oKS5zcGxpdCgiOiIpLCJjc3MtYnVpbGQiPT09YlswXSkpe2I9YlsxXTticmVhayBhfWI9IiJ9aWYoIiIhPT1iKXt2YXIgYz0idGVtcGxhdGUiPT09YS5sb2NhbE5hbWU/YS5jb250ZW50LmZpcnN0Q2hpbGQ6YS5maXJzdENoaWxkO2MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX1hLl9fY3NzQnVpbGQ9Yn19cmV0dXJuIGEuX19jc3NCdWlsZHx8IiJ9CmZ1bmN0aW9uIHNmKGEpe2E9dm9pZCAwPT09YT8iIjphO3JldHVybiIiIT09YSYmUT9PPyJzaGFkb3ciPT09YToic2hhZHkiPT09YTohMX07ZnVuY3Rpb24gdGYoKXt9ZnVuY3Rpb24gdWYoYSxiKXt2ZihSLGEsZnVuY3Rpb24oYSl7d2YoYSxifHwiIil9KX1mdW5jdGlvbiB2ZihhLGIsYyl7Yi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZjKGIpO3ZhciBkOyJ0ZW1wbGF0ZSI9PT1iLmxvY2FsTmFtZT9kPShiLmNvbnRlbnR8fGIuX2NvbnRlbnR8fGIpLmNoaWxkTm9kZXM6ZD1iLmNoaWxkcmVufHxiLmNoaWxkTm9kZXM7aWYoZClmb3IoYj0wO2I8ZC5sZW5ndGg7YisrKXZmKGEsZFtiXSxjKX0KZnVuY3Rpb24gd2YoYSxiLGMpe2lmKGIpaWYoYS5jbGFzc0xpc3QpYz8oYS5jbGFzc0xpc3QucmVtb3ZlKCJzdHlsZS1zY29wZSIpLGEuY2xhc3NMaXN0LnJlbW92ZShiKSk6KGEuY2xhc3NMaXN0LmFkZCgic3R5bGUtc2NvcGUiKSxhLmNsYXNzTGlzdC5hZGQoYikpO2Vsc2UgaWYoYS5nZXRBdHRyaWJ1dGUpe3ZhciBkPWEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpO2M/ZCYmKGI9ZC5yZXBsYWNlKCJzdHlsZS1zY29wZSIsIiIpLnJlcGxhY2UoYiwiIiksbmYoYSxiKSk6bmYoYSwoZD9kKyIgIjoiIikrInN0eWxlLXNjb3BlICIrYil9fWZ1bmN0aW9uIHhmKGEsYixjKXt2ZihSLGEsZnVuY3Rpb24oYSl7d2YoYSxiLCEwKTt3ZihhLGMpfSl9ZnVuY3Rpb24geWYoYSxiKXt2ZihSLGEsZnVuY3Rpb24oYSl7d2YoYSxifHwiIiwhMCl9KX0KZnVuY3Rpb24gemYoYSxiLGMsZCxlKXt2YXIgZj1SO2U9dm9pZCAwPT09ZT8iIjplOyIiPT09ZSYmKE98fCJzaGFkeSI9PT0odm9pZCAwPT09ZD8iIjpkKT9lPWNmKGIsYyk6KGE9cGYoYSksZT1BZihmLGIsYS5pcyxhLk0sYykrIlxuXG4iKSk7cmV0dXJuIGUudHJpbSgpfWZ1bmN0aW9uIEFmKGEsYixjLGQsZSl7dmFyIGY9QmYoYyxkKTtjPWM/Ii4iK2M6IiI7cmV0dXJuIGNmKGIsZnVuY3Rpb24oYil7Yi5jfHwoYi5zZWxlY3Rvcj1iLmo9Q2YoYSxiLGEuYixjLGYpLGIuYz0hMCk7ZSYmZShiLGMsZil9KX1mdW5jdGlvbiBCZihhLGIpe3JldHVybiBiPyJbaXM9IithKyJdIjphfQpmdW5jdGlvbiBDZihhLGIsYyxkLGUpe3ZhciBmPXFmKGIuc2VsZWN0b3IpO2lmKCFmZihiKSl7Yj0wO2Zvcih2YXIgZz1mLmxlbmd0aCxoPXZvaWQgMDtiPGcmJihoPWZbYl0pO2IrKylmW2JdPWMuY2FsbChhLGgsZCxlKX1yZXR1cm4gZi5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuISFhfSkuam9pbigiLCIpfWZ1bmN0aW9uIERmKGEpe3JldHVybiBhLnJlcGxhY2UoRWYsZnVuY3Rpb24oYSxjLGQpey0xPGQuaW5kZXhPZigiKyIpP2Q9ZC5yZXBsYWNlKC9cKy9nLCJfX18iKTotMTxkLmluZGV4T2YoIl9fXyIpJiYoZD1kLnJlcGxhY2UoL19fXy9nLCIrIikpO3JldHVybiI6IitjKyIoIitkKyIpIn0pfQpmdW5jdGlvbiBGZihhKXtmb3IodmFyIGI9W10sYztjPWEubWF0Y2goR2YpOyl7dmFyIGQ9Yy5pbmRleCxlPWxmKGEsZCk7aWYoLTE9PT1lKXRocm93IEVycm9yKGMuaW5wdXQrIiBzZWxlY3RvciBtaXNzaW5nICcpJyIpO2M9YS5zbGljZShkLGUrMSk7YT1hLnJlcGxhY2UoYywiXHVlMDAwIik7Yi5wdXNoKGMpfXJldHVybntoYTphLG1hdGNoZXM6Yn19ZnVuY3Rpb24gSGYoYSxiKXt2YXIgYz1hLnNwbGl0KCJcdWUwMDAiKTtyZXR1cm4gYi5yZWR1Y2UoZnVuY3Rpb24oYSxiLGYpe3JldHVybiBhK2IrY1tmKzFdfSxjWzBdKX0KdGYucHJvdG90eXBlLmI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSExO2E9YS50cmltKCk7dmFyIGU9RWYudGVzdChhKTtlJiYoYT1hLnJlcGxhY2UoRWYsZnVuY3Rpb24oYSxiLGMpe3JldHVybiI6IitiKyIoIitjLnJlcGxhY2UoL1xzL2csIiIpKyIpIn0pLGE9RGYoYSkpO3ZhciBmPUdmLnRlc3QoYSk7aWYoZil7dmFyIGc9RmYoYSk7YT1nLmhhO2c9Zy5tYXRjaGVzfWE9YS5yZXBsYWNlKElmLCI6aG9zdCAkMSIpO2E9YS5yZXBsYWNlKEpmLGZ1bmN0aW9uKGEsZSxmKXtkfHwoYT1LZihmLGUsYixjKSxkPWR8fGEuc3RvcCxlPWEuQ2EsZj1hLnZhbHVlKTtyZXR1cm4gZStmfSk7ZiYmKGE9SGYoYSxnKSk7ZSYmKGE9RGYoYSkpO3JldHVybiBhfTsKZnVuY3Rpb24gS2YoYSxiLGMsZCl7dmFyIGU9YS5pbmRleE9mKCI6OnNsb3R0ZWQiKTswPD1hLmluZGV4T2YoIjpob3N0Iik/YT1MZihhLGQpOjAhPT1lJiYoYT1jP01mKGEsYyk6YSk7Yz0hMTswPD1lJiYoYj0iIixjPSEwKTtpZihjKXt2YXIgZj0hMDtjJiYoYT1hLnJlcGxhY2UoTmYsZnVuY3Rpb24oYSxiKXtyZXR1cm4iID4gIitifSkpfWE9YS5yZXBsYWNlKE9mLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4nW2Rpcj0iJytjKyciXSAnK2IrIiwgIitiKydbZGlyPSInK2MrJyJdJ30pO3JldHVybnt2YWx1ZTphLENhOmIsc3RvcDpmfX0KZnVuY3Rpb24gTWYoYSxiKXthPWEuc3BsaXQoLyhcWy4rP1xdKS8pO2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspaWYoMT09PWQlMiljLnB1c2goYVtkXSk7ZWxzZXt2YXIgZT1hW2RdO2lmKCIiIT09ZXx8ZCE9PWEubGVuZ3RoLTEpZT1lLnNwbGl0KCI6IiksZVswXSs9YixjLnB1c2goZS5qb2luKCI6IikpfXJldHVybiBjLmpvaW4oIiIpfWZ1bmN0aW9uIExmKGEsYil7dmFyIGM9YS5tYXRjaChQZik7cmV0dXJuKGM9YyYmY1syXS50cmltKCl8fCIiKT9jWzBdLm1hdGNoKFFmKT9hLnJlcGxhY2UoUGYsZnVuY3Rpb24oYSxjLGYpe3JldHVybiBiK2Z9KTpjLnNwbGl0KFFmKVswXT09PWI/Yzoic2hvdWxkX25vdF9tYXRjaCI6YS5yZXBsYWNlKCI6aG9zdCIsYil9ZnVuY3Rpb24gUmYoYSl7Ijpyb290Ij09PWEuc2VsZWN0b3ImJihhLnNlbGVjdG9yPSJodG1sIil9CnRmLnByb3RvdHlwZS5jPWZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoKCI6aG9zdCIpPyIiOmEubWF0Y2goIjo6c2xvdHRlZCIpP3RoaXMuYihhLCI6bm90KC5zdHlsZS1zY29wZSkiKTpNZihhLnRyaW0oKSwiOm5vdCguc3R5bGUtc2NvcGUpIil9O3AuT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGYucHJvdG90eXBlLHthOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGUtc2NvcGUifX19KTsKdmFyIEVmPS86KG50aFstXHddKylcKChbXildKylcKS8sSmY9LyhefFtccz4rfl0rKSgoPzpcWy4rP1xdfFteXHM+K349W10pKykvZyxRZj0vW1suOiMqXS8sSWY9L14oOjpzbG90dGVkKS8sUGY9Lyg6aG9zdCkoPzpcKCgoPzpcKFteKShdKlwpfFteKShdKikrPylcKSkvLE5mPS8oPzo6OnNsb3R0ZWQpKD86XCgoKD86XChbXikoXSpcKXxbXikoXSopKz8pXCkpLyxPZj0vKC4qKTpkaXJcKCg/OihsdHJ8cnRsKSlcKS8sR2Y9LzooPzptYXRjaGVzfGFueXwtKD86d2Via2l0fG1veiktYW55KS8sUj1uZXcgdGY7ZnVuY3Rpb24gU2YoYSxiLGMsZCxlKXt0aGlzLkE9YXx8bnVsbDt0aGlzLmI9Ynx8bnVsbDt0aGlzLmZhPWN8fFtdO3RoaXMubz1udWxsO3RoaXMuY3NzQnVpbGQ9ZXx8IiI7dGhpcy5NPWR8fCIiO3RoaXMuYT10aGlzLnM9dGhpcy53PW51bGx9ZnVuY3Rpb24gVChhKXtyZXR1cm4gYT9hLl9fc3R5bGVJbmZvOm51bGx9ZnVuY3Rpb24gVGYoYSxiKXtyZXR1cm4gYS5fX3N0eWxlSW5mbz1ifVNmLnByb3RvdHlwZS5jPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuQX07U2YucHJvdG90eXBlLl9nZXRTdHlsZVJ1bGVzPVNmLnByb3RvdHlwZS5jO2Z1bmN0aW9uIFVmKGEpe3ZhciBiPXRoaXMubWF0Y2hlc3x8dGhpcy5tYXRjaGVzU2VsZWN0b3J8fHRoaXMubW96TWF0Y2hlc1NlbGVjdG9yfHx0aGlzLm1zTWF0Y2hlc1NlbGVjdG9yfHx0aGlzLm9NYXRjaGVzU2VsZWN0b3J8fHRoaXMud2Via2l0TWF0Y2hlc1NlbGVjdG9yO3JldHVybiBiJiZiLmNhbGwodGhpcyxhKX12YXIgVmY9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgiVHJpZGVudCIpO2Z1bmN0aW9uIFdmKCl7fWZ1bmN0aW9uIFhmKGEpe3ZhciBiPXt9LGM9W10sZD0wO2RmKGEsZnVuY3Rpb24oYSl7WWYoYSk7YS5pbmRleD1kKys7YT1hLmkuY3NzVGV4dDtmb3IodmFyIGM7Yz1UZS5leGVjKGEpOyl7dmFyIGU9Y1sxXTsiOiIhPT1jWzJdJiYoYltlXT0hMCl9fSxmdW5jdGlvbihhKXtjLnB1c2goYSl9KTthLmI9YzthPVtdO2Zvcih2YXIgZSBpbiBiKWEucHVzaChlKTtyZXR1cm4gYX0KZnVuY3Rpb24gWWYoYSl7aWYoIWEuaSl7dmFyIGI9e30sYz17fTtaZihhLGMpJiYoYi52PWMsYS5ydWxlcz1udWxsKTtiLmNzc1RleHQ9YS5wYXJzZWRDc3NUZXh0LnJlcGxhY2UoYWYsIiIpLnJlcGxhY2UoUmUsIiIpO2EuaT1ifX1mdW5jdGlvbiBaZihhLGIpe3ZhciBjPWEuaTtpZihjKXtpZihjLnYpcmV0dXJuIE9iamVjdC5hc3NpZ24oYixjLnYpLCEwfWVsc2V7Yz1hLnBhcnNlZENzc1RleHQ7Zm9yKHZhciBkO2E9UmUuZXhlYyhjKTspe2Q9KGFbMl18fGFbM10pLnRyaW0oKTtpZigiaW5oZXJpdCIhPT1kfHwidW5zZXQiIT09ZCliW2FbMV0udHJpbSgpXT1kO2Q9ITB9cmV0dXJuIGR9fQpmdW5jdGlvbiAkZihhLGIsYyl7YiYmKGI9MDw9Yi5pbmRleE9mKCI7Iik/YWcoYSxiLGMpOm1mKGIsZnVuY3Rpb24oYixlLGYsZyl7aWYoIWUpcmV0dXJuIGIrZzsoZT0kZihhLGNbZV0sYykpJiYiaW5pdGlhbCIhPT1lPyJhcHBseS1zaGltLWluaGVyaXQiPT09ZSYmKGU9ImluaGVyaXQiKTplPSRmKGEsY1tmXXx8ZixjKXx8ZjtyZXR1cm4gYisoZXx8IiIpK2d9KSk7cmV0dXJuIGImJmIudHJpbSgpfHwiIn0KZnVuY3Rpb24gYWcoYSxiLGMpe2I9Yi5zcGxpdCgiOyIpO2Zvcih2YXIgZD0wLGUsZjtkPGIubGVuZ3RoO2QrKylpZihlPWJbZF0pe1NlLmxhc3RJbmRleD0wO2lmKGY9U2UuZXhlYyhlKSllPSRmKGEsY1tmWzFdXSxjKTtlbHNlIGlmKGY9ZS5pbmRleE9mKCI6IiksLTEhPT1mKXt2YXIgZz1lLnN1YnN0cmluZyhmKTtnPWcudHJpbSgpO2c9JGYoYSxnLGMpfHxnO2U9ZS5zdWJzdHJpbmcoMCxmKStnfWJbZF09ZSYmZS5sYXN0SW5kZXhPZigiOyIpPT09ZS5sZW5ndGgtMT9lLnNsaWNlKDAsLTEpOmV8fCIifXJldHVybiBiLmpvaW4oIjsiKX0KZnVuY3Rpb24gYmcoYSxiKXt2YXIgYz17fSxkPVtdO2RmKGEsZnVuY3Rpb24oYSl7YS5pfHxZZihhKTt2YXIgZT1hLmp8fGEucGFyc2VkU2VsZWN0b3I7YiYmYS5pLnYmJmUmJlVmLmNhbGwoYixlKSYmKFpmKGEsYyksYT1hLmluZGV4LGU9cGFyc2VJbnQoYS8zMiwxMCksZFtlXT0oZFtlXXx8MCl8MTw8YSUzMil9LG51bGwsITApO3JldHVybnt2OmMsa2V5OmR9fQpmdW5jdGlvbiBjZyhhLGIsYyxkKXtiLml8fFlmKGIpO2lmKGIuaS52KXt2YXIgZT1wZihhKTthPWUuaXM7ZT1lLk07ZT1hP0JmKGEsZSk6Imh0bWwiO3ZhciBmPWIucGFyc2VkU2VsZWN0b3IsZz0iOmhvc3QgPiAqIj09PWZ8fCJodG1sIj09PWYsaD0wPT09Zi5pbmRleE9mKCI6aG9zdCIpJiYhZzsic2hhZHkiPT09YyYmKGc9Zj09PWUrIiA+ICouIitlfHwtMSE9PWYuaW5kZXhPZigiaHRtbCIpLGg9IWcmJjA9PT1mLmluZGV4T2YoZSkpO2lmKGd8fGgpYz1lLGgmJihiLmp8fChiLmo9Q2YoUixiLFIuYixhPyIuIithOiIiLGUpKSxjPWIuanx8ZSksZCh7aGE6YyxJYTpoLFphOmd9KX19ZnVuY3Rpb24gZGcoYSxiLGMpe3ZhciBkPXt9LGU9e307ZGYoYixmdW5jdGlvbihiKXtjZyhhLGIsYyxmdW5jdGlvbihjKXtVZi5jYWxsKGEuX2VsZW1lbnR8fGEsYy5oYSkmJihjLklhP1pmKGIsZCk6WmYoYixlKSl9KX0sbnVsbCwhMCk7cmV0dXJue1JhOmUsSGE6ZH19CmZ1bmN0aW9uIGVnKGEsYixjLGQpe3ZhciBlPXBmKGIpLGY9QmYoZS5pcyxlLk0pLGc9bmV3IFJlZ0V4cCgiKD86XnxbXi4jWzpdKSIrKGIuZXh0ZW5kcz8iXFwiK2Yuc2xpY2UoMCwtMSkrIlxcXSI6ZikrIigkfFsuOltcXHM+K35dKSIpLGg9VChiKTtlPWguQTtoPWguY3NzQnVpbGQ7dmFyIGs9ZmcoZSxkKTtyZXR1cm4gemYoYixlLGZ1bmN0aW9uKGIpe3ZhciBlPSIiO2IuaXx8WWYoYik7Yi5pLmNzc1RleHQmJihlPWFnKGEsYi5pLmNzc1RleHQsYykpO2IuY3NzVGV4dD1lO2lmKCFPJiYhZmYoYikmJmIuY3NzVGV4dCl7dmFyIGg9ZT1iLmNzc1RleHQ7bnVsbD09Yi5uYSYmKGIubmE9VWUudGVzdChlKSk7aWYoYi5uYSlpZihudWxsPT1iLlUpe2IuVT1bXTtmb3IodmFyIGwgaW4gayloPWtbbF0saD1oKGUpLGUhPT1oJiYoZT1oLGIuVS5wdXNoKGwpKX1lbHNle2ZvcihsPTA7bDxiLlUubGVuZ3RoOysrbCloPWtbYi5VW2xdXSxlPWgoZSk7aD1lfWIuY3NzVGV4dD1oO2Iuaj1iLmp8fApiLnNlbGVjdG9yO2U9Ii4iK2Q7bD1xZihiLmopO2g9MDtmb3IodmFyIE09bC5sZW5ndGgsVT12b2lkIDA7aDxNJiYoVT1sW2hdKTtoKyspbFtoXT1VLm1hdGNoKGcpP1UucmVwbGFjZShmLGUpOmUrIiAiK1U7Yi5zZWxlY3Rvcj1sLmpvaW4oIiwiKX19LGgpfWZ1bmN0aW9uIGZnKGEsYil7YT1hLmI7dmFyIGM9e307aWYoIU8mJmEpZm9yKHZhciBkPTAsZT1hW2RdO2Q8YS5sZW5ndGg7ZT1hWysrZF0pe3ZhciBmPWUsZz1iO2YuZj1uZXcgUmVnRXhwKCJcXGIiK2Yua2V5ZnJhbWVzTmFtZSsiKD8hXFxCfC0pIiwiZyIpO2YuYT1mLmtleWZyYW1lc05hbWUrIi0iK2c7Zi5qPWYuanx8Zi5zZWxlY3RvcjtmLnNlbGVjdG9yPWYuai5yZXBsYWNlKGYua2V5ZnJhbWVzTmFtZSxmLmEpO2NbZS5rZXlmcmFtZXNOYW1lXT1nZyhlKX1yZXR1cm4gY31mdW5jdGlvbiBnZyhhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGIucmVwbGFjZShhLmYsYS5hKX19CmZ1bmN0aW9uIGhnKGEsYil7dmFyIGM9aWcsZD1lZihhKTthLnRleHRDb250ZW50PWNmKGQsZnVuY3Rpb24oYSl7dmFyIGQ9YS5jc3NUZXh0PWEucGFyc2VkQ3NzVGV4dDthLmkmJmEuaS5jc3NUZXh0JiYoZD1kLnJlcGxhY2UoSWUsIiIpLnJlcGxhY2UoSmUsIiIpLGEuY3NzVGV4dD1hZyhjLGQsYikpfSl9cC5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZi5wcm90b3R5cGUse2E6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJ4LXNjb3BlIn19fSk7dmFyIGlnPW5ldyBXZjt2YXIgamc9e30sa2c9d2luZG93LmN1c3RvbUVsZW1lbnRzO2lmKGtnJiYhTyYmIVBlKXt2YXIgbGc9a2cuZGVmaW5lO2tnLmRlZmluZT1mdW5jdGlvbihhLGIsYyl7amdbYV18fChqZ1thXT1rZihhKSk7bGcuY2FsbChrZyxhLGIsYyl9fTtmdW5jdGlvbiBtZygpe3RoaXMuY2FjaGU9e319bWcucHJvdG90eXBlLnN0b3JlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuY2FjaGVbYV18fFtdO2UucHVzaCh7djpiLHN0eWxlRWxlbWVudDpjLHM6ZH0pOzEwMDxlLmxlbmd0aCYmZS5zaGlmdCgpO3RoaXMuY2FjaGVbYV09ZX07ZnVuY3Rpb24gbmcoKXt9dmFyIG9nPW5ldyBSZWdFeHAoUi5hKyJcXHMqKFteXFxzXSopIik7ZnVuY3Rpb24gcGcoYSl7cmV0dXJuKGE9KGEuY2xhc3NMaXN0JiZhLmNsYXNzTGlzdC52YWx1ZT9hLmNsYXNzTGlzdC52YWx1ZTphLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpLm1hdGNoKG9nKSk/YVsxXToiIn1mdW5jdGlvbiBxZyhhKXt2YXIgYj1vZihhKS5nZXRSb290Tm9kZSgpO3JldHVybiBiPT09YXx8Yj09PWEub3duZXJEb2N1bWVudD8iIjooYT1iLmhvc3QpP3BmKGEpLmlzOiIifQpmdW5jdGlvbiByZyhhKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9YVtiXTtpZihjLnRhcmdldCE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmYy50YXJnZXQhPT1kb2N1bWVudC5oZWFkKWZvcih2YXIgZD0wO2Q8Yy5hZGRlZE5vZGVzLmxlbmd0aDtkKyspe3ZhciBlPWMuYWRkZWROb2Rlc1tkXTtpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBmPWUuZ2V0Um9vdE5vZGUoKSxnPXBnKGUpO2lmKGcmJmY9PT1lLm93bmVyRG9jdW1lbnQmJigic3R5bGUiIT09ZS5sb2NhbE5hbWUmJiJ0ZW1wbGF0ZSIhPT1lLmxvY2FsTmFtZXx8IiI9PT1yZihlKSkpeWYoZSxnKTtlbHNlIGlmKGYgaW5zdGFuY2VvZiBTaGFkb3dSb290KWZvcihmPXFnKGUpLGYhPT1nJiZ4ZihlLGcsZiksZT13aW5kb3cuU2hhZHlET00ubmF0aXZlTWV0aG9kcy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZSwiOm5vdCguIitSLmErIikiKSxnPTA7ZzxlLmxlbmd0aDtnKyspe2Y9ZVtnXTsKdmFyIGg9cWcoZik7aCYmd2YoZixoKX19fX19CmlmKCEoT3x8d2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaGFuZGxlc0R5bmFtaWNTY29waW5nKSl7dmFyIHNnPW5ldyBNdXRhdGlvbk9ic2VydmVyKHJnKSx0Zz1mdW5jdGlvbihhKXtzZy5vYnNlcnZlKGEse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSl9O2lmKHdpbmRvdy5jdXN0b21FbGVtZW50cyYmIXdpbmRvdy5jdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrKXRnKGRvY3VtZW50KTtlbHNle3ZhciB1Zz1mdW5jdGlvbigpe3RnKGRvY3VtZW50LmJvZHkpfTt3aW5kb3cuSFRNTEltcG9ydHM/d2luZG93LkhUTUxJbXBvcnRzLndoZW5SZWFkeSh1Zyk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7aWYoImxvYWRpbmciPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSl7dmFyIGE9ZnVuY3Rpb24oKXt1ZygpO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGEpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIiwKYSl9ZWxzZSB1ZygpfSl9bmc9ZnVuY3Rpb24oKXtyZyhzZy50YWtlUmVjb3JkcygpKX19dmFyIHZnPW5nO3ZhciB3Zz17fTt2YXIgeGc9UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24geWcoYSl7aWYoYT13Z1thXSlhLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbj1hLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbnx8MCxhLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbj1hLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbnx8MCxhLl9hcHBseVNoaW1OZXh0VmVyc2lvbj0oYS5fYXBwbHlTaGltTmV4dFZlcnNpb258fDApKzF9ZnVuY3Rpb24gemcoYSl7cmV0dXJuIGEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPT09YS5fYXBwbHlTaGltTmV4dFZlcnNpb259ZnVuY3Rpb24gQWcoYSl7YS5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb249YS5fYXBwbHlTaGltTmV4dFZlcnNpb247YS5fdmFsaWRhdGluZ3x8KGEuX3ZhbGlkYXRpbmc9ITAseGcudGhlbihmdW5jdGlvbigpe2EuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPWEuX2FwcGx5U2hpbU5leHRWZXJzaW9uO2EuX3ZhbGlkYXRpbmc9ITF9KSl9O3ZhciBCZz17fSxDZz1uZXcgbWc7ZnVuY3Rpb24gWSgpe3RoaXMubD17fTt0aGlzLmM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3ZhciBhPW5ldyB2ZTthLnJ1bGVzPVtdO3RoaXMuZj1UZih0aGlzLmMsbmV3IFNmKGEpKTt0aGlzLmc9ITE7dGhpcy5iPXRoaXMuYT1udWxsfW49WS5wcm90b3R5cGU7bi5mbHVzaD1mdW5jdGlvbigpe3ZnKCl9O24uRmE9ZnVuY3Rpb24oYSl7cmV0dXJuIGVmKGEpfTtuLlZhPWZ1bmN0aW9uKGEpe3JldHVybiBjZihhKX07bi5wcmVwYXJlVGVtcGxhdGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucHJlcGFyZVRlbXBsYXRlRG9tKGEsYik7dGhpcy5wcmVwYXJlVGVtcGxhdGVTdHlsZXMoYSxiLGMpfTsKbi5wcmVwYXJlVGVtcGxhdGVTdHlsZXM9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhLl9wcmVwYXJlZCYmIVBlKXtPfHxqZ1tiXXx8KGpnW2JdPWtmKGIpKTthLl9wcmVwYXJlZD0hMDthLm5hbWU9YjthLmV4dGVuZHM9Yzt3Z1tiXT1hO3ZhciBkPXJmKGEpLGU9c2YoZCk7Yz17aXM6YixleHRlbmRzOmN9O2Zvcih2YXIgZj1bXSxnPWEuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLGg9MDtoPGcubGVuZ3RoO2grKyl7dmFyIGs9Z1toXTtpZihrLmhhc0F0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiKSl7aWYoIU8pe3ZhciBsPWsudGV4dENvbnRlbnQ7YmYuaGFzKGwpfHwoYmYuYWRkKGwpLGw9ay5jbG9uZU5vZGUoITApLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobCkpO2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChrKX19ZWxzZSBmLnB1c2goay50ZXh0Q29udGVudCksay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGspfWY9Zi5qb2luKCIiKS50cmltKCkrKEJnW2JdfHwiIik7CkRnKHRoaXMpO2lmKCFlKXtpZihnPSFkKWc9U2UudGVzdChmKXx8UmUudGVzdChmKSxTZS5sYXN0SW5kZXg9MCxSZS5sYXN0SW5kZXg9MDtoPXdlKGYpO2cmJlEmJnRoaXMuYSYmdGhpcy5hLnRyYW5zZm9ybVJ1bGVzKGgsYik7YS5fc3R5bGVBc3Q9aH1nPVtdO1F8fChnPVhmKGEuX3N0eWxlQXN0KSk7aWYoIWcubGVuZ3RofHxRKWg9Tz9hLmNvbnRlbnQ6bnVsbCxiPWpnW2JdfHxudWxsLGQ9emYoYyxhLl9zdHlsZUFzdCxudWxsLGQsZT9mOiIiKSxkPWQubGVuZ3RoP2dmKGQsYy5pcyxoLGIpOm51bGwsYS5fc3R5bGU9ZDthLmE9Z319O24uUWE9ZnVuY3Rpb24oYSxiKXtCZ1tiXT1hLmpvaW4oIiAiKX07bi5wcmVwYXJlVGVtcGxhdGVEb209ZnVuY3Rpb24oYSxiKXtpZighUGUpe3ZhciBjPXJmKGEpO098fCJzaGFkeSI9PT1jfHxhLl9kb21QcmVwYXJlZHx8KGEuX2RvbVByZXBhcmVkPSEwLHVmKGEuY29udGVudCxiKSl9fTsKZnVuY3Rpb24gRWcoYSl7dmFyIGI9cGYoYSksYz1iLmlzO2I9Yi5NO3ZhciBkPWpnW2NdfHxudWxsLGU9d2dbY107aWYoZSl7Yz1lLl9zdHlsZUFzdDt2YXIgZj1lLmE7ZT1yZihlKTtiPW5ldyBTZihjLGQsZixiLGUpO1RmKGEsYik7cmV0dXJuIGJ9fWZ1bmN0aW9uIEZnKGEpeyFhLmImJndpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYoYS5iPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxhLmIudHJhbnNmb3JtQ2FsbGJhY2s9ZnVuY3Rpb24oYil7YS5yYShiKX0sYS5iLnZhbGlkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXsoYS5iLmVucXVldWVkfHxhLmcpJiZhLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX0pfQpmdW5jdGlvbiBEZyhhKXshYS5hJiZ3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW0mJihhLmE9d2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbSxhLmEuaW52YWxpZENhbGxiYWNrPXlnKTtGZyhhKX0Kbi5mbHVzaEN1c3RvbVN0eWxlcz1mdW5jdGlvbigpe2lmKCFQZSYmKERnKHRoaXMpLHRoaXMuYikpe3ZhciBhPXRoaXMuYi5wcm9jZXNzU3R5bGVzKCk7aWYodGhpcy5iLmVucXVldWVkJiYhc2YodGhpcy5mLmNzc0J1aWxkKSl7aWYoUSl7aWYoIXRoaXMuZi5jc3NCdWlsZClmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5iLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUoYVtiXSk7aWYoYyYmUSYmdGhpcy5hKXt2YXIgZD1lZihjKTtEZyh0aGlzKTt0aGlzLmEudHJhbnNmb3JtUnVsZXMoZCk7Yy50ZXh0Q29udGVudD1jZihkKX19fWVsc2V7R2codGhpcyx0aGlzLmMsdGhpcy5mKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKShjPXRoaXMuYi5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKGFbYl0pKSYmaGcoYyx0aGlzLmYudyk7dGhpcy5nJiZ0aGlzLnN0eWxlRG9jdW1lbnQoKX10aGlzLmIuZW5xdWV1ZWQ9ITF9fX07Cm4uc3R5bGVFbGVtZW50PWZ1bmN0aW9uKGEsYil7aWYoUGUpe2lmKGIpe1QoYSl8fFRmKGEsbmV3IFNmKG51bGwpKTt2YXIgYz1UKGEpO2Mubz1jLm98fHt9O09iamVjdC5hc3NpZ24oYy5vLGIpO0hnKHRoaXMsYSxjKX19ZWxzZSBpZihjPVQoYSl8fEVnKGEpKWlmKGEhPT10aGlzLmMmJih0aGlzLmc9ITApLGImJihjLm89Yy5vfHx7fSxPYmplY3QuYXNzaWduKGMubyxiKSksUSlIZyh0aGlzLGEsYyk7ZWxzZSBpZih0aGlzLmZsdXNoKCksR2codGhpcyxhLGMpLGMuZmEmJmMuZmEubGVuZ3RoKXtiPXBmKGEpLmlzO3ZhciBkO2E6e2lmKGQ9Q2cuY2FjaGVbYl0pZm9yKHZhciBlPWQubGVuZ3RoLTE7MDw9ZTtlLS0pe3ZhciBmPWRbZV07Yjp7dmFyIGc9Yy5mYTtmb3IodmFyIGg9MDtoPGcubGVuZ3RoO2grKyl7dmFyIGs9Z1toXTtpZihmLnZba10hPT1jLndba10pe2c9ITE7YnJlYWsgYn19Zz0hMH1pZihnKXtkPWY7YnJlYWsgYX19ZD12b2lkIDB9Zz1kP2Quc3R5bGVFbGVtZW50Om51bGw7CmU9Yy5zOyhmPWQmJmQucyl8fChmPXRoaXMubFtiXT0odGhpcy5sW2JdfHwwKSsxLGY9YisiLSIrZik7Yy5zPWY7Zj1jLnM7aD1pZztoPWc/Zy50ZXh0Q29udGVudHx8IiI6ZWcoaCxhLGMudyxmKTtrPVQoYSk7dmFyIGw9ay5hO2wmJiFPJiZsIT09ZyYmKGwuX3VzZUNvdW50LS0sMD49bC5fdXNlQ291bnQmJmwucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpKTtPP2suYT8oay5hLnRleHRDb250ZW50PWgsZz1rLmEpOmgmJihnPWdmKGgsZixhLnNoYWRvd1Jvb3Qsay5iKSk6Zz9nLnBhcmVudE5vZGV8fChWZiYmLTE8aC5pbmRleE9mKCJAbWVkaWEiKSYmKGcudGV4dENvbnRlbnQ9aCksaGYoZyxudWxsLGsuYikpOmgmJihnPWdmKGgsZixudWxsLGsuYikpO2cmJihnLl91c2VDb3VudD1nLl91c2VDb3VudHx8MCxrLmEhPWcmJmcuX3VzZUNvdW50Kyssay5hPWcpO2Y9ZztPfHwoZz1jLnMsaz1oPWEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIixlJiYoaz1oLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxzKngtc2NvcGVcXHMqIisKZSsiXFxzKiIsImciKSwiICIpKSxrKz0oaz8iICI6IiIpKyJ4LXNjb3BlICIrZyxoIT09ayYmbmYoYSxrKSk7ZHx8Q2cuc3RvcmUoYixjLncsZixjLnMpfX07CmZ1bmN0aW9uIEhnKGEsYixjKXt2YXIgZD1wZihiKS5pcztpZihjLm8pe3ZhciBlPWMubyxmO2ZvcihmIGluIGUpbnVsbD09PWY/Yi5zdHlsZS5yZW1vdmVQcm9wZXJ0eShmKTpiLnN0eWxlLnNldFByb3BlcnR5KGYsZVtmXSl9ZT13Z1tkXTtpZighKCFlJiZiIT09YS5jfHxlJiYiIiE9PXJmKGUpKSYmZSYmZS5fc3R5bGUmJiF6ZyhlKSl7aWYoemcoZSl8fGUuX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9uIT09ZS5fYXBwbHlTaGltTmV4dFZlcnNpb24pRGcoYSksYS5hJiZhLmEudHJhbnNmb3JtUnVsZXMoZS5fc3R5bGVBc3QsZCksZS5fc3R5bGUudGV4dENvbnRlbnQ9emYoYixjLkEpLEFnKGUpO08mJihhPWIuc2hhZG93Um9vdCkmJihhPWEucXVlcnlTZWxlY3Rvcigic3R5bGUiKSkmJihhLnRleHRDb250ZW50PXpmKGIsYy5BKSk7Yy5BPWUuX3N0eWxlQXN0fX0KZnVuY3Rpb24gSWcoYSxiKXtyZXR1cm4oYj1vZihiKS5nZXRSb290Tm9kZSgpLmhvc3QpP1QoYil8fEVnKGIpP2I6SWcoYSxiKTphLmN9ZnVuY3Rpb24gR2coYSxiLGMpe3ZhciBkPUlnKGEsYiksZT1UKGQpLGY9ZS53O2Q9PT1hLmN8fGZ8fChHZyhhLGQsZSksZj1lLncpO2E9T2JqZWN0LmNyZWF0ZShmfHxudWxsKTtkPWRnKGIsYy5BLGMuY3NzQnVpbGQpO2I9YmcoZS5BLGIpLnY7T2JqZWN0LmFzc2lnbihhLGQuSGEsYixkLlJhKTtiPWMubztmb3IodmFyIGcgaW4gYilpZigoZT1iW2ddKXx8MD09PWUpYVtnXT1lO2c9aWc7Yj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKTtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKWQ9YltlXSxhW2RdPSRmKGcsYVtkXSxhKTtjLnc9YX1uLnN0eWxlRG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dGhpcy5zdHlsZVN1YnRyZWUodGhpcy5jLGEpfTsKbi5zdHlsZVN1YnRyZWU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1vZihhKSxkPWMuc2hhZG93Um9vdDsoZHx8YT09PXRoaXMuYykmJnRoaXMuc3R5bGVFbGVtZW50KGEsYik7aWYoYT1kJiYoZC5jaGlsZHJlbnx8ZC5jaGlsZE5vZGVzKSlmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXRoaXMuc3R5bGVTdWJ0cmVlKGFbY10pO2Vsc2UgaWYoYz1jLmNoaWxkcmVufHxjLmNoaWxkTm9kZXMpZm9yKGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLnN0eWxlU3VidHJlZShjW2FdKX07Cm4ucmE9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPXJmKGEpO2MhPT10aGlzLmYuY3NzQnVpbGQmJih0aGlzLmYuY3NzQnVpbGQ9Yyk7aWYoIXNmKGMpKXt2YXIgZD1lZihhKTtkZihkLGZ1bmN0aW9uKGEpe2lmKE8pUmYoYSk7ZWxzZXt2YXIgZD1SO2Euc2VsZWN0b3I9YS5wYXJzZWRTZWxlY3RvcjtSZihhKTthLnNlbGVjdG9yPWEuaj1DZihkLGEsZC5jLHZvaWQgMCx2b2lkIDApfVEmJiIiPT09YyYmKERnKGIpLGIuYSYmYi5hLnRyYW5zZm9ybVJ1bGUoYSkpfSk7UT9hLnRleHRDb250ZW50PWNmKGQpOnRoaXMuZi5BLnJ1bGVzLnB1c2goZCl9fTtuLmdldENvbXB1dGVkU3R5bGVWYWx1ZT1mdW5jdGlvbihhLGIpe3ZhciBjO1F8fChjPShUKGEpfHxUKElnKHRoaXMsYSkpKS53W2JdKTtyZXR1cm4oYz1jfHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKGIpKT9jLnRyaW0oKToiIn07Cm4uVWE9ZnVuY3Rpb24oYSxiKXt2YXIgYz1vZihhKS5nZXRSb290Tm9kZSgpO2I9Yj9iLnNwbGl0KC9ccy8pOltdO2M9Yy5ob3N0JiZjLmhvc3QubG9jYWxOYW1lO2lmKCFjKXt2YXIgZD1hLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTtpZihkKXtkPWQuc3BsaXQoL1xzLyk7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspaWYoZFtlXT09PVIuYSl7Yz1kW2UrMV07YnJlYWt9fX1jJiZiLnB1c2goUi5hLGMpO1F8fChjPVQoYSkpJiZjLnMmJmIucHVzaChpZy5hLGMucyk7bmYoYSxiLmpvaW4oIiAiKSl9O24uQmE9ZnVuY3Rpb24oYSl7cmV0dXJuIFQoYSl9O24uVGE9ZnVuY3Rpb24oYSxiKXt3ZihhLGIpfTtuLldhPWZ1bmN0aW9uKGEsYil7d2YoYSxiLCEwKX07bi5TYT1mdW5jdGlvbihhKXtyZXR1cm4gcWcoYSl9O24uRGE9ZnVuY3Rpb24oYSl7cmV0dXJuIHBnKGEpfTtZLnByb3RvdHlwZS5mbHVzaD1ZLnByb3RvdHlwZS5mbHVzaDtZLnByb3RvdHlwZS5wcmVwYXJlVGVtcGxhdGU9WS5wcm90b3R5cGUucHJlcGFyZVRlbXBsYXRlOwpZLnByb3RvdHlwZS5zdHlsZUVsZW1lbnQ9WS5wcm90b3R5cGUuc3R5bGVFbGVtZW50O1kucHJvdG90eXBlLnN0eWxlRG9jdW1lbnQ9WS5wcm90b3R5cGUuc3R5bGVEb2N1bWVudDtZLnByb3RvdHlwZS5zdHlsZVN1YnRyZWU9WS5wcm90b3R5cGUuc3R5bGVTdWJ0cmVlO1kucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGVWYWx1ZT1ZLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlVmFsdWU7WS5wcm90b3R5cGUuc2V0RWxlbWVudENsYXNzPVkucHJvdG90eXBlLlVhO1kucHJvdG90eXBlLl9zdHlsZUluZm9Gb3JOb2RlPVkucHJvdG90eXBlLkJhO1kucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlRm9yRG9jdW1lbnQ9WS5wcm90b3R5cGUucmE7WS5wcm90b3R5cGUuZ2V0U3R5bGVBc3Q9WS5wcm90b3R5cGUuRmE7WS5wcm90b3R5cGUuc3R5bGVBc3RUb1N0cmluZz1ZLnByb3RvdHlwZS5WYTtZLnByb3RvdHlwZS5mbHVzaEN1c3RvbVN0eWxlcz1ZLnByb3RvdHlwZS5mbHVzaEN1c3RvbVN0eWxlczsKWS5wcm90b3R5cGUuc2NvcGVOb2RlPVkucHJvdG90eXBlLlRhO1kucHJvdG90eXBlLnVuc2NvcGVOb2RlPVkucHJvdG90eXBlLldhO1kucHJvdG90eXBlLnNjb3BlRm9yTm9kZT1ZLnByb3RvdHlwZS5TYTtZLnByb3RvdHlwZS5jdXJyZW50U2NvcGVGb3JOb2RlPVkucHJvdG90eXBlLkRhO1kucHJvdG90eXBlLnByZXBhcmVBZG9wdGVkQ3NzVGV4dD1ZLnByb3RvdHlwZS5RYTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhZLnByb3RvdHlwZSx7bmF0aXZlU2hhZG93OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT319LG5hdGl2ZUNzczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFF9fX0pO3ZhciBaPW5ldyBZLEpnLEtnO3dpbmRvdy5TaGFkeUNTUyYmKEpnPXdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW0sS2c9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlKTsKd2luZG93LlNoYWR5Q1NTPXtTY29waW5nU2hpbTpaLHByZXBhcmVUZW1wbGF0ZTpmdW5jdGlvbihhLGIsYyl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpO1oucHJlcGFyZVRlbXBsYXRlKGEsYixjKX0scHJlcGFyZVRlbXBsYXRlRG9tOmZ1bmN0aW9uKGEsYil7Wi5wcmVwYXJlVGVtcGxhdGVEb20oYSxiKX0scHJlcGFyZVRlbXBsYXRlU3R5bGVzOmZ1bmN0aW9uKGEsYixjKXtaLmZsdXNoQ3VzdG9tU3R5bGVzKCk7Wi5wcmVwYXJlVGVtcGxhdGVTdHlsZXMoYSxiLGMpfSxzdHlsZVN1YnRyZWU6ZnVuY3Rpb24oYSxiKXtaLmZsdXNoQ3VzdG9tU3R5bGVzKCk7Wi5zdHlsZVN1YnRyZWUoYSxiKX0sc3R5bGVFbGVtZW50OmZ1bmN0aW9uKGEpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnN0eWxlRWxlbWVudChhKX0sc3R5bGVEb2N1bWVudDpmdW5jdGlvbihhKXtaLmZsdXNoQ3VzdG9tU3R5bGVzKCk7Wi5zdHlsZURvY3VtZW50KGEpfSxmbHVzaEN1c3RvbVN0eWxlczpmdW5jdGlvbigpe1ouZmx1c2hDdXN0b21TdHlsZXMoKX0sCmdldENvbXB1dGVkU3R5bGVWYWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiBaLmdldENvbXB1dGVkU3R5bGVWYWx1ZShhLGIpfSxuYXRpdmVDc3M6USxuYXRpdmVTaGFkb3c6Tyxjc3NCdWlsZDpRZSxkaXNhYmxlUnVudGltZTpQZX07SmcmJih3aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPUpnKTtLZyYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT1LZyk7dmFyIExnPXdpbmRvdy5jdXN0b21FbGVtZW50cyxNZz13aW5kb3cuSFRNTEltcG9ydHMsTmc9d2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQ7d2luZG93LldlYkNvbXBvbmVudHM9d2luZG93LldlYkNvbXBvbmVudHN8fHt9O2lmKExnJiZMZy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrKXt2YXIgT2csUGc9ZnVuY3Rpb24oKXtpZihPZyl7TmcuQyYmTmcuQyh3aW5kb3cuZG9jdW1lbnQpO3ZhciBhPU9nO09nPW51bGw7YSgpO3JldHVybiEwfX0sUWc9TWcud2hlblJlYWR5O0xnLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2soZnVuY3Rpb24oYSl7T2c9YTtRZyhQZyl9KTtNZy53aGVuUmVhZHk9ZnVuY3Rpb24oYSl7UWcoZnVuY3Rpb24oKXtQZygpP01nLndoZW5SZWFkeShhKTphKCl9KX19Ck1nLndoZW5SZWFkeShmdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3dpbmRvdy5XZWJDb21wb25lbnRzLnJlYWR5PSEwO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJXZWJDb21wb25lbnRzUmVhZHkiLHtidWJibGVzOiEwfSkpfSl9KTt2YXIgUmc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtSZy50ZXh0Q29udGVudD0iYm9keSB7dHJhbnNpdGlvbjogb3BhY2l0eSBlYXNlLWluIDAuMnM7IH0gXG5ib2R5W3VucmVzb2x2ZWRdIHtvcGFjaXR5OiAwOyBkaXNwbGF5OiBibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB9IFxuIjt2YXIgU2c9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpO1NnLmluc2VydEJlZm9yZShSZyxTZy5maXJzdENoaWxkKTt9KS5jYWxsKHRoaXMpOwoKCgooZnVuY3Rpb24oKXsvKgoKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KJ3VzZSBzdHJpY3QnO3ZhciBsPSEod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLHA7ZnVuY3Rpb24gcihhKXtwPWEmJmEuc2hpbWNzc3Byb3BlcnRpZXM/ITE6bHx8IShuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFwvNjAxfEVkZ2VcLzE1Lyl8fCF3aW5kb3cuQ1NTfHwhQ1NTLnN1cHBvcnRzfHwhQ1NTLnN1cHBvcnRzKCJib3gtc2hhZG93IiwiMCAwIDAgdmFyKC0tZm9vKSIpKX12YXIgdDt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCYmKHQ9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgYWE9ISghd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLmRpc2FibGVSdW50aW1lKTsKd2luZG93LlNoYWR5Q1NTJiZ2b2lkIDAhPT13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzP3A9d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzczp3aW5kb3cuU2hhZHlDU1M/KHIod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpyKHdpbmRvdy5XZWJDb21wb25lbnRzJiZ3aW5kb3cuV2ViQ29tcG9uZW50cy5mbGFncyk7dmFyIHU9cCx2PXQ7ZnVuY3Rpb24gdygpe3RoaXMuZW5kPXRoaXMuc3RhcnQ9MDt0aGlzLnJ1bGVzPXRoaXMucGFyZW50PXRoaXMucHJldmlvdXM9bnVsbDt0aGlzLmNzc1RleHQ9dGhpcy5wYXJzZWRDc3NUZXh0PSIiO3RoaXMuYXRSdWxlPSExO3RoaXMudHlwZT0wO3RoaXMucGFyc2VkU2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj10aGlzLmtleWZyYW1lc05hbWU9IiJ9CmZ1bmN0aW9uIHgoYSl7YT1hLnJlcGxhY2UoYmEsIiIpLnJlcGxhY2UoY2EsIiIpO3ZhciBiPXksYz1hLGU9bmV3IHc7ZS5zdGFydD0wO2UuZW5kPWMubGVuZ3RoO2Zvcih2YXIgZD1lLGY9MCxnPWMubGVuZ3RoO2Y8ZztmKyspaWYoInsiPT09Y1tmXSl7ZC5ydWxlc3x8KGQucnVsZXM9W10pO3ZhciBoPWQsaz1oLnJ1bGVzW2gucnVsZXMubGVuZ3RoLTFdfHxudWxsO2Q9bmV3IHc7ZC5zdGFydD1mKzE7ZC5wYXJlbnQ9aDtkLnByZXZpb3VzPWs7aC5ydWxlcy5wdXNoKGQpfWVsc2UifSI9PT1jW2ZdJiYoZC5lbmQ9ZisxLGQ9ZC5wYXJlbnR8fGUpO3JldHVybiBiKGUsYSl9CmZ1bmN0aW9uIHkoYSxiKXt2YXIgYz1iLnN1YnN0cmluZyhhLnN0YXJ0LGEuZW5kLTEpO2EucGFyc2VkQ3NzVGV4dD1hLmNzc1RleHQ9Yy50cmltKCk7YS5wYXJlbnQmJihjPWIuc3Vic3RyaW5nKGEucHJldmlvdXM/YS5wcmV2aW91cy5lbmQ6YS5wYXJlbnQuc3RhcnQsYS5zdGFydC0xKSxjPWRhKGMpLGM9Yy5yZXBsYWNlKHosIiAiKSxjPWMuc3Vic3RyaW5nKGMubGFzdEluZGV4T2YoIjsiKSsxKSxjPWEucGFyc2VkU2VsZWN0b3I9YS5zZWxlY3Rvcj1jLnRyaW0oKSxhLmF0UnVsZT0wPT09Yy5pbmRleE9mKCJAIiksYS5hdFJ1bGU/MD09PWMuaW5kZXhPZigiQG1lZGlhIik/YS50eXBlPUE6Yy5tYXRjaChlYSkmJihhLnR5cGU9QixhLmtleWZyYW1lc05hbWU9YS5zZWxlY3Rvci5zcGxpdCh6KS5wb3AoKSk6YS50eXBlPTA9PT1jLmluZGV4T2YoIi0tIik/QzpEKTtpZihjPWEucnVsZXMpZm9yKHZhciBlPTAsZD1jLmxlbmd0aCxmPXZvaWQgMDtlPGQmJihmPWNbZV0pO2UrKyl5KGYsYik7CnJldHVybiBhfWZ1bmN0aW9uIGRhKGEpe3JldHVybiBhLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oYSxjKXthPWM7Zm9yKGM9Ni1hLmxlbmd0aDtjLS07KWE9IjAiK2E7cmV0dXJuIlxcIithfSl9CmZ1bmN0aW9uIEUoYSxiLGMpe2M9dm9pZCAwPT09Yz8iIjpjO3ZhciBlPSIiO2lmKGEuY3NzVGV4dHx8YS5ydWxlcyl7dmFyIGQ9YS5ydWxlcyxmO2lmKGY9ZClmPWRbMF0sZj0hKGYmJmYuc2VsZWN0b3ImJjA9PT1mLnNlbGVjdG9yLmluZGV4T2YoIi0tIikpO2lmKGYpe2Y9MDtmb3IodmFyIGc9ZC5sZW5ndGgsaD12b2lkIDA7ZjxnJiYoaD1kW2ZdKTtmKyspZT1FKGgsYixlKX1lbHNlIGI/Yj1hLmNzc1RleHQ6KGI9YS5jc3NUZXh0LGI9Yi5yZXBsYWNlKGZhLCIiKS5yZXBsYWNlKGhhLCIiKSxiPWIucmVwbGFjZShpYSwiIikucmVwbGFjZShqYSwiIikpLChlPWIudHJpbSgpKSYmKGU9IiAgIitlKyJcbiIpfWUmJihhLnNlbGVjdG9yJiYoYys9YS5zZWxlY3RvcisiIHtcbiIpLGMrPWUsYS5zZWxlY3RvciYmKGMrPSJ9XG5cbiIpKTtyZXR1cm4gY30KdmFyIEQ9MSxCPTcsQT00LEM9MUUzLGJhPS9cL1wqW14qXSpcKisoW14vKl1bXipdKlwqKykqXC8vZ2ltLGNhPS9AaW1wb3J0W147XSo7L2dpbSxmYT0vKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0saGE9Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xuXXwkKT8vZ2ltLGlhPS9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLGphPS9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sZWE9L15AW15cc10qa2V5ZnJhbWVzLyx6PS9ccysvZzt2YXIgRz0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLEg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2ksa2E9L0BtZWRpYVxzKC4qKS87dmFyIEk9bmV3IFNldDtmdW5jdGlvbiBKKGEpe2lmKCFhKXJldHVybiIiOyJzdHJpbmciPT09dHlwZW9mIGEmJihhPXgoYSkpO3JldHVybiBFKGEsdSl9ZnVuY3Rpb24gSyhhKXshYS5fX2Nzc1J1bGVzJiZhLnRleHRDb250ZW50JiYoYS5fX2Nzc1J1bGVzPXgoYS50ZXh0Q29udGVudCkpO3JldHVybiBhLl9fY3NzUnVsZXN8fG51bGx9ZnVuY3Rpb24gTChhLGIsYyxlKXtpZihhKXt2YXIgZD0hMSxmPWEudHlwZTtpZihlJiZmPT09QSl7dmFyIGc9YS5zZWxlY3Rvci5tYXRjaChrYSk7ZyYmKHdpbmRvdy5tYXRjaE1lZGlhKGdbMV0pLm1hdGNoZXN8fChkPSEwKSl9Zj09PUQ/YihhKTpjJiZmPT09Qj9jKGEpOmY9PT1DJiYoZD0hMCk7aWYoKGE9YS5ydWxlcykmJiFkKWZvcihkPTAsZj1hLmxlbmd0aCxnPXZvaWQgMDtkPGYmJihnPWFbZF0pO2QrKylMKGcsYixjLGUpfX0KZnVuY3Rpb24gTShhLGIpe3ZhciBjPWEuaW5kZXhPZigidmFyKCIpO2lmKC0xPT09YylyZXR1cm4gYihhLCIiLCIiLCIiKTthOnt2YXIgZT0wO3ZhciBkPWMrMztmb3IodmFyIGY9YS5sZW5ndGg7ZDxmO2QrKylpZigiKCI9PT1hW2RdKWUrKztlbHNlIGlmKCIpIj09PWFbZF0mJjA9PT0tLWUpYnJlYWsgYTtkPS0xfWU9YS5zdWJzdHJpbmcoYys0LGQpO2M9YS5zdWJzdHJpbmcoMCxjKTthPU0oYS5zdWJzdHJpbmcoZCsxKSxiKTtkPWUuaW5kZXhPZigiLCIpO3JldHVybi0xPT09ZD9iKGMsZS50cmltKCksIiIsYSk6YihjLGUuc3Vic3RyaW5nKDAsZCkudHJpbSgpLGUuc3Vic3RyaW5nKGQrMSkudHJpbSgpLGEpfQpmdW5jdGlvbiBOKGEpe2lmKHZvaWQgMCE9PXYpcmV0dXJuIHY7aWYodm9pZCAwPT09YS5fX2Nzc0J1aWxkKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgiY3NzLWJ1aWxkIik7aWYoYilhLl9fY3NzQnVpbGQ9YjtlbHNle2E6e2I9InRlbXBsYXRlIj09PWEubG9jYWxOYW1lP2EuY29udGVudC5maXJzdENoaWxkOmEuZmlyc3RDaGlsZDtpZihiIGluc3RhbmNlb2YgQ29tbWVudCYmKGI9Yi50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIjoiKSwiY3NzLWJ1aWxkIj09PWJbMF0pKXtiPWJbMV07YnJlYWsgYX1iPSIifWlmKCIiIT09Yil7dmFyIGM9InRlbXBsYXRlIj09PWEubG9jYWxOYW1lP2EuY29udGVudC5maXJzdENoaWxkOmEuZmlyc3RDaGlsZDtjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9YS5fX2Nzc0J1aWxkPWJ9fXJldHVybiBhLl9fY3NzQnVpbGR8fCIifTt2YXIgbGE9LztccyovbSxtYT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxPPS9ccyohaW1wb3J0YW50LztmdW5jdGlvbiBQKCl7dGhpcy5hPXt9fVAucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe2E9YS50cmltKCk7dGhpcy5hW2FdPXtoOmIsaTp7fX19O1AucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXthPWEudHJpbSgpO3JldHVybiB0aGlzLmFbYV18fG51bGx9O3ZhciBRPW51bGw7ZnVuY3Rpb24gUigpe3RoaXMuYj10aGlzLmM9bnVsbDt0aGlzLmE9bmV3IFB9Ui5wcm90b3R5cGUubz1mdW5jdGlvbihhKXthPUgudGVzdChhKXx8Ry50ZXN0KGEpO0gubGFzdEluZGV4PTA7Ry5sYXN0SW5kZXg9MDtyZXR1cm4gYX07ClIucHJvdG90eXBlLm09ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT1hLl9nYXRoZXJlZFN0eWxlKXt2YXIgYz1bXTtmb3IodmFyIGU9YS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIiksZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgZj1lW2RdO2lmKGYuaGFzQXR0cmlidXRlKCJzaGFkeS11bnNjb3BlZCIpKXtpZighbCl7dmFyIGc9Zi50ZXh0Q29udGVudDtJLmhhcyhnKXx8KEkuYWRkKGcpLGc9Zi5jbG9uZU5vZGUoITApLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZykpO2YucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKX19ZWxzZSBjLnB1c2goZi50ZXh0Q29udGVudCksZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfShjPWMuam9pbigiIikudHJpbSgpKT8oZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGUudGV4dENvbnRlbnQ9YyxhLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGUsYS5jb250ZW50LmZpcnN0Q2hpbGQpLGM9ZSk6Yz1udWxsO2EuX2dhdGhlcmVkU3R5bGU9CmN9cmV0dXJuKGE9YS5fZ2F0aGVyZWRTdHlsZSk/dGhpcy5qKGEsYik6bnVsbH07Ui5wcm90b3R5cGUuaj1mdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj8iIjpiO3ZhciBjPUsoYSk7dGhpcy5sKGMsYik7YS50ZXh0Q29udGVudD1KKGMpO3JldHVybiBjfTtSLnByb3RvdHlwZS5mPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1LKGEpO0woYyxmdW5jdGlvbihhKXsiOnJvb3QiPT09YS5zZWxlY3RvciYmKGEuc2VsZWN0b3I9Imh0bWwiKTtiLmcoYSl9KTthLnRleHRDb250ZW50PUooYyk7cmV0dXJuIGN9O1IucHJvdG90eXBlLmw9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMuYz1iO0woYSxmdW5jdGlvbihhKXtjLmcoYSl9KTt0aGlzLmM9bnVsbH07Ui5wcm90b3R5cGUuZz1mdW5jdGlvbihhKXthLmNzc1RleHQ9bmEodGhpcyxhLnBhcnNlZENzc1RleHQsYSk7Ijpyb290Ij09PWEuc2VsZWN0b3ImJihhLnNlbGVjdG9yPSI6aG9zdCA+ICoiKX07CmZ1bmN0aW9uIG5hKGEsYixjKXtiPWIucmVwbGFjZShHLGZ1bmN0aW9uKGIsZCxmLGcpe3JldHVybiBvYShhLGIsZCxmLGcsYyl9KTtyZXR1cm4gUyhhLGIsYyl9ZnVuY3Rpb24gcGEoYSxiKXtmb3IodmFyIGM9YjtjLnBhcmVudDspYz1jLnBhcmVudDt2YXIgZT17fSxkPSExO0woYyxmdW5jdGlvbihjKXsoZD1kfHxjPT09Yil8fGMuc2VsZWN0b3I9PT1iLnNlbGVjdG9yJiZPYmplY3QuYXNzaWduKGUsVChhLGMucGFyc2VkQ3NzVGV4dCkpfSk7cmV0dXJuIGV9CmZ1bmN0aW9uIFMoYSxiLGMpe2Zvcih2YXIgZTtlPUguZXhlYyhiKTspe3ZhciBkPWVbMF0sZj1lWzFdO2U9ZS5pbmRleDt2YXIgZz1iLnNsaWNlKDAsZStkLmluZGV4T2YoIkBhcHBseSIpKTtiPWIuc2xpY2UoZStkLmxlbmd0aCk7dmFyIGg9Yz9wYShhLGMpOnt9O09iamVjdC5hc3NpZ24oaCxUKGEsZykpO2Q9dm9pZCAwO3ZhciBrPWE7Zj1mLnJlcGxhY2UobGEsIiIpO3ZhciBuPVtdO3ZhciBtPWsuYS5nZXQoZik7bXx8KGsuYS5zZXQoZix7fSksbT1rLmEuZ2V0KGYpKTtpZihtKXtrLmMmJihtLmlbay5jXT0hMCk7dmFyIHE9bS5oO2ZvcihkIGluIHEpaz1oJiZoW2RdLG09W2QsIjogdmFyKCIsZiwiXy1fIixkXSxrJiZtLnB1c2goIiwiLGsucmVwbGFjZShPLCIiKSksbS5wdXNoKCIpIiksTy50ZXN0KHFbZF0pJiZtLnB1c2goIiAhaW1wb3J0YW50Iiksbi5wdXNoKG0uam9pbigiIikpfWQ9bi5qb2luKCI7ICIpO2I9ZytkK2I7SC5sYXN0SW5kZXg9ZStkLmxlbmd0aH1yZXR1cm4gYn0KZnVuY3Rpb24gVChhLGIsYyl7Yz12b2lkIDA9PT1jPyExOmM7Yj1iLnNwbGl0KCI7Iik7Zm9yKHZhciBlLGQsZj17fSxnPTAsaDtnPGIubGVuZ3RoO2crKylpZihlPWJbZ10paWYoaD1lLnNwbGl0KCI6IiksMTxoLmxlbmd0aCl7ZT1oWzBdLnRyaW0oKTtkPWguc2xpY2UoMSkuam9pbigiOiIpO2lmKGMpe3ZhciBrPWE7aD1lO3ZhciBuPW1hLmV4ZWMoZCk7biYmKG5bMV0/KGsuYnx8KGsuYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIiksay5iLnNldEF0dHJpYnV0ZSgiYXBwbHktc2hpbS1tZWFzdXJlIiwiIiksay5iLnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrLmIpKSxoPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGsuYikuZ2V0UHJvcGVydHlWYWx1ZShoKSk6aD0iYXBwbHktc2hpbS1pbmhlcml0IixkPWgpfWZbZV09ZH1yZXR1cm4gZn1mdW5jdGlvbiBxYShhLGIpe2lmKFEpZm9yKHZhciBjIGluIGIuaSljIT09YS5jJiZRKGMpfQpmdW5jdGlvbiBvYShhLGIsYyxlLGQsZil7ZSYmTShlLGZ1bmN0aW9uKGIsYyl7YyYmYS5hLmdldChjKSYmKGQ9IkBhcHBseSAiK2MrIjsiKX0pO2lmKCFkKXJldHVybiBiO3ZhciBnPVMoYSwiIitkLGYpO2Y9Yi5zbGljZSgwLGIuaW5kZXhPZigiLS0iKSk7dmFyIGg9Zz1UKGEsZywhMCksaz1hLmEuZ2V0KGMpLG49ayYmay5oO24/aD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobiksZyk6YS5hLnNldChjLGgpO3ZhciBtPVtdLHEsWj0hMTtmb3IocSBpbiBoKXt2YXIgRj1nW3FdO3ZvaWQgMD09PUYmJihGPSJpbml0aWFsIik7IW58fHEgaW4gbnx8KFo9ITApO20ucHVzaChjKyJfLV8iK3ErIjogIitGKX1aJiZxYShhLGspO2smJihrLmg9aCk7ZSYmKGY9YisiOyIrZik7cmV0dXJuIGYrbS5qb2luKCI7ICIpKyI7In1SLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1SLnByb3RvdHlwZS5vO1IucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPVIucHJvdG90eXBlLmo7ClIucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlPVIucHJvdG90eXBlLmY7Ui5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM9Ui5wcm90b3R5cGUubDtSLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlPVIucHJvdG90eXBlLmc7Ui5wcm90b3R5cGUudHJhbnNmb3JtVGVtcGxhdGU9Ui5wcm90b3R5cGUubTtSLnByb3RvdHlwZS5fc2VwYXJhdG9yPSJfLV8iO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwiaW52YWxpZENhbGxiYWNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFF9LHNldDpmdW5jdGlvbihhKXtRPWF9fSk7dmFyIFU9e307dmFyIHJhPVByb21pc2UucmVzb2x2ZSgpO2Z1bmN0aW9uIHNhKGEpe2lmKGE9VVthXSlhLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbj1hLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbnx8MCxhLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbj1hLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbnx8MCxhLl9hcHBseVNoaW1OZXh0VmVyc2lvbj0oYS5fYXBwbHlTaGltTmV4dFZlcnNpb258fDApKzF9ZnVuY3Rpb24gdGEoYSl7cmV0dXJuIGEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPT09YS5fYXBwbHlTaGltTmV4dFZlcnNpb259ZnVuY3Rpb24gdWEoYSl7YS5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb249YS5fYXBwbHlTaGltTmV4dFZlcnNpb247YS5fdmFsaWRhdGluZ3x8KGEuX3ZhbGlkYXRpbmc9ITAscmEudGhlbihmdW5jdGlvbigpe2EuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPWEuX2FwcGx5U2hpbU5leHRWZXJzaW9uO2EuX3ZhbGlkYXRpbmc9ITF9KSl9O3ZhciBWPW5ldyBSO2Z1bmN0aW9uIFcoKXt0aGlzLmE9bnVsbDtWLmludmFsaWRDYWxsYmFjaz1zYX1mdW5jdGlvbiBYKGEpeyFhLmEmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSYmKGEuYT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsYS5hLnRyYW5zZm9ybUNhbGxiYWNrPWZ1bmN0aW9uKGEpe1YuZihhKX0sYS5hLnZhbGlkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXthLmEuZW5xdWV1ZWQmJmEuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9Vy5wcm90b3R5cGUucHJlcGFyZVRlbXBsYXRlPWZ1bmN0aW9uKGEsYil7WCh0aGlzKTsiIj09PU4oYSkmJihVW2JdPWEsYj1WLm0oYSxiKSxhLl9zdHlsZUFzdD1iKX07ClcucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzPWZ1bmN0aW9uKCl7WCh0aGlzKTtpZih0aGlzLmEpe3ZhciBhPXRoaXMuYS5wcm9jZXNzU3R5bGVzKCk7aWYodGhpcy5hLmVucXVldWVkKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5hLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUoYVtiXSk7YyYmVi5mKGMpfXRoaXMuYS5lbnF1ZXVlZD0hMX19fTsKVy5wcm90b3R5cGUuc3R5bGVTdWJ0cmVlPWZ1bmN0aW9uKGEsYil7WCh0aGlzKTtpZihiKWZvcih2YXIgYyBpbiBiKW51bGw9PT1jP2Euc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6YS5zdHlsZS5zZXRQcm9wZXJ0eShjLGJbY10pO2lmKGEuc2hhZG93Um9vdClmb3IodGhpcy5zdHlsZUVsZW1lbnQoYSksYT1hLnNoYWRvd1Jvb3QuY2hpbGRyZW58fGEuc2hhZG93Um9vdC5jaGlsZE5vZGVzLGI9MDtiPGEubGVuZ3RoO2IrKyl0aGlzLnN0eWxlU3VidHJlZShhW2JdKTtlbHNlIGZvcihhPWEuY2hpbGRyZW58fGEuY2hpbGROb2RlcyxiPTA7YjxhLmxlbmd0aDtiKyspdGhpcy5zdHlsZVN1YnRyZWUoYVtiXSl9OwpXLnByb3RvdHlwZS5zdHlsZUVsZW1lbnQ9ZnVuY3Rpb24oYSl7WCh0aGlzKTt2YXIgYj1hLmxvY2FsTmFtZSxjO2I/LTE8Yi5pbmRleE9mKCItIik/Yz1iOmM9YS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJpcyIpfHwiIjpjPWEuaXM7Yj1VW2NdO2lmKCEoYiYmIiIhPT1OKGIpfHwhYnx8dGEoYikpKXtpZih0YShiKXx8Yi5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24hPT1iLl9hcHBseVNoaW1OZXh0VmVyc2lvbil0aGlzLnByZXBhcmVUZW1wbGF0ZShiLGMpLHVhKGIpO2lmKGE9YS5zaGFkb3dSb290KWlmKGE9YS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpKWEuX19jc3NSdWxlcz1iLl9zdHlsZUFzdCxhLnRleHRDb250ZW50PUooYi5fc3R5bGVBc3QpfX07Vy5wcm90b3R5cGUuc3R5bGVEb2N1bWVudD1mdW5jdGlvbihhKXtYKHRoaXMpO3RoaXMuc3R5bGVTdWJ0cmVlKGRvY3VtZW50LmJvZHksYSl9OwppZighd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltKXt2YXIgWT1uZXcgVyx2YT13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZTt3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZTpmdW5jdGlvbihhLGIpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTtZLnByZXBhcmVUZW1wbGF0ZShhLGIpfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXM6ZnVuY3Rpb24oYSxiLGMpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUoYSxiLGMpfSxwcmVwYXJlVGVtcGxhdGVEb206ZnVuY3Rpb24oKXt9LHN0eWxlU3VidHJlZTpmdW5jdGlvbihhLGIpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTtZLnN0eWxlU3VidHJlZShhLGIpfSxzdHlsZUVsZW1lbnQ6ZnVuY3Rpb24oYSl7WS5mbHVzaEN1c3RvbVN0eWxlcygpO1kuc3R5bGVFbGVtZW50KGEpfSxzdHlsZURvY3VtZW50OmZ1bmN0aW9uKGEpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTsKWS5zdHlsZURvY3VtZW50KGEpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKGIpKT9hLnRyaW0oKToiIn0sZmx1c2hDdXN0b21TdHlsZXM6ZnVuY3Rpb24oKXtZLmZsdXNoQ3VzdG9tU3R5bGVzKCl9LG5hdGl2ZUNzczp1LG5hdGl2ZVNoYWRvdzpsLGNzc0J1aWxkOnYsZGlzYWJsZVJ1bnRpbWU6YWF9O3ZhJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPXZhKX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPVY7fSkuY2FsbCh0aGlzKTsKCgoKCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGNvbnN0IHVzZXJQb2x5bWVyID0gd2luZG93LlBvbHltZXI7CgogIC8qKgogICAqIEBuYW1lc3BhY2UgUG9seW1lcgogICAqIEBzdW1tYXJ5IFBvbHltZXIgaXMgYSBsaWdodHdlaWdodCBsaWJyYXJ5IGJ1aWx0IG9uIHRvcCBvZiB0aGUgd2ViCiAgICogICBzdGFuZGFyZHMtYmFzZWQgV2ViIENvbXBvbmVudHMgQVBJJ3MsIGFuZCBtYWtlcyBpdCBlYXN5IHRvIGJ1aWxkIHlvdXIKICAgKiAgIG93biBjdXN0b20gSFRNTCBlbGVtZW50cy4KICAgKiBAcGFyYW0geyFQb2x5bWVySW5pdH0gaW5mbyBQcm90b3R5cGUgZm9yIHRoZSBjdXN0b20gZWxlbWVudC4gSXQgbXVzdCBjb250YWluCiAgICogICBhbiBgaXNgIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIGVsZW1lbnQgbmFtZS4gT3RoZXIgcHJvcGVydGllcyBwb3B1bGF0ZQogICAqICAgdGhlIGVsZW1lbnQgcHJvdG90eXBlLiBUaGUgYHByb3BlcnRpZXNgLCBgb2JzZXJ2ZXJzYCwgYGhvc3RBdHRyaWJ1dGVzYCwKICAgKiAgIGFuZCBgbGlzdGVuZXJzYCBwcm9wZXJ0aWVzIGFyZSBwcm9jZXNzZWQgdG8gY3JlYXRlIGVsZW1lbnQgZmVhdHVyZXMuCiAgICogQHJldHVybiB7IU9iamVjdH0gUmV0dXJucyBhIGN1c3RvbSBlbGVtZW50IGNsYXNzIGZvciB0aGUgZ2l2ZW4gcHJvdmlkZWQKICAgKiAgIHByb3RvdHlwZSBgaW5mb2Agb2JqZWN0LiBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCBpZiBnaXZlbiBieSBgaW5mby5pc2AuCiAgICovCiAgd2luZG93LlBvbHltZXIgPSBmdW5jdGlvbihpbmZvKSB7CiAgICByZXR1cm4gd2luZG93LlBvbHltZXIuX3BvbHltZXJGbihpbmZvKTsKICB9OwoKICAvLyBzdXBwb3J0IHVzZXIgc2V0dGluZ3Mgb24gdGhlIFBvbHltZXIgb2JqZWN0CiAgaWYgKHVzZXJQb2x5bWVyKSB7CiAgICBPYmplY3QuYXNzaWduKFBvbHltZXIsIHVzZXJQb2x5bWVyKTsKICB9CgogIC8vIFRvIGJlIHBsdWdnZWQgYnkgbGVnYWN5IGltcGxlbWVudGF0aW9uIGlmIGxvYWRlZAogIC8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovCiAgLyoqCiAgICogQHBhcmFtIHshUG9seW1lckluaXR9IGluZm8gUHJvdG90eXBlIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQuIEl0IG11c3QgY29udGFpbgogICAqICAgYW4gYGlzYCBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBlbGVtZW50IG5hbWUuIE90aGVyIHByb3BlcnRpZXMgcG9wdWxhdGUKICAgKiAgIHRoZSBlbGVtZW50IHByb3RvdHlwZS4gVGhlIGBwcm9wZXJ0aWVzYCwgYG9ic2VydmVyc2AsIGBob3N0QXR0cmlidXRlc2AsCiAgICogICBhbmQgYGxpc3RlbmVyc2AgcHJvcGVydGllcyBhcmUgcHJvY2Vzc2VkIHRvIGNyZWF0ZSBlbGVtZW50IGZlYXR1cmVzLgogICAqIEByZXR1cm4geyFPYmplY3R9IFJldHVybnMgYSBjdXN0b20gZWxlbWVudCBjbGFzcyBmb3IgdGhlIGdpdmVuIHByb3ZpZGVkCiAgICogICBwcm90b3R5cGUgYGluZm9gIG9iamVjdC4gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgaWYgZ2l2ZW4gYnkgYGluZm8uaXNgLgogICAqLwogIHdpbmRvdy5Qb2x5bWVyLl9wb2x5bWVyRm4gPSBmdW5jdGlvbihpbmZvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgIHRocm93IG5ldyBFcnJvcignTG9hZCBwb2x5bWVyLmh0bWwgdG8gdXNlIHRoZSBQb2x5bWVyKCkgZnVuY3Rpb24uJyk7CiAgfTsKICAvKiBlc2xpbnQtZW5hYmxlICovCgogIHdpbmRvdy5Qb2x5bWVyLnZlcnNpb24gPSAnMi43LjAnOwoKICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLwogIC8qCiAgV2hlbiB1c2luZyBDbG9zdXJlIENvbXBpbGVyLCBKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KHByb3BlcnR5LCBvYmplY3QpIGlzIHJlcGxhY2VkIGJ5IHRoZSBtdW5nZWQgbmFtZSBmb3Igb2JqZWN0W3Byb3BlcnR5XQogIFdlIGNhbm5vdCBhbGlhcyB0aGlzIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvIHVzZSBhIHNtYWxsIHNoaW0gdGhhdCBoYXMgdGhlIHNhbWUgYmVoYXZpb3Igd2hlbiBub3QgY29tcGlsaW5nLgogICovCiAgd2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkgPSBmdW5jdGlvbihwcm9wLCBvYmopIHsKICAgIHJldHVybiBwcm9wOwogIH07CiAgLyogZXNsaW50LWVuYWJsZSAqLwoKfSkoKTsKCgoKICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgbGV0IENTU19VUkxfUlggPSAvKHVybFwoKShbXildKikoXCkpL2c7CiAgICBsZXQgQUJTX1VSTCA9IC8oXlwvKXwoXiMpfCheW1x3LVxkXSo6KS87CiAgICBsZXQgd29ya2luZ1VSTDsKICAgIGxldCByZXNvbHZlRG9jOwogICAgLyoqCiAgICAgKiBSZXNvbHZlcyB0aGUgZ2l2ZW4gVVJMIGFnYWluc3QgdGhlIHByb3ZpZGVkIGBiYXNlVXJpJy4KICAgICAqIAogICAgICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbm8gcmVzb2x1dGlvbiBmb3IgVVJMcyB0aGF0IHN0YXJ0CiAgICAgKiB3aXRoIGAvYCAoYWJzb2x1dGUgVVJMcykgb3IgYCNgIChoYXNoIGlkZW50aWZpZXJzKS4gIEZvciBnZW5lcmFsIHB1cnBvc2UKICAgICAqIFVSTCByZXNvbHV0aW9uLCB1c2UgYHdpbmRvdy5VUkxgLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlJlc29sdmVVcmwKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgSW5wdXQgVVJMIHRvIHJlc29sdmUKICAgICAqIEBwYXJhbSB7P3N0cmluZz19IGJhc2VVUkkgQmFzZSBVUkkgdG8gcmVzb2x2ZSB0aGUgVVJMIGFnYWluc3QKICAgICAqIEByZXR1cm4ge3N0cmluZ30gcmVzb2x2ZWQgVVJMCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlc29sdmVVcmwodXJsLCBiYXNlVVJJKSB7CiAgICAgIGlmICh1cmwgJiYgQUJTX1VSTC50ZXN0KHVybCkpIHsKICAgICAgICByZXR1cm4gdXJsOwogICAgICB9CiAgICAgIC8vIExhenkgZmVhdHVyZSBkZXRlY3Rpb24uCiAgICAgIGlmICh3b3JraW5nVVJMID09PSB1bmRlZmluZWQpIHsKICAgICAgICB3b3JraW5nVVJMID0gZmFsc2U7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHUgPSBuZXcgVVJMKCdiJywgJ2h0dHA6Ly9hJyk7CiAgICAgICAgICB1LnBhdGhuYW1lID0gJ2MlMjBkJzsKICAgICAgICAgIHdvcmtpbmdVUkwgPSAodS5ocmVmID09PSAnaHR0cDovL2EvYyUyMGQnKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAvLyBzaWxlbnRseSBmYWlsCiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghYmFzZVVSSSkgewogICAgICAgIGJhc2VVUkkgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgICB9CiAgICAgIGlmICh3b3JraW5nVVJMKSB7CiAgICAgICAgcmV0dXJuIChuZXcgVVJMKHVybCwgYmFzZVVSSSkpLmhyZWY7CiAgICAgIH0KICAgICAgLy8gRmFsbGJhY2sgdG8gY3JlYXRpbmcgYW4gYW5jaG9yIGludG8gYSBkaXNjb25uZWN0ZWQgZG9jdW1lbnQuCiAgICAgIGlmICghcmVzb2x2ZURvYykgewogICAgICAgIHJlc29sdmVEb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ3RlbXAnKTsKICAgICAgICByZXNvbHZlRG9jLmJhc2UgPSByZXNvbHZlRG9jLmNyZWF0ZUVsZW1lbnQoJ2Jhc2UnKTsKICAgICAgICByZXNvbHZlRG9jLmhlYWQuYXBwZW5kQ2hpbGQocmVzb2x2ZURvYy5iYXNlKTsKICAgICAgICByZXNvbHZlRG9jLmFuY2hvciA9IHJlc29sdmVEb2MuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgIHJlc29sdmVEb2MuYm9keS5hcHBlbmRDaGlsZChyZXNvbHZlRG9jLmFuY2hvcik7CiAgICAgIH0KICAgICAgcmVzb2x2ZURvYy5iYXNlLmhyZWYgPSBiYXNlVVJJOwogICAgICByZXNvbHZlRG9jLmFuY2hvci5ocmVmID0gdXJsOwogICAgICByZXR1cm4gcmVzb2x2ZURvYy5hbmNob3IuaHJlZiB8fCB1cmw7CgogICAgfQoKICAgIC8qKgogICAgICogUmVzb2x2ZXMgYW55IHJlbGF0aXZlIFVSTCdzIGluIHRoZSBnaXZlbiBDU1MgdGV4dCBhZ2FpbnN0IHRoZSBwcm92aWRlZAogICAgICogYG93bmVyRG9jdW1lbnRgJ3MgYGJhc2VVUklgLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlJlc29sdmVVcmwKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NUZXh0IENTUyB0ZXh0IHRvIHByb2Nlc3MKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJJIEJhc2UgVVJJIHRvIHJlc29sdmUgdGhlIFVSTCBhZ2FpbnN0CiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFByb2Nlc3NlZCBDU1MgdGV4dCB3aXRoIHJlc29sdmVkIFVSTCdzCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlc29sdmVDc3MoY3NzVGV4dCwgYmFzZVVSSSkgewogICAgICByZXR1cm4gY3NzVGV4dC5yZXBsYWNlKENTU19VUkxfUlgsIGZ1bmN0aW9uKG0sIHByZSwgdXJsLCBwb3N0KSB7CiAgICAgICAgcmV0dXJuIHByZSArICdcJycgKwogICAgICAgICAgcmVzb2x2ZVVybCh1cmwucmVwbGFjZSgvWyInXS9nLCAnJyksIGJhc2VVUkkpICsKICAgICAgICAgICdcJycgKyBwb3N0OwogICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBwYXRoIGZyb20gYSBnaXZlbiBgdXJsYC4gVGhlIHBhdGggaW5jbHVkZXMgdGhlIHRyYWlsaW5nCiAgICAgKiBgL2AgZnJvbSB0aGUgdXJsLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlJlc29sdmVVcmwKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgSW5wdXQgVVJMIHRvIHRyYW5zZm9ybQogICAgICogQHJldHVybiB7c3RyaW5nfSByZXNvbHZlZCBwYXRoCiAgICAgKi8KICAgIGZ1bmN0aW9uIHBhdGhGcm9tVXJsKHVybCkgewogICAgICByZXR1cm4gdXJsLnN1YnN0cmluZygwLCB1cmwubGFzdEluZGV4T2YoJy8nKSArIDEpOwogICAgfQoKICAgIC8qKgogICAgICogTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciByZXNvbHZpbmcgcmVsYXRpdmUgVVJMJ3MuCiAgICAgKgogICAgICogQG5hbWVzcGFjZQogICAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgICAqIEBzdW1tYXJ5IE1vZHVsZSB3aXRoIHV0aWxpdGllcyBmb3IgcmVzb2x2aW5nIHJlbGF0aXZlIFVSTCdzLgogICAgICovCiAgICBQb2x5bWVyLlJlc29sdmVVcmwgPSB7CiAgICAgIHJlc29sdmVDc3M6IHJlc29sdmVDc3MsCiAgICAgIHJlc29sdmVVcmw6IHJlc29sdmVVcmwsCiAgICAgIHBhdGhGcm9tVXJsOiBwYXRoRnJvbVVybAogICAgfTsKCiAgfSkoKTsKCgoKLyoqIEBzdXBwcmVzcyB7ZGVwcmVjYXRlZH0gKi8KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogU2V0cyB0aGUgZ2xvYmFsLCBsZWdhY3kgc2V0dGluZ3MuCiAgICoKICAgKiBAZGVwcmVjYXRlZAogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqLwogIFBvbHltZXIuU2V0dGluZ3MgPSBQb2x5bWVyLlNldHRpbmdzIHx8IHt9OwoKICBQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdyA9ICEod2luZG93LlNoYWR5RE9NKTsKICBQb2x5bWVyLlNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMgPQogICAgQm9vbGVhbighd2luZG93LlNoYWR5Q1NTIHx8IHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3MpOwogIFBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlQ3VzdG9tRWxlbWVudHMgPQogICAgISh3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayk7CgoKICAvKioKICAgKiBHbG9iYWxseSBzZXR0YWJsZSBwcm9wZXJ0eSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgdG8KICAgKiBgUG9seW1lci5FbGVtZW50TWl4aW5gIGluc3RhbmNlcywgdXNlZnVsIGZvciBiaW5kaW5nIGluIHRlbXBsYXRlcyB0bwogICAqIG1ha2UgVVJMJ3MgcmVsYXRpdmUgdG8gYW4gYXBwbGljYXRpb24ncyByb290LiAgRGVmYXVsdHMgdG8gdGhlIG1haW4KICAgKiBkb2N1bWVudCBVUkwsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2Vycy4gIEl0IG1heSBiZSB1c2VmdWwgdG8gc2V0CiAgICogYFBvbHltZXIucm9vdFBhdGhgIHRvIHByb3ZpZGUgYSBzdGFibGUgYXBwbGljYXRpb24gbW91bnQgcGF0aCB3aGVuCiAgICogdXNpbmcgY2xpZW50IHNpZGUgcm91dGluZy4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5yb290UGF0aCA9IFBvbHltZXIucm9vdFBhdGggfHwKICAgIFBvbHltZXIuUmVzb2x2ZVVybC5wYXRoRnJvbVVybChkb2N1bWVudC5iYXNlVVJJIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZ2xvYmFsIHJvb3RQYXRoIHByb3BlcnR5IHVzZWQgYnkgYFBvbHltZXIuRWxlbWVudE1peGluYCBhbmQKICAgKiBhdmFpbGFibGUgdmlhIGBQb2x5bWVyLnJvb3RQYXRoYC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIG5ldyByb290IHBhdGgKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqLwogIFBvbHltZXIuc2V0Um9vdFBhdGggPSBmdW5jdGlvbihwYXRoKSB7CiAgICBQb2x5bWVyLnJvb3RQYXRoID0gcGF0aDsKICB9OwoKICAvKioKICAgKiBBIGdsb2JhbCBjYWxsYmFjayB1c2VkIHRvIHNhbml0aXplIGFueSB2YWx1ZSBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIERPTS4gVGhlIGNhbGxiYWNrIHNpZ25hdHVyZSBpczoKICAgKgogICAqICAgICBQb2x5bWVyID0gewogICAqICAgICAgIHNhbml0aXplRE9NVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBuYW1lLCB0eXBlLCBub2RlKSB7IC4uLiB9CiAgICogICAgIH0KICAgKgogICAqIFdoZXJlOgogICAqCiAgICogYHZhbHVlYCBpcyB0aGUgdmFsdWUgdG8gc2FuaXRpemUuCiAgICogYG5hbWVgIGlzIHRoZSBuYW1lIG9mIGFuIGF0dHJpYnV0ZSBvciBwcm9wZXJ0eSAoZm9yIGV4YW1wbGUsIGhyZWYpLgogICAqIGB0eXBlYCBpbmRpY2F0ZXMgd2hlcmUgdGhlIHZhbHVlIGlzIGJlaW5nIGluc2VydGVkOiBvbmUgb2YgcHJvcGVydHksIGF0dHJpYnV0ZSwgb3IgdGV4dC4KICAgKiBgbm9kZWAgaXMgdGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIGJlaW5nIGluc2VydGVkLgogICAqCiAgICogQHR5cGUgeyhmdW5jdGlvbigqLHN0cmluZyxzdHJpbmcsTm9kZSk6Kil8dW5kZWZpbmVkfQogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlID0gUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlIHx8IG51bGw7CgogIC8qKgogICAqIFNldHMgdGhlIGdsb2JhbCBzYW5pdGl6ZURPTVZhbHVlIGF2YWlsYWJsZSB2aWEgYFBvbHltZXIuc2FuaXRpemVET01WYWx1ZWAuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7KGZ1bmN0aW9uKCosc3RyaW5nLHN0cmluZyxOb2RlKToqKXx1bmRlZmluZWR9IG5ld1Nhbml0aXplRE9NVmFsdWUgdGhlIGdsb2JhbCBzYW5pdGl6ZURPTVZhbHVlIGNhbGxiYWNrCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLnNldFNhbml0aXplRE9NVmFsdWUgPSBmdW5jdGlvbihuZXdTYW5pdGl6ZURPTVZhbHVlKSB7CiAgICBQb2x5bWVyLnNhbml0aXplRE9NVmFsdWUgPSBuZXdTYW5pdGl6ZURPTVZhbHVlOwogIH07CgogIC8qKgogICAqIEdsb2JhbGx5IHNldHRhYmxlIHByb3BlcnR5IHRvIG1ha2UgUG9seW1lciBHZXN0dXJlcyB1c2UgcGFzc2l2ZSBUb3VjaEV2ZW50IGxpc3RlbmVycyB3aGVuIHJlY29nbml6aW5nIGdlc3R1cmVzLgogICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgZ2VzdHVyZXMgbWFkZSBmcm9tIHRvdWNoIHdpbGwgbm90IGJlIGFibGUgdG8gcHJldmVudCBzY3JvbGxpbmcsIGFsbG93aW5nIGZvciBzbW9vdGhlcgogICAqIHNjcm9sbGluZyBwZXJmb3JtYW5jZS4KICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcyA9IFBvbHltZXIucGFzc2l2ZVRvdWNoR2VzdHVyZXMgfHwgZmFsc2U7CgogIC8qKgogICAqIFNldHMgYHBhc3NpdmVUb3VjaEdlc3R1cmVzYCBnbG9iYWxseSBmb3IgYWxsIGVsZW1lbnRzIHVzaW5nIFBvbHltZXIgR2VzdHVyZXMuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXNlUGFzc2l2ZSBlbmFibGUgb3IgZGlzYWJsZSBwYXNzaXZlIHRvdWNoIGdlc3R1cmVzIGdsb2JhbGx5CiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLnNldFBhc3NpdmVUb3VjaEdlc3R1cmVzID0gZnVuY3Rpb24odXNlUGFzc2l2ZSkgewogICAgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcyA9IHVzZVBhc3NpdmU7CiAgfTsKCiAgUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zID0gUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zIHx8CiAgICAgIHdpbmRvdy5Qb2x5bWVyU2V0dGluZ3MgJiYgd2luZG93LlBvbHltZXJTZXR0aW5ncy5sZWdhY3lPcHRpbWl6YXRpb25zIHx8IGZhbHNlOwoKICAvKioKICAgKiBTZXRzIGBsZWdhY3lPcHRpbWl6YXRpb25zYCBnbG9iYWxseSBmb3IgYWxsIGVsZW1lbnRzLiBFbmFibGVzCiAgICogb3B0aW1pemF0aW9ucyB3aGVuIG9ubHkgbGVnYWN5IFBvbHltZXIoKSBzdHlsZSBlbGVtZW50cyBhcmUgdXNlZC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHBhcmFtIHtib29sZWFufSB1c2VMZWdhY3lPcHRpbWl6YXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIGxlZ2FjeSBvcHRpbWl6YXRpb25zIGdsb2JhbGx5LgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgUG9seW1lci5zZXRMZWdhY3lPcHRpbWl6YXRpb25zID0gZnVuY3Rpb24odXNlTGVnYWN5T3B0aW1pemF0aW9ucykgewogICAgUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zID0gdXNlTGVnYWN5T3B0aW1pemF0aW9uczsKICB9Owp9KSgpOwoKCgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgLy8gdW5pcXVlIGdsb2JhbCBpZCBmb3IgZGVkdXBpbmcgbWl4aW5zLgogIGxldCBkZWR1cGVJZCA9IDA7CgogIC8qKgogICAqIEBjb25zdHJ1Y3RvcgogICAqIEBleHRlbmRzIHtGdW5jdGlvbn0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIE1peGluRnVuY3Rpb24oKXt9CiAgLyoqIEB0eXBlIHsoV2Vha01hcCB8IHVuZGVmaW5lZCl9ICovCiAgTWl4aW5GdW5jdGlvbi5wcm90b3R5cGUuX19taXhpbkFwcGxpY2F0aW9uczsKICAvKiogQHR5cGUgeyhPYmplY3QgfCB1bmRlZmluZWQpfSAqLwogIE1peGluRnVuY3Rpb24ucHJvdG90eXBlLl9fbWl4aW5TZXQ7CgogIC8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovCiAgLyoqCiAgICogV3JhcHMgYW4gRVM2IGNsYXNzIGV4cHJlc3Npb24gbWl4aW4gc3VjaCB0aGF0IHRoZSBtaXhpbiBpcyBvbmx5IGFwcGxpZWQKICAgKiBpZiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBhcHBsaWVkIGl0cyBiYXNlIGFyZ3VtZW50LiBBbHNvIG1lbW9pemVzIG1peGluCiAgICogYXBwbGljYXRpb25zLgogICAqCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAdGVtcGxhdGUgVAogICAqIEBwYXJhbSB7VH0gbWl4aW4gRVM2IGNsYXNzIGV4cHJlc3Npb24gbWl4aW4gdG8gd3JhcAogICAqIEByZXR1cm4ge1R9CiAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9CiAgICovCiAgUG9seW1lci5kZWR1cGluZ01peGluID0gZnVuY3Rpb24obWl4aW4pIHsKICAgIGxldCBtaXhpbkFwcGxpY2F0aW9ucyA9IC8qKiBAdHlwZSB7IU1peGluRnVuY3Rpb259ICovKG1peGluKS5fX21peGluQXBwbGljYXRpb25zOwogICAgaWYgKCFtaXhpbkFwcGxpY2F0aW9ucykgewogICAgICBtaXhpbkFwcGxpY2F0aW9ucyA9IG5ldyBXZWFrTWFwKCk7CiAgICAgIC8qKiBAdHlwZSB7IU1peGluRnVuY3Rpb259ICovKG1peGluKS5fX21peGluQXBwbGljYXRpb25zID0gbWl4aW5BcHBsaWNhdGlvbnM7CiAgICB9CiAgICAvLyBtYWludGFpbiBhIHVuaXF1ZSBpZCBmb3IgZWFjaCBtaXhpbgogICAgbGV0IG1peGluRGVkdXBlSWQgPSBkZWR1cGVJZCsrOwogICAgZnVuY3Rpb24gZGVkdXBpbmdNaXhpbihiYXNlKSB7CiAgICAgIGxldCBiYXNlU2V0ID0gLyoqIEB0eXBlIHshTWl4aW5GdW5jdGlvbn0gKi8oYmFzZSkuX19taXhpblNldDsKICAgICAgaWYgKGJhc2VTZXQgJiYgYmFzZVNldFttaXhpbkRlZHVwZUlkXSkgewogICAgICAgIHJldHVybiBiYXNlOwogICAgICB9CiAgICAgIGxldCBtYXAgPSBtaXhpbkFwcGxpY2F0aW9uczsKICAgICAgbGV0IGV4dGVuZGVkID0gbWFwLmdldChiYXNlKTsKICAgICAgaWYgKCFleHRlbmRlZCkgewogICAgICAgIGV4dGVuZGVkID0gLyoqIEB0eXBlIHshRnVuY3Rpb259ICovKG1peGluKShiYXNlKTsKICAgICAgICBtYXAuc2V0KGJhc2UsIGV4dGVuZGVkKTsKICAgICAgfQogICAgICAvLyBjb3B5IGluaGVyaXRlZCBtaXhpbiBzZXQgZnJvbSB0aGUgZXh0ZW5kZWQgY2xhc3MsIG9yIHRoZSBiYXNlIGNsYXNzCiAgICAgIC8vIE5PVEU6IHdlIGF2b2lkIHVzZSBvZiBTZXQgaGVyZSBiZWNhdXNlIHNvbWUgYnJvd3NlciAoSUUxMSkKICAgICAgLy8gY2Fubm90IGV4dGVuZCBhIGJhc2UgU2V0IHZpYSB0aGUgY29uc3RydWN0b3IuCiAgICAgIGxldCBtaXhpblNldCA9IE9iamVjdC5jcmVhdGUoLyoqIEB0eXBlIHshTWl4aW5GdW5jdGlvbn0gKi8oZXh0ZW5kZWQpLl9fbWl4aW5TZXQgfHwgYmFzZVNldCB8fCBudWxsKTsKICAgICAgbWl4aW5TZXRbbWl4aW5EZWR1cGVJZF0gPSB0cnVlOwogICAgICAvKiogQHR5cGUgeyFNaXhpbkZ1bmN0aW9ufSAqLyhleHRlbmRlZCkuX19taXhpblNldCA9IG1peGluU2V0OwogICAgICByZXR1cm4gZXh0ZW5kZWQ7CiAgICB9CgogICAgcmV0dXJuIC8qKiBAdHlwZSB7VH0gKi8gKGRlZHVwaW5nTWl4aW4pOwogIH07CiAgLyogZXNsaW50LWVuYWJsZSB2YWxpZC1qc2RvYyAqLwoKfSkoKTsKCgoKKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgY29uc3QgTU9EVUxFX1NUWUxFX0xJTktfU0VMRUNUT1IgPSAnbGlua1tyZWw9aW1wb3J0XVt0eXBlfj1jc3NdJzsKICBjb25zdCBJTkNMVURFX0FUVFIgPSAnaW5jbHVkZSc7CiAgY29uc3QgU0hBRFlfVU5TQ09QRURfQVRUUiA9ICdzaGFkeS11bnNjb3BlZCc7CgogIGZ1bmN0aW9uIGltcG9ydE1vZHVsZShtb2R1bGVJZCkgewogICAgY29uc3QgLyoqIFBvbHltZXIuRG9tTW9kdWxlICovIFBvbHltZXJEb21Nb2R1bGUgPSBjdXN0b21FbGVtZW50cy5nZXQoJ2RvbS1tb2R1bGUnKTsKICAgIGlmICghUG9seW1lckRvbU1vZHVsZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHJldHVybiBQb2x5bWVyRG9tTW9kdWxlLmltcG9ydChtb2R1bGVJZCk7CiAgfQoKICBmdW5jdGlvbiBzdHlsZUZvckltcG9ydChpbXBvcnREb2MpIHsKICAgIC8vIE5PVEU6IHBvbHlmaWxsIGFmZm9yZGFuY2UuCiAgICAvLyB1bmRlciB0aGUgSFRNTEltcG9ydHMgcG9seWZpbGwsIHRoZXJlIHdpbGwgYmUgbm8gJ2JvZHknLAogICAgLy8gYnV0IHRoZSBpbXBvcnQgcHNldWRvLWRvYyBjYW4gYmUgdXNlZCBkaXJlY3RseS4KICAgIGxldCBjb250YWluZXIgPSBpbXBvcnREb2MuYm9keSA/IGltcG9ydERvYy5ib2R5IDogaW1wb3J0RG9jOwogICAgY29uc3QgaW1wb3J0Q3NzID0gUG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVDc3MoY29udGFpbmVyLnRleHRDb250ZW50LAogICAgICBpbXBvcnREb2MuYmFzZVVSSSk7CiAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAgICBzdHlsZS50ZXh0Q29udGVudCA9IGltcG9ydENzczsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIC8qKiBAdHlwZWRlZiB7e2Fzc2V0cGF0aDogc3RyaW5nfX0gKi8KICBsZXQgdGVtcGxhdGVXaXRoQXNzZXRQYXRoOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCgogIC8qKgogICAqIE1vZHVsZSB3aXRoIHV0aWxpdGllcyBmb3IgY29sbGVjdGlvbiBDU1MgdGV4dCBmcm9tIGA8dGVtcGxhdGVzPmAsIGV4dGVybmFsCiAgICogc3R5bGVzaGVldHMsIGFuZCBgZG9tLW1vZHVsZWBzLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciBjb2xsZWN0aW9uIENTUyB0ZXh0IGZyb20gdmFyaW91cyBzb3VyY2VzLgogICAqLwogIGNvbnN0IFN0eWxlR2F0aGVyID0gewoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgPHN0eWxlPiBlbGVtZW50cyBpbiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGBkb20tbW9kdWxlYHMuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuU3R5bGVHYXRoZXIKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZHMgTGlzdCBvZiBkb20tbW9kdWxlIGlkJ3Mgd2l0aGluIHdoaWNoIHRvCiAgICAgKiBzZWFyY2ggZm9yIGNzcy4KICAgICAqIEByZXR1cm4geyFBcnJheTwhSFRNTFN0eWxlRWxlbWVudD59IEFycmF5IG9mIGNvbnRhaW5lZCA8c3R5bGU+IGVsZW1lbnRzCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgICBzdHlsZXNGcm9tTW9kdWxlcyhtb2R1bGVJZHMpIHsKICAgICAgY29uc3QgbW9kdWxlcyA9IG1vZHVsZUlkcy50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICBjb25zdCBzdHlsZXMgPSBbXTsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHN0eWxlcy5wdXNoKC4uLnRoaXMuc3R5bGVzRnJvbU1vZHVsZShtb2R1bGVzW2ldKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlczsKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiA8c3R5bGU+IGVsZW1lbnRzIGluIGEgZ2l2ZW4gYGRvbS1tb2R1bGVgLgogICAgICogU3R5bGVzIGluIGEgYGRvbS1tb2R1bGVgIGNhbiBjb21lIGVpdGhlciBmcm9tIGA8c3R5bGU+YHMgd2l0aGluIHRoZQogICAgICogZmlyc3QgYDx0ZW1wbGF0ZT5gLCBvciBlbHNlIGZyb20gb25lIG9yIG1vcmUKICAgICAqIGA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj5gIGxpbmtzIG91dHNpZGUgdGhlIHRlbXBsYXRlLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgZG9tLW1vZHVsZSBpZCB0byBnYXRoZXIgc3R5bGVzIGZyb20KICAgICAqIEByZXR1cm4geyFBcnJheTwhSFRNTFN0eWxlRWxlbWVudD59IEFycmF5IG9mIGNvbnRhaW5lZCBzdHlsZXMuCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgIHN0eWxlc0Zyb21Nb2R1bGUobW9kdWxlSWQpIHsKICAgICAgY29uc3QgbSA9IGltcG9ydE1vZHVsZShtb2R1bGVJZCk7CgogICAgICBpZiAoIW0pIHsKICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkJywgbW9kdWxlSWQpOwogICAgICAgIHJldHVybiBbXTsKICAgICAgfQoKICAgICAgaWYgKG0uX3N0eWxlcyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgY29uc3Qgc3R5bGVzID0gW107CiAgICAgICAgLy8gbW9kdWxlIGltcG9ydHM6IDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPgogICAgICAgIHN0eWxlcy5wdXNoKC4uLnRoaXMuX3N0eWxlc0Zyb21Nb2R1bGVJbXBvcnRzKG0pKTsKICAgICAgICAvLyBpbmNsdWRlIGNzcyBmcm9tIHRoZSBmaXJzdCB0ZW1wbGF0ZSBpbiB0aGUgbW9kdWxlCiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBtLnF1ZXJ5U2VsZWN0b3IoJ3RlbXBsYXRlJyk7CiAgICAgICAgaWYgKHRlbXBsYXRlKSB7CiAgICAgICAgICBzdHlsZXMucHVzaCguLi50aGlzLnN0eWxlc0Zyb21UZW1wbGF0ZSh0ZW1wbGF0ZSwKICAgICAgICAgICAgLyoqIEB0eXBlIHt0ZW1wbGF0ZVdpdGhBc3NldFBhdGh9ICovKG0pLmFzc2V0cGF0aCkpOwogICAgICAgIH0KCiAgICAgICAgbS5fc3R5bGVzID0gc3R5bGVzOwogICAgICB9CgogICAgICByZXR1cm4gbS5fc3R5bGVzOwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGA8c3R5bGU+YCBlbGVtZW50cyB3aXRoaW4gYSBnaXZlbiB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgdG8gZ2F0aGVyIHN0eWxlcyBmcm9tCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSSBiYXNlVVJJIGZvciBzdHlsZSBjb250ZW50CiAgICAgKiBAcmV0dXJuIHshQXJyYXk8IUhUTUxTdHlsZUVsZW1lbnQ+fSBBcnJheSBvZiBzdHlsZXMKICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgc3R5bGVzRnJvbVRlbXBsYXRlKHRlbXBsYXRlLCBiYXNlVVJJKSB7CiAgICAgIGlmICghdGVtcGxhdGUuX3N0eWxlcykgewogICAgICAgIGNvbnN0IHN0eWxlcyA9IFtdOwogICAgICAgIC8vIGlmIGVsZW1lbnQgaXMgYSB0ZW1wbGF0ZSwgZ2V0IGNvbnRlbnQgZnJvbSBpdHMgLmNvbnRlbnQKICAgICAgICBjb25zdCBlJCA9IHRlbXBsYXRlLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKTsKICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBlJC5sZW5ndGg7IGkrKykgewogICAgICAgICAgbGV0IGUgPSBlJFtpXTsKICAgICAgICAgIC8vIHN1cHBvcnQgc3R5bGUgc2hhcmluZyBieSBhbGxvd2luZyBzdHlsZXMgdG8gImluY2x1ZGUiCiAgICAgICAgICAvLyBvdGhlciBkb20tbW9kdWxlcyB0aGF0IGNvbnRhaW4gc3R5bGluZwogICAgICAgICAgbGV0IGluY2x1ZGUgPSBlLmdldEF0dHJpYnV0ZShJTkNMVURFX0FUVFIpOwogICAgICAgICAgaWYgKGluY2x1ZGUpIHsKICAgICAgICAgICAgc3R5bGVzLnB1c2goLi4udGhpcy5zdHlsZXNGcm9tTW9kdWxlcyhpbmNsdWRlKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSwgaW5kZXgsIHNlbGYpIHsKICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRleE9mKGl0ZW0pID09PSBpbmRleDsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJhc2VVUkkpIHsKICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9IFBvbHltZXIuUmVzb2x2ZVVybC5yZXNvbHZlQ3NzKGUudGV4dENvbnRlbnQsIGJhc2VVUkkpOwogICAgICAgICAgfQogICAgICAgICAgc3R5bGVzLnB1c2goZSk7CiAgICAgICAgfQogICAgICAgIHRlbXBsYXRlLl9zdHlsZXMgPSBzdHlsZXM7CiAgICAgIH0KICAgICAgcmV0dXJuIHRlbXBsYXRlLl9zdHlsZXM7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgPHN0eWxlPiBlbGVtZW50cyAgZnJvbSBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIGA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj5gIGxpbmtzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBkb20tbW9kdWxlYC4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkIElkIG9mIGBkb20tbW9kdWxlYCB0byBnYXRoZXIgQ1NTIGZyb20KICAgICAqIEByZXR1cm4geyFBcnJheTwhSFRNTFN0eWxlRWxlbWVudD59IEFycmF5IG9mIGNvbnRhaW5lZCBzdHlsZXMuCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgICBzdHlsZXNGcm9tTW9kdWxlSW1wb3J0cyhtb2R1bGVJZCkgewogICAgICBsZXQgbSA9IGltcG9ydE1vZHVsZShtb2R1bGVJZCk7CiAgICAgIHJldHVybiBtID8gdGhpcy5fc3R5bGVzRnJvbU1vZHVsZUltcG9ydHMobSkgOiBbXTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHRoaXMge1N0eWxlR2F0aGVyfQogICAgICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IG1vZHVsZSBkb20tbW9kdWxlIGVsZW1lbnQgdGhhdCBjb3VsZCBjb250YWluIGA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj5gIHN0eWxlcwogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU3R5bGVFbGVtZW50Pn0gQXJyYXkgb2YgY29udGFpbmVkIHN0eWxlcwogICAgICovCiAgICBfc3R5bGVzRnJvbU1vZHVsZUltcG9ydHMobW9kdWxlKSB7CiAgICAgIGNvbnN0IHN0eWxlcyA9IFtdOwogICAgICBjb25zdCBwJCA9IG1vZHVsZS5xdWVyeVNlbGVjdG9yQWxsKE1PRFVMRV9TVFlMRV9MSU5LX1NFTEVDVE9SKTsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgcCQubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgcCA9IHAkW2ldOwogICAgICAgIGlmIChwLmltcG9ydCkgewogICAgICAgICAgY29uc3QgaW1wb3J0RG9jID0gcC5pbXBvcnQ7CiAgICAgICAgICBjb25zdCB1bnNjb3BlZCA9IHAuaGFzQXR0cmlidXRlKFNIQURZX1VOU0NPUEVEX0FUVFIpOwogICAgICAgICAgaWYgKHVuc2NvcGVkICYmICFpbXBvcnREb2MuX3Vuc2NvcGVkU3R5bGUpIHsKICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBzdHlsZUZvckltcG9ydChpbXBvcnREb2MpOwogICAgICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoU0hBRFlfVU5TQ09QRURfQVRUUiwgJycpOwogICAgICAgICAgICBpbXBvcnREb2MuX3Vuc2NvcGVkU3R5bGUgPSBzdHlsZTsKICAgICAgICAgIH0gZWxzZSBpZiAoIWltcG9ydERvYy5fc3R5bGUpIHsKICAgICAgICAgICAgaW1wb3J0RG9jLl9zdHlsZSA9IHN0eWxlRm9ySW1wb3J0KGltcG9ydERvYyk7CiAgICAgICAgICB9CiAgICAgICAgICBzdHlsZXMucHVzaCh1bnNjb3BlZCA/IGltcG9ydERvYy5fdW5zY29wZWRTdHlsZSA6IGltcG9ydERvYy5fc3R5bGUpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gc3R5bGVzOwogICAgfSwKCiAgICAvKioKICAgICAqCiAgICAgKiBSZXR1cm5zIENTUyB0ZXh0IG9mIHN0eWxlcyBpbiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGBkb20tbW9kdWxlYHMuCiAgICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLCB1c2UgYHN0eWxlc0Zyb21Nb2R1bGVzYCBpbnN0ZWFkLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkcyBMaXN0IG9mIGRvbS1tb2R1bGUgaWQncyB3aXRoaW4gd2hpY2ggdG8KICAgICAqIHNlYXJjaCBmb3IgY3NzLgogICAgICogQHJldHVybiB7c3RyaW5nfSBDb25jYXRlbmF0ZWQgQ1NTIGNvbnRlbnQgZnJvbSBzcGVjaWZpZWQgYGRvbS1tb2R1bGVgcwogICAgICogQHRoaXMge1N0eWxlR2F0aGVyfQogICAgICovCiAgICAgY3NzRnJvbU1vZHVsZXMobW9kdWxlSWRzKSB7CiAgICAgIGxldCBtb2R1bGVzID0gbW9kdWxlSWRzLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgIGxldCBjc3NUZXh0ID0gJyc7CiAgICAgIGZvciAobGV0IGk9MDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjc3NUZXh0ICs9IHRoaXMuY3NzRnJvbU1vZHVsZShtb2R1bGVzW2ldKTsKICAgICAgfQogICAgICByZXR1cm4gY3NzVGV4dDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIENTUyB0ZXh0IG9mIHN0eWxlcyBpbiBhIGdpdmVuIGBkb20tbW9kdWxlYC4gIENTUyBpbiBhIGBkb20tbW9kdWxlYAogICAgICogY2FuIGNvbWUgZWl0aGVyIGZyb20gYDxzdHlsZT5gcyB3aXRoaW4gdGhlIGZpcnN0IGA8dGVtcGxhdGU+YCwgb3IgZWxzZQogICAgICogZnJvbSBvbmUgb3IgbW9yZSBgPGxpbmsgcmVsPSJpbXBvcnQiIHR5cGU9ImNzcyI+YCBsaW5rcyBvdXRzaWRlIHRoZQogICAgICogdGVtcGxhdGUuCiAgICAgKgogICAgICogQW55IGA8c3R5bGVzPmAgcHJvY2Vzc2VkIGFyZSByZW1vdmVkIGZyb20gdGhlaXIgb3JpZ2luYWwgbG9jYXRpb24uCiAgICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLCB1c2UgYHN0eWxlRnJvbU1vZHVsZWAgaW5zdGVhZC4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQG1lbWJlcm9mIFBvbHltZXIuU3R5bGVHYXRoZXIKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCBkb20tbW9kdWxlIGlkIHRvIGdhdGhlciBzdHlsZXMgZnJvbQogICAgICogQHJldHVybiB7c3RyaW5nfSBDb25jYXRlbmF0ZWQgQ1NTIGNvbnRlbnQgZnJvbSBzcGVjaWZpZWQgYGRvbS1tb2R1bGVgCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgIGNzc0Zyb21Nb2R1bGUobW9kdWxlSWQpIHsKICAgICAgbGV0IG0gPSBpbXBvcnRNb2R1bGUobW9kdWxlSWQpOwogICAgICBpZiAobSAmJiBtLl9jc3NUZXh0ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAvLyBtb2R1bGUgaW1wb3J0czogPGxpbmsgcmVsPSJpbXBvcnQiIHR5cGU9ImNzcyI+CiAgICAgICAgbGV0IGNzc1RleHQgPSB0aGlzLl9jc3NGcm9tTW9kdWxlSW1wb3J0cyhtKTsKICAgICAgICAvLyBpbmNsdWRlIGNzcyBmcm9tIHRoZSBmaXJzdCB0ZW1wbGF0ZSBpbiB0aGUgbW9kdWxlCiAgICAgICAgbGV0IHQgPSBtLnF1ZXJ5U2VsZWN0b3IoJ3RlbXBsYXRlJyk7CiAgICAgICAgaWYgKHQpIHsKICAgICAgICAgIGNzc1RleHQgKz0gdGhpcy5jc3NGcm9tVGVtcGxhdGUodCwKICAgICAgICAgICAgLyoqIEB0eXBlIHt0ZW1wbGF0ZVdpdGhBc3NldFBhdGh9ICovKG0pLmFzc2V0cGF0aCk7CiAgICAgICAgfQogICAgICAgIG0uX2Nzc1RleHQgPSBjc3NUZXh0IHx8IG51bGw7CiAgICAgIH0KICAgICAgaWYgKCFtKSB7CiAgICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCcsIG1vZHVsZUlkKTsKICAgICAgfQogICAgICByZXR1cm4gbSAmJiBtLl9jc3NUZXh0IHx8ICcnOwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgQ1NTIHRleHQgb2YgYDxzdHlsZXM+YCB3aXRoaW4gYSBnaXZlbiB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBBbnkgYDxzdHlsZXM+YCBwcm9jZXNzZWQgYXJlIHJlbW92ZWQgZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbi4KICAgICAqIE5vdGU6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHVzZSBgc3R5bGVGcm9tVGVtcGxhdGVgIGluc3RlYWQuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBnYXRoZXIgc3R5bGVzIGZyb20KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJJIEJhc2UgVVJJIHRvIHJlc29sdmUgdGhlIFVSTCBhZ2FpbnN0CiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIHNwZWNpZmllZCB0ZW1wbGF0ZQogICAgICogQHRoaXMge1N0eWxlR2F0aGVyfQogICAgICovCiAgICBjc3NGcm9tVGVtcGxhdGUodGVtcGxhdGUsIGJhc2VVUkkpIHsKICAgICAgbGV0IGNzc1RleHQgPSAnJzsKICAgICAgY29uc3QgZSQgPSB0aGlzLnN0eWxlc0Zyb21UZW1wbGF0ZSh0ZW1wbGF0ZSwgYmFzZVVSSSk7CiAgICAgIC8vIGlmIGVsZW1lbnQgaXMgYSB0ZW1wbGF0ZSwgZ2V0IGNvbnRlbnQgZnJvbSBpdHMgLmNvbnRlbnQKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgZSQubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgZSA9IGUkW2ldOwogICAgICAgIGlmIChlLnBhcmVudE5vZGUpIHsKICAgICAgICAgIGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTsKICAgICAgICB9CiAgICAgICAgY3NzVGV4dCArPSBlLnRleHRDb250ZW50OwogICAgICB9CiAgICAgIHJldHVybiBjc3NUZXh0OwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgQ1NTIHRleHQgZnJvbSBzdHlsZXNoZWV0cyBsb2FkZWQgdmlhIGA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj5gCiAgICAgKiBsaW5rcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBgZG9tLW1vZHVsZWAuCiAgICAgKgogICAgICogTm90ZTogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCwgdXNlIGBzdHlsZXNGcm9tTW9kdWxlSW1wb3J0c2AgaW5zdGVhZC4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgSWQgb2YgYGRvbS1tb2R1bGVgIHRvIGdhdGhlciBDU1MgZnJvbQogICAgICogQHJldHVybiB7c3RyaW5nfSBDb25jYXRlbmF0ZWQgQ1NTIGNvbnRlbnQgZnJvbSBsaW5rcyBpbiBzcGVjaWZpZWQgYGRvbS1tb2R1bGVgCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgIGNzc0Zyb21Nb2R1bGVJbXBvcnRzKG1vZHVsZUlkKSB7CiAgICAgIGxldCBtID0gaW1wb3J0TW9kdWxlKG1vZHVsZUlkKTsKICAgICAgcmV0dXJuIG0gPyB0aGlzLl9jc3NGcm9tTW9kdWxlSW1wb3J0cyhtKSA6ICcnOwogICAgfSwKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHRoaXMge1N0eWxlR2F0aGVyfQogICAgICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IG1vZHVsZSBkb20tbW9kdWxlIGVsZW1lbnQgdGhhdCBjb3VsZCBjb250YWluIGA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj5gIHN0eWxlcwogICAgICogQHJldHVybiB7c3RyaW5nfSBDb25jYXRlbmF0ZWQgQ1NTIGNvbnRlbnQgZnJvbSBsaW5rcyBpbiB0aGUgZG9tLW1vZHVsZQogICAgICovCiAgICAgX2Nzc0Zyb21Nb2R1bGVJbXBvcnRzKG1vZHVsZSkgewogICAgICBsZXQgY3NzVGV4dCA9ICcnOwogICAgICBsZXQgc3R5bGVzID0gdGhpcy5fc3R5bGVzRnJvbU1vZHVsZUltcG9ydHMobW9kdWxlKTsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY3NzVGV4dCArPSBzdHlsZXNbaV0udGV4dENvbnRlbnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNzc1RleHQ7CiAgICB9CiAgfTsKCiAgUG9seW1lci5TdHlsZUdhdGhlciA9IFN0eWxlR2F0aGVyOwp9KSgpOwoKCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGxldCBtb2R1bGVzID0ge307CiAgbGV0IGxjTW9kdWxlcyA9IHt9OwogIGZ1bmN0aW9uIHNldE1vZHVsZShpZCwgbW9kdWxlKSB7CiAgICAvLyBzdG9yZSBpZCBzZXBhcmF0ZSBmcm9tIGxvd2VyY2FzZWQgaWQgc28gdGhhdAogICAgLy8gaW4gYWxsIGNhc2VzIG1peGVkQ2FzZSBpZCB3aWxsIHN0b3JlZCBkaXN0aW5jdGx5CiAgICAvLyBhbmQgbG93ZXJjYXNlIHZlcnNpb24gaXMgYSBmYWxsYmFjawogICAgbW9kdWxlc1tpZF0gPSBsY01vZHVsZXNbaWQudG9Mb3dlckNhc2UoKV0gPSBtb2R1bGU7CiAgfQogIGZ1bmN0aW9uIGZpbmRNb2R1bGUoaWQpIHsKICAgIHJldHVybiBtb2R1bGVzW2lkXSB8fCBsY01vZHVsZXNbaWQudG9Mb3dlckNhc2UoKV07CiAgfQoKICBmdW5jdGlvbiBzdHlsZU91dHNpZGVUZW1wbGF0ZUNoZWNrKGluc3QpIHsKICAgIGlmIChpbnN0LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlJykpIHsKICAgICAgY29uc29sZS53YXJuKCdkb20tbW9kdWxlICVzIGhhcyBzdHlsZSBvdXRzaWRlIHRlbXBsYXRlJywgaW5zdC5pZCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBUaGUgYGRvbS1tb2R1bGVgIGVsZW1lbnQgcmVnaXN0ZXJzIHRoZSBkb20gaXQgY29udGFpbnMgdG8gdGhlIG5hbWUgZ2l2ZW4KICAgKiBieSB0aGUgbW9kdWxlJ3MgaWQgYXR0cmlidXRlLiBJdCBwcm92aWRlcyBhIHVuaWZpZWQgZGF0YWJhc2Ugb2YgZG9tCiAgICogYWNjZXNzaWJsZSB2aWEgaXRzIHN0YXRpYyBgaW1wb3J0YCBBUEkuCiAgICoKICAgKiBBIGtleSB1c2UgY2FzZSBvZiBgZG9tLW1vZHVsZWAgaXMgZm9yIHByb3ZpZGluZyBjdXN0b20gZWxlbWVudCBgPHRlbXBsYXRlPmBzCiAgICogdmlhIEhUTUwgaW1wb3J0cyB0aGF0IGFyZSBwYXJzZWQgYnkgdGhlIG5hdGl2ZSBIVE1MIHBhcnNlciwgdGhhdCBjYW4gYmUKICAgKiByZWxvY2F0ZWQgZHVyaW5nIGEgYnVuZGxpbmcgcGFzcyBhbmQgc3RpbGwgbG9va2VkIHVwIGJ5IGBpZGAuCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogICAgIDxkb20tbW9kdWxlIGlkPSJmb28iPgogICAqICAgICAgIDxpbWcgc3JjPSJzdHVmZi5wbmciPgogICAqICAgICA8L2RvbS1tb2R1bGU+CiAgICoKICAgKiBUaGVuIGluIGNvZGUgaW4gc29tZSBvdGhlciBsb2NhdGlvbiB0aGF0IGNhbm5vdCBhY2Nlc3MgdGhlIGRvbS1tb2R1bGUgYWJvdmUKICAgKgogICAqICAgICBsZXQgaW1nID0gY3VzdG9tRWxlbWVudHMuZ2V0KCdkb20tbW9kdWxlJykuaW1wb3J0KCdmb28nLCAnaW1nJyk7CiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBleHRlbmRzIEhUTUxFbGVtZW50CiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgcmVnaXN0cnkgb2YgcmVsb2NhdGFibGUgRE9NIGNvbnRlbnQKICAgKiAgIGJ5IGBpZGAgdGhhdCBpcyBhZ25vc3RpYyB0byBidW5kbGluZy4KICAgKiBAdW5yZXN0cmljdGVkCiAgICovCiAgY2xhc3MgRG9tTW9kdWxlIGV4dGVuZHMgSFRNTEVsZW1lbnQgewoKICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gWydpZCddOyB9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVsZW1lbnQgc3BlY2lmaWVkIGJ5IHRoZSBjc3MgYHNlbGVjdG9yYCBpbiB0aGUgbW9kdWxlCiAgICAgKiByZWdpc3RlcmVkIGJ5IGBpZGAuIEZvciBleGFtcGxlLCB0aGlzLmltcG9ydCgnZm9vJywgJ2ltZycpOwogICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBpZCBvZiB0aGUgZG9tLW1vZHVsZSBpbiB3aGljaCB0byBzZWFyY2guCiAgICAgKiBAcGFyYW0ge3N0cmluZz19IHNlbGVjdG9yIFRoZSBjc3Mgc2VsZWN0b3IgYnkgd2hpY2ggdG8gZmluZCB0aGUgZWxlbWVudC4KICAgICAqIEByZXR1cm4ge0VsZW1lbnR9IFJldHVybnMgdGhlIGVsZW1lbnQgd2hpY2ggbWF0Y2hlcyBgc2VsZWN0b3JgIGluIHRoZQogICAgICogbW9kdWxlIHJlZ2lzdGVyZWQgYXQgdGhlIHNwZWNpZmllZCBgaWRgLgogICAgICovCiAgICBzdGF0aWMgaW1wb3J0KGlkLCBzZWxlY3RvcikgewogICAgICBpZiAoaWQpIHsKICAgICAgICBsZXQgbSA9IGZpbmRNb2R1bGUoaWQpOwogICAgICAgIGlmIChtICYmIHNlbGVjdG9yKSB7CiAgICAgICAgICByZXR1cm4gbS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG07CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBhdHRyaWJ1dGUuCiAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG9sZCBPbGQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBDdXJyZW50IHZhbHVlIG9mIGF0dHJpYnV0ZS4KICAgICAqIEBwYXJhbSB7P3N0cmluZ30gbmFtZXNwYWNlIEF0dHJpYnV0ZSBuYW1lc3BhY2UuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSwgbmFtZXNwYWNlKSB7CiAgICAgIGlmIChvbGQgIT09IHZhbHVlKSB7CiAgICAgICAgdGhpcy5yZWdpc3RlcigpOwogICAgICB9CiAgICB9CiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1hcmdzICovCgogICAgLyoqCiAgICAgKiBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvZiB0aGlzIGBkb20tbW9kdWxlYC4KICAgICAqCiAgICAgKiBUaGlzIHZhbHVlIHdpbGwgZGlmZmVyIGZyb20gdGhpcyBlbGVtZW50J3MgYG93bmVyRG9jdW1lbnRgIGluIHRoZQogICAgICogZm9sbG93aW5nIHdheXM6CiAgICAgKiAtIFRha2VzIGludG8gYWNjb3VudCBhbnkgYGFzc2V0cGF0aGAgYXR0cmlidXRlIGFkZGVkIGR1cmluZyBidW5kbGluZwogICAgICogICB0byBpbmRpY2F0ZSB0aGUgb3JpZ2luYWwgbG9jYXRpb24gcmVsYXRpdmUgdG8gdGhlIGJ1bmRsZWQgbG9jYXRpb24KICAgICAqIC0gVXNlcyB0aGUgSFRNTEltcG9ydHMgcG9seWZpbGwncyBgaW1wb3J0Rm9yRWxlbWVudGAgQVBJIHRvIGVuc3VyZQogICAgICogICB0aGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgaW1wb3J0IGRvY3VtZW50J3MgbG9jYXRpb24gc2luY2UKICAgICAqICAgYG93bmVyRG9jdW1lbnRgIGlzIG5vdCBjdXJyZW50bHkgcG9seWZpbGxlZAogICAgICovCiAgICBnZXQgYXNzZXRwYXRoKCkgewogICAgICAvLyBEb24ndCBvdmVycmlkZSBleGlzdGluZyBhc3NldHBhdGguCiAgICAgIGlmICghdGhpcy5fX2Fzc2V0cGF0aCkgewogICAgICAgIC8vIG5vdGU6IGFzc2V0cGF0aCBzZXQgdmlhIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoaXMKICAgICAgICAvLyBlbGVtZW50J3MgbG9jYXRpb247IGFjY29tb2RhdGUgcG9seWZpbGxlZCBIVE1MSW1wb3J0cwogICAgICAgIGNvbnN0IG93bmVyID0gd2luZG93LkhUTUxJbXBvcnRzICYmIEhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQgPwogICAgICAgICAgSFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKSB8fCBkb2N1bWVudCA6IHRoaXMub3duZXJEb2N1bWVudDsKICAgICAgICBjb25zdCB1cmwgPSBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybCgKICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdhc3NldHBhdGgnKSB8fCAnJywgb3duZXIuYmFzZVVSSSk7CiAgICAgICAgdGhpcy5fX2Fzc2V0cGF0aCA9IFBvbHltZXIuUmVzb2x2ZVVybC5wYXRoRnJvbVVybCh1cmwpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9fYXNzZXRwYXRoOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBkb20tbW9kdWxlIGF0IGEgZ2l2ZW4gaWQuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZAogICAgICogd2hlbiBhIGRvbS1tb2R1bGUgaXMgaW1wZXJhdGl2ZWx5IGNyZWF0ZWQuIEZvcgogICAgICogZXhhbXBsZSwgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RvbS1tb2R1bGUnKS5yZWdpc3RlcignZm9vJylgLgogICAgICogQHBhcmFtIHtzdHJpbmc9fSBpZCBUaGUgaWQgYXQgd2hpY2ggdG8gcmVnaXN0ZXIgdGhlIGRvbS1tb2R1bGUuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICByZWdpc3RlcihpZCkgewogICAgICBpZCA9IGlkIHx8IHRoaXMuaWQ7CiAgICAgIGlmIChpZCkgewogICAgICAgIC8vIFVuZGVyIHN0cmljdFRlbXBsYXRlUG9saWN5LCByZWplY3QgYW5kIG51bGwgb3V0IGFueSByZS1yZWdpc3RlcmVkCiAgICAgICAgLy8gZG9tLW1vZHVsZSBzaW5jZSBpdCBpcyBhbWJpZ3VvdXMgd2hldGhlciBmaXJzdC1pbiBvciBsYXN0LWluIGlzIHRydXN0ZWQgCiAgICAgICAgaWYgKFBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3kgJiYgZmluZE1vZHVsZShpZCkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgc2V0TW9kdWxlKGlkLCBudWxsKTsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1tb2R1bGUgJHtpZH0gcmUtcmVnaXN0ZXJlZGApOwogICAgICAgIH0KICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgc2V0TW9kdWxlKGlkLCB0aGlzKTsKICAgICAgICBzdHlsZU91dHNpZGVUZW1wbGF0ZUNoZWNrKHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBEb21Nb2R1bGUucHJvdG90eXBlWydtb2R1bGVzJ10gPSBtb2R1bGVzOwoKICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ2RvbS1tb2R1bGUnLCBEb21Nb2R1bGUpOwoKICAvKiogQGNvbnN0ICovCiAgUG9seW1lci5Eb21Nb2R1bGUgPSBEb21Nb2R1bGU7Cgp9KSgpOwoKCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIE1vZHVsZSB3aXRoIHV0aWxpdGllcyBmb3IgbWFuaXB1bGF0aW5nIHN0cnVjdHVyZWQgZGF0YSBwYXRoIHN0cmluZ3MuCiAgICoKICAgKiBAbmFtZXNwYWNlCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBNb2R1bGUgd2l0aCB1dGlsaXRpZXMgZm9yIG1hbmlwdWxhdGluZyBzdHJ1Y3R1cmVkIGRhdGEgcGF0aCBzdHJpbmdzLgogICAqLwogIGNvbnN0IFBhdGggPSB7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHN0cnVjdHVyZWQgZGF0YSBwYXRoIChoYXMgZG90cykuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiBgYGAKICAgICAqIFBvbHltZXIuUGF0aC5pc1BhdGgoJ2Zvby5iYXIuYmF6JykgLy8gdHJ1ZQogICAgICogUG9seW1lci5QYXRoLmlzUGF0aCgnZm9vJykgICAgICAgICAvLyBmYWxzZQogICAgICogYGBgCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCBzdHJpbmcKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHN0cmluZyBjb250YWluZWQgb25lIG9yIG1vcmUgZG90cwogICAgICovCiAgICBpc1BhdGg6IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgcmV0dXJuIHBhdGguaW5kZXhPZignLicpID49IDA7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcm9vdCBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgZ2l2ZW4gcGF0aC4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICoKICAgICAqIGBgYAogICAgICogUG9seW1lci5QYXRoLnJvb3QoJ2Zvby5iYXIuYmF6JykgLy8gJ2ZvbycKICAgICAqIFBvbHltZXIuUGF0aC5yb290KCdmb28nKSAgICAgICAgIC8vICdmb28nCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5QYXRoCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHN0cmluZwogICAgICogQHJldHVybiB7c3RyaW5nfSBSb290IHByb3BlcnR5IG5hbWUKICAgICAqLwogICAgcm9vdDogZnVuY3Rpb24ocGF0aCkgewogICAgICBsZXQgZG90SW5kZXggPSBwYXRoLmluZGV4T2YoJy4nKTsKICAgICAgaWYgKGRvdEluZGV4ID09PSAtMSkgewogICAgICAgIHJldHVybiBwYXRoOwogICAgICB9CiAgICAgIHJldHVybiBwYXRoLnNsaWNlKDAsIGRvdEluZGV4KTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBHaXZlbiBgYmFzZWAgaXMgYGZvby5iYXJgLCBgZm9vYCBpcyBhbiBhbmNlc3RvciwgYGZvby5iYXJgIGlzIG5vdAogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwYXRoIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBiYXNlIHBhdGguCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiBgYGAKICAgICAqIFBvbHltZXIuUGF0aC5pc0FuY2VzdG9yKCdmb28uYmFyJywgJ2ZvbycpICAgICAgICAgLy8gdHJ1ZQogICAgICogUG9seW1lci5QYXRoLmlzQW5jZXN0b3IoJ2Zvby5iYXInLCAnZm9vLmJhcicpICAgICAvLyBmYWxzZQogICAgICogUG9seW1lci5QYXRoLmlzQW5jZXN0b3IoJ2Zvby5iYXInLCAnZm9vLmJhci5iYXonKSAvLyBmYWxzZQogICAgICogYGBgCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2UgUGF0aCBzdHJpbmcgdG8gdGVzdCBhZ2FpbnN0LgogICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCBzdHJpbmcgdG8gdGVzdC4KICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYHBhdGhgIGlzIGFuIGFuY2VzdG9yIG9mIGBiYXNlYC4KICAgICAqLwogICAgaXNBbmNlc3RvcjogZnVuY3Rpb24oYmFzZSwgcGF0aCkgewogICAgICAvLyAgICAgYmFzZS5zdGFydHNXaXRoKHBhdGggKyAnLicpOwogICAgICByZXR1cm4gYmFzZS5pbmRleE9mKHBhdGggKyAnLicpID09PSAwOwogICAgfSwKCiAgICAvKioKICAgICAqIEdpdmVuIGBiYXNlYCBpcyBgZm9vLmJhcmAsIGBmb28uYmFyLmJhemAgaXMgYW4gZGVzY2VuZGFudAogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGguaXNEZXNjZW5kYW50KCdmb28uYmFyJywgJ2Zvby5iYXIuYmF6JykgLy8gdHJ1ZQogICAgICogUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudCgnZm9vLmJhcicsICdmb28uYmFyJykgICAgIC8vIGZhbHNlCiAgICAgKiBQb2x5bWVyLlBhdGguaXNEZXNjZW5kYW50KCdmb28uYmFyJywgJ2ZvbycpICAgICAgICAgLy8gZmFsc2UKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIFBhdGggc3RyaW5nIHRvIHRlc3QgYWdhaW5zdC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3RyaW5nIHRvIHRlc3QuCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBwYXRoYCBpcyBhIGRlc2NlbmRhbnQgb2YgYGJhc2VgLgogICAgICovCiAgICBpc0Rlc2NlbmRhbnQ6IGZ1bmN0aW9uKGJhc2UsIHBhdGgpIHsKICAgICAgLy8gICAgIHBhdGguc3RhcnRzV2l0aChiYXNlICsgJy4nKTsKICAgICAgcmV0dXJuIHBhdGguaW5kZXhPZihiYXNlICsgJy4nKSA9PT0gMDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZXBsYWNlcyBhIHByZXZpb3VzIGJhc2UgcGF0aCB3aXRoIGEgbmV3IGJhc2UgcGF0aCwgcHJlc2VydmluZyB0aGUKICAgICAqIHJlbWFpbmRlciBvZiB0aGUgcGF0aC4KICAgICAqCiAgICAgKiBVc2VyIG11c3QgZW5zdXJlIGBwYXRoYCBoYXMgYSBwcmVmaXggb2YgYGJhc2VgLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGgudHJhbnNsYXRlKCdmb28uYmFyJywgJ3pvdCcsICdmb28uYmFyLmJheicpIC8vICd6b3QuYmF6JwogICAgICogYGBgCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2UgQ3VycmVudCBiYXNlIHN0cmluZyB0byByZW1vdmUKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdCYXNlIE5ldyBiYXNlIHN0cmluZyB0byByZXBsYWNlIHdpdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gdHJhbnNsYXRlCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRyYW5zbGF0ZWQgc3RyaW5nCiAgICAgKi8KICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24oYmFzZSwgbmV3QmFzZSwgcGF0aCkgewogICAgICByZXR1cm4gbmV3QmFzZSArIHBhdGguc2xpY2UoYmFzZS5sZW5ndGgpOwogICAgfSwKCiAgICAvKioKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIFBhdGggc3RyaW5nIHRvIHRlc3QgYWdhaW5zdAogICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCBzdHJpbmcgdG8gdGVzdAogICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgcGF0aGAgaXMgZXF1YWwgdG8gYGJhc2VgCiAgICAgKiBAdGhpcyB7UGF0aH0KICAgICAqLwogICAgbWF0Y2hlczogZnVuY3Rpb24oYmFzZSwgcGF0aCkgewogICAgICByZXR1cm4gKGJhc2UgPT09IHBhdGgpIHx8CiAgICAgICAgICAgICB0aGlzLmlzQW5jZXN0b3IoYmFzZSwgcGF0aCkgfHwKICAgICAgICAgICAgIHRoaXMuaXNEZXNjZW5kYW50KGJhc2UsIHBhdGgpOwogICAgfSwKCiAgICAvKioKICAgICAqIENvbnZlcnRzIGFycmF5LWJhc2VkIHBhdGhzIHRvIGZsYXR0ZW5lZCBwYXRoLiAgU3RyaW5nLWJhc2VkIHBhdGhzCiAgICAgKiBhcmUgcmV0dXJuZWQgYXMtaXMuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiBgYGAKICAgICAqIFBvbHltZXIuUGF0aC5ub3JtYWxpemUoWydmb28uYmFyJywgMCwgJ2JheiddKSAgLy8gJ2Zvby5iYXIuMC5iYXonCiAgICAgKiBQb2x5bWVyLlBhdGgubm9ybWFsaXplKCdmb28uYmFyLjAuYmF6JykgICAgICAgIC8vICdmb28uYmFyLjAuYmF6JwogICAgICogYGBgCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggSW5wdXQgcGF0aAogICAgICogQHJldHVybiB7c3RyaW5nfSBGbGF0dGVuZWQgcGF0aAogICAgICovCiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHsKICAgICAgICBsZXQgcGFydHMgPSBbXTsKICAgICAgICBmb3IgKGxldCBpPTA7IGk8cGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgICAgbGV0IGFyZ3MgPSBwYXRoW2ldLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTsKICAgICAgICAgIGZvciAobGV0IGo9MDsgajxhcmdzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHBhcnRzLnB1c2goYXJnc1tqXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcuJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHBhdGg7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBTcGxpdHMgYSBwYXRoIGludG8gYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuIEFjY2VwdHMgZWl0aGVyIGFycmF5cwogICAgICogb2YgcGF0aCBwYXJ0cyBvciBzdHJpbmdzLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGguc3BsaXQoWydmb28uYmFyJywgMCwgJ2JheiddKSAgLy8gWydmb28nLCAnYmFyJywgJzAnLCAnYmF6J10KICAgICAqIFBvbHltZXIuUGF0aC5zcGxpdCgnZm9vLmJhci4wLmJheicpICAgICAgICAvLyBbJ2ZvbycsICdiYXInLCAnMCcsICdiYXonXQogICAgICogYGBgCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggSW5wdXQgcGF0aAogICAgICogQHJldHVybiB7IUFycmF5PHN0cmluZz59IEFycmF5IG9mIHBhdGggcGFydHMKICAgICAqIEB0aGlzIHtQYXRofQogICAgICogQHN1cHByZXNzIHtjaGVja1R5cGVzfQogICAgICovCiAgICBzcGxpdDogZnVuY3Rpb24ocGF0aCkgewogICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkgewogICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZShwYXRoKS5zcGxpdCgnLicpOwogICAgICB9CiAgICAgIHJldHVybiBwYXRoLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZWFkcyBhIHZhbHVlIGZyb20gYSBwYXRoLiAgSWYgYW55IHN1Yi1wcm9wZXJ0eSBpbiB0aGUgcGF0aCBpcyBgdW5kZWZpbmVkYCwKICAgICAqIHRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAgKHdpbGwgbmV2ZXIgdGhyb3cuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAgICogQHBhcmFtIHtPYmplY3R9IHJvb3QgT2JqZWN0IGZyb20gd2hpY2ggdG8gZGVyZWZlcmVuY2UgcGF0aCBmcm9tCiAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gcGF0aCBQYXRoIHRvIHJlYWQKICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaW5mbyBJZiBhbiBvYmplY3QgaXMgcHJvdmlkZWQgdG8gYGluZm9gLCB0aGUgbm9ybWFsaXplZAogICAgICogIChmbGF0dGVuZWQpIHBhdGggd2lsbCBiZSBzZXQgdG8gYGluZm8ucGF0aGAuCiAgICAgKiBAcmV0dXJuIHsqfSBWYWx1ZSBhdCBwYXRoLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgcGF0aCBjb3VsZCBub3QgYmUKICAgICAqICBmdWxseSBkZXJlZmVyZW5jZWQuCiAgICAgKiBAdGhpcyB7UGF0aH0KICAgICAqLwogICAgZ2V0OiBmdW5jdGlvbihyb290LCBwYXRoLCBpbmZvKSB7CiAgICAgIGxldCBwcm9wID0gcm9vdDsKICAgICAgbGV0IHBhcnRzID0gdGhpcy5zcGxpdChwYXRoKTsKICAgICAgLy8gTG9vcCBvdmVyIHBhdGggcGFydHNbMC4ubi0xXSBhbmQgZGVyZWZlcmVuY2UKICAgICAgZm9yIChsZXQgaT0wOyBpPHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKCFwcm9wKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBwYXJ0ID0gcGFydHNbaV07CiAgICAgICAgcHJvcCA9IHByb3BbcGFydF07CiAgICAgIH0KICAgICAgaWYgKGluZm8pIHsKICAgICAgICBpbmZvLnBhdGggPSBwYXJ0cy5qb2luKCcuJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHByb3A7CiAgICB9LAoKICAgIC8qKgogICAgICogU2V0cyBhIHZhbHVlIHRvIGEgcGF0aC4gIElmIGFueSBzdWItcHJvcGVydHkgaW4gdGhlIHBhdGggaXMgYHVuZGVmaW5lZGAsCiAgICAgKiB0aGlzIG1ldGhvZCB3aWxsIG5vLW9wLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290IE9iamVjdCBmcm9tIHdoaWNoIHRvIGRlcmVmZXJlbmNlIHBhdGggZnJvbQogICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byBzZXQKICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0IHRvIHBhdGgKICAgICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgaW5wdXQgcGF0aAogICAgICogQHRoaXMge1BhdGh9CiAgICAgKi8KICAgIHNldDogZnVuY3Rpb24ocm9vdCwgcGF0aCwgdmFsdWUpIHsKICAgICAgbGV0IHByb3AgPSByb290OwogICAgICBsZXQgcGFydHMgPSB0aGlzLnNwbGl0KHBhdGgpOwogICAgICBsZXQgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aC0xXTsKICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAvLyBMb29wIG92ZXIgcGF0aCBwYXJ0c1swLi5uLTJdIGFuZCBkZXJlZmVyZW5jZQogICAgICAgIGZvciAobGV0IGk9MDsgaTxwYXJ0cy5sZW5ndGgtMTsgaSsrKSB7CiAgICAgICAgICBsZXQgcGFydCA9IHBhcnRzW2ldOwogICAgICAgICAgcHJvcCA9IHByb3BbcGFydF07CiAgICAgICAgICBpZiAoIXByb3ApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBTZXQgdmFsdWUgdG8gb2JqZWN0IGF0IGVuZCBvZiBwYXRoCiAgICAgICAgcHJvcFtsYXN0XSA9IHZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFNpbXBsZSBwcm9wZXJ0eSBzZXQKICAgICAgICBwcm9wW3BhdGhdID0gdmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJy4nKTsKICAgIH0KCiAgfTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBzdHJ1Y3R1cmVkIGRhdGEgcGF0aCAoaGFzIGRvdHMpLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiAgVXNlIGBQb2x5bWVyLlBhdGguaXNQYXRoYCBpbnN0ZWFkLgogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqIGBgYAogICAqIFBvbHltZXIuUGF0aC5pc0RlZXAoJ2Zvby5iYXIuYmF6JykgLy8gdHJ1ZQogICAqIFBvbHltZXIuUGF0aC5pc0RlZXAoJ2ZvbycpICAgICAgICAgLy8gZmFsc2UKICAgKiBgYGAKICAgKgogICAqIEBkZXByZWNhdGVkCiAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3RyaW5nCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3RyaW5nIGNvbnRhaW5lZCBvbmUgb3IgbW9yZSBkb3RzCiAgICovCiAgUGF0aC5pc0RlZXAgPSBQYXRoLmlzUGF0aDsKCiAgUG9seW1lci5QYXRoID0gUGF0aDsKCn0pKCk7CgoKKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgY29uc3QgY2FzZU1hcCA9IHt9OwogIGNvbnN0IERBU0hfVE9fQ0FNRUwgPSAvLVthLXpdL2c7CiAgY29uc3QgQ0FNRUxfVE9fREFTSCA9IC8oW0EtWl0pL2c7CgogIC8qKgogICAqIE1vZHVsZSB3aXRoIHV0aWxpdGllcyBmb3IgY29udmVydGluZyBiZXR3ZWVuICJkYXNoLWNhc2UiIGFuZCAiY2FtZWxDYXNlIgogICAqIGlkZW50aWZpZXJzLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgTW9kdWxlIHRoYXQgcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gImRhc2gtY2FzZSIKICAgKiAgIGFuZCAiY2FtZWxDYXNlIi4KICAgKi8KICBjb25zdCBDYXNlTWFwID0gewoKICAgIC8qKgogICAgICogQ29udmVydHMgImRhc2gtY2FzZSIgaWRlbnRpZmllciAoZS5nLiBgZm9vLWJhci1iYXpgKSB0byAiY2FtZWxDYXNlIgogICAgICogKGUuZy4gYGZvb0JhckJhemApLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkNhc2VNYXAKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXNoIERhc2gtY2FzZSBpZGVudGlmaWVyCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENhbWVsLWNhc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlkZW50aWZpZXIKICAgICAqLwogICAgZGFzaFRvQ2FtZWxDYXNlKGRhc2gpIHsKICAgICAgcmV0dXJuIGNhc2VNYXBbZGFzaF0gfHwgKAogICAgICAgIGNhc2VNYXBbZGFzaF0gPSBkYXNoLmluZGV4T2YoJy0nKSA8IDAgPyBkYXNoIDogZGFzaC5yZXBsYWNlKERBU0hfVE9fQ0FNRUwsCiAgICAgICAgICAobSkgPT4gbVsxXS50b1VwcGVyQ2FzZSgpCiAgICAgICAgKQogICAgICApOwogICAgfSwKCiAgICAvKioKICAgICAqIENvbnZlcnRzICJjYW1lbENhc2UiIGlkZW50aWZpZXIgKGUuZy4gYGZvb0JhckJhemApIHRvICJkYXNoLWNhc2UiCiAgICAgKiAoZS5nLiBgZm9vLWJhci1iYXpgKS4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5DYXNlTWFwCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2FtZWwgQ2FtZWwtY2FzZSBpZGVudGlmaWVyCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IERhc2gtY2FzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaWRlbnRpZmllcgogICAgICovCiAgICBjYW1lbFRvRGFzaENhc2UoY2FtZWwpIHsKICAgICAgcmV0dXJuIGNhc2VNYXBbY2FtZWxdIHx8ICgKICAgICAgICBjYXNlTWFwW2NhbWVsXSA9IGNhbWVsLnJlcGxhY2UoQ0FNRUxfVE9fREFTSCwgJy0kMScpLnRvTG93ZXJDYXNlKCkKICAgICAgKTsKICAgIH0KCiAgfTsKCiAgUG9seW1lci5DYXNlTWFwID0gQ2FzZU1hcDsKfSkoKTsKCgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgLy8gTWljcm90YXNrIGltcGxlbWVudGVkIHVzaW5nIE11dGF0aW9uIE9ic2VydmVyCiAgbGV0IG1pY3JvdGFza0N1cnJIYW5kbGUgPSAwOwogIGxldCBtaWNyb3Rhc2tMYXN0SGFuZGxlID0gMDsKICBsZXQgbWljcm90YXNrQ2FsbGJhY2tzID0gW107CiAgbGV0IG1pY3JvdGFza05vZGVDb250ZW50ID0gMDsKICBsZXQgbWljcm90YXNrTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKICBuZXcgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIobWljcm90YXNrRmx1c2gpLm9ic2VydmUobWljcm90YXNrTm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsKCiAgZnVuY3Rpb24gbWljcm90YXNrRmx1c2goKSB7CiAgICBjb25zdCBsZW4gPSBtaWNyb3Rhc2tDYWxsYmFja3MubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBsZXQgY2IgPSBtaWNyb3Rhc2tDYWxsYmFja3NbaV07CiAgICAgIGlmIChjYikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjYigpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aHJvdyBlOyB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIG1pY3JvdGFza0NhbGxiYWNrcy5zcGxpY2UoMCwgbGVuKTsKICAgIG1pY3JvdGFza0xhc3RIYW5kbGUgKz0gbGVuOwogIH0KCiAgLyoqCiAgICogTW9kdWxlIHRoYXQgcHJvdmlkZXMgYSBudW1iZXIgb2Ygc3RyYXRlZ2llcyBmb3IgZW5xdWV1aW5nIGFzeW5jaHJvbm91cwogICAqIHRhc2tzLiAgRWFjaCBzdWItbW9kdWxlIHByb3ZpZGVzIGEgc3RhbmRhcmQgYHJ1bihmbilgIGludGVyZmFjZSB0aGF0IHJldHVybnMgYQogICAqIGhhbmRsZSwgYW5kIGEgYGNhbmNlbChoYW5kbGUpYCBpbnRlcmZhY2UgZm9yIGNhbmNlbGluZyBhc3luYyB0YXNrcyBiZWZvcmUKICAgKiB0aGV5IHJ1bi4KICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1vZHVsZSB0aGF0IHByb3ZpZGVzIGEgbnVtYmVyIG9mIHN0cmF0ZWdpZXMgZm9yIGVucXVldWluZyBhc3luY2hyb25vdXMKICAgKiB0YXNrcy4KICAgKi8KICBQb2x5bWVyLkFzeW5jID0gewoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGBzZXRUaW1lb3V0YC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGBzZXRUaW1lb3V0YC4KICAgICAqLwogICAgdGltZU91dDogewogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIHN1Yi1tb2R1bGUgd2l0aCB0aGUgYXN5bmMgaW50ZXJmYWNlIHByb3ZpZGluZyB0aGUgcHJvdmlkZWQKICAgICAgICogZGVsYXkuCiAgICAgICAqCiAgICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkFzeW5jLnRpbWVPdXQKICAgICAgICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSBUaW1lIHRvIHdhaXQgYmVmb3JlIGNhbGxpbmcgY2FsbGJhY2tzIGluIG1zCiAgICAgICAqIEByZXR1cm4geyFBc3luY0ludGVyZmFjZX0gQW4gYXN5bmMgdGltZW91dCBpbnRlcmZhY2UKICAgICAgICovCiAgICAgIGFmdGVyKGRlbGF5KSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHJ1bihmbikgeyByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZm4sIGRlbGF5KTsgfSwKICAgICAgICAgIGNhbmNlbChoYW5kbGUpIHsKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYW5kbGUpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBFbnF1ZXVlcyBhIGZ1bmN0aW9uIGNhbGxlZCBpbiB0aGUgbmV4dCB0YXNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy50aW1lT3V0CiAgICAgICAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBmbiBDYWxsYmFjayB0byBydW4KICAgICAgICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSBEZWxheSBpbiBtaWxsaXNlY29uZHMKICAgICAgICogQHJldHVybiB7bnVtYmVyfSBIYW5kbGUgdXNlZCBmb3IgY2FuY2VsaW5nIHRhc2sKICAgICAgICovCiAgICAgIHJ1bihmbiwgZGVsYXkpIHsKICAgICAgICByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZm4sIGRlbGF5KTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENhbmNlbHMgYSBwcmV2aW91c2x5IGVucXVldWVkIGB0aW1lT3V0YCBjYWxsYmFjay4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMudGltZU91dAogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSByZXR1cm5lZCBmcm9tIGBydW5gIG9mIGNhbGxiYWNrIHRvIGNhbmNlbAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2FuY2VsKGhhbmRsZSkgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoaGFuZGxlKTsKICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIEFzeW5jIGludGVyZmFjZSB3cmFwcGVyIGFyb3VuZCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLgogICAgICovCiAgICBhbmltYXRpb25GcmFtZTogewogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgdGltaW5nLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5hbmltYXRpb25GcmFtZQogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlcik6dm9pZH0gZm4gQ2FsbGJhY2sgdG8gcnVuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gSGFuZGxlIHVzZWQgZm9yIGNhbmNlbGluZyB0YXNrCiAgICAgICAqLwogICAgICBydW4oZm4pIHsKICAgICAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmbik7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBDYW5jZWxzIGEgcHJldmlvdXNseSBlbnF1ZXVlZCBgYW5pbWF0aW9uRnJhbWVgIGNhbGxiYWNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5hbmltYXRpb25GcmFtZQogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSByZXR1cm5lZCBmcm9tIGBydW5gIG9mIGNhbGxiYWNrIHRvIGNhbmNlbAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2FuY2VsKGhhbmRsZSkgewogICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShoYW5kbGUpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4gIEZhbGxzIGJhY2sgdG8KICAgICAqIGBzZXRUaW1lb3V0YCBvbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4KICAgICAqLwogICAgaWRsZVBlcmlvZDogewogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgYHJlcXVlc3RJZGxlQ2FsbGJhY2tgIHRpbWluZy4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMuaWRsZVBlcmlvZAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFJZGxlRGVhZGxpbmUpOnZvaWR9IGZuIENhbGxiYWNrIHRvIHJ1bgogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEhhbmRsZSB1c2VkIGZvciBjYW5jZWxpbmcgdGFzawogICAgICAgKi8KICAgICAgcnVuKGZuKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrID8KICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrKGZuKSA6CiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmbiwgMTYpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogQ2FuY2VscyBhIHByZXZpb3VzbHkgZW5xdWV1ZWQgYGlkbGVQZXJpb2RgIGNhbGxiYWNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5pZGxlUGVyaW9kCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoYW5kbGUgSGFuZGxlIHJldHVybmVkIGZyb20gYHJ1bmAgb2YgY2FsbGJhY2sgdG8gY2FuY2VsCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBjYW5jZWwoaGFuZGxlKSB7CiAgICAgICAgd2luZG93LmNhbmNlbElkbGVDYWxsYmFjayA/CiAgICAgICAgICB3aW5kb3cuY2FuY2VsSWRsZUNhbGxiYWNrKGhhbmRsZSkgOgogICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYW5kbGUpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIGZvciBlbnF1ZXVpbmcgY2FsbGJhY2tzIHRoYXQgcnVuIGF0IG1pY3JvdGFzayB0aW1pbmcuCiAgICAgKgogICAgICogTm90ZSB0aGF0IG1pY3JvdGFzayB0aW1pbmcgaXMgYWNoaWV2ZWQgdmlhIGEgc2luZ2xlIGBNdXRhdGlvbk9ic2VydmVyYCwKICAgICAqIGFuZCB0aHVzIGNhbGxiYWNrcyBlbnF1ZXVlZCB3aXRoIHRoaXMgQVBJIHdpbGwgYWxsIHJ1biBpbiBhIHNpbmdsZQogICAgICogYmF0Y2gsIGFuZCBub3QgaW50ZXJsZWF2ZWQgd2l0aCBvdGhlciBtaWNyb3Rhc2tzIHN1Y2ggYXMgcHJvbWlzZXMuCiAgICAgKiBQcm9taXNlcyBhcmUgYXZvaWRlZCBhcyBhbiBpbXBsZW1lbnRhdGlvbiBjaG9pY2UgZm9yIHRoZSB0aW1lIGJlaW5nCiAgICAgKiBkdWUgdG8gU2FmYXJpIGJ1Z3MgdGhhdCBjYXVzZSBQcm9taXNlcyB0byBsYWNrIG1pY3JvdGFzayBndWFyYW50ZWVzLgogICAgICoKICAgICAqIEBuYW1lc3BhY2UKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkFzeW5jCiAgICAgKiBAc3VtbWFyeSBBc3luYyBpbnRlcmZhY2UgZm9yIGVucXVldWluZyBjYWxsYmFja3MgdGhhdCBydW4gYXQgbWljcm90YXNrCiAgICAgKiAgIHRpbWluZy4KICAgICAqLwogICAgbWljcm9UYXNrOiB7CgogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgbWljcm90YXNrIHRpbWluZy4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAqIEBwYXJhbSB7IUZ1bmN0aW9uPX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gcnVuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gSGFuZGxlIHVzZWQgZm9yIGNhbmNlbGluZyB0YXNrCiAgICAgICAqLwogICAgICBydW4oY2FsbGJhY2spIHsKICAgICAgICBtaWNyb3Rhc2tOb2RlLnRleHRDb250ZW50ID0gbWljcm90YXNrTm9kZUNvbnRlbnQrKzsKICAgICAgICBtaWNyb3Rhc2tDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CiAgICAgICAgcmV0dXJuIG1pY3JvdGFza0N1cnJIYW5kbGUrKzsKICAgICAgfSwKCiAgICAgIC8qKgogICAgICAgKiBDYW5jZWxzIGEgcHJldmlvdXNseSBlbnF1ZXVlZCBgbWljcm9UYXNrYCBjYWxsYmFjay4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoYW5kbGUgSGFuZGxlIHJldHVybmVkIGZyb20gYHJ1bmAgb2YgY2FsbGJhY2sgdG8gY2FuY2VsCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBjYW5jZWwoaGFuZGxlKSB7CiAgICAgICAgY29uc3QgaWR4ID0gaGFuZGxlIC0gbWljcm90YXNrTGFzdEhhbmRsZTsKICAgICAgICBpZiAoaWR4ID49IDApIHsKICAgICAgICAgIGlmICghbWljcm90YXNrQ2FsbGJhY2tzW2lkeF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGFzeW5jIGhhbmRsZTogJyArIGhhbmRsZSk7CiAgICAgICAgICB9CiAgICAgICAgICBtaWNyb3Rhc2tDYWxsYmFja3NbaWR4XSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CgogICAgfQogIH07Cgp9KSgpOwoKCiAgKGZ1bmN0aW9uICgpIHsKCiAgICAndXNlIHN0cmljdCc7CgogICAgLyoqIEBjb25zdCB7IUFzeW5jSW50ZXJmYWNlfSAqLwogICAgY29uc3QgbWljcm90YXNrID0gUG9seW1lci5Bc3luYy5taWNyb1Rhc2s7CgogICAgLyoqCiAgICAgKiBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgYmFzaWMgbWV0YS1wcm9ncmFtbWluZyBmb3IgY3JlYXRpbmcgb25lCiAgICAgKiBvciBtb3JlIHByb3BlcnR5IGFjY2Vzc29ycyAoZ2V0dGVyL3NldHRlciBwYWlyKSB0aGF0IGVucXVldWUgYW4gYXN5bmMKICAgICAqIChiYXRjaGVkKSBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjay4KICAgICAqCiAgICAgKiBGb3IgYmFzaWMgdXNhZ2Ugb2YgdGhpcyBtaXhpbiwgY2FsbCBgTXlDbGFzcy5jcmVhdGVQcm9wZXJ0aWVzKHByb3BzKWAKICAgICAqIG9uY2UgYXQgY2xhc3MgZGVmaW5pdGlvbiB0aW1lIHRvIGNyZWF0ZSBwcm9wZXJ0eSBhY2Nlc3NvcnMgZm9yIHByb3BlcnRpZXMKICAgICAqIG5hbWVkIGluIHByb3BzLCBpbXBsZW1lbnQgYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgdG8gcmVhY3QgYXMgZGVzaXJlZCB0bwogICAgICogcHJvcGVydHkgY2hhbmdlcywgYW5kIGltcGxlbWVudCBgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKWAgYW5kCiAgICAgKiBpbmNsdWRlIGxvd2VyY2FzZSB2ZXJzaW9ucyBvZiBhbnkgcHJvcGVydHkgbmFtZXMgdGhhdCBzaG91bGQgYmUgc2V0IGZyb20KICAgICAqIGF0dHJpYnV0ZXMuIExhc3QsIGNhbGwgYHRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKWAgaW4gdGhlIGVsZW1lbnQncwogICAgICogYGNvbm5lY3RlZENhbGxiYWNrYCB0byBlbmFibGUgdGhlIGFjY2Vzc29ycy4KICAgICAqCiAgICAgKiBAbWl4aW5GdW5jdGlvbgogICAgICogQHBvbHltZXIKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICAgKiBAc3VtbWFyeSBFbGVtZW50IGNsYXNzIG1peGluIGZvciByZWFjdGluZyB0byBwcm9wZXJ0eSBjaGFuZ2VzIGZyb20KICAgICAqICAgZ2VuZXJhdGVkIHByb3BlcnR5IGFjY2Vzc29ycy4KICAgICAqLwogICAgUG9seW1lci5Qcm9wZXJ0aWVzQ2hhbmdlZCA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAgIC8qKgogICAgICAgKiBAcG9seW1lcgogICAgICAgKiBAbWl4aW5DbGFzcwogICAgICAgKiBAZXh0ZW5kcyB7c3VwZXJDbGFzc30KICAgICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydGllc0NoYW5nZWR9CiAgICAgICAqIEB1bnJlc3RyaWN0ZWQKICAgICAgICovCiAgICAgIGNsYXNzIFByb3BlcnRpZXNDaGFuZ2VkIGV4dGVuZHMgc3VwZXJDbGFzcyB7CgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgcHJvcGVydHkgYWNjZXNzb3JzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgbmFtZXMuCiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBwcm9wcyBPYmplY3Qgd2hvc2Uga2V5cyBhcmUgbmFtZXMgb2YgYWNjZXNzb3JzLgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICAgICAgICBjb25zdCBwcm90byA9IHRoaXMucHJvdG90eXBlOwogICAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBwcm9wcykgewogICAgICAgICAgICAvLyBkb24ndCBzdG9tcCBhbiBleGlzdGluZyBhY2Nlc3NvcgogICAgICAgICAgICBpZiAoIShwcm9wIGluIHByb3RvKSkgewogICAgICAgICAgICAgIHByb3RvLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHByb3ApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGF0dHJpYnV0ZSBuYW1lIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgICAqIFRoZSBhdHRyaWJ1dGUgbmFtZSBpcyB0aGUgbG93ZXJjYXNlZCBwcm9wZXJ0eSBuYW1lLiBPdmVycmlkZSB0bwogICAgICAgICAqIGN1c3RvbWl6ZSB0aGlzIG1hcHBpbmcuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IHRvIGNvbnZlcnQKICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IEF0dHJpYnV0ZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgICAqCiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBhdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocHJvcGVydHkpIHsKICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogT3ZlcnJpZGUgcG9pbnQgdG8gcHJvdmlkZSBhIHR5cGUgdG8gd2hpY2ggdG8gZGVzZXJpYWxpemUgYSB2YWx1ZSB0bwogICAgICAgICAqIGEgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBwcm9wZXJ0eQogICAgICAgICAqCiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIHN0YXRpYyB0eXBlRm9yUHJvcGVydHkobmFtZSkgeyB9IC8vZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgc2V0dGVyL2dldHRlciBwYWlyIGZvciB0aGUgbmFtZWQgcHJvcGVydHkgd2l0aCBpdHMgb3duCiAgICAgICAgICogbG9jYWwgc3RvcmFnZS4gIFRoZSBnZXR0ZXIgcmV0dXJucyB0aGUgdmFsdWUgaW4gdGhlIGxvY2FsIHN0b3JhZ2UsCiAgICAgICAgICogYW5kIHRoZSBzZXR0ZXIgY2FsbHMgYF9zZXRQcm9wZXJ0eWAsIHdoaWNoIHVwZGF0ZXMgdGhlIGxvY2FsIHN0b3JhZ2UKICAgICAgICAgKiBmb3IgdGhlIHByb3BlcnR5IGFuZCBlbnF1ZXVlcyBhIGBfcHJvcGVydGllc0NoYW5nZWRgIGNhbGxiYWNrLgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBvbiBhIHByb3RvdHlwZSBvciBhbiBpbnN0YW5jZS4gIENhbGxpbmcKICAgICAgICAgKiB0aGlzIG1ldGhvZCBtYXkgb3ZlcndyaXRlIGEgcHJvcGVydHkgdmFsdWUgdGhhdCBhbHJlYWR5IGV4aXN0cyBvbgogICAgICAgICAqIHRoZSBwcm90b3R5cGUvaW5zdGFuY2UgYnkgY3JlYXRpbmcgdGhlIGFjY2Vzc29yLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gcmVhZE9ubHkgV2hlbiB0cnVlLCBubyBzZXR0ZXIgaXMgY3JlYXRlZDsgdGhlCiAgICAgICAgICogICBwcm90ZWN0ZWQgYF9zZXRQcm9wZXJ0eWAgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHRvIHNldCB0aGUgcHJvcGVydHkKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcihwcm9wZXJ0eSwgcmVhZE9ubHkpIHsKICAgICAgICAgIHRoaXMuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocHJvcGVydHkpOwogICAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KCdfX2RhdGFIYXNBY2Nlc3NvcicpKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhSGFzQWNjZXNzb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9fZGF0YUhhc0FjY2Vzc29yKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcltwcm9wZXJ0eV0pIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcltwcm9wZXJ0eV0gPSB0cnVlOwogICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKHByb3BlcnR5LCByZWFkT25seSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBBZGRzIHRoZSBnaXZlbiBgcHJvcGVydHlgIHRvIGEgbWFwIG1hdGNoaW5nIGF0dHJpYnV0ZSBuYW1lcwogICAgICAgICAqIHRvIHByb3BlcnR5IG5hbWVzLCB1c2luZyBgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5YC4gVGhpcyBtYXAgaXMKICAgICAgICAgKiB1c2VkIHdoZW4gZGVzZXJpYWxpemluZyBhdHRyaWJ1dGUgdmFsdWVzIHRvIHByb3BlcnRpZXMuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHkKICAgICAgICAgKi8KICAgICAgICBfYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChwcm9wZXJ0eSkgewogICAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KCdfX2RhdGFBdHRyaWJ1dGVzJykpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFBdHRyaWJ1dGVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fX2RhdGFBdHRyaWJ1dGVzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3Byb3BlcnR5XSkgewogICAgICAgICAgICBjb25zdCBhdHRyID0gdGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgICAgICAgICB0aGlzLl9fZGF0YUF0dHJpYnV0ZXNbYXR0cl0gPSBwcm9wZXJ0eTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIERlZmluZXMgYSBwcm9wZXJ0eSBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHRoZSBwcm9wZXJ0eQogICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlYWRPbmx5IFdoZW4gdHJ1ZSwgbm8gc2V0dGVyIGlzIGNyZWF0ZWQKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgICBfZGVmaW5lUHJvcGVydHlBY2Nlc3Nvcihwcm9wZXJ0eSwgcmVhZE9ubHkpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwgewogICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwogICAgICAgICAgICAvKiogQHRoaXMge1Byb3BlcnRpZXNDaGFuZ2VkfSAqLwogICAgICAgICAgICBnZXQoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3BlcnR5KHByb3BlcnR5KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgLyoqIEB0aGlzIHtQcm9wZXJ0aWVzQ2hhbmdlZH0gKi8KICAgICAgICAgICAgc2V0OiByZWFkT25seSA/IGZ1bmN0aW9uICgpIHt9IDogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovCiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIHRoaXMuX19kYXRhRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5fX2RhdGFSZWFkeSA9IGZhbHNlOwogICAgICAgICAgdGhpcy5fX2RhdGFJbnZhbGlkID0gZmFsc2U7CiAgICAgICAgICB0aGlzLl9fZGF0YSA9IHt9OwogICAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nID0gbnVsbDsKICAgICAgICAgIHRoaXMuX19kYXRhT2xkID0gbnVsbDsKICAgICAgICAgIHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyA9IG51bGw7CiAgICAgICAgICB0aGlzLl9fc2VyaWFsaXppbmcgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBMaWZlY3ljbGUgY2FsbGJhY2sgY2FsbGVkIHdoZW4gcHJvcGVydGllcyBhcmUgZW5hYmxlZCB2aWEKICAgICAgICAgKiBgX2VuYWJsZVByb3BlcnRpZXNgLgogICAgICAgICAqCiAgICAgICAgICogVXNlcnMgbWF5IG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gaW1wbGVtZW50IGJlaGF2aW9yIHRoYXQgaXMKICAgICAgICAgKiBkZXBlbmRlbnQgb24gdGhlIGVsZW1lbnQgaGF2aW5nIGl0cyBwcm9wZXJ0eSBkYXRhIGluaXRpYWxpemVkLCBlLmcuCiAgICAgICAgICogZnJvbSBkZWZhdWx0cyAoaW5pdGlhbGl6ZWQgZnJvbSBgY29uc3RydWN0b3JgLCBgX2luaXRpYWxpemVQcm9wZXJ0aWVzYCksCiAgICAgICAgICogYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AsIG9yIHZhbHVlcyBwcm9wYWdhdGVkIGZyb20gaG9zdCBlLmcuIHZpYQogICAgICAgICAqIGJpbmRpbmdzLiAgYHN1cGVyLnJlYWR5KClgIG11c3QgYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGUgZGF0YSBzeXN0ZW0KICAgICAgICAgKiBiZWNvbWVzIGVuYWJsZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwdWJsaWMKICAgICAgICAgKi8KICAgICAgICByZWFkeSgpIHsKICAgICAgICAgIHRoaXMuX19kYXRhUmVhZHkgPSB0cnVlOwogICAgICAgICAgdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbml0aWFsaXplcyB0aGUgbG9jYWwgc3RvcmFnZSBmb3IgcHJvcGVydHkgYWNjZXNzb3JzLgogICAgICAgICAqCiAgICAgICAgICogUHJvdmlkZWQgYXMgYW4gb3ZlcnJpZGUgcG9pbnQgZm9yIHBlcmZvcm1pbmcgYW55IHNldHVwIHdvcmsgcHJpb3IKICAgICAgICAgKiB0byBpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5IGFjY2Vzc29yIHN5c3RlbS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9pbml0aWFsaXplUHJvcGVydGllcygpIHsKICAgICAgICAgIC8vIENhcHR1cmUgaW5zdGFuY2UgcHJvcGVydGllczsgdGhlc2Ugd2lsbCBiZSBzZXQgaW50byBhY2Nlc3NvcnMKICAgICAgICAgIC8vIGR1cmluZyBmaXJzdCBmbHVzaC4gRG9uJ3Qgc2V0IHRoZW0gaGVyZSwgc2luY2Ugd2Ugd2FudAogICAgICAgICAgLy8gdGhlc2UgdG8gb3ZlcndyaXRlIGRlZmF1bHRzL2NvbnN0cnVjdG9yIGFzc2lnbm1lbnRzCiAgICAgICAgICBmb3IgKGxldCBwIGluIHRoaXMuX19kYXRhSGFzQWNjZXNzb3IpIHsKICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkocCkpIHsKICAgICAgICAgICAgICB0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMgPSB0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMgfHwge307CiAgICAgICAgICAgICAgdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW3BdID0gdGhpc1twXTsKICAgICAgICAgICAgICBkZWxldGUgdGhpc1twXTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIGF0IHJlYWR5IHRpbWUgd2l0aCBiYWcgb2YgaW5zdGFuY2UgcHJvcGVydGllcyB0aGF0IG92ZXJ3cm90ZQogICAgICAgICAqIGFjY2Vzc29ycyB3aGVuIHRoZSBlbGVtZW50IHVwZ3JhZGVkLgogICAgICAgICAqCiAgICAgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2V0cyB0aGVzZSBwcm9wZXJ0aWVzIGJhY2sgaW50byB0aGUKICAgICAgICAgKiBzZXR0ZXIgYXQgcmVhZHkgdGltZS4gIFRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGFuIG92ZXJyaWRlCiAgICAgICAgICogcG9pbnQgZm9yIGN1c3RvbWl6aW5nIG9yIHByb3ZpZGluZyBtb3JlIGVmZmljaWVudCBpbml0aWFsaXphdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgcHJvcGVydHkgdmFsdWVzIHRoYXQgd2VyZSBvdmVyd3JpdHRlbgogICAgICAgICAqICAgd2hlbiBjcmVhdGluZyBwcm9wZXJ0eSBhY2Nlc3NvcnMuCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXMocHJvcHMpIHsKICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcHJvcHMpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlcyB0aGUgbG9jYWwgc3RvcmFnZSBmb3IgYSBwcm9wZXJ0eSAodmlhIGBfc2V0UGVuZGluZ1Byb3BlcnR5YCkKICAgICAgICAgKiBhbmQgZW5xdWV1ZXMgYSBgX3Byb2VwcnRpZXNDaGFuZ2VkYCBjYWxsYmFjay4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHRoZSBwcm9wZXJ0eQogICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0CiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX3NldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSkgewogICAgICAgICAgaWYgKHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpKSB7CiAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHByb3BlcnR5CiAgICAgICAgICogQHJldHVybiB7Kn0gVmFsdWUgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfZ2V0UHJvcGVydHkocHJvcGVydHkpIHsKICAgICAgICAgIHJldHVybiB0aGlzLl9fZGF0YVtwcm9wZXJ0eV07CiAgICAgICAgfQoKICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLwogICAgICAgIC8qKgogICAgICAgICAqIFVwZGF0ZXMgdGhlIGxvY2FsIHN0b3JhZ2UgZm9yIGEgcHJvcGVydHksIHJlY29yZHMgdGhlIHByZXZpb3VzIHZhbHVlLAogICAgICAgICAqIGFuZCBhZGRzIGl0IHRvIHRoZSBzZXQgb2YgInBlbmRpbmcgY2hhbmdlcyIgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUKICAgICAgICAgKiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjay4gIFRoaXMgbWV0aG9kIGRvZXMgbm90IGVucXVldWUgdGhlCiAgICAgICAgICogYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2suCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHkKICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldAogICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGV4dCBOb3QgdXNlZCBoZXJlOyBhZmZvcmRhbmNlIGZvciBjbG9zdXJlCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBwcm9wZXJ0eSBjaGFuZ2VkCiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9zZXRQZW5kaW5nUHJvcGVydHkocHJvcGVydHksIHZhbHVlLCBleHQpIHsKICAgICAgICAgIGxldCBvbGQgPSB0aGlzLl9fZGF0YVtwcm9wZXJ0eV07CiAgICAgICAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3Nob3VsZFByb3BlcnR5Q2hhbmdlKHByb3BlcnR5LCB2YWx1ZSwgb2xkKTsKICAgICAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5fX2RhdGFQZW5kaW5nKSB7CiAgICAgICAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nID0ge307CiAgICAgICAgICAgICAgdGhpcy5fX2RhdGFPbGQgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBFbnN1cmUgb2xkIGlzIGNhcHR1cmVkIGZyb20gdGhlIGxhc3QgdHVybgogICAgICAgICAgICBpZiAodGhpcy5fX2RhdGFPbGQgJiYgIShwcm9wZXJ0eSBpbiB0aGlzLl9fZGF0YU9sZCkpIHsKICAgICAgICAgICAgICB0aGlzLl9fZGF0YU9sZFtwcm9wZXJ0eV0gPSBvbGQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5fX2RhdGFbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZ1twcm9wZXJ0eV0gPSB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgICAgIH0KICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovCgogICAgICAgIC8qKgogICAgICAgICAqIE1hcmtzIHRoZSBwcm9wZXJ0aWVzIGFzIGludmFsaWQsIGFuZCBlbnF1ZXVlcyBhbiBhc3luYwogICAgICAgICAqIGBfcHJvcGVydGllc0NoYW5nZWRgIGNhbGxiYWNrLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCkgewogICAgICAgICAgaWYgKCF0aGlzLl9fZGF0YUludmFsaWQgJiYgdGhpcy5fX2RhdGFSZWFkeSkgewogICAgICAgICAgICB0aGlzLl9fZGF0YUludmFsaWQgPSB0cnVlOwogICAgICAgICAgICBtaWNyb3Rhc2sucnVuKCgpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5fX2RhdGFJbnZhbGlkKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9fZGF0YUludmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRoaXMuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsIHRvIGVuYWJsZSBwcm9wZXJ0eSBhY2Nlc3NvciBwcm9jZXNzaW5nLiBCZWZvcmUgdGhpcyBtZXRob2QgaXMKICAgICAgICAgKiBjYWxsZWQgYWNjZXNzb3IgdmFsdWVzIHdpbGwgYmUgc2V0IGJ1dCBzaWRlIGVmZmVjdHMgYXJlCiAgICAgICAgICogcXVldWVkLiBXaGVuIGNhbGxlZCwgYW55IHBlbmRpbmcgc2lkZSBlZmZlY3RzIG9jY3VyIGltbWVkaWF0ZWx5LgogICAgICAgICAqIEZvciBlbGVtZW50cywgZ2VuZXJhbGx5IGBjb25uZWN0ZWRDYWxsYmFja2AgaXMgYSBub3JtYWwgc3BvdCB0byBkbyBzby4KICAgICAgICAgKiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBtZXRob2QgbXVsdGlwbGUgdGltZXMgYXMgaXQgb25seSB0dXJucyBvbgogICAgICAgICAqIHByb3BlcnR5IGFjY2Vzc29ycyBvbmNlLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX2VuYWJsZVByb3BlcnRpZXMoKSB7CiAgICAgICAgICBpZiAoIXRoaXMuX19kYXRhRW5hYmxlZCkgewogICAgICAgICAgICB0aGlzLl9fZGF0YUVuYWJsZWQgPSB0cnVlOwogICAgICAgICAgICBpZiAodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSB7CiAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyh0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMpOwogICAgICAgICAgICAgIHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZWFkeSgpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbHMgdGhlIGBfcHJvcGVydGllc0NoYW5nZWRgIGNhbGxiYWNrIHdpdGggdGhlIGN1cnJlbnQgc2V0IG9mCiAgICAgICAgICogcGVuZGluZyBjaGFuZ2VzIChhbmQgb2xkIHZhbHVlcyByZWNvcmRlZCB3aGVuIHBlbmRpbmcgY2hhbmdlcyB3ZXJlCiAgICAgICAgICogc2V0KSwgYW5kIHJlc2V0cyB0aGUgcGVuZGluZyBzZXQgb2YgY2hhbmdlcy4gR2VuZXJhbGx5LCB0aGlzIG1ldGhvZAogICAgICAgICAqIHNob3VsZCBub3QgYmUgY2FsbGVkIGluIHVzZXIgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9mbHVzaFByb3BlcnRpZXMoKSB7CiAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuX19kYXRhOwogICAgICAgICAgY29uc3QgY2hhbmdlZFByb3BzID0gdGhpcy5fX2RhdGFQZW5kaW5nOwogICAgICAgICAgY29uc3Qgb2xkID0gdGhpcy5fX2RhdGFPbGQ7CiAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkUHJvcGVydGllc0NoYW5nZShwcm9wcywgY2hhbmdlZFByb3BzLCBvbGQpKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZyA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkID0gbnVsbDsKICAgICAgICAgICAgdGhpcy5fcHJvcGVydGllc0NoYW5nZWQocHJvcHMsIGNoYW5nZWRQcm9wcywgb2xkKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBpbiBgX2ZsdXNoUHJvcGVydGllc2AgdG8gZGV0ZXJtaW5lIGlmIGBfcHJvcGVydGllc0NoYW5nZWRgCiAgICAgICAgICogc2hvdWxkIGJlIGNhbGxlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0cnVlIGlmCiAgICAgICAgICogcHJvcGVydGllcyBhcmUgcGVuZGluZy4gT3ZlcnJpZGUgdG8gY3VzdG9taXplIHdoZW4KICAgICAgICAgKiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBpcyBjYWxsZWQuCiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBjdXJyZW50UHJvcHMgQmFnIG9mIGFsbCBjdXJyZW50IGFjY2Vzc29yIHZhbHVlcwogICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gY2hhbmdlZFByb3BzIEJhZyBvZiBwcm9wZXJ0aWVzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QKICAgICAgICAgKiAgIGNhbGwgdG8gYF9wcm9wZXJ0aWVzQ2hhbmdlZGAKICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IG9sZFByb3BzIEJhZyBvZiBwcmV2aW91cyB2YWx1ZXMgZm9yIGVhY2ggcHJvcGVydHkKICAgICAgICAgKiAgIGluIGBjaGFuZ2VkUHJvcHNgCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBjaGFuZ2VkUHJvcHMgaXMgdHJ1dGh5CiAgICAgICAgICovCiAgICAgICAgX3Nob3VsZFByb3BlcnRpZXNDaGFuZ2UoY3VycmVudFByb3BzLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgICAgIHJldHVybiBCb29sZWFuKGNoYW5nZWRQcm9wcyk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsYmFjayBjYWxsZWQgd2hlbiBhbnkgcHJvcGVydGllcyB3aXRoIGFjY2Vzc29ycyBjcmVhdGVkIHZpYQogICAgICAgICAqIGBfY3JlYXRlUHJvcGVydHlBY2Nlc3NvcmAgaGF2ZSBiZWVuIHNldC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gY3VycmVudFByb3BzIEJhZyBvZiBhbGwgY3VycmVudCBhY2Nlc3NvciB2YWx1ZXMKICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGNoYW5nZWRQcm9wcyBCYWcgb2YgcHJvcGVydGllcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0CiAgICAgICAgICogICBjYWxsIHRvIGBfcHJvcGVydGllc0NoYW5nZWRgCiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBlYWNoIHByb3BlcnR5CiAgICAgICAgICogICBpbiBgY2hhbmdlZFByb3BzYAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9wcm9wZXJ0aWVzQ2hhbmdlZChjdXJyZW50UHJvcHMsIGNoYW5nZWRQcm9wcywgb2xkUHJvcHMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogTWV0aG9kIGNhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHByb3BlcnR5IHZhbHVlIHNob3VsZCBiZQogICAgICAgICAqIGNvbnNpZGVyZWQgYXMgYSBjaGFuZ2UgYW5kIGNhdXNlIHRoZSBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjawogICAgICAgICAqIHRvIGJlIGVucXVldWVkLgogICAgICAgICAqCiAgICAgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBgdHJ1ZWAgaWYgYSBzdHJpY3QgZXF1YWxpdHkKICAgICAgICAgKiBjaGVjayBmYWlscy4gVGhlIG1ldGhvZCBhbHdheXMgcmV0dXJucyBmYWxzZSBmb3IgYE5hTmAuCiAgICAgICAgICoKICAgICAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBlLmcuIHByb3ZpZGUgc3RyaWN0ZXIgY2hlY2tpbmcgZm9yCiAgICAgICAgICogT2JqZWN0cy9BcnJheXMgd2hlbiB1c2luZyBpbW11dGFibGUgcGF0dGVybnMuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgTmV3IHByb3BlcnR5IHZhbHVlCiAgICAgICAgICogQHBhcmFtIHsqfSBvbGQgUHJldmlvdXMgcHJvcGVydHkgdmFsdWUKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICAgICAqICAgYW5kIGVucXVldWUgYSBgX3Byb2VwcnRpZXNDaGFuZ2VkYCBjYWxsYmFjawogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBvbGQpIHsKICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIC8vIFN0cmljdCBlcXVhbGl0eSBjaGVjawogICAgICAgICAgICAob2xkICE9PSB2YWx1ZSAmJgogICAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyAob2xkPT1OYU4sIHZhbHVlPT1OYU4pIGFsd2F5cyByZXR1cm5zIGZhbHNlCiAgICAgICAgICAgICAgKG9sZCA9PT0gb2xkIHx8IHZhbHVlID09PSB2YWx1ZSkpCiAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW1wbGVtZW50cyBuYXRpdmUgQ3VzdG9tIEVsZW1lbnRzIGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tgIHRvCiAgICAgICAgICogc2V0IGFuIGF0dHJpYnV0ZSB2YWx1ZSB0byBhIHByb3BlcnR5IHZpYSBgX2F0dHJpYnV0ZVRvUHJvcGVydHlgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBhdHRyaWJ1dGUgdGhhdCBjaGFuZ2VkCiAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBvbGQgT2xkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gdmFsdWUgTmV3IGF0dHJpYnV0ZSB2YWx1ZQogICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gbmFtZXNwYWNlIEF0dHJpYnV0ZSBuYW1lc3BhY2UuCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBTdXBlciBtYXkgb3IgbWF5IG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrCiAgICAgICAgICovCiAgICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZCwgdmFsdWUsIG5hbWVzcGFjZSkgewogICAgICAgICAgaWYgKG9sZCAhPT0gdmFsdWUpIHsKICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuYW1lLCB2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKSB7CiAgICAgICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlLCBuYW1lc3BhY2UpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogRGVzZXJpYWxpemVzIGFuIGF0dHJpYnV0ZSB0byBpdHMgYXNzb2NpYXRlZCBwcm9wZXJ0eS4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBgX2Rlc2VyaWFsaXplVmFsdWVgIG1ldGhvZCB0byBjb252ZXJ0IHRoZSBzdHJpbmcgdG8KICAgICAgICAgKiBhIHR5cGVkIHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSBOYW1lIG9mIGF0dHJpYnV0ZSB0byBkZXNlcmlhbGl6ZS4KICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCiAgICAgICAgICogQHBhcmFtIHsqPX0gdHlwZSB0eXBlIHRvIGRlc2VyaWFsaXplIHRvLCBkZWZhdWx0cyB0byB0aGUgdmFsdWUKICAgICAgICAgKiByZXR1cm5lZCBmcm9tIGB0eXBlRm9yUHJvcGVydHlgCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBfYXR0cmlidXRlVG9Qcm9wZXJ0eShhdHRyaWJ1dGUsIHZhbHVlLCB0eXBlKSB7CiAgICAgICAgICBpZiAoIXRoaXMuX19zZXJpYWxpemluZykgewogICAgICAgICAgICBjb25zdCBtYXAgPSB0aGlzLl9fZGF0YUF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gbWFwICYmIG1hcFthdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTsKICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSB0aGlzLl9kZXNlcmlhbGl6ZVZhbHVlKHZhbHVlLCB0eXBlIHx8CiAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci50eXBlRm9yUHJvcGVydHkocHJvcGVydHkpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFNlcmlhbGl6ZXMgYSBwcm9wZXJ0eSB0byBpdHMgYXNzb2NpYXRlZCBhdHRyaWJ1dGUuCiAgICAgICAgICoKICAgICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30gQ2xvc3VyZSBjYW4ndCBmaWd1cmUgb3V0IGB0aGlzYCBpcyBhbiBlbGVtZW50LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUgdG8gcmVmbGVjdC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZz19IGF0dHJpYnV0ZSBBdHRyaWJ1dGUgbmFtZSB0byByZWZsZWN0IHRvLgogICAgICAgICAqIEBwYXJhbSB7Kj19IHZhbHVlIFByb3BlcnR5IHZhbHVlIHRvIHJlZmVjdC4KICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgIF9wcm9wZXJ0eVRvQXR0cmlidXRlKHByb3BlcnR5LCBhdHRyaWJ1dGUsIHZhbHVlKSB7CiAgICAgICAgICB0aGlzLl9fc2VyaWFsaXppbmcgPSB0cnVlOwogICAgICAgICAgdmFsdWUgPSAoYXJndW1lbnRzLmxlbmd0aCA8IDMpID8gdGhpc1twcm9wZXJ0eV0gOiB2YWx1ZTsKICAgICAgICAgIHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0aGlzKSwgdmFsdWUsCiAgICAgICAgICAgIGF0dHJpYnV0ZSB8fCB0aGlzLmNvbnN0cnVjdG9yLmF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShwcm9wZXJ0eSkpOwogICAgICAgICAgdGhpcy5fX3NlcmlhbGl6aW5nID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBTZXRzIGEgdHlwZWQgdmFsdWUgdG8gYW4gSFRNTCBhdHRyaWJ1dGUgb24gYSBub2RlLgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgY2FsbHMgdGhlIGBfc2VyaWFsaXplVmFsdWVgIG1ldGhvZCB0byBjb252ZXJ0IHRoZSB0eXBlZAogICAgICAgICAqIHZhbHVlIHRvIGEgc3RyaW5nLiAgSWYgdGhlIGBfc2VyaWFsaXplVmFsdWVgIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLAogICAgICAgICAqIHRoZSBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBib29sZWFuCiAgICAgICAgICogdHlwZSBgZmFsc2VgKS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSBFbGVtZW50IHRvIHNldCBhdHRyaWJ1dGUgdG8uCiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXJpYWxpemUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSBBdHRyaWJ1dGUgbmFtZSB0byBzZXJpYWxpemUgdG8uCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBfdmFsdWVUb05vZGVBdHRyaWJ1dGUobm9kZSwgdmFsdWUsIGF0dHJpYnV0ZSkgewogICAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5fc2VyaWFsaXplVmFsdWUodmFsdWUpOwogICAgICAgICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHN0cik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDb252ZXJ0cyBhIHR5cGVkIEphdmFTY3JpcHQgdmFsdWUgdG8gYSBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBzZXR0aW5nIEpTIHByb3BlcnR5IHZhbHVlcyB0bwogICAgICAgICAqIEhUTUwgYXR0cmlidXRlcy4gIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlCiAgICAgICAgICogc2VyaWFsaXphdGlvbiBmb3IgY3VzdG9tIHR5cGVzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBQcm9wZXJ0eSB2YWx1ZSB0byBzZXJpYWxpemUuCiAgICAgICAgICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSBTdHJpbmcgc2VyaWFsaXplZCBmcm9tIHRoZSBwcm92aWRlZAogICAgICAgICAqIHByb3BlcnR5ICB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICBfc2VyaWFsaXplVmFsdWUodmFsdWUpIHsKICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/ICcnIDogdW5kZWZpbmVkOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gdmFsdWUudG9TdHJpbmcoKSA6IHVuZGVmaW5lZDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgdHlwZWQgSmF2YVNjcmlwdCB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgSFRNTCBhdHRyaWJ1dGUgdmFsdWVzIHRvCiAgICAgICAgICogSlMgcHJvcGVydGllcy4gIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlCiAgICAgICAgICogZGVzZXJpYWxpemF0aW9uIGZvciBjdXN0b20gYHR5cGVgcy4gVHlwZXMgZm9yIGBCb29sZWFuYCwgYFN0cmluZ2AsCiAgICAgICAgICogYW5kIGBOdW1iZXJgIGNvbnZlcnQgYXR0cmlidXRlcyB0byB0aGUgZXhwZWN0ZWQgdHlwZXMuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIFZhbHVlIHRvIGRlc2VyaWFsaXplLgogICAgICAgICAqIEBwYXJhbSB7Kj19IHR5cGUgVHlwZSB0byBkZXNlcmlhbGl6ZSB0aGUgc3RyaW5nIHRvLgogICAgICAgICAqIEByZXR1cm4geyp9IFR5cGVkIHZhbHVlIGRlc2VyaWFsaXplZCBmcm9tIHRoZSBwcm92aWRlZCBzdHJpbmcuCiAgICAgICAgICovCiAgICAgICAgX2Rlc2VyaWFsaXplVmFsdWUodmFsdWUsIHR5cGUpIHsKICAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICBjYXNlIEJvb2xlYW46CiAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSAhPT0gbnVsbCk7CiAgICAgICAgICAgIGNhc2UgTnVtYmVyOgogICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gUHJvcGVydGllc0NoYW5nZWQ7CiAgICB9KTsKCgogIH0pKCk7CgoKCihmdW5jdGlvbigpIHsKCiAgJ3VzZSBzdHJpY3QnOwoKICBsZXQgY2FzZU1hcCA9IFBvbHltZXIuQ2FzZU1hcDsKCiAgLy8gU2F2ZSBtYXAgb2YgbmF0aXZlIHByb3BlcnRpZXM7IHRoaXMgZm9ybXMgYSBibGFja2xpc3Qgb3IgcHJvcGVydGllcwogIC8vIHRoYXQgd29uJ3QgaGF2ZSB0aGVpciB2YWx1ZXMgInNhdmVkIiBieSBgc2F2ZUFjY2Vzc29yVmFsdWVgLCBzaW5jZQogIC8vIHJlYWRpbmcgZnJvbSBhbiBIVE1MRWxlbWVudCBhY2Nlc3NvciBmcm9tIHRoZSBjb250ZXh0IG9mIGEgcHJvdG90eXBlIHRocm93cwogIGNvbnN0IG5hdGl2ZVByb3BlcnRpZXMgPSB7fTsKICBsZXQgcHJvdG8gPSBIVE1MRWxlbWVudC5wcm90b3R5cGU7CiAgd2hpbGUgKHByb3RvKSB7CiAgICBsZXQgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90byk7CiAgICBmb3IgKGxldCBpPTA7IGk8cHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgbmF0aXZlUHJvcGVydGllc1twcm9wc1tpXV0gPSB0cnVlOwogICAgfQogICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pOwogIH0KCiAgLyoqCiAgICogVXNlZCB0byBzYXZlIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IHRoYXQgd2lsbCBiZSBvdmVycmlkZGVuIHdpdGgKICAgKiBhbiBhY2Nlc3Nvci4gSWYgdGhlIGBtb2RlbGAgaXMgYSBwcm90b3R5cGUsIHRoZSB2YWx1ZXMgd2lsbCBiZSBzYXZlZAogICAqIGluIGBfX2RhdGFQcm90b2AsIGFuZCBpdCdzIHVwIHRvIHRoZSB1c2VyIChvciBkb3duc3RyZWFtIG1peGluKSB0bwogICAqIGRlY2lkZSBob3cvd2hlbiB0byBzZXQgdGhlc2UgdmFsdWVzIGJhY2sgaW50byB0aGUgYWNjZXNzb3JzLgogICAqIElmIGBtb2RlbGAgaXMgYWxyZWFkeSBhbiBpbnN0YW5jZSAoaXQgaGFzIGEgYF9fZGF0YWAgcHJvcGVydHkpLCB0aGVuCiAgICogdGhlIHZhbHVlIHdpbGwgYmUgc2V0IGFzIGEgcGVuZGluZyBwcm9wZXJ0eSwgbWVhbmluZyB0aGUgdXNlciBzaG91bGQKICAgKiBjYWxsIGBfaW52YWxpZGF0ZVByb3BlcnRpZXNgIG9yIGBfZmx1c2hQcm9wZXJ0aWVzYCB0byB0YWtlIGVmZmVjdAogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IG1vZGVsIFByb3RvdHlwZSBvciBpbnN0YW5jZQogICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHByb3BlcnR5CiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHNhdmVBY2Nlc3NvclZhbHVlKG1vZGVsLCBwcm9wZXJ0eSkgewogICAgLy8gRG9uJ3QgcmVhZC9zdG9yZSB2YWx1ZSBmb3IgYW55IG5hdGl2ZSBwcm9wZXJ0aWVzIHNpbmNlIHRoZXkgY291bGQgdGhyb3cKICAgIGlmICghbmF0aXZlUHJvcGVydGllc1twcm9wZXJ0eV0pIHsKICAgICAgbGV0IHZhbHVlID0gbW9kZWxbcHJvcGVydHldOwogICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgIGlmIChtb2RlbC5fX2RhdGEpIHsKICAgICAgICAgIC8vIEFkZGluZyBhY2Nlc3NvciB0byBpbnN0YW5jZTsgdXBkYXRlIHRoZSBwcm9wZXJ0eQogICAgICAgICAgLy8gSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBjYWxsIF9mbHVzaFByb3BlcnRpZXMKICAgICAgICAgIG1vZGVsLl9zZXRQZW5kaW5nUHJvcGVydHkocHJvcGVydHksIHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gQWRkaW5nIGFjY2Vzc29yIHRvIHByb3RvOyBzYXZlIHByb3RvJ3MgdmFsdWUgZm9yIGluc3RhbmNlLXRpbWUgdXNlCiAgICAgICAgICBpZiAoIW1vZGVsLl9fZGF0YVByb3RvKSB7CiAgICAgICAgICAgIG1vZGVsLl9fZGF0YVByb3RvID0ge307CiAgICAgICAgICB9IGVsc2UgaWYgKCFtb2RlbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfX2RhdGFQcm90bycsIG1vZGVsKSkpIHsKICAgICAgICAgICAgbW9kZWwuX19kYXRhUHJvdG8gPSBPYmplY3QuY3JlYXRlKG1vZGVsLl9fZGF0YVByb3RvKTsKICAgICAgICAgIH0KICAgICAgICAgIG1vZGVsLl9fZGF0YVByb3RvW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIGJhc2ljIG1ldGEtcHJvZ3JhbW1pbmcgZm9yIGNyZWF0aW5nIG9uZQogICAqIG9yIG1vcmUgcHJvcGVydHkgYWNjZXNzb3JzIChnZXR0ZXIvc2V0dGVyIHBhaXIpIHRoYXQgZW5xdWV1ZSBhbiBhc3luYwogICAqIChiYXRjaGVkKSBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjay4KICAgKgogICAqIEZvciBiYXNpYyB1c2FnZSBvZiB0aGlzIG1peGluOgogICAqIAogICAqIC0gICBEZWNsYXJlIGF0dHJpYnV0ZXMgdG8gb2JzZXJ2ZSB2aWEgdGhlIHN0YW5kYXJkIGBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpYC4gVXNlCiAgICogICAgIGBkYXNoLWNhc2VgIGF0dHJpYnV0ZSBuYW1lcyB0byByZXByZXNlbnQgYGNhbWVsQ2FzZWAgcHJvcGVydHkgbmFtZXMuIAogICAqIC0gICBJbXBsZW1lbnQgdGhlIGBfcHJvcGVydGllc0NoYW5nZWRgIGNhbGxiYWNrIG9uIHRoZSBjbGFzcy4KICAgKiAtICAgQ2FsbCBgTXlDbGFzcy5jcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpYCAqKm9uY2UqKiBvbiB0aGUgY2xhc3MgdG8gZ2VuZXJhdGUgCiAgICogICAgIHByb3BlcnR5IGFjY2Vzc29ycyBmb3IgZWFjaCBvYnNlcnZlZCBhdHRyaWJ1dGUuIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCAKICAgKiAgICAgaW5zdGFuY2UgaXMgY3JlYXRlZCwgZm9yIGV4YW1wbGUsIGJ5IGNhbGxpbmcgaXQgYmVmb3JlIGNhbGxpbmcgYGN1c3RvbUVsZW1lbnRzLmRlZmluZWAuCiAgICogICAgIEl0IGNhbiBhbHNvIGJlIGNhbGxlZCBsYXppbHkgZnJvbSB0aGUgZWxlbWVudCdzIGBjb25zdHJ1Y3RvcmAsIGFzIGxvbmcgYXMgaXQncyBndWFyZGVkIHNvCiAgICogICAgIHRoYXQgdGhlIGNhbGwgaXMgb25seSBtYWRlIG9uY2UsIHdoZW4gdGhlIGZpcnN0IGluc3RhbmNlIGlzIGNyZWF0ZWQuCiAgICogLSAgIENhbGwgYHRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKWAgaW4gdGhlIGVsZW1lbnQncyBgY29ubmVjdGVkQ2FsbGJhY2tgIHRvIGVuYWJsZSAKICAgKiAgICAgdGhlIGFjY2Vzc29ycy4KICAgKgogICAqIEFueSBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKICAgKiBkZXNlcmlhbGl6ZWQgdmlhIGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tgIGFuZCBzZXQgdG8gdGhlIGFzc29jaWF0ZWQKICAgKiBwcm9wZXJ0eSB1c2luZyBgZGFzaC1jYXNlYC10by1gY2FtZWxDYXNlYCBjb252ZW50aW9uLgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5Qcm9wZXJ0aWVzQ2hhbmdlZAogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiBmb3IgcmVhY3RpbmcgdG8gcHJvcGVydHkgY2hhbmdlcyBmcm9tCiAgICogICBnZW5lcmF0ZWQgcHJvcGVydHkgYWNjZXNzb3JzLgogICAqLwogIFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnMgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBleHRlbmRzIHtzdXBlckNsYXNzfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydGllc0NoYW5nZWR9CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICAgY29uc3QgYmFzZSA9IFBvbHltZXIuUHJvcGVydGllc0NoYW5nZWQoc3VwZXJDbGFzcyk7CgogICAgLyoqCiAgICAgKiBAcG9seW1lcgogICAgICogQG1peGluQ2xhc3MKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnR5QWNjZXNzb3JzfQogICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKi8KICAgIGNsYXNzIFByb3BlcnR5QWNjZXNzb3JzIGV4dGVuZHMgYmFzZSB7CgogICAgICAvKioKICAgICAgICogR2VuZXJhdGVzIHByb3BlcnR5IGFjY2Vzc29ycyBmb3IgYWxsIGF0dHJpYnV0ZXMgaW4gdGhlIHN0YW5kYXJkCiAgICAgICAqIHN0YXRpYyBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBhcnJheS4KICAgICAgICoKICAgICAgICogQXR0cmlidXRlIG5hbWVzIGFyZSBtYXBwZWQgdG8gcHJvcGVydHkgbmFtZXMgdXNpbmcgdGhlIGBkYXNoLWNhc2VgIHRvCiAgICAgICAqIGBjYW1lbENhc2VgIGNvbnZlbnRpb24KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpIHsKICAgICAgICBsZXQgYSQgPSB0aGlzLm9ic2VydmVkQXR0cmlidXRlczsKICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBhJC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3IoY2FzZU1hcC5kYXNoVG9DYW1lbENhc2UoYSRbaV0pKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGFuIGF0dHJpYnV0ZSBuYW1lIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKiBCeSBkZWZhdWx0LCBjb252ZXJ0cyBjYW1lbCB0byBkYXNoIGNhc2UsIGUuZy4gYGZvb0JhcmAgdG8gYGZvby1iYXJgLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgdG8gY29udmVydAogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IEF0dHJpYnV0ZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgcmV0dXJuIGNhc2VNYXAuY2FtZWxUb0Rhc2hDYXNlKHByb3BlcnR5KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBQcm9wZXJ0aWVzQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiB0byBpbml0aWFsaXplIHZhbHVlcyBmb3IKICAgICAgICogYWNjZXNzb3JzIGNyZWF0ZWQgZm9yIHZhbHVlcyB0aGF0IGFscmVhZHkgZXhpc3RlZCBvbiB0aGUgZWxlbWVudAogICAgICAgKiBwcm90b3R5cGUuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9pbml0aWFsaXplUHJvcGVydGllcygpIHsKICAgICAgICBpZiAodGhpcy5fX2RhdGFQcm90bykgewogICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKTsKICAgICAgICAgIHRoaXMuX19kYXRhUHJvdG8gPSBudWxsOwogICAgICAgIH0KICAgICAgICBzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbGxlZCBhdCBpbnN0YW5jZSB0aW1lIHdpdGggYmFnIG9mIHByb3BlcnRpZXMgdGhhdCB3ZXJlIG92ZXJ3cml0dGVuCiAgICAgICAqIGJ5IGFjY2Vzc29ycyBvbiB0aGUgcHJvdG90eXBlIHdoZW4gYWNjZXNzb3JzIHdlcmUgY3JlYXRlZC4KICAgICAgICoKICAgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2V0cyB0aGVzZSBwcm9wZXJ0aWVzIGJhY2sgaW50byB0aGUKICAgICAgICogc2V0dGVyIGF0IGluc3RhbmNlIHRpbWUuICBUaGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBhbiBvdmVycmlkZQogICAgICAgKiBwb2ludCBmb3IgY3VzdG9taXppbmcgb3IgcHJvdmlkaW5nIG1vcmUgZWZmaWNpZW50IGluaXRpYWxpemF0aW9uLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIHByb3BlcnR5IHZhbHVlcyB0aGF0IHdlcmUgb3ZlcndyaXR0ZW4KICAgICAgICogICB3aGVuIGNyZWF0aW5nIHByb3BlcnR5IGFjY2Vzc29ycy4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMocHJvcHMpIHsKICAgICAgICBmb3IgKGxldCBwIGluIHByb3BzKSB7CiAgICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwLCBwcm9wc1twXSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRW5zdXJlcyB0aGUgZWxlbWVudCBoYXMgdGhlIGdpdmVuIGF0dHJpYnV0ZS4gSWYgaXQgZG9lcyBub3QsCiAgICAgICAqIGFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBhdHRyaWJ1dGUuCiAgICAgICAqCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfSBDbG9zdXJlIGNhbid0IGZpZ3VyZSBvdXQgYHRoaXNgIGlzIGluZmFjdCBhbiBlbGVtZW50CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgTmFtZSBvZiBhdHRyaWJ1dGUgdG8gZW5zdXJlIGlzIHNldC4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfZW5zdXJlQXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpIHsKICAgICAgICBjb25zdCBlbCA9IC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0aGlzKTsKICAgICAgICBpZiAoIWVsLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7CiAgICAgICAgICB0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShlbCwgdmFsdWUsIGF0dHJpYnV0ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIFByb3BlcnRpZXNDaGFuZ2VkIGltcGxlbWVudGlvbiB0byBzZXJpYWxpemUgb2JqZWN0cyBhcyBKU09OLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFByb3BlcnR5IHZhbHVlIHRvIHNlcmlhbGl6ZS4KICAgICAgICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSBTdHJpbmcgc2VyaWFsaXplZCBmcm9tIHRoZSBwcm92aWRlZCBwcm9wZXJ0eSB2YWx1ZS4KICAgICAgICovCiAgICAgIF9zZXJpYWxpemVWYWx1ZSh2YWx1ZSkgewogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovCiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHsKICAgICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHsKICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpOwogICAgICAgICAgICAgIH0gY2F0Y2goeCkgewogICAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBzdXBlci5fc2VyaWFsaXplVmFsdWUodmFsdWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgdHlwZWQgSmF2YVNjcmlwdCB2YWx1ZS4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IFBvbHltZXIgd2hlbiByZWFkaW5nIEhUTUwgYXR0cmlidXRlIHZhbHVlcyB0bwogICAgICAgKiBKUyBwcm9wZXJ0aWVzLiAgVXNlcnMgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIG9uIFBvbHltZXIgZWxlbWVudAogICAgICAgKiBwcm90b3R5cGVzIHRvIHByb3ZpZGUgZGVzZXJpYWxpemF0aW9uIGZvciBjdXN0b20gYHR5cGVgcy4gIE5vdGUsCiAgICAgICAqIHRoZSBgdHlwZWAgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBgdHlwZWAgZmllbGQgcHJvdmlkZWQgaW4gdGhlCiAgICAgICAqIGBwcm9wZXJ0aWVzYCBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgYSBnaXZlbiBwcm9wZXJ0eSwgYW5kIGlzCiAgICAgICAqIGJ5IGNvbnZlbnRpb24gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgdHlwZSB0byBkZXNlcmlhbGl6ZS4KICAgICAgICoKICAgICAgICoKICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUgdG8gZGVzZXJpYWxpemUuCiAgICAgICAqIEBwYXJhbSB7Kj19IHR5cGUgVHlwZSB0byBkZXNlcmlhbGl6ZSB0aGUgc3RyaW5nIHRvLgogICAgICAgKiBAcmV0dXJuIHsqfSBUeXBlZCB2YWx1ZSBkZXNlcmlhbGl6ZWQgZnJvbSB0aGUgcHJvdmlkZWQgc3RyaW5nLgogICAgICAgKi8KICAgICAgX2Rlc2VyaWFsaXplVmFsdWUodmFsdWUsIHR5cGUpIHsKICAgICAgICAvKioKICAgICAgICAgKiBAdHlwZSB7Kn0KICAgICAgICAgKi8KICAgICAgICBsZXQgb3V0VmFsdWU7CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICBjYXNlIE9iamVjdDoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBvdXRWYWx1ZSA9IEpTT04ucGFyc2UoLyoqIEB0eXBlIHtzdHJpbmd9ICovKHZhbHVlKSk7CiAgICAgICAgICAgIH0gY2F0Y2goeCkgewogICAgICAgICAgICAgIC8vIGFsbG93IG5vbi1KU09OIGxpdGVyYWxzIGxpa2UgU3RyaW5ncyBhbmQgTnVtYmVycwogICAgICAgICAgICAgIG91dFZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIEFycmF5OgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIG91dFZhbHVlID0gSlNPTi5wYXJzZSgvKiogQHR5cGUge3N0cmluZ30gKi8odmFsdWUpKTsKICAgICAgICAgICAgfSBjYXRjaCh4KSB7CiAgICAgICAgICAgICAgb3V0VmFsdWUgPSBudWxsOwogICAgICAgICAgICAgIGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7dmFsdWV9YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIERhdGU6CiAgICAgICAgICAgIG91dFZhbHVlID0gaXNOYU4odmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6IE51bWJlcih2YWx1ZSk7CiAgICAgICAgICAgIG91dFZhbHVlID0gbmV3IERhdGUob3V0VmFsdWUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIG91dFZhbHVlID0gc3VwZXIuX2Rlc2VyaWFsaXplVmFsdWUodmFsdWUsIHR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG91dFZhbHVlOwogICAgICB9CiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tZmFsbHRocm91Z2ggKi8KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgUHJvcGVydGllc0NoYW5nZWQgaW1wbGVtZW50YXRpb24gdG8gc2F2ZSBleGlzdGluZyBwcm90b3R5cGUKICAgICAgICogcHJvcGVydHkgdmFsdWUgc28gdGhhdCBpdCBjYW4gYmUgcmVzZXQuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHRoZSBwcm9wZXJ0eQogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZWFkT25seSBXaGVuIHRydWUsIG5vIHNldHRlciBpcyBjcmVhdGVkCiAgICAgICAqCiAgICAgICAqIFdoZW4gY2FsbGluZyBvbiBhIHByb3RvdHlwZSwgYW55IG92ZXJ3cml0dGVuIHZhbHVlcyBhcmUgc2F2ZWQgaW4KICAgICAgICogYF9fZGF0YVByb3RvYCwgYW5kIGl0IGlzIHVwIHRvIHRoZSBzdWJjbGFzc2VyIHRvIGRlY2lkZSBob3cvd2hlbgogICAgICAgKiB0byBzZXQgdGhvc2UgcHJvcGVydGllcyBiYWNrIGludG8gdGhlIGFjY2Vzc29yLiAgV2hlbiBjYWxsaW5nIG9uIGFuCiAgICAgICAqIGluc3RhbmNlLCB0aGUgb3ZlcndyaXR0ZW4gdmFsdWUgaXMgc2V0IHZpYSBgX3NldFBlbmRpbmdQcm9wZXJ0eWAsCiAgICAgICAqIGFuZCB0aGUgdXNlciBzaG91bGQgY2FsbCBgX2ludmFsaWRhdGVQcm9wZXJ0aWVzYCBvciBgX2ZsdXNoUHJvcGVydGllc2AKICAgICAgICogZm9yIHRoZSB2YWx1ZXMgdG8gdGFrZSBlZmZlY3QuCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKHByb3BlcnR5LCByZWFkT25seSkgewogICAgICAgIHNhdmVBY2Nlc3NvclZhbHVlKHRoaXMsIHByb3BlcnR5KTsKICAgICAgICBzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3Nvcihwcm9wZXJ0eSwgcmVhZE9ubHkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgbGlicmFyeSBjcmVhdGVkIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYW4gYWNjZXNzb3Igd2FzIGNyZWF0ZWQKICAgICAgICovCiAgICAgIF9oYXNBY2Nlc3Nvcihwcm9wZXJ0eSkgewogICAgICAgIHJldHVybiB0aGlzLl9fZGF0YUhhc0FjY2Vzc29yICYmIHRoaXMuX19kYXRhSGFzQWNjZXNzb3JbcHJvcGVydHldOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaGFzIGEgcGVuZGluZyBjaGFuZ2UuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBwcm9wZXJ0eSBoYXMgYSBwZW5kaW5nIGNoYW5nZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfaXNQcm9wZXJ0eVBlbmRpbmcocHJvcCkgewogICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuX19kYXRhUGVuZGluZyAmJiAocHJvcCBpbiB0aGlzLl9fZGF0YVBlbmRpbmcpKTsKICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gUHJvcGVydHlBY2Nlc3NvcnM7CgogIH0pOwoKfSkoKTsKCgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihkb2N1bWVudCwgTm9kZUZpbHRlci5TSE9XX0FMTCwKICAgICAgbnVsbCwgZmFsc2UpOwoKICAvLyAxLnggYmFja3dhcmRzLWNvbXBhdGlibGUgYXV0by13cmFwcGVyIGZvciB0ZW1wbGF0ZSB0eXBlIGV4dGVuc2lvbnMKICAvLyBUaGlzIGlzIGEgY2xlYXIgbGF5ZXJpbmcgdmlvbGF0aW9uIGFuZCBnaXZlcyBmYXZvcmVkLW5hdGlvbiBzdGF0dXMgdG8KICAvLyBkb20taWYgYW5kIGRvbS1yZXBlYXQgdGVtcGxhdGVzLiAgVGhpcyBpcyBhIGNvbmNlaXQgd2UncmUgY2hvb3NpbmcgdG8ga2VlcAogIC8vIGEuKSB0byBlYXNlIDEueCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBkdWUgdG8gbG9zcyBvZiBgaXNgLCBhbmQKICAvLyBiLikgdG8gbWFpbnRhaW4gaWYvcmVwZWF0IGNhcGFiaWxpdHkgaW4gcGFyc2VyLWNvbnN0cmFpbmVkIGVsZW1lbnRzCiAgLy8gICAgIChlLmcuIHRhYmxlLCBzZWxlY3QpIGluIGxpZXUgb2YgbmF0aXZlIENFIHR5cGUgZXh0ZW5zaW9ucyB3aXRob3V0CiAgLy8gICAgIG1hc3NpdmUgbmV3IGludmVudGlvbiBpbiB0aGlzIHNwYWNlIChlLmcuIGRpcmVjdGl2ZSBzeXN0ZW0pCiAgY29uc3QgdGVtcGxhdGVFeHRlbnNpb25zID0gewogICAgJ2RvbS1pZic6IHRydWUsCiAgICAnZG9tLXJlcGVhdCc6IHRydWUKICB9OwogIGZ1bmN0aW9uIHdyYXBUZW1wbGF0ZUV4dGVuc2lvbihub2RlKSB7CiAgICBsZXQgaXMgPSBub2RlLmdldEF0dHJpYnV0ZSgnaXMnKTsKICAgIGlmIChpcyAmJiB0ZW1wbGF0ZUV4dGVuc2lvbnNbaXNdKSB7CiAgICAgIGxldCB0ID0gbm9kZTsKICAgICAgdC5yZW1vdmVBdHRyaWJ1dGUoJ2lzJyk7CiAgICAgIG5vZGUgPSB0Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChpcyk7CiAgICAgIHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobm9kZSwgdCk7CiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodCk7CiAgICAgIHdoaWxlKHQuYXR0cmlidXRlcy5sZW5ndGgpIHsKICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSh0LmF0dHJpYnV0ZXNbMF0ubmFtZSwgdC5hdHRyaWJ1dGVzWzBdLnZhbHVlKTsKICAgICAgICB0LnJlbW92ZUF0dHJpYnV0ZSh0LmF0dHJpYnV0ZXNbMF0ubmFtZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgZnVuY3Rpb24gZmluZFRlbXBsYXRlTm9kZShyb290LCBub2RlSW5mbykgewogICAgLy8gcmVjdXJzaXZlbHkgYXNjZW5kIHRyZWUgdW50aWwgd2UgaGl0IHJvb3QKICAgIGxldCBwYXJlbnQgPSBub2RlSW5mby5wYXJlbnRJbmZvICYmIGZpbmRUZW1wbGF0ZU5vZGUocm9vdCwgbm9kZUluZm8ucGFyZW50SW5mbyk7CiAgICAvLyB1bndpbmQgdGhlIHN0YWNrLCByZXR1cm5pbmcgdGhlIGluZGV4ZWQgbm9kZSBhdCBlYWNoIGxldmVsCiAgICBpZiAocGFyZW50KSB7CiAgICAgIC8vIG5vdGU6IG1hcmdpbmFsbHkgZmFzdGVyIHRoYW4gaW5kZXhpbmcgdmlhIGNoaWxkTm9kZXMKICAgICAgLy8gKGh0dHA6Ly9qc3BlcmYuY29tL2NoaWxkbm9kZXMtbG9va3VwKQogICAgICB3YWxrZXIuY3VycmVudE5vZGUgPSBwYXJlbnQ7CiAgICAgIGZvciAobGV0IG49d2Fsa2VyLmZpcnN0Q2hpbGQoKSwgaT0wOyBuOyBuPXdhbGtlci5uZXh0U2libGluZygpKSB7CiAgICAgICAgaWYgKG5vZGVJbmZvLnBhcmVudEluZGV4ID09PSBpKyspIHsKICAgICAgICAgIHJldHVybiBuOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHJvb3Q7CiAgICB9CiAgfQoKICAvLyBjb25zdHJ1Y3QgYCRgIG1hcCAoZnJvbSBpZCBhbm5vdGF0aW9ucykKICBmdW5jdGlvbiBhcHBseUlkVG9NYXAoaW5zdCwgbWFwLCBub2RlLCBub2RlSW5mbykgewogICAgaWYgKG5vZGVJbmZvLmlkKSB7CiAgICAgIG1hcFtub2RlSW5mby5pZF0gPSBub2RlOwogICAgfQogIH0KCiAgLy8gaW5zdGFsbCBldmVudCBsaXN0ZW5lcnMgKGZyb20gZXZlbnQgYW5ub3RhdGlvbnMpCiAgZnVuY3Rpb24gYXBwbHlFdmVudExpc3RlbmVyKGluc3QsIG5vZGUsIG5vZGVJbmZvKSB7CiAgICBpZiAobm9kZUluZm8uZXZlbnRzICYmIG5vZGVJbmZvLmV2ZW50cy5sZW5ndGgpIHsKICAgICAgZm9yIChsZXQgaj0wLCBlJD1ub2RlSW5mby5ldmVudHMsIGU7IChqPGUkLmxlbmd0aCkgJiYgKGU9ZSRbal0pOyBqKyspIHsKICAgICAgICBpbnN0Ll9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGUubmFtZSwgZS52YWx1ZSwgaW5zdCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIHB1c2ggY29uZmlndXJhdGlvbiByZWZlcmVuY2VzIGF0IGNvbmZpZ3VyZSB0aW1lCiAgZnVuY3Rpb24gYXBwbHlUZW1wbGF0ZUNvbnRlbnQoaW5zdCwgbm9kZSwgbm9kZUluZm8pIHsKICAgIGlmIChub2RlSW5mby50ZW1wbGF0ZUluZm8pIHsKICAgICAgbm9kZS5fdGVtcGxhdGVJbmZvID0gbm9kZUluZm8udGVtcGxhdGVJbmZvOwogICAgfQogIH0KCiAgZnVuY3Rpb24gY3JlYXRlTm9kZUV2ZW50SGFuZGxlcihjb250ZXh0LCBldmVudE5hbWUsIG1ldGhvZE5hbWUpIHsKICAgIC8vIEluc3RhbmNlcyBjYW4gb3B0aW9uYWxseSBoYXZlIGEgX21ldGhvZEhvc3Qgd2hpY2ggYWxsb3dzIHJlZGlyZWN0aW5nIHdoZXJlCiAgICAvLyB0byBmaW5kIG1ldGhvZHMuIEN1cnJlbnRseSB1c2VkIGJ5IGB0ZW1wbGF0aXplYC4KICAgIGNvbnRleHQgPSBjb250ZXh0Ll9tZXRob2RIb3N0IHx8IGNvbnRleHQ7CiAgICBsZXQgaGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgaWYgKGNvbnRleHRbbWV0aG9kTmFtZV0pIHsKICAgICAgICBjb250ZXh0W21ldGhvZE5hbWVdKGUsIGUuZGV0YWlsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zb2xlLndhcm4oJ2xpc3RlbmVyIG1ldGhvZCBgJyArIG1ldGhvZE5hbWUgKyAnYCBub3QgZGVmaW5lZCcpOwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGhhbmRsZXI7CiAgfQoKICAvKioKICAgKiBFbGVtZW50IG1peGluIHRoYXQgcHJvdmlkZXMgYmFzaWMgdGVtcGxhdGUgcGFyc2luZyBhbmQgc3RhbXBpbmcsIGluY2x1ZGluZwogICAqIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGUtcmVsYXRlZCBmZWF0dXJlcyBmb3Igc3RhbXBlZCB0ZW1wbGF0ZXM6CiAgICoKICAgKiAtIERlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyAoYG9uLWV2ZW50bmFtZT0ibGlzdGVuZXIiYCkKICAgKiAtIE1hcCBvZiBub2RlIGlkJ3MgdG8gc3RhbXBlZCBub2RlIGluc3RhbmNlcyAoYHRoaXMuJC5pZGApCiAgICogLSBOZXN0ZWQgdGVtcGxhdGUgY29udGVudCBjYWNoaW5nL3JlbW92YWwgYW5kIHJlLWluc3RhbGxhdGlvbiAocGVyZm9ybWFuY2UKICAgKiAgIG9wdGltaXphdGlvbikKICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBiYXNpYyB0ZW1wbGF0ZSBwYXJzaW5nIGFuZCBzdGFtcGluZwogICAqLwogIFBvbHltZXIuVGVtcGxhdGVTdGFtcCA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfVGVtcGxhdGVTdGFtcH0KICAgICAqLwogICAgY2xhc3MgVGVtcGxhdGVTdGFtcCBleHRlbmRzIHN1cGVyQ2xhc3MgewoKICAgICAgLyoqCiAgICAgICAqIFNjYW5zIGEgdGVtcGxhdGUgdG8gcHJvZHVjZSB0ZW1wbGF0ZSBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogVGVtcGxhdGUtc3BlY2lmaWMgbWV0YWRhdGEgYXJlIHN0b3JlZCBpbiB0aGUgb2JqZWN0IHJldHVybmVkLCBhbmQgbm9kZS0KICAgICAgICogc3BlY2lmaWMgbWV0YWRhdGEgYXJlIHN0b3JlZCBpbiBvYmplY3RzIGluIGl0cyBmbGF0dGVuZWQgYG5vZGVJbmZvTGlzdGAKICAgICAgICogYXJyYXkuICBPbmx5IG5vZGVzIGluIHRoZSB0ZW1wbGF0ZSB0aGF0IHdlcmUgcGFyc2VkIGFzIG5vZGVzIG9mCiAgICAgICAqIGludGVyZXN0IGNvbnRhaW4gYW4gb2JqZWN0IGluIGBub2RlSW5mb0xpc3RgLiAgRWFjaCBgbm9kZUluZm9gIG9iamVjdAogICAgICAgKiBjb250YWlucyBhbiBgaW5kZXhgIChgY2hpbGROb2Rlc2AgaW5kZXggaW4gcGFyZW50KSBhbmQgb3B0aW9uYWxseQogICAgICAgKiBgcGFyZW50YCwgd2hpY2ggcG9pbnRzIHRvIG5vZGUgaW5mbyBvZiBpdHMgcGFyZW50IChpbmNsdWRpbmcgaXRzIGluZGV4KS4KICAgICAgICoKICAgICAgICogVGhlIHRlbXBsYXRlIG1ldGFkYXRhIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoaXMgbWV0aG9kIGhhcyB0aGUgZm9sbG93aW5nCiAgICAgICAqIHN0cnVjdHVyZSAobWFueSBmaWVsZHMgb3B0aW9uYWwpOgogICAgICAgKgogICAgICAgKiBgYGBqcwogICAgICAgKiAgIHsKICAgICAgICogICAgIC8vIEZsYXR0ZW5lZCBsaXN0IG9mIG5vZGUgbWV0YWRhdGEgKGZvciBub2RlcyB0aGF0IGdlbmVyYXRlZCBtZXRhZGF0YSkKICAgICAgICogICAgIG5vZGVJbmZvTGlzdDogWwogICAgICAgKiAgICAgICB7CiAgICAgICAqICAgICAgICAgLy8gYGlkYCBhdHRyaWJ1dGUgZm9yIGFueSBub2RlcyB3aXRoIGlkJ3MgZm9yIGdlbmVyYXRpbmcgYCRgIG1hcAogICAgICAgKiAgICAgICAgIGlkOiB7c3RyaW5nfSwKICAgICAgICogICAgICAgICAvLyBgb24tZXZlbnQ9ImhhbmRsZXIiYCBtZXRhZGF0YQogICAgICAgKiAgICAgICAgIGV2ZW50czogWwogICAgICAgKiAgICAgICAgICAgewogICAgICAgKiAgICAgICAgICAgICBuYW1lOiB7c3RyaW5nfSwgICAvLyBldmVudCBuYW1lCiAgICAgICAqICAgICAgICAgICAgIHZhbHVlOiB7c3RyaW5nfSwgIC8vIGhhbmRsZXIgbWV0aG9kIG5hbWUKICAgICAgICogICAgICAgICAgIH0sIC4uLgogICAgICAgKiAgICAgICAgIF0sCiAgICAgICAqICAgICAgICAgLy8gTm90ZXMgd2hlbiB0aGUgdGVtcGxhdGUgY29udGFpbmVkIGEgYDxzbG90PmAgZm9yIHNoYWR5IERPTQogICAgICAgKiAgICAgICAgIC8vIG9wdGltaXphdGlvbiBwdXJwb3NlcwogICAgICAgKiAgICAgICAgIGhhc0luc2VydGlvblBvaW50OiB7Ym9vbGVhbn0sCiAgICAgICAqICAgICAgICAgLy8gRm9yIG5lc3RlZCBgPHRlbXBsYXRlPmBgIG5vZGVzLCBuZXN0ZWQgdGVtcGxhdGUgbWV0YWRhdGEKICAgICAgICogICAgICAgICB0ZW1wbGF0ZUluZm86IHtvYmplY3R9LCAvLyBuZXN0ZWQgdGVtcGxhdGUgbWV0YWRhdGEKICAgICAgICogICAgICAgICAvLyBNZXRhZGF0YSB0byBhbGxvdyBlZmZpY2llbnQgcmV0cmlldmFsIG9mIGluc3RhbmNlZCBub2RlCiAgICAgICAqICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGlzIG1ldGFkYXRhCiAgICAgICAqICAgICAgICAgcGFyZW50SW5mbzoge251bWJlcn0sICAgLy8gcmVmZXJlbmNlIHRvIHBhcmVudCBub2RlSW5mbz4KICAgICAgICogICAgICAgICBwYXJlbnRJbmRleDoge251bWJlcn0sICAvLyBpbmRleCBpbiBwYXJlbnQncyBgY2hpbGROb2Rlc2AgY29sbGVjdGlvbgogICAgICAgKiAgICAgICAgIGluZm9JbmRleDoge251bWJlcn0sICAgIC8vIGluZGV4IG9mIHRoaXMgYG5vZGVJbmZvYCBpbiBgdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdGAKICAgICAgICogICAgICAgfSwKICAgICAgICogICAgICAgLi4uCiAgICAgICAqICAgICBdLAogICAgICAgKiAgICAgLy8gV2hlbiB0cnVlLCB0aGUgdGVtcGxhdGUgaGFkIHRoZSBgc3RyaXAtd2hpdGVzcGFjZWAgYXR0cmlidXRlCiAgICAgICAqICAgICAvLyBvciB3YXMgbmVzdGVkIGluIGEgdGVtcGxhdGUgd2l0aCB0aGF0IHNldHRpbmcKICAgICAgICogICAgIHN0cmlwV2hpdGVzcGFjZToge2Jvb2xlYW59LAogICAgICAgKiAgICAgLy8gRm9yIG5lc3RlZCB0ZW1wbGF0ZXMsIG5lc3RlZCB0ZW1wbGF0ZSBjb250ZW50IGlzIG1vdmVkIGludG8KICAgICAgICogICAgIC8vIGEgZG9jdW1lbnQgZnJhZ21lbnQgc3RvcmVkIGhlcmU7IHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvCiAgICAgICAqICAgICAvLyBhdm9pZCB0aGUgY29zdCBvZiBuZXN0ZWQgdGVtcGxhdGUgY2xvbmluZwogICAgICAgKiAgICAgY29udGVudDoge0RvY3VtZW50RnJhZ21lbnR9CiAgICAgICAqICAgfQogICAgICAgKiBgYGAKICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2Qga2lja3Mgb2ZmIGEgcmVjdXJzaXZlIHRyZWV3YWxrIGFzIGZvbGxvd3M6CiAgICAgICAqCiAgICAgICAqIGBgYAogICAgICAgKiAgICBfcGFyc2VUZW1wbGF0ZSA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgICAgKiAgICAgIF9wYXJzZVRlbXBsYXRlQ29udGVudCAgICAgICAgICAgICAgfAogICAgICAgKiAgICAgICAgX3BhcnNlVGVtcGxhdGVOb2RlICA8LS0tLS0tLS0tLS0tfC0tKwogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlIC0tKyAgfAogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMgLS0tLS0tLS0tKwogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzCiAgICAgICAqICAgICAgICAgICAgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlCiAgICAgICAqCiAgICAgICAqIGBgYAogICAgICAgKgogICAgICAgKiBUaGVzZSBtZXRob2RzIG1heSBiZSBvdmVycmlkZGVuIHRvIGFkZCBjdXN0b20gbWV0YWRhdGEgYWJvdXQgdGVtcGxhdGVzCiAgICAgICAqIHRvIGVpdGhlciBgdGVtcGxhdGVJbmZvYCBvciBgbm9kZUluZm9gLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbWF5IGJlIGRlc3RydWN0aXZlIHRvIHRoZSB0ZW1wbGF0ZSwgaW4gdGhhdAogICAgICAgKiBlLmcuIGV2ZW50IGFubm90YXRpb25zIG1heSBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIG5vdGVkIGluIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgdG8gcGFyc2UKICAgICAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm89fSBvdXRlclRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmcm9tIHRoZSBvdXRlcgogICAgICAgKiAgIHRlbXBsYXRlLCBmb3IgcGFyc2luZyBuZXN0ZWQgdGVtcGxhdGVzCiAgICAgICAqIEByZXR1cm4geyFUZW1wbGF0ZUluZm99IFBhcnNlZCB0ZW1wbGF0ZSBtZXRhZGF0YQogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlKHRlbXBsYXRlLCBvdXRlclRlbXBsYXRlSW5mbykgewogICAgICAgIC8vIHNpbmNlIGEgdGVtcGxhdGUgbWF5IGJlIHJlLXVzZWQsIG1lbW8taXplIG1ldGFkYXRhCiAgICAgICAgaWYgKCF0ZW1wbGF0ZS5fdGVtcGxhdGVJbmZvKSB7CiAgICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gdGVtcGxhdGUuX3RlbXBsYXRlSW5mbyA9IHt9OwogICAgICAgICAgdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdCA9IFtdOwogICAgICAgICAgdGVtcGxhdGVJbmZvLnN0cmlwV2hpdGVTcGFjZSA9IFBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9ucyB8fAogICAgICAgICAgICAob3V0ZXJUZW1wbGF0ZUluZm8gJiYgb3V0ZXJUZW1wbGF0ZUluZm8uc3RyaXBXaGl0ZVNwYWNlKSB8fAogICAgICAgICAgICB0ZW1wbGF0ZS5oYXNBdHRyaWJ1dGUoJ3N0cmlwLXdoaXRlc3BhY2UnKTsKICAgICAgICAgIHRoaXMuX3BhcnNlVGVtcGxhdGVDb250ZW50KHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIHtwYXJlbnQ6IG51bGx9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl90ZW1wbGF0ZUluZm87CiAgICAgIH0KCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNvbnRlbnQodGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHsKICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUodGVtcGxhdGUuY29udGVudCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQYXJzZXMgdGVtcGxhdGUgbm9kZSBhbmQgYWRkcyB0ZW1wbGF0ZSBhbmQgbm9kZSBtZXRhZGF0YSBiYXNlZCBvbgogICAgICAgKiB0aGUgY3VycmVudCBub2RlLCBhbmQgaXRzIGBjaGlsZE5vZGVzYCBhbmQgYGF0dHJpYnV0ZXNgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBtYXkgYmUgb3ZlcnJpZGRlbiB0byBhZGQgY3VzdG9tIG5vZGUgb3IgdGVtcGxhdGUgc3BlY2lmaWMKICAgICAgICogbWV0YWRhdGEgYmFzZWQgb24gdGhpcyBub2RlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCBub3RlZDsKICAgICAgICBsZXQgZWxlbWVudCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8obm9kZSk7CiAgICAgICAgaWYgKGVsZW1lbnQubG9jYWxOYW1lID09ICd0ZW1wbGF0ZScgJiYgIWVsZW1lbnQuaGFzQXR0cmlidXRlKCdwcmVzZXJ2ZS1jb250ZW50JykpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHx8IG5vdGVkOwogICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09ICdzbG90JykgewogICAgICAgICAgLy8gRm9yIFNoYWR5RG9tIG9wdGltaXphdGlvbiwgaW5kaWNhdGluZyB0aGVyZSBpcyBhbiBpbnNlcnRpb24gcG9pbnQKICAgICAgICAgIHRlbXBsYXRlSW5mby5oYXNJbnNlcnRpb25Qb2ludCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHdhbGtlci5jdXJyZW50Tm9kZSA9IGVsZW1lbnQ7CiAgICAgICAgaWYgKHdhbGtlci5maXJzdENoaWxkKCkpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMoZWxlbWVudCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgfHwgbm90ZWQ7CiAgICAgICAgfQogICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzKGVsZW1lbnQsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHx8IG5vdGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm90ZWQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQYXJzZXMgdGVtcGxhdGUgY2hpbGQgbm9kZXMgZm9yIHRoZSBnaXZlbiByb290IG5vZGUuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIGFsc28gd3JhcHMgd2hpdGVsaXN0ZWQgbGVnYWN5IHRlbXBsYXRlIGV4dGVuc2lvbnMKICAgICAgICogKGBpcz0iZG9tLWlmImAgYW5kIGBpcz0iZG9tLXJlcGVhdCJgKSB3aXRoIHRoZWlyIGVxdWl2YWxlbnQgZWxlbWVudAogICAgICAgKiB3cmFwcGVycywgY29sbGFwc2VzIHRleHQgbm9kZXMsIGFuZCBzdHJpcHMgd2hpdGVzcGFjZSBmcm9tIHRoZSB0ZW1wbGF0ZQogICAgICAgKiBpZiB0aGUgYHRlbXBsYXRlSW5mby5zdHJpcFdoaXRlc3BhY2VgIHNldHRpbmcgd2FzIHByb3ZpZGVkLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgUm9vdCBub2RlIHdob3NlIGBjaGlsZE5vZGVzYCB3aWxsIGJlIHBhcnNlZAogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocm9vdCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGlmIChyb290LmxvY2FsTmFtZSA9PT0gJ3NjcmlwdCcgfHwgcm9vdC5sb2NhbE5hbWUgPT09ICdzdHlsZScpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgd2Fsa2VyLmN1cnJlbnROb2RlID0gcm9vdDsKICAgICAgICBmb3IgKGxldCBub2RlPXdhbGtlci5maXJzdENoaWxkKCksIHBhcmVudEluZGV4PTAsIG5leHQ7IG5vZGU7IG5vZGU9bmV4dCkgewogICAgICAgICAgLy8gV3JhcCB0ZW1wbGF0ZXMKICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PSAndGVtcGxhdGUnKSB7CiAgICAgICAgICAgIG5vZGUgPSB3cmFwVGVtcGxhdGVFeHRlbnNpb24obm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBjb2xsYXBzZSBhZGphY2VudCB0ZXh0Tm9kZXM6IGZpeGVzIGFuIElFIGlzc3VlIHRoYXQgY2FuIGNhdXNlCiAgICAgICAgICAvLyB0ZXh0IG5vZGVzIHRvIGJlIGluZXhwbGljYWJseSBzcGxpdCA9KAogICAgICAgICAgLy8gbm90ZSB0aGF0IHJvb3Qubm9ybWFsaXplKCkgc2hvdWxkIHdvcmsgYnV0IGRvZXMgbm90IHNvIHdlIGRvIHRoaXMKICAgICAgICAgIC8vIG1hbnVhbGx5LgogICAgICAgICAgd2Fsa2VyLmN1cnJlbnROb2RlID0gbm9kZTsKICAgICAgICAgIG5leHQgPSB3YWxrZXIubmV4dFNpYmxpbmcoKTsKICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgICBsZXQgLyoqIE5vZGUgKi8gbiA9IG5leHQ7CiAgICAgICAgICAgIHdoaWxlIChuICYmIChuLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkpIHsKICAgICAgICAgICAgICBub2RlLnRleHRDb250ZW50ICs9IG4udGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgbmV4dCA9IHdhbGtlci5uZXh0U2libGluZygpOwogICAgICAgICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgICAgICAgbiA9IG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gb3B0aW9uYWxseSBzdHJpcCB3aGl0ZXNwYWNlCiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUluZm8uc3RyaXBXaGl0ZVNwYWNlICYmICFub2RlLnRleHRDb250ZW50LnRyaW0oKSkgewogICAgICAgICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGxldCBjaGlsZEluZm8gPSB7IHBhcmVudEluZGV4LCBwYXJlbnRJbmZvOiBub2RlSW5mbyB9OwogICAgICAgICAgaWYgKHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKG5vZGUsIHRlbXBsYXRlSW5mbywgY2hpbGRJbmZvKSkgewogICAgICAgICAgICBjaGlsZEluZm8uaW5mb0luZGV4ID0gdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdC5wdXNoKC8qKiBAdHlwZSB7IU5vZGVJbmZvfSAqLyhjaGlsZEluZm8pKSAtIDE7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBJbmNyZW1lbnQgaWYgbm90IHJlbW92ZWQKICAgICAgICAgIHdhbGtlci5jdXJyZW50Tm9kZSA9IG5vZGU7CiAgICAgICAgICBpZiAod2Fsa2VyLnBhcmVudE5vZGUoKSkgewogICAgICAgICAgICBwYXJlbnRJbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhcnNlcyB0ZW1wbGF0ZSBjb250ZW50IGZvciB0aGUgZ2l2ZW4gbmVzdGVkIGA8dGVtcGxhdGU+YC4KICAgICAgICoKICAgICAgICogTmVzdGVkIHRlbXBsYXRlIGluZm8gaXMgc3RvcmVkIGFzIGB0ZW1wbGF0ZUluZm9gIGluIHRoZSBjdXJyZW50IG5vZGUncwogICAgICAgKiBgbm9kZUluZm9gLiBgdGVtcGxhdGUuY29udGVudGAgaXMgcmVtb3ZlZCBhbmQgc3RvcmVkIGluIGB0ZW1wbGF0ZUluZm9gLgogICAgICAgKiBJdCB3aWxsIHRoZW4gYmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBob3N0IHRvIHNldCBpdCBiYWNrIHRvIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBhbmQgZm9yIHVzZXJzIHN0YW1waW5nIG5lc3RlZCB0ZW1wbGF0ZXMgdG8gdXNlIHRoZQogICAgICAgKiBgX2NvbnRlbnRGb3JUZW1wbGF0ZWAgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBjb250ZW50IGZvciB0aGlzIHRlbXBsYXRlCiAgICAgICAqIChhbiBvcHRpbWl6YXRpb24gdG8gYXZvaWQgdGhlIGNvc3Qgb2YgY2xvbmluZyBuZXN0ZWQgdGVtcGxhdGUgY29udGVudCkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gbm9kZSBOb2RlIHRvIHBhcnNlIChhIDx0ZW1wbGF0ZT4pCiAgICAgICAqIEBwYXJhbSB7VGVtcGxhdGVJbmZvfSBvdXRlclRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiAgIHRoYXQgaW5jbHVkZXMgdGhlIHRlbXBsYXRlIGBub2RlYAogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKG5vZGUsIG91dGVyVGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCB0ZW1wbGF0ZUluZm8gPSB0aGlzLl9wYXJzZVRlbXBsYXRlKG5vZGUsIG91dGVyVGVtcGxhdGVJbmZvKTsKICAgICAgICBsZXQgY29udGVudCA9IHRlbXBsYXRlSW5mby5jb250ZW50ID0KICAgICAgICAgIG5vZGUuY29udGVudC5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKG5vZGUuY29udGVudCk7CiAgICAgICAgbm9kZUluZm8udGVtcGxhdGVJbmZvID0gdGVtcGxhdGVJbmZvOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUGFyc2VzIHRlbXBsYXRlIG5vZGUgYXR0cmlidXRlcyBhbmQgYWRkcyBub2RlIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICogZm9yIG5vZGVzIG9mIGludGVyZXN0LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmlzaXRlZCBub2RlIGFkZGVkIG5vZGUtc3BlY2lmaWMKICAgICAgICogICBtZXRhZGF0YSB0byBgbm9kZUluZm9gCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKSB7CiAgICAgICAgLy8gTWFrZSBjb3B5IG9mIG9yaWdpbmFsIGF0dHJpYnV0ZSBsaXN0LCBzaW5jZSB0aGUgb3JkZXIgbWF5IGNoYW5nZQogICAgICAgIC8vIGFzIGF0dHJpYnV0ZXMgYXJlIGFkZGVkIGFuZCByZW1vdmVkCiAgICAgICAgbGV0IG5vdGVkID0gZmFsc2U7CiAgICAgICAgbGV0IGF0dHJzID0gQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpOwogICAgICAgIGZvciAobGV0IGk9YXR0cnMubGVuZ3RoLTEsIGE7IChhPWF0dHJzW2ldKTsgaS0tKSB7CiAgICAgICAgICBub3RlZCA9IHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG5vZGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIGEubmFtZSwgYS52YWx1ZSkgfHwgbm90ZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBub3RlZDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhcnNlcyBhIHNpbmdsZSB0ZW1wbGF0ZSBub2RlIGF0dHJpYnV0ZSBhbmQgYWRkcyBub2RlIG1ldGFkYXRhIHRvCiAgICAgICAqIGBub2RlSW5mb2AgZm9yIGF0dHJpYnV0ZXMgb2YgaW50ZXJlc3QuCiAgICAgICAqCiAgICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gYWRkcyBtZXRhZGF0YSBmb3IgYG9uLWV2ZW50PSJoYW5kbGVyImAgYXR0cmlidXRlcwogICAgICAgKiBhbmQgYGlkYCBhdHRyaWJ1dGVzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQXR0cmlidXRlIG5hbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZpc2l0ZWQgbm9kZSBhZGRlZCBub2RlLXNwZWNpZmljCiAgICAgICAqICAgbWV0YWRhdGEgdG8gYG5vZGVJbmZvYAogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZShub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIC8vIGV2ZW50cyAob24tKikKICAgICAgICBpZiAobmFtZS5zbGljZSgwLCAzKSA9PT0gJ29uLScpIHsKICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpOwogICAgICAgICAgbm9kZUluZm8uZXZlbnRzID0gbm9kZUluZm8uZXZlbnRzIHx8IFtdOwogICAgICAgICAgbm9kZUluZm8uZXZlbnRzLnB1c2goewogICAgICAgICAgICBuYW1lOiBuYW1lLnNsaWNlKDMpLAogICAgICAgICAgICB2YWx1ZQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gc3RhdGljIGlkCiAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ2lkJykgewogICAgICAgICAgbm9kZUluZm8uaWQgPSB2YWx1ZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBgY29udGVudGAgZG9jdW1lbnQgZnJhZ21lbnQgZm9yIGEgZ2l2ZW4gdGVtcGxhdGUuCiAgICAgICAqCiAgICAgICAqIEZvciBuZXN0ZWQgdGVtcGxhdGVzLCBQb2x5bWVyIHBlcmZvcm1zIGFuIG9wdGltaXphdGlvbiB0byBjYWNoZSBuZXN0ZWQKICAgICAgICogdGVtcGxhdGUgY29udGVudCB0byBhdm9pZCB0aGUgY29zdCBvZiBjbG9uaW5nIGRlZXBseSBuZXN0ZWQgdGVtcGxhdGVzLgogICAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGNhY2hlZCBjb250ZW50IGZvciBhIGdpdmVuIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIHJldHJpZXZlIGBjb250ZW50YCBmb3IKICAgICAgICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH0gQ29udGVudCBmcmFnbWVudAogICAgICAgKi8KICAgICAgc3RhdGljIF9jb250ZW50Rm9yVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gLyoqIEB0eXBlIHtIVE1MVGVtcGxhdGVFbGVtZW50V2l0aEluZm99ICovICh0ZW1wbGF0ZSkuX3RlbXBsYXRlSW5mbzsKICAgICAgICByZXR1cm4gKHRlbXBsYXRlSW5mbyAmJiB0ZW1wbGF0ZUluZm8uY29udGVudCkgfHwgdGVtcGxhdGUuY29udGVudDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENsb25lcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgY29udGVudCBhbmQgcmV0dXJucyBhIGRvY3VtZW50IGZyYWdtZW50CiAgICAgICAqIGNvbnRhaW5pbmcgdGhlIGNsb25lZCBkb20uCiAgICAgICAqCiAgICAgICAqIFRoZSB0ZW1wbGF0ZSBpcyBwYXJzZWQgKG9uY2UgYW5kIG1lbW9pemVkKSB1c2luZyB0aGlzIGxpYnJhcnkncwogICAgICAgKiB0ZW1wbGF0ZSBwYXJzaW5nIGZlYXR1cmVzLCBhbmQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyB2YWx1ZS1hZGRlZAogICAgICAgKiBmZWF0dXJlczoKICAgICAgICogKiBBZGRzIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyBmb3IgYG9uLWV2ZW50PSJoYW5kbGVyImAgYXR0cmlidXRlcwogICAgICAgKiAqIEdlbmVyYXRlcyBhbiAiaWQgbWFwIiBmb3IgYWxsIG5vZGVzIHdpdGggaWQncyB1bmRlciBgJGAgb24gcmV0dXJuZWQKICAgICAgICogICBkb2N1bWVudCBmcmFnbWVudAogICAgICAgKiAqIFBhc3NlcyB0ZW1wbGF0ZSBpbmZvIGluY2x1ZGluZyBgY29udGVudGAgYmFjayB0byB0ZW1wbGF0ZXMgYXMKICAgICAgICogICBgX3RlbXBsYXRlSW5mb2AgKGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRvIGF2b2lkIGRlZXAgdGVtcGxhdGUKICAgICAgICogICBjbG9uaW5nKQogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgdGhlIG1lbW9pemVkIHRlbXBsYXRlIHBhcnNpbmcgcHJvY2VzcyBpcyBkZXN0cnVjdGl2ZSB0byB0aGUKICAgICAgICogdGVtcGxhdGU6IGF0dHJpYnV0ZXMgZm9yIGJpbmRpbmdzIGFuZCBkZWNsYXJhdGl2ZSBldmVudCBsaXN0ZW5lcnMgYXJlCiAgICAgICAqIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgbm90ZWQgaW4gbm90ZXMsIGFuZCBhbnkgbmVzdGVkIGA8dGVtcGxhdGU+LmNvbnRlbnRgCiAgICAgICAqIGlzIHJlbW92ZWQgYW5kIHN0b3JlZCBpbiBub3RlcyBhcyB3ZWxsLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBzdGFtcAogICAgICAgKiBAcmV0dXJuIHshU3RhbXBlZFRlbXBsYXRlfSBDbG9uZWQgdGVtcGxhdGUgY29udGVudAogICAgICAgKi8KICAgICAgX3N0YW1wVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgICAgICAvLyBQb2x5ZmlsbCBzdXBwb3J0OiBib290c3RyYXAgdGhlIHRlbXBsYXRlIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuCiAgICAgICAgaWYgKHRlbXBsYXRlICYmICF0ZW1wbGF0ZS5jb250ZW50ICYmCiAgICAgICAgICAgIHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50ICYmIEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUpIHsKICAgICAgICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUodGVtcGxhdGUpOwogICAgICAgIH0KICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gdGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgbGV0IG5vZGVJbmZvID0gdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdDsKICAgICAgICBsZXQgY29udGVudCA9IHRlbXBsYXRlSW5mby5jb250ZW50IHx8IHRlbXBsYXRlLmNvbnRlbnQ7CiAgICAgICAgbGV0IGRvbSA9IC8qKiBAdHlwZSB7RG9jdW1lbnRGcmFnbWVudH0gKi8gKGRvY3VtZW50LmltcG9ydE5vZGUoY29udGVudCwgdHJ1ZSkpOwogICAgICAgIC8vIE5PVEU6IFNoYWR5RG9tIG9wdGltaXphdGlvbiBpbmRpY2F0aW5nIHRoZXJlIGlzIGFuIGluc2VydGlvbiBwb2ludAogICAgICAgIGRvbS5fX25vSW5zZXJ0aW9uUG9pbnQgPSAhdGVtcGxhdGVJbmZvLmhhc0luc2VydGlvblBvaW50OwogICAgICAgIGxldCBub2RlcyA9IGRvbS5ub2RlTGlzdCA9IG5ldyBBcnJheShub2RlSW5mby5sZW5ndGgpOwogICAgICAgIGRvbS4kID0ge307CiAgICAgICAgZm9yIChsZXQgaT0wLCBsPW5vZGVJbmZvLmxlbmd0aCwgaW5mbzsgKGk8bCkgJiYgKGluZm89bm9kZUluZm9baV0pOyBpKyspIHsKICAgICAgICAgIGxldCBub2RlID0gbm9kZXNbaV0gPSBmaW5kVGVtcGxhdGVOb2RlKGRvbSwgaW5mbyk7CiAgICAgICAgICBhcHBseUlkVG9NYXAodGhpcywgZG9tLiQsIG5vZGUsIGluZm8pOwogICAgICAgICAgYXBwbHlUZW1wbGF0ZUNvbnRlbnQodGhpcywgbm9kZSwgaW5mbyk7CiAgICAgICAgICBhcHBseUV2ZW50TGlzdGVuZXIodGhpcywgbm9kZSwgaW5mbyk7CiAgICAgICAgfQogICAgICAgIGRvbSA9IC8qKiBAdHlwZSB7IVN0YW1wZWRUZW1wbGF0ZX0gKi8oZG9tKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWFzc2lnbgogICAgICAgIHJldHVybiBkb207CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIGJ5IG1ldGhvZCBuYW1lIGZvciB0aGUgZXZlbnQgcHJvdmlkZWQuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBsb29rcyB1cCB0aGUgbWV0aG9kCiAgICAgICAqIG5hbWUgYXQgaGFuZGxpbmcgdGltZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBOb2RlIHRvIGFkZCBsaXN0ZW5lciBvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgZXZlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgTmFtZSBvZiBtZXRob2QKICAgICAgICogQHBhcmFtIHsqPX0gY29udGV4dCBDb250ZXh0IHRoZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgb24gKGRlZmF1bHRzCiAgICAgICAqICAgdG8gYG5vZGVgKQogICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gR2VuZXJhdGVkIGhhbmRsZXIgZnVuY3Rpb24KICAgICAgICovCiAgICAgIF9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSwgY29udGV4dCkgewogICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IG5vZGU7CiAgICAgICAgbGV0IGhhbmRsZXIgPSBjcmVhdGVOb2RlRXZlbnRIYW5kbGVyKGNvbnRleHQsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSk7CiAgICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICAgIHJldHVybiBoYW5kbGVyOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgcG9pbnQgZm9yIGFkZGluZyBjdXN0b20gb3Igc2ltdWxhdGVkIGV2ZW50IGhhbmRsaW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBMaXN0ZW5lciBmdW5jdGlvbiB0byBhZGQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgcG9pbnQgZm9yIGFkZGluZyBjdXN0b20gb3Igc2ltdWxhdGVkIGV2ZW50IGhhbmRsaW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gcmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGZyb20KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBOYW1lIG9mIGV2ZW50CiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUV2ZW50KTp2b2lkfSBoYW5kbGVyIExpc3RlbmVyIGZ1bmN0aW9uIHRvIHJlbW92ZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTsKICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gVGVtcGxhdGVTdGFtcDsKCiAgfSk7Cgp9KSgpOwoKCihmdW5jdGlvbigpIHsKCiAgJ3VzZSBzdHJpY3QnOwoKICAvKiogQGNvbnN0IHtPYmplY3R9ICovCiAgY29uc3QgQ2FzZU1hcCA9IFBvbHltZXIuQ2FzZU1hcDsKCiAgLy8gTW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHVuaXF1ZSBJRCB1c2VkIGZvciBkZS1kdXBpbmcgZWZmZWN0cyB0cmlnZ2VyZWQKICAvLyBmcm9tIG11bHRpcGxlIHByb3BlcnRpZXMgaW4gdGhlIHNhbWUgdHVybgogIGxldCBkZWR1cGVJZCA9IDA7CgogIC8qKgogICAqIFByb3BlcnR5IGVmZmVjdCB0eXBlczsgZWZmZWN0cyBhcmUgc3RvcmVkIG9uIHRoZSBwcm90b3R5cGUgdXNpbmcgdGhlc2Uga2V5cwogICAqIEBlbnVtIHtzdHJpbmd9CiAgICovCiAgY29uc3QgVFlQRVMgPSB7CiAgICBDT01QVVRFOiAnX19jb21wdXRlRWZmZWN0cycsCiAgICBSRUZMRUNUOiAnX19yZWZsZWN0RWZmZWN0cycsCiAgICBOT1RJRlk6ICdfX25vdGlmeUVmZmVjdHMnLAogICAgUFJPUEFHQVRFOiAnX19wcm9wYWdhdGVFZmZlY3RzJywKICAgIE9CU0VSVkU6ICdfX29ic2VydmVFZmZlY3RzJywKICAgIFJFQURfT05MWTogJ19fcmVhZE9ubHknCiAgfTsKCiAgLyoqIEBjb25zdCB7UmVnRXhwfSAqLwogIGNvbnN0IGNhcGl0YWxBdHRyaWJ1dGVSZWdleCA9IC9bQS1aXS87CgogIC8qKgogICAqIEB0eXBlZGVmIHt7CiAgICogbmFtZTogKHN0cmluZyB8IHVuZGVmaW5lZCksCiAgICogc3RydWN0dXJlZDogKGJvb2xlYW4gfCB1bmRlZmluZWQpLAogICAqIHdpbGRjYXJkOiAoYm9vbGVhbiB8IHVuZGVmaW5lZCkKICAgKiB9fQogICAqLwogIGxldCBEYXRhVHJpZ2dlcjsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCgogIC8qKgogICAqIEB0eXBlZGVmIHt7CiAgICogaW5mbzogPywKICAgKiB0cmlnZ2VyOiAoIURhdGFUcmlnZ2VyIHwgdW5kZWZpbmVkKSwKICAgKiBmbjogKCFGdW5jdGlvbiB8IHVuZGVmaW5lZCkKICAgKiB9fQogICAqLwogIGxldCBEYXRhRWZmZWN0OyAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKCiAgbGV0IFByb3BlcnR5RWZmZWN0c1R5cGU7IC8vZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwoKICAvKioKICAgKiBFbnN1cmVzIHRoYXQgdGhlIG1vZGVsIGhhcyBhbiBvd24tcHJvcGVydHkgbWFwIG9mIGVmZmVjdHMgZm9yIHRoZSBnaXZlbiB0eXBlLgogICAqIFRoZSBtb2RlbCBtYXkgYmUgYSBwcm90b3R5cGUgb3IgYW4gaW5zdGFuY2UuCiAgICoKICAgKiBQcm9wZXJ0eSBlZmZlY3RzIGFyZSBzdG9yZWQgYXMgYXJyYXlzIG9mIGVmZmVjdHMgYnkgcHJvcGVydHkgaW4gYSBtYXAsCiAgICogYnkgbmFtZWQgdHlwZSBvbiB0aGUgbW9kZWwuIGUuZy4KICAgKgogICAqICAgX19jb21wdXRlRWZmZWN0czogewogICAqICAgICBmb286IFsgLi4uIF0sCiAgICogICAgIGJhcjogWyAuLi4gXQogICAqICAgfQogICAqCiAgICogSWYgdGhlIG1vZGVsIGRvZXMgbm90IHlldCBoYXZlIGFuIGVmZmVjdCBtYXAgZm9yIHRoZSB0eXBlLCBvbmUgaXMgY3JlYXRlZAogICAqIGFuZCByZXR1cm5lZC4gIElmIGl0IGRvZXMsIGJ1dCBpdCBpcyBub3QgYW4gb3duIHByb3BlcnR5IChpLmUuIHRoZQogICAqIHByb3RvdHlwZSBoYWQgZWZmZWN0cyksIHRoZSB0aGUgbWFwIGlzIGRlZXBseSBjbG9uZWQgYW5kIHRoZSBjb3B5IGlzCiAgICogc2V0IG9uIHRoZSBtb2RlbCBhbmQgcmV0dXJuZWQsIHJlYWR5IGZvciBuZXcgZWZmZWN0cyB0byBiZSBhZGRlZC4KICAgKgogICAqIEBwYXJhbSB7T2JqZWN0fSBtb2RlbCBQcm90b3R5cGUgb3IgaW5zdGFuY2UKICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBQcm9wZXJ0eSBlZmZlY3QgdHlwZQogICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG93bi1wcm9wZXJ0eSBtYXAgb2YgZWZmZWN0cyBmb3IgdGhlIGdpdmVuIHR5cGUKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIGVuc3VyZU93bkVmZmVjdE1hcChtb2RlbCwgdHlwZSkgewogICAgbGV0IGVmZmVjdHMgPSBtb2RlbFt0eXBlXTsKICAgIGlmICghZWZmZWN0cykgewogICAgICBlZmZlY3RzID0gbW9kZWxbdHlwZV0gPSB7fTsKICAgIH0gZWxzZSBpZiAoIW1vZGVsLmhhc093blByb3BlcnR5KHR5cGUpKSB7CiAgICAgIGVmZmVjdHMgPSBtb2RlbFt0eXBlXSA9IE9iamVjdC5jcmVhdGUobW9kZWxbdHlwZV0pOwogICAgICBmb3IgKGxldCBwIGluIGVmZmVjdHMpIHsKICAgICAgICBsZXQgcHJvdG9GeCA9IGVmZmVjdHNbcF07CiAgICAgICAgbGV0IGluc3RGeCA9IGVmZmVjdHNbcF0gPSBBcnJheShwcm90b0Z4Lmxlbmd0aCk7CiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHByb3RvRngubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGluc3RGeFtpXSA9IHByb3RvRnhbaV07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZWZmZWN0czsKICB9CgogIC8vIC0tIGVmZmVjdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAvKioKICAgKiBSdW5zIGFsbCBlZmZlY3RzIG9mIGEgZ2l2ZW4gdHlwZSBmb3IgdGhlIGdpdmVuIHNldCBvZiBwcm9wZXJ0eSBjaGFuZ2VzCiAgICogb24gYW4gaW5zdGFuY2UuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB3aXRoIGVmZmVjdHMgdG8gcnVuCiAgICogQHBhcmFtIHtPYmplY3R9IGVmZmVjdHMgT2JqZWN0IG1hcCBvZiBwcm9wZXJ0eS10by1BcnJheSBvZiBlZmZlY3RzCiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdD19IG9sZFByb3BzIEJhZyBvZiBwcmV2aW91cyB2YWx1ZXMgZm9yIGNoYW5nZWQgcHJvcGVydGllcwogICAqIEBwYXJhbSB7Ym9vbGVhbj19IGhhc1BhdGhzIFRydWUgd2l0aCBgcHJvcHNgIGNvbnRhaW5zIG9uZSBvciBtb3JlIHBhdGhzCiAgICogQHBhcmFtIHsqPX0gZXh0cmFBcmdzIEFkZGl0aW9uYWwgbWV0YWRhdGEgdG8gcGFzcyB0byBlZmZlY3QgZnVuY3Rpb24KICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFuIGVmZmVjdCByYW4gZm9yIHRoaXMgcHJvcGVydHkKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1bkVmZmVjdHMoaW5zdCwgZWZmZWN0cywgcHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocywgZXh0cmFBcmdzKSB7CiAgICBpZiAoZWZmZWN0cykgewogICAgICBsZXQgcmFuID0gZmFsc2U7CiAgICAgIGxldCBpZCA9IGRlZHVwZUlkKys7CiAgICAgIGZvciAobGV0IHByb3AgaW4gcHJvcHMpIHsKICAgICAgICBpZiAocnVuRWZmZWN0c0ZvclByb3BlcnR5KGluc3QsIGVmZmVjdHMsIGlkLCBwcm9wLCBwcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzLCBleHRyYUFyZ3MpKSB7CiAgICAgICAgICByYW4gPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmFuOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLyoqCiAgICogUnVucyBhIGxpc3Qgb2YgZWZmZWN0cyBmb3IgYSBnaXZlbiBwcm9wZXJ0eS4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHdpdGggZWZmZWN0cyB0byBydW4KICAgKiBAcGFyYW0ge09iamVjdH0gZWZmZWN0cyBPYmplY3QgbWFwIG9mIHByb3BlcnR5LXRvLUFycmF5IG9mIGVmZmVjdHMKICAgKiBAcGFyYW0ge251bWJlcn0gZGVkdXBlSWQgQ291bnRlciB1c2VkIGZvciBkZS1kdXBpbmcgZWZmZWN0cwogICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIE5hbWUgb2YgY2hhbmdlZCBwcm9wZXJ0eQogICAqIEBwYXJhbSB7Kn0gcHJvcHMgQ2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHsqfSBvbGRQcm9wcyBPbGQgcHJvcGVydGllcwogICAqIEBwYXJhbSB7Ym9vbGVhbj19IGhhc1BhdGhzIFRydWUgd2l0aCBgcHJvcHNgIGNvbnRhaW5zIG9uZSBvciBtb3JlIHBhdGhzCiAgICogQHBhcmFtIHsqPX0gZXh0cmFBcmdzIEFkZGl0aW9uYWwgbWV0YWRhdGEgdG8gcGFzcyB0byBlZmZlY3QgZnVuY3Rpb24KICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFuIGVmZmVjdCByYW4gZm9yIHRoaXMgcHJvcGVydHkKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1bkVmZmVjdHNGb3JQcm9wZXJ0eShpbnN0LCBlZmZlY3RzLCBkZWR1cGVJZCwgcHJvcCwgcHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocywgZXh0cmFBcmdzKSB7CiAgICBsZXQgcmFuID0gZmFsc2U7CiAgICBsZXQgcm9vdFByb3BlcnR5ID0gaGFzUGF0aHMgPyBQb2x5bWVyLlBhdGgucm9vdChwcm9wKSA6IHByb3A7CiAgICBsZXQgZnhzID0gZWZmZWN0c1tyb290UHJvcGVydHldOwogICAgaWYgKGZ4cykgewogICAgICBmb3IgKGxldCBpPTAsIGw9ZnhzLmxlbmd0aCwgZng7IChpPGwpICYmIChmeD1meHNbaV0pOyBpKyspIHsKICAgICAgICBpZiAoKCFmeC5pbmZvIHx8IGZ4LmluZm8ubGFzdFJ1biAhPT0gZGVkdXBlSWQpICYmCiAgICAgICAgICAgICghaGFzUGF0aHMgfHwgcGF0aE1hdGNoZXNUcmlnZ2VyKHByb3AsIGZ4LnRyaWdnZXIpKSkgewogICAgICAgICAgaWYgKGZ4LmluZm8pIHsKICAgICAgICAgICAgZnguaW5mby5sYXN0UnVuID0gZGVkdXBlSWQ7CiAgICAgICAgICB9CiAgICAgICAgICBmeC5mbihpbnN0LCBwcm9wLCBwcm9wcywgb2xkUHJvcHMsIGZ4LmluZm8sIGhhc1BhdGhzLCBleHRyYUFyZ3MpOwogICAgICAgICAgcmFuID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByYW47CiAgfQoKICAvKioKICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBwcm9wZXJ0eS9wYXRoIHRoYXQgaGFzIGNoYW5nZWQgbWF0Y2hlcyB0aGUgdHJpZ2dlcgogICAqIGNyaXRlcmlhIGZvciBhbiBlZmZlY3QuICBBIHRyaWdnZXIgaXMgYSBkZXNjcmlwdG9yIHdpdGggdGhlIGZvbGxvd2luZwogICAqIHN0cnVjdHVyZSwgd2hpY2ggbWF0Y2hlcyB0aGUgZGVzY3JpcHRvcnMgcmV0dXJuZWQgZnJvbSBgcGFyc2VBcmdgLgogICAqIGUuZy4gZm9yIGBmb28uYmFyLipgOgogICAqIGBgYAogICAqIHRyaWdnZXI6IHsKICAgKiAgIG5hbWU6ICdhLmInLAogICAqICAgc3RydWN0dXJlZDogdHJ1ZSwKICAgKiAgIHdpbGRjYXJkOiB0cnVlCiAgICogfQogICAqIGBgYAogICAqIElmIG5vIHRyaWdnZXIgaXMgZ2l2ZW4sIHRoZSBwYXRoIGlzIGRlZW1lZCB0byBtYXRjaC4KICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggb3IgcHJvcGVydHkgdGhhdCBjaGFuZ2VkCiAgICogQHBhcmFtIHtEYXRhVHJpZ2dlcn0gdHJpZ2dlciBEZXNjcmlwdG9yCiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcGF0aCBtYXRjaGVkIHRoZSB0cmlnZ2VyCiAgICovCiAgZnVuY3Rpb24gcGF0aE1hdGNoZXNUcmlnZ2VyKHBhdGgsIHRyaWdnZXIpIHsKICAgIGlmICh0cmlnZ2VyKSB7CiAgICAgIGxldCB0cmlnZ2VyUGF0aCA9IHRyaWdnZXIubmFtZTsKICAgICAgcmV0dXJuICh0cmlnZ2VyUGF0aCA9PSBwYXRoKSB8fAogICAgICAgICh0cmlnZ2VyLnN0cnVjdHVyZWQgJiYgUG9seW1lci5QYXRoLmlzQW5jZXN0b3IodHJpZ2dlclBhdGgsIHBhdGgpKSB8fAogICAgICAgICh0cmlnZ2VyLndpbGRjYXJkICYmIFBvbHltZXIuUGF0aC5pc0Rlc2NlbmRhbnQodHJpZ2dlclBhdGgsIHBhdGgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgLyoqCiAgICogSW1wbGVtZW50cyB0aGUgIm9ic2VydmVyIiBlZmZlY3QuCiAgICoKICAgKiBDYWxscyB0aGUgbWV0aG9kIHdpdGggYGluZm8ubWV0aG9kTmFtZWAgb24gdGhlIGluc3RhbmNlLCBwYXNzaW5nIHRoZQogICAqIG5ldyBhbmQgb2xkIHZhbHVlcy4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHRoZSBlZmZlY3Qgd2lsbCBiZSBydW4gb24KICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiBwcm9wZXJ0eQogICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgY3VycmVudCBwcm9wZXJ0eSBjaGFuZ2VzCiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFByb3BzIEJhZyBvZiBwcmV2aW91cyB2YWx1ZXMgZm9yIGNoYW5nZWQgcHJvcGVydGllcwogICAqIEBwYXJhbSB7P30gaW5mbyBFZmZlY3QgbWV0YWRhdGEKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcnVuT2JzZXJ2ZXJFZmZlY3QoaW5zdCwgcHJvcGVydHksIHByb3BzLCBvbGRQcm9wcywgaW5mbykgewogICAgbGV0IGZuID0gdHlwZW9mIGluZm8ubWV0aG9kID09PSAic3RyaW5nIiA/IGluc3RbaW5mby5tZXRob2RdIDogaW5mby5tZXRob2Q7CiAgICBsZXQgY2hhbmdlZFByb3AgPSBpbmZvLnByb3BlcnR5OwogICAgaWYgKGZuKSB7CiAgICAgIGZuLmNhbGwoaW5zdCwgaW5zdC5fX2RhdGFbY2hhbmdlZFByb3BdLCBvbGRQcm9wc1tjaGFuZ2VkUHJvcF0pOwogICAgfSBlbHNlIGlmICghaW5mby5keW5hbWljRm4pIHsKICAgICAgY29uc29sZS53YXJuKCdvYnNlcnZlciBtZXRob2QgYCcgKyBpbmZvLm1ldGhvZCArICdgIG5vdCBkZWZpbmVkJyk7CiAgICB9CiAgfQoKICAvKioKICAgKiBSdW5zICJub3RpZnkiIGVmZmVjdHMgZm9yIGEgc2V0IG9mIGNoYW5nZWQgcHJvcGVydGllcy4KICAgKgogICAqIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSB0aGUgZ2VuZXJpYyBgcnVuRWZmZWN0c2AgbWV0aG9kIGluIHRoYXQgaXQKICAgKiB3aWxsIGRpc3BhdGNoIHBhdGggbm90aWZpY2F0aW9uIGV2ZW50cyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBwcm9wZXJ0eQogICAqIGNoYW5nZWQgd2FzIGEgcGF0aCBhbmQgdGhlIHJvb3QgcHJvcGVydHkgZm9yIHRoYXQgcGF0aCBkaWRuJ3QgaGF2ZSBhCiAgICogIm5vdGlmeSIgZWZmZWN0LiAgVGhpcyBpcyB0byBtYWludGFpbiAxLjAgYmVoYXZpb3IgdGhhdCBkaWQgbm90IHJlcXVpcmUKICAgKiBgbm90aWZ5OiB0cnVlYCB0byBlbnN1cmUgb2JqZWN0IHN1Yi1wcm9wZXJ0eSBub3RpZmljYXRpb25zIHdlcmUKICAgKiBzZW50LgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2Ugd2l0aCBlZmZlY3RzIHRvIHJ1bgogICAqIEBwYXJhbSB7T2JqZWN0fSBub3RpZnlQcm9wcyBCYWcgb2YgcHJvcGVydGllcyB0byBub3RpZnkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc1BhdGhzIFRydWUgd2l0aCBgcHJvcHNgIGNvbnRhaW5zIG9uZSBvciBtb3JlIHBhdGhzCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1bk5vdGlmeUVmZmVjdHMoaW5zdCwgbm90aWZ5UHJvcHMsIHByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpIHsKICAgIC8vIE5vdGlmeQogICAgbGV0IGZ4cyA9IGluc3RbVFlQRVMuTk9USUZZXTsKICAgIGxldCBub3RpZmllZDsKICAgIGxldCBpZCA9IGRlZHVwZUlkKys7CiAgICAvLyBUcnkgbm9ybWFsIG5vdGlmeSBlZmZlY3RzOyBpZiBub25lLCBmYWxsIGJhY2sgdG8gdHJ5IHBhdGggbm90aWZpY2F0aW9uCiAgICBmb3IgKGxldCBwcm9wIGluIG5vdGlmeVByb3BzKSB7CiAgICAgIGlmIChub3RpZnlQcm9wc1twcm9wXSkgewogICAgICAgIGlmIChmeHMgJiYgcnVuRWZmZWN0c0ZvclByb3BlcnR5KGluc3QsIGZ4cywgaWQsIHByb3AsIHByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpKSB7CiAgICAgICAgICBub3RpZmllZCA9IHRydWU7CiAgICAgICAgfSBlbHNlIGlmIChoYXNQYXRocyAmJiBub3RpZnlQYXRoKGluc3QsIHByb3AsIHByb3BzKSkgewogICAgICAgICAgbm90aWZpZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLy8gRmx1c2ggaG9zdCBpZiB3ZSBhY3R1YWxseSBub3RpZmllZCBhbmQgaG9zdCB3YXMgYmF0Y2hpbmcKICAgIC8vIEFuZCB0aGUgaG9zdCBoYXMgYWxyZWFkeSBpbml0aWFsaXplZCBjbGllbnRzOyB0aGlzIHByZXZlbnRzCiAgICAvLyBhbiBpc3N1ZSB3aXRoIGEgaG9zdCBvYnNlcnZpbmcgZGF0YSBjaGFuZ2VzIGJlZm9yZSBjbGllbnRzIGFyZSByZWFkeS4KICAgIGxldCBob3N0OwogICAgaWYgKG5vdGlmaWVkICYmIChob3N0ID0gaW5zdC5fX2RhdGFIb3N0KSAmJiBob3N0Ll9pbnZhbGlkYXRlUHJvcGVydGllcykgewogICAgICBob3N0Ll9pbnZhbGlkYXRlUHJvcGVydGllcygpOwogICAgfQogIH0KCiAgLyoqCiAgICogRGlzcGF0Y2hlcyB7cHJvcGVydHl9LWNoYW5nZWQgZXZlbnRzIHdpdGggcGF0aCBpbmZvcm1hdGlvbiBpbiB0aGUgZGV0YWlsCiAgICogb2JqZWN0IHRvIGluZGljYXRlIGEgc3ViLXBhdGggb2YgdGhlIHByb3BlcnR5IHdhcyBjaGFuZ2VkLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGZpcmUgdGhlIGV2ZW50CiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggdGhhdCB3YXMgY2hhbmdlZAogICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgY3VycmVudCBwcm9wZXJ0eSBjaGFuZ2VzCiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXRoIHdhcyBub3RpZmllZAogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gbm90aWZ5UGF0aChpbnN0LCBwYXRoLCBwcm9wcykgewogICAgbGV0IHJvb3RQcm9wZXJ0eSA9IFBvbHltZXIuUGF0aC5yb290KHBhdGgpOwogICAgaWYgKHJvb3RQcm9wZXJ0eSAhPT0gcGF0aCkgewogICAgICBsZXQgZXZlbnROYW1lID0gUG9seW1lci5DYXNlTWFwLmNhbWVsVG9EYXNoQ2FzZShyb290UHJvcGVydHkpICsgJy1jaGFuZ2VkJzsKICAgICAgZGlzcGF0Y2hOb3RpZnlFdmVudChpbnN0LCBldmVudE5hbWUsIHByb3BzW3BhdGhdLCBwYXRoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvKioKICAgKiBEaXNwYXRjaGVzIHtwcm9wZXJ0eX0tY2hhbmdlZCBldmVudHMgdG8gaW5kaWNhdGUgYSBwcm9wZXJ0eSAob3IgcGF0aCkKICAgKiBjaGFuZ2VkLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGZpcmUgdGhlIGV2ZW50CiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gc2VuZCAoJ3twcm9wZXJ0eX0tY2hhbmdlZCcpCiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGNoYW5nZWQgcHJvcGVydHkKICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IHBhdGggSWYgYSBzdWItcGF0aCBvZiB0aGlzIHByb3BlcnR5IGNoYW5nZWQsIHRoZSBwYXRoCiAgICogICB0aGF0IGNoYW5nZWQgKG9wdGlvbmFsKS4KICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9CiAgICovCiAgZnVuY3Rpb24gZGlzcGF0Y2hOb3RpZnlFdmVudChpbnN0LCBldmVudE5hbWUsIHZhbHVlLCBwYXRoKSB7CiAgICBsZXQgZGV0YWlsID0gewogICAgICB2YWx1ZTogdmFsdWUsCiAgICAgIHF1ZXVlUHJvcGVydHk6IHRydWUKICAgIH07CiAgICBpZiAocGF0aCkgewogICAgICBkZXRhaWwucGF0aCA9IHBhdGg7CiAgICB9CiAgICAvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8oaW5zdCkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7IGRldGFpbCB9KSk7CiAgfQoKICAvKioKICAgKiBJbXBsZW1lbnRzIHRoZSAibm90aWZ5IiBlZmZlY3QuCiAgICoKICAgKiBEaXNwYXRjaGVzIGEgbm9uLWJ1YmJsaW5nIGV2ZW50IG5hbWVkIGBpbmZvLmV2ZW50TmFtZWAgb24gdGhlIGluc3RhbmNlCiAgICogd2l0aCBhIGRldGFpbCBvYmplY3QgY29udGFpbmluZyB0aGUgbmV3IGB2YWx1ZWAuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gez99IGluZm8gRWZmZWN0IG1ldGFkYXRhCiAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5Ob3RpZnlFZmZlY3QoaW5zdCwgcHJvcGVydHksIHByb3BzLCBvbGRQcm9wcywgaW5mbywgaGFzUGF0aHMpIHsKICAgIGxldCByb290UHJvcGVydHkgPSBoYXNQYXRocyA/IFBvbHltZXIuUGF0aC5yb290KHByb3BlcnR5KSA6IHByb3BlcnR5OwogICAgbGV0IHBhdGggPSByb290UHJvcGVydHkgIT0gcHJvcGVydHkgPyBwcm9wZXJ0eSA6IG51bGw7CiAgICBsZXQgdmFsdWUgPSBwYXRoID8gUG9seW1lci5QYXRoLmdldChpbnN0LCBwYXRoKSA6IGluc3QuX19kYXRhW3Byb3BlcnR5XTsKICAgIGlmIChwYXRoICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHsKICAgICAgdmFsdWUgPSBwcm9wc1twcm9wZXJ0eV07ICAvLyBzcGVjaWZpY2FsbHkgZm9yIC5zcGxpY2VzCiAgICB9CiAgICBkaXNwYXRjaE5vdGlmeUV2ZW50KGluc3QsIGluZm8uZXZlbnROYW1lLCB2YWx1ZSwgcGF0aCk7CiAgfQoKICAvKioKICAgKiBIYW5kbGVyIGZ1bmN0aW9uIGZvciAyLXdheSBub3RpZmljYXRpb24gZXZlbnRzLiBSZWNlaXZlcyBjb250ZXh0CiAgICogaW5mb3JtYXRpb24gY2FwdHVyZWQgaW4gdGhlIGBhZGROb3RpZnlMaXN0ZW5lcmAgY2xvc3VyZSBmcm9tIHRoZQogICAqIGBfX25vdGlmeUxpc3RlbmVyc2AgbWV0YWRhdGEuCiAgICoKICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgbm90aWZpZWQgcHJvcGVydHkgdG8gdGhlIGhvc3QgcHJvcGVydHkgb3IgcGF0aC4gIElmCiAgICogdGhlIGV2ZW50IGNvbnRhaW5lZCBwYXRoIGluZm9ybWF0aW9uLCB0cmFuc2xhdGUgdGhhdCBwYXRoIHRvIHRoZSBob3N0CiAgICogc2NvcGUncyBuYW1lIGZvciB0aGF0IHBhdGggZmlyc3QuCiAgICoKICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCBOb3RpZmljYXRpb24gZXZlbnQgKGUuZy4gJzxwcm9wZXJ0eT4tY2hhbmdlZCcpCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBIb3N0IGVsZW1lbnQgaW5zdGFuY2UgaGFuZGxpbmcgdGhlIG5vdGlmaWNhdGlvbiBldmVudAogICAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tUHJvcCBDaGlsZCBlbGVtZW50IHByb3BlcnR5IHRoYXQgd2FzIGJvdW5kCiAgICogQHBhcmFtIHtzdHJpbmd9IHRvUGF0aCBIb3N0IHByb3BlcnR5L3BhdGggdGhhdCB3YXMgYm91bmQKICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5lZ2F0ZSBXaGV0aGVyIHRoZSBiaW5kaW5nIHdhcyBuZWdhdGVkCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIGhhbmRsZU5vdGlmaWNhdGlvbihldmVudCwgaW5zdCwgZnJvbVByb3AsIHRvUGF0aCwgbmVnYXRlKSB7CiAgICBsZXQgdmFsdWU7CiAgICBsZXQgZGV0YWlsID0gLyoqIEB0eXBlIHtPYmplY3R9ICovKGV2ZW50LmRldGFpbCk7CiAgICBsZXQgZnJvbVBhdGggPSBkZXRhaWwgJiYgZGV0YWlsLnBhdGg7CiAgICBpZiAoZnJvbVBhdGgpIHsKICAgICAgdG9QYXRoID0gUG9seW1lci5QYXRoLnRyYW5zbGF0ZShmcm9tUHJvcCwgdG9QYXRoLCBmcm9tUGF0aCk7CiAgICAgIHZhbHVlID0gZGV0YWlsICYmIGRldGFpbC52YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlID0gZXZlbnQuY3VycmVudFRhcmdldFtmcm9tUHJvcF07CiAgICB9CiAgICB2YWx1ZSA9IG5lZ2F0ZSA/ICF2YWx1ZSA6IHZhbHVlOwogICAgaWYgKCFpbnN0W1RZUEVTLlJFQURfT05MWV0gfHwgIWluc3RbVFlQRVMuUkVBRF9PTkxZXVt0b1BhdGhdKSB7CiAgICAgIGlmIChpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodG9QYXRoLCB2YWx1ZSwgdHJ1ZSwgQm9vbGVhbihmcm9tUGF0aCkpCiAgICAgICAgJiYgKCFkZXRhaWwgfHwgIWRldGFpbC5xdWV1ZVByb3BlcnR5KSkgewogICAgICAgIGluc3QuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8qKgogICAqIEltcGxlbWVudHMgdGhlICJyZWZsZWN0IiBlZmZlY3QuCiAgICoKICAgKiBTZXRzIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYGluZm8uYXR0ck5hbWVgIHRvIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZS4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHRoZSBlZmZlY3Qgd2lsbCBiZSBydW4gb24KICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiBwcm9wZXJ0eQogICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgY3VycmVudCBwcm9wZXJ0eSBjaGFuZ2VzCiAgICogQHBhcmFtIHtPYmplY3R9IG9sZFByb3BzIEJhZyBvZiBwcmV2aW91cyB2YWx1ZXMgZm9yIGNoYW5nZWQgcHJvcGVydGllcwogICAqIEBwYXJhbSB7P30gaW5mbyBFZmZlY3QgbWV0YWRhdGEKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcnVuUmVmbGVjdEVmZmVjdChpbnN0LCBwcm9wZXJ0eSwgcHJvcHMsIG9sZFByb3BzLCBpbmZvKSB7CiAgICBsZXQgdmFsdWUgPSBpbnN0Ll9fZGF0YVtwcm9wZXJ0eV07CiAgICBpZiAoUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlKSB7CiAgICAgIHZhbHVlID0gUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlKHZhbHVlLCBpbmZvLmF0dHJOYW1lLCAnYXR0cmlidXRlJywgLyoqIEB0eXBlIHtOb2RlfSAqLyhpbnN0KSk7CiAgICB9CiAgICBpbnN0Ll9wcm9wZXJ0eVRvQXR0cmlidXRlKHByb3BlcnR5LCBpbmZvLmF0dHJOYW1lLCB2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBSdW5zICJjb21wdXRlZCIgZWZmZWN0cyBmb3IgYSBzZXQgb2YgY2hhbmdlZCBwcm9wZXJ0aWVzLgogICAqCiAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIHRoZSBnZW5lcmljIGBydW5FZmZlY3RzYCBtZXRob2QgaW4gdGhhdCBpdAogICAqIGNvbnRpbnVlcyB0byBydW4gY29tcHV0ZWQgZWZmZWN0cyBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIGVhY2ggcGFzcyB1bnRpbAogICAqIHRoZXJlIGFyZSBubyBtb3JlIG5ld2x5IGNvbXB1dGVkIHByb3BlcnRpZXMuICBUaGlzIGVuc3VyZXMgdGhhdCBhbGwKICAgKiBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSBjb21wdXRlZCBieSB0aGUgaW5pdGlhbCBzZXQgb2YgY2hhbmdlcyBhcmUKICAgKiBjb21wdXRlZCBiZWZvcmUgb3RoZXIgZWZmZWN0cyAoYmluZGluZyBwcm9wYWdhdGlvbiwgb2JzZXJ2ZXJzLCBhbmQgbm90aWZ5KQogICAqIHJ1bi4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHRoZSBlZmZlY3Qgd2lsbCBiZSBydW4gb24KICAgKiBAcGFyYW0geyFPYmplY3R9IGNoYW5nZWRQcm9wcyBCYWcgb2YgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHshT2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc1BhdGhzIFRydWUgd2l0aCBgcHJvcHNgIGNvbnRhaW5zIG9uZSBvciBtb3JlIHBhdGhzCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1bkNvbXB1dGVkRWZmZWN0cyhpbnN0LCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocykgewogICAgbGV0IGNvbXB1dGVFZmZlY3RzID0gaW5zdFtUWVBFUy5DT01QVVRFXTsKICAgIGlmIChjb21wdXRlRWZmZWN0cykgewogICAgICBsZXQgaW5wdXRQcm9wcyA9IGNoYW5nZWRQcm9wczsKICAgICAgd2hpbGUgKHJ1bkVmZmVjdHMoaW5zdCwgY29tcHV0ZUVmZmVjdHMsIGlucHV0UHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocykpIHsKICAgICAgICBPYmplY3QuYXNzaWduKG9sZFByb3BzLCBpbnN0Ll9fZGF0YU9sZCk7CiAgICAgICAgT2JqZWN0LmFzc2lnbihjaGFuZ2VkUHJvcHMsIGluc3QuX19kYXRhUGVuZGluZyk7CiAgICAgICAgaW5wdXRQcm9wcyA9IGluc3QuX19kYXRhUGVuZGluZzsKICAgICAgICBpbnN0Ll9fZGF0YVBlbmRpbmcgPSBudWxsOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBJbXBsZW1lbnRzIHRoZSAiY29tcHV0ZWQgcHJvcGVydHkiIGVmZmVjdCBieSBydW5uaW5nIHRoZSBtZXRob2Qgd2l0aCB0aGUKICAgKiB2YWx1ZXMgb2YgdGhlIGFyZ3VtZW50cyBzcGVjaWZpZWQgaW4gdGhlIGBpbmZvYCBvYmplY3QgYW5kIHNldHRpbmcgdGhlCiAgICogcmV0dXJuIHZhbHVlIHRvIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBzcGVjaWZpZWQuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gez99IGluZm8gRWZmZWN0IG1ldGFkYXRhCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1bkNvbXB1dGVkRWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8pIHsKICAgIGxldCByZXN1bHQgPSBydW5NZXRob2RFZmZlY3QoaW5zdCwgcHJvcGVydHksIHByb3BzLCBvbGRQcm9wcywgaW5mbyk7CiAgICBsZXQgY29tcHV0ZWRQcm9wID0gaW5mby5tZXRob2RJbmZvOwogICAgaWYgKGluc3QuX19kYXRhSGFzQWNjZXNzb3IgJiYgaW5zdC5fX2RhdGFIYXNBY2Nlc3Nvcltjb21wdXRlZFByb3BdKSB7CiAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eShjb21wdXRlZFByb3AsIHJlc3VsdCwgdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBpbnN0W2NvbXB1dGVkUHJvcF0gPSByZXN1bHQ7CiAgICB9CiAgfQoKICAvKioKICAgKiBDb21wdXRlcyBwYXRoIGNoYW5nZXMgYmFzZWQgb24gcGF0aCBsaW5rcyBzZXQgdXAgdXNpbmcgdGhlIGBsaW5rUGF0aHNgCiAgICogQVBJLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2Ugd2hvc2UgcHJvcHMgYXJlIGNoYW5naW5nCiAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8KHN0cmluZ3xudW1iZXIpPn0gcGF0aCBQYXRoIHRoYXQgaGFzIGNoYW5nZWQKICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIG9mIGNoYW5nZWQgcGF0aAogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBjb21wdXRlTGlua2VkUGF0aHMoaW5zdCwgcGF0aCwgdmFsdWUpIHsKICAgIGxldCBsaW5rcyA9IGluc3QuX19kYXRhTGlua2VkUGF0aHM7CiAgICBpZiAobGlua3MpIHsKICAgICAgbGV0IGxpbms7CiAgICAgIGZvciAobGV0IGEgaW4gbGlua3MpIHsKICAgICAgICBsZXQgYiA9IGxpbmtzW2FdOwogICAgICAgIGlmIChQb2x5bWVyLlBhdGguaXNEZXNjZW5kYW50KGEsIHBhdGgpKSB7CiAgICAgICAgICBsaW5rID0gUG9seW1lci5QYXRoLnRyYW5zbGF0ZShhLCBiLCBwYXRoKTsKICAgICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChsaW5rLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlIGlmIChQb2x5bWVyLlBhdGguaXNEZXNjZW5kYW50KGIsIHBhdGgpKSB7CiAgICAgICAgICBsaW5rID0gUG9seW1lci5QYXRoLnRyYW5zbGF0ZShiLCBhLCBwYXRoKTsKICAgICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChsaW5rLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLyAtLSBiaW5kaW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogIC8qKgogICAqIEFkZHMgYmluZGluZyBtZXRhZGF0YSB0byB0aGUgY3VycmVudCBgbm9kZUluZm9gLCBhbmQgYmluZGluZyBlZmZlY3RzCiAgICogZm9yIGFsbCBwYXJ0IGRlcGVuZGVuY2llcyB0byBgdGVtcGxhdGVJbmZvYC4KICAgKgogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yIENsYXNzIHRoYXQgYF9wYXJzZVRlbXBsYXRlYCBpcyBjdXJyZW50bHkKICAgKiAgIHJ1bm5pbmcgb24KICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICogQHBhcmFtIHtOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZSBub2RlCiAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmQgQmluZGluZyBraW5kLCBlaXRoZXIgJ3Byb3BlcnR5JywgJ2F0dHJpYnV0ZScsIG9yICd0ZXh0JwogICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgVGFyZ2V0IHByb3BlcnR5IG5hbWUKICAgKiBAcGFyYW0geyFBcnJheTwhQmluZGluZ1BhcnQ+fSBwYXJ0cyBBcnJheSBvZiBiaW5kaW5nIHBhcnQgbWV0YWRhdGEKICAgKiBAcGFyYW0ge3N0cmluZz19IGxpdGVyYWwgTGl0ZXJhbCB0ZXh0IHN1cnJvdW5kaW5nIGJpbmRpbmcgcGFydHMgKHNwZWNpZmllZAogICAqICAgb25seSBmb3IgJ3Byb3BlcnR5JyBiaW5kaW5ncywgc2luY2UgdGhlc2UgbXVzdCBiZSBpbml0aWFsaXplZCBhcyBwYXJ0CiAgICogICBvZiBib290LXVwKQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBhZGRCaW5kaW5nKGNvbnN0cnVjdG9yLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvLCBraW5kLCB0YXJnZXQsIHBhcnRzLCBsaXRlcmFsKSB7CiAgICAvLyBDcmVhdGUgYmluZGluZyBtZXRhZGF0YSBhbmQgYWRkIHRvIG5vZGVJbmZvCiAgICBub2RlSW5mby5iaW5kaW5ncyA9IG5vZGVJbmZvLmJpbmRpbmdzIHx8IFtdOwogICAgbGV0IC8qKiBCaW5kaW5nICovIGJpbmRpbmcgPSB7IGtpbmQsIHRhcmdldCwgcGFydHMsIGxpdGVyYWwsIGlzQ29tcG91bmQ6IChwYXJ0cy5sZW5ndGggIT09IDEpIH07CiAgICBub2RlSW5mby5iaW5kaW5ncy5wdXNoKGJpbmRpbmcpOwogICAgLy8gQWRkIGxpc3RlbmVyIGluZm8gdG8gYmluZGluZyBtZXRhZGF0YQogICAgaWYgKHNob3VsZEFkZExpc3RlbmVyKGJpbmRpbmcpKSB7CiAgICAgIGxldCB7ZXZlbnQsIG5lZ2F0ZX0gPSBiaW5kaW5nLnBhcnRzWzBdOwogICAgICBiaW5kaW5nLmxpc3RlbmVyRXZlbnQgPSBldmVudCB8fCAoQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UodGFyZ2V0KSArICctY2hhbmdlZCcpOwogICAgICBiaW5kaW5nLmxpc3RlbmVyTmVnYXRlID0gbmVnYXRlOwogICAgfQogICAgLy8gQWRkICJwcm9wYWdhdGUiIHByb3BlcnR5IGVmZmVjdHMgdG8gdGVtcGxhdGVJbmZvCiAgICBsZXQgaW5kZXggPSB0ZW1wbGF0ZUluZm8ubm9kZUluZm9MaXN0Lmxlbmd0aDsKICAgIGZvciAobGV0IGk9MDsgaTxiaW5kaW5nLnBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGxldCBwYXJ0ID0gYmluZGluZy5wYXJ0c1tpXTsKICAgICAgcGFydC5jb21wb3VuZEluZGV4ID0gaTsKICAgICAgYWRkRWZmZWN0Rm9yQmluZGluZ1BhcnQoY29uc3RydWN0b3IsIHRlbXBsYXRlSW5mbywgYmluZGluZywgcGFydCwgaW5kZXgpOwogICAgfQogIH0KCiAgLyoqCiAgICogQWRkcyBwcm9wZXJ0eSBlZmZlY3RzIHRvIHRoZSBnaXZlbiBgdGVtcGxhdGVJbmZvYCBmb3IgdGhlIGdpdmVuIGJpbmRpbmcKICAgKiBwYXJ0LgogICAqCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RydWN0b3IgQ2xhc3MgdGhhdCBgX3BhcnNlVGVtcGxhdGVgIGlzIGN1cnJlbnRseQogICAqICAgcnVubmluZyBvbgogICAqIEBwYXJhbSB7VGVtcGxhdGVJbmZvfSB0ZW1wbGF0ZUluZm8gVGVtcGxhdGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUKICAgKiBAcGFyYW0geyFCaW5kaW5nfSBiaW5kaW5nIEJpbmRpbmcgbWV0YWRhdGEKICAgKiBAcGFyYW0geyFCaW5kaW5nUGFydH0gcGFydCBCaW5kaW5nIHBhcnQgbWV0YWRhdGEKICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggaW50byBgbm9kZUluZm9MaXN0YCBmb3IgdGhpcyBub2RlCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBmdW5jdGlvbiBhZGRFZmZlY3RGb3JCaW5kaW5nUGFydChjb25zdHJ1Y3RvciwgdGVtcGxhdGVJbmZvLCBiaW5kaW5nLCBwYXJ0LCBpbmRleCkgewogICAgaWYgKCFwYXJ0LmxpdGVyYWwpIHsKICAgICAgaWYgKGJpbmRpbmcua2luZCA9PT0gJ2F0dHJpYnV0ZScgJiYgYmluZGluZy50YXJnZXRbMF0gPT09ICctJykgewogICAgICAgIGNvbnNvbGUud2FybignQ2Fubm90IHNldCBhdHRyaWJ1dGUgJyArIGJpbmRpbmcudGFyZ2V0ICsKICAgICAgICAgICcgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpOwogICAgICB9IGVsc2UgewogICAgICAgIGxldCBkZXBlbmRlbmNpZXMgPSBwYXJ0LmRlcGVuZGVuY2llczsKICAgICAgICBsZXQgaW5mbyA9IHsgaW5kZXgsIGJpbmRpbmcsIHBhcnQsIGV2YWx1YXRvcjogY29uc3RydWN0b3IgfTsKICAgICAgICBmb3IgKGxldCBqPTA7IGo8ZGVwZW5kZW5jaWVzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICBsZXQgdHJpZ2dlciA9IGRlcGVuZGVuY2llc1tqXTsKICAgICAgICAgIGlmICh0eXBlb2YgdHJpZ2dlciA9PSAnc3RyaW5nJykgewogICAgICAgICAgICB0cmlnZ2VyID0gcGFyc2VBcmcodHJpZ2dlcik7CiAgICAgICAgICAgIHRyaWdnZXIud2lsZGNhcmQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgY29uc3RydWN0b3IuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QodGVtcGxhdGVJbmZvLCB0cmlnZ2VyLnJvb3RQcm9wZXJ0eSwgewogICAgICAgICAgICBmbjogcnVuQmluZGluZ0VmZmVjdCwKICAgICAgICAgICAgaW5mbywgdHJpZ2dlcgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBJbXBsZW1lbnRzIHRoZSAiYmluZGluZyIgKHByb3BlcnR5L3BhdGggYmluZGluZykgZWZmZWN0LgogICAqCiAgICogTm90ZSB0aGF0IGJpbmRpbmcgc3ludGF4IGlzIG92ZXJyaWRhYmxlIHZpYSBgX3BhcnNlQmluZGluZ3NgIGFuZAogICAqIGBfZXZhbHVhdGVCaW5kaW5nYC4gIFRoaXMgbWV0aG9kIHdpbGwgY2FsbCBgX2V2YWx1YXRlQmluZGluZ2AgZm9yIGFueQogICAqIG5vbi1saXRlcmFsIHBhcnRzIHJldHVybmVkIGZyb20gYF9wYXJzZUJpbmRpbmdzYC4gIEhvd2V2ZXIsCiAgICogdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgX3BhdGhfIGJpbmRpbmdzIHZpYSBjdXN0b20gYmluZGluZyBwYXJ0cywKICAgKiBhcyB0aGlzIGlzIHNwZWNpZmljIHRvIFBvbHltZXIncyBwYXRoIGJpbmRpbmcgc3ludGF4LgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2UgdGhlIGVmZmVjdCB3aWxsIGJlIHJ1biBvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gez99IGluZm8gRWZmZWN0IG1ldGFkYXRhCiAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEBwYXJhbSB7QXJyYXl9IG5vZGVMaXN0IExpc3Qgb2Ygbm9kZXMgYXNzb2NpYXRlZCB3aXRoIGBub2RlSW5mb0xpc3RgIHRlbXBsYXRlCiAgICogICBtZXRhZGF0YQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5CaW5kaW5nRWZmZWN0KGluc3QsIHBhdGgsIHByb3BzLCBvbGRQcm9wcywgaW5mbywgaGFzUGF0aHMsIG5vZGVMaXN0KSB7CiAgICBsZXQgbm9kZSA9IG5vZGVMaXN0W2luZm8uaW5kZXhdOwogICAgbGV0IGJpbmRpbmcgPSBpbmZvLmJpbmRpbmc7CiAgICBsZXQgcGFydCA9IGluZm8ucGFydDsKICAgIC8vIFN1YnBhdGggbm90aWZpY2F0aW9uOiB0cmFuc2Zvcm0gcGF0aCBhbmQgc2V0IHRvIGNsaWVudAogICAgLy8gZS5nLjogZm9vPSJ7e29iai5zdWJ9fSIsIHBhdGg6ICdvYmouc3ViLnByb3AnLCBzZXQgJ2Zvby5wcm9wJz1vYmouc3ViLnByb3AKICAgIGlmIChoYXNQYXRocyAmJiBwYXJ0LnNvdXJjZSAmJiAocGF0aC5sZW5ndGggPiBwYXJ0LnNvdXJjZS5sZW5ndGgpICYmCiAgICAgICAgKGJpbmRpbmcua2luZCA9PSAncHJvcGVydHknKSAmJiAhYmluZGluZy5pc0NvbXBvdW5kICYmCiAgICAgICAgbm9kZS5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50ICYmCiAgICAgICAgbm9kZS5fX2RhdGFIYXNBY2Nlc3NvciAmJiBub2RlLl9fZGF0YUhhc0FjY2Vzc29yW2JpbmRpbmcudGFyZ2V0XSkgewogICAgICBsZXQgdmFsdWUgPSBwcm9wc1twYXRoXTsKICAgICAgcGF0aCA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUocGFydC5zb3VyY2UsIGJpbmRpbmcudGFyZ2V0LCBwYXRoKTsKICAgICAgaWYgKG5vZGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwYXRoLCB2YWx1ZSwgZmFsc2UsIHRydWUpKSB7CiAgICAgICAgaW5zdC5fZW5xdWV1ZUNsaWVudChub2RlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbGV0IHZhbHVlID0gaW5mby5ldmFsdWF0b3IuX2V2YWx1YXRlQmluZGluZyhpbnN0LCBwYXJ0LCBwYXRoLCBwcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgLy8gUHJvcGFnYXRlIHZhbHVlIHRvIGNoaWxkCiAgICAgIGFwcGx5QmluZGluZ1ZhbHVlKGluc3QsIG5vZGUsIGJpbmRpbmcsIHBhcnQsIHZhbHVlKTsKICAgIH0KICB9CgogIC8qKgogICAqIFNldHMgdGhlIHZhbHVlIGZvciBhbiAiYmluZGluZyIgKGJpbmRpbmcpIGVmZmVjdCB0byBhIG5vZGUsCiAgICogZWl0aGVyIGFzIGEgcHJvcGVydHkgb3IgYXR0cmlidXRlLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2Ugb3duaW5nIHRoZSBiaW5kaW5nIGVmZmVjdAogICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUYXJnZXQgbm9kZSBmb3IgYmluZGluZwogICAqIEBwYXJhbSB7IUJpbmRpbmd9IGJpbmRpbmcgQmluZGluZyBtZXRhZGF0YQogICAqIEBwYXJhbSB7IUJpbmRpbmdQYXJ0fSBwYXJ0IEJpbmRpbmcgcGFydCBtZXRhZGF0YQogICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0CiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIGFwcGx5QmluZGluZ1ZhbHVlKGluc3QsIG5vZGUsIGJpbmRpbmcsIHBhcnQsIHZhbHVlKSB7CiAgICB2YWx1ZSA9IGNvbXB1dGVCaW5kaW5nVmFsdWUobm9kZSwgdmFsdWUsIGJpbmRpbmcsIHBhcnQpOwogICAgaWYgKFBvbHltZXIuc2FuaXRpemVET01WYWx1ZSkgewogICAgICB2YWx1ZSA9IFBvbHltZXIuc2FuaXRpemVET01WYWx1ZSh2YWx1ZSwgYmluZGluZy50YXJnZXQsIGJpbmRpbmcua2luZCwgbm9kZSk7CiAgICB9CiAgICBpZiAoYmluZGluZy5raW5kID09ICdhdHRyaWJ1dGUnKSB7CiAgICAgIC8vIEF0dHJpYnV0ZSBiaW5kaW5nCiAgICAgIGluc3QuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8obm9kZSksIHZhbHVlLCBiaW5kaW5nLnRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICAvLyBQcm9wZXJ0eSBiaW5kaW5nCiAgICAgIGxldCBwcm9wID0gYmluZGluZy50YXJnZXQ7CiAgICAgIGlmIChub2RlLl9faXNQcm9wZXJ0eUVmZmVjdHNDbGllbnQgJiYKICAgICAgICAgIG5vZGUuX19kYXRhSGFzQWNjZXNzb3IgJiYgbm9kZS5fX2RhdGFIYXNBY2Nlc3Nvcltwcm9wXSkgewogICAgICAgIGlmICghbm9kZVtUWVBFUy5SRUFEX09OTFldIHx8ICFub2RlW1RZUEVTLlJFQURfT05MWV1bcHJvcF0pIHsKICAgICAgICAgIGlmIChub2RlLl9zZXRQZW5kaW5nUHJvcGVydHkocHJvcCwgdmFsdWUpKSB7CiAgICAgICAgICAgIGluc3QuX2VucXVldWVDbGllbnQobm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgIHsKICAgICAgICBpbnN0Ll9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShub2RlLCBwcm9wLCB2YWx1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8qKgogICAqIFRyYW5zZm9ybXMgYW4gImJpbmRpbmciIGVmZmVjdCB2YWx1ZSBiYXNlZCBvbiBjb21wb3VuZCAmIG5lZ2F0aW9uCiAgICogZWZmZWN0IG1ldGFkYXRhLCBhcyB3ZWxsIGFzIGhhbmRsaW5nIGZvciBzcGVjaWFsLWNhc2UgcHJvcGVydGllcwogICAqCiAgICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgdGhlIHZhbHVlIHdpbGwgYmUgc2V0IHRvCiAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXQKICAgKiBAcGFyYW0geyFCaW5kaW5nfSBiaW5kaW5nIEJpbmRpbmcgbWV0YWRhdGEKICAgKiBAcGFyYW0geyFCaW5kaW5nUGFydH0gcGFydCBCaW5kaW5nIHBhcnQgbWV0YWRhdGEKICAgKiBAcmV0dXJuIHsqfSBUcmFuc2Zvcm1lZCB2YWx1ZSB0byBzZXQKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIGNvbXB1dGVCaW5kaW5nVmFsdWUobm9kZSwgdmFsdWUsIGJpbmRpbmcsIHBhcnQpIHsKICAgIGlmIChiaW5kaW5nLmlzQ29tcG91bmQpIHsKICAgICAgbGV0IHN0b3JhZ2UgPSBub2RlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtiaW5kaW5nLnRhcmdldF07CiAgICAgIHN0b3JhZ2VbcGFydC5jb21wb3VuZEluZGV4XSA9IHZhbHVlOwogICAgICB2YWx1ZSA9IHN0b3JhZ2Uuam9pbignJyk7CiAgICB9CiAgICBpZiAoYmluZGluZy5raW5kICE9PSAnYXR0cmlidXRlJykgewogICAgICAvLyBTb21lIGJyb3dzZXJzIHNlcmlhbGl6ZSBgdW5kZWZpbmVkYCB0byBgInVuZGVmaW5lZCJgCiAgICAgIGlmIChiaW5kaW5nLnRhcmdldCA9PT0gJ3RleHRDb250ZW50JyB8fAogICAgICAgICAgKGJpbmRpbmcudGFyZ2V0ID09PSAndmFsdWUnICYmCiAgICAgICAgICAgIChub2RlLmxvY2FsTmFtZSA9PT0gJ2lucHV0JyB8fCBub2RlLmxvY2FsTmFtZSA9PT0gJ3RleHRhcmVhJykpKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PSB1bmRlZmluZWQgPyAnJyA6IHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgYSBiaW5kaW5nJ3MgbWV0YWRhdGEgbWVldHMgYWxsIHRoZSByZXF1aXJlbWVudHMgdG8gYWxsb3cKICAgKiAyLXdheSBiaW5kaW5nLCBhbmQgdGhlcmVmb3JlIGEgYDxwcm9wZXJ0eT4tY2hhbmdlZGAgZXZlbnQgbGlzdGVuZXIgc2hvdWxkIGJlCiAgICogYWRkZWQ6CiAgICogLSB1c2VkIGN1cmx5IGJyYWNlcwogICAqIC0gaXMgYSBwcm9wZXJ0eSAobm90IGF0dHJpYnV0ZSkgYmluZGluZwogICAqIC0gaXMgbm90IGEgdGV4dENvbnRlbnQgYmluZGluZwogICAqIC0gaXMgbm90IGNvbXBvdW5kCiAgICoKICAgKiBAcGFyYW0geyFCaW5kaW5nfSBiaW5kaW5nIEJpbmRpbmcgbWV0YWRhdGEKICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIDItd2F5IGxpc3RlbmVyIHNob3VsZCBiZSBhZGRlZAogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gc2hvdWxkQWRkTGlzdGVuZXIoYmluZGluZykgewogICAgcmV0dXJuIEJvb2xlYW4oYmluZGluZy50YXJnZXQpICYmCiAgICAgICAgICAgYmluZGluZy5raW5kICE9ICdhdHRyaWJ1dGUnICYmCiAgICAgICAgICAgYmluZGluZy5raW5kICE9ICd0ZXh0JyAmJgogICAgICAgICAgICFiaW5kaW5nLmlzQ29tcG91bmQgJiYKICAgICAgICAgICBiaW5kaW5nLnBhcnRzWzBdLm1vZGUgPT09ICd7JzsKICB9CgogIC8qKgogICAqIFNldHVwIGNvbXBvdW5kIGJpbmRpbmcgc3RvcmFnZSBzdHJ1Y3R1cmVzLCBub3RpZnkgbGlzdGVuZXJzLCBhbmQgZGF0YUhvc3QKICAgKiByZWZlcmVuY2VzIG9udG8gdGhlIGJvdW5kIG5vZGVMaXN0LgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBJbnN0YW5jZSB0aGF0IGJhcyBiZWVuIHByZXZpb3VzbHkgYm91bmQKICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHNldHVwQmluZGluZ3MoaW5zdCwgdGVtcGxhdGVJbmZvKSB7CiAgICAvLyBTZXR1cCBjb21wb3VuZCBzdG9yYWdlLCBkYXRhSG9zdCwgYW5kIG5vdGlmeSBsaXN0ZW5lcnMKICAgIGxldCB7bm9kZUxpc3QsIG5vZGVJbmZvTGlzdH0gPSB0ZW1wbGF0ZUluZm87CiAgICBpZiAobm9kZUluZm9MaXN0Lmxlbmd0aCkgewogICAgICBmb3IgKGxldCBpPTA7IGkgPCBub2RlSW5mb0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgaW5mbyA9IG5vZGVJbmZvTGlzdFtpXTsKICAgICAgICBsZXQgbm9kZSA9IG5vZGVMaXN0W2ldOwogICAgICAgIGxldCBiaW5kaW5ncyA9IGluZm8uYmluZGluZ3M7CiAgICAgICAgaWYgKGJpbmRpbmdzKSB7CiAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8YmluZGluZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgbGV0IGJpbmRpbmcgPSBiaW5kaW5nc1tpXTsKICAgICAgICAgICAgc2V0dXBDb21wb3VuZFN0b3JhZ2Uobm9kZSwgYmluZGluZyk7CiAgICAgICAgICAgIGFkZE5vdGlmeUxpc3RlbmVyKG5vZGUsIGluc3QsIGJpbmRpbmcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBub2RlLl9fZGF0YUhvc3QgPSBpbnN0OwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBJbml0aWFsaXplcyBgX19kYXRhQ29tcG91bmRTdG9yYWdlYCBsb2NhbCBzdG9yYWdlIG9uIGEgYm91bmQgbm9kZSB3aXRoCiAgICogaW5pdGlhbCBsaXRlcmFsIGRhdGEgZm9yIGNvbXBvdW5kIGJpbmRpbmdzLCBhbmQgc2V0cyB0aGUgam9pbmVkCiAgICogbGl0ZXJhbCBwYXJ0cyB0byB0aGUgYm91bmQgcHJvcGVydHkuCiAgICoKICAgKiBXaGVuIGNoYW5nZXMgdG8gY29tcG91bmQgcGFydHMgb2NjdXIsIHRoZXkgYXJlIGZpcnN0IHNldCBpbnRvIHRoZSBjb21wb3VuZAogICAqIHN0b3JhZ2UgYXJyYXkgZm9yIHRoYXQgcHJvcGVydHksIGFuZCB0aGVuIHRoZSBhcnJheSBpcyBqb2luZWQgdG8gcmVzdWx0IGluCiAgICogdGhlIGZpbmFsIHZhbHVlIHNldCB0byB0aGUgcHJvcGVydHkvYXR0cmlidXRlLgogICAqCiAgICogQHBhcmFtIHtOb2RlfSBub2RlIEJvdW5kIG5vZGUgdG8gaW5pdGlhbGl6ZQogICAqIEBwYXJhbSB7QmluZGluZ30gYmluZGluZyBCaW5kaW5nIG1ldGFkYXRhCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHNldHVwQ29tcG91bmRTdG9yYWdlKG5vZGUsIGJpbmRpbmcpIHsKICAgIGlmIChiaW5kaW5nLmlzQ29tcG91bmQpIHsKICAgICAgLy8gQ3JlYXRlIGNvbXBvdW5kIHN0b3JhZ2UgbWFwCiAgICAgIGxldCBzdG9yYWdlID0gbm9kZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2UgfHwKICAgICAgICAobm9kZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2UgPSB7fSk7CiAgICAgIGxldCBwYXJ0cyA9IGJpbmRpbmcucGFydHM7CiAgICAgIC8vIENvcHkgbGl0ZXJhbHMgZnJvbSBwYXJ0cyBpbnRvIHN0b3JhZ2UgZm9yIHRoaXMgYmluZGluZwogICAgICBsZXQgbGl0ZXJhbHMgPSBuZXcgQXJyYXkocGFydHMubGVuZ3RoKTsKICAgICAgZm9yIChsZXQgaj0wOyBqPHBhcnRzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgbGl0ZXJhbHNbal0gPSBwYXJ0c1tqXS5saXRlcmFsOwogICAgICB9CiAgICAgIGxldCB0YXJnZXQgPSBiaW5kaW5nLnRhcmdldDsKICAgICAgc3RvcmFnZVt0YXJnZXRdID0gbGl0ZXJhbHM7CiAgICAgIC8vIENvbmZpZ3VyZSBwcm9wZXJ0aWVzIHdpdGggdGhlaXIgbGl0ZXJhbCBwYXJ0cwogICAgICBpZiAoYmluZGluZy5saXRlcmFsICYmIGJpbmRpbmcua2luZCA9PSAncHJvcGVydHknKSB7CiAgICAgICAgbm9kZVt0YXJnZXRdID0gYmluZGluZy5saXRlcmFsOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBBZGRzIGEgMi13YXkgYmluZGluZyBub3RpZmljYXRpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIG5vZGUgc3BlY2lmaWVkCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gbm9kZSBDaGlsZCBlbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0bwogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgSG9zdCBlbGVtZW50IGluc3RhbmNlIHRvIGhhbmRsZSBub3RpZmljYXRpb24gZXZlbnQKICAgKiBAcGFyYW0ge0JpbmRpbmd9IGJpbmRpbmcgQmluZGluZyBtZXRhZGF0YQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBhZGROb3RpZnlMaXN0ZW5lcihub2RlLCBpbnN0LCBiaW5kaW5nKSB7CiAgICBpZiAoYmluZGluZy5saXN0ZW5lckV2ZW50KSB7CiAgICAgIGxldCBwYXJ0ID0gYmluZGluZy5wYXJ0c1swXTsKICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGJpbmRpbmcubGlzdGVuZXJFdmVudCwgZnVuY3Rpb24oZSkgewogICAgICAgIGhhbmRsZU5vdGlmaWNhdGlvbihlLCBpbnN0LCBiaW5kaW5nLnRhcmdldCwgcGFydC5zb3VyY2UsIHBhcnQubmVnYXRlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyAtLSBmb3IgbWV0aG9kLWJhc2VkIGVmZmVjdHMgKGNvbXBsZXhPYnNlcnZlciAmIGNvbXB1dGVkKSAtLS0tLS0tLS0tLS0tLQoKICAvKioKICAgKiBBZGRzIHByb3BlcnR5IGVmZmVjdHMgZm9yIGVhY2ggYXJndW1lbnQgaW4gdGhlIG1ldGhvZCBzaWduYXR1cmUgKGFuZAogICAqIG9wdGlvbmFsbHksIGZvciB0aGUgbWV0aG9kIG5hbWUgaWYgYGR5bmFtaWNgIGlzIHRydWUpIHRoYXQgY2FsbHMgdGhlCiAgICogcHJvdmlkZWQgZWZmZWN0IGZ1bmN0aW9uLgogICAqCiAgICogQHBhcmFtIHtFbGVtZW50IHwgT2JqZWN0fSBtb2RlbCBQcm90b3R5cGUgb3IgaW5zdGFuY2UKICAgKiBAcGFyYW0geyFNZXRob2RTaWduYXR1cmV9IHNpZyBNZXRob2Qgc2lnbmF0dXJlIG1ldGFkYXRhCiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVHlwZSBvZiBwcm9wZXJ0eSBlZmZlY3QgdG8gYWRkCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWZmZWN0Rm4gRnVuY3Rpb24gdG8gcnVuIHdoZW4gYXJndW1lbnRzIGNoYW5nZQogICAqIEBwYXJhbSB7Kj19IG1ldGhvZEluZm8gRWZmZWN0LXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGJlIGluY2x1ZGVkIGluCiAgICogICBtZXRob2QgZWZmZWN0IG1ldGFkYXRhCiAgICogQHBhcmFtIHtib29sZWFufE9iamVjdD19IGR5bmFtaWNGbiBCb29sZWFuIG9yIG9iamVjdCBtYXAgaW5kaWNhdGluZyB3aGV0aGVyCiAgICogICBtZXRob2QgbmFtZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGEgZGVwZW5kZW5jeSB0byB0aGUgZWZmZWN0LiBOb3RlLAogICAqICAgZGVmYXVsdHMgdG8gdHJ1ZSBpZiB0aGUgc2lnbmF0dXJlIGlzIHN0YXRpYyAoc2lnLnN0YXRpYyBpcyB0cnVlKS4KICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gY3JlYXRlTWV0aG9kRWZmZWN0KG1vZGVsLCBzaWcsIHR5cGUsIGVmZmVjdEZuLCBtZXRob2RJbmZvLCBkeW5hbWljRm4pIHsKICAgIGR5bmFtaWNGbiA9IHNpZy5zdGF0aWMgfHwgKGR5bmFtaWNGbiAmJgogICAgICAodHlwZW9mIGR5bmFtaWNGbiAhPT0gJ29iamVjdCcgfHwgZHluYW1pY0ZuW3NpZy5tZXRob2ROYW1lXSkpOwogICAgbGV0IGluZm8gPSB7CiAgICAgIG1ldGhvZE5hbWU6IHNpZy5tZXRob2ROYW1lLAogICAgICBhcmdzOiBzaWcuYXJncywKICAgICAgbWV0aG9kSW5mbywKICAgICAgZHluYW1pY0ZuCiAgICB9OwogICAgZm9yIChsZXQgaT0wLCBhcmc7IChpPHNpZy5hcmdzLmxlbmd0aCkgJiYgKGFyZz1zaWcuYXJnc1tpXSk7IGkrKykgewogICAgICBpZiAoIWFyZy5saXRlcmFsKSB7CiAgICAgICAgbW9kZWwuX2FkZFByb3BlcnR5RWZmZWN0KGFyZy5yb290UHJvcGVydHksIHR5cGUsIHsKICAgICAgICAgIGZuOiBlZmZlY3RGbiwgaW5mbzogaW5mbywgdHJpZ2dlcjogYXJnCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChkeW5hbWljRm4pIHsKICAgICAgbW9kZWwuX2FkZFByb3BlcnR5RWZmZWN0KHNpZy5tZXRob2ROYW1lLCB0eXBlLCB7CiAgICAgICAgZm46IGVmZmVjdEZuLCBpbmZvOiBpbmZvCiAgICAgIH0pOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2FsbHMgYSBtZXRob2Qgd2l0aCBhcmd1bWVudHMgbWFyc2hhbGVkIGZyb20gcHJvcGVydGllcyBvbiB0aGUgaW5zdGFuY2UKICAgKiBiYXNlZCBvbiB0aGUgbWV0aG9kIHNpZ25hdHVyZSBjb250YWluZWQgaW4gdGhlIGVmZmVjdCBtZXRhZGF0YS4KICAgKgogICAqIE11bHRpLXByb3BlcnR5IG9ic2VydmVycywgY29tcHV0ZWQgcHJvcGVydGllcywgYW5kIGlubGluZSBjb21wdXRpbmcKICAgKiBmdW5jdGlvbnMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGludm9rZSB0aGUgbWV0aG9kLCB0aGVuIHVzZSB0aGUgcmV0dXJuCiAgICogdmFsdWUgYWNjb3JkaW5nbHkuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gez99IGluZm8gRWZmZWN0IG1ldGFkYXRhCiAgICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIG1ldGhvZCBpbnZvY2F0aW9uCiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5NZXRob2RFZmZlY3QoaW5zdCwgcHJvcGVydHksIHByb3BzLCBvbGRQcm9wcywgaW5mbykgewogICAgLy8gSW5zdGFuY2VzIGNhbiBvcHRpb25hbGx5IGhhdmUgYSBfbWV0aG9kSG9zdCB3aGljaCBhbGxvd3MgcmVkaXJlY3Rpbmcgd2hlcmUKICAgIC8vIHRvIGZpbmQgbWV0aG9kcy4gQ3VycmVudGx5IHVzZWQgYnkgYHRlbXBsYXRpemVgLgogICAgbGV0IGNvbnRleHQgPSBpbnN0Ll9tZXRob2RIb3N0IHx8IGluc3Q7CiAgICBsZXQgZm4gPSBjb250ZXh0W2luZm8ubWV0aG9kTmFtZV07CiAgICBpZiAoZm4pIHsKICAgICAgbGV0IGFyZ3MgPSBpbnN0Ll9tYXJzaGFsQXJncyhpbmZvLmFyZ3MsIHByb3BlcnR5LCBwcm9wcyk7CiAgICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmdzKTsKICAgIH0gZWxzZSBpZiAoIWluZm8uZHluYW1pY0ZuKSB7CiAgICAgIGNvbnNvbGUud2FybignbWV0aG9kIGAnICsgaW5mby5tZXRob2ROYW1lICsgJ2Agbm90IGRlZmluZWQnKTsKICAgIH0KICB9CgogIGNvbnN0IGVtcHR5QXJyYXkgPSBbXTsKCiAgLy8gUmVndWxhciBleHByZXNzaW9ucyB1c2VkIGZvciBiaW5kaW5nCiAgY29uc3QgSURFTlQgID0gJyg/OicgKyAnW2EtekEtWl8kXVtcXHcuOiRcXC0qXSonICsgJyknOwogIGNvbnN0IE5VTUJFUiA9ICcoPzonICsgJ1stK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/JyArICcpJzsKICBjb25zdCBTUVVPVEVfU1RSSU5HID0gJyg/OicgKyAnXCcoPzpbXlwnXFxcXF18XFxcXC4pKlwnJyArICcpJzsKICBjb25zdCBEUVVPVEVfU1RSSU5HID0gJyg/OicgKyAnIig/OlteIlxcXFxdfFxcXFwuKSoiJyArICcpJzsKICBjb25zdCBTVFJJTkcgPSAnKD86JyArIFNRVU9URV9TVFJJTkcgKyAnfCcgKyBEUVVPVEVfU1RSSU5HICsgJyknOwogIGNvbnN0IEFSR1VNRU5UID0gJyg/OignICsgSURFTlQgKyAnfCcgKyBOVU1CRVIgKyAnfCcgKyAgU1RSSU5HICsgJylcXHMqJyArICcpJzsKICBjb25zdCBBUkdVTUVOVFMgPSAnKD86JyArIEFSR1VNRU5UICsgJyg/OixcXHMqJyArIEFSR1VNRU5UICsgJykqJyArICcpJzsKICBjb25zdCBBUkdVTUVOVF9MSVNUID0gJyg/OicgKyAnXFwoXFxzKicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoPzonICsgQVJHVU1FTlRTICsgJz8nICsgJyknICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcKVxccyonICsgJyknOwogIGNvbnN0IEJJTkRJTkcgPSAnKCcgKyBJREVOVCArICdcXHMqJyArIEFSR1VNRU5UX0xJU1QgKyAnPycgKyAnKSc7IC8vIEdyb3VwIDMKICBjb25zdCBPUEVOX0JSQUNLRVQgPSAnKFxcW1xcW3x7eyknICsgJ1xccyonOwogIGNvbnN0IENMT1NFX0JSQUNLRVQgPSAnKD86XV18fX0pJzsKICBjb25zdCBORUdBVEUgPSAnKD86KCEpXFxzKik/JzsgLy8gR3JvdXAgMgogIGNvbnN0IEVYUFJFU1NJT04gPSBPUEVOX0JSQUNLRVQgKyBORUdBVEUgKyBCSU5ESU5HICsgQ0xPU0VfQlJBQ0tFVDsKICBjb25zdCBiaW5kaW5nUmVnZXggPSBuZXcgUmVnRXhwKEVYUFJFU1NJT04sICJnIik7CgogIC8qKgogICAqIENyZWF0ZSBhIHN0cmluZyBmcm9tIGJpbmRpbmcgcGFydHMgb2YgYWxsIHRoZSBsaXRlcmFsIHBhcnRzCiAgICoKICAgKiBAcGFyYW0geyFBcnJheTxCaW5kaW5nUGFydD59IHBhcnRzIEFsbCBwYXJ0cyB0byBzdHJpbmdpZnkKICAgKiBAcmV0dXJuIHtzdHJpbmd9IFN0cmluZyBtYWRlIGZyb20gdGhlIGxpdGVyYWwgcGFydHMKICAgKi8KICBmdW5jdGlvbiBsaXRlcmFsRnJvbVBhcnRzKHBhcnRzKSB7CiAgICBsZXQgcyA9ICcnOwogICAgZm9yIChsZXQgaT0wOyBpPHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGxldCBsaXRlcmFsID0gcGFydHNbaV0ubGl0ZXJhbDsKICAgICAgcyArPSBsaXRlcmFsIHx8ICcnOwogICAgfQogICAgcmV0dXJuIHM7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYW4gZXhwcmVzc2lvbiBzdHJpbmcgZm9yIGEgbWV0aG9kIHNpZ25hdHVyZSwgYW5kIHJldHVybnMgYSBtZXRhZGF0YQogICAqIGRlc2NyaWJpbmcgdGhlIG1ldGhvZCBpbiB0ZXJtcyBvZiBgbWV0aG9kTmFtZWAsIGBzdGF0aWNgICh3aGV0aGVyIGFsbCB0aGUKICAgKiBhcmd1bWVudHMgYXJlIGxpdGVyYWxzKSwgYW5kIGFuIGFycmF5IG9mIGBhcmdzYAogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gcGFyc2UKICAgKiBAcmV0dXJuIHs/TWV0aG9kU2lnbmF0dXJlfSBUaGUgbWV0aG9kIG1ldGFkYXRhIG9iamVjdCBpZiBhIG1ldGhvZCBleHByZXNzaW9uIHdhcwogICAqICAgZm91bmQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYAogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcGFyc2VNZXRob2QoZXhwcmVzc2lvbikgewogICAgLy8gdHJpZXMgdG8gbWF0Y2ggdmFsaWQgamF2YXNjcmlwdCBwcm9wZXJ0eSBuYW1lcwogICAgbGV0IG0gPSBleHByZXNzaW9uLm1hdGNoKC8oW15cc10rPylcKChbXHNcU10qKVwpLyk7CiAgICBpZiAobSkgewogICAgICBsZXQgbWV0aG9kTmFtZSA9IG1bMV07CiAgICAgIGxldCBzaWcgPSB7IG1ldGhvZE5hbWUsIHN0YXRpYzogdHJ1ZSwgYXJnczogZW1wdHlBcnJheSB9OwogICAgICBpZiAobVsyXS50cmltKCkpIHsKICAgICAgICAvLyByZXBsYWNlIGVzY2FwZWQgY29tbWFzIHdpdGggY29tbWEgZW50aXR5LCBzcGxpdCBvbiB1bi1lc2NhcGVkIGNvbW1hcwogICAgICAgIGxldCBhcmdzID0gbVsyXS5yZXBsYWNlKC9cXCwvZywgJyZjb21tYTsnKS5zcGxpdCgnLCcpOwogICAgICAgIHJldHVybiBwYXJzZUFyZ3MoYXJncywgc2lnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gc2lnOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhbiBhcnJheSBvZiBhcmd1bWVudHMgYW5kIHNldHMgdGhlIGBhcmdzYCBwcm9wZXJ0eSBvZiB0aGUgc3VwcGxpZWQKICAgKiBzaWduYXR1cmUgbWV0YWRhdGEgb2JqZWN0LiBTZXRzIHRoZSBgc3RhdGljYCBwcm9wZXJ0eSB0byBmYWxzZSBpZiBhbnkKICAgKiBhcmd1bWVudCBpcyBhIG5vbi1saXRlcmFsLgogICAqCiAgICogQHBhcmFtIHshQXJyYXk8c3RyaW5nPn0gYXJnTGlzdCBBcnJheSBvZiBhcmd1bWVudCBuYW1lcwogICAqIEBwYXJhbSB7IU1ldGhvZFNpZ25hdHVyZX0gc2lnIE1ldGhvZCBzaWduYXR1cmUgbWV0YWRhdGEgb2JqZWN0CiAgICogQHJldHVybiB7IU1ldGhvZFNpZ25hdHVyZX0gVGhlIHVwZGF0ZWQgc2lnbmF0dXJlIG1ldGFkYXRhIG9iamVjdAogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ0xpc3QsIHNpZykgewogICAgc2lnLmFyZ3MgPSBhcmdMaXN0Lm1hcChmdW5jdGlvbihyYXdBcmcpIHsKICAgICAgbGV0IGFyZyA9IHBhcnNlQXJnKHJhd0FyZyk7CiAgICAgIGlmICghYXJnLmxpdGVyYWwpIHsKICAgICAgICBzaWcuc3RhdGljID0gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIGFyZzsKICAgIH0sIHRoaXMpOwogICAgcmV0dXJuIHNpZzsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhbiBpbmRpdmlkdWFsIGFyZ3VtZW50LCBhbmQgcmV0dXJucyBhbiBhcmd1bWVudCBtZXRhZGF0YSBvYmplY3QKICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOgogICAqCiAgICogICB7CiAgICogICAgIHZhbHVlOiAncHJvcCcsICAgICAgICAvLyBwcm9wZXJ0eS9wYXRoIG9yIGxpdGVyYWwgdmFsdWUKICAgKiAgICAgbGl0ZXJhbDogZmFsc2UsICAgICAgIC8vIHdoZXRoZXIgYXJndW1lbnQgaXMgYSBsaXRlcmFsCiAgICogICAgIHN0cnVjdHVyZWQ6IGZhbHNlLCAgICAvLyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIHBhdGgKICAgKiAgICAgcm9vdFByb3BlcnR5OiAncHJvcCcsIC8vIHRoZSByb290IHByb3BlcnR5IG9mIHRoZSBwYXRoCiAgICogICAgIHdpbGRjYXJkOiBmYWxzZSAgICAgICAvLyB3aGV0aGVyIHRoZSBhcmd1bWVudCB3YXMgYSB3aWxkY2FyZCAnLionIHBhdGgKICAgKiAgIH0KICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSByYXdBcmcgVGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgYXJndW1lbnQKICAgKiBAcmV0dXJuIHshTWV0aG9kQXJnfSBBcmd1bWVudCBtZXRhZGF0YSBvYmplY3QKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHBhcnNlQXJnKHJhd0FyZykgewogICAgLy8gY2xlYW4gdXAgd2hpdGVzcGFjZQogICAgbGV0IGFyZyA9IHJhd0FyZy50cmltKCkKICAgICAgLy8gcmVwbGFjZSBjb21tYSBlbnRpdHkgd2l0aCBjb21tYQogICAgICAucmVwbGFjZSgvJmNvbW1hOy9nLCAnLCcpCiAgICAgIC8vIHJlcGFpciBleHRyYSBlc2NhcGUgc2VxdWVuY2VzOyBub3RlIG9ubHkgY29tbWFzIHN0cmljdGx5IG5lZWQKICAgICAgLy8gZXNjYXBpbmcsIGJ1dCB3ZSBhbGxvdyBhbnkgb3RoZXIgY2hhciB0byBiZSBlc2NhcGVkIHNpbmNlIGl0cwogICAgICAvLyBsaWtlbHkgdXNlcnMgd2lsbCBkbyB0aGlzCiAgICAgIC5yZXBsYWNlKC9cXCguKS9nLCAnXCQxJykKICAgICAgOwogICAgLy8gYmFzaWMgYXJndW1lbnQgZGVzY3JpcHRvcgogICAgbGV0IGEgPSB7CiAgICAgIG5hbWU6IGFyZywKICAgICAgdmFsdWU6ICcnLAogICAgICBsaXRlcmFsOiBmYWxzZQogICAgfTsKICAgIC8vIGRldGVjdCBsaXRlcmFsIHZhbHVlIChtdXN0IGJlIFN0cmluZyBvciBOdW1iZXIpCiAgICBsZXQgZmMgPSBhcmdbMF07CiAgICBpZiAoZmMgPT09ICctJykgewogICAgICBmYyA9IGFyZ1sxXTsKICAgIH0KICAgIGlmIChmYyA+PSAnMCcgJiYgZmMgPD0gJzknKSB7CiAgICAgIGZjID0gJyMnOwogICAgfQogICAgc3dpdGNoKGZjKSB7CiAgICAgIGNhc2UgIiciOgogICAgICBjYXNlICciJzoKICAgICAgICBhLnZhbHVlID0gYXJnLnNsaWNlKDEsIC0xKTsKICAgICAgICBhLmxpdGVyYWwgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICcjJzoKICAgICAgICBhLnZhbHVlID0gTnVtYmVyKGFyZyk7CiAgICAgICAgYS5saXRlcmFsID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgIH0KICAgIC8vIGlmIG5vdCBsaXRlcmFsLCBsb29rIGZvciBzdHJ1Y3R1cmVkIHBhdGgKICAgIGlmICghYS5saXRlcmFsKSB7CiAgICAgIGEucm9vdFByb3BlcnR5ID0gUG9seW1lci5QYXRoLnJvb3QoYXJnKTsKICAgICAgLy8gZGV0ZWN0IHN0cnVjdHVyZWQgcGF0aCAoaGFzIGRvdHMpCiAgICAgIGEuc3RydWN0dXJlZCA9IFBvbHltZXIuUGF0aC5pc1BhdGgoYXJnKTsKICAgICAgaWYgKGEuc3RydWN0dXJlZCkgewogICAgICAgIGEud2lsZGNhcmQgPSAoYXJnLnNsaWNlKC0yKSA9PSAnLionKTsKICAgICAgICBpZiAoYS53aWxkY2FyZCkgewogICAgICAgICAgYS5uYW1lID0gYXJnLnNsaWNlKDAsIC0yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBhOwogIH0KCiAgLy8gZGF0YSBhcGkKCiAgLyoqCiAgICogU2VuZHMgYXJyYXkgc3BsaWNlIG5vdGlmaWNhdGlvbnMgKGAuc3BsaWNlc2AgYW5kIGAubGVuZ3RoYCkKICAgKgogICAqIE5vdGU6IHRoaXMgaW1wbGVtZW50YXRpb24gb25seSBhY2NlcHRzIG5vcm1hbGl6ZWQgcGF0aHMKICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgSW5zdGFuY2UgdG8gc2VuZCBub3RpZmljYXRpb25zIHRvCiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRoZSBtdXRhdGlvbnMgb2NjdXJyZWQgb24KICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCB0byB0aGUgYXJyYXkgdGhhdCB3YXMgbXV0YXRlZAogICAqIEBwYXJhbSB7QXJyYXl9IHNwbGljZXMgQXJyYXkgb2Ygc3BsaWNlIHJlY29yZHMKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gbm90aWZ5U3BsaWNlcyhpbnN0LCBhcnJheSwgcGF0aCwgc3BsaWNlcykgewogICAgbGV0IHNwbGljZXNQYXRoID0gcGF0aCArICcuc3BsaWNlcyc7CiAgICBpbnN0Lm5vdGlmeVBhdGgoc3BsaWNlc1BhdGgsIHsgaW5kZXhTcGxpY2VzOiBzcGxpY2VzIH0pOwogICAgaW5zdC5ub3RpZnlQYXRoKHBhdGggKyAnLmxlbmd0aCcsIGFycmF5Lmxlbmd0aCk7CiAgICAvLyBOdWxsIGhlcmUgdG8gYWxsb3cgcG90ZW50aWFsbHkgbGFyZ2Ugc3BsaWNlIHJlY29yZHMgdG8gYmUgR0MnZWQuCiAgICBpbnN0Ll9fZGF0YVtzcGxpY2VzUGF0aF0gPSB7aW5kZXhTcGxpY2VzOiBudWxsfTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBzcGxpY2UgcmVjb3JkIGFuZCBzZW5kcyBhbiBhcnJheSBzcGxpY2Ugbm90aWZpY2F0aW9uIGZvcgogICAqIHRoZSBkZXNjcmliZWQgbXV0YXRpb24KICAgKgogICAqIE5vdGU6IHRoaXMgaW1wbGVtZW50YXRpb24gb25seSBhY2NlcHRzIG5vcm1hbGl6ZWQgcGF0aHMKICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgSW5zdGFuY2UgdG8gc2VuZCBub3RpZmljYXRpb25zIHRvCiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRoZSBtdXRhdGlvbnMgb2NjdXJyZWQgb24KICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCB0byB0aGUgYXJyYXkgdGhhdCB3YXMgbXV0YXRlZAogICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBhdCB3aGljaCB0aGUgYXJyYXkgbXV0YXRpb24gb2NjdXJyZWQKICAgKiBAcGFyYW0ge251bWJlcn0gYWRkZWRDb3VudCBOdW1iZXIgb2YgYWRkZWQgaXRlbXMKICAgKiBAcGFyYW0ge0FycmF5fSByZW1vdmVkIEFycmF5IG9mIHJlbW92ZWQgaXRlbXMKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gbm90aWZ5U3BsaWNlKGluc3QsIGFycmF5LCBwYXRoLCBpbmRleCwgYWRkZWRDb3VudCwgcmVtb3ZlZCkgewogICAgbm90aWZ5U3BsaWNlcyhpbnN0LCBhcnJheSwgcGF0aCwgW3sKICAgICAgaW5kZXg6IGluZGV4LAogICAgICBhZGRlZENvdW50OiBhZGRlZENvdW50LAogICAgICByZW1vdmVkOiByZW1vdmVkLAogICAgICBvYmplY3Q6IGFycmF5LAogICAgICB0eXBlOiAnc3BsaWNlJwogICAgfV0pOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhbiB1cHBlci1jYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBTdHJpbmcgdG8gdXBwZXJjYXNlCiAgICogQHJldHVybiB7c3RyaW5nfSBVcHBlcmNhc2VkIHN0cmluZwogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gdXBwZXIobmFtZSkgewogICAgcmV0dXJuIG5hbWVbMF0udG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDEpOwogIH0KCiAgLyoqCiAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIG1ldGEtcHJvZ3JhbW1pbmcgZm9yIFBvbHltZXIncyB0ZW1wbGF0ZQogICAqIGJpbmRpbmcgYW5kIGRhdGEgb2JzZXJ2YXRpb24gKGNvbGxlY3RpdmVseSwgInByb3BlcnR5IGVmZmVjdHMiKSBzeXN0ZW0uCiAgICoKICAgKiBUaGlzIG1peGluIHVzZXMgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgc3RhdGljIG1ldGhvZHMgZm9yIGFkZGluZwogICAqIHByb3BlcnR5IGVmZmVjdHMgdG8gYW4gZWxlbWVudCBjbGFzczoKICAgKiAtIGBhZGRQcm9wZXJ0eUVmZmVjdGAKICAgKiAtIGBjcmVhdGVQcm9wZXJ0eU9ic2VydmVyYAogICAqIC0gYGNyZWF0ZU1ldGhvZE9ic2VydmVyYAogICAqIC0gYGNyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5YAogICAqIC0gYGNyZWF0ZVJlYWRPbmx5UHJvcGVydHlgCiAgICogLSBgY3JlYXRlUmVmbGVjdGVkUHJvcGVydHlgCiAgICogLSBgY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eWAKICAgKiAtIGBiaW5kVGVtcGxhdGVgCiAgICoKICAgKiBFYWNoIG1ldGhvZCBjcmVhdGVzIG9uZSBvciBtb3JlIHByb3BlcnR5IGFjY2Vzc29ycywgYWxvbmcgd2l0aCBtZXRhZGF0YQogICAqIHVzZWQgYnkgdGhpcyBtaXhpbidzIGltcGxlbWVudGF0aW9uIG9mIGBfcHJvcGVydGllc0NoYW5nZWRgIHRvIHBlcmZvcm0KICAgKiB0aGUgcHJvcGVydHkgZWZmZWN0cy4KICAgKgogICAqIFVuZGVyc2NvcmVkIHZlcnNpb25zIG9mIHRoZSBhYm92ZSBtZXRob2RzIGFsc28gZXhpc3Qgb24gdGhlIGVsZW1lbnQKICAgKiBwcm90b3R5cGUgZm9yIGFkZGluZyBwcm9wZXJ0eSBlZmZlY3RzIG9uIGluc3RhbmNlcyBhdCBydW50aW1lLgogICAqCiAgICogTm90ZSB0aGF0IHRoaXMgbWl4aW4gb3ZlcnJpZGVzIHNldmVyYWwgYFByb3BlcnR5QWNjZXNzb3JzYCBtZXRob2RzLCBpbgogICAqIG1hbnkgY2FzZXMgdG8gbWFpbnRhaW4gZ3VhcmFudGVlcyBwcm92aWRlZCBieSB0aGUgUG9seW1lciAxLnggZmVhdHVyZXM7CiAgICogbm90YWJseSBpdCBjaGFuZ2VzIHByb3BlcnR5IGFjY2Vzc29ycyB0byBiZSBzeW5jaHJvbm91cyBieSBkZWZhdWx0CiAgICogd2hlcmVhcyB0aGUgZGVmYXVsdCB3aGVuIHVzaW5nIGBQcm9wZXJ0eUFjY2Vzc29yc2Agc3RhbmRhbG9uZSBpcyB0byBiZQogICAqIGFzeW5jIGJ5IGRlZmF1bHQuCiAgICoKICAgKiBAbWl4aW5GdW5jdGlvbgogICAqIEBwb2x5bWVyCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlRlbXBsYXRlU3RhbXAKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnMKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBtZXRhLXByb2dyYW1taW5nIGZvciBQb2x5bWVyJ3MKICAgKiB0ZW1wbGF0ZSBiaW5kaW5nIGFuZCBkYXRhIG9ic2VydmF0aW9uIHN5c3RlbS4KICAgKi8KICBQb2x5bWVyLlByb3BlcnR5RWZmZWN0cyA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0eUFjY2Vzc29yc30KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1RlbXBsYXRlU3RhbXB9CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBjb25zdCBwcm9wZXJ0eUVmZmVjdHNCYXNlID0gUG9seW1lci5UZW1wbGF0ZVN0YW1wKFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnMoc3VwZXJDbGFzcykpOwoKICAgIC8qKgogICAgICogQHBvbHltZXIKICAgICAqIEBtaXhpbkNsYXNzCiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9CiAgICAgKiBAZXh0ZW5kcyB7cHJvcGVydHlFZmZlY3RzQmFzZX0KICAgICAqIEB1bnJlc3RyaWN0ZWQKICAgICAqLwogICAgY2xhc3MgUHJvcGVydHlFZmZlY3RzIGV4dGVuZHMgcHJvcGVydHlFZmZlY3RzQmFzZSB7CgogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8KICAgICAgICAvLyBVc2VkIHRvIGlkZW50aWZ5IHVzZXJzIG9mIHRoaXMgbWl4aW4sIGFsYSBpbnN0YW5jZW9mCiAgICAgICAgdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50ID0gdHJ1ZTsKICAgICAgICAvKiogQHR5cGUge251bWJlcn0gKi8KICAgICAgICAvLyBOT1RFOiB1c2VkIHRvIHRyYWNrIHJlLWVudHJhbnQgY2FsbHMgdG8gYF9mbHVzaFByb3BlcnRpZXNgCiAgICAgICAgLy8gcGF0aCBjaGFuZ2VzIGRpcnR5IGNoZWNrIGFnYWluc3QgYF9fZGF0YVRlbXBgIG9ubHkgZHVyaW5nIG9uZSAidHVybiIKICAgICAgICAvLyBhbmQgYXJlIGNsZWFyZWQgd2hlbiBgX19kYXRhQ291bnRlcmAgcmV0dXJucyB0byAwLgogICAgICAgIHRoaXMuX19kYXRhQ291bnRlciA9IDA7CiAgICAgICAgLyoqIEB0eXBlIHtib29sZWFufSAqLwogICAgICAgIHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5OwogICAgICAgIC8qKiBAdHlwZSB7QXJyYXl9ICovCiAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50czsKICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YVRvTm90aWZ5OwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHM7CiAgICAgICAgLyoqIEB0eXBlIHtib29sZWFufSAqLwogICAgICAgIHRoaXMuX19kYXRhSGFzUGF0aHM7CiAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2U7CiAgICAgICAgLyoqIEB0eXBlIHtQb2x5bWVyX1Byb3BlcnR5RWZmZWN0c30gKi8KICAgICAgICB0aGlzLl9fZGF0YUhvc3Q7CiAgICAgICAgLyoqIEB0eXBlIHshT2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19kYXRhVGVtcDsKICAgICAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovCiAgICAgICAgdGhpcy5fX2RhdGFDbGllbnRzSW5pdGlhbGl6ZWQ7CiAgICAgICAgLyoqIEB0eXBlIHshT2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19kYXRhOwogICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmc7CiAgICAgICAgLyoqIEB0eXBlIHshT2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19kYXRhT2xkOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19jb21wdXRlRWZmZWN0czsKICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8KICAgICAgICB0aGlzLl9fcmVmbGVjdEVmZmVjdHM7CiAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX25vdGlmeUVmZmVjdHM7CiAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHM7CiAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX29ic2VydmVFZmZlY3RzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19yZWFkT25seTsKICAgICAgICAvKiogQHR5cGUgeyFUZW1wbGF0ZUluZm99ICovCiAgICAgICAgdGhpcy5fX3RlbXBsYXRlSW5mbzsKICAgICAgfQoKICAgICAgZ2V0IFBST1BFUlRZX0VGRkVDVF9UWVBFUygpIHsKICAgICAgICByZXR1cm4gVFlQRVM7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm9wZXJ0aWVzKCkgewogICAgICAgIHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpOwogICAgICAgIGhvc3RTdGFjay5yZWdpc3Rlckhvc3QodGhpcyk7CiAgICAgICAgdGhpcy5fX2RhdGFDbGllbnRzUmVhZHkgPSBmYWxzZTsKICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzID0gbnVsbDsKICAgICAgICB0aGlzLl9fZGF0YVRvTm90aWZ5ID0gbnVsbDsKICAgICAgICB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzID0gbnVsbDsKICAgICAgICB0aGlzLl9fZGF0YUhhc1BhdGhzID0gZmFsc2U7CiAgICAgICAgLy8gTWF5IGJlIHNldCBvbiBpbnN0YW5jZSBwcmlvciB0byB1cGdyYWRlCiAgICAgICAgdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UgPSB0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZSB8fCBudWxsOwogICAgICAgIHRoaXMuX19kYXRhSG9zdCA9IHRoaXMuX19kYXRhSG9zdCB8fCBudWxsOwogICAgICAgIHRoaXMuX19kYXRhVGVtcCA9IHt9OwogICAgICAgIHRoaXMuX19kYXRhQ2xpZW50c0luaXRpYWxpemVkID0gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnNgIGltcGxlbWVudGF0aW9uIHRvIHByb3ZpZGUgYQogICAgICAgKiBtb3JlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZiBpbml0aWFsaXppbmcgcHJvcGVydGllcyBmcm9tCiAgICAgICAqIHRoZSBwcm90b3R5cGUgb24gdGhlIGluc3RhbmNlLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBvbiB0aGUgcHJvdG90eXBlCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfaW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyhwcm9wcykgewogICAgICAgIHRoaXMuX19kYXRhID0gT2JqZWN0LmNyZWF0ZShwcm9wcyk7CiAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nID0gT2JqZWN0LmNyZWF0ZShwcm9wcyk7CiAgICAgICAgdGhpcy5fX2RhdGFPbGQgPSB7fTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUG9seW1lci5Qcm9wZXJ0eUFjY2Vzc29yc2AgaW1wbGVtZW50YXRpb24gdG8gYXZvaWQgc2V0dGluZwogICAgICAgKiBgX3NldFByb3BlcnR5YCdzIGBzaG91bGROb3RpZnk6IHRydWVgLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBvbiB0aGUgaW5zdGFuY2UKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICAgICAgbGV0IHJlYWRPbmx5ID0gdGhpc1tUWVBFUy5SRUFEX09OTFldOwogICAgICAgIGZvciAobGV0IHByb3AgaW4gcHJvcHMpIHsKICAgICAgICAgIGlmICghcmVhZE9ubHkgfHwgIXJlYWRPbmx5W3Byb3BdKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZyA9IHRoaXMuX19kYXRhUGVuZGluZyB8fCB7fTsKICAgICAgICAgICAgdGhpcy5fX2RhdGFPbGQgPSB0aGlzLl9fZGF0YU9sZCB8fCB7fTsKICAgICAgICAgICAgdGhpcy5fX2RhdGFbcHJvcF0gPSB0aGlzLl9fZGF0YVBlbmRpbmdbcHJvcF0gPSBwcm9wc1twcm9wXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFByb3RvdHlwZSBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAvKioKICAgICAgICogRXF1aXZhbGVudCB0byBzdGF0aWMgYGFkZFByb3BlcnR5RWZmZWN0YCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IHRoYXQgc2hvdWxkIHRyaWdnZXIgdGhlIGVmZmVjdAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBFZmZlY3QgdHlwZSwgZnJvbSB0aGlzLlBST1BFUlRZX0VGRkVDVF9UWVBFUwogICAgICAgKiBAcGFyYW0ge09iamVjdD19IGVmZmVjdCBFZmZlY3QgbWV0YWRhdGEgb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgdHlwZSwgZWZmZWN0KSB7CiAgICAgICAgdGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcihwcm9wZXJ0eSwgdHlwZSA9PSBUWVBFUy5SRUFEX09OTFkpOwogICAgICAgIC8vIGVmZmVjdHMgYXJlIGFjY3VtdWxhdGVkIGludG8gYXJyYXlzIHBlciBwcm9wZXJ0eSBiYXNlZCBvbiB0eXBlCiAgICAgICAgbGV0IGVmZmVjdHMgPSBlbnN1cmVPd25FZmZlY3RNYXAodGhpcywgdHlwZSlbcHJvcGVydHldOwogICAgICAgIGlmICghZWZmZWN0cykgewogICAgICAgICAgZWZmZWN0cyA9IHRoaXNbdHlwZV1bcHJvcGVydHldID0gW107CiAgICAgICAgfQogICAgICAgIGVmZmVjdHMucHVzaChlZmZlY3QpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gcHJvcGVydHkgZWZmZWN0LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgdGhlIGVmZmVjdCB3YXMgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIEVmZmVjdCB0eXBlLCBmcm9tIHRoaXMuUFJPUEVSVFlfRUZGRUNUX1RZUEVTCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gZWZmZWN0IEVmZmVjdCBtZXRhZGF0YSBvYmplY3QgdG8gcmVtb3ZlCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfcmVtb3ZlUHJvcGVydHlFZmZlY3QocHJvcGVydHksIHR5cGUsIGVmZmVjdCkgewogICAgICAgIGxldCBlZmZlY3RzID0gZW5zdXJlT3duRWZmZWN0TWFwKHRoaXMsIHR5cGUpW3Byb3BlcnR5XTsKICAgICAgICBsZXQgaWR4ID0gZWZmZWN0cy5pbmRleE9mKGVmZmVjdCk7CiAgICAgICAgaWYgKGlkeCA+PSAwKSB7CiAgICAgICAgICBlZmZlY3RzLnNwbGljZShpZHgsIDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGEgcHJvcGVydHkgZWZmZWN0CiAgICAgICAqIG9mIGEgY2VydGFpbiB0eXBlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcGFyYW0ge3N0cmluZz19IHR5cGUgRWZmZWN0IHR5cGUsIGZyb20gdGhpcy5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhbiBlZmZlY3Qgb2YgdGhpcyB0eXBlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9oYXNQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgdHlwZSkgewogICAgICAgIGxldCBlZmZlY3RzID0gdGhpc1t0eXBlXTsKICAgICAgICByZXR1cm4gQm9vbGVhbihlZmZlY3RzICYmIGVmZmVjdHNbcHJvcGVydHldKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGEgInJlYWQgb25seSIKICAgICAgICogYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhbiBlZmZlY3Qgb2YgdGhpcyB0eXBlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9oYXNSZWFkT25seUVmZmVjdChwcm9wZXJ0eSkgewogICAgICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuUkVBRF9PTkxZKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGEgIm5vdGlmeSIKICAgICAgICogcHJvcGVydHkgZWZmZWN0IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHByb3RvdHlwZS9pbnN0YW5jZSBoYXMgYW4gZWZmZWN0IG9mIHRoaXMgdHlwZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfaGFzTm90aWZ5RWZmZWN0KHByb3BlcnR5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHByb3BlcnR5LCBUWVBFUy5OT1RJRlkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHByb3RvdHlwZS9pbnN0YW5jZSBoYXMgYSAicmVmbGVjdCB0byBhdHRyaWJ1dGUiCiAgICAgICAqIHByb3BlcnR5IGVmZmVjdCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGFuIGVmZmVjdCBvZiB0aGlzIHR5cGUKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2hhc1JlZmxlY3RFZmZlY3QocHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gdGhpcy5faGFzUHJvcGVydHlFZmZlY3QocHJvcGVydHksIFRZUEVTLlJFRkxFQ1QpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHByb3RvdHlwZS9pbnN0YW5jZSBoYXMgYSAiY29tcHV0ZWQiCiAgICAgICAqIHByb3BlcnR5IGVmZmVjdCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGFuIGVmZmVjdCBvZiB0aGlzIHR5cGUKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2hhc0NvbXB1dGVkRWZmZWN0KHByb3BlcnR5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHByb3BlcnR5LCBUWVBFUy5DT01QVVRFKTsKICAgICAgfQoKICAgICAgLy8gUnVudGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAvKioKICAgICAgICogU2V0cyBhIHBlbmRpbmcgcHJvcGVydHkgb3IgcGF0aC4gIElmIHRoZSByb290IHByb3BlcnR5IG9mIHRoZSBwYXRoIGluCiAgICAgICAqIHF1ZXN0aW9uIGhhZCBubyBhY2Nlc3NvciwgdGhlIHBhdGggaXMgc2V0LCBvdGhlcndpc2UgaXQgaXMgZW5xdWV1ZWQKICAgICAgICogdmlhIGBfc2V0UGVuZGluZ1Byb3BlcnR5YC4KICAgICAgICoKICAgICAgICogVGhpcyBmdW5jdGlvbiBpc29sYXRlcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSBmdW5jdGlvbmFsaXR5IG5lY2Vzc2FyeQogICAgICAgKiBmb3IgdGhlIHB1YmxpYyBBUEkgKGBzZXRgLCBgc2V0UHJvcGVydGllc2AsIGBub3RpZnlQYXRoYCwgYW5kIHByb3BlcnR5CiAgICAgICAqIGNoYW5nZSBsaXN0ZW5lcnMgdmlhIHt7Li4ufX0gYmluZGluZ3MpLCBzdWNoIHRoYXQgaXQgaXMgb25seSBkb25lCiAgICAgICAqIHdoZW4gcGF0aHMgZW50ZXIgdGhlIHN5c3RlbSwgYW5kIG5vdCBhdCBldmVyeSBwcm9wYWdhdGlvbiBzdGVwLiAgSXQKICAgICAgICogYWxzbyBzZXRzIGEgYF9fZGF0YUhhc1BhdGhzYCBmbGFnIG9uIHRoZSBpbnN0YW5jZSB3aGljaCBpcyB1c2VkIHRvCiAgICAgICAqIGZhc3QtcGF0aCBzbG93ZXIgcGF0aC1tYXRjaGluZyBjb2RlIGluIHRoZSBwcm9wZXJ0eSBlZmZlY3RzIGhvc3QgcGF0aHMuCiAgICAgICAqCiAgICAgICAqIGBwYXRoYCBjYW4gYmUgYSBwYXRoIHN0cmluZyBvciBhcnJheSBvZiBwYXRoIHBhcnRzIGFzIGFjY2VwdGVkIGJ5IHRoZQogICAgICAgKiBwdWJsaWMgQVBJLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxudW1iZXJ8c3RyaW5nPn0gcGF0aCBQYXRoIHRvIHNldAogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldAogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzaG91bGROb3RpZnkgU2V0IHRvIHRydWUgaWYgdGhpcyBjaGFuZ2Ugc2hvdWxkCiAgICAgICAqICBjYXVzZSBhIHByb3BlcnR5IG5vdGlmaWNhdGlvbiBldmVudCBkaXNwYXRjaAogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc1BhdGhOb3RpZmljYXRpb24gSWYgdGhlIHBhdGggYmVpbmcgc2V0IGlzIGEgcGF0aAogICAgICAgKiAgIG5vdGlmaWNhdGlvbiBvZiBhbiBhbHJlYWR5IGNoYW5nZWQgdmFsdWUsIGFzIG9wcG9zZWQgdG8gYSByZXF1ZXN0CiAgICAgICAqICAgdG8gc2V0IGFuZCBub3RpZnkgdGhlIGNoYW5nZS4gIEluIHRoZSBsYXR0ZXIgYGZhbHNlYCBjYXNlLCBhIGRpcnR5CiAgICAgICAqICAgY2hlY2sgaXMgcGVyZm9ybWVkIGFuZCB0aGVuIHRoZSB2YWx1ZSBpcyBzZXQgdG8gdGhlIHBhdGggYmVmb3JlCiAgICAgICAqICAgZW5xdWV1aW5nIHRoZSBwZW5kaW5nIHByb3BlcnR5IGNoYW5nZS4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBwcm9wZXJ0eS9wYXRoIHdhcyBlbnF1ZXVlZCBpbgogICAgICAgKiAgIHRoZSBwZW5kaW5nIGNoYW5nZXMgYmFnLgogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHBhdGgsIHZhbHVlLCBzaG91bGROb3RpZnksIGlzUGF0aE5vdGlmaWNhdGlvbikgewogICAgICAgIGlmIChpc1BhdGhOb3RpZmljYXRpb24gfHwKICAgICAgICAgICAgUG9seW1lci5QYXRoLnJvb3QoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGhbMF0gOiBwYXRoKSAhPT0gcGF0aCkgewogICAgICAgICAgLy8gRGlydHkgY2hlY2sgY2hhbmdlcyBiZWluZyBzZXQgdG8gYSBwYXRoIGFnYWluc3QgdGhlIGFjdHVhbCBvYmplY3QsCiAgICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgcGF0aHMgaW50byB0aGUgc3lzdGVtOyBmcm9tIGhlcmUKICAgICAgICAgIC8vIHRoZSBvbmx5IGRpcnR5IGNoZWNrcyBhcmUgYWdhaW5zdCB0aGUgYF9fZGF0YVRlbXBgIGNhY2hlIHRvIHByZXZlbnQKICAgICAgICAgIC8vIGR1cGxpY2F0ZSB3b3JrIGluIHRoZSBzYW1lIHR1cm4gb25seS4gTm90ZSwgaWYgdGhpcyB3YXMgYSBub3RpZmljYXRpb24KICAgICAgICAgIC8vIG9mIGEgY2hhbmdlIGFscmVhZHkgc2V0IHRvIGEgcGF0aCAoaXNQYXRoTm90aWZpY2F0aW9uOiB0cnVlKSwKICAgICAgICAgIC8vIHdlIGFsd2F5cyBsZXQgdGhlIGNoYW5nZSB0aHJvdWdoIGFuZCBza2lwIHRoZSBgc2V0YCBzaW5jZSBpdCB3YXMKICAgICAgICAgIC8vIGFscmVhZHkgZGlydHkgY2hlY2tlZCBhdCB0aGUgcG9pbnQgb2YgZW50cnkgYW5kIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgICAvLyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkCiAgICAgICAgICBpZiAoIWlzUGF0aE5vdGlmaWNhdGlvbikgewogICAgICAgICAgICBsZXQgb2xkID0gUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoKTsKICAgICAgICAgICAgcGF0aCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoUG9seW1lci5QYXRoLnNldCh0aGlzLCBwYXRoLCB2YWx1ZSkpOwogICAgICAgICAgICAvLyBVc2UgcHJvcGVydHktYWNjZXNzb3IncyBzaW1wbGVyIGRpcnR5IGNoZWNrCiAgICAgICAgICAgIGlmICghcGF0aCB8fCAhc3VwZXIuX3Nob3VsZFByb3BlcnR5Q2hhbmdlKHBhdGgsIHZhbHVlLCBvbGQpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9fZGF0YUhhc1BhdGhzID0gdHJ1ZTsKICAgICAgICAgIGlmICh0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkoLyoqQHR5cGV7c3RyaW5nfSovKHBhdGgpLCB2YWx1ZSwgc2hvdWxkTm90aWZ5KSkgewogICAgICAgICAgICBjb21wdXRlTGlua2VkUGF0aHModGhpcywgcGF0aCwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHRoaXMuX19kYXRhSGFzQWNjZXNzb3IgJiYgdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltwYXRoXSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KC8qKkB0eXBle3N0cmluZ30qLyhwYXRoKSwgdmFsdWUsIHNob3VsZE5vdGlmeSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzW3BhdGhdID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFwcGxpZXMgYSB2YWx1ZSB0byBhIG5vbi1Qb2x5bWVyIGVsZW1lbnQvbm9kZSdzIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBUaGUgaW1wbGVtZW50YXRpb24gbWFrZXMgYSBiZXN0LWVmZm9ydCBhdCBiaW5kaW5nIGludGVyb3A6CiAgICAgICAqIFNvbWUgbmF0aXZlIGVsZW1lbnQgcHJvcGVydGllcyBoYXZlIHNpZGUtZWZmZWN0cyB3aGVuCiAgICAgICAqIHJlLXNldHRpbmcgdGhlIHNhbWUgdmFsdWUgKGUuZy4gc2V0dGluZyBgPGlucHV0Pi52YWx1ZWAgcmVzZXRzIHRoZQogICAgICAgKiBjdXJzb3IgcG9zaXRpb24pLCBzbyB3ZSBkbyBhIGRpcnR5LWNoZWNrIGJlZm9yZSBzZXR0aW5nIHRoZSB2YWx1ZS4KICAgICAgICogSG93ZXZlciwgZm9yIGJldHRlciBpbnRlcm9wIHdpdGggbm9uLVBvbHltZXIgY3VzdG9tIGVsZW1lbnRzIHRoYXQKICAgICAgICogYWNjZXB0IG9iamVjdHMsIHdlIGV4cGxpY2l0bHkgcmUtc2V0IG9iamVjdCBjaGFuZ2VzIGNvbWluZyBmcm9tIHRoZQogICAgICAgKiBQb2x5bWVyIHdvcmxkICh3aGljaCBtYXkgaW5jbHVkZSBkZWVwIG9iamVjdCBjaGFuZ2VzIHdpdGhvdXQgdGhlCiAgICAgICAqIHRvcCByZWZlcmVuY2UgY2hhbmdpbmcpLCBlcnJpbmcgb24gdGhlIHNpZGUgb2YgcHJvdmlkaW5nIG1vcmUKICAgICAgICogaW5mb3JtYXRpb24uCiAgICAgICAqCiAgICAgICAqIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGFsdGVybmF0ZSBhcHByb2FjaGVzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIFRoZSBub2RlIHRvIHNldCBhIHByb3BlcnR5IG9uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFRoZSBwcm9wZXJ0eSB0byBzZXQKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShub2RlLCBwcm9wLCB2YWx1ZSkgewogICAgICAgIC8vIEl0IGlzIGEganVkZ21lbnQgY2FsbCB0aGF0IHJlc2V0dGluZyBwcmltaXRpdmVzIGlzCiAgICAgICAgLy8gImJhZCIgYW5kIHJlc2V0dGluZ3Mgb2JqZWN0cyBpcyBhbHNvICJnb29kIjsgYWx0ZXJuYXRpdmVseSB3ZSBjb3VsZAogICAgICAgIC8vIGltcGxlbWVudCBhIHdoaXRlbGlzdCBvZiB0YWcgJiBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCBzaG91bGQgbmV2ZXIKICAgICAgICAvLyBiZSByZXNldCAoZS5nLiA8aW5wdXQ+LnZhbHVlICYmIDxzZWxlY3Q+LnZhbHVlKQogICAgICAgIGlmICh2YWx1ZSAhPT0gbm9kZVtwcm9wXSB8fCB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHsKICAgICAgICAgIG5vZGVbcHJvcF0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgdGhlIGBQcm9wZXJ0aWVzQ2hhbmdlZGAgaW1wbGVtZW50YXRpb24gdG8gaW50cm9kdWNlIHNwZWNpYWwKICAgICAgICogZGlydHkgY2hlY2sgbG9naWMgZGVwZW5kaW5nIG9uIHRoZSBwcm9wZXJ0eSAmIHZhbHVlIGJlaW5nIHNldDoKICAgICAgICoKICAgICAgICogMS4gQW55IHZhbHVlIHNldCB0byBhIHBhdGggKGUuZy4gJ29iai5wcm9wJzogNDIgb3IgJ29iai5wcm9wJzogey4uLn0pCiAgICAgICAqICAgIFN0b3JlZCBpbiBgX19kYXRhVGVtcGAsIGRpcnR5IGNoZWNrZWQgYWdhaW5zdCBgX19kYXRhVGVtcGAKICAgICAgICogMi4gT2JqZWN0IHNldCB0byBzaW1wbGUgcHJvcGVydHkgKGUuZy4gJ3Byb3AnOiB7Li4ufSkKICAgICAgICogICAgU3RvcmVkIGluIGBfX2RhdGFUZW1wYCBhbmQgYF9fZGF0YWAsIGRpcnR5IGNoZWNrZWQgYWdhaW5zdAogICAgICAgKiAgICBgX19kYXRhVGVtcGAgYnkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgX3Nob3VsZFByb3BlcnR5Q2hhbmdlYAogICAgICAgKiAzLiBQcmltaXRpdmUgdmFsdWUgc2V0IHRvIHNpbXBsZSBwcm9wZXJ0eSAoZS5nLiAncHJvcCc6IDQyKQogICAgICAgKiAgICBTdG9yZWQgaW4gYF9fZGF0YWAsIGRpcnR5IGNoZWNrZWQgYWdhaW5zdCBgX19kYXRhYAogICAgICAgKgogICAgICAgKiBUaGUgZGlydHktY2hlY2sgaXMgaW1wb3J0YW50IHRvIHByZXZlbnQgY3ljbGVzIGR1ZSB0byB0d28td2F5CiAgICAgICAqIG5vdGlmaWNhdGlvbiwgYnV0IHBhdGhzIGFuZCBvYmplY3RzIGFyZSBvbmx5IGRpcnR5IGNoZWNrZWQgYWdhaW5zdCBhbnkKICAgICAgICogcHJldmlvdXMgdmFsdWUgc2V0IGR1cmluZyB0aGlzIHR1cm4gdmlhIGEgInRlbXBvcmFyeSBjYWNoZSIgdGhhdCBpcwogICAgICAgKiBjbGVhcmVkIHdoZW4gdGhlIGxhc3QgYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgZXhpdHMuIFRoaXMgaXMgc286CiAgICAgICAqIGEuIGFueSBjYWNoZWQgYXJyYXkgcGF0aHMgKGUuZy4gJ2FycmF5LjMucHJvcCcpIG1heSBiZSBpbnZhbGlkYXRlZAogICAgICAgKiAgICBkdWUgdG8gYXJyYXkgbXV0YXRpb25zIGxpa2Ugc2hpZnQvdW5zaGlmdC9zcGxpY2U7IHRoaXMgaXMgZmluZQogICAgICAgKiAgICBzaW5jZSBwYXRoIGNoYW5nZXMgYXJlIGRpcnR5LWNoZWNrZWQgYXQgdXNlciBlbnRyeSBwb2ludHMgbGlrZSBgc2V0YAogICAgICAgKiBiLiBkaXJ0eS1jaGVja2luZyBmb3Igb2JqZWN0cyBvbmx5IGxhc3RzIG9uZSB0dXJuIHRvIGFsbG93IHRoZSB1c2VyCiAgICAgICAqICAgIHRvIG11dGF0ZSB0aGUgb2JqZWN0IGluLXBsYWNlIGFuZCByZS1zZXQgaXQgd2l0aCB0aGUgc2FtZSBpZGVudGl0eQogICAgICAgKiAgICBhbmQgaGF2ZSBhbGwgc3ViLXByb3BlcnRpZXMgcmUtcHJvcGFnYXRlZCBpbiBhIHN1YnNlcXVlbnQgdHVybi4KICAgICAgICoKICAgICAgICogVGhlIHRlbXAgY2FjaGUgaXMgbm90IG5lY2Vzc2FyaWx5IHN1ZmZpY2llbnQgdG8gcHJldmVudCBpbnZhbGlkIGFycmF5CiAgICAgICAqIHBhdGhzLCBzaW5jZSBhIHNwbGljZSBjYW4gaGFwcGVuIGR1cmluZyB0aGUgc2FtZSB0dXJuICh3aXRoIHBhdGhvbG9naWNhbAogICAgICAgKiB1c2VyIGNvZGUpOyB3ZSBjb3VsZCBpbnRyb2R1Y2UgYSAiZml4dXAiIGZvciB0ZW1wb3JhcmlseSBjYWNoZWQgYXJyYXkKICAgICAgICogcGF0aHMgaWYgbmVlZGVkOiBodHRwczovL2dpdGh1Yi5jb20vUG9seW1lci9wb2x5bWVyL2lzc3Vlcy80MjI3CiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHkKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXQKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2hvdWxkTm90aWZ5IFRydWUgaWYgcHJvcGVydHkgc2hvdWxkIGZpcmUgbm90aWZpY2F0aW9uCiAgICAgICAqICAgZXZlbnQgKGFwcGxpZXMgb25seSBmb3IgYG5vdGlmeTogdHJ1ZWAgcHJvcGVydGllcykKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBwcm9wZXJ0eSBjaGFuZ2VkCiAgICAgICAqLwogICAgICBfc2V0UGVuZGluZ1Byb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSwgc2hvdWxkTm90aWZ5KSB7CiAgICAgICAgbGV0IGlzUGF0aCA9IHRoaXMuX19kYXRhSGFzUGF0aHMgJiYgUG9seW1lci5QYXRoLmlzUGF0aChwcm9wZXJ0eSk7CiAgICAgICAgbGV0IHByZXZQcm9wcyA9IGlzUGF0aCA/IHRoaXMuX19kYXRhVGVtcCA6IHRoaXMuX19kYXRhOwogICAgICAgIGlmICh0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eSwgdmFsdWUsIHByZXZQcm9wc1twcm9wZXJ0eV0pKSB7CiAgICAgICAgICBpZiAoIXRoaXMuX19kYXRhUGVuZGluZykgewogICAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmcgPSB7fTsKICAgICAgICAgICAgdGhpcy5fX2RhdGFPbGQgPSB7fTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIEVuc3VyZSBvbGQgaXMgY2FwdHVyZWQgZnJvbSB0aGUgbGFzdCB0dXJuCiAgICAgICAgICBpZiAoIShwcm9wZXJ0eSBpbiB0aGlzLl9fZGF0YU9sZCkpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFPbGRbcHJvcGVydHldID0gdGhpcy5fX2RhdGFbcHJvcGVydHldOwogICAgICAgICAgfQogICAgICAgICAgLy8gUGF0aHMgYXJlIHN0b3JlZCBpbiB0ZW1wb3JhcnkgY2FjaGUgKGNsZWFyZWQgYXQgZW5kIG9mIHR1cm4pLAogICAgICAgICAgLy8gd2hpY2ggaXMgdXNlZCBmb3IgZGlydHktY2hlY2tpbmcsIGFsbCBvdGhlcnMgc3RvcmVkIGluIF9fZGF0YQogICAgICAgICAgaWYgKGlzUGF0aCkgewogICAgICAgICAgICB0aGlzLl9fZGF0YVRlbXBbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLl9fZGF0YVtwcm9wZXJ0eV0gPSB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIEFsbCBjaGFuZ2VzIGdvIGludG8gcGVuZGluZyBwcm9wZXJ0eSBiYWcsIHBhc3NlZCB0byBfcHJvcGVydGllc0NoYW5nZWQKICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZ1twcm9wZXJ0eV0gPSB2YWx1ZTsKICAgICAgICAgIC8vIFRyYWNrIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90aWZ5IHNlcGFyYXRlbHkKICAgICAgICAgIGlmIChpc1BhdGggfHwgKHRoaXNbVFlQRVMuTk9USUZZXSAmJiB0aGlzW1RZUEVTLk5PVElGWV1bcHJvcGVydHldKSkgewogICAgICAgICAgICB0aGlzLl9fZGF0YVRvTm90aWZ5ID0gdGhpcy5fX2RhdGFUb05vdGlmeSB8fCB7fTsKICAgICAgICAgICAgdGhpcy5fX2RhdGFUb05vdGlmeVtwcm9wZXJ0eV0gPSBzaG91bGROb3RpZnk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGJhc2UgaW1wbGVtZW50YXRpb24gdG8gZW5zdXJlIGFsbCBhY2Nlc3NvcnMgc2V0IGBzaG91bGROb3RpZnlgCiAgICAgICAqIHRvIHRydWUsIGZvciBwZXItcHJvcGVydHkgbm90aWZpY2F0aW9uIHRyYWNraW5nLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKSB7CiAgICAgICAgaWYgKHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUsIHRydWUpKSB7CiAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUHJvcGVydHlBY2Nlc3NvcmAncyBkZWZhdWx0IGFzeW5jIHF1ZXVpbmcgb2YKICAgICAgICogYF9wcm9wZXJ0aWVzQ2hhbmdlZGA6IGlmIGBfX2RhdGFSZWFkeWAgaXMgZmFsc2UgKGhhcyBub3QgeWV0IGJlZW4KICAgICAgICogbWFudWFsbHkgZmx1c2hlZCksIHRoZSBmdW5jdGlvbiBuby1vcHM7IG90aGVyd2lzZSBmbHVzaGVzCiAgICAgICAqIGBfcHJvcGVydGllc0NoYW5nZWRgIHN5bmNocm9ub3VzbHkuCiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCkgewogICAgICAgIGlmICh0aGlzLl9fZGF0YVJlYWR5KSB7CiAgICAgICAgICB0aGlzLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBFbnF1ZXVlcyB0aGUgZ2l2ZW4gY2xpZW50IG9uIGEgbGlzdCBvZiBwZW5kaW5nIGNsaWVudHMsIHdob3NlCiAgICAgICAqIHBlbmRpbmcgcHJvcGVydHkgY2hhbmdlcyBjYW4gbGF0ZXIgYmUgZmx1c2hlZCB2aWEgYSBjYWxsIHRvCiAgICAgICAqIGBfZmx1c2hDbGllbnRzYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNsaWVudCBQcm9wZXJ0eUVmZmVjdHMgY2xpZW50IHRvIGVucXVldWUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2VucXVldWVDbGllbnQoY2xpZW50KSB7CiAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cyA9IHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMgfHwgW107CiAgICAgICAgaWYgKGNsaWVudCAhPT0gdGhpcykgewogICAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGNsaWVudCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIHN1cGVyY2xhc3MgaW1wbGVtZW50YXRpb24uCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9mbHVzaFByb3BlcnRpZXMoKSB7CiAgICAgICAgdGhpcy5fX2RhdGFDb3VudGVyKys7CiAgICAgICAgc3VwZXIuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgIHRoaXMuX19kYXRhQ291bnRlci0tOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRmx1c2hlcyBhbnkgY2xpZW50cyBwcmV2aW91c2x5IGVucXVldWVkIHZpYSBgX2VucXVldWVDbGllbnRgLCBjYXVzaW5nCiAgICAgICAqIHRoZWlyIGBfZmx1c2hQcm9wZXJ0aWVzYCBtZXRob2QgdG8gcnVuLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfZmx1c2hDbGllbnRzKCkgewogICAgICAgIGlmICghdGhpcy5fX2RhdGFDbGllbnRzUmVhZHkpIHsKICAgICAgICAgIHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuX3JlYWR5Q2xpZW50cygpOwogICAgICAgICAgLy8gT3ZlcnJpZGUgcG9pbnQgd2hlcmUgYWNjZXNzb3JzIGFyZSB0dXJuZWQgb247IGltcG9ydGFudGx5LAogICAgICAgICAgLy8gdGhpcyBpcyBhZnRlciBjbGllbnRzIGhhdmUgZnVsbHkgcmVhZGllZCwgcHJvdmlkaW5nIGEgZ3VhcmFudGVlCiAgICAgICAgICAvLyB0aGF0IGFueSBwcm9wZXJ0eSBlZmZlY3RzIG9jY3VyIG9ubHkgYWZ0ZXIgYWxsIGNsaWVudHMgYXJlIHJlYWR5LgogICAgICAgICAgdGhpcy5fX2RhdGFSZWFkeSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX19lbmFibGVPckZsdXNoQ2xpZW50cygpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gTk9URTogV2UgZW5zdXJlIGNsaWVudHMgZWl0aGVyIGVuYWJsZSBvciBmbHVzaCBhcyBhcHByb3ByaWF0ZS4gVGhpcwogICAgICAvLyBoYW5kbGVzIHR3byBjb3JuZXIgY2FzZXM6CiAgICAgIC8vICgxKSBjbGllbnRzIGZsdXNoIHByb3Blcmx5IHdoZW4gY29ubmVjdGVkL2VuYWJsZWQgYmVmb3JlIHRoZSBob3N0CiAgICAgIC8vIGVuYWJsZXM7IGUuZy4KICAgICAgLy8gICAoYSkgVGVtcGxhdGl6ZSBzdGFtcHMgd2l0aCBubyBwcm9wZXJ0aWVzIGFuZCBkb2VzIG5vdCBmbHVzaCBhbmQKICAgICAgLy8gICAoYikgdGhlIGluc3RhbmNlIGlzIGluc2VydGVkIGludG8gZG9tIGFuZAogICAgICAvLyAgIChjKSB0aGVuIHRoZSBpbnN0YW5jZSBmbHVzaGVzLgogICAgICAvLyAoMikgY2xpZW50cyBlbmFibGUgcHJvcGVybHkgd2hlbiBub3QgY29ubmVjdGVkL2VuYWJsZWQgd2hlbiB0aGUgaG9zdAogICAgICAvLyBmbHVzaGVzOyBlLmcuCiAgICAgIC8vICAgKGEpIGEgdGVtcGxhdGUgaXMgcnVudGltZSBzdGFtcGVkIGFuZCBub3QgeWV0IGNvbm5lY3RlZC9lbmFibGVkCiAgICAgIC8vICAgKGIpIGEgaG9zdCBzZXRzIGEgcHJvcGVydHksIGNhdXNpbmcgc3RhbXBlZCBkb20gdG8gZmx1c2gKICAgICAgLy8gICAoYykgdGhlIHN0YW1wZWQgZG9tIGVuYWJsZXMuCiAgICAgIF9fZW5hYmxlT3JGbHVzaENsaWVudHMoKSB7CiAgICAgICAgbGV0IGNsaWVudHMgPSB0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzOwogICAgICAgIGlmIChjbGllbnRzKSB7CiAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzID0gbnVsbDsKICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGNsaWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgbGV0IGNsaWVudCA9IGNsaWVudHNbaV07CiAgICAgICAgICAgIGlmICghY2xpZW50Ll9fZGF0YUVuYWJsZWQpIHsKICAgICAgICAgICAgICBjbGllbnQuX2VuYWJsZVByb3BlcnRpZXMoKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjbGllbnQuX19kYXRhUGVuZGluZykgewogICAgICAgICAgICAgIGNsaWVudC5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQZXJmb3JtIGFueSBpbml0aWFsIHNldHVwIG9uIGNsaWVudCBkb20uIENhbGxlZCBiZWZvcmUgdGhlIGZpcnN0CiAgICAgICAqIGBfZmx1c2hQcm9wZXJ0aWVzYCBjYWxsIG9uIGNsaWVudCBkb20gYW5kIGJlZm9yZSBhbnkgZWxlbWVudAogICAgICAgKiBvYnNlcnZlcnMgYXJlIGNhbGxlZC4KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX3JlYWR5Q2xpZW50cygpIHsKICAgICAgICB0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNldHMgYSBiYWcgb2YgcHJvcGVydHkgY2hhbmdlcyB0byB0aGlzIGluc3RhbmNlLCBhbmQKICAgICAgICogc3luY2hyb25vdXNseSBwcm9jZXNzZXMgYWxsIGVmZmVjdHMgb2YgdGhlIHByb3BlcnRpZXMgYXMgYSBiYXRjaC4KICAgICAgICoKICAgICAgICogUHJvcGVydHkgbmFtZXMgbXVzdCBiZSBzaW1wbGUgcHJvcGVydGllcywgbm90IHBhdGhzLiAgQmF0Y2hlZAogICAgICAgKiBwYXRoIHByb3BhZ2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2Ygb25lIG9yIG1vcmUga2V5LXZhbHVlIHBhaXJzIHdob3NlIGtleSBpcwogICAgICAgKiAgIGEgcHJvcGVydHkgYW5kIHZhbHVlIGlzIHRoZSBuZXcgdmFsdWUgdG8gc2V0IGZvciB0aGF0IHByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzZXRSZWFkT25seSBXaGVuIHRydWUsIGFueSBwcml2YXRlIHZhbHVlcyBzZXQgaW4KICAgICAgICogICBgcHJvcHNgIHdpbGwgYmUgc2V0LiBCeSBkZWZhdWx0LCBgc2V0UHJvcGVydGllc2Agd2lsbCBub3Qgc2V0CiAgICAgICAqICAgYHJlYWRPbmx5OiB0cnVlYCByb290IHByb3BlcnRpZXMuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIHNldFByb3BlcnRpZXMocHJvcHMsIHNldFJlYWRPbmx5KSB7CiAgICAgICAgZm9yIChsZXQgcGF0aCBpbiBwcm9wcykgewogICAgICAgICAgaWYgKHNldFJlYWRPbmx5IHx8ICF0aGlzW1RZUEVTLlJFQURfT05MWV0gfHwgIXRoaXNbVFlQRVMuUkVBRF9PTkxZXVtwYXRoXSkgewogICAgICAgICAgICAvL1RPRE8oa3NjaGFhZik6IGV4cGxpY2l0bHkgZGlzYWxsb3cgcGF0aHMgaW4gc2V0UHJvcGVydHk/CiAgICAgICAgICAgIC8vIHdpbGRjYXJkIG9ic2VydmVycyBjdXJyZW50bHkgb25seSBwYXNzIHRoZSBmaXJzdCBjaGFuZ2VkIHBhdGgKICAgICAgICAgICAgLy8gaW4gdGhlIGBpbmZvYCBvYmplY3QsIGFuZCB5b3UgY291bGQgZG8gc29tZSBvZGQgdGhpbmdzIGJhdGNoaW5nCiAgICAgICAgICAgIC8vIHBhdGhzLCBlLmcuIHsnZm9vLmJhcic6IHsuLi59LCAnZm9vJzogbnVsbH0KICAgICAgICAgICAgdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHBhdGgsIHByb3BzW3BhdGhdLCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUHJvcGVydHlBY2Nlc3NvcnNgIHNvIHRoYXQgcHJvcGVydHkgYWNjZXNzb3IKICAgICAgICogc2lkZSBlZmZlY3RzIGFyZSBub3QgZW5hYmxlZCB1bnRpbCBhZnRlciBjbGllbnQgZG9tIGlzIGZ1bGx5IHJlYWR5LgogICAgICAgKiBBbHNvIGNhbGxzIGBfZmx1c2hDbGllbnRzYCBjYWxsYmFjayB0byBlbnN1cmUgY2xpZW50IGRvbSBpcyBlbmFibGVkCiAgICAgICAqIHRoYXQgd2FzIG5vdCBlbmFibGVkIGFzIGEgcmVzdWx0IG9mIGZsdXNoaW5nIHByb3BlcnRpZXMuCiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgcmVhZHkoKSB7CiAgICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRoYXQgYHN1cGVyLnJlYWR5KClgIGlzIG5vdCBjYWxsZWQgaGVyZSBhcyBpdAogICAgICAgIC8vIGltbWVkaWF0ZWx5IHR1cm5zIG9uIGFjY2Vzc29ycy4gSW5zdGVhZCwgd2Ugd2FpdCB1bnRpbCBgcmVhZHlDbGllbnRzYAogICAgICAgIC8vIHRvIGVuYWJsZSBhY2Nlc3NvcnMgdG8gcHJvdmlkZSBhIGd1YXJhbnRlZSB0aGF0IGNsaWVudHMgYXJlIHJlYWR5CiAgICAgICAgLy8gYmVmb3JlIHByb2Nlc3NpbmcgYW55IGFjY2Vzc29ycyBzaWRlIGVmZmVjdHMuCiAgICAgICAgdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgICAgLy8gSWYgbm8gZGF0YSB3YXMgcGVuZGluZywgYF9mbHVzaFByb3BlcnRpZXNgIHdpbGwgbm90IGBmbHVzaENsaWVudHNgCiAgICAgICAgLy8gc28gZW5zdXJlIHRoaXMgaXMgZG9uZS4KICAgICAgICBpZiAoIXRoaXMuX19kYXRhQ2xpZW50c1JlYWR5KSB7CiAgICAgICAgICB0aGlzLl9mbHVzaENsaWVudHMoKTsKICAgICAgICB9CiAgICAgICAgLy8gQmVmb3JlIHJlYWR5LCBjbGllbnQgbm90aWZpY2F0aW9ucyBkbyBub3QgdHJpZ2dlciBfZmx1c2hQcm9wZXJ0aWVzLgogICAgICAgIC8vIFRoZXJlZm9yZSBhIGZsdXNoIGlzIG5lY2Vzc2FyeSBoZXJlIGlmIGRhdGEgaGFzIGJlZW4gc2V0LgogICAgICAgIGlmICh0aGlzLl9fZGF0YVBlbmRpbmcpIHsKICAgICAgICAgIHRoaXMuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEltcGxlbWVudHMgYFByb3BlcnR5QWNjZXNzb3JzYCdzIHByb3BlcnRpZXMgY2hhbmdlZCBjYWxsYmFjay4KICAgICAgICoKICAgICAgICogUnVucyBlYWNoIGNsYXNzIG9mIGVmZmVjdHMgZm9yIHRoZSBiYXRjaCBvZiBjaGFuZ2VkIHByb3BlcnRpZXMgaW4KICAgICAgICogYSBzcGVjaWZpYyBvcmRlciAoY29tcHV0ZSwgcHJvcGFnYXRlLCByZWZsZWN0LCBvYnNlcnZlLCBub3RpZnkpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGN1cnJlbnRQcm9wcyBCYWcgb2YgYWxsIGN1cnJlbnQgYWNjZXNzb3IgdmFsdWVzCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gY2hhbmdlZFByb3BzIEJhZyBvZiBwcm9wZXJ0aWVzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QKICAgICAgICogICBjYWxsIHRvIGBfcHJvcGVydGllc0NoYW5nZWRgCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgZWFjaCBwcm9wZXJ0eQogICAgICAgKiAgIGluIGBjaGFuZ2VkUHJvcHNgCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfcHJvcGVydGllc0NoYW5nZWQoY3VycmVudFByb3BzLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzKSB7CiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIC8vIGxldCBjID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hhbmdlZFByb3BzIHx8IHt9KTsKICAgICAgICAvLyB3aW5kb3cuZGVidWcgJiYgY29uc29sZS5ncm91cCh0aGlzLmxvY2FsTmFtZSArICcjJyArIHRoaXMuaWQgKyAnOiAnICsgYyk7CiAgICAgICAgLy8gaWYgKHdpbmRvdy5kZWJ1ZykgeyBkZWJ1Z2dlcjsgfQogICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBsZXQgaGFzUGF0aHMgPSB0aGlzLl9fZGF0YUhhc1BhdGhzOwogICAgICAgIHRoaXMuX19kYXRhSGFzUGF0aHMgPSBmYWxzZTsKICAgICAgICAvLyBDb21wdXRlIHByb3BlcnRpZXMKICAgICAgICBydW5Db21wdXRlZEVmZmVjdHModGhpcywgY2hhbmdlZFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpOwogICAgICAgIC8vIENsZWFyIG5vdGlmeSBwcm9wZXJ0aWVzIHByaW9yIHRvIHBvc3NpYmxlIHJlZW50cnkgKHByb3BhZ2F0ZSwgb2JzZXJ2ZSksCiAgICAgICAgLy8gYnV0IGFmdGVyIGNvbXB1dGluZyBlZmZlY3RzIGhhdmUgYSBjaGFuY2UgdG8gYWRkIHRvIHRoZW0KICAgICAgICBsZXQgbm90aWZ5UHJvcHMgPSB0aGlzLl9fZGF0YVRvTm90aWZ5OwogICAgICAgIHRoaXMuX19kYXRhVG9Ob3RpZnkgPSBudWxsOwogICAgICAgIC8vIFByb3BhZ2F0ZSBwcm9wZXJ0aWVzIHRvIGNsaWVudHMKICAgICAgICB0aGlzLl9wcm9wYWdhdGVQcm9wZXJ0eUNoYW5nZXMoY2hhbmdlZFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpOwogICAgICAgIC8vIEZsdXNoIGNsaWVudHMKICAgICAgICB0aGlzLl9mbHVzaENsaWVudHMoKTsKICAgICAgICAvLyBSZWZsZWN0IHByb3BlcnRpZXMKICAgICAgICBydW5FZmZlY3RzKHRoaXMsIHRoaXNbVFlQRVMuUkVGTEVDVF0sIGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgICAvLyBPYnNlcnZlIHByb3BlcnRpZXMKICAgICAgICBydW5FZmZlY3RzKHRoaXMsIHRoaXNbVFlQRVMuT0JTRVJWRV0sIGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgICAvLyBOb3RpZnkgcHJvcGVydGllcyB0byBob3N0CiAgICAgICAgaWYgKG5vdGlmeVByb3BzKSB7CiAgICAgICAgICBydW5Ob3RpZnlFZmZlY3RzKHRoaXMsIG5vdGlmeVByb3BzLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocyk7CiAgICAgICAgfQogICAgICAgIC8vIENsZWFyIHRlbXBvcmFyeSBjYWNoZSBhdCBlbmQgb2YgdHVybgogICAgICAgIGlmICh0aGlzLl9fZGF0YUNvdW50ZXIgPT0gMSkgewogICAgICAgICAgdGhpcy5fX2RhdGFUZW1wID0ge307CiAgICAgICAgfQogICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAvLyB3aW5kb3cuZGVidWcgJiYgY29uc29sZS5ncm91cEVuZCh0aGlzLmxvY2FsTmFtZSArICcjJyArIHRoaXMuaWQgKyAnOiAnICsgYyk7CiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2FsbGVkIHRvIHByb3BhZ2F0ZSBhbnkgcHJvcGVydHkgY2hhbmdlcyB0byBzdGFtcGVkIHRlbXBsYXRlIG5vZGVzCiAgICAgICAqIG1hbmFnZWQgYnkgdGhpcyBlbGVtZW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2hhbmdlZFByb3BzIEJhZyBvZiBjaGFuZ2VkIHByb3BlcnRpZXMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9sZFByb3BzIEJhZyBvZiBwcmV2aW91cyB2YWx1ZXMgZm9yIGNoYW5nZWQgcHJvcGVydGllcwogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc1BhdGhzIFRydWUgd2l0aCBgcHJvcHNgIGNvbnRhaW5zIG9uZSBvciBtb3JlIHBhdGhzCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9wcm9wYWdhdGVQcm9wZXJ0eUNoYW5nZXMoY2hhbmdlZFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpIHsKICAgICAgICBpZiAodGhpc1tUWVBFUy5QUk9QQUdBVEVdKSB7CiAgICAgICAgICBydW5FZmZlY3RzKHRoaXMsIHRoaXNbVFlQRVMuUFJPUEFHQVRFXSwgY2hhbmdlZFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpOwogICAgICAgIH0KICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gdGhpcy5fX3RlbXBsYXRlSW5mbzsKICAgICAgICB3aGlsZSAodGVtcGxhdGVJbmZvKSB7CiAgICAgICAgICBydW5FZmZlY3RzKHRoaXMsIHRlbXBsYXRlSW5mby5wcm9wZXJ0eUVmZmVjdHMsIGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsCiAgICAgICAgICAgIGhhc1BhdGhzLCB0ZW1wbGF0ZUluZm8ubm9kZUxpc3QpOwogICAgICAgICAgdGVtcGxhdGVJbmZvID0gdGVtcGxhdGVJbmZvLm5leHRUZW1wbGF0ZUluZm87CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQWxpYXNlcyBvbmUgZGF0YSBwYXRoIGFzIGFub3RoZXIsIHN1Y2ggdGhhdCBwYXRoIG5vdGlmaWNhdGlvbnMgZnJvbSBvbmUKICAgICAgICogYXJlIHJvdXRlZCB0byB0aGUgb3RoZXIuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSB0byBUYXJnZXQgcGF0aCB0byBsaW5rLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gZnJvbSBTb3VyY2UgcGF0aCB0byBsaW5rLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICBsaW5rUGF0aHModG8sIGZyb20pIHsKICAgICAgICB0byA9IFBvbHltZXIuUGF0aC5ub3JtYWxpemUodG8pOwogICAgICAgIGZyb20gPSBQb2x5bWVyLlBhdGgubm9ybWFsaXplKGZyb20pOwogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHMgPSB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzIHx8IHt9OwogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHNbdG9dID0gZnJvbTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZXMgYSBkYXRhIHBhdGggYWxpYXMgcHJldmlvdXNseSBlc3RhYmxpc2hlZCB3aXRoIGBfbGlua1BhdGhzYC4KICAgICAgICoKICAgICAgICogTm90ZSwgdGhlIHBhdGggdG8gdW5saW5rIHNob3VsZCBiZSB0aGUgdGFyZ2V0IChgdG9gKSB1c2VkIHdoZW4KICAgICAgICogbGlua2luZyB0aGUgcGF0aHMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIFRhcmdldCBwYXRoIHRvIHVubGluay4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHB1YmxpYwogICAgICAgKi8KICAgICAgdW5saW5rUGF0aHMocGF0aCkgewogICAgICAgIHBhdGggPSBQb2x5bWVyLlBhdGgubm9ybWFsaXplKHBhdGgpOwogICAgICAgIGlmICh0aGlzLl9fZGF0YUxpbmtlZFBhdGhzKSB7CiAgICAgICAgICBkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1twYXRoXTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBOb3RpZnkgdGhhdCBhbiBhcnJheSBoYXMgY2hhbmdlZC4KICAgICAgICoKICAgICAgICogRXhhbXBsZToKICAgICAgICoKICAgICAgICogICAgIHRoaXMuaXRlbXMgPSBbIHtuYW1lOiAnSmltJ30sIHtuYW1lOiAnVG9kZCd9LCB7bmFtZTogJ0JpbGwnfSBdOwogICAgICAgKiAgICAgLi4uCiAgICAgICAqICAgICB0aGlzLml0ZW1zLnNwbGljZSgxLCAxLCB7bmFtZTogJ1NhbSd9KTsKICAgICAgICogICAgIHRoaXMuaXRlbXMucHVzaCh7bmFtZTogJ0JvYid9KTsKICAgICAgICogICAgIHRoaXMubm90aWZ5U3BsaWNlcygnaXRlbXMnLCBbCiAgICAgICAqICAgICAgIHsgaW5kZXg6IDEsIHJlbW92ZWQ6IFt7bmFtZTogJ1RvZGQnfV0sIGFkZGVkQ291bnQ6IDEsIG9iamVjdDogdGhpcy5pdGVtcywgdHlwZTogJ3NwbGljZScgfSwKICAgICAgICogICAgICAgeyBpbmRleDogMywgcmVtb3ZlZDogW10sIGFkZGVkQ291bnQ6IDEsIG9iamVjdDogdGhpcy5pdGVtcywgdHlwZTogJ3NwbGljZSd9CiAgICAgICAqICAgICBdKTsKICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCB0aGF0IHNob3VsZCBiZSBub3RpZmllZC4KICAgICAgICogQHBhcmFtIHtBcnJheX0gc3BsaWNlcyBBcnJheSBvZiBzcGxpY2UgcmVjb3JkcyBpbmRpY2F0aW5nIG9yZGVyZWQKICAgICAgICogICBjaGFuZ2VzIHRoYXQgb2NjdXJyZWQgdG8gdGhlIGFycmF5LiBFYWNoIHJlY29yZCBzaG91bGQgaGF2ZSB0aGUKICAgICAgICogICBmb2xsb3dpbmcgZmllbGRzOgogICAgICAgKiAgICAqIGluZGV4OiBpbmRleCBhdCB3aGljaCB0aGUgY2hhbmdlIG9jY3VycmVkCiAgICAgICAqICAgICogcmVtb3ZlZDogYXJyYXkgb2YgaXRlbXMgdGhhdCB3ZXJlIHJlbW92ZWQgZnJvbSB0aGlzIGluZGV4CiAgICAgICAqICAgICogYWRkZWRDb3VudDogbnVtYmVyIG9mIG5ldyBpdGVtcyBhZGRlZCBhdCB0aGlzIGluZGV4CiAgICAgICAqICAgICogb2JqZWN0OiBhIHJlZmVyZW5jZSB0byB0aGUgYXJyYXkgaW4gcXVlc3Rpb24KICAgICAgICogICAgKiB0eXBlOiB0aGUgc3RyaW5nIGxpdGVyYWwgJ3NwbGljZScKICAgICAgICoKICAgICAgICogICBOb3RlIHRoYXQgc3BsaWNlIHJlY29yZHMgX211c3RfIGJlIG5vcm1hbGl6ZWQgc3VjaCB0aGF0IHRoZXkgYXJlCiAgICAgICAqICAgcmVwb3J0ZWQgaW4gaW5kZXggb3JkZXIgKHJhdyByZXN1bHRzIGZyb20gYE9iamVjdC5vYnNlcnZlYCBhcmUgbm90CiAgICAgICAqICAgb3JkZXJlZCBhbmQgbXVzdCBiZSBub3JtYWxpemVkL21lcmdlZCBiZWZvcmUgbm90aWZ5aW5nKS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHB1YmxpYwogICAgICAqLwogICAgICBub3RpZnlTcGxpY2VzKHBhdGgsIHNwbGljZXMpIHsKICAgICAgICBsZXQgaW5mbyA9IHtwYXRoOiAnJ307CiAgICAgICAgbGV0IGFycmF5ID0gLyoqIEB0eXBlIHtBcnJheX0gKi8oUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoLCBpbmZvKSk7CiAgICAgICAgbm90aWZ5U3BsaWNlcyh0aGlzLCBhcnJheSwgaW5mby5wYXRoLCBzcGxpY2VzKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgcmVhZGluZyBhIHZhbHVlIGZyb20gYSBwYXRoLgogICAgICAgKgogICAgICAgKiBOb3RlLCBpZiBhbnkgcGFydCBpbiB0aGUgcGF0aCBpcyB1bmRlZmluZWQsIHRoaXMgbWV0aG9kIHJldHVybnMKICAgICAgICogYHVuZGVmaW5lZGAgKHRoaXMgbWV0aG9kIGRvZXMgbm90IHRocm93IHdoZW4gZGVyZWZlcmVuY2luZyB1bmRlZmluZWQKICAgICAgICogcGF0aHMpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyhzdHJpbmd8IUFycmF5PChzdHJpbmd8bnVtYmVyKT4pfSBwYXRoIFBhdGggdG8gdGhlIHZhbHVlCiAgICAgICAqICAgdG8gcmVhZC4gIFRoZSBwYXRoIG1heSBiZSBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgKGUuZy4gYGZvby5iYXIuYmF6YCkKICAgICAgICogICBvciBhbiBhcnJheSBvZiBwYXRoIHBhcnRzIChlLmcuIGBbJ2Zvby5iYXInLCAnYmF6J11gKS4gIE5vdGUgdGhhdAogICAgICAgKiAgIGJyYWNrZXRlZCBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZDsgc3RyaW5nLWJhc2VkIHBhdGggcGFydHMKICAgICAgICogICAqbXVzdCogYmUgc2VwYXJhdGVkIGJ5IGRvdHMuICBOb3RlIHRoYXQgd2hlbiBkZXJlZmVyZW5jaW5nIGFycmF5CiAgICAgICAqICAgaW5kaWNlcywgdGhlIGluZGV4IG1heSBiZSB1c2VkIGFzIGEgZG90dGVkIHBhcnQgZGlyZWN0bHkKICAgICAgICogICAoZS5nLiBgdXNlcnMuMTIubmFtZWAgb3IgYFsndXNlcnMnLCAxMiwgJ25hbWUnXWApLgogICAgICAgKiBAcGFyYW0ge09iamVjdD19IHJvb3QgUm9vdCBvYmplY3QgZnJvbSB3aGljaCB0aGUgcGF0aCBpcyBldmFsdWF0ZWQuCiAgICAgICAqIEByZXR1cm4geyp9IFZhbHVlIGF0IHRoZSBwYXRoLCBvciBgdW5kZWZpbmVkYCBpZiBhbnkgcGFydCBvZiB0aGUgcGF0aAogICAgICAgKiAgIGlzIHVuZGVmaW5lZC4KICAgICAgICogQHB1YmxpYwogICAgICAgKi8KICAgICAgZ2V0KHBhdGgsIHJvb3QpIHsKICAgICAgICByZXR1cm4gUG9seW1lci5QYXRoLmdldChyb290IHx8IHRoaXMsIHBhdGgpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBzZXR0aW5nIGEgdmFsdWUgdG8gYSBwYXRoIGFuZCBub3RpZnlpbmcgYW55CiAgICAgICAqIGVsZW1lbnRzIGJvdW5kIHRvIHRoZSBzYW1lIHBhdGguCiAgICAgICAqCiAgICAgICAqIE5vdGUsIGlmIGFueSBwYXJ0IGluIHRoZSBwYXRoIGV4Y2VwdCBmb3IgdGhlIGxhc3QgaXMgdW5kZWZpbmVkLAogICAgICAgKiB0aGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcgKHRoaXMgbWV0aG9kIGRvZXMgbm90IHRocm93IHdoZW4KICAgICAgICogZGVyZWZlcmVuY2luZyB1bmRlZmluZWQgcGF0aHMpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyhzdHJpbmd8IUFycmF5PChzdHJpbmd8bnVtYmVyKT4pfSBwYXRoIFBhdGggdG8gdGhlIHZhbHVlCiAgICAgICAqICAgdG8gd3JpdGUuICBUaGUgcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChlLmcuIGAnZm9vLmJhci5iYXonYCkKICAgICAgICogICBvciBhbiBhcnJheSBvZiBwYXRoIHBhcnRzIChlLmcuIGBbJ2Zvby5iYXInLCAnYmF6J11gKS4gIE5vdGUgdGhhdAogICAgICAgKiAgIGJyYWNrZXRlZCBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZDsgc3RyaW5nLWJhc2VkIHBhdGggcGFydHMKICAgICAgICogICAqbXVzdCogYmUgc2VwYXJhdGVkIGJ5IGRvdHMuICBOb3RlIHRoYXQgd2hlbiBkZXJlZmVyZW5jaW5nIGFycmF5CiAgICAgICAqICAgaW5kaWNlcywgdGhlIGluZGV4IG1heSBiZSB1c2VkIGFzIGEgZG90dGVkIHBhcnQgZGlyZWN0bHkKICAgICAgICogICAoZS5nLiBgJ3VzZXJzLjEyLm5hbWUnYCBvciBgWyd1c2VycycsIDEyLCAnbmFtZSddYCkuCiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0IGF0IHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSByb290IFJvb3Qgb2JqZWN0IGZyb20gd2hpY2ggdGhlIHBhdGggaXMgZXZhbHVhdGVkLgogICAgICAgKiAgIFdoZW4gc3BlY2lmaWVkLCBubyBub3RpZmljYXRpb24gd2lsbCBvY2N1ci4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHB1YmxpYwogICAgICAqLwogICAgICBzZXQocGF0aCwgdmFsdWUsIHJvb3QpIHsKICAgICAgICBpZiAocm9vdCkgewogICAgICAgICAgUG9seW1lci5QYXRoLnNldChyb290LCBwYXRoLCB2YWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghdGhpc1tUWVBFUy5SRUFEX09OTFldIHx8ICF0aGlzW1RZUEVTLlJFQURfT05MWV1bLyoqIEB0eXBlIHtzdHJpbmd9ICovKHBhdGgpXSkgewogICAgICAgICAgICBpZiAodGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHBhdGgsIHZhbHVlLCB0cnVlKSkgewogICAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGl0ZW1zIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkgYXQgdGhlIHBhdGggc3BlY2lmaWVkLgogICAgICAgKgogICAgICAgKiBUaGUgYXJndW1lbnRzIGFmdGVyIGBwYXRoYCBhbmQgcmV0dXJuIHZhbHVlIG1hdGNoIHRoYXQgb2YKICAgICAgICogYEFycmF5LnByb3RvdHlwZS5wdXNoYC4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2Qgbm90aWZpZXMgb3RoZXIgcGF0aHMgdG8gdGhlIHNhbWUgYXJyYXkgdGhhdCBhCiAgICAgICAqIHNwbGljZSBvY2N1cnJlZCB0byB0aGUgYXJyYXkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIFBhdGggdG8gYXJyYXkuCiAgICAgICAqIEBwYXJhbSB7Li4uKn0gaXRlbXMgSXRlbXMgdG8gcHVzaCBvbnRvIGFycmF5CiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gTmV3IGxlbmd0aCBvZiB0aGUgYXJyYXkuCiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIHB1c2gocGF0aCwgLi4uaXRlbXMpIHsKICAgICAgICBsZXQgaW5mbyA9IHtwYXRoOiAnJ307CiAgICAgICAgbGV0IGFycmF5ID0gLyoqIEB0eXBlIHtBcnJheX0qLyhQb2x5bWVyLlBhdGguZ2V0KHRoaXMsIHBhdGgsIGluZm8pKTsKICAgICAgICBsZXQgbGVuID0gYXJyYXkubGVuZ3RoOwogICAgICAgIGxldCByZXQgPSBhcnJheS5wdXNoKC4uLml0ZW1zKTsKICAgICAgICBpZiAoaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgICBub3RpZnlTcGxpY2UodGhpcywgYXJyYXksIGluZm8ucGF0aCwgbGVuLCBpdGVtcy5sZW5ndGgsIFtdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZXMgYW4gaXRlbSBmcm9tIHRoZSBlbmQgb2YgYXJyYXkgYXQgdGhlIHBhdGggc3BlY2lmaWVkLgogICAgICAgKgogICAgICAgKiBUaGUgYXJndW1lbnRzIGFmdGVyIGBwYXRoYCBhbmQgcmV0dXJuIHZhbHVlIG1hdGNoIHRoYXQgb2YKICAgICAgICogYEFycmF5LnByb3RvdHlwZS5wb3BgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBub3RpZmllcyBvdGhlciBwYXRocyB0byB0aGUgc2FtZSBhcnJheSB0aGF0IGEKICAgICAgICogc3BsaWNlIG9jY3VycmVkIHRvIHRoZSBhcnJheS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byBhcnJheS4KICAgICAgICogQHJldHVybiB7Kn0gSXRlbSB0aGF0IHdhcyByZW1vdmVkLgogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICBwb3AocGF0aCkgewogICAgICAgIGxldCBpbmZvID0ge3BhdGg6ICcnfTsKICAgICAgICBsZXQgYXJyYXkgPSAvKiogQHR5cGUge0FycmF5fSAqLyhQb2x5bWVyLlBhdGguZ2V0KHRoaXMsIHBhdGgsIGluZm8pKTsKICAgICAgICBsZXQgaGFkTGVuZ3RoID0gQm9vbGVhbihhcnJheS5sZW5ndGgpOwogICAgICAgIGxldCByZXQgPSBhcnJheS5wb3AoKTsKICAgICAgICBpZiAoaGFkTGVuZ3RoKSB7CiAgICAgICAgICBub3RpZnlTcGxpY2UodGhpcywgYXJyYXksIGluZm8ucGF0aCwgYXJyYXkubGVuZ3RoLCAwLCBbcmV0XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTdGFydGluZyBmcm9tIHRoZSBzdGFydCBpbmRleCBzcGVjaWZpZWQsIHJlbW92ZXMgMCBvciBtb3JlIGl0ZW1zCiAgICAgICAqIGZyb20gdGhlIGFycmF5IGFuZCBpbnNlcnRzIDAgb3IgbW9yZSBuZXcgaXRlbXMgaW4gdGhlaXIgcGxhY2UuCiAgICAgICAqCiAgICAgICAqIFRoZSBhcmd1bWVudHMgYWZ0ZXIgYHBhdGhgIGFuZCByZXR1cm4gdmFsdWUgbWF0Y2ggdGhhdCBvZgogICAgICAgKiBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIG5vdGlmaWVzIG90aGVyIHBhdGhzIHRvIHRoZSBzYW1lIGFycmF5IHRoYXQgYQogICAgICAgKiBzcGxpY2Ugb2NjdXJyZWQgdG8gdGhlIGFycmF5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gcGF0aCBQYXRoIHRvIGFycmF5LgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgSW5kZXggZnJvbSB3aGljaCB0byBzdGFydCByZW1vdmluZy9pbnNlcnRpbmcuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZWxldGVDb3VudCBOdW1iZXIgb2YgaXRlbXMgdG8gcmVtb3ZlLgogICAgICAgKiBAcGFyYW0gey4uLip9IGl0ZW1zIEl0ZW1zIHRvIGluc2VydCBpbnRvIGFycmF5LgogICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgb2YgcmVtb3ZlZCBpdGVtcy4KICAgICAgICogQHB1YmxpYwogICAgICAgKi8KICAgICAgc3BsaWNlKHBhdGgsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpIHsKICAgICAgICBsZXQgaW5mbyA9IHtwYXRoIDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9ICovKFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbykpOwogICAgICAgIC8vIE5vcm1hbGl6ZSBmYW5jeSBuYXRpdmUgc3BsaWNlIGhhbmRsaW5nIG9mIGNyYXp5IHN0YXJ0IHZhbHVlcwogICAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgIHN0YXJ0ID0gYXJyYXkubGVuZ3RoIC0gTWF0aC5mbG9vcigtc3RhcnQpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhcnQpIHsKICAgICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCk7CiAgICAgICAgfQogICAgICAgIC8vIGFycmF5LnNwbGljZSBkb2VzIGRpZmZlcmVudCB0aGluZ3MgYmFzZWQgb24gdGhlIG51bWJlciBvZiBhcmd1bWVudHMKICAgICAgICAvLyB5b3UgcGFzcyBpbi4gVGhlcmVmb3JlLCBhcnJheS5zcGxpY2UoMCkgYW5kIGFycmF5LnNwbGljZSgwLCB1bmRlZmluZWQpCiAgICAgICAgLy8gZG8gZGlmZmVyZW50IHRoaW5ncy4gSW4gdGhlIGZvcm1lciwgdGhlIHdob2xlIGFycmF5IGlzIGNsZWFyZWQuIEluIHRoZQogICAgICAgIC8vIGxhdHRlciwgbm8gaXRlbXMgYXJlIHJlbW92ZWQuCiAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZGV0ZWN0IHdoZXRoZXIgMS4gb25lIG9mIHRoZSBhcmd1bWVudHMKICAgICAgICAvLyBpcyBhY3R1YWxseSBwYXNzZWQgaW4gYW5kIHRoZW4gMi4gZGV0ZXJtaW5lIGhvdyBtYW55IGFyZ3VtZW50cwogICAgICAgIC8vIHdlIHNob3VsZCBwYXNzIG9uIHRvIHRoZSBuYXRpdmUgYXJyYXkuc3BsaWNlCiAgICAgICAgLy8KICAgICAgICBsZXQgcmV0OwogICAgICAgIC8vIE9taXQgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGlmIHRoZXkgd2VyZSBub3QgcGFzc2VkIGluCiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKICAgICAgICAgIHJldCA9IGFycmF5LnNwbGljZShzdGFydCk7CiAgICAgICAgLy8gRWl0aGVyIHN0YXJ0IHdhcyB1bmRlZmluZWQgYW5kIHRoZSBvdGhlcnMgd2VyZSBkZWZpbmVkLCBidXQgaW4gdGhpcwogICAgICAgIC8vIGNhc2Ugd2UgY2FuIHNhZmVseSBwYXNzIG9uIGFsbCBhcmd1bWVudHMKICAgICAgICAvLwogICAgICAgIC8vIE5vdGU6IHRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugd2hlcmUgbm9uZSBvZiB0aGUgYXJndW1lbnRzIHdlcmUgcGFzc2VkIGluLAogICAgICAgIC8vIGUuZy4gdGhpcy5zcGxpY2UoJ2FycmF5JykuIEhvd2V2ZXIsIGlmIGJvdGggc3RhcnQgYW5kIGRlbGV0ZUNvdW50CiAgICAgICAgLy8gYXJlIHVuZGVmaW5lZCwgYXJyYXkuc3BsaWNlIHdpbGwgbm90IG1vZGlmeSB0aGUgYXJyYXkgKGFzIGV4cGVjdGVkKQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXQgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5pdGVtcyk7CiAgICAgICAgfQogICAgICAgIC8vIEF0IHRoZSBlbmQsIGNoZWNrIHdoZXRoZXIgYW55IGl0ZW1zIHdlcmUgcGFzc2VkIGluIChlLmcuIGluc2VydGlvbnMpCiAgICAgICAgLy8gb3IgaWYgdGhlIHJldHVybiBhcnJheSBjb250YWlucyBpdGVtcyAoZS5nLiBkZWxldGlvbnMpLgogICAgICAgIC8vIE9ubHkgbm90aWZ5IGlmIGl0ZW1zIHdlcmUgYWRkZWQgb3IgZGVsZXRlZC4KICAgICAgICBpZiAoaXRlbXMubGVuZ3RoIHx8IHJldC5sZW5ndGgpIHsKICAgICAgICAgIG5vdGlmeVNwbGljZSh0aGlzLCBhcnJheSwgaW5mby5wYXRoLCBzdGFydCwgaXRlbXMubGVuZ3RoLCByZXQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmVtb3ZlcyBhbiBpdGVtIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhcnJheSBhdCB0aGUgcGF0aCBzcGVjaWZpZWQuCiAgICAgICAqCiAgICAgICAqIFRoZSBhcmd1bWVudHMgYWZ0ZXIgYHBhdGhgIGFuZCByZXR1cm4gdmFsdWUgbWF0Y2ggdGhhdCBvZgogICAgICAgKiBgQXJyYXkucHJvdG90eXBlLnBvcGAuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIG5vdGlmaWVzIG90aGVyIHBhdGhzIHRvIHRoZSBzYW1lIGFycmF5IHRoYXQgYQogICAgICAgKiBzcGxpY2Ugb2NjdXJyZWQgdG8gdGhlIGFycmF5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gcGF0aCBQYXRoIHRvIGFycmF5LgogICAgICAgKiBAcmV0dXJuIHsqfSBJdGVtIHRoYXQgd2FzIHJlbW92ZWQuCiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIHNoaWZ0KHBhdGgpIHsKICAgICAgICBsZXQgaW5mbyA9IHtwYXRoOiAnJ307CiAgICAgICAgbGV0IGFycmF5ID0gLyoqIEB0eXBlIHtBcnJheX0gKi8oUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoLCBpbmZvKSk7CiAgICAgICAgbGV0IGhhZExlbmd0aCA9IEJvb2xlYW4oYXJyYXkubGVuZ3RoKTsKICAgICAgICBsZXQgcmV0ID0gYXJyYXkuc2hpZnQoKTsKICAgICAgICBpZiAoaGFkTGVuZ3RoKSB7CiAgICAgICAgICBub3RpZnlTcGxpY2UodGhpcywgYXJyYXksIGluZm8ucGF0aCwgMCwgMCwgW3JldF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CgogICAgICAvKioKICAgICAgICogQWRkcyBpdGVtcyBvbnRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5IGF0IHRoZSBwYXRoIHNwZWNpZmllZC4KICAgICAgICoKICAgICAgICogVGhlIGFyZ3VtZW50cyBhZnRlciBgcGF0aGAgYW5kIHJldHVybiB2YWx1ZSBtYXRjaCB0aGF0IG9mCiAgICAgICAqIGBBcnJheS5wcm90b3R5cGUucHVzaGAuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIG5vdGlmaWVzIG90aGVyIHBhdGhzIHRvIHRoZSBzYW1lIGFycmF5IHRoYXQgYQogICAgICAgKiBzcGxpY2Ugb2NjdXJyZWQgdG8gdGhlIGFycmF5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gcGF0aCBQYXRoIHRvIGFycmF5LgogICAgICAgKiBAcGFyYW0gey4uLip9IGl0ZW1zIEl0ZW1zIHRvIGluc2VydCBpbmZvIGFycmF5CiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gTmV3IGxlbmd0aCBvZiB0aGUgYXJyYXkuCiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIHVuc2hpZnQocGF0aCwgLi4uaXRlbXMpIHsKICAgICAgICBsZXQgaW5mbyA9IHtwYXRoOiAnJ307CiAgICAgICAgbGV0IGFycmF5ID0gLyoqIEB0eXBlIHtBcnJheX0gKi8oUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoLCBpbmZvKSk7CiAgICAgICAgbGV0IHJldCA9IGFycmF5LnVuc2hpZnQoLi4uaXRlbXMpOwogICAgICAgIGlmIChpdGVtcy5sZW5ndGgpIHsKICAgICAgICAgIG5vdGlmeVNwbGljZSh0aGlzLCBhcnJheSwgaW5mby5wYXRoLCAwLCBpdGVtcy5sZW5ndGgsIFtdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE5vdGlmeSB0aGF0IGEgcGF0aCBoYXMgY2hhbmdlZC4KICAgICAgICoKICAgICAgICogRXhhbXBsZToKICAgICAgICoKICAgICAgICogICAgIHRoaXMuaXRlbS51c2VyLm5hbWUgPSAnQm9iJzsKICAgICAgICogICAgIHRoaXMubm90aWZ5UGF0aCgnaXRlbS51c2VyLm5hbWUnKTsKICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCB0aGF0IHNob3VsZCBiZSBub3RpZmllZC4KICAgICAgICogQHBhcmFtIHsqPX0gdmFsdWUgVmFsdWUgYXQgdGhlIHBhdGggKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHB1YmxpYwogICAgICAqLwogICAgICBub3RpZnlQYXRoKHBhdGgsIHZhbHVlKSB7CiAgICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovCiAgICAgICAgbGV0IHByb3BQYXRoOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgIC8vIEdldCB2YWx1ZSBpZiBub3Qgc3VwcGxpZWQKICAgICAgICAgIGxldCBpbmZvID0ge3BhdGg6ICcnfTsKICAgICAgICAgIHZhbHVlID0gUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoLCBpbmZvKTsKICAgICAgICAgIHByb3BQYXRoID0gaW5mby5wYXRoOwogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkgewogICAgICAgICAgLy8gTm9ybWFsaXplIHBhdGggaWYgbmVlZGVkCiAgICAgICAgICBwcm9wUGF0aCA9IFBvbHltZXIuUGF0aC5ub3JtYWxpemUocGF0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByb3BQYXRoID0gLyoqIEB0eXBle3N0cmluZ30gKi8ocGF0aCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocHJvcFBhdGgsIHZhbHVlLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBFcXVpdmFsZW50IHRvIHN0YXRpYyBgY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eWAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHByb3RlY3RlZFNldHRlciBDcmVhdGVzIGEgY3VzdG9tIHByb3RlY3RlZCBzZXR0ZXIKICAgICAgICogICB3aGVuIGB0cnVlYC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkocHJvcGVydHksIHByb3RlY3RlZFNldHRlcikgewogICAgICAgIHRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KHByb3BlcnR5LCBUWVBFUy5SRUFEX09OTFkpOwogICAgICAgIGlmIChwcm90ZWN0ZWRTZXR0ZXIpIHsKICAgICAgICAgIHRoaXNbJ19zZXQnICsgdXBwZXIocHJvcGVydHkpXSA9IC8qKiBAdGhpcyB7UHJvcGVydHlFZmZlY3RzfSAqL2Z1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBjcmVhdGVQcm9wZXJ0eU9ic2VydmVyYCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd8ZnVuY3Rpb24oKiwqKX0gbWV0aG9kIEZ1bmN0aW9uIG9yIG5hbWUgb2Ygb2JzZXJ2ZXIgbWV0aG9kIHRvIGNhbGwKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gZHluYW1pY0ZuIFdoZXRoZXIgdGhlIG1ldGhvZCBuYW1lIHNob3VsZCBiZSBpbmNsdWRlZCBhcwogICAgICAgKiAgIGEgZGVwZW5kZW5jeSB0byB0aGUgZWZmZWN0LgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfY3JlYXRlUHJvcGVydHlPYnNlcnZlcihwcm9wZXJ0eSwgbWV0aG9kLCBkeW5hbWljRm4pIHsKICAgICAgICBsZXQgaW5mbyA9IHsgcHJvcGVydHksIG1ldGhvZCwgZHluYW1pY0ZuOiBCb29sZWFuKGR5bmFtaWNGbikgfTsKICAgICAgICB0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuT0JTRVJWRSwgewogICAgICAgICAgZm46IHJ1bk9ic2VydmVyRWZmZWN0LCBpbmZvLCB0cmlnZ2VyOiB7bmFtZTogcHJvcGVydHl9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGR5bmFtaWNGbikgewogICAgICAgICAgdGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoLyoqIEB0eXBlIHtzdHJpbmd9ICovKG1ldGhvZCksIFRZUEVTLk9CU0VSVkUsIHsKICAgICAgICAgICAgZm46IHJ1bk9ic2VydmVyRWZmZWN0LCBpbmZvLCB0cmlnZ2VyOiB7bmFtZTogbWV0aG9kfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRXF1aXZhbGVudCB0byBzdGF0aWMgYGNyZWF0ZU1ldGhvZE9ic2VydmVyYCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gTWV0aG9kIGV4cHJlc3Npb24KICAgICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdD19IGR5bmFtaWNGbiBCb29sZWFuIG9yIG9iamVjdCBtYXAgaW5kaWNhdGluZwogICAgICAgKiAgIHdoZXRoZXIgbWV0aG9kIG5hbWVzIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2NyZWF0ZU1ldGhvZE9ic2VydmVyKGV4cHJlc3Npb24sIGR5bmFtaWNGbikgewogICAgICAgIGxldCBzaWcgPSBwYXJzZU1ldGhvZChleHByZXNzaW9uKTsKICAgICAgICBpZiAoIXNpZykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgb2JzZXJ2ZXIgZXhwcmVzc2lvbiAnIiArIGV4cHJlc3Npb24gKyAiJyIpOwogICAgICAgIH0KICAgICAgICBjcmVhdGVNZXRob2RFZmZlY3QodGhpcywgc2lnLCBUWVBFUy5PQlNFUlZFLCBydW5NZXRob2RFZmZlY3QsIG51bGwsIGR5bmFtaWNGbik7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBFcXVpdmFsZW50IHRvIHN0YXRpYyBgY3JlYXRlTm90aWZ5aW5nUHJvcGVydHlgIEFQSSBidXQgY2FuIGJlIGNhbGxlZCBvbgogICAgICAgKiBhbiBpbnN0YW5jZSB0byBhZGQgZWZmZWN0cyBhdCBydW50aW1lLiAgU2VlIHRoYXQgbWV0aG9kIGZvcgogICAgICAgKiBmdWxsIEFQSSBkb2NzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkocHJvcGVydHkpIHsKICAgICAgICB0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuTk9USUZZLCB7CiAgICAgICAgICBmbjogcnVuTm90aWZ5RWZmZWN0LAogICAgICAgICAgaW5mbzogewogICAgICAgICAgICBldmVudE5hbWU6IENhc2VNYXAuY2FtZWxUb0Rhc2hDYXNlKHByb3BlcnR5KSArICctY2hhbmdlZCcsCiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRXF1aXZhbGVudCB0byBzdGF0aWMgYGNyZWF0ZVJlZmxlY3RlZFByb3BlcnR5YCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgbGV0IGF0dHIgPSB0aGlzLmNvbnN0cnVjdG9yLmF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgICAgaWYgKGF0dHJbMF0gPT09ICctJykgewogICAgICAgICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSAnICsgcHJvcGVydHkgKyAnIGNhbm5vdCBiZSByZWZsZWN0ZWQgdG8gYXR0cmlidXRlICcgKwogICAgICAgICAgICBhdHRyICsgJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KHByb3BlcnR5LCBUWVBFUy5SRUZMRUNULCB7CiAgICAgICAgICAgIGZuOiBydW5SZWZsZWN0RWZmZWN0LAogICAgICAgICAgICBpbmZvOiB7CiAgICAgICAgICAgICAgYXR0ck5hbWU6IGF0dHIKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRXF1aXZhbGVudCB0byBzdGF0aWMgYGNyZWF0ZUNvbXB1dGVkUHJvcGVydHlgIEFQSSBidXQgY2FuIGJlIGNhbGxlZCBvbgogICAgICAgKiBhbiBpbnN0YW5jZSB0byBhZGQgZWZmZWN0cyBhdCBydW50aW1lLiAgU2VlIHRoYXQgbWV0aG9kIGZvcgogICAgICAgKiBmdWxsIEFQSSBkb2NzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiBjb21wdXRlZCBwcm9wZXJ0eSB0byBzZXQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gTWV0aG9kIGV4cHJlc3Npb24KICAgICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdD19IGR5bmFtaWNGbiBCb29sZWFuIG9yIG9iamVjdCBtYXAgaW5kaWNhdGluZwogICAgICAgKiAgIHdoZXRoZXIgbWV0aG9kIG5hbWVzIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkocHJvcGVydHksIGV4cHJlc3Npb24sIGR5bmFtaWNGbikgewogICAgICAgIGxldCBzaWcgPSBwYXJzZU1ldGhvZChleHByZXNzaW9uKTsKICAgICAgICBpZiAoIXNpZykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIiArIGV4cHJlc3Npb24gKyAiJyIpOwogICAgICAgIH0KICAgICAgICBjcmVhdGVNZXRob2RFZmZlY3QodGhpcywgc2lnLCBUWVBFUy5DT01QVVRFLCBydW5Db21wdXRlZEVmZmVjdCwgcHJvcGVydHksIGR5bmFtaWNGbik7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBHYXRoZXIgdGhlIGFyZ3VtZW50IHZhbHVlcyBmb3IgYSBtZXRob2Qgc3BlY2lmaWVkIGluIHRoZSBwcm92aWRlZCBhcnJheQogICAgICAgKiBvZiBhcmd1bWVudCBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogVGhlIGBwYXRoYCBhbmQgYHZhbHVlYCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gZmlsbCBpbiB3aWxkY2FyZCBkZXNjcmlwdG9yCiAgICAgICAqIHdoZW4gdGhlIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgYXMgYSByZXN1bHQgb2YgYSBwYXRoIG5vdGlmaWNhdGlvbi4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshQXJyYXk8IU1ldGhvZEFyZz59IGFyZ3MgQXJyYXkgb2YgYXJndW1lbnQgbWV0YWRhdGEKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUHJvcGVydHkvcGF0aCBuYW1lIHRoYXQgdHJpZ2dlcmVkIHRoZSBtZXRob2QgZWZmZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgY3VycmVudCBwcm9wZXJ0eSBjaGFuZ2VzCiAgICAgICAqIEByZXR1cm4ge0FycmF5PCo+fSBBcnJheSBvZiBhcmd1bWVudCB2YWx1ZXMKICAgICAgICogQHByaXZhdGUKICAgICAgICovCiAgICAgIF9tYXJzaGFsQXJncyhhcmdzLCBwYXRoLCBwcm9wcykgewogICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9fZGF0YTsKICAgICAgICBsZXQgdmFsdWVzID0gW107CiAgICAgICAgZm9yIChsZXQgaT0wLCBsPWFyZ3MubGVuZ3RoOyBpPGw7IGkrKykgewogICAgICAgICAgbGV0IGFyZyA9IGFyZ3NbaV07CiAgICAgICAgICBsZXQgbmFtZSA9IGFyZy5uYW1lOwogICAgICAgICAgbGV0IHY7CiAgICAgICAgICBpZiAoYXJnLmxpdGVyYWwpIHsKICAgICAgICAgICAgdiA9IGFyZy52YWx1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChhcmcuc3RydWN0dXJlZCkgewogICAgICAgICAgICAgIHYgPSBQb2x5bWVyLlBhdGguZ2V0KGRhdGEsIG5hbWUpOwogICAgICAgICAgICAgIC8vIHdoZW4gZGF0YSBpcyBub3Qgc3RvcmVkIGUuZy4gYHNwbGljZXNgCiAgICAgICAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdiA9IHByb3BzW25hbWVdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2ID0gZGF0YVtuYW1lXTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGFyZy53aWxkY2FyZCkgewogICAgICAgICAgICAvLyBPbmx5IHNlbmQgdGhlIGFjdHVhbCBwYXRoIGNoYW5nZWQgaW5mbyBpZiB0aGUgY2hhbmdlIHRoYXQKICAgICAgICAgICAgLy8gY2F1c2VkIHRoZSBvYnNlcnZlciB0byBydW4gbWF0Y2hlZCB0aGUgd2lsZGNhcmQKICAgICAgICAgICAgbGV0IGJhc2VDaGFuZ2VkID0gKG5hbWUuaW5kZXhPZihwYXRoICsgJy4nKSA9PT0gMCk7CiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gKHBhdGguaW5kZXhPZihuYW1lKSA9PT0gMCAmJiAhYmFzZUNoYW5nZWQpOwogICAgICAgICAgICB2YWx1ZXNbaV0gPSB7CiAgICAgICAgICAgICAgcGF0aDogbWF0Y2hlcyA/IHBhdGggOiBuYW1lLAogICAgICAgICAgICAgIHZhbHVlOiBtYXRjaGVzID8gcHJvcHNbcGF0aF0gOiB2LAogICAgICAgICAgICAgIGJhc2U6IHYKICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlc1tpXSA9IHY7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXM7CiAgICAgIH0KCiAgICAgIC8vIC0tIHN0YXRpYyBjbGFzcyBtZXRob2RzIC0tLS0tLS0tLS0tLQoKICAgICAgLyoqCiAgICAgICAqIEVuc3VyZXMgYW4gYWNjZXNzb3IgZXhpc3RzIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LCBhbmQgYWRkcwogICAgICAgKiB0byBhIGxpc3Qgb2YgInByb3BlcnR5IGVmZmVjdHMiIHRoYXQgd2lsbCBydW4gd2hlbiB0aGUgYWNjZXNzb3IgZm9yCiAgICAgICAqIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaXMgc2V0LiAgRWZmZWN0cyBhcmUgZ3JvdXBlZCBieSAidHlwZSIsIHdoaWNoCiAgICAgICAqIHJvdWdobHkgY29ycmVzcG9uZHMgdG8gYSBwaGFzZSBpbiBlZmZlY3QgcHJvY2Vzc2luZy4gIFRoZSBlZmZlY3QKICAgICAgICogbWV0YWRhdGEgc2hvdWxkIGJlIGluIHRoZSBmb2xsb3dpbmcgZm9ybToKICAgICAgICoKICAgICAgICogICAgIHsKICAgICAgICogICAgICAgZm46IGVmZmVjdEZ1bmN0aW9uLCAvLyBSZWZlcmVuY2UgdG8gZnVuY3Rpb24gdG8gY2FsbCB0byBwZXJmb3JtIGVmZmVjdAogICAgICAgKiAgICAgICBpbmZvOiB7IC4uLiB9ICAgICAgIC8vIEVmZmVjdCBtZXRhZGF0YSBwYXNzZWQgdG8gZnVuY3Rpb24KICAgICAgICogICAgICAgdHJpZ2dlcjogeyAgICAgICAgICAvLyBPcHRpb25hbCB0cmlnZ2VyaW5nIG1ldGFkYXRhOyBpZiBub3QgcHJvdmlkZWQKICAgICAgICogICAgICAgICBuYW1lOiBzdHJpbmcgICAgICAvLyB0aGUgcHJvcGVydHkgaXMgdHJlYXRlZCBhcyBhIHdpbGRjYXJkCiAgICAgICAqICAgICAgICAgc3RydWN0dXJlZDogYm9vbGVhbgogICAgICAgKiAgICAgICAgIHdpbGRjYXJkOiBib29sZWFuCiAgICAgICAqICAgICAgIH0KICAgICAgICogICAgIH0KICAgICAgICoKICAgICAgICogRWZmZWN0cyBhcmUgY2FsbGVkIGZyb20gYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgaW4gdGhlIGZvbGxvd2luZyBvcmRlciBieQogICAgICAgKiB0eXBlOgogICAgICAgKgogICAgICAgKiAxLiBDT01QVVRFCiAgICAgICAqIDIuIFBST1BBR0FURQogICAgICAgKiAzLiBSRUZMRUNUCiAgICAgICAqIDQuIE9CU0VSVkUKICAgICAgICogNS4gTk9USUZZCiAgICAgICAqCiAgICAgICAqIEVmZmVjdCBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgogICAgICAgKgogICAgICAgKiAgICAgZWZmZWN0RnVuY3Rpb24oaW5zdCwgcGF0aCwgcHJvcHMsIG9sZFByb3BzLCBpbmZvLCBoYXNQYXRocykKICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IHRoYXQgc2hvdWxkIHRyaWdnZXIgdGhlIGVmZmVjdAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBFZmZlY3QgdHlwZSwgZnJvbSB0aGlzLlBST1BFUlRZX0VGRkVDVF9UWVBFUwogICAgICAgKiBAcGFyYW0ge09iamVjdD19IGVmZmVjdCBFZmZlY3QgbWV0YWRhdGEgb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgdHlwZSwgZWZmZWN0KSB7CiAgICAgICAgdGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KHByb3BlcnR5LCB0eXBlLCBlZmZlY3QpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhIHNpbmdsZS1wcm9wZXJ0eSBvYnNlcnZlciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xmdW5jdGlvbigqLCopfSBtZXRob2QgRnVuY3Rpb24gb3IgbmFtZSBvZiBvYnNlcnZlciBtZXRob2QgdG8gY2FsbAogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBkeW5hbWljRm4gV2hldGhlciB0aGUgbWV0aG9kIG5hbWUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzCiAgICAgICAqICAgYSBkZXBlbmRlbmN5IHRvIHRoZSBlZmZlY3QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBjcmVhdGVQcm9wZXJ0eU9ic2VydmVyKHByb3BlcnR5LCBtZXRob2QsIGR5bmFtaWNGbikgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKHByb3BlcnR5LCBtZXRob2QsIGR5bmFtaWNGbik7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDcmVhdGVzIGEgbXVsdGktcHJvcGVydHkgIm1ldGhvZCBvYnNlcnZlciIgYmFzZWQgb24gdGhlIHByb3ZpZGVkCiAgICAgICAqIGV4cHJlc3Npb24sIHdoaWNoIHNob3VsZCBiZSBhIHN0cmluZyBpbiB0aGUgZm9ybSBvZiBhIG5vcm1hbCBKYXZhU2NyaXB0CiAgICAgICAqIGZ1bmN0aW9uIHNpZ25hdHVyZTogYCdtZXRob2ROYW1lKGFyZzEsIFsuLi4sIGFyZ25dKSdgLiAgRWFjaCBhcmd1bWVudAogICAgICAgKiBzaG91bGQgY29ycmVzcG9uZCB0byBhIHByb3BlcnR5IG9yIHBhdGggaW4gdGhlIGNvbnRleHQgb2YgdGhpcwogICAgICAgKiBwcm90b3R5cGUgKG9yIGluc3RhbmNlKSwgb3IgbWF5IGJlIGEgbGl0ZXJhbCBzdHJpbmcgb3IgbnVtYmVyLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBNZXRob2QgZXhwcmVzc2lvbgogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0PX0gZHluYW1pY0ZuIEJvb2xlYW4gb3Igb2JqZWN0IG1hcCBpbmRpY2F0aW5nCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqICAgd2hldGhlciBtZXRob2QgbmFtZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGEgZGVwZW5kZW5jeSB0byB0aGUgZWZmZWN0LgogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoZXhwcmVzc2lvbiwgZHluYW1pY0ZuKSB7CiAgICAgICAgdGhpcy5wcm90b3R5cGUuX2NyZWF0ZU1ldGhvZE9ic2VydmVyKGV4cHJlc3Npb24sIGR5bmFtaWNGbik7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYXVzZXMgdGhlIHNldHRlciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IHRvIGRpc3BhdGNoIGA8cHJvcGVydHk+LWNoYW5nZWRgCiAgICAgICAqIGV2ZW50cyB0byBub3RpZnkgb2YgY2hhbmdlcyB0byB0aGUgcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShwcm9wZXJ0eSkgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDcmVhdGVzIGEgcmVhZC1vbmx5IGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIFRvIHNldCB0aGUgcHJvcGVydHksIHVzZSB0aGUgcHJvdGVjdGVkIGBfc2V0UHJvcGVydHlgIEFQSS4KICAgICAgICogVG8gY3JlYXRlIGEgY3VzdG9tIHByb3RlY3RlZCBzZXR0ZXIgKGUuZy4gYF9zZXRNeVByb3AoKWAgZm9yCiAgICAgICAqIHByb3BlcnR5IGBteVByb3BgKSwgcGFzcyBgdHJ1ZWAgZm9yIGBwcm90ZWN0ZWRTZXR0ZXJgLgogICAgICAgKgogICAgICAgKiBOb3RlLCBpZiB0aGUgcHJvcGVydHkgd2lsbCBoYXZlIG90aGVyIHByb3BlcnR5IGVmZmVjdHMsIHRoaXMgbWV0aG9kCiAgICAgICAqIHNob3VsZCBiZSBjYWxsZWQgZmlyc3QsIGJlZm9yZSBhZGRpbmcgb3RoZXIgZWZmZWN0cy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gcHJvdGVjdGVkU2V0dGVyIENyZWF0ZXMgYSBjdXN0b20gcHJvdGVjdGVkIHNldHRlcgogICAgICAgKiAgIHdoZW4gYHRydWVgLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShwcm9wZXJ0eSwgcHJvdGVjdGVkU2V0dGVyKSB7CiAgICAgICAgdGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkocHJvcGVydHksIHByb3RlY3RlZFNldHRlcik7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYXVzZXMgdGhlIHNldHRlciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IHRvIHJlZmxlY3QgdGhlIHByb3BlcnR5IHZhbHVlCiAgICAgICAqIHRvIGEgKGRhc2gtY2FzZWQpIGF0dHJpYnV0ZSBvZiB0aGUgc2FtZSBuYW1lLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkocHJvcGVydHkpIHsKICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkocHJvcGVydHkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhIGNvbXB1dGVkIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzIHNldCB0byB0aGUgcmVzdWx0IG9mIHRoZQogICAgICAgKiBtZXRob2QgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBgZXhwcmVzc2lvbmAgZWFjaCB0aW1lIG9uZSBvciBtb3JlCiAgICAgICAqIGFyZ3VtZW50cyB0byB0aGUgbWV0aG9kIGNoYW5nZXMuICBUaGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgYSBzdHJpbmcKICAgICAgICogaW4gdGhlIGZvcm0gb2YgYSBub3JtYWwgSmF2YVNjcmlwdCBmdW5jdGlvbiBzaWduYXR1cmU6CiAgICAgICAqIGAnbWV0aG9kTmFtZShhcmcxLCBbLi4uLCBhcmduXSknYAogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiBjb21wdXRlZCBwcm9wZXJ0eSB0byBzZXQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gTWV0aG9kIGV4cHJlc3Npb24KICAgICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdD19IGR5bmFtaWNGbiBCb29sZWFuIG9yIG9iamVjdCBtYXAgaW5kaWNhdGluZyB3aGV0aGVyCiAgICAgICAqICAgbWV0aG9kIG5hbWVzIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkocHJvcGVydHksIGV4cHJlc3Npb24sIGR5bmFtaWNGbikgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KHByb3BlcnR5LCBleHByZXNzaW9uLCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUGFyc2VzIHRoZSBwcm92aWRlZCB0ZW1wbGF0ZSB0byBlbnN1cmUgYmluZGluZyBlZmZlY3RzIGFyZSBjcmVhdGVkCiAgICAgICAqIGZvciB0aGVtLCBhbmQgdGhlbiBlbnN1cmVzIHByb3BlcnR5IGFjY2Vzc29ycyBhcmUgY3JlYXRlZCBmb3IgYW55CiAgICAgICAqIGRlcGVuZGVudCBwcm9wZXJ0aWVzIGluIHRoZSB0ZW1wbGF0ZS4gIEJpbmRpbmcgZWZmZWN0cyBmb3IgYm91bmQKICAgICAgICogdGVtcGxhdGVzIGFyZSBzdG9yZWQgaW4gYSBsaW5rZWQgbGlzdCBvbiB0aGUgaW5zdGFuY2Ugc28gdGhhdAogICAgICAgKiB0ZW1wbGF0ZXMgY2FuIGJlIGVmZmljaWVudGx5IHN0YW1wZWQgYW5kIHVuc3RhbXBlZC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgY29udGFpbmluZyBiaW5kaW5nCiAgICAgICAqICAgYmluZGluZ3MKICAgICAgICogQHJldHVybiB7IVRlbXBsYXRlSW5mb30gVGVtcGxhdGUgbWV0YWRhdGEgb2JqZWN0CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBiaW5kVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgICAgICByZXR1cm4gdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgIH0KCiAgICAgIC8vIC0tIGJpbmRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBiaW5kVGVtcGxhdGVgIEFQSSBidXQgY2FuIGJlIGNhbGxlZCBvbgogICAgICAgKiBhbiBpbnN0YW5jZSB0byBhZGQgZWZmZWN0cyBhdCBydW50aW1lLiAgU2VlIHRoYXQgbWV0aG9kIGZvcgogICAgICAgKiBmdWxsIEFQSSBkb2NzLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIG9uIHRoZSBwcm90b3R5cGUgKGZvciBwcm90b3R5cGljYWwgdGVtcGxhdGUKICAgICAgICogYmluZGluZywgdG8gYXZvaWQgY3JlYXRpbmcgYWNjZXNzb3JzIGV2ZXJ5IGluc3RhbmNlKSBvbmNlIHBlciBwcm90b3R5cGUsCiAgICAgICAqIGFuZCB3aWxsIGJlIGNhbGxlZCB3aXRoIGBydW50aW1lQmluZGluZzogdHJ1ZWAgYnkgYF9zdGFtcFRlbXBsYXRlYCB0bwogICAgICAgKiBjcmVhdGUgYW5kIGxpbmsgYW4gaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCBhCiAgICAgICAqIHBhcnRpY3VsYXIgc3RhbXBpbmcuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIGNvbnRhaW5pbmcgYmluZGluZwogICAgICAgKiAgIGJpbmRpbmdzCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGluc3RhbmNlQmluZGluZyBXaGVuIGZhbHNlIChkZWZhdWx0KSwgcGVyZm9ybXMKICAgICAgICogICAicHJvdG90eXBpY2FsIiBiaW5kaW5nIG9mIHRoZSB0ZW1wbGF0ZSBhbmQgb3ZlcndyaXRlcyBhbnkgcHJldmlvdXNseQogICAgICAgKiAgIGJvdW5kIHRlbXBsYXRlIGZvciB0aGUgY2xhc3MuIFdoZW4gdHJ1ZSAoYXMgcGFzc2VkIGZyb20KICAgICAgICogICBgX3N0YW1wVGVtcGxhdGVgKSwgdGhlIHRlbXBsYXRlIGluZm8gaXMgaW5zdGFuY2VkIGFuZCBsaW5rZWQgaW50bwogICAgICAgKiAgIHRoZSBsaXN0IG9mIGJvdW5kIHRlbXBsYXRlcy4KICAgICAgICogQHJldHVybiB7IVRlbXBsYXRlSW5mb30gVGVtcGxhdGUgbWV0YWRhdGEgb2JqZWN0OyBmb3IgYHJ1bnRpbWVCaW5kaW5nYCwKICAgICAgICogICB0aGlzIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBwcm90b3R5cGljYWwgdGVtcGxhdGUgaW5mbwogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfYmluZFRlbXBsYXRlKHRlbXBsYXRlLCBpbnN0YW5jZUJpbmRpbmcpIHsKICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gdGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgbGV0IHdhc1ByZUJvdW5kID0gdGhpcy5fX3RlbXBsYXRlSW5mbyA9PSB0ZW1wbGF0ZUluZm87CiAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBzaW5jZSB0aGlzIGlzIGNhbGxlZCB0d2ljZSBmb3IgcHJvdG8tYm91bmQgdGVtcGxhdGVzLAogICAgICAgIC8vIGRvbid0IGF0dGVtcHQgdG8gcmVjcmVhdGUgYWNjZXNzb3JzIGlmIHRoaXMgdGVtcGxhdGUgd2FzIHByZS1ib3VuZAogICAgICAgIGlmICghd2FzUHJlQm91bmQpIHsKICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gdGVtcGxhdGVJbmZvLnByb3BlcnR5RWZmZWN0cykgewogICAgICAgICAgICB0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHByb3ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaW5zdGFuY2VCaW5kaW5nKSB7CiAgICAgICAgICAvLyBGb3IgaW5zdGFuY2UtdGltZSBiaW5kaW5nLCBjcmVhdGUgaW5zdGFuY2Ugb2YgdGVtcGxhdGUgbWV0YWRhdGEKICAgICAgICAgIC8vIGFuZCBsaW5rIGludG8gbGlzdCBvZiB0ZW1wbGF0ZXMgaWYgbmVjZXNzYXJ5CiAgICAgICAgICB0ZW1wbGF0ZUluZm8gPSAvKiogQHR5cGUgeyFUZW1wbGF0ZUluZm99ICovKE9iamVjdC5jcmVhdGUodGVtcGxhdGVJbmZvKSk7CiAgICAgICAgICB0ZW1wbGF0ZUluZm8ud2FzUHJlQm91bmQgPSB3YXNQcmVCb3VuZDsKICAgICAgICAgIGlmICghd2FzUHJlQm91bmQgJiYgdGhpcy5fX3RlbXBsYXRlSW5mbykgewogICAgICAgICAgICBsZXQgbGFzdCA9IHRoaXMuX190ZW1wbGF0ZUluZm9MYXN0IHx8IHRoaXMuX190ZW1wbGF0ZUluZm87CiAgICAgICAgICAgIHRoaXMuX190ZW1wbGF0ZUluZm9MYXN0ID0gbGFzdC5uZXh0VGVtcGxhdGVJbmZvID0gdGVtcGxhdGVJbmZvOwogICAgICAgICAgICB0ZW1wbGF0ZUluZm8ucHJldmlvdXNUZW1wbGF0ZUluZm8gPSBsYXN0OwogICAgICAgICAgICByZXR1cm4gdGVtcGxhdGVJbmZvOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fX3RlbXBsYXRlSW5mbyA9IHRlbXBsYXRlSW5mbzsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFkZHMgYSBwcm9wZXJ0eSBlZmZlY3QgdG8gdGhlIGdpdmVuIHRlbXBsYXRlIG1ldGFkYXRhLCB3aGljaCBpcyBydW4KICAgICAgICogYXQgdGhlICJwcm9wYWdhdGUiIHN0YWdlIG9mIGBfcHJvcGVydGllc0NoYW5nZWRgIHdoZW4gdGhlIHRlbXBsYXRlCiAgICAgICAqIGhhcyBiZWVuIGJvdW5kIHRvIHRoZSBlbGVtZW50IHZpYSBgX2JpbmRUZW1wbGF0ZWAuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZWZmZWN0YCBvYmplY3Qgc2hvdWxkIG1hdGNoIHRoZSBmb3JtYXQgaW4gYF9hZGRQcm9wZXJ0eUVmZmVjdGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0ZW1wbGF0ZUluZm8gVGVtcGxhdGUgbWV0YWRhdGEgdG8gYWRkIGVmZmVjdCB0bwogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBlZmZlY3QKICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBlZmZlY3QgRWZmZWN0IG1ldGFkYXRhIG9iamVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QodGVtcGxhdGVJbmZvLCBwcm9wLCBlZmZlY3QpIHsKICAgICAgICBsZXQgaG9zdFByb3BzID0gdGVtcGxhdGVJbmZvLmhvc3RQcm9wcyA9IHRlbXBsYXRlSW5mby5ob3N0UHJvcHMgfHwge307CiAgICAgICAgaG9zdFByb3BzW3Byb3BdID0gdHJ1ZTsKICAgICAgICBsZXQgZWZmZWN0cyA9IHRlbXBsYXRlSW5mby5wcm9wZXJ0eUVmZmVjdHMgPSB0ZW1wbGF0ZUluZm8ucHJvcGVydHlFZmZlY3RzIHx8IHt9OwogICAgICAgIGxldCBwcm9wRWZmZWN0cyA9IGVmZmVjdHNbcHJvcF0gPSBlZmZlY3RzW3Byb3BdIHx8IFtdOwogICAgICAgIHByb3BFZmZlY3RzLnB1c2goZWZmZWN0KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFN0YW1wcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgYW5kIHBlcmZvcm1zIGluc3RhbmNlLXRpbWUgc2V0dXAgZm9yCiAgICAgICAqIFBvbHltZXIgdGVtcGxhdGUgZmVhdHVyZXMsIGluY2x1ZGluZyBkYXRhIGJpbmRpbmdzLCBkZWNsYXJhdGl2ZSBldmVudAogICAgICAgKiBsaXN0ZW5lcnMsIGFuZCB0aGUgYHRoaXMuJGAgbWFwIG9mIGBpZGAncyB0byBub2Rlcy4gIEEgZG9jdW1lbnQgZnJhZ21lbnQKICAgICAgICogaXMgcmV0dXJuZWQgY29udGFpbmluZyB0aGUgc3RhbXBlZCBET00sIHJlYWR5IGZvciBpbnNlcnRpb24gaW50byB0aGUKICAgICAgICogRE9NLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlOyBob3dldmVyIG5vdGUgdGhhdCBkdWUgdG8KICAgICAgICogYHNoYWR5Y3NzYCBwb2x5ZmlsbCBsaW1pdGF0aW9ucywgb25seSBzdHlsZXMgZnJvbSB0ZW1wbGF0ZXMgcHJlcGFyZWQKICAgICAgICogdXNpbmcgYFNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZWAgd2lsbCBiZSBjb3JyZWN0bHkgcG9seWZpbGxlZCAoc2NvcGVkCiAgICAgICAqIHRvIHRoZSBzaGFkb3cgcm9vdCBhbmQgc3VwcG9ydCBDU1MgY3VzdG9tIHByb3BlcnRpZXMpLCBhbmQgbm90ZSB0aGF0CiAgICAgICAqIGBTaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGVgIG1heSBvbmx5IGJlIGNhbGxlZCBvbmNlIHBlciBlbGVtZW50LiBBcyBzdWNoLAogICAgICAgKiBhbnkgc3R5bGVzIHJlcXVpcmVkIGJ5IGluIHJ1bnRpbWUtc3RhbXBlZCB0ZW1wbGF0ZXMgbXVzdCBiZSBpbmNsdWRlZAogICAgICAgKiBpbiB0aGUgbWFpbiBlbGVtZW50IHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBzdGFtcAogICAgICAgKiBAcmV0dXJuIHshU3RhbXBlZFRlbXBsYXRlfSBDbG9uZWQgdGVtcGxhdGUgY29udGVudAogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX3N0YW1wVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgICAgICAvLyBFbnN1cmVzIHRoYXQgY3JlYXRlZCBkb20gaXMgYF9lbnF1ZXVlQ2xpZW50YCdkIHRvIHRoaXMgZWxlbWVudCBzbwogICAgICAgIC8vIHRoYXQgaXQgY2FuIGJlIGZsdXNoZWQgb24gbmV4dCBjYWxsIHRvIGBfZmx1c2hQcm9wZXJ0aWVzYAogICAgICAgIGhvc3RTdGFjay5iZWdpbkhvc3RpbmcodGhpcyk7CiAgICAgICAgbGV0IGRvbSA9IHN1cGVyLl9zdGFtcFRlbXBsYXRlKHRlbXBsYXRlKTsKICAgICAgICBob3N0U3RhY2suZW5kSG9zdGluZyh0aGlzKTsKICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gLyoqIEB0eXBlIHshVGVtcGxhdGVJbmZvfSAqLyh0aGlzLl9iaW5kVGVtcGxhdGUodGVtcGxhdGUsIHRydWUpKTsKICAgICAgICAvLyBBZGQgdGVtcGxhdGUtaW5zdGFuY2Utc3BlY2lmaWMgZGF0YSB0byBpbnN0YW5jZWQgdGVtcGxhdGVJbmZvCiAgICAgICAgdGVtcGxhdGVJbmZvLm5vZGVMaXN0ID0gZG9tLm5vZGVMaXN0OwogICAgICAgIC8vIENhcHR1cmUgY2hpbGQgbm9kZXMgdG8gYWxsb3cgdW5zdGFtcGluZyBvZiBub24tcHJvdG90eXBpY2FsIHRlbXBsYXRlcwogICAgICAgIGlmICghdGVtcGxhdGVJbmZvLndhc1ByZUJvdW5kKSB7CiAgICAgICAgICBsZXQgbm9kZXMgPSB0ZW1wbGF0ZUluZm8uY2hpbGROb2RlcyA9IFtdOwogICAgICAgICAgZm9yIChsZXQgbj1kb20uZmlyc3RDaGlsZDsgbjsgbj1uLm5leHRTaWJsaW5nKSB7CiAgICAgICAgICAgIG5vZGVzLnB1c2gobik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRvbS50ZW1wbGF0ZUluZm8gPSB0ZW1wbGF0ZUluZm87CiAgICAgICAgLy8gU2V0dXAgY29tcG91bmQgc3RvcmFnZSwgMi13YXkgbGlzdGVuZXJzLCBhbmQgZGF0YUhvc3QgZm9yIGJpbmRpbmdzCiAgICAgICAgc2V0dXBCaW5kaW5ncyh0aGlzLCB0ZW1wbGF0ZUluZm8pOwogICAgICAgIC8vIEZsdXNoIHByb3BlcnRpZXMgaW50byB0ZW1wbGF0ZSBub2RlcyBpZiBhbHJlYWR5IGJvb3RlZAogICAgICAgIGlmICh0aGlzLl9fZGF0YVJlYWR5KSB7CiAgICAgICAgICBydW5FZmZlY3RzKHRoaXMsIHRlbXBsYXRlSW5mby5wcm9wZXJ0eUVmZmVjdHMsIHRoaXMuX19kYXRhLCBudWxsLAogICAgICAgICAgICBmYWxzZSwgdGVtcGxhdGVJbmZvLm5vZGVMaXN0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRvbTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZXMgYW5kIHVuYmluZHMgdGhlIG5vZGVzIHByZXZpb3VzbHkgY29udGFpbmVkIGluIHRoZSBwcm92aWRlZAogICAgICAgKiBEb2N1bWVudEZyYWdtZW50IHJldHVybmVkIGZyb20gYF9zdGFtcFRlbXBsYXRlYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshU3RhbXBlZFRlbXBsYXRlfSBkb20gRG9jdW1lbnRGcmFnbWVudCBwcmV2aW91c2x5IHJldHVybmVkCiAgICAgICAqICAgZnJvbSBgX3N0YW1wVGVtcGxhdGVgIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZXMgdG8gYmUgcmVtb3ZlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfcmVtb3ZlQm91bmREb20oZG9tKSB7CiAgICAgICAgLy8gVW5saW5rIHRlbXBsYXRlIGluZm8KICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gZG9tLnRlbXBsYXRlSW5mbzsKICAgICAgICBpZiAodGVtcGxhdGVJbmZvLnByZXZpb3VzVGVtcGxhdGVJbmZvKSB7CiAgICAgICAgICB0ZW1wbGF0ZUluZm8ucHJldmlvdXNUZW1wbGF0ZUluZm8ubmV4dFRlbXBsYXRlSW5mbyA9CiAgICAgICAgICAgIHRlbXBsYXRlSW5mby5uZXh0VGVtcGxhdGVJbmZvOwogICAgICAgIH0KICAgICAgICBpZiAodGVtcGxhdGVJbmZvLm5leHRUZW1wbGF0ZUluZm8pIHsKICAgICAgICAgIHRlbXBsYXRlSW5mby5uZXh0VGVtcGxhdGVJbmZvLnByZXZpb3VzVGVtcGxhdGVJbmZvID0KICAgICAgICAgICAgdGVtcGxhdGVJbmZvLnByZXZpb3VzVGVtcGxhdGVJbmZvOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fX3RlbXBsYXRlSW5mb0xhc3QgPT0gdGVtcGxhdGVJbmZvKSB7CiAgICAgICAgICB0aGlzLl9fdGVtcGxhdGVJbmZvTGFzdCA9IHRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbzsKICAgICAgICB9CiAgICAgICAgdGVtcGxhdGVJbmZvLnByZXZpb3VzVGVtcGxhdGVJbmZvID0gdGVtcGxhdGVJbmZvLm5leHRUZW1wbGF0ZUluZm8gPSBudWxsOwogICAgICAgIC8vIFJlbW92ZSBzdGFtcGVkIG5vZGVzCiAgICAgICAgbGV0IG5vZGVzID0gdGVtcGxhdGVJbmZvLmNoaWxkTm9kZXM7CiAgICAgICAgZm9yIChsZXQgaT0wOyBpPG5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgbm9kZSA9IG5vZGVzW2ldOwogICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBkZWZhdWx0IGBUZW1wbGF0ZVN0YW1wYCBpbXBsZW1lbnRhdGlvbiB0byBhZGQgc3VwcG9ydCBmb3IKICAgICAgICogcGFyc2luZyBiaW5kaW5ncyBmcm9tIGBUZXh0Tm9kZWAncycgYHRleHRDb250ZW50YC4gIEEgYGJpbmRpbmdzYAogICAgICAgKiBhcnJheSBpcyBhZGRlZCB0byBgbm9kZUluZm9gIGFuZCBwb3B1bGF0ZWQgd2l0aCBiaW5kaW5nIG1ldGFkYXRhCiAgICAgICAqIHdpdGggaW5mb3JtYXRpb24gY2FwdHVyaW5nIHRoZSBiaW5kaW5nIHRhcmdldCwgYW5kIGEgYHBhcnRzYCBhcnJheQogICAgICAgKiB3aXRoIG9uZSBvciBtb3JlIG1ldGFkYXRhIG9iamVjdHMgY2FwdHVyaW5nIHRoZSBzb3VyY2Uocykgb2YgdGhlCiAgICAgICAqIGJpbmRpbmcuCiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUgbm9kZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZpc2l0ZWQgbm9kZSBhZGRlZCBub2RlLXNwZWNpZmljCiAgICAgICAqICAgbWV0YWRhdGEgdG8gYG5vZGVJbmZvYAogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IEludGVyZmFjZXMgaW4gY2xvc3VyZSBkbyBub3QgaW5oZXJpdCBzdGF0aWNzLCBidXQgY2xhc3NlcyBkbwogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKSB7CiAgICAgICAgbGV0IG5vdGVkID0gc3VwZXIuX3BhcnNlVGVtcGxhdGVOb2RlKG5vZGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pOwogICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgbGV0IHBhcnRzID0gdGhpcy5fcGFyc2VCaW5kaW5ncyhub2RlLnRleHRDb250ZW50LCB0ZW1wbGF0ZUluZm8pOwogICAgICAgICAgaWYgKHBhcnRzKSB7CiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHRleHRDb250ZW50IHdpdGggYW55IGxpdGVyYWwgcGFydHMKICAgICAgICAgICAgLy8gTk9URTogZGVmYXVsdCB0byBhIHNwYWNlIGhlcmUgc28gdGhlIHRleHROb2RlIHJlbWFpbnM7IHNvbWUgYnJvd3NlcnMKICAgICAgICAgICAgLy8gKElFKSBvbWl0IGFuIGVtcHR5IHRleHROb2RlIGZvbGxvd2luZyBjbG9uZU5vZGUvaW1wb3J0Tm9kZS4KICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IGxpdGVyYWxGcm9tUGFydHMocGFydHMpIHx8ICcgJzsKICAgICAgICAgICAgYWRkQmluZGluZyh0aGlzLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvLCAndGV4dCcsICd0ZXh0Q29udGVudCcsIHBhcnRzKTsKICAgICAgICAgICAgbm90ZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbm90ZWQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCBgVGVtcGxhdGVTdGFtcGAgaW1wbGVtZW50YXRpb24gdG8gYWRkIHN1cHBvcnQgZm9yCiAgICAgICAqIHBhcnNpbmcgYmluZGluZ3MgZnJvbSBhdHRyaWJ1dGVzLiAgQSBgYmluZGluZ3NgCiAgICAgICAqIGFycmF5IGlzIGFkZGVkIHRvIGBub2RlSW5mb2AgYW5kIHBvcHVsYXRlZCB3aXRoIGJpbmRpbmcgbWV0YWRhdGEKICAgICAgICogd2l0aCBpbmZvcm1hdGlvbiBjYXB0dXJpbmcgdGhlIGJpbmRpbmcgdGFyZ2V0LCBhbmQgYSBgcGFydHNgIGFycmF5CiAgICAgICAqIHdpdGggb25lIG9yIG1vcmUgbWV0YWRhdGEgb2JqZWN0cyBjYXB0dXJpbmcgdGhlIHNvdXJjZShzKSBvZiB0aGUKICAgICAgICogYmluZGluZy4KICAgICAgICoKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSBOb2RlIHRvIHBhcnNlCiAgICAgICAqIEBwYXJhbSB7VGVtcGxhdGVJbmZvfSB0ZW1wbGF0ZUluZm8gVGVtcGxhdGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUKICAgICAgICogQHBhcmFtIHtOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZSBub2RlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEF0dHJpYnV0ZSBuYW1lCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbywgbmFtZSwgdmFsdWUpIHsKICAgICAgICBsZXQgcGFydHMgPSB0aGlzLl9wYXJzZUJpbmRpbmdzKHZhbHVlLCB0ZW1wbGF0ZUluZm8pOwogICAgICAgIGlmIChwYXJ0cykgewogICAgICAgICAgLy8gQXR0cmlidXRlIG9yIHByb3BlcnR5CiAgICAgICAgICBsZXQgb3JpZ05hbWUgPSBuYW1lOwogICAgICAgICAgbGV0IGtpbmQgPSAncHJvcGVydHknOwogICAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHdlIHNlZSBhIGNhcGl0YWwgbGV0dGVyIGhlcmUgaXMgaWYgdGhlIGF0dHIgaGFzCiAgICAgICAgICAvLyBhIGNhcGl0YWwgbGV0dGVyIGluIGl0IHBlciBzcGVjLiBJbiB0aGlzIGNhc2UsIHRvIG1ha2Ugc3VyZQogICAgICAgICAgLy8gdGhpcyBiaW5kaW5nIHdvcmtzLCB3ZSBnbyBhaGVhZCBhbmQgbWFrZSB0aGUgYmluZGluZyB0byB0aGUgYXR0cmlidXRlLgogICAgICAgICAgaWYgKGNhcGl0YWxBdHRyaWJ1dGVSZWdleC50ZXN0KG5hbWUpKSB7CiAgICAgICAgICAgIGtpbmQgPSAnYXR0cmlidXRlJzsKICAgICAgICAgIH0gZWxzZSBpZiAobmFtZVtuYW1lLmxlbmd0aC0xXSA9PSAnJCcpIHsKICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgLTEpOwogICAgICAgICAgICBraW5kID0gJ2F0dHJpYnV0ZSc7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBJbml0aWFsaXplIGF0dHJpYnV0ZSBiaW5kaW5ncyB3aXRoIGFueSBsaXRlcmFsIHBhcnRzCiAgICAgICAgICBsZXQgbGl0ZXJhbCA9IGxpdGVyYWxGcm9tUGFydHMocGFydHMpOwogICAgICAgICAgaWYgKGxpdGVyYWwgJiYga2luZCA9PSAnYXR0cmlidXRlJykgewogICAgICAgICAgICAvLyBFbnN1cmUgYSBTaGFkeUNTUyB0ZW1wbGF0ZSBzY29wZWQgc3R5bGUgaXMgbm90IHJlbW92ZWQKICAgICAgICAgICAgLy8gd2hlbiBhIGNsYXNzJCBiaW5kaW5nJ3MgaW5pdGlhbCBsaXRlcmFsIHZhbHVlIGlzIHNldC4KICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ2NsYXNzJyAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnY2xhc3MnKSkgewogICAgICAgICAgICAgIGxpdGVyYWwgKz0gJyAnICsgbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgbGl0ZXJhbCk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBDbGVhciBhdHRyaWJ1dGUgYmVmb3JlIHJlbW92aW5nLCBzaW5jZSBJRSB3b24ndCBhbGxvdyByZW1vdmluZwogICAgICAgICAgLy8gYHZhbHVlYCBhdHRyaWJ1dGUgaWYgaXQgcHJldmlvdXNseSBoYWQgYSB2YWx1ZSAoY2FuJ3QKICAgICAgICAgIC8vIHVuY29uZGl0aW9uYWxseSBzZXQgJycgYmVmb3JlIHJlbW92aW5nIHNpbmNlIGF0dHJpYnV0ZXMgd2l0aCBgJGAKICAgICAgICAgIC8vIGNhbid0IGJlIHNldCB1c2luZyBzZXRBdHRyaWJ1dGUpCiAgICAgICAgICBpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdpbnB1dCcgJiYgb3JpZ05hbWUgPT09ICd2YWx1ZScpIHsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUob3JpZ05hbWUsICcnKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFJlbW92ZSBhbm5vdGF0aW9uCiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShvcmlnTmFtZSk7CiAgICAgICAgICAvLyBDYXNlIGhhY2tlcnk6IGF0dHJpYnV0ZXMgYXJlIGxvd2VyLWNhc2UsIGJ1dCBiaW5kIHRhcmdldHMKICAgICAgICAgIC8vIChwcm9wZXJ0aWVzKSBhcmUgY2FzZSBzZW5zaXRpdmUuIEdhbWJpdCBpcyB0byBtYXAgZGFzaC1jYXNlIHRvCiAgICAgICAgICAvLyBjYW1lbC1jYXNlOiBgZm9vLWJhcmAgYmVjb21lcyBgZm9vQmFyYC4KICAgICAgICAgIC8vIEF0dHJpYnV0ZSBiaW5kaW5ncyBhcmUgZXhjZXB0ZWQuCiAgICAgICAgICBpZiAoa2luZCA9PT0gJ3Byb3BlcnR5JykgewogICAgICAgICAgICBuYW1lID0gUG9seW1lci5DYXNlTWFwLmRhc2hUb0NhbWVsQ2FzZShuYW1lKTsKICAgICAgICAgIH0KICAgICAgICAgIGFkZEJpbmRpbmcodGhpcywgdGVtcGxhdGVJbmZvLCBub2RlSW5mbywga2luZCwgbmFtZSwgcGFydHMsIGxpdGVyYWwpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBzdXBlci5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbywgbmFtZSwgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBkZWZhdWx0IGBUZW1wbGF0ZVN0YW1wYCBpbXBsZW1lbnRhdGlvbiB0byBhZGQgc3VwcG9ydCBmb3IKICAgICAgICogYmluZGluZyB0aGUgcHJvcGVydGllcyB0aGF0IGEgbmVzdGVkIHRlbXBsYXRlIGRlcGVuZHMgb24gdG8gdGhlIHRlbXBsYXRlCiAgICAgICAqIGFzIGBfaG9zdF88cHJvcGVydHk+YC4KICAgICAgICoKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRvIHBhcnNlCiAgICAgICAqIEBwYXJhbSB7VGVtcGxhdGVJbmZvfSB0ZW1wbGF0ZUluZm8gVGVtcGxhdGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUKICAgICAgICogQHBhcmFtIHtOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZSBub2RlCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmlzaXRlZCBub2RlIGFkZGVkIG5vZGUtc3BlY2lmaWMKICAgICAgICogICBtZXRhZGF0YSB0byBgbm9kZUluZm9gCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSW50ZXJmYWNlcyBpbiBjbG9zdXJlIGRvIG5vdCBpbmhlcml0IHN0YXRpY3MsIGJ1dCBjbGFzc2VzIGRvCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlVGVtcGxhdGVOZXN0ZWRUZW1wbGF0ZShub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKSB7CiAgICAgICAgbGV0IG5vdGVkID0gc3VwZXIuX3BhcnNlVGVtcGxhdGVOZXN0ZWRUZW1wbGF0ZShub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKTsKICAgICAgICAvLyBNZXJnZSBob3N0IHByb3BzIGludG8gb3V0ZXIgdGVtcGxhdGUgYW5kIGFkZCBiaW5kaW5ncwogICAgICAgIGxldCBob3N0UHJvcHMgPSBub2RlSW5mby50ZW1wbGF0ZUluZm8uaG9zdFByb3BzOwogICAgICAgIGxldCBtb2RlID0gJ3snOwogICAgICAgIGZvciAobGV0IHNvdXJjZSBpbiBob3N0UHJvcHMpIHsKICAgICAgICAgIGxldCBwYXJ0cyA9IFt7IG1vZGUsIHNvdXJjZSwgZGVwZW5kZW5jaWVzOiBbc291cmNlXSB9XTsKICAgICAgICAgIGFkZEJpbmRpbmcodGhpcywgdGVtcGxhdGVJbmZvLCBub2RlSW5mbywgJ3Byb3BlcnR5JywgJ19ob3N0XycgKyBzb3VyY2UsIHBhcnRzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5vdGVkOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2FsbGVkIHRvIHBhcnNlIHRleHQgaW4gYSB0ZW1wbGF0ZSAoZWl0aGVyIGF0dHJpYnV0ZSB2YWx1ZXMgb3IKICAgICAgICogdGV4dENvbnRlbnQpIGludG8gYmluZGluZyBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogQW55IG92ZXJyaWRlcyBvZiB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGFuIGFycmF5IG9mIGJpbmRpbmcgcGFydAogICAgICAgKiBtZXRhZGF0YSAgcmVwcmVzZW50aW5nIG9uZSBvciBtb3JlIGJpbmRpbmdzIGZvdW5kIGluIHRoZSBwcm92aWRlZCB0ZXh0CiAgICAgICAqIGFuZCBhbnkgImxpdGVyYWwiIHRleHQgaW4gYmV0d2Vlbi4gIEFueSBub24tbGl0ZXJhbCBwYXJ0cyB3aWxsIGJlIHBhc3NlZAogICAgICAgKiB0byBgX2V2YWx1YXRlQmluZGluZ2Agd2hlbiBhbnkgZGVwZW5kZW5jaWVzIGNoYW5nZS4gIFRoZSBvbmx5IHJlcXVpcmVkCiAgICAgICAqIGZpZWxkcyBvZiBlYWNoICJwYXJ0IiBpbiB0aGUgcmV0dXJuZWQgYXJyYXkgYXJlIGFzIGZvbGxvd3M6CiAgICAgICAqCiAgICAgICAqIC0gYGRlcGVuZGVuY2llc2AgLSBBcnJheSBjb250YWluaW5nIHRyaWdnZXIgbWV0YWRhdGEgZm9yIGVhY2ggcHJvcGVydHkKICAgICAgICogICB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBiaW5kaW5nIHRvIHVwZGF0ZQogICAgICAgKiAtIGBsaXRlcmFsYCAtIFN0cmluZyBjb250YWluaW5nIHRleHQgaWYgdGhlIHBhcnQgcmVwcmVzZW50cyBhIGxpdGVyYWw7CiAgICAgICAqICAgaW4gdGhpcyBjYXNlIG5vIGBkZXBlbmRlbmNpZXNgIGFyZSBuZWVkZWQKICAgICAgICoKICAgICAgICogQWRkaXRpb25hbCBtZXRhZGF0YSBmb3IgdXNlIGJ5IGBfZXZhbHVhdGVCaW5kaW5nYCBtYXkgYmUgcHJvdmlkZWQgaW4KICAgICAgICogZWFjaCBwYXJ0IG9iamVjdCBhcyBuZWVkZWQuCiAgICAgICAqCiAgICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBiaW5kaW5ncwogICAgICAgKiAob25lIG9yIG1vcmUgbWF5IGJlIGludGVybWl4ZWQgd2l0aCBsaXRlcmFsIHN0cmluZ3MpOgogICAgICAgKiAtIFByb3BlcnR5IGJpbmRpbmc6IGBbW3Byb3BdXWAKICAgICAgICogLSBQYXRoIGJpbmRpbmc6IGBbW29iamVjdC5wcm9wXV1gCiAgICAgICAqIC0gTmVnYXRlZCBwcm9wZXJ0eSBvciBwYXRoIGJpbmRpbmdzOiBgW1shcHJvcF1dYCBvciBgW1shb2JqZWN0LnByb3BdXWAKICAgICAgICogLSBUd28td2F5IHByb3BlcnR5IG9yIHBhdGggYmluZGluZ3MgKHN1cHBvcnRzIG5lZ2F0aW9uKToKICAgICAgICogICBge3twcm9wfX1gLCBge3tvYmplY3QucHJvcH19YCwgYHt7IXByb3B9fWAgb3IgYHt7IW9iamVjdC5wcm9wfX1gCiAgICAgICAqIC0gSW5saW5lIGNvbXB1dGVkIG1ldGhvZCAoc3VwcG9ydHMgbmVnYXRpb24pOgogICAgICAgKiAgIGBbW2NvbXB1dGUoYSwgJ2xpdGVyYWwnLCBiKV1dYCwgYFtbIWNvbXB1dGUoYSwgJ2xpdGVyYWwnLCBiKV1dYAogICAgICAgKgogICAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uIGZvciBiZXN0CiAgICAgICAqIHBlcmZvcm1hbmNlLiBIb3dldmVyLCB0aGUgcmVndWxhciBleHByZXNzaW9uIHVzZXMgYSB3aGl0ZS1saXN0IG9mCiAgICAgICAqIGFsbG93ZWQgY2hhcmFjdGVycyBpbiBhIGRhdGEtYmluZGluZywgd2hpY2ggY2F1c2VzIHByb2JsZW1zIGZvcgogICAgICAgKiBkYXRhLWJpbmRpbmdzIHRoYXQgZG8gdXNlIGNoYXJhY3RlcnMgbm90IGluIHRoaXMgd2hpdGUtbGlzdC4KICAgICAgICoKICAgICAgICogSW5zdGVhZCBvZiB1cGRhdGluZyB0aGUgd2hpdGUtbGlzdCB3aXRoIGFsbCBhbGxvd2VkIGNoYXJhY3RlcnMsCiAgICAgICAqIHRoZXJlIGlzIGEgU3RyaWN0QmluZGluZ1BhcnNlciAoc2VlIGxpYi9taXhpbnMvc3RyaWN0LWJpbmRpbmctcGFyc2VyKQogICAgICAgKiB0aGF0IHVzZXMgYSBzdGF0ZSBtYWNoaW5lIGluc3RlYWQuIFRoaXMgc3RhdGUgbWFjaGluZSBpcyBhYmxlIHRvIGhhbmRsZQogICAgICAgKiBhbGwgY2hhcmFjdGVycy4gSG93ZXZlciwgaXQgaXMgc2xpZ2h0bHkgbGVzcyBwZXJmb3JtYW50LCB0aGVyZWZvcmUgd2UKICAgICAgICogZXh0cmFjdGVkIGl0IGludG8gYSBzZXBhcmF0ZSBvcHRpb25hbCBtaXhpbi4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGV4dCB0byBwYXJzZSBmcm9tIGF0dHJpYnV0ZSBvciB0ZXh0Q29udGVudAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gdGVtcGxhdGVJbmZvIEN1cnJlbnQgdGVtcGxhdGUgbWV0YWRhdGEKICAgICAgICogQHJldHVybiB7QXJyYXk8IUJpbmRpbmdQYXJ0Pn0gQXJyYXkgb2YgYmluZGluZyBwYXJ0IG1ldGFkYXRhCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VCaW5kaW5ncyh0ZXh0LCB0ZW1wbGF0ZUluZm8pIHsKICAgICAgICBsZXQgcGFydHMgPSBbXTsKICAgICAgICBsZXQgbGFzdEluZGV4ID0gMDsKICAgICAgICBsZXQgbTsKICAgICAgICAvLyBFeGFtcGxlOiAibGl0ZXJhbDF7e3Byb3B9fWxpdGVyYWwyW1shY29tcHV0ZShmb28sYmFyKV1dZmluYWwiCiAgICAgICAgLy8gUmVnZXggbWF0Y2hlczoKICAgICAgICAvLyAgICAgICAgSXRlcmF0aW9uIDE6ICBJdGVyYXRpb24gMjoKICAgICAgICAvLyBtWzFdOiAne3snICAgICAgICAgICdbWycKICAgICAgICAvLyBtWzJdOiAnJyAgICAgICAgICAgICchJwogICAgICAgIC8vIG1bM106ICdwcm9wJyAgICAgICAgJ2NvbXB1dGUoZm9vLGJhciknCiAgICAgICAgd2hpbGUgKChtID0gYmluZGluZ1JlZ2V4LmV4ZWModGV4dCkpICE9PSBudWxsKSB7CiAgICAgICAgICAvLyBBZGQgbGl0ZXJhbCBwYXJ0CiAgICAgICAgICBpZiAobS5pbmRleCA+IGxhc3RJbmRleCkgewogICAgICAgICAgICBwYXJ0cy5wdXNoKHtsaXRlcmFsOiB0ZXh0LnNsaWNlKGxhc3RJbmRleCwgbS5pbmRleCl9KTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIEFkZCBiaW5kaW5nIHBhcnQKICAgICAgICAgIGxldCBtb2RlID0gbVsxXVswXTsKICAgICAgICAgIGxldCBuZWdhdGUgPSBCb29sZWFuKG1bMl0pOwogICAgICAgICAgbGV0IHNvdXJjZSA9IG1bM10udHJpbSgpOwogICAgICAgICAgbGV0IGN1c3RvbUV2ZW50ID0gZmFsc2UsIG5vdGlmeUV2ZW50ID0gJycsIGNvbG9uID0gLTE7CiAgICAgICAgICBpZiAobW9kZSA9PSAneycgJiYgKGNvbG9uID0gc291cmNlLmluZGV4T2YoJzo6JykpID4gMCkgewogICAgICAgICAgICBub3RpZnlFdmVudCA9IHNvdXJjZS5zdWJzdHJpbmcoY29sb24gKyAyKTsKICAgICAgICAgICAgc291cmNlID0gc291cmNlLnN1YnN0cmluZygwLCBjb2xvbik7CiAgICAgICAgICAgIGN1c3RvbUV2ZW50ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBzaWduYXR1cmUgPSBwYXJzZU1ldGhvZChzb3VyY2UpOwogICAgICAgICAgbGV0IGRlcGVuZGVuY2llcyA9IFtdOwogICAgICAgICAgaWYgKHNpZ25hdHVyZSkgewogICAgICAgICAgICAvLyBJbmxpbmUgY29tcHV0ZWQgZnVuY3Rpb24KICAgICAgICAgICAgbGV0IHthcmdzLCBtZXRob2ROYW1lfSA9IHNpZ25hdHVyZTsKICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPGFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBsZXQgYXJnID0gYXJnc1tpXTsKICAgICAgICAgICAgICBpZiAoIWFyZy5saXRlcmFsKSB7CiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChhcmcpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgZHluYW1pY0ZucyA9IHRlbXBsYXRlSW5mby5keW5hbWljRm5zOwogICAgICAgICAgICBpZiAoZHluYW1pY0ZucyAmJiBkeW5hbWljRm5zW21ldGhvZE5hbWVdIHx8IHNpZ25hdHVyZS5zdGF0aWMpIHsKICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChtZXRob2ROYW1lKTsKICAgICAgICAgICAgICBzaWduYXR1cmUuZHluYW1pY0ZuID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUHJvcGVydHkgb3IgcGF0aAogICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChzb3VyY2UpOwogICAgICAgICAgfQogICAgICAgICAgcGFydHMucHVzaCh7CiAgICAgICAgICAgIHNvdXJjZSwgbW9kZSwgbmVnYXRlLCBjdXN0b21FdmVudCwgc2lnbmF0dXJlLCBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgIGV2ZW50OiBub3RpZnlFdmVudAogICAgICAgICAgfSk7CiAgICAgICAgICBsYXN0SW5kZXggPSBiaW5kaW5nUmVnZXgubGFzdEluZGV4OwogICAgICAgIH0KICAgICAgICAvLyBBZGQgYSBmaW5hbCBsaXRlcmFsIHBhcnQKICAgICAgICBpZiAobGFzdEluZGV4ICYmIGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7CiAgICAgICAgICBsZXQgbGl0ZXJhbCA9IHRleHQuc3Vic3RyaW5nKGxhc3RJbmRleCk7CiAgICAgICAgICBpZiAobGl0ZXJhbCkgewogICAgICAgICAgICBwYXJ0cy5wdXNoKHsKICAgICAgICAgICAgICBsaXRlcmFsOiBsaXRlcmFsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocGFydHMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gcGFydHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbGxlZCB0byBldmFsdWF0ZSBhIHByZXZpb3VzbHkgcGFyc2VkIGJpbmRpbmcgcGFydCBiYXNlZCBvbiBhIHNldCBvZgogICAgICAgKiBvbmUgb3IgbW9yZSBjaGFuZ2VkIGRlcGVuZGVuY2llcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHt0aGlzfSBpbnN0IEVsZW1lbnQgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBzY29wZSBmb3IKICAgICAgICogICBiaW5kaW5nIGRlcGVuZGVuY2llcwogICAgICAgKiBAcGFyYW0ge0JpbmRpbmdQYXJ0fSBwYXJ0IEJpbmRpbmcgcGFydCBtZXRhZGF0YQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQcm9wZXJ0eS9wYXRoIHRoYXQgdHJpZ2dlcmVkIHRoaXMgZWZmZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgY3VycmVudCBwcm9wZXJ0eSBjaGFuZ2VzCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgICAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAgICAgKiBAcmV0dXJuIHsqfSBWYWx1ZSB0aGUgYmluZGluZyBwYXJ0IGV2YWx1YXRlZCB0bwogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpbnN0LCBwYXJ0LCBwYXRoLCBwcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKSB7CiAgICAgICAgbGV0IHZhbHVlOwogICAgICAgIGlmIChwYXJ0LnNpZ25hdHVyZSkgewogICAgICAgICAgdmFsdWUgPSBydW5NZXRob2RFZmZlY3QoaW5zdCwgcGF0aCwgcHJvcHMsIG9sZFByb3BzLCBwYXJ0LnNpZ25hdHVyZSk7CiAgICAgICAgfSBlbHNlIGlmIChwYXRoICE9IHBhcnQuc291cmNlKSB7CiAgICAgICAgICB2YWx1ZSA9IFBvbHltZXIuUGF0aC5nZXQoaW5zdCwgcGFydC5zb3VyY2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaGFzUGF0aHMgJiYgUG9seW1lci5QYXRoLmlzUGF0aChwYXRoKSkgewogICAgICAgICAgICB2YWx1ZSA9IFBvbHltZXIuUGF0aC5nZXQoaW5zdCwgcGF0aCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZSA9IGluc3QuX19kYXRhW3BhdGhdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocGFydC5uZWdhdGUpIHsKICAgICAgICAgIHZhbHVlID0gIXZhbHVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0KCiAgICB9CgogICAgLy8gbWFrZSBhIHR5cGluZyBmb3IgY2xvc3VyZSA6UAogICAgUHJvcGVydHlFZmZlY3RzVHlwZSA9IFByb3BlcnR5RWZmZWN0czsKCiAgICByZXR1cm4gUHJvcGVydHlFZmZlY3RzOwogIH0pOwoKICAvKioKICAgKiBIZWxwZXIgYXBpIGZvciBlbnF1ZXVpbmcgY2xpZW50IGRvbSBjcmVhdGVkIGJ5IGEgaG9zdCBlbGVtZW50LgogICAqCiAgICogQnkgZGVmYXVsdCBlbGVtZW50cyBhcmUgZmx1c2hlZCB2aWEgYF9mbHVzaFByb3BlcnRpZXNgIHdoZW4KICAgKiBgY29ubmVjdGVkQ2FsbGJhY2tgIGlzIGNhbGxlZC4gRWxlbWVudHMgYXR0YWNoIHRoZWlyIGNsaWVudCBkb20gdG8KICAgKiB0aGVtc2VsdmVzIGF0IGByZWFkeWAgdGltZSB3aGljaCByZXN1bHRzIGZyb20gdGhpcyBmaXJzdCBmbHVzaC4KICAgKiBUaGlzIHByb3ZpZGVzIGFuIG9yZGVyaW5nIGd1YXJhbnRlZSB0aGF0IHRoZSBjbGllbnQgZG9tIGFuIGVsZW1lbnQKICAgKiBjcmVhdGVzIGlzIGZsdXNoZWQgYmVmb3JlIHRoZSBlbGVtZW50IGl0c2VsZiAoaS5lLiBjbGllbnQgYHJlYWR5YAogICAqIGZpcmVzIGJlZm9yZSBob3N0IGByZWFkeWApLgogICAqCiAgICogSG93ZXZlciwgaWYgYF9mbHVzaFByb3BlcnRpZXNgIGlzIGNhbGxlZCAqYmVmb3JlKiBhbiBlbGVtZW50IGlzIGNvbm5lY3RlZCwKICAgKiBhcyBmb3IgZXhhbXBsZSBgVGVtcGxhdGl6ZWAgZG9lcywgdGhpcyBvcmRlcmluZyBndWFyYW50ZWUgY2Fubm90IGJlCiAgICogc2F0aXNmaWVkIGJlY2F1c2Ugbm8gZWxlbWVudHMgYXJlIGNvbm5lY3RlZC4gKE5vdGU6IEJvdW5kIGVsZW1lbnRzIHRoYXQKICAgKiByZWNlaXZlIGRhdGEgZG8gYmVjb21lIGVucXVldWVkIGNsaWVudHMgYW5kIGFyZSBwcm9wZXJseSBvcmRlcmVkIGJ1dAogICAqIHVuYm91bmQgZWxlbWVudHMgYXJlIG5vdC4pCiAgICoKICAgKiBUbyBtYWludGFpbiB0aGUgZGVzaXJlZCAiY2xpZW50IGJlZm9yZSBob3N0IiBvcmRlcmluZyBndWFyYW50ZWUgZm9yIHRoaXMKICAgKiBjYXNlIHdlIHJlbHkgb24gdGhlICJob3N0IHN0YWNrLiBDbGllbnQgbm9kZXMgcmVnaXN0ZXJzIHRoZW1zZWx2ZXMgd2l0aAogICAqIHRoZSBjcmVhdGluZyBob3N0IGVsZW1lbnQgd2hlbiBjcmVhdGVkLiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgY2xpZW50IGRvbQogICAqIGlzIHJlYWRpZWQgaW4gdGhlIHByb3BlciBvcmRlciwgbWFpbnRhaW5pbmcgdGhlIGRlc2lyZWQgZ3VhcmFudGVlLgogICAqCiAgICogQHByaXZhdGUKICAgKi8KICBsZXQgaG9zdFN0YWNrID0gewoKICAgIHN0YWNrOiBbXSwKCiAgICAvKioKICAgICAqIEBwYXJhbSB7Kn0gaW5zdCBJbnN0YW5jZSB0byBhZGQgdG8gaG9zdFN0YWNrCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHRoaXMge2hvc3RTdGFja30KICAgICAqLwogICAgcmVnaXN0ZXJIb3N0KGluc3QpIHsKICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoKSB7CiAgICAgICAgbGV0IGhvc3QgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdOwogICAgICAgIGhvc3QuX2VucXVldWVDbGllbnQoaW5zdCk7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBAcGFyYW0geyp9IGluc3QgSW5zdGFuY2UgdG8gYmVnaW4gaG9zdGluZwogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEB0aGlzIHtob3N0U3RhY2t9CiAgICAgKi8KICAgIGJlZ2luSG9zdGluZyhpbnN0KSB7CiAgICAgIHRoaXMuc3RhY2sucHVzaChpbnN0KTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBAcGFyYW0geyp9IGluc3QgSW5zdGFuY2UgdG8gZW5kIGhvc3RpbmcKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7aG9zdFN0YWNrfQogICAgICovCiAgICBlbmRIb3N0aW5nKGluc3QpIHsKICAgICAgbGV0IHN0YWNrTGVuID0gdGhpcy5zdGFjay5sZW5ndGg7CiAgICAgIGlmIChzdGFja0xlbiAmJiB0aGlzLnN0YWNrW3N0YWNrTGVuLTFdID09IGluc3QpIHsKICAgICAgICB0aGlzLnN0YWNrLnBvcCgpOwogICAgICB9CiAgICB9CgogIH07Cgp9KSgpOwoKCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIFByb3ZpZGVzIGJhc2ljIHRyYWNraW5nIG9mIGVsZW1lbnQgZGVmaW5pdGlvbnMgKHJlZ2lzdHJhdGlvbnMpIGFuZAogICAqIGluc3RhbmNlIGNvdW50cy4KICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAc3VtbWFyeSBQcm92aWRlcyBiYXNpYyB0cmFja2luZyBvZiBlbGVtZW50IGRlZmluaXRpb25zIChyZWdpc3RyYXRpb25zKSBhbmQKICAgKiBpbnN0YW5jZSBjb3VudHMuCiAgICovCiAgUG9seW1lci50ZWxlbWV0cnkgPSB7CiAgICAvKioKICAgICAqIFRvdGFsIG51bWJlciBvZiBQb2x5bWVyIGVsZW1lbnQgaW5zdGFuY2VzIGNyZWF0ZWQuCiAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICovCiAgICBpbnN0YW5jZUNvdW50OiAwLAogICAgLyoqCiAgICAgKiBBcnJheSBvZiBQb2x5bWVyIGVsZW1lbnQgY2xhc3NlcyB0aGF0IGhhdmUgYmVlbiBmaW5hbGl6ZWQuCiAgICAgKiBAdHlwZSB7QXJyYXk8UG9seW1lci5FbGVtZW50Pn0KICAgICAqLwogICAgcmVnaXN0cmF0aW9uczogW10sCiAgICAvKioKICAgICAqIEBwYXJhbSB7IVBvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9IHByb3RvdHlwZSBFbGVtZW50IHByb3RvdHlwZSB0byBsb2cKICAgICAqIEB0aGlzIHt0aGlzfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgX3JlZ0xvZzogZnVuY3Rpb24ocHJvdG90eXBlKSB7CiAgICAgIGNvbnNvbGUubG9nKCdbJyArIHByb3RvdHlwZS5pcyArICddOiByZWdpc3RlcmVkJyk7CiAgICB9LAogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBjbGFzcyBwcm90b3R5cGUgZm9yIHRlbGVtZXRyeSBwdXJwb3Nlcy4KICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHByb3RvdHlwZSBFbGVtZW50IHByb3RvdHlwZSB0byByZWdpc3RlcgogICAgICogQHRoaXMge3RoaXN9CiAgICAgKiBAcHJvdGVjdGVkCiAgICAgKi8KICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihwcm90b3R5cGUpIHsKICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLnB1c2gocHJvdG90eXBlKTsKICAgICAgUG9seW1lci5sb2cgJiYgdGhpcy5fcmVnTG9nKHByb3RvdHlwZSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBMb2dzIGFsbCBlbGVtZW50cyByZWdpc3RlcmVkIHdpdGggYW4gYGlzYCB0byB0aGUgY29uc29sZS4KICAgICAqIEBwdWJsaWMKICAgICAqIEB0aGlzIHt0aGlzfQogICAgICovCiAgICBkdW1wUmVnaXN0cmF0aW9uczogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMucmVnaXN0cmF0aW9ucy5mb3JFYWNoKHRoaXMuX3JlZ0xvZyk7CiAgICB9CiAgfTsKCn0pKCk7CgoKKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGNvcHkgb2YgYHByb3BzYCB3aXRoIGVhY2ggcHJvcGVydHkgbm9ybWFsaXplZCBzdWNoIHRoYXQKICAgKiB1cGdyYWRlZCBpdCBpcyBhbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhIHR5cGUgcHJvcGVydHkgeyB0eXBlOiBUeXBlfS4KICAgKgogICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIHRvIG5vcm1hbGl6ZQogICAqIEByZXR1cm4ge09iamVjdH0gQ29weSBvZiBpbnB1dCBgcHJvcHNgIHdpdGggbm9ybWFsaXplZCBwcm9wZXJ0aWVzIHRoYXQKICAgKiBhcmUgaW4gdGhlIGZvcm0ge3R5cGU6IFR5cGV9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBub3JtYWxpemVQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICBjb25zdCBvdXRwdXQgPSB7fTsKICAgIGZvciAobGV0IHAgaW4gcHJvcHMpIHsKICAgICAgY29uc3QgbyA9IHByb3BzW3BdOwogICAgICBvdXRwdXRbcF0gPSAodHlwZW9mIG8gPT09ICdmdW5jdGlvbicpID8ge3R5cGU6IG99IDogbzsKICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQoKICAvKioKICAgKiBNaXhpbiB0aGF0IHByb3ZpZGVzIGEgbWluaW1hbCBzdGFydGluZyBwb2ludCB0byB1c2luZyB0aGUgUHJvcGVydGllc0NoYW5nZWQKICAgKiBtaXhpbiBieSBwcm92aWRpbmcgYSBtZWNoYW5pc20gdG8gZGVjbGFyZSBwcm9wZXJ0aWVzIGluIGEgc3RhdGljCiAgICogZ2V0dGVyIChlLmcuIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHsgcmV0dXJuIHsgZm9vOiBTdHJpbmcgfSB9KS4gQ2hhbmdlcwogICAqIGFyZSByZXBvcnRlZCB2aWEgdGhlIGBfcHJvcGVydGllc0NoYW5nZWRgIG1ldGhvZC4KICAgKgogICAqIFRoaXMgbWl4aW4gcHJvdmlkZXMgbm8gc3BlY2lmaWMgc3VwcG9ydCBmb3IgcmVuZGVyaW5nLiBVc2VycyBhcmUgZXhwZWN0ZWQKICAgKiB0byBjcmVhdGUgYSBTaGFkb3dSb290IGFuZCBwdXQgY29udGVudCBpbnRvIGl0IGFuZCB1cGRhdGUgaXQgaW4gd2hhdGV2ZXIKICAgKiB3YXkgbWFrZXMgc2Vuc2UuIFRoaXMgY2FuIGJlIGRvbmUgaW4gcmVhY3Rpb24gdG8gcHJvcGVydGllcyBjaGFuZ2luZyBieQogICAqIGltcGxlbWVudGluZyBgX3Byb3BlcnRpZXNDaGFuZ2VkYC4KICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuUHJvcGVydGllc0NoYW5nZWQKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1peGluIHRoYXQgcHJvdmlkZXMgYSBtaW5pbWFsIHN0YXJ0aW5nIHBvaW50IGZvciB1c2luZwogICAqIHRoZSBQcm9wZXJ0aWVzQ2hhbmdlZCBtaXhpbiBieSBwcm92aWRpbmcgYSBkZWNsYXJhdGl2ZSBgcHJvcGVydGllc2Agb2JqZWN0LgogICAqLwogICBQb2x5bWVyLlByb3BlcnRpZXNNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzQ2hhbmdlZH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IGJhc2UgPSBQb2x5bWVyLlByb3BlcnRpZXNDaGFuZ2VkKHN1cGVyQ2xhc3MpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3VwZXIgY2xhc3MgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBjbGFzcywgaWYgaXQgaXMgYW4KICAgICAqIGluc3RhbmNlIG9mIHRoZSBQcm9wZXJ0aWVzTWl4aW4uCiAgICAgKgogICAgICogQHBhcmFtIHshUHJvcGVydGllc01peGluQ29uc3RydWN0b3J9IGNvbnN0cnVjdG9yIFByb3BlcnRpZXNNaXhpbiBjb25zdHJ1Y3RvcgogICAgICogQHJldHVybiB7UHJvcGVydGllc01peGluQ29uc3RydWN0b3J9IFN1cGVyIGNsYXNzIGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHN1cGVyUHJvcGVydGllc0NsYXNzKGNvbnN0cnVjdG9yKSB7CiAgICAgIGNvbnN0IHN1cGVyQ3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjb25zdHJ1Y3Rvcik7CgogICAgICAvLyBOb3RlLCB0aGUgYFByb3BlcnRpZXNNaXhpbmAgY2xhc3MgYmVsb3cgb25seSByZWZlcnMgdG8gdGhlIGNsYXNzCiAgICAgIC8vIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwgdG8gdGhlIG1peGluOyB0aGUgaW5zdGFuY2VvZiB0ZXN0IG9ubHkgd29ya3MKICAgICAgLy8gYmVjYXVzZSB0aGUgbWl4aW4gaXMgZGVkdXBlZCBhbmQgZ3VhcmFudGVlZCBvbmx5IHRvIGFwcGx5IG9uY2UsIGhlbmNlCiAgICAgIC8vIGFsbCBjb25zdHJ1Y3RvcnMgaW4gYSBwcm90byBjaGFpbiB3aWxsIHNlZSB0aGUgc2FtZSBgUHJvcGVydGllc01peGluYAogICAgICByZXR1cm4gKHN1cGVyQ3Rvci5wcm90b3R5cGUgaW5zdGFuY2VvZiBQcm9wZXJ0aWVzTWl4aW4pID8KICAgICAgICAvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyAoc3VwZXJDdG9yKSA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbWVtb2l6ZWQgdmVyc2lvbiBvZiB0aGUgYHByb3BlcnRpZXNgIG9iamVjdCBmb3IgdGhlCiAgICAgKiBnaXZlbiBjbGFzcy4gUHJvcGVydGllcyBub3QgaW4gb2JqZWN0IGZvcm1hdCBhcmUgY29udmVydGVkIHRvIGF0CiAgICAgKiBsZWFzdCB7dHlwZX0uCiAgICAgKgogICAgICogQHBhcmFtIHtQcm9wZXJ0aWVzTWl4aW5Db25zdHJ1Y3Rvcn0gY29uc3RydWN0b3IgUHJvcGVydGllc01peGluIGNvbnN0cnVjdG9yCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE1lbW9pemVkIHByb3BlcnRpZXMgb2JqZWN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIG93blByb3BlcnRpZXMoY29uc3RydWN0b3IpIHsKICAgICAgaWYgKCFjb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfX293blByb3BlcnRpZXMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgbGV0IHByb3BzID0gbnVsbDsKCiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ3Byb3BlcnRpZXMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gY29uc3RydWN0b3IucHJvcGVydGllczsKICAgICAgICAgIAogICAgICAgICAgaWYgKHByb3BlcnRpZXMpIHsKICAgICAgICAgICAgcHJvcHMgPSBub3JtYWxpemVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgY29uc3RydWN0b3IuX19vd25Qcm9wZXJ0aWVzID0gcHJvcHM7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLl9fb3duUHJvcGVydGllczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzTWl4aW59CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKi8KICAgIGNsYXNzIFByb3BlcnRpZXNNaXhpbiBleHRlbmRzIGJhc2UgewoKICAgICAgLyoqCiAgICAgICAqIEltcGxlbWVudHMgc3RhbmRhcmQgY3VzdG9tIGVsZW1lbnRzIGdldHRlciB0byBvYnNlcnZlcyB0aGUgYXR0cmlidXRlcwogICAgICAgKiBsaXN0ZWQgaW4gYHByb3BlcnRpZXNgLgogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgewogICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19vYnNlcnZlZEF0dHJpYnV0ZXMnKSkgewogICAgICAgICAgUG9seW1lci50ZWxlbWV0cnkucmVnaXN0ZXIodGhpcy5wcm90b3R5cGUpOwogICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLl9wcm9wZXJ0aWVzOwogICAgICAgICAgdGhpcy5fX29ic2VydmVkQXR0cmlidXRlcyA9IHByb3BzID8gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwID0+IHRoaXMuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHApKSA6IFtdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fX29ic2VydmVkQXR0cmlidXRlczsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZpbmFsaXplcyBhbiBlbGVtZW50IGRlZmluaXRpb24sIGluY2x1ZGluZyBlbnN1cmluZyBhbnkgc3VwZXIgY2xhc3NlcwogICAgICAgKiBhcmUgYWxzbyBmaW5hbGl6ZWQuIFRoaXMgaW5jbHVkZXMgZW5zdXJpbmcgcHJvcGVydHkKICAgICAgICogYWNjZXNzb3JzIGV4aXN0IG9uIHRoZSBlbGVtZW50IHByb3RvdHlwZS4gVGhpcyBtZXRob2QgY2FsbHMKICAgICAgICogYF9maW5hbGl6ZUNsYXNzYCB0byBmaW5hbGl6ZSBlYWNoIGNvbnN0cnVjdG9yIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBzdGF0aWMgZmluYWxpemUoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ19fZmluYWxpemVkJywgdGhpcykpKSB7CiAgICAgICAgICBjb25zdCBzdXBlckN0b3IgPSBzdXBlclByb3BlcnRpZXNDbGFzcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgICBpZiAoc3VwZXJDdG9yKSB7CiAgICAgICAgICAgIHN1cGVyQ3Rvci5maW5hbGl6ZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fX2ZpbmFsaXplZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9maW5hbGl6ZUNsYXNzKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRmluYWxpemUgYW4gZWxlbWVudCBjbGFzcy4gVGhpcyBpbmNsdWRlcyBlbnN1cmluZyBwcm9wZXJ0eQogICAgICAgKiBhY2Nlc3NvcnMgZXhpc3Qgb24gdGhlIGVsZW1lbnQgcHJvdG90eXBlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkKICAgICAgICogYGZpbmFsaXplYCBhbmQgZmluYWxpemVzIHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KICAgICAgICoKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIF9maW5hbGl6ZUNsYXNzKCkgewogICAgICAgIGNvbnN0IHByb3BzID0gb3duUHJvcGVydGllcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgaWYgKHByb3BzKSB7CiAgICAgICAgICB0aGlzLmNyZWF0ZVByb3BlcnRpZXMocHJvcHMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBtZW1vaXplZCB2ZXJzaW9uIG9mIGFsbCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhvc2UgaW5oZXJpdGVkCiAgICAgICAqIGZyb20gc3VwZXIgY2xhc3Nlcy4gUHJvcGVydGllcyBub3QgaW4gb2JqZWN0IGZvcm1hdCBhcmUgY29udmVydGVkIHRvCiAgICAgICAqIGF0IGxlYXN0IHt0eXBlfS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIGZvciB0aGlzIGNsYXNzCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBnZXQgX3Byb3BlcnRpZXMoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KAogICAgICAgICAgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX19wcm9wZXJ0aWVzJywgdGhpcykpKSB7CiAgICAgICAgICBjb25zdCBzdXBlckN0b3IgPSBzdXBlclByb3BlcnRpZXNDbGFzcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgICB0aGlzLl9fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sCiAgICAgICAgICAgIHN1cGVyQ3RvciAmJiBzdXBlckN0b3IuX3Byb3BlcnRpZXMsCiAgICAgICAgICAgIG93blByb3BlcnRpZXMoLyoqIEB0eXBlIHtQcm9wZXJ0aWVzTWl4aW5Db25zdHJ1Y3Rvcn0gKi8odGhpcykpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX19wcm9wZXJ0aWVzOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGBQcm9wZXJ0aWVzQ2hhbmdlZGAgbWV0aG9kIHRvIHJldHVybiB0eXBlIHNwZWNpZmllZCBpbiB0aGUKICAgICAgICogc3RhdGljIGBwcm9wZXJ0aWVzYCBvYmplY3QgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBwcm9wZXJ0eQogICAgICAgKiBAcmV0dXJuIHsqfSBUeXBlIHRvIHdoaWNoIHRvIGRlc2VyaWFsaXplIGF0dHJpYnV0ZQogICAgICAgKgogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgdHlwZUZvclByb3BlcnR5KG5hbWUpIHsKICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fcHJvcGVydGllc1tuYW1lXTsKICAgICAgICByZXR1cm4gaW5mbyAmJiBpbmZvLnR5cGU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFByb3BlcnRpZXNDaGFuZ2VkYCBtZXRob2QgYW5kIGFkZHMgYSBjYWxsIHRvCiAgICAgICAqIGBmaW5hbGl6ZWAgd2hpY2ggbGF6aWx5IGNvbmZpZ3VyZXMgdGhlIGVsZW1lbnQncyBwcm9wZXJ0eSBhY2Nlc3NvcnMuCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm9wZXJ0aWVzKCkgewogICAgICAgIFBvbHltZXIudGVsZW1ldHJ5Lmluc3RhbmNlQ291bnQrKzsKICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCk7CiAgICAgICAgc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBhZGRlZCB0byBhIGRvY3VtZW50LgogICAgICAgKiBDYWxscyBgX2VuYWJsZVByb3BlcnRpZXNgIHRvIHR1cm4gb24gcHJvcGVydHkgc3lzdGVtIGZyb20KICAgICAgICogYFByb3BlcnRpZXNDaGFuZ2VkYC4KICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gU3VwZXIgbWF5IG9yIG1heSBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjawogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgaWYgKHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gYSBkb2N1bWVudAogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBTdXBlciBtYXkgb3IgbWF5IG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICBpZiAoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICB9CgogICAgfQoKICAgIHJldHVybiBQcm9wZXJ0aWVzTWl4aW47CgogIH0pOwoKfSkoKTsKCgoKKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgY29uc3QgYnVpbHRDU1MgPSB3aW5kb3cuU2hhZHlDU1MgJiYgd2luZG93LlNoYWR5Q1NTWydjc3NCdWlsZCddOwoKICAvKioKICAgKiBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJIGZvciBQb2x5bWVyJ3MgbWV0YS1wcm9ncmFtbWluZwogICAqIGZlYXR1cmVzIGluY2x1ZGluZyB0ZW1wbGF0ZSBzdGFtcGluZywgZGF0YS1iaW5kaW5nLCBhdHRyaWJ1dGUgZGVzZXJpYWxpemF0aW9uLAogICAqIGFuZCBwcm9wZXJ0eSBjaGFuZ2Ugb2JzZXJ2YXRpb24uCiAgICoKICAgKiBTdWJjbGFzc2VycyBtYXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN0YXRpYyBnZXR0ZXJzIHRvIHJldHVybiBtZXRhZGF0YQogICAqIHVzZWQgdG8gY29uZmlndXJlIFBvbHltZXIncyBmZWF0dXJlcyBmb3IgdGhlIGNsYXNzOgogICAqCiAgICogLSBgc3RhdGljIGdldCBpcygpYDogV2hlbiB0aGUgdGVtcGxhdGUgaXMgcHJvdmlkZWQgdmlhIGEgYGRvbS1tb2R1bGVgLAogICAqICAgdXNlcnMgc2hvdWxkIHJldHVybiB0aGUgYGRvbS1tb2R1bGVgIGlkIGZyb20gYSBzdGF0aWMgYGlzYCBnZXR0ZXIuICBJZgogICAqICAgbm8gdGVtcGxhdGUgaXMgbmVlZGVkIG9yIHRoZSB0ZW1wbGF0ZSBpcyBwcm92aWRlZCBkaXJlY3RseSB2aWEgdGhlCiAgICogICBgdGVtcGxhdGVgIGdldHRlciwgdGhlcmUgaXMgbm8gbmVlZCB0byBkZWZpbmUgYGlzYCBmb3IgdGhlIGVsZW1lbnQuCiAgICoKICAgKiAtIGBzdGF0aWMgZ2V0IHRlbXBsYXRlKClgOiBVc2VycyBtYXkgcHJvdmlkZSB0aGUgdGVtcGxhdGUgZGlyZWN0bHkgKGFzCiAgICogICBvcHBvc2VkIHRvIHZpYSBgZG9tLW1vZHVsZWApIGJ5IGltcGxlbWVudGluZyBhIHN0YXRpYyBgdGVtcGxhdGVgIGdldHRlci4KICAgKiAgIFRoZSBnZXR0ZXIgbWF5IHJldHVybiBhbiBgSFRNTFRlbXBsYXRlRWxlbWVudGAgb3IgYSBzdHJpbmcsIHdoaWNoIHdpbGwKICAgKiAgIGF1dG9tYXRpY2FsbHkgYmUgcGFyc2VkIGludG8gYSB0ZW1wbGF0ZS4KICAgKgogICAqIC0gYHN0YXRpYyBnZXQgcHJvcGVydGllcygpYDogU2hvdWxkIHJldHVybiBhbiBvYmplY3QgZGVzY3JpYmluZwogICAqICAgcHJvcGVydHktcmVsYXRlZCBtZXRhZGF0YSB1c2VkIGJ5IFBvbHltZXIgZmVhdHVyZXMgKGtleTogcHJvcGVydHkgbmFtZQogICAqICAgdmFsdWU6IG9iamVjdCBjb250YWluaW5nIHByb3BlcnR5IG1ldGFkYXRhKS4gVmFsaWQga2V5cyBpbiBwZXItcHJvcGVydHkKICAgKiAgIG1ldGFkYXRhIGluY2x1ZGU6CiAgICogICAtIGB0eXBlYCAoU3RyaW5nfE51bWJlcnxPYmplY3R8QXJyYXl8Li4uKTogVXNlZCBieQogICAqICAgICBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYCB0byBkZXRlcm1pbmUgaG93IHN0cmluZy1iYXNlZCBhdHRyaWJ1dGVzCiAgICogICAgIGFyZSBkZXNlcmlhbGl6ZWQgdG8gSmF2YVNjcmlwdCBwcm9wZXJ0eSB2YWx1ZXMuCiAgICogICAtIGBub3RpZnlgIChib29sZWFuKTogQ2F1c2VzIGEgY2hhbmdlIGluIHRoZSBwcm9wZXJ0eSB0byBmaXJlIGEKICAgKiAgICAgbm9uLWJ1YmJsaW5nIGV2ZW50IGNhbGxlZCBgPHByb3BlcnR5Pi1jaGFuZ2VkYC4gRWxlbWVudHMgdGhhdCBoYXZlCiAgICogICAgIGVuYWJsZWQgdHdvLXdheSBiaW5kaW5nIHRvIHRoZSBwcm9wZXJ0eSB1c2UgdGhpcyBldmVudCB0byBvYnNlcnZlIGNoYW5nZXMuCiAgICogICAtIGByZWFkT25seWAgKGJvb2xlYW4pOiBDcmVhdGVzIGEgZ2V0dGVyIGZvciB0aGUgcHJvcGVydHksIGJ1dCBubyBzZXR0ZXIuCiAgICogICAgIFRvIHNldCBhIHJlYWQtb25seSBwcm9wZXJ0eSwgdXNlIHRoZSBwcml2YXRlIHNldHRlciBtZXRob2QKICAgKiAgICAgYF9zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpYC4KICAgKiAgIC0gYG9ic2VydmVyYCAoc3RyaW5nKTogT2JzZXJ2ZXIgbWV0aG9kIG5hbWUgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuCiAgICogICAgIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLiBUaGUgYXJndW1lbnRzIG9mIHRoZSBtZXRob2QgYXJlCiAgICogICAgIGAodmFsdWUsIHByZXZpb3VzVmFsdWUpYC4KICAgKiAgIC0gYGNvbXB1dGVkYCAoc3RyaW5nKTogU3RyaW5nIGRlc2NyaWJpbmcgbWV0aG9kIGFuZCBkZXBlbmRlbnQgcHJvcGVydGllcwogICAqICAgICBmb3IgY29tcHV0aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IChlLmcuIGAnY29tcHV0ZUZvbyhiYXIsIHpvdCknYCkuCiAgICogICAgIENvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHJlYWQtb25seSBieSBkZWZhdWx0IGFuZCBjYW4gb25seSBiZSBjaGFuZ2VkCiAgICogICAgIHZpYSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjb21wdXRpbmcgbWV0aG9kLgogICAqCiAgICogLSBgc3RhdGljIGdldCBvYnNlcnZlcnMoKWA6IEFycmF5IG9mIHN0cmluZ3MgZGVzY3JpYmluZyBtdWx0aS1wcm9wZXJ0eQogICAqICAgb2JzZXJ2ZXIgbWV0aG9kcyBhbmQgdGhlaXIgZGVwZW5kZW50IHByb3BlcnRpZXMgKGUuZy4KICAgKiAgIGAnb2JzZXJ2ZUFCQyhhLCBiLCBjKSdgKS4KICAgKgogICAqIFRoZSBiYXNlIGNsYXNzIHByb3ZpZGVzIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgZm9sbG93aW5nIHN0YW5kYXJkCiAgICogY3VzdG9tIGVsZW1lbnQgbGlmZWN5Y2xlIGNhbGxiYWNrczsgdXNlcnMgbWF5IG92ZXJyaWRlIHRoZXNlLCBidXQgc2hvdWxkCiAgICogY2FsbCB0aGUgc3VwZXIgbWV0aG9kIHRvIGVuc3VyZQogICAqIC0gYGNvbnN0cnVjdG9yYDogUnVuIHdoZW4gdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBvciB1cGdyYWRlZAogICAqIC0gYGNvbm5lY3RlZENhbGxiYWNrYDogUnVuIGVhY2ggdGltZSB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlCiAgICogICBkb2N1bWVudAogICAqIC0gYGRpc2Nvbm5lY3RlZENhbGxiYWNrYDogUnVuIGVhY2ggdGltZSB0aGUgZWxlbWVudCBpcyBkaXNjb25uZWN0ZWQgZnJvbQogICAqICAgdGhlIGRvY3VtZW50CiAgICogLSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYDogUnVuIGVhY2ggdGltZSBhbiBhdHRyaWJ1dGUgaW4KICAgKiAgIGBvYnNlcnZlZEF0dHJpYnV0ZXNgIGlzIHNldCBvciByZW1vdmVkIChub3RlOiB0aGlzIGVsZW1lbnQncyBkZWZhdWx0CiAgICogICBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBpbXBsZW1lbnRhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgcmV0dXJuIGFuIGFycmF5CiAgICogICBvZiBkYXNoLWNhc2VkIGF0dHJpYnV0ZXMgYmFzZWQgb24gYHByb3BlcnRpZXNgKQogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHMKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuUHJvcGVydGllc01peGluCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAcHJvcGVydHkgcm9vdFBhdGgge3N0cmluZ30gU2V0IHRvIHRoZSB2YWx1ZSBvZiBgUG9seW1lci5yb290UGF0aGAsCiAgICogICB3aGljaCBkZWZhdWx0cyB0byB0aGUgbWFpbiBkb2N1bWVudCBwYXRoCiAgICogQHByb3BlcnR5IGltcG9ydFBhdGgge3N0cmluZ30gU2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgY2xhc3MncyBzdGF0aWMKICAgKiAgIGBpbXBvcnRQYXRoYCBwcm9wZXJ0eSwgd2hpY2ggZGVmYXVsdHMgdG8gdGhlIHBhdGggb2YgdGhpcyBlbGVtZW50J3MKICAgKiAgIGBkb20tbW9kdWxlYCAod2hlbiBgaXNgIGlzIHVzZWQpLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gZm9yIG90aGVyCiAgICogICBpbXBvcnQgc3RyYXRlZ2llcy4KICAgKiBAc3VtbWFyeSBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJIGZvciBQb2x5bWVyJ3MKICAgKiBtZXRhLXByb2dyYW1taW5nIGZlYXR1cmVzLgogICAqLwogIFBvbHltZXIuRWxlbWVudE1peGluID0gUG9seW1lci5kZWR1cGluZ01peGluKGJhc2UgPT4gewoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKiBAZXh0ZW5kcyB7YmFzZX0KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnR5RWZmZWN0c30KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnRpZXNNaXhpbn0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IHBvbHltZXJFbGVtZW50QmFzZSA9IFBvbHltZXIuUHJvcGVydGllc01peGluKFBvbHltZXIuUHJvcGVydHlFZmZlY3RzKGJhc2UpKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBsaXN0IG9mIHByb3BlcnRpZXMgd2l0aCBkZWZhdWx0IHZhbHVlcy4KICAgICAqIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGFzIGFuIG9wdGltaXphdGlvbiBzaW5jZSBpdCBpcyBhIHN1YnNldCBvZgogICAgICogdGhlIGxpc3QgcmV0dXJuZWQgZnJvbSBgX3Byb3BlcnRpZXNgLgogICAgICogVGhpcyBsaXN0IGlzIHVzZWQgaW4gYF9pbml0aWFsaXplUHJvcGVydGllc2AgdG8gc2V0IHByb3BlcnR5IGRlZmF1bHRzLgogICAgICoKICAgICAqIEBwYXJhbSB7UG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0gY29uc3RydWN0b3IgRWxlbWVudCBjbGFzcwogICAgICogQHJldHVybiB7UG9seW1lckVsZW1lbnRQcm9wZXJ0aWVzfSBGbGF0dGVuZWQgcHJvcGVydGllcyBmb3IgdGhpcyBjbGFzcwogICAgICogICB0aGF0IGhhdmUgZGVmYXVsdCB2YWx1ZXMKICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByb3BlcnR5RGVmYXVsdHMoY29uc3RydWN0b3IpIHsKICAgICAgaWYgKCFjb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgKICAgICAgICBKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfX3Byb3BlcnR5RGVmYXVsdHMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgY29uc3RydWN0b3IuX19wcm9wZXJ0eURlZmF1bHRzID0gbnVsbDsKICAgICAgICBsZXQgcHJvcHMgPSBjb25zdHJ1Y3Rvci5fcHJvcGVydGllczsKICAgICAgICBmb3IgKGxldCBwIGluIHByb3BzKSB7CiAgICAgICAgICBsZXQgaW5mbyA9IHByb3BzW3BdOwogICAgICAgICAgaWYgKCd2YWx1ZScgaW4gaW5mbykgewogICAgICAgICAgICBjb25zdHJ1Y3Rvci5fX3Byb3BlcnR5RGVmYXVsdHMgPSBjb25zdHJ1Y3Rvci5fX3Byb3BlcnR5RGVmYXVsdHMgfHwge307CiAgICAgICAgICAgIGNvbnN0cnVjdG9yLl9fcHJvcGVydHlEZWZhdWx0c1twXSA9IGluZm87CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5fX3Byb3BlcnR5RGVmYXVsdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbWVtb2l6ZWQgdmVyc2lvbiBvZiB0aGUgYG9ic2VydmVyc2AgYXJyYXkuCiAgICAgKiBAcGFyYW0ge1BvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yIEVsZW1lbnQgY2xhc3MKICAgICAqIEByZXR1cm4ge0FycmF5fSBBcnJheSBjb250YWluaW5nIG93biBvYnNlcnZlcnMgZm9yIHRoZSBnaXZlbiBjbGFzcwogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBmdW5jdGlvbiBvd25PYnNlcnZlcnMoY29uc3RydWN0b3IpIHsKICAgICAgaWYgKCFjb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgKICAgICAgICBKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfX293bk9ic2VydmVycycsIGNvbnN0cnVjdG9yKSkpIHsKICAgICAgICAgIGNvbnN0cnVjdG9yLl9fb3duT2JzZXJ2ZXJzID0KICAgICAgICAgIGNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ29ic2VydmVycycsIGNvbnN0cnVjdG9yKSkgPwogICAgICAgICAgLyoqIEB0eXBlIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSAqLyAoY29uc3RydWN0b3IpLm9ic2VydmVycyA6IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLl9fb3duT2JzZXJ2ZXJzOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBlZmZlY3RzIGZvciBhIHByb3BlcnR5LgogICAgICoKICAgICAqIE5vdGUsIG9uY2UgYSBwcm9wZXJ0eSBoYXMgYmVlbiBzZXQgdG8KICAgICAqIGByZWFkT25seWAsIGBjb21wdXRlZGAsIGByZWZsZWN0VG9BdHRyaWJ1dGVgLCBvciBgbm90aWZ5YAogICAgICogdGhlc2UgdmFsdWVzIG1heSBub3QgYmUgY2hhbmdlZC4gRm9yIGV4YW1wbGUsIGEgc3ViY2xhc3MgY2Fubm90CiAgICAgKiBhbHRlciB0aGVzZSBzZXR0aW5ncy4gSG93ZXZlciwgYWRkaXRpb25hbCBgb2JzZXJ2ZXJzYCBtYXkgYmUgYWRkZWQKICAgICAqIGJ5IHN1YmNsYXNzZXMuCiAgICAgKgogICAgICogVGhlIGluZm8gb2JqZWN0IHNob3VsZCBjb250YWluIHByb3BlcnR5IG1ldGFkYXRhIGFzIGZvbGxvd3M6CiAgICAgKgogICAgICogKiBgdHlwZWA6IHtmdW5jdGlvbn0gdHlwZSB0byB3aGljaCBhbiBhdHRyaWJ1dGUgbWF0Y2hpbmcgdGhlIHByb3BlcnR5CiAgICAgKiBpcyBkZXNlcmlhbGl6ZWQuIE5vdGUgdGhlIHByb3BlcnR5IGlzIGNhbWVsLWNhc2VkIGZyb20gYSBkYXNoLWNhc2VkCiAgICAgKiBhdHRyaWJ1dGUuIEZvciBleGFtcGxlLCAnZm9vLWJhcicgYXR0cmlidXRlIGlzIGRlc2VyaWFsaXplZCB0byBhCiAgICAgKiBwcm9wZXJ0eSBuYW1lZCAnZm9vQmFyJy4KICAgICAqCiAgICAgKiAqIGByZWFkT25seWA6IHtib29sZWFufSBjcmVhdGVzIGEgcmVhZE9ubHkgcHJvcGVydHkgYW5kCiAgICAgKiBtYWtlcyBhIHByaXZhdGUgc2V0dGVyIGZvciB0aGUgcHJpdmF0ZSBvZiB0aGUgZm9ybSAnX3NldEZvbycgZm9yIGEKICAgICAqIHByb3BlcnR5ICdmb28nLAogICAgICoKICAgICAqICogYGNvbXB1dGVkYDoge3N0cmluZ30gY3JlYXRlcyBhIGNvbXB1dGVkIHByb3BlcnR5LiBBIGNvbXB1dGVkIHByb3BlcnR5CiAgICAgKiBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGByZWFkT25seTogdHJ1ZWAuIFRoZSB2YWx1ZSBpcyBjYWxjdWxhdGVkCiAgICAgKiBieSBydW5uaW5nIGEgbWV0aG9kIGFuZCBhcmd1bWVudHMgcGFyc2VkIGZyb20gdGhlIGdpdmVuIHN0cmluZy4gRm9yCiAgICAgKiBleGFtcGxlICdjb21wdXRlKGZvbyknIHdpbGwgY29tcHV0ZSBhIGdpdmVuIHByb3BlcnR5IHdoZW4gdGhlCiAgICAgKiAnZm9vJyBwcm9wZXJ0eSBjaGFuZ2VzIGJ5IGV4ZWN1dGluZyB0aGUgJ2NvbXB1dGUnIG1ldGhvZC4gVGhpcyBtZXRob2QKICAgICAqIG11c3QgcmV0dXJuIHRoZSBjb21wdXRlZCB2YWx1ZS4KICAgICAqCiAgICAgKiAqIGByZWZsZWN0VG9BdHRyaWJ1dGVgOiB7Ym9vbGVhbn0gSWYgdHJ1ZSwgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHJlZmxlY3RlZAogICAgICogdG8gYW4gYXR0cmlidXRlIG9mIHRoZSBzYW1lIG5hbWUuIE5vdGUsIHRoZSBhdHRyaWJ1dGUgaXMgZGFzaC1jYXNlZAogICAgICogc28gYSBwcm9wZXJ0eSBuYW1lZCAnZm9vQmFyJyBpcyByZWZsZWN0ZWQgYXMgJ2Zvby1iYXInLgogICAgICoKICAgICAqICogYG5vdGlmeWA6IHtib29sZWFufSBzZW5kcyBhIG5vbi1idWJibGluZyBub3RpZmljYXRpb24gZXZlbnQgd2hlbgogICAgICogdGhlIHByb3BlcnR5IGNoYW5nZXMuIEZvciBleGFtcGxlLCBhIHByb3BlcnR5IG5hbWVkICdmb28nIHNlbmRzIGFuCiAgICAgKiBldmVudCBuYW1lZCAnZm9vLWNoYW5nZWQnIHdpdGggYGV2ZW50LmRldGFpbGAgc2V0IHRvIHRoZSB2YWx1ZSBvZgogICAgICogdGhlIHByb3BlcnR5LgogICAgICoKICAgICAqICogb2JzZXJ2ZXI6IHtzdHJpbmd9IG5hbWUgb2YgYSBtZXRob2QgdGhhdCBydW5zIHdoZW4gdGhlIHByb3BlcnR5CiAgICAgKiBjaGFuZ2VzLiBUaGUgYXJndW1lbnRzIG9mIHRoZSBtZXRob2QgYXJlICh2YWx1ZSwgcHJldmlvdXNWYWx1ZSkuCiAgICAgKgogICAgICogTm90ZTogVXNlcnMgbWF5IHdhbnQgY29udHJvbCBvdmVyIG1vZGlmeWluZyBwcm9wZXJ0eQogICAgICogZWZmZWN0cyB2aWEgc3ViY2xhc3NpbmcuIEZvciBleGFtcGxlLCBhIHVzZXIgbWlnaHQgd2FudCB0byBtYWtlIGEKICAgICAqIHJlZmxlY3RUb0F0dHJpYnV0ZSBwcm9wZXJ0eSBub3QgZG8gc28gaW4gYSBzdWJjbGFzcy4gV2UndmUgY2hvc2VuIHRvCiAgICAgKiBkaXNhYmxlIHRoaXMgYmVjYXVzZSBpdCBsZWFkcyB0byBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbi4KICAgICAqIEZvciBleGFtcGxlLCBhIHJlYWRPbmx5IGVmZmVjdCBnZW5lcmF0ZXMgYSBzcGVjaWFsIHNldHRlci4gSWYgYSBzdWJjbGFzcwogICAgICogZGlzYWJsZXMgdGhlIGVmZmVjdCwgdGhlIHNldHRlciB3b3VsZCBmYWlsIHVuZXhwZWN0ZWRseS4KICAgICAqIEJhc2VkIG9uIGZlZWRiYWNrLCB3ZSBtYXkgd2FudCB0byB0cnkgdG8gbWFrZSBlZmZlY3RzIG1vcmUgbWFsbGVhYmxlCiAgICAgKiBhbmQvb3IgcHJvdmlkZSBhbiBhZHZhbmNlZCBhcGkgZm9yIG1hbmlwdWxhdGluZyB0aGVtLgogICAgICogQWxzbyBjb25zaWRlciBhZGRpbmcgd2FybmluZ3Mgd2hlbiBhbiBlZmZlY3QgY2Fubm90IGJlIGNoYW5nZWQuCiAgICAgKgogICAgICogQHBhcmFtIHshUG9seW1lckVsZW1lbnR9IHByb3RvIEVsZW1lbnQgY2xhc3MgcHJvdG90eXBlIHRvIGFkZCBhY2Nlc3NvcnMKICAgICAqICAgYW5kIGVmZmVjdHMgdG8KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5LgogICAgICogQHBhcmFtIHtPYmplY3R9IGluZm8gSW5mbyBvYmplY3QgZnJvbSB3aGljaCB0byBjcmVhdGUgcHJvcGVydHkgZWZmZWN0cy4KICAgICAqIFN1cHBvcnRlZCBrZXlzOgogICAgICogQHBhcmFtIHtPYmplY3R9IGFsbFByb3BzIEZsYXR0ZW5lZCBtYXAgb2YgYWxsIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGlzCiAgICAgKiAgIGVsZW1lbnQgKGluY2x1ZGluZyBpbmhlcml0ZWQgcHJvcGVydGllcykKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eUZyb21Db25maWcocHJvdG8sIG5hbWUsIGluZm8sIGFsbFByb3BzKSB7CiAgICAgIC8vIGNvbXB1dGVkIGZvcmNlcyByZWFkT25seS4uLgogICAgICBpZiAoaW5mby5jb21wdXRlZCkgewogICAgICAgIGluZm8ucmVhZE9ubHkgPSB0cnVlOwogICAgICB9CiAgICAgIC8vIE5vdGUsIHNpbmNlIGFsbCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSByZWFkT25seSwgdGhpcyBwcmV2ZW50cwogICAgICAvLyBhZGRpbmcgYWRkaXRpb25hbCBjb21wdXRlZCBwcm9wZXJ0eSBlZmZlY3RzICh3aGljaCBsZWFkcyB0byBhIGNvbmZ1c2luZwogICAgICAvLyBzZXR1cCB3aGVyZSBtdWx0aXBsZSB0cmlnZ2VycyBmb3Igc2V0dGluZyBhIHByb3BlcnR5KQogICAgICAvLyBXaGlsZSB3ZSBkbyBoYXZlIGBoYXNDb21wdXRlZEVmZmVjdGAgdGhpcyBpcyBzZXQgb24gdGhlIHByb3BlcnR5J3MKICAgICAgLy8gZGVwZW5kZW5jaWVzIHJhdGhlciB0aGFuIGl0c2VsZi4KICAgICAgaWYgKGluZm8uY29tcHV0ZWQgJiYgIXByb3RvLl9oYXNSZWFkT25seUVmZmVjdChuYW1lKSkgewogICAgICAgIHByb3RvLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KG5hbWUsIGluZm8uY29tcHV0ZWQsIGFsbFByb3BzKTsKICAgICAgfQogICAgICBpZiAoaW5mby5yZWFkT25seSAmJiAhcHJvdG8uX2hhc1JlYWRPbmx5RWZmZWN0KG5hbWUpKSB7CiAgICAgICAgcHJvdG8uX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkobmFtZSwgIWluZm8uY29tcHV0ZWQpOwogICAgICB9CiAgICAgIGlmIChpbmZvLnJlZmxlY3RUb0F0dHJpYnV0ZSAmJiAhcHJvdG8uX2hhc1JlZmxlY3RFZmZlY3QobmFtZSkpIHsKICAgICAgICBwcm90by5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkobmFtZSk7CiAgICAgIH0KICAgICAgaWYgKGluZm8ubm90aWZ5ICYmICFwcm90by5faGFzTm90aWZ5RWZmZWN0KG5hbWUpKSB7CiAgICAgICAgcHJvdG8uX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KG5hbWUpOwogICAgICB9CiAgICAgIC8vIGFsd2F5cyBhZGQgb2JzZXJ2ZXIKICAgICAgaWYgKGluZm8ub2JzZXJ2ZXIpIHsKICAgICAgICBwcm90by5fY3JlYXRlUHJvcGVydHlPYnNlcnZlcihuYW1lLCBpbmZvLm9ic2VydmVyLCBhbGxQcm9wc1tpbmZvLm9ic2VydmVyXSk7CiAgICAgIH0KICAgICAgLy8gYWx3YXlzIGNyZWF0ZSB0aGUgbWFwcGluZyBmcm9tIGF0dHJpYnV0ZSBiYWNrIHRvIHByb3BlcnR5IGZvciBkZXNlcmlhbGl6YXRpb24uCiAgICAgIHByb3RvLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKG5hbWUpOwogICAgfQoKICAgIC8qKgogICAgICogUHJvY2VzcyBhbGwgc3R5bGUgZWxlbWVudHMgaW4gdGhlIGVsZW1lbnQgdGVtcGxhdGUuIFN0eWxlcyB3aXRoIHRoZQogICAgICogYGluY2x1ZGVgIGF0dHJpYnV0ZSBhcmUgcHJvY2Vzc2VkIHN1Y2ggdGhhdCBhbnkgc3R5bGVzIGluCiAgICAgKiB0aGUgYXNzb2NpYXRlZCAic3R5bGUgbW9kdWxlcyIgYXJlIGluY2x1ZGVkIGluIHRoZSBlbGVtZW50IHRlbXBsYXRlLgogICAgICogQHBhcmFtIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSBrbGFzcyBFbGVtZW50IGNsYXNzCiAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBwcm9jZXNzCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaXMgTmFtZSBvZiBlbGVtZW50CiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSSBCYXNlIFVSSSBmb3IgZWxlbWVudAogICAgICogQHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gcHJvY2Vzc0VsZW1lbnRTdHlsZXMoa2xhc3MsIHRlbXBsYXRlLCBpcywgYmFzZVVSSSkgewogICAgICBpZiAoIWJ1aWx0Q1NTKSB7CiAgICAgICAgY29uc3QgdGVtcGxhdGVTdHlsZXMgPSB0ZW1wbGF0ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3N0eWxlJyk7CiAgICAgICAgY29uc3Qgc3R5bGVzV2l0aEltcG9ydHMgPSBQb2x5bWVyLlN0eWxlR2F0aGVyLnN0eWxlc0Zyb21UZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgLy8gaW5zZXJ0IHN0eWxlcyBmcm9tIDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPiBhdCB0aGUgdG9wIG9mIHRoZSB0ZW1wbGF0ZQogICAgICAgIGNvbnN0IGxpbmtlZFN0eWxlcyA9IFBvbHltZXIuU3R5bGVHYXRoZXIuc3R5bGVzRnJvbU1vZHVsZUltcG9ydHMoaXMpOwogICAgICAgIGNvbnN0IGZpcnN0VGVtcGxhdGVDaGlsZCA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7CiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbGlua2VkU3R5bGVzLmxlbmd0aDsgaWR4KyspIHsKICAgICAgICAgIGxldCBzID0gbGlua2VkU3R5bGVzW2lkeF07CiAgICAgICAgICBzLnRleHRDb250ZW50ID0ga2xhc3MuX3Byb2Nlc3NTdHlsZVRleHQocy50ZXh0Q29udGVudCwgYmFzZVVSSSk7CiAgICAgICAgICB0ZW1wbGF0ZS5jb250ZW50Lmluc2VydEJlZm9yZShzLCBmaXJzdFRlbXBsYXRlQ2hpbGQpOwogICAgICAgIH0KICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBsYXN0ICJjb25jcmV0ZSIgc3R5bGUgaW4gdGhlIHRlbXBsYXRlIHdlIGhhdmUgZW5jb3VudGVyZWQKICAgICAgICBsZXQgdGVtcGxhdGVTdHlsZUluZGV4ID0gMDsKICAgICAgICAvLyBlbnN1cmUgYWxsIGdhdGhlcmVkIHN0eWxlcyBhcmUgYWN0dWFsbHkgaW4gdGhpcyB0ZW1wbGF0ZS4KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0eWxlc1dpdGhJbXBvcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgcyA9IHN0eWxlc1dpdGhJbXBvcnRzW2ldOwogICAgICAgICAgbGV0IHRlbXBsYXRlU3R5bGUgPSB0ZW1wbGF0ZVN0eWxlc1t0ZW1wbGF0ZVN0eWxlSW5kZXhdOwogICAgICAgICAgLy8gaWYgdGhlIHN0eWxlIGlzIG5vdCBpbiB0aGlzIHRlbXBsYXRlLCBpdCdzIGJlZW4gImluY2x1ZGVkIiBhbmQKICAgICAgICAgIC8vIHdlIHB1dCBhIGNsb25lIG9mIGl0IGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmUgdGhlIHN0eWxlIHRoYXQgaW5jbHVkZWQgaXQKICAgICAgICAgIGlmICh0ZW1wbGF0ZVN0eWxlICE9PSBzKSB7CiAgICAgICAgICAgIHMgPSBzLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgdGVtcGxhdGVTdHlsZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLCB0ZW1wbGF0ZVN0eWxlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRlbXBsYXRlU3R5bGVJbmRleCsrOwogICAgICAgICAgfQogICAgICAgICAgcy50ZXh0Q29udGVudCA9IGtsYXNzLl9wcm9jZXNzU3R5bGVUZXh0KHMudGV4dENvbnRlbnQsIGJhc2VVUkkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAod2luZG93LlNoYWR5Q1NTKSB7CiAgICAgICAgd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZSh0ZW1wbGF0ZSwgaXMpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBMb29rIHVwIHRlbXBsYXRlIGZyb20gZG9tLW1vZHVsZSBmb3IgZWxlbWVudAogICAgICoKICAgICAqIEBwYXJhbSB7IXN0cmluZ30gaXMgRWxlbWVudCBuYW1lIHRvIGxvb2sgdXAKICAgICAqIEByZXR1cm4geyFIVE1MVGVtcGxhdGVFbGVtZW50fSBUZW1wbGF0ZSBmb3VuZCBpbiBkb20gbW9kdWxlLCBvcgogICAgICogICB1bmRlZmluZWQgaWYgbm90IGZvdW5kCiAgICAgKiBAcHJvdGVjdGVkCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFRlbXBsYXRlRnJvbURvbU1vZHVsZShpcykgewogICAgICBsZXQgdGVtcGxhdGUgPSBudWxsOwogICAgICBpZiAoaXMgJiYgUG9seW1lci5Eb21Nb2R1bGUpIHsKICAgICAgICB0ZW1wbGF0ZSA9IFBvbHltZXIuRG9tTW9kdWxlLmltcG9ydChpcywgJ3RlbXBsYXRlJyk7CiAgICAgICAgLy8gVW5kZXIgc3RyaWN0VGVtcGxhdGVQb2xpY3ksIHJlcXVpcmUgYW55IGVsZW1lbnQgd2l0aCBhbiBgaXNgCiAgICAgICAgLy8gc3BlY2lmaWVkIHRvIGhhdmUgYSBkb20tbW9kdWxlCiAgICAgICAgaWYgKFBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3kgJiYgIXRlbXBsYXRlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHN0cmljdFRlbXBsYXRlUG9saWN5OiBleHBlY3RpbmcgZG9tLW1vZHVsZSBvciBudWxsIHRlbXBsYXRlIGZvciAke2lzfWApOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGVtcGxhdGU7CiAgICB9CgogIC8qKgogICAgICogQHBvbHltZXIKICAgICAqIEBtaXhpbkNsYXNzCiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9FbGVtZW50TWl4aW59CiAgICAgKi8KICAgIGNsYXNzIFBvbHltZXJFbGVtZW50IGV4dGVuZHMgcG9seW1lckVsZW1lbnRCYXNlIHsKCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZSBvZiBQcm9wZXJ0aWVzTWl4aW4gX2ZpbmFsaXplQ2xhc3MgdG8gY3JlYXRlIG9ic2VydmVycyBhbmQKICAgICAgICogZmluZCB0aGUgdGVtcGxhdGUuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IEludGVyZmFjZXMgaW4gY2xvc3VyZSBkbyBub3QgaW5oZXJpdCBzdGF0aWNzLCBidXQgY2xhc3NlcyBkbwogICAgICAgKi8KICAgICAgc3RhdGljIF9maW5hbGl6ZUNsYXNzKCkgewogICAgICAgIHN1cGVyLl9maW5hbGl6ZUNsYXNzKCk7CiAgICAgICAgY29uc3Qgb2JzZXJ2ZXJzID0gb3duT2JzZXJ2ZXJzKHRoaXMpOwogICAgICAgIGlmIChvYnNlcnZlcnMpIHsKICAgICAgICAgIHRoaXMuY3JlYXRlT2JzZXJ2ZXJzKG9ic2VydmVycywgdGhpcy5fcHJvcGVydGllcyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpOwogICAgICB9CgogICAgICBzdGF0aWMgX3ByZXBhcmVUZW1wbGF0ZSgpIHsKICAgICAgICAvLyBub3RlOiBjcmVhdGUgIndvcmtpbmciIHRlbXBsYXRlIHRoYXQgaXMgZmluYWxpemVkIGF0IGluc3RhbmNlIHRpbWUKICAgICAgICBsZXQgdGVtcGxhdGUgPSAvKiogQHR5cGUge1BvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9ICovICh0aGlzKS50ZW1wbGF0ZTsKICAgICAgICBpZiAodGVtcGxhdGUpIHsKICAgICAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTsKICAgICAgICAgICAgdC5pbm5lckhUTUwgPSB0ZW1wbGF0ZTsKICAgICAgICAgICAgdGVtcGxhdGUgPSB0OwogICAgICAgICAgfSBlbHNlIGlmICghUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zKSB7CiAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZSA9IHRlbXBsYXRlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgb2YgUHJvcGVydGllc0NoYW5nZWQgY3JlYXRlUHJvcGVydGllcyB0byBjcmVhdGUgYWNjZXNzb3JzCiAgICAgICAqIGFuZCBwcm9wZXJ0eSBlZmZlY3RzIGZvciBhbGwgb2YgdGhlIHByb3BlcnRpZXMuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqLwogICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhwcm9wcykgewogICAgICAgIGZvciAobGV0IHAgaW4gcHJvcHMpIHsKICAgICAgICAgIGNyZWF0ZVByb3BlcnR5RnJvbUNvbmZpZyh0aGlzLnByb3RvdHlwZSwgcCwgcHJvcHNbcF0sIHByb3BzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDcmVhdGVzIG9ic2VydmVycyBmb3IgdGhlIGdpdmVuIGBvYnNlcnZlcnNgIGFycmF5LgogICAgICAgKiBMZXZlcmFnZXMgYFByb3BlcnR5RWZmZWN0c2AgdG8gY3JlYXRlIG9ic2VydmVycy4KICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ic2VydmVycyBBcnJheSBvZiBvYnNlcnZlciBkZXNjcmlwdG9ycyBmb3IKICAgICAgICogICB0aGlzIGNsYXNzCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkeW5hbWljRm5zIE9iamVjdCBjb250YWluaW5nIGtleXMgZm9yIGFueSBwcm9wZXJ0aWVzCiAgICAgICAqICAgdGhhdCBhcmUgZnVuY3Rpb25zIGFuZCBzaG91bGQgdHJpZ2dlciB0aGUgZWZmZWN0IHdoZW4gdGhlIGZ1bmN0aW9uCiAgICAgICAqICAgcmVmZXJlbmNlIGlzIGNoYW5nZWQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZU9ic2VydmVycyhvYnNlcnZlcnMsIGR5bmFtaWNGbnMpIHsKICAgICAgICBjb25zdCBwcm90byA9IHRoaXMucHJvdG90eXBlOwogICAgICAgIGZvciAobGV0IGk9MDsgaSA8IG9ic2VydmVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgcHJvdG8uX2NyZWF0ZU1ldGhvZE9ic2VydmVyKG9ic2VydmVyc1tpXSwgZHluYW1pY0Zucyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgdGVtcGxhdGUgdGhhdCB3aWxsIGJlIHN0YW1wZWQgaW50byB0aGlzIGVsZW1lbnQncyBzaGFkb3cgcm9vdC4KICAgICAgICoKICAgICAgICogSWYgYSBgc3RhdGljIGdldCBpcygpYCBnZXR0ZXIgaXMgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KICAgICAgICogd2lsbCByZXR1cm4gdGhlIGZpcnN0IGA8dGVtcGxhdGU+YCBpbiBhIGBkb20tbW9kdWxlYCB3aG9zZSBgaWRgCiAgICAgICAqIG1hdGNoZXMgdGhpcyBlbGVtZW50J3MgYGlzYC4KICAgICAgICoKICAgICAgICogVXNlcnMgbWF5IG92ZXJyaWRlIHRoaXMgZ2V0dGVyIHRvIHJldHVybiBhbiBhcmJpdHJhcnkgdGVtcGxhdGUKICAgICAgICogKGluIHdoaWNoIGNhc2UgdGhlIGBpc2AgZ2V0dGVyIGlzIHVubmVjZXNzYXJ5KS4gVGhlIHRlbXBsYXRlIHJldHVybmVkCiAgICAgICAqIG1heSBiZSBlaXRoZXIgYW4gYEhUTUxUZW1wbGF0ZUVsZW1lbnRgIG9yIGEgc3RyaW5nIHRoYXQgd2lsbCBiZQogICAgICAgKiBhdXRvbWF0aWNhbGx5IHBhcnNlZCBpbnRvIGEgdGVtcGxhdGUuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhhdCB3aGVuIHN1YmNsYXNzaW5nLCBpZiB0aGUgc3VwZXIgY2xhc3Mgb3ZlcnJvZGUgdGhlIGRlZmF1bHQKICAgICAgICogaW1wbGVtZW50YXRpb24gYW5kIHRoZSBzdWJjbGFzcyB3b3VsZCBsaWtlIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlCiAgICAgICAqIHRlbXBsYXRlIHZpYSBhIGBkb20tbW9kdWxlYCwgaXQgc2hvdWxkIG92ZXJyaWRlIHRoaXMgZ2V0dGVyIGFuZAogICAgICAgKiByZXR1cm4gYFBvbHltZXIuRG9tTW9kdWxlLmltcG9ydCh0aGlzLmlzLCAndGVtcGxhdGUnKWAuCiAgICAgICAqCiAgICAgICAqIElmIGEgc3ViY2xhc3Mgd291bGQgbGlrZSB0byBtb2RpZnkgdGhlIHN1cGVyIGNsYXNzIHRlbXBsYXRlLCBpdCBzaG91bGQKICAgICAgICogY2xvbmUgaXQgcmF0aGVyIHRoYW4gbW9kaWZ5IGl0IGluIHBsYWNlLiAgSWYgdGhlIGdldHRlciBkb2VzIGV4cGVuc2l2ZQogICAgICAgKiB3b3JrIHN1Y2ggYXMgY2xvbmluZy9tb2RpZnlpbmcgYSB0ZW1wbGF0ZSwgaXQgc2hvdWxkIG1lbW9pemUgdGhlCiAgICAgICAqIHRlbXBsYXRlIGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlOgogICAgICAgKgogICAgICAgKiAgIGxldCBtZW1vaXplZFRlbXBsYXRlOwogICAgICAgKiAgIGNsYXNzIE15U3ViQ2xhc3MgZXh0ZW5kcyBNeVN1cGVyQ2xhc3MgewogICAgICAgKiAgICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsKICAgICAgICogICAgICAgaWYgKCFtZW1vaXplZFRlbXBsYXRlKSB7CiAgICAgICAqICAgICAgICAgbWVtb2l6ZWRUZW1wbGF0ZSA9IE15U3VwZXJDbGFzcy50ZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICAqICAgICAgICAgbGV0IHN1YkNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICogICAgICAgICBzdWJDb250ZW50LnRleHRDb250ZW50ID0gJ1RoaXMgY2FtZSBmcm9tIE15U3ViQ2xhc3MnOwogICAgICAgKiAgICAgICAgIG1lbW9pemVkVGVtcGxhdGUuY29udGVudC5hcHBlbmRDaGlsZChzdWJDb250ZW50KTsKICAgICAgICogICAgICAgfQogICAgICAgKiAgICAgICByZXR1cm4gbWVtb2l6ZWRUZW1wbGF0ZTsKICAgICAgICogICAgIH0KICAgICAgICogICB9CiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge0hUTUxUZW1wbGF0ZUVsZW1lbnR8c3RyaW5nfSBUZW1wbGF0ZSB0byBiZSBzdGFtcGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkgewogICAgICAgIC8vIEV4cGxhbmF0aW9uIG9mIHRlbXBsYXRlLXJlbGF0ZWQgcHJvcGVydGllczoKICAgICAgICAvLyAtIGNvbnN0cnVjdG9yLnRlbXBsYXRlICh0aGlzIGdldHRlcik6IHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNsYXNzLgogICAgICAgIC8vICAgICBUaGlzIGNhbiBjb21lIGZyb20gdGhlIHByb3RvdHlwZSAoZm9yIGxlZ2FjeSBlbGVtZW50cyksIGZyb20gYQogICAgICAgIC8vICAgICBkb20tbW9kdWxlLCBvciBmcm9tIHRoZSBzdXBlciBjbGFzcydzIHRlbXBsYXRlIChvciBjYW4gYmUgb3ZlcnJpZGRlbgogICAgICAgIC8vICAgICBhbHRvZ2V0aGVyIGJ5IHRoZSB1c2VyKQogICAgICAgIC8vIC0gY29uc3RydWN0b3IuX3RlbXBsYXRlOiBtZW1vaXplZCB2ZXJzaW9uIG9mIGNvbnN0cnVjdG9yLnRlbXBsYXRlCiAgICAgICAgLy8gLSBwcm90b3R5cGUuX3RlbXBsYXRlOiB3b3JraW5nIHRlbXBsYXRlIGZvciB0aGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZQogICAgICAgIC8vICAgICBwYXJzZWQgYW5kIG1vZGlmaWVkIGluIHBsYWNlLiBJdCBpcyBhIGNsb25lZCB2ZXJzaW9uIG9mCiAgICAgICAgLy8gICAgIGNvbnN0cnVjdG9yLnRlbXBsYXRlLCBzYXZlZCBpbiBfZmluYWxpemVDbGFzcygpLiBOb3RlIHRoYXQgYmVmb3JlCiAgICAgICAgLy8gICAgIHRoaXMgZ2V0dGVyIGlzIGNhbGxlZCwgZm9yIGxlZ2FjeSBlbGVtZW50cyB0aGlzIGNvdWxkIGJlIGZyb20gYQogICAgICAgIC8vICAgICBfdGVtcGxhdGUgZmllbGQgb24gdGhlIGluZm8gb2JqZWN0IHBhc3NlZCB0byBQb2x5bWVyKCksIGEgYmVoYXZpb3IsCiAgICAgICAgLy8gICAgIG9yIHNldCBpbiByZWdpc3RlcmVkKCk7IG9uY2UgdGhlIHN0YXRpYyBnZXR0ZXIgcnVucywgYSBjbG9uZSBvZiBpdAogICAgICAgIC8vICAgICB3aWxsIG92ZXJ3cml0ZSBpdCBvbiB0aGUgcHJvdG90eXBlIGFzIHRoZSB3b3JraW5nIHRlbXBsYXRlLgogICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfdGVtcGxhdGUnLCB0aGlzKSkpIHsKICAgICAgICAgIHRoaXMuX3RlbXBsYXRlID0KICAgICAgICAgICAgLy8gSWYgdXNlciBoYXMgcHV0IHRlbXBsYXRlIG9uIHByb3RvdHlwZSAoZS5nLiBpbiBsZWdhY3kgdmlhIHJlZ2lzdGVyZWQKICAgICAgICAgICAgLy8gY2FsbGJhY2sgb3IgaW5mbyBvYmplY3QpLCBwcmVmZXIgdGhhdCBmaXJzdAogICAgICAgICAgICB0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfdGVtcGxhdGUnLCB0aGlzLnByb3RvdHlwZSkpID8KICAgICAgICAgICAgdGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlIDoKICAgICAgICAgICAgLy8gTG9vayBpbiBkb20tbW9kdWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVsZW1lbnQncyBpcwogICAgICAgICAgICAoZ2V0VGVtcGxhdGVGcm9tRG9tTW9kdWxlKC8qKiBAdHlwZSB7UG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0qLyAodGhpcykuaXMpIHx8CiAgICAgICAgICAgIC8vIE5leHQgbG9vayBmb3Igc3VwZXJjbGFzcyB0ZW1wbGF0ZSAoY2FsbCB0aGUgc3VwZXIgaW1wbCB0aGlzCiAgICAgICAgICAgIC8vIHdheSBzbyB0aGF0IGB0aGlzYCBwb2ludHMgdG8gdGhlIHN1cGVyY2xhc3MpCiAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZigvKiogQHR5cGUge1BvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9Ki8gKHRoaXMpLnByb3RvdHlwZSkuY29uc3RydWN0b3IudGVtcGxhdGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fHN0cmluZ30gdmFsdWUgVGVtcGxhdGUgdG8gc2V0LgogICAgICAgKi8KICAgICAgc3RhdGljIHNldCB0ZW1wbGF0ZSh2YWx1ZSkgewogICAgICAgIHRoaXMuX3RlbXBsYXRlID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQYXRoIG1hdGNoaW5nIHRoZSB1cmwgZnJvbSB3aGljaCB0aGUgZWxlbWVudCB3YXMgaW1wb3J0ZWQuCiAgICAgICAqCiAgICAgICAqIFRoaXMgcGF0aCBpcyB1c2VkIHRvIHJlc29sdmUgdXJsJ3MgaW4gdGVtcGxhdGUgc3R5bGUgY3NzVGV4dC4KICAgICAgICogVGhlIGBpbXBvcnRQYXRoYCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiBlbGVtZW50IGluc3RhbmNlcyBhbmQgY2FuIGJlCiAgICAgICAqIHVzZWQgdG8gY3JlYXRlIGJpbmRpbmdzIHJlbGF0aXZlIHRvIHRoZSBpbXBvcnQgcGF0aC4KICAgICAgICoKICAgICAgICogRm9yIGVsZW1lbnRzIGRlZmluZWQgaW4gRVMgbW9kdWxlcywgdXNlcnMgc2hvdWxkIGltcGxlbWVudAogICAgICAgKiBgc3RhdGljIGdldCBpbXBvcnRNZXRhKCkgeyByZXR1cm4gaW1wb3J0Lm1ldGE7IH1gLCBhbmQgdGhlIGRlZmF1bHQKICAgICAgICogaW1wbGVtZW50YXRpb24gb2YgYGltcG9ydFBhdGhgIHdpbGwgIHJldHVybiBgaW1wb3J0Lm1ldGEudXJsYCdzIHBhdGguCiAgICAgICAqIEZvciBlbGVtZW50cyBkZWZpbmVkIGluIEhUTUwgaW1wb3J0cywgdGhpcyBnZXR0ZXIgd2lsbCByZXR1cm4gdGhlIHBhdGgKICAgICAgICogdG8gdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcgYSBgZG9tLW1vZHVsZWAgZWxlbWVudCBtYXRjaGluZyB0aGlzCiAgICAgICAqIGVsZW1lbnQncyBzdGF0aWMgYGlzYCBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogTm90ZSwgdGhpcyBwYXRoIHNob3VsZCBjb250YWluIGEgdHJhaWxpbmcgYC9gLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbXBvcnQgcGF0aCBmb3IgdGhpcyBlbGVtZW50IGNsYXNzCiAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9CiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0IGltcG9ydFBhdGgoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ19pbXBvcnRQYXRoJywgdGhpcykpKSB7CiAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5pbXBvcnRNZXRhOwogICAgICAgICAgaWYgKG1ldGEpIHsKICAgICAgICAgICAgdGhpcy5faW1wb3J0UGF0aCA9IFBvbHltZXIuUmVzb2x2ZVVybC5wYXRoRnJvbVVybChtZXRhLnVybCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBQb2x5bWVyLkRvbU1vZHVsZSAmJiBQb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQoLyoqIEB0eXBlIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSAqLyAodGhpcykuaXMpOwogICAgICAgICAgICB0aGlzLl9pbXBvcnRQYXRoID0gKG1vZHVsZSAmJiBtb2R1bGUuYXNzZXRwYXRoKSB8fAogICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZigvKiogQHR5cGUge1BvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9Ki8gKHRoaXMpLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX2ltcG9ydFBhdGg7CiAgICAgIH0KCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgLyoqIEB0eXBlIHtIVE1MVGVtcGxhdGVFbGVtZW50fSAqLwogICAgICAgIHRoaXMuX3RlbXBsYXRlOwogICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICAgIHRoaXMuX2ltcG9ydFBhdGg7CiAgICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovCiAgICAgICAgdGhpcy5yb290UGF0aDsKICAgICAgICAvKiogQHR5cGUge3N0cmluZ30gKi8KICAgICAgICB0aGlzLmltcG9ydFBhdGg7CiAgICAgICAgLyoqIEB0eXBlIHtTdGFtcGVkVGVtcGxhdGUgfCBIVE1MRWxlbWVudCB8IFNoYWRvd1Jvb3R9ICovCiAgICAgICAgdGhpcy5yb290OwogICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdDxzdHJpbmcsICFFbGVtZW50Pn0gKi8KICAgICAgICB0aGlzLiQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgYFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnNgIHRvIGVuc3VyZSBjbGFzcwogICAgICAgKiBtZXRhcHJvZ3JhbW1pbmcgcmVsYXRlZCB0byBwcm9wZXJ0eSBhY2Nlc3NvcnMgYW5kIGVmZmVjdHMgaGFzCiAgICAgICAqIGNvbXBsZXRlZCAoY2FsbHMgYGZpbmFsaXplYCkuCiAgICAgICAqCiAgICAgICAqIEl0IGFsc28gaW5pdGlhbGl6ZXMgYW55IHByb3BlcnR5IGRlZmF1bHRzIHByb3ZpZGVkIHZpYSBgdmFsdWVgIGluCiAgICAgICAqIGBwcm9wZXJ0aWVzYCBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfQogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm9wZXJ0aWVzKCkgewogICAgICAgIHRoaXMuY29uc3RydWN0b3IuZmluYWxpemUoKTsKICAgICAgICAvLyBub3RlOiBmaW5hbGl6ZSB0ZW1wbGF0ZSB3aGVuIHdlIGhhdmUgYWNjZXNzIHRvIGBsb2NhbE5hbWVgIHRvCiAgICAgICAgLy8gYXZvaWQgZGVwZW5kZW5jZSBvbiBgaXNgIGZvciBwb2x5ZmlsbGluZyBzdHlsaW5nLgogICAgICAgIHRoaXMuY29uc3RydWN0b3IuX2ZpbmFsaXplVGVtcGxhdGUoLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKHRoaXMpLmxvY2FsTmFtZSk7CiAgICAgICAgc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCk7CiAgICAgICAgLy8gc2V0IHBhdGggZGVmYXVsdHMKICAgICAgICB0aGlzLnJvb3RQYXRoID0gUG9seW1lci5yb290UGF0aDsKICAgICAgICB0aGlzLmltcG9ydFBhdGggPSB0aGlzLmNvbnN0cnVjdG9yLmltcG9ydFBhdGg7CiAgICAgICAgLy8gYXBwbHkgcHJvcGVydHkgZGVmYXVsdHMuLi4KICAgICAgICBsZXQgcCQgPSBwcm9wZXJ0eURlZmF1bHRzKHRoaXMuY29uc3RydWN0b3IpOwogICAgICAgIGlmICghcCQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgcCBpbiBwJCkgewogICAgICAgICAgbGV0IGluZm8gPSBwJFtwXTsKICAgICAgICAgIC8vIERvbid0IHNldCBkZWZhdWx0IHZhbHVlIGlmIHRoZXJlIGlzIGFscmVhZHkgYW4gb3duIHByb3BlcnR5LCB3aGljaAogICAgICAgICAgLy8gaGFwcGVucyB3aGVuIGEgYHByb3BlcnRpZXNgIHByb3BlcnR5IHdpdGggZGVmYXVsdCBidXQgbm8gZWZmZWN0cyBoYWQKICAgICAgICAgIC8vIGEgcHJvcGVydHkgc2V0IChlLmcuIGJvdW5kKSBieSBpdHMgaG9zdCBiZWZvcmUgdXBncmFkZQogICAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KHApKSB7CiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHR5cGVvZiBpbmZvLnZhbHVlID09ICdmdW5jdGlvbicgPwogICAgICAgICAgICAgIGluZm8udmFsdWUuY2FsbCh0aGlzKSA6CiAgICAgICAgICAgICAgaW5mby52YWx1ZTsKICAgICAgICAgICAgLy8gU2V0IHZpYSBgX3NldFByb3BlcnR5YCBpZiB0aGVyZSBpcyBhbiBhY2Nlc3NvciwgdG8gZW5hYmxlCiAgICAgICAgICAgIC8vIGluaXRpYWxpemluZyByZWFkT25seSBwcm9wZXJ0eSBkZWZhdWx0cwogICAgICAgICAgICBpZiAodGhpcy5faGFzQWNjZXNzb3IocCkpIHsKICAgICAgICAgICAgICB0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkocCwgdmFsdWUsIHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXNbcF0gPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEdhdGhlciBzdHlsZSB0ZXh0IGZvciBhIHN0eWxlIGVsZW1lbnQgaW4gdGhlIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3NzVGV4dCBUZXh0IGNvbnRhaW5pbmcgc3R5bGluZyB0byBwcm9jZXNzCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJJIEJhc2UgVVJJIHRvIHJlYmFzZSBDU1MgcGF0aHMgYWdhaW5zdAogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcm9jZXNzZWQgQ1NTIHRleHQKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIF9wcm9jZXNzU3R5bGVUZXh0KGNzc1RleHQsIGJhc2VVUkkpIHsKICAgICAgICByZXR1cm4gUG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVDc3MoY3NzVGV4dCwgYmFzZVVSSSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAqIENvbmZpZ3VyZXMgYW4gZWxlbWVudCBgcHJvdG9gIHRvIGZ1bmN0aW9uIHdpdGggYSBnaXZlbiBgdGVtcGxhdGVgLgogICAgICAqIFRoZSBlbGVtZW50IG5hbWUgYGlzYCBhbmQgZXh0ZW5kcyBgZXh0YCBtdXN0IGJlIHNwZWNpZmllZCBmb3IgU2hhZHlDU1MKICAgICAgKiBzdHlsZSBzY29waW5nLgogICAgICAqCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlzIFRhZyBuYW1lIChvciB0eXBlIGV4dGVuc2lvbiBuYW1lKSBmb3IgdGhpcyBlbGVtZW50CiAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICovCiAgICAgIHN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShpcykgewogICAgICAgIC8qKiBAY29uc3Qge0hUTUxUZW1wbGF0ZUVsZW1lbnR9ICovCiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7CiAgICAgICAgaWYgKHRlbXBsYXRlICYmICF0ZW1wbGF0ZS5fX3BvbHltZXJGaW5hbGl6ZWQpIHsKICAgICAgICAgIHRlbXBsYXRlLl9fcG9seW1lckZpbmFsaXplZCA9IHRydWU7CiAgICAgICAgICBjb25zdCBpbXBvcnRQYXRoID0gdGhpcy5pbXBvcnRQYXRoOwogICAgICAgICAgY29uc3QgYmFzZVVSSSA9IGltcG9ydFBhdGggPyBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybChpbXBvcnRQYXRoKSA6ICcnOwogICAgICAgICAgLy8gZS5nLiBzdXBwb3J0IGBpbmNsdWRlPSJtb2R1bGUtbmFtZSJgLCBhbmQgU2hhZHlDU1MKICAgICAgICAgIHByb2Nlc3NFbGVtZW50U3R5bGVzKHRoaXMsIHRlbXBsYXRlLCBpcywgYmFzZVVSSSk7CiAgICAgICAgICB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKHRlbXBsYXRlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQcm92aWRlcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN0YW5kYXJkIEN1c3RvbSBFbGVtZW50cwogICAgICAgKiBgY29ubmVjdGVkQ2FsbGJhY2tgLgogICAgICAgKgogICAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbmFibGVzIHRoZSBwcm9wZXJ0eSBlZmZlY3RzIHN5c3RlbSBhbmQKICAgICAgICogZmx1c2hlcyBhbnkgcGVuZGluZyBwcm9wZXJ0aWVzLCBhbmQgdXBkYXRlcyBzaGltbWVkIENTUyBwcm9wZXJ0aWVzCiAgICAgICAqIHdoZW4gdXNpbmcgdGhlIFNoYWR5Q1NTIHNjb3BpbmcvY3VzdG9tIHByb3BlcnRpZXMgcG9seWZpbGwuCiAgICAgICAqCiAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXMsIGludmFsaWRDYXN0c30gU3VwZXIgbWF5IG9yIG1heSBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjawogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgaWYgKHdpbmRvdy5TaGFkeUNTUyAmJiB0aGlzLl90ZW1wbGF0ZSkgewogICAgICAgICAgd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCgvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8odGhpcykpOwogICAgICAgIH0KICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU3RhbXBzIHRoZSBlbGVtZW50IHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICovCiAgICAgIHJlYWR5KCkgewogICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZSkgewogICAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fc3RhbXBUZW1wbGF0ZSh0aGlzLl90ZW1wbGF0ZSk7CiAgICAgICAgICB0aGlzLiQgPSB0aGlzLnJvb3QuJDsKICAgICAgICB9CiAgICAgICAgc3VwZXIucmVhZHkoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEltcGxlbWVudHMgYFByb3BlcnR5RWZmZWN0c2AncyBgX3JlYWR5Q2xpZW50c2AgY2FsbC4gQXR0YWNoZXMKICAgICAgICogZWxlbWVudCBkb20gYnkgY2FsbGluZyBgX2F0dGFjaERvbWAgd2l0aCB0aGUgZG9tIHN0YW1wZWQgZnJvbSB0aGUKICAgICAgICogZWxlbWVudCdzIHRlbXBsYXRlIHZpYSBgX3N0YW1wVGVtcGxhdGVgLiBOb3RlIHRoYXQgdGhpcyBhbGxvd3MKICAgICAgICogY2xpZW50IGRvbSB0byBiZSBhdHRhY2hlZCB0byB0aGUgZWxlbWVudCBwcmlvciB0byBhbnkgb2JzZXJ2ZXJzCiAgICAgICAqIHJ1bm5pbmcuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKi8KICAgICAgX3JlYWR5Q2xpZW50cygpIHsKICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGUpIHsKICAgICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX2F0dGFjaERvbSgvKiogQHR5cGUge1N0YW1wZWRUZW1wbGF0ZX0gKi8odGhpcy5yb290KSk7CiAgICAgICAgfQogICAgICAgIC8vIFRoZSBzdXBlci5fcmVhZHlDbGllbnRzIGhlcmUgc2V0cyB0aGUgY2xpZW50cyBpbml0aWFsaXplZCBmbGFnLgogICAgICAgIC8vIFdlIG11c3Qgd2FpdCB0byBkbyB0aGlzIHVudGlsIGFmdGVyIGNsaWVudCBkb20gaXMgY3JlYXRlZC9hdHRhY2hlZAogICAgICAgIC8vIHNvIHRoYXQgdGhpcyBmbGFnIGNhbiBiZSBjaGVja2VkIHRvIHByZXZlbnQgbm90aWZpY2F0aW9ucyBmaXJlZAogICAgICAgIC8vIGR1cmluZyB0aGlzIHByb2Nlc3MgZnJvbSBiZWluZyBoYW5kbGVkIGJlZm9yZSBjbGllbnRzIGFyZSByZWFkeS4KICAgICAgICBzdXBlci5fcmVhZHlDbGllbnRzKCk7CiAgICAgIH0KCgogICAgICAvKioKICAgICAgICogQXR0YWNoZXMgYW4gZWxlbWVudCdzIHN0YW1wZWQgZG9tIHRvIGl0c2VsZi4gQnkgZGVmYXVsdCwKICAgICAgICogdGhpcyBtZXRob2QgY3JlYXRlcyBhIGBzaGFkb3dSb290YCBhbmQgYWRkcyB0aGUgZG9tIHRvIGl0LgogICAgICAgKiBIb3dldmVyLCB0aGlzIG1ldGhvZCBtYXkgYmUgb3ZlcnJpZGRlbiB0byBhbGxvdyBhbiBlbGVtZW50CiAgICAgICAqIHRvIHB1dCBpdHMgZG9tIGluIGFub3RoZXIgbG9jYXRpb24uCiAgICAgICAqCiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfQogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdSZXR1cm59CiAgICAgICAqIEBwYXJhbSB7U3RhbXBlZFRlbXBsYXRlfSBkb20gdG8gYXR0YWNoIHRvIHRoZSBlbGVtZW50LgogICAgICAgKiBAcmV0dXJuIHtTaGFkb3dSb290fSBub2RlIHRvIHdoaWNoIHRoZSBkb20gaGFzIGJlZW4gYXR0YWNoZWQuCiAgICAgICAqLwogICAgICBfYXR0YWNoRG9tKGRvbSkgewogICAgICAgIGlmICh0aGlzLmF0dGFjaFNoYWRvdykgewogICAgICAgICAgaWYgKGRvbSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc2hhZG93Um9vdCkgewogICAgICAgICAgICAgIHRoaXMuYXR0YWNoU2hhZG93KHttb2RlOiAnb3Blbid9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoZG9tKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NoYWRvd0RPTSBub3QgYXZhaWxhYmxlLiAnICsKICAgICAgICAgICAgLy8gVE9ETyhzb3J2ZWxsKTogbW92ZSB0byBjb21waWxlLXRpbWUgY29uZGl0aW9uYWwgd2hlbiBzdXBwb3J0ZWQKICAgICAgICAgICdQb2x5bWVyLkVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiAnICsKICAgICAgICAgICdTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztcYCBiZWZvcmUgXGByZWFkeVxgLicpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFdoZW4gdXNpbmcgdGhlIFNoYWR5Q1NTIHNjb3BpbmcgYW5kIGN1c3RvbSBwcm9wZXJ0eSBzaGltLCBjYXVzZXMgYWxsCiAgICAgICAqIHNoaW1tZWQgc3R5bGVzIGluIHRoaXMgZWxlbWVudCAoYW5kIGl0cyBzdWJ0cmVlKSB0byBiZSB1cGRhdGVkCiAgICAgICAqIGJhc2VkIG9uIGN1cnJlbnQgY3VzdG9tIHByb3BlcnR5IHZhbHVlcy4KICAgICAgICoKICAgICAgICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBvdmVycmlkZXMgaW5saW5lIGN1c3RvbSBwcm9wZXJ0eSBzdHlsZXMgd2l0aCBhbgogICAgICAgKiBvYmplY3Qgb2YgcHJvcGVydGllcyB3aGVyZSB0aGUga2V5cyBhcmUgQ1NTIHByb3BlcnRpZXMsIGFuZCB0aGUgdmFsdWVzCiAgICAgICAqIGFyZSBzdHJpbmdzLgogICAgICAgKgogICAgICAgKiBFeGFtcGxlOiBgdGhpcy51cGRhdGVTdHlsZXMoeyctLWNvbG9yJzogJ2JsdWUnfSlgCiAgICAgICAqCiAgICAgICAqIFRoZXNlIHByb3BlcnRpZXMgYXJlIHJldGFpbmVkIHVubGVzcyBhIHZhbHVlIG9mIGBudWxsYCBpcyBzZXQuCiAgICAgICAqCiAgICAgICAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCB1cGRhdGluZyBDU1MgbWl4aW5zLgogICAgICAgKiBZb3UgY2FuIG5vdCBkeW5hbWljYWxseSBjaGFuZ2UgdGhlIHZhbHVlIG9mIGFuIGBAYXBwbHlgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdD19IHByb3BlcnRpZXMgQmFnIG9mIGN1c3RvbSBwcm9wZXJ0eSBrZXkvdmFsdWVzIHRvCiAgICAgICAqICAgYXBwbHkgdG8gdGhpcyBlbGVtZW50LgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30KICAgICAgICovCiAgICAgIHVwZGF0ZVN0eWxlcyhwcm9wZXJ0aWVzKSB7CiAgICAgICAgaWYgKHdpbmRvdy5TaGFkeUNTUykgewogICAgICAgICAgd2luZG93LlNoYWR5Q1NTLnN0eWxlU3VidHJlZSgvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8odGhpcyksIHByb3BlcnRpZXMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJld3JpdGVzIGEgZ2l2ZW4gVVJMIHJlbGF0aXZlIHRvIGEgYmFzZSBVUkwuIFRoZSBiYXNlIFVSTCBkZWZhdWx0cyB0bwogICAgICAgKiB0aGUgb3JpZ2luYWwgbG9jYXRpb24gb2YgdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcgdGhlIGBkb20tbW9kdWxlYCBmb3IKICAgICAgICogdGhpcyBlbGVtZW50LiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgc2FtZSBVUkwgYmVmb3JlIGFuZCBhZnRlcgogICAgICAgKiBidW5kbGluZy4KICAgICAgICoKICAgICAgICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbm8gcmVzb2x1dGlvbiBmb3IgVVJMcyB0aGF0IHN0YXJ0CiAgICAgICAqIHdpdGggYC9gIChhYnNvbHV0ZSBVUkxzKSBvciBgI2AgKGhhc2ggaWRlbnRpZmllcnMpLiAgRm9yIGdlbmVyYWwgcHVycG9zZQogICAgICAgKiBVUkwgcmVzb2x1dGlvbiwgdXNlIGB3aW5kb3cuVVJMYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgdG8gcmVzb2x2ZS4KICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBiYXNlIE9wdGlvbmFsIGJhc2UgVVJMIHRvIHJlc29sdmUgYWdhaW5zdCwgZGVmYXVsdHMKICAgICAgICogdG8gdGhlIGVsZW1lbnQncyBgaW1wb3J0UGF0aGAKICAgICAgICogQHJldHVybiB7c3RyaW5nfSBSZXdyaXR0ZW4gVVJMIHJlbGF0aXZlIHRvIGJhc2UKICAgICAgICovCiAgICAgIHJlc29sdmVVcmwodXJsLCBiYXNlKSB7CiAgICAgICAgaWYgKCFiYXNlICYmIHRoaXMuaW1wb3J0UGF0aCkgewogICAgICAgICAgYmFzZSA9IFBvbHltZXIuUmVzb2x2ZVVybC5yZXNvbHZlVXJsKHRoaXMuaW1wb3J0UGF0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybCh1cmwsIGJhc2UpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGBQcm9wZXJ0eUFjY2Vzc29yc2AgdG8gYWRkIG1hcCBvZiBkeW5hbWljIGZ1bmN0aW9ucyBvbgogICAgICAgKiB0ZW1wbGF0ZSBpbmZvLCBmb3IgY29uc3VtcHRpb24gYnkgYFByb3BlcnR5RWZmZWN0c2AgdGVtcGxhdGUgYmluZGluZwogICAgICAgKiBjb2RlLiBUaGlzIG1hcCBkZXRlcm1pbmVzIHdoaWNoIG1ldGhvZCB0ZW1wbGF0ZXMgc2hvdWxkIGhhdmUgYWNjZXNzb3JzCiAgICAgICAqIGNyZWF0ZWQgZm9yIHRoZW0uCiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNvbnRlbnQodGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHsKICAgICAgICB0ZW1wbGF0ZUluZm8uZHluYW1pY0ZucyA9IHRlbXBsYXRlSW5mby5keW5hbWljRm5zIHx8IHRoaXMuX3Byb3BlcnRpZXM7CiAgICAgICAgcmV0dXJuIHN1cGVyLl9wYXJzZVRlbXBsYXRlQ29udGVudCh0ZW1wbGF0ZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbyk7CiAgICAgIH0KCiAgICB9CgogICAgcmV0dXJuIFBvbHltZXJFbGVtZW50OwogIH0pOwoKICAvKioKICAgKiBXaGVuIHVzaW5nIHRoZSBTaGFkeUNTUyBzY29waW5nIGFuZCBjdXN0b20gcHJvcGVydHkgc2hpbSwgY2F1c2VzIGFsbAogICAqIHNoaW1tZWQgYHN0eWxlc2AgKHZpYSBgY3VzdG9tLXN0eWxlYCkgaW4gdGhlIGRvY3VtZW50IChhbmQgaXRzIHN1YnRyZWUpCiAgICogdG8gYmUgdXBkYXRlZCBiYXNlZCBvbiBjdXJyZW50IGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZXMuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIG92ZXJyaWRlcyBpbmxpbmUgY3VzdG9tIHByb3BlcnR5IHN0eWxlcyB3aXRoIGFuCiAgICogb2JqZWN0IG9mIHByb3BlcnRpZXMgd2hlcmUgdGhlIGtleXMgYXJlIENTUyBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZhbHVlcwogICAqIGFyZSBzdHJpbmdzLgogICAqCiAgICogRXhhbXBsZTogYFBvbHltZXIudXBkYXRlU3R5bGVzKHsnLS1jb2xvcic6ICdibHVlJ30pYAogICAqCiAgICogVGhlc2UgcHJvcGVydGllcyBhcmUgcmV0YWluZWQgdW5sZXNzIGEgdmFsdWUgb2YgYG51bGxgIGlzIHNldC4KICAgKgogICAqIEBwYXJhbSB7T2JqZWN0PX0gcHJvcHMgQmFnIG9mIGN1c3RvbSBwcm9wZXJ0eSBrZXkvdmFsdWVzIHRvCiAgICogICBhcHBseSB0byB0aGUgZG9jdW1lbnQuCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLnVwZGF0ZVN0eWxlcyA9IGZ1bmN0aW9uKHByb3BzKSB7CiAgICBpZiAod2luZG93LlNoYWR5Q1NTKSB7CiAgICAgIHdpbmRvdy5TaGFkeUNTUy5zdHlsZURvY3VtZW50KHByb3BzKTsKICAgIH0KICB9OwoKfSkoKTsKCgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKioKICAgKiBAc3VtbWFyeSBDb2xsYXBzZSBtdWx0aXBsZSBjYWxsYmFja3MgaW50byBvbmUgaW52b2NhdGlvbiBhZnRlciBhIHRpbWVyLgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgY2xhc3MgRGVib3VuY2VyIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLl9hc3luY01vZHVsZSA9IG51bGw7CiAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDsKICAgICAgdGhpcy5fdGltZXIgPSBudWxsOwogICAgfQogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBzY2hlZHVsZXI7IHRoYXQgaXMsIGEgbW9kdWxlIHdpdGggdGhlIEFzeW5jIGludGVyZmFjZSwKICAgICAqIGEgY2FsbGJhY2sgYW5kIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHJ1biBmdW5jdGlvbgogICAgICogZnJvbSB0aGUgYXN5bmMgbW9kdWxlLgogICAgICoKICAgICAqIEBwYXJhbSB7IUFzeW5jSW50ZXJmYWNlfSBhc3luY01vZHVsZSBPYmplY3Qgd2l0aCBBc3luYyBpbnRlcmZhY2UuCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNrIENhbGxiYWNrIHRvIHJ1bi4KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHNldENvbmZpZyhhc3luY01vZHVsZSwgY2FsbGJhY2spIHsKICAgICAgdGhpcy5fYXN5bmNNb2R1bGUgPSBhc3luY01vZHVsZTsKICAgICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjazsKICAgICAgdGhpcy5fdGltZXIgPSB0aGlzLl9hc3luY01vZHVsZS5ydW4oKCkgPT4gewogICAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDsKICAgICAgICB0aGlzLl9jYWxsYmFjaygpOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogQ2FuY2VscyBhbiBhY3RpdmUgZGVib3VuY2VyIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGl0c2VsZi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBjYW5jZWwoKSB7CiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpIHsKICAgICAgICB0aGlzLl9hc3luY01vZHVsZS5jYW5jZWwodGhpcy5fdGltZXIpOwogICAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBGbHVzaGVzIGFuIGFjdGl2ZSBkZWJvdW5jZXIgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gaXRzZWxmLgogICAgICoKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGZsdXNoKCkgewogICAgICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7CiAgICAgICAgdGhpcy5jYW5jZWwoKTsKICAgICAgICB0aGlzLl9jYWxsYmFjaygpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGVib3VuY2VyIGlzIGFjdGl2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFjdGl2ZS4KICAgICAqLwogICAgaXNBY3RpdmUoKSB7CiAgICAgIHJldHVybiB0aGlzLl90aW1lciAhPSBudWxsOwogICAgfQogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgZGVib3VuY2VyIGlmIG5vIGRlYm91bmNlciBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIKICAgICAqIG9yIGl0IGNhbmNlbHMgYW4gYWN0aXZlIGRlYm91bmNlciBvdGhlcndpc2UuIFRoZSBmb2xsb3dpbmcKICAgICAqIGV4YW1wbGUgc2hvd3MgaG93IGEgZGVib3VuY2VyIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgd2l0aGluIGEKICAgICAqIG1pY3JvdGFzayBhbmQgImRlYm91bmNlZCIgc3VjaCB0aGF0IHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBpcwogICAgICogY2FsbGVkIG9uY2UuIEFkZCB0aGlzIG1ldGhvZCB0byBhIGN1c3RvbSBlbGVtZW50OgogICAgICoKICAgICAqIF9kZWJvdW5jZVdvcmsoKSB7CiAgICAgKiAgIHRoaXMuX2RlYm91bmNlSm9iID0gUG9seW1lci5EZWJvdW5jZXIuZGVib3VuY2UodGhpcy5fZGVib3VuY2VKb2IsCiAgICAgKiAgICAgICBQb2x5bWVyLkFzeW5jLm1pY3JvVGFzaywgKCkgPT4gewogICAgICogICAgIHRoaXMuX2RvV29yaygpOwogICAgICogICB9KTsKICAgICAqIH0KICAgICAqCiAgICAgKiBJZiB0aGUgYF9kZWJvdW5jZVdvcmtgIG1ldGhvZCBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgd2l0aGluIHRoZSBzYW1lCiAgICAgKiBtaWNyb3Rhc2ssIHRoZSBgX2RvV29ya2AgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlIGF0IHRoZSBuZXh0CiAgICAgKiBtaWNyb3Rhc2sgY2hlY2twb2ludC4KICAgICAqCiAgICAgKiBOb3RlOiBJbiB0ZXN0aW5nIGl0IGlzIG9mdGVuIGNvbnZlbmllbnQgdG8gYXZvaWQgYXN5bmNocm9ueS4gVG8gYWNjb21wbGlzaAogICAgICogdGhpcyB3aXRoIGEgZGVib3VuY2VyLCB5b3UgY2FuIHVzZSBgUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyYCBhbmQKICAgICAqIGBQb2x5bWVyLmZsdXNoYC4gRm9yIGV4YW1wbGUsIGV4dGVuZCB0aGUgYWJvdmUgZXhhbXBsZSBieSBhZGRpbmcKICAgICAqIGBQb2x5bWVyLmVucXVldWVEZWJvdW5jZXIodGhpcy5fZGVib3VuY2VKb2IpYCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICogYF9kZWJvdW5jZVdvcmtgIG1ldGhvZC4gVGhlbiBpbiBhIHRlc3QsIGNhbGwgYFBvbHltZXIuZmx1c2hgIHRvIGVuc3VyZQogICAgICogdGhlIGRlYm91bmNlciBoYXMgY29tcGxldGVkLgogICAgICoKICAgICAqIEBwYXJhbSB7RGVib3VuY2VyP30gZGVib3VuY2VyIERlYm91bmNlciBvYmplY3QuCiAgICAgKiBAcGFyYW0geyFBc3luY0ludGVyZmFjZX0gYXN5bmNNb2R1bGUgT2JqZWN0IHdpdGggQXN5bmMgaW50ZXJmYWNlCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNrIENhbGxiYWNrIHRvIHJ1bi4KICAgICAqIEByZXR1cm4geyFEZWJvdW5jZXJ9IFJldHVybnMgYSBkZWJvdW5jZXIgb2JqZWN0LgogICAgICovCiAgICBzdGF0aWMgZGVib3VuY2UoZGVib3VuY2VyLCBhc3luY01vZHVsZSwgY2FsbGJhY2spIHsKICAgICAgaWYgKGRlYm91bmNlciBpbnN0YW5jZW9mIERlYm91bmNlcikgewogICAgICAgIGRlYm91bmNlci5jYW5jZWwoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWJvdW5jZXIgPSBuZXcgRGVib3VuY2VyKCk7CiAgICAgIH0KICAgICAgZGVib3VuY2VyLnNldENvbmZpZyhhc3luY01vZHVsZSwgY2FsbGJhY2spOwogICAgICByZXR1cm4gZGVib3VuY2VyOwogICAgfQogIH0KCiAgLyoqIEBjb25zdCAqLwogIFBvbHltZXIuRGVib3VuY2VyID0gRGVib3VuY2VyOwp9KSgpOwoKCihmdW5jdGlvbigpIHsKCiAgJ3VzZSBzdHJpY3QnOwoKICAvLyBkZXRlY3QgbmF0aXZlIHRvdWNoIGFjdGlvbiBzdXBwb3J0CiAgbGV0IEhBU19OQVRJVkVfVEEgPSB0eXBlb2YgZG9jdW1lbnQuaGVhZC5zdHlsZS50b3VjaEFjdGlvbiA9PT0gJ3N0cmluZyc7CiAgbGV0IEdFU1RVUkVfS0VZID0gJ19fcG9seW1lckdlc3R1cmVzJzsKICBsZXQgSEFORExFRF9PQkogPSAnX19wb2x5bWVyR2VzdHVyZXNIYW5kbGVkJzsKICBsZXQgVE9VQ0hfQUNUSU9OID0gJ19fcG9seW1lckdlc3R1cmVzVG91Y2hBY3Rpb24nOwogIC8vIHJhZGl1cyBmb3IgdGFwIGFuZCB0cmFjawogIGxldCBUQVBfRElTVEFOQ0UgPSAyNTsKICBsZXQgVFJBQ0tfRElTVEFOQ0UgPSA1OwogIC8vIG51bWJlciBvZiBsYXN0IE4gdHJhY2sgcG9zaXRpb25zIHRvIGtlZXAKICBsZXQgVFJBQ0tfTEVOR1RIID0gMjsKCiAgLy8gRGlzYWJsaW5nICJtb3VzZSIgaGFuZGxlcnMgZm9yIDI1MDBtcyBpcyBlbm91Z2gKICBsZXQgTU9VU0VfVElNRU9VVCA9IDI1MDA7CiAgbGV0IE1PVVNFX0VWRU5UUyA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJywgJ2NsaWNrJ107CiAgLy8gYW4gYXJyYXkgb2YgYml0bWFzayB2YWx1ZXMgZm9yIG1hcHBpbmcgTW91c2VFdmVudC53aGljaCB0byBNb3VzZUV2ZW50LmJ1dHRvbnMKICBsZXQgTU9VU0VfV0hJQ0hfVE9fQlVUVE9OUyA9IFswLCAxLCA0LCAyXTsKICBsZXQgTU9VU0VfSEFTX0JVVFRPTlMgPSAoZnVuY3Rpb24oKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gbmV3IE1vdXNlRXZlbnQoJ3Rlc3QnLCB7YnV0dG9uczogMX0pLmJ1dHRvbnMgPT09IDE7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9KSgpOwoKICAvKioKICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBQb3NzaWJsZSBtb3VzZSBldmVudCBuYW1lCiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBtb3VzZSBldmVudCwgZmFsc2UgaWYgbm90CiAgICovCiAgZnVuY3Rpb24gaXNNb3VzZUV2ZW50KG5hbWUpIHsKICAgIHJldHVybiBNT1VTRV9FVkVOVFMuaW5kZXhPZihuYW1lKSA+IC0xOwogIH0KCiAgLyogZXNsaW50IG5vLWVtcHR5OiBbImVycm9yIiwgeyAiYWxsb3dFbXB0eUNhdGNoIjogdHJ1ZSB9XSAqLwogIC8vIGNoZWNrIGZvciBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycwogIGxldCBTVVBQT1JUU19QQVNTSVZFID0gZmFsc2U7CiAgKGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgbGV0IG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge2dldCgpIHtTVVBQT1JUU19QQVNTSVZFID0gdHJ1ZTt9fSk7CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0cyk7CiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0cyk7CiAgICB9IGNhdGNoKGUpIHt9CiAgfSkoKTsKCiAgLyoqCiAgICogR2VuZXJhdGUgc2V0dGluZ3MgZm9yIGV2ZW50IGxpc3RlbmVycywgZGVwZW5kYW50IG9uIGBQb2x5bWVyLnBhc3NpdmVUb3VjaEdlc3R1cmVzYAogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBFdmVudCBuYW1lIHRvIGRldGVybWluZSBpZiBge3Bhc3NpdmV9YCBvcHRpb24gaXMgbmVlZGVkCiAgICogQHJldHVybiB7e3Bhc3NpdmU6IGJvb2xlYW59IHwgdW5kZWZpbmVkfSBPcHRpb25zIHRvIHVzZSBmb3IgYWRkRXZlbnRMaXN0ZW5lciBhbmQgcmVtb3ZlRXZlbnRMaXN0ZW5lcgogICAqLwogIGZ1bmN0aW9uIFBBU1NJVkVfVE9VQ0goZXZlbnROYW1lKSB7CiAgICBpZiAoaXNNb3VzZUV2ZW50KGV2ZW50TmFtZSkgfHwgZXZlbnROYW1lID09PSAndG91Y2hlbmQnKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChIQVNfTkFUSVZFX1RBICYmIFNVUFBPUlRTX1BBU1NJVkUgJiYgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcykgewogICAgICByZXR1cm4ge3Bhc3NpdmU6IHRydWV9OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQogIH0KCiAgLy8gQ2hlY2sgZm9yIHRvdWNoLW9ubHkgZGV2aWNlcwogIGxldCBJU19UT1VDSF9PTkxZID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKXxBbmRyb2lkLyk7CgogIGxldCBHZXN0dXJlUmVjb2duaXplciA9IGZ1bmN0aW9uKCl7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwogIC8qKiBAdHlwZSB7ZnVuY3Rpb24oKTogdm9pZH0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUucmVzZXQ7CiAgLyoqIEB0eXBlIHtmdW5jdGlvbihNb3VzZUV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZH0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2Vkb3duOwogIC8qKiBAdHlwZSB7KGZ1bmN0aW9uKE1vdXNlRXZlbnQpOiB2b2lkIHwgdW5kZWZpbmVkKX0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2Vtb3ZlOwogIC8qKiBAdHlwZSB7KGZ1bmN0aW9uKE1vdXNlRXZlbnQpOiB2b2lkIHwgdW5kZWZpbmVkKX0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2V1cDsKICAvKiogQHR5cGUgeyhmdW5jdGlvbihUb3VjaEV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZCl9ICovCiAgR2VzdHVyZVJlY29nbml6ZXIucHJvdG90eXBlLnRvdWNoc3RhcnQ7CiAgLyoqIEB0eXBlIHsoZnVuY3Rpb24oVG91Y2hFdmVudCk6IHZvaWQgfCB1bmRlZmluZWQpfSAqLwogIEdlc3R1cmVSZWNvZ25pemVyLnByb3RvdHlwZS50b3VjaG1vdmU7CiAgLyoqIEB0eXBlIHsoZnVuY3Rpb24oVG91Y2hFdmVudCk6IHZvaWQgfCB1bmRlZmluZWQpfSAqLwogIEdlc3R1cmVSZWNvZ25pemVyLnByb3RvdHlwZS50b3VjaGVuZDsKICAvKiogQHR5cGUgeyhmdW5jdGlvbihNb3VzZUV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZCl9ICovCiAgR2VzdHVyZVJlY29nbml6ZXIucHJvdG90eXBlLmNsaWNrOwoKICAvLyBrZWVwIHRyYWNrIG9mIGFueSBsYWJlbHMgaGl0IGJ5IHRoZSBtb3VzZUNhbmNlbGxlcgogIC8qKiBAdHlwZSB7IUFycmF5PCFIVE1MTGFiZWxFbGVtZW50Pn0gKi8KICBjb25zdCBjbGlja2VkTGFiZWxzID0gW107CgogIC8qKiBAdHlwZSB7IU9iamVjdDxib29sZWFuPn0gKi8KICBjb25zdCBsYWJlbGxhYmxlID0gewogICAgJ2J1dHRvbic6IHRydWUsCiAgICAnaW5wdXQnOiB0cnVlLAogICAgJ2tleWdlbic6IHRydWUsCiAgICAnbWV0ZXInOiB0cnVlLAogICAgJ291dHB1dCc6IHRydWUsCiAgICAndGV4dGFyZWEnOiB0cnVlLAogICAgJ3Byb2dyZXNzJzogdHJ1ZSwKICAgICdzZWxlY3QnOiB0cnVlCiAgfTsKCiAgLy8gRGVmaW5lZCBhdCBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNlbmFibGluZy1hbmQtZGlzYWJsaW5nLWZvcm0tY29udHJvbHM6LXRoZS1kaXNhYmxlZC1hdHRyaWJ1dGUKICAvKiogQHR5cGUgeyFPYmplY3Q8Ym9vbGVhbj59ICovCiAgY29uc3QgY2FuQmVEaXNhYmxlZCA9IHsKICAgICdidXR0b24nOiB0cnVlLAogICAgJ2NvbW1hbmQnOiB0cnVlLAogICAgJ2ZpZWxkc2V0JzogdHJ1ZSwKICAgICdpbnB1dCc6IHRydWUsCiAgICAna2V5Z2VuJzogdHJ1ZSwKICAgICdvcHRncm91cCc6IHRydWUsCiAgICAnb3B0aW9uJzogdHJ1ZSwKICAgICdzZWxlY3QnOiB0cnVlLAogICAgJ3RleHRhcmVhJzogdHJ1ZQogIH07CgogIC8qKgogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIEVsZW1lbnQgdG8gY2hlY2sgbGFiZWxsaW5nIHN0YXR1cwogICAqIEByZXR1cm4ge2Jvb2xlYW59IGVsZW1lbnQgY2FuIGhhdmUgbGFiZWxzCiAgICovCiAgZnVuY3Rpb24gY2FuQmVMYWJlbGxlZChlbCkgewogICAgcmV0dXJuIGxhYmVsbGFibGVbZWwubG9jYWxOYW1lXSB8fCBmYWxzZTsKICB9CgogIC8qKgogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIEVsZW1lbnQgdGhhdCBtYXkgYmUgbGFiZWxsZWQuCiAgICogQHJldHVybiB7IUFycmF5PCFIVE1MTGFiZWxFbGVtZW50Pn0gUmVsZXZhbnQgbGFiZWwgZm9yIGBlbGAKICAgKi8KICBmdW5jdGlvbiBtYXRjaGluZ0xhYmVscyhlbCkgewogICAgbGV0IGxhYmVscyA9IEFycmF5LmZyb20oLyoqIEB0eXBlIHtIVE1MSW5wdXRFbGVtZW50fSAqLyhlbCkubGFiZWxzIHx8IFtdKTsKICAgIC8vIElFIGRvZXNuJ3QgaGF2ZSBgbGFiZWxzYCBhbmQgU2FmYXJpIGRvZXNuJ3QgcG9wdWxhdGUgYGxhYmVsc2AKICAgIC8vIGlmIGVsZW1lbnQgaXMgaW4gYSBzaGFkb3dyb290LgogICAgLy8gSW4gdGhpcyBpbnN0YW5jZSwgZmluZGluZyB0aGUgbm9uLWFuY2VzdG9yIGxhYmVscyBpcyBlbm91Z2gsCiAgICAvLyBhcyB0aGUgbW91c2VDYW5jZWxsb3IgY29kZSB3aWxsIGhhbmRsZSBhbmNzdG9yIGxhYmVscwogICAgaWYgKCFsYWJlbHMubGVuZ3RoKSB7CiAgICAgIGxhYmVscyA9IFtdOwogICAgICBsZXQgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCk7CiAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIGlkIG9uIGBlbGAsIGNoZWNrIGZvciBhbGwgbGFiZWxzIHdpdGggYSBtYXRjaGluZyBgZm9yYCBhdHRyaWJ1dGUKICAgICAgaWYgKGVsLmlkKSB7CiAgICAgICAgbGV0IG1hdGNoaW5nID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2VsLmlkfV1gKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsYWJlbHMucHVzaCgvKiogQHR5cGUgeyFIVE1MTGFiZWxFbGVtZW50fSAqLyhtYXRjaGluZ1tpXSkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGxhYmVsczsKICB9CgogIC8vIHRvdWNoIHdpbGwgbWFrZSBzeW50aGV0aWMgbW91c2UgZXZlbnRzCiAgLy8gYHByZXZlbnREZWZhdWx0YCBvbiB0b3VjaGVuZCB3aWxsIGNhbmNlbCB0aGVtLAogIC8vIGJ1dCB0aGlzIGJyZWFrcyBgPGlucHV0PmAgZm9jdXMgYW5kIGxpbmsgY2xpY2tzCiAgLy8gZGlzYWJsZSBtb3VzZSBoYW5kbGVycyBmb3IgTU9VU0VfVElNRU9VVCBtcyBhZnRlcgogIC8vIGEgdG91Y2hlbmQgdG8gaWdub3JlIHN5bnRoZXRpYyBtb3VzZSBldmVudHMKICBsZXQgbW91c2VDYW5jZWxsZXIgPSBmdW5jdGlvbihtb3VzZUV2ZW50KSB7CiAgICAvLyBDaGVjayBmb3Igc291cmNlQ2FwYWJpbGl0aWVzLCB1c2VkIHRvIGRpc3Rpbmd1aXNoIHN5bnRoZXRpYyBldmVudHMKICAgIC8vIGlmIG1vdXNlRXZlbnQgZGlkIG5vdCBjb21lIGZyb20gYSBkZXZpY2UgdGhhdCBmaXJlcyB0b3VjaCBldmVudHMsCiAgICAvLyBpdCB3YXMgbWFkZSBieSBhIHJlYWwgbW91c2UgYW5kIHNob3VsZCBiZSBjb3VudGVkCiAgICAvLyBodHRwOi8vd2ljZy5naXRodWIuaW8vSW5wdXREZXZpY2VDYXBhYmlsaXRpZXMvI2RvbS1pbnB1dGRldmljZWNhcGFiaWxpdGllcy1maXJlc3RvdWNoZXZlbnRzCiAgICBsZXQgc2MgPSBtb3VzZUV2ZW50LnNvdXJjZUNhcGFiaWxpdGllczsKICAgIGlmIChzYyAmJiAhc2MuZmlyZXNUb3VjaEV2ZW50cykgewogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBza2lwIHN5bnRoZXRpYyBtb3VzZSBldmVudHMKICAgIG1vdXNlRXZlbnRbSEFORExFRF9PQkpdID0ge3NraXA6IHRydWV9OwogICAgLy8gZGlzYWJsZSAiZ2hvc3QgY2xpY2tzIgogICAgaWYgKG1vdXNlRXZlbnQudHlwZSA9PT0gJ2NsaWNrJykgewogICAgICBsZXQgY2xpY2tGcm9tTGFiZWwgPSBmYWxzZTsKICAgICAgbGV0IHBhdGggPSBtb3VzZUV2ZW50LmNvbXBvc2VkUGF0aCAmJiBtb3VzZUV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgICBpZiAocGF0aCkgewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKHBhdGhbaV0ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CiAgICAgICAgICAgIGlmIChwYXRoW2ldLmxvY2FsTmFtZSA9PT0gJ2xhYmVsJykgewogICAgICAgICAgICAgIGNsaWNrZWRMYWJlbHMucHVzaChwYXRoW2ldKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5CZUxhYmVsbGVkKHBhdGhbaV0pKSB7CiAgICAgICAgICAgICAgbGV0IG93bmVyTGFiZWxzID0gbWF0Y2hpbmdMYWJlbHMocGF0aFtpXSk7CiAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgb25lIG9mIHRoZSBjbGlja2VkIGxhYmVscyBpcyBsYWJlbGxpbmcgdGhpcyBlbGVtZW50CiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvd25lckxhYmVscy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgY2xpY2tGcm9tTGFiZWwgPSBjbGlja0Zyb21MYWJlbCB8fCBjbGlja2VkTGFiZWxzLmluZGV4T2Yob3duZXJMYWJlbHNbal0pID4gLTE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocGF0aFtpXSA9PT0gUE9JTlRFUlNUQVRFLm1vdXNlLnRhcmdldCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIGlmIG9uZSBvZiB0aGUgY2xpY2tlZCBsYWJlbHMgd2FzIGxhYmVsbGluZyB0aGUgdGFyZ2V0IGVsZW1lbnQsCiAgICAgIC8vIHRoaXMgaXMgbm90IGEgZ2hvc3QgY2xpY2sKICAgICAgaWYgKGNsaWNrRnJvbUxhYmVsKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIH0KICB9OwoKICAvKioKICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzZXR1cCBUcnVlIHRvIGFkZCwgZmFsc2UgdG8gcmVtb3ZlLgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgZnVuY3Rpb24gc2V0dXBUZWFyZG93bk1vdXNlQ2FuY2VsbGVyKHNldHVwKSB7CiAgICBsZXQgZXZlbnRzID0gSVNfVE9VQ0hfT05MWSA/IFsnY2xpY2snXSA6IE1PVVNFX0VWRU5UUzsKICAgIGZvciAobGV0IGkgPSAwLCBlbjsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykgewogICAgICBlbiA9IGV2ZW50c1tpXTsKICAgICAgaWYgKHNldHVwKSB7CiAgICAgICAgLy8gcmVzZXQgY2xpY2tMYWJlbHMgYXJyYXkKICAgICAgICBjbGlja2VkTGFiZWxzLmxlbmd0aCA9IDA7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlbiwgbW91c2VDYW5jZWxsZXIsIHRydWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZW4sIG1vdXNlQ2FuY2VsbGVyLCB0cnVlKTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gaWdub3JlTW91c2UoZSkgewogICAgaWYgKCFQT0lOVEVSU1RBVEUubW91c2UubW91c2VJZ25vcmVKb2IpIHsKICAgICAgc2V0dXBUZWFyZG93bk1vdXNlQ2FuY2VsbGVyKHRydWUpOwogICAgfQogICAgbGV0IHVuc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHNldHVwVGVhcmRvd25Nb3VzZUNhbmNlbGxlcigpOwogICAgICBQT0lOVEVSU1RBVEUubW91c2UudGFyZ2V0ID0gbnVsbDsKICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iID0gbnVsbDsKICAgIH07CiAgICBQT0lOVEVSU1RBVEUubW91c2UudGFyZ2V0ID0gZS5jb21wb3NlZFBhdGgoKVswXTsKICAgIFBPSU5URVJTVEFURS5tb3VzZS5tb3VzZUlnbm9yZUpvYiA9IFBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKAogICAgICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iCiAgICAgICAgLCBQb2x5bWVyLkFzeW5jLnRpbWVPdXQuYWZ0ZXIoTU9VU0VfVElNRU9VVCkKICAgICAgICAsIHVuc2V0KTsKICB9CgogIC8qKgogICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXYgZXZlbnQgdG8gdGVzdCBmb3IgbGVmdCBtb3VzZSBidXR0b24gZG93bgogICAqIEByZXR1cm4ge2Jvb2xlYW59IGhhcyBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duCiAgICovCiAgZnVuY3Rpb24gaGFzTGVmdE1vdXNlQnV0dG9uKGV2KSB7CiAgICBsZXQgdHlwZSA9IGV2LnR5cGU7CiAgICAvLyBleGl0IGVhcmx5IGlmIHRoZSBldmVudCBpcyBub3QgYSBtb3VzZSBldmVudAogICAgaWYgKCFpc01vdXNlRXZlbnQodHlwZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgLy8gZXYuYnV0dG9uIGlzIG5vdCByZWxpYWJsZSBmb3IgbW91c2Vtb3ZlICgwIGlzIG92ZXJsb2FkZWQgYXMgYm90aCBsZWZ0IGJ1dHRvbiBhbmQgbm8gYnV0dG9ucykKICAgIC8vIGluc3RlYWQgd2UgdXNlIGV2LmJ1dHRvbnMgKGJpdG1hc2sgb2YgYnV0dG9ucykgb3IgZmFsbCBiYWNrIHRvIGV2LndoaWNoIChkZXByZWNhdGVkLCAwIGZvciBubyBidXR0b25zLCAxIGZvciBsZWZ0IGJ1dHRvbikKICAgIGlmICh0eXBlID09PSAnbW91c2Vtb3ZlJykgewogICAgICAvLyBhbGxvdyB1bmRlZmluZWQgZm9yIHRlc3RpbmcgZXZlbnRzCiAgICAgIGxldCBidXR0b25zID0gZXYuYnV0dG9ucyA9PT0gdW5kZWZpbmVkID8gMSA6IGV2LmJ1dHRvbnM7CiAgICAgIGlmICgoZXYgaW5zdGFuY2VvZiB3aW5kb3cuTW91c2VFdmVudCkgJiYgIU1PVVNFX0hBU19CVVRUT05TKSB7CiAgICAgICAgYnV0dG9ucyA9IE1PVVNFX1dISUNIX1RPX0JVVFRPTlNbZXYud2hpY2hdIHx8IDA7CiAgICAgIH0KICAgICAgLy8gYnV0dG9ucyBpcyBhIGJpdG1hc2ssIGNoZWNrIHRoYXQgdGhlIGxlZnQgYnV0dG9uIGJpdCBpcyBzZXQgKDEpCiAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbnMgJiAxKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGFsbG93IHVuZGVmaW5lZCBmb3IgdGVzdGluZyBldmVudHMKICAgICAgbGV0IGJ1dHRvbiA9IGV2LmJ1dHRvbiA9PT0gdW5kZWZpbmVkID8gMCA6IGV2LmJ1dHRvbjsKICAgICAgLy8gZXYuYnV0dG9uIGlzIDAgaW4gbW91c2Vkb3duL21vdXNldXAvY2xpY2sgZm9yIGxlZnQgYnV0dG9uIGFjdGl2YXRpb24KICAgICAgcmV0dXJuIGJ1dHRvbiA9PT0gMDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGlzU3ludGhldGljQ2xpY2soZXYpIHsKICAgIGlmIChldi50eXBlID09PSAnY2xpY2snKSB7CiAgICAgIC8vIGV2LmRldGFpbCBpcyAwIGZvciBIVE1MRWxlbWVudC5jbGljayBpbiBtb3N0IGJyb3dzZXJzCiAgICAgIGlmIChldi5kZXRhaWwgPT09IDApIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvLyBpbiB0aGUgd29yc3QgY2FzZSwgY2hlY2sgdGhhdCB0aGUgeC95IHBvc2l0aW9uIG9mIHRoZSBjbGljayBpcyB3aXRoaW4KICAgICAgLy8gdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudAogICAgICAvLyBUaGFua3MgSUUgMTAgPjooCiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChldik7CiAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudCBpcyBhbiBlbGVtZW50IHNvIHdlIGNhbiB1c2UgZ2V0Qm91bmRpbmdDbGllbnRSZWN0LAogICAgICAvLyBpZiBub3QsIGp1c3QgYXNzdW1lIGl0IGlzIGEgc3ludGhldGljIGNsaWNrCiAgICAgIGlmICghdC5ub2RlVHlwZSB8fCAvKiogQHR5cGUge0VsZW1lbnR9ICovKHQpLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxldCBiY3IgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAvLyB1c2UgcGFnZSB4L3kgdG8gYWNjb3VudCBmb3Igc2Nyb2xsaW5nCiAgICAgIGxldCB4ID0gZXYucGFnZVgsIHkgPSBldi5wYWdlWTsKICAgICAgLy8gZXYgaXMgYSBzeW50aGV0aWMgY2xpY2sgaWYgdGhlIHBvc2l0aW9uIGlzIG91dHNpZGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgdGFyZ2V0CiAgICAgIHJldHVybiAhKCh4ID49IGJjci5sZWZ0ICYmIHggPD0gYmNyLnJpZ2h0KSAmJiAoeSA+PSBiY3IudG9wICYmIHkgPD0gYmNyLmJvdHRvbSkpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgbGV0IFBPSU5URVJTVEFURSA9IHsKICAgIG1vdXNlOiB7CiAgICAgIHRhcmdldDogbnVsbCwKICAgICAgbW91c2VJZ25vcmVKb2I6IG51bGwKICAgIH0sCiAgICB0b3VjaDogewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICBpZDogLTEsCiAgICAgIHNjcm9sbERlY2lkZWQ6IGZhbHNlCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gZmlyc3RUb3VjaEFjdGlvbihldikgewogICAgbGV0IHRhID0gJ2F1dG8nOwogICAgbGV0IHBhdGggPSBldi5jb21wb3NlZFBhdGggJiYgZXYuY29tcG9zZWRQYXRoKCk7CiAgICBpZiAocGF0aCkgewogICAgICBmb3IgKGxldCBpID0gMCwgbjsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHsKICAgICAgICBuID0gcGF0aFtpXTsKICAgICAgICBpZiAobltUT1VDSF9BQ1RJT05dKSB7CiAgICAgICAgICB0YSA9IG5bVE9VQ0hfQUNUSU9OXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhOwogIH0KCiAgZnVuY3Rpb24gdHJhY2tEb2N1bWVudChzdGF0ZU9iaiwgbW92ZWZuLCB1cGZuKSB7CiAgICBzdGF0ZU9iai5tb3ZlZm4gPSBtb3ZlZm47CiAgICBzdGF0ZU9iai51cGZuID0gdXBmbjsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmVmbik7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdXBmbik7CiAgfQoKICBmdW5jdGlvbiB1bnRyYWNrRG9jdW1lbnQoc3RhdGVPYmopIHsKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN0YXRlT2JqLm1vdmVmbik7CiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3RhdGVPYmoudXBmbik7CiAgICBzdGF0ZU9iai5tb3ZlZm4gPSBudWxsOwogICAgc3RhdGVPYmoudXBmbiA9IG51bGw7CiAgfQoKICAvLyB1c2UgYSBkb2N1bWVudC13aWRlIHRvdWNoZW5kIGxpc3RlbmVyIHRvIHN0YXJ0IHRoZSBnaG9zdC1jbGljayBwcmV2ZW50aW9uIG1lY2hhbmlzbQogIC8vIFVzZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycywgaWYgc3VwcG9ydGVkLCB0byBub3QgYWZmZWN0IHNjcm9sbGluZyBwZXJmb3JtYW5jZQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaWdub3JlTW91c2UsIFNVUFBPUlRTX1BBU1NJVkUgPyB7cGFzc2l2ZTogdHJ1ZX0gOiBmYWxzZSk7CgogIC8qKgogICAqIE1vZHVsZSBmb3IgYWRkaW5nIGxpc3RlbmVycyB0byBhIG5vZGUgZm9yIHRoZSBmb2xsb3dpbmcgbm9ybWFsaXplZAogICAqIGNyb3NzLXBsYXRmb3JtICJnZXN0dXJlIiBldmVudHM6CiAgICogLSBgZG93bmAgLSBtb3VzZSBvciB0b3VjaCB3ZW50IGRvd24KICAgKiAtIGB1cGAgLSBtb3VzZSBvciB0b3VjaCB3ZW50IHVwCiAgICogLSBgdGFwYCAtIG1vdXNlIGNsaWNrIG9yIGZpbmdlciB0YXAKICAgKiAtIGB0cmFja2AgLSBtb3VzZSBkcmFnIG9yIHRvdWNoIG1vdmUKICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1vZHVsZSBmb3IgYWRkaW5nIGNyb3NzLXBsYXRmb3JtIGdlc3R1cmUgZXZlbnQgbGlzdGVuZXJzLgogICAqLwogIGNvbnN0IEdlc3R1cmVzID0gewogICAgZ2VzdHVyZXM6IHt9LAogICAgcmVjb2duaXplcnM6IFtdLAoKICAgIC8qKgogICAgICogRmluZHMgdGhlIGVsZW1lbnQgcmVuZGVyZWQgb24gdGhlIHNjcmVlbiBhdCB0aGUgcHJvdmlkZWQgY29vcmRpbmF0ZXMuCiAgICAgKgogICAgICogU2ltaWxhciB0byBgZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludGAsIGJ1dCBwaWVyY2VzIHRocm91Z2gKICAgICAqIHNoYWRvdyByb290cy4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5HZXN0dXJlcwogICAgICogQHBhcmFtIHtudW1iZXJ9IHggSG9yaXpvbnRhbCBwaXhlbCBjb29yZGluYXRlCiAgICAgKiBAcGFyYW0ge251bWJlcn0geSBWZXJ0aWNhbCBwaXhlbCBjb29yZGluYXRlCiAgICAgKiBAcmV0dXJuIHtFbGVtZW50fSBSZXR1cm5zIHRoZSBkZWVwZXN0IHNoYWRvd1Jvb3QgaW5jbHVzaXZlIGVsZW1lbnQKICAgICAqIGZvdW5kIGF0IHRoZSBzY3JlZW4gcG9zaXRpb24gZ2l2ZW4uCiAgICAgKi8KICAgIGRlZXBUYXJnZXRGaW5kOiBmdW5jdGlvbih4LCB5KSB7CiAgICAgIGxldCBub2RlID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTsKICAgICAgbGV0IG5leHQgPSBub2RlOwogICAgICAvLyB0aGlzIGNvZGUgcGF0aCBpcyBvbmx5IHRha2VuIHdoZW4gbmF0aXZlIFNoYWRvd0RPTSBpcyB1c2VkCiAgICAgIC8vIGlmIHRoZXJlIGlzIGEgc2hhZG93cm9vdCwgaXQgbWF5IGhhdmUgYSBub2RlIGF0IHgveQogICAgICAvLyBpZiB0aGVyZSBpcyBub3QgYSBzaGFkb3dyb290LCBleGl0IHRoZSBsb29wCiAgICAgIHdoaWxlIChuZXh0ICYmIG5leHQuc2hhZG93Um9vdCAmJiAhd2luZG93LlNoYWR5RE9NKSB7CiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBub2RlIGF0IHgveSBpbiB0aGUgc2hhZG93cm9vdCwgbG9vayBkZWVwZXIKICAgICAgICBsZXQgb2xkTmV4dCA9IG5leHQ7CiAgICAgICAgbmV4dCA9IG5leHQuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHgsIHkpOwogICAgICAgIC8vIG9uIFNhZmFyaSwgZWxlbWVudEZyb21Qb2ludCBtYXkgcmV0dXJuIHRoZSBzaGFkb3dSb290IGhvc3QKICAgICAgICBpZiAob2xkTmV4dCA9PT0gbmV4dCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChuZXh0KSB7CiAgICAgICAgICBub2RlID0gbmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9LAogICAgLyoqCiAgICAgKiBhIGNoZWFwZXIgY2hlY2sgdGhhbiBldi5jb21wb3NlZFBhdGgoKVswXTsKICAgICAqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHtFdmVudH0gZXYgRXZlbnQuCiAgICAgKiBAcmV0dXJuIHtFdmVudFRhcmdldH0gUmV0dXJucyB0aGUgZXZlbnQgdGFyZ2V0LgogICAgICovCiAgICBfZmluZE9yaWdpbmFsVGFyZ2V0OiBmdW5jdGlvbihldikgewogICAgICAvLyBzaGFkb3dkb20KICAgICAgaWYgKGV2LmNvbXBvc2VkUGF0aCkgewogICAgICAgIGNvbnN0IHRhcmdldHMgPSAvKiogQHR5cGUgeyFBcnJheTwhRXZlbnRUYXJnZXQ+fSAqLyhldi5jb21wb3NlZFBhdGgoKSk7CiAgICAgICAgLy8gSXQgc2hvdWxkbid0IGJlLCBidXQgc29tZXRpbWVzIHRhcmdldHMgaXMgZW1wdHkgKHdpbmRvdyBvbiBTYWZhcmkpLgogICAgICAgIHJldHVybiB0YXJnZXRzLmxlbmd0aCA+IDAgPyB0YXJnZXRzWzBdIDogZXYudGFyZ2V0OwogICAgICB9CiAgICAgIC8vIHNoYWR5ZG9tCiAgICAgIHJldHVybiBldi50YXJnZXQ7CiAgICB9LAoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2IEV2ZW50LgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgX2hhbmRsZU5hdGl2ZTogZnVuY3Rpb24oZXYpIHsKICAgICAgbGV0IGhhbmRsZWQ7CiAgICAgIGxldCB0eXBlID0gZXYudHlwZTsKICAgICAgbGV0IG5vZGUgPSBldi5jdXJyZW50VGFyZ2V0OwogICAgICBsZXQgZ29iaiA9IG5vZGVbR0VTVFVSRV9LRVldOwogICAgICBpZiAoIWdvYmopIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IGdzID0gZ29ialt0eXBlXTsKICAgICAgaWYgKCFncykgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoIWV2W0hBTkRMRURfT0JKXSkgewogICAgICAgIGV2W0hBTkRMRURfT0JKXSA9IHt9OwogICAgICAgIGlmICh0eXBlLnNsaWNlKDAsIDUpID09PSAndG91Y2gnKSB7CiAgICAgICAgICBldiA9IC8qKiBAdHlwZSB7VG91Y2hFdmVudH0gKi8oZXYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtYXNzaWduCiAgICAgICAgICBsZXQgdCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdOwogICAgICAgICAgaWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JykgewogICAgICAgICAgICAvLyBvbmx5IGhhbmRsZSB0aGUgZmlyc3QgZmluZ2VyCiAgICAgICAgICAgIGlmIChldi50b3VjaGVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICAgIFBPSU5URVJTVEFURS50b3VjaC5pZCA9IHQuaWRlbnRpZmllcjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKFBPSU5URVJTVEFURS50b3VjaC5pZCAhPT0gdC5pZGVudGlmaWVyKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghSEFTX05BVElWRV9UQSkgewogICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IHR5cGUgPT09ICd0b3VjaG1vdmUnKSB7CiAgICAgICAgICAgICAgR2VzdHVyZXMuX2hhbmRsZVRvdWNoQWN0aW9uKGV2KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVkID0gZXZbSEFORExFRF9PQkpdOwogICAgICAvLyB1c2VkIHRvIGlnbm9yZSBzeW50aGV0aWMgbW91c2UgZXZlbnRzCiAgICAgIGlmIChoYW5kbGVkLnNraXApIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gcmVzZXQgcmVjb2duaXplciBzdGF0ZQogICAgICBmb3IgKGxldCBpID0gMCwgcjsgaSA8IEdlc3R1cmVzLnJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgciA9IEdlc3R1cmVzLnJlY29nbml6ZXJzW2ldOwogICAgICAgIGlmIChnc1tyLm5hbWVdICYmICFoYW5kbGVkW3IubmFtZV0pIHsKICAgICAgICAgIGlmIChyLmZsb3cgJiYgci5mbG93LnN0YXJ0LmluZGV4T2YoZXYudHlwZSkgPiAtMSAmJiByLnJlc2V0KSB7CiAgICAgICAgICAgIHIucmVzZXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gZW5mb3JjZSBnZXN0dXJlIHJlY29nbml6ZXIgb3JkZXIKICAgICAgZm9yIChsZXQgaSA9IDAsIHI7IGkgPCBHZXN0dXJlcy5yZWNvZ25pemVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHIgPSBHZXN0dXJlcy5yZWNvZ25pemVyc1tpXTsKICAgICAgICBpZiAoZ3Nbci5uYW1lXSAmJiAhaGFuZGxlZFtyLm5hbWVdKSB7CiAgICAgICAgICBoYW5kbGVkW3IubmFtZV0gPSB0cnVlOwogICAgICAgICAgclt0eXBlXShldik7CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXYgRXZlbnQuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfaGFuZGxlVG91Y2hBY3Rpb246IGZ1bmN0aW9uKGV2KSB7CiAgICAgIGxldCB0ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF07CiAgICAgIGxldCB0eXBlID0gZXYudHlwZTsKICAgICAgaWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JykgewogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC54ID0gdC5jbGllbnRYOwogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC55ID0gdC5jbGllbnRZOwogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC5zY3JvbGxEZWNpZGVkID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RvdWNobW92ZScpIHsKICAgICAgICBpZiAoUE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgUE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQgPSB0cnVlOwogICAgICAgIGxldCB0YSA9IGZpcnN0VG91Y2hBY3Rpb24oZXYpOwogICAgICAgIGxldCBwcmV2ZW50ID0gZmFsc2U7CiAgICAgICAgbGV0IGR4ID0gTWF0aC5hYnMoUE9JTlRFUlNUQVRFLnRvdWNoLnggLSB0LmNsaWVudFgpOwogICAgICAgIGxldCBkeSA9IE1hdGguYWJzKFBPSU5URVJTVEFURS50b3VjaC55IC0gdC5jbGllbnRZKTsKICAgICAgICBpZiAoIWV2LmNhbmNlbGFibGUpIHsKICAgICAgICAgIC8vIHNjcm9sbGluZyBpcyBoYXBwZW5pbmcKICAgICAgICB9IGVsc2UgaWYgKHRhID09PSAnbm9uZScpIHsKICAgICAgICAgIHByZXZlbnQgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAodGEgPT09ICdwYW4teCcpIHsKICAgICAgICAgIHByZXZlbnQgPSBkeSA+IGR4OwogICAgICAgIH0gZWxzZSBpZiAodGEgPT09ICdwYW4teScpIHsKICAgICAgICAgIHByZXZlbnQgPSBkeCA+IGR5OwogICAgICAgIH0KICAgICAgICBpZiAocHJldmVudCkgewogICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgR2VzdHVyZXMucHJldmVudCgndHJhY2snKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGEgbm9kZSBmb3IgdGhlIGdpdmVuIGdlc3R1cmUgdHlwZS4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5HZXN0dXJlcwogICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBOb2RlIHRvIGFkZCBsaXN0ZW5lciBvbgogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBHZXN0dXJlIHR5cGU6IGBkb3duYCwgYHVwYCwgYHRyYWNrYCwgb3IgYHRhcGAKICAgICAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBFdmVudCBsaXN0ZW5lciBmdW5jdGlvbiB0byBjYWxsCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYSBnZXN0dXJlIGV2ZW50IGxpc3RlbmVyIHdhcyBhZGRlZC4KICAgICAqIEB0aGlzIHtHZXN0dXJlc30KICAgICAqLwogICAgYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKG5vZGUsIGV2VHlwZSwgaGFuZGxlcikgewogICAgICBpZiAodGhpcy5nZXN0dXJlc1tldlR5cGVdKSB7CiAgICAgICAgdGhpcy5fYWRkKG5vZGUsIGV2VHlwZSwgaGFuZGxlcik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSBhIG5vZGUgZm9yIHRoZSBnaXZlbiBnZXN0dXJlIHR5cGUuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byByZW1vdmUgbGlzdGVuZXIgZnJvbQogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBHZXN0dXJlIHR5cGU6IGBkb3duYCwgYHVwYCwgYHRyYWNrYCwgb3IgYHRhcGAKICAgICAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBFdmVudCBsaXN0ZW5lciBmdW5jdGlvbiBwcmV2aW91c2x5IHBhc3NlZCB0bwogICAgICogIGBhZGRMaXN0ZW5lcmAuCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYSBnZXN0dXJlIGV2ZW50IGxpc3RlbmVyIHdhcyByZW1vdmVkLgogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24obm9kZSwgZXZUeXBlLCBoYW5kbGVyKSB7CiAgICAgIGlmICh0aGlzLmdlc3R1cmVzW2V2VHlwZV0pIHsKICAgICAgICB0aGlzLl9yZW1vdmUobm9kZSwgZXZUeXBlLCBoYW5kbGVyKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAoKICAgIC8qKgogICAgICogYXV0b21hdGUgdGhlIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIG5hdGl2ZSBldmVudHMKICAgICAqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IG5vZGUgTm9kZSBvbiB3aGljaCB0byBhZGQgdGhlIGV2ZW50LgogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBFdmVudCB0eXBlIHRvIGFkZC4KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUV2ZW50KX0gaGFuZGxlciBFdmVudCBoYW5kbGVyIGZ1bmN0aW9uLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEB0aGlzIHtHZXN0dXJlc30KICAgICAqLwogICAgX2FkZDogZnVuY3Rpb24obm9kZSwgZXZUeXBlLCBoYW5kbGVyKSB7CiAgICAgIGxldCByZWNvZ25pemVyID0gdGhpcy5nZXN0dXJlc1tldlR5cGVdOwogICAgICBsZXQgZGVwcyA9IHJlY29nbml6ZXIuZGVwczsKICAgICAgbGV0IG5hbWUgPSByZWNvZ25pemVyLm5hbWU7CiAgICAgIGxldCBnb2JqID0gbm9kZVtHRVNUVVJFX0tFWV07CiAgICAgIGlmICghZ29iaikgewogICAgICAgIG5vZGVbR0VTVFVSRV9LRVldID0gZ29iaiA9IHt9OwogICAgICB9CiAgICAgIGZvciAobGV0IGkgPSAwLCBkZXAsIGdkOyBpIDwgZGVwcy5sZW5ndGg7IGkrKykgewogICAgICAgIGRlcCA9IGRlcHNbaV07CiAgICAgICAgLy8gZG9uJ3QgYWRkIG1vdXNlIGhhbmRsZXJzIG9uIGlPUyBiZWNhdXNlIHRoZXkgY2F1c2UgZ3JheSBzZWxlY3Rpb24gb3ZlcmxheXMKICAgICAgICBpZiAoSVNfVE9VQ0hfT05MWSAmJiBpc01vdXNlRXZlbnQoZGVwKSAmJiBkZXAgIT09ICdjbGljaycpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBnZCA9IGdvYmpbZGVwXTsKICAgICAgICBpZiAoIWdkKSB7CiAgICAgICAgICBnb2JqW2RlcF0gPSBnZCA9IHtfY291bnQ6IDB9OwogICAgICAgIH0KICAgICAgICBpZiAoZ2QuX2NvdW50ID09PSAwKSB7CiAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZGVwLCB0aGlzLl9oYW5kbGVOYXRpdmUsIFBBU1NJVkVfVE9VQ0goZGVwKSk7CiAgICAgICAgfQogICAgICAgIGdkW25hbWVdID0gKGdkW25hbWVdIHx8IDApICsgMTsKICAgICAgICBnZC5fY291bnQgPSAoZ2QuX2NvdW50IHx8IDApICsgMTsKICAgICAgfQogICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBoYW5kbGVyKTsKICAgICAgaWYgKHJlY29nbml6ZXIudG91Y2hBY3Rpb24pIHsKICAgICAgICB0aGlzLnNldFRvdWNoQWN0aW9uKG5vZGUsIHJlY29nbml6ZXIudG91Y2hBY3Rpb24pOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogYXV0b21hdGUgZXZlbnQgbGlzdGVuZXIgcmVtb3ZhbCBmb3IgbmF0aXZlIGV2ZW50cwogICAgICoKICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gbm9kZSBOb2RlIG9uIHdoaWNoIHRvIHJlbW92ZSB0aGUgZXZlbnQuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZUeXBlIEV2ZW50IHR5cGUgdG8gcmVtb3ZlLgogICAgICogQHBhcmFtIHtmdW5jdGlvbihFdmVudD8pfSBoYW5kbGVyIEV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICBfcmVtb3ZlOiBmdW5jdGlvbihub2RlLCBldlR5cGUsIGhhbmRsZXIpIHsKICAgICAgbGV0IHJlY29nbml6ZXIgPSB0aGlzLmdlc3R1cmVzW2V2VHlwZV07CiAgICAgIGxldCBkZXBzID0gcmVjb2duaXplci5kZXBzOwogICAgICBsZXQgbmFtZSA9IHJlY29nbml6ZXIubmFtZTsKICAgICAgbGV0IGdvYmogPSBub2RlW0dFU1RVUkVfS0VZXTsKICAgICAgaWYgKGdvYmopIHsKICAgICAgICBmb3IgKGxldCBpID0gMCwgZGVwLCBnZDsgaSA8IGRlcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGRlcCA9IGRlcHNbaV07CiAgICAgICAgICBnZCA9IGdvYmpbZGVwXTsKICAgICAgICAgIGlmIChnZCAmJiBnZFtuYW1lXSkgewogICAgICAgICAgICBnZFtuYW1lXSA9IChnZFtuYW1lXSB8fCAxKSAtIDE7CiAgICAgICAgICAgIGdkLl9jb3VudCA9IChnZC5fY291bnQgfHwgMSkgLSAxOwogICAgICAgICAgICBpZiAoZ2QuX2NvdW50ID09PSAwKSB7CiAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGRlcCwgdGhpcy5faGFuZGxlTmF0aXZlLCBQQVNTSVZFX1RPVUNIKGRlcCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldlR5cGUsIGhhbmRsZXIpOwogICAgfSwKCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIG5ldyBnZXN0dXJlIGV2ZW50IHJlY29nbml6ZXIgZm9yIGFkZGluZyBuZXcgY3VzdG9tCiAgICAgKiBnZXN0dXJlIGV2ZW50IHR5cGVzLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkdlc3R1cmVzCiAgICAgKiBAcGFyYW0geyFHZXN0dXJlUmVjb2duaXplcn0gcmVjb2cgR2VzdHVyZSByZWNvZ25pemVyIGRlc2NyaXB0b3IKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7R2VzdHVyZXN9CiAgICAgKi8KICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihyZWNvZykgewogICAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2cpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY29nLmVtaXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5nZXN0dXJlc1tyZWNvZy5lbWl0c1tpXV0gPSByZWNvZzsKICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZOYW1lIEV2ZW50IG5hbWUuCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgdGhlIGdlc3R1cmUgZm9yIHRoZSBnaXZlbiBldmVudCBuYW1lLgogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICBfZmluZFJlY29nbml6ZXJCeUV2ZW50OiBmdW5jdGlvbihldk5hbWUpIHsKICAgICAgZm9yIChsZXQgaSA9IDAsIHI7IGkgPCB0aGlzLnJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgciA9IHRoaXMucmVjb2duaXplcnNbaV07CiAgICAgICAgZm9yIChsZXQgaiA9IDAsIG47IGogPCByLmVtaXRzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICBuID0gci5lbWl0c1tqXTsKICAgICAgICAgIGlmIChuID09PSBldk5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSwKCiAgICAvKioKICAgICAqIFNldHMgc2Nyb2xsaW5nIGRpcmVjdGlvbiBvbiBub2RlLgogICAgICoKICAgICAqIFRoaXMgdmFsdWUgaXMgY2hlY2tlZCBvbiBmaXJzdCBtb3ZlLCB0aHVzIGl0IHNob3VsZCBiZSBjYWxsZWQgcHJpb3IgdG8KICAgICAqIGFkZGluZyBldmVudCBsaXN0ZW5lcnMuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7IUVsZW1lbnR9IG5vZGUgTm9kZSB0byBzZXQgdG91Y2ggYWN0aW9uIHNldHRpbmcgb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUb3VjaCBhY3Rpb24gdmFsdWUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHNldFRvdWNoQWN0aW9uOiBmdW5jdGlvbihub2RlLCB2YWx1ZSkgewogICAgICBpZiAoSEFTX05BVElWRV9UQSkgewogICAgICAgIC8vIE5PVEU6IGFkZCB0b3VjaEFjdGlvbiBhc3luYyBzbyB0aGF0IGV2ZW50cyBjYW4gYmUgYWRkZWQgaW4KICAgICAgICAvLyBjdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvcnMuIE90aGVyd2lzZSB3ZSBydW4gYWZvdWwgb2YgY3VzdG9tCiAgICAgICAgLy8gZWxlbWVudHMgcmVzdHJpY3Rpb24gYWdhaW5zdCBzZXR0aW5ncyBhdHRyaWJ1dGVzIChzdHlsZSkgaW4gdGhlCiAgICAgICAgLy8gY29uc3RydWN0b3IuCiAgICAgICAgUG9seW1lci5Bc3luYy5taWNyb1Rhc2sucnVuKCgpID0+IHsKICAgICAgICAgIG5vZGUuc3R5bGUudG91Y2hBY3Rpb24gPSB2YWx1ZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBub2RlW1RPVUNIX0FDVElPTl0gPSB2YWx1ZTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBgdGFyZ2V0YCBlbGVtZW50IG9mIGB0eXBlYCB3aXRoIHRoZSBnaXZlbgogICAgICogYGRldGFpbGAuCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHshRXZlbnRUYXJnZXR9IHRhcmdldCBUaGUgZWxlbWVudCBvbiB3aGljaCB0byBmaXJlIGFuIGV2ZW50LgogICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgZXZlbnQgdG8gZmlyZS4KICAgICAqIEBwYXJhbSB7IU9iamVjdD19IGRldGFpbCBUaGUgZGV0YWlsIG9iamVjdCB0byBwb3B1bGF0ZSBvbiB0aGUgZXZlbnQuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfZmlyZTogZnVuY3Rpb24odGFyZ2V0LCB0eXBlLCBkZXRhaWwpIHsKICAgICAgbGV0IGV2ID0gbmV3IEV2ZW50KHR5cGUsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSk7CiAgICAgIGV2LmRldGFpbCA9IGRldGFpbDsKICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXYpOwogICAgICAvLyBmb3J3YXJkIGBwcmV2ZW50RGVmYXVsdGAgaW4gYSBjbGVhbiB3YXkKICAgICAgaWYgKGV2LmRlZmF1bHRQcmV2ZW50ZWQpIHsKICAgICAgICBsZXQgcHJldmVudGVyID0gZGV0YWlsLnByZXZlbnRlciB8fCBkZXRhaWwuc291cmNlRXZlbnQ7CiAgICAgICAgaWYgKHByZXZlbnRlciAmJiBwcmV2ZW50ZXIucHJldmVudERlZmF1bHQpIHsKICAgICAgICAgIHByZXZlbnRlci5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIFByZXZlbnRzIHRoZSBkaXNwYXRjaCBhbmQgZGVmYXVsdCBhY3Rpb24gb2YgdGhlIGdpdmVuIGV2ZW50IG5hbWUuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldk5hbWUgRXZlbnQgbmFtZS4KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7R2VzdHVyZXN9CiAgICAgKi8KICAgIHByZXZlbnQ6IGZ1bmN0aW9uKGV2TmFtZSkgewogICAgICBsZXQgcmVjb2duaXplciA9IHRoaXMuX2ZpbmRSZWNvZ25pemVyQnlFdmVudChldk5hbWUpOwogICAgICBpZiAocmVjb2duaXplci5pbmZvKSB7CiAgICAgICAgcmVjb2duaXplci5pbmZvLnByZXZlbnQgPSB0cnVlOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogUmVzZXQgdGhlIDI1MDBtcyB0aW1lb3V0IG9uIHByb2Nlc3NpbmcgbW91c2UgaW5wdXQgYWZ0ZXIgZGV0ZWN0aW5nIHRvdWNoIGlucHV0LgogICAgICoKICAgICAqIFRvdWNoIGlucHV0cyBjcmVhdGUgc3ludGhlc2l6ZWQgbW91c2UgaW5wdXRzIGFueXdoZXJlIGZyb20gMCB0byAyMDAwbXMgYWZ0ZXIgdGhlIHRvdWNoLgogICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyB0ZXN0aW5nIHdpdGggc2ltdWxhdGVkIHRvdWNoIGlucHV0cy4KICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2QgaW4gcHJvZHVjdGlvbiBtYXkgY2F1c2UgZHVwbGljYXRlIHRhcHMgb3Igb3RoZXIgR2VzdHVyZXMuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0TW91c2VDYW5jZWxsZXI6IGZ1bmN0aW9uKCkgewogICAgICBpZiAoUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iKSB7CiAgICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iLmZsdXNoKCk7CiAgICAgIH0KICAgIH0KICB9OwoKICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwoKICBHZXN0dXJlcy5yZWdpc3Rlcih7CiAgICBuYW1lOiAnZG93bnVwJywKICAgIGRlcHM6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnXSwKICAgIGZsb3c6IHsKICAgICAgc3RhcnQ6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXSwKICAgICAgZW5kOiBbJ21vdXNldXAnLCAndG91Y2hlbmQnXQogICAgfSwKICAgIGVtaXRzOiBbJ2Rvd24nLCAndXAnXSwKCiAgICBpbmZvOiB7CiAgICAgIG1vdmVmbjogbnVsbCwKICAgICAgdXBmbjogbnVsbAogICAgfSwKCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgdW50cmFja0RvY3VtZW50KHRoaXMuaW5mbyk7CiAgICB9LAoKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBtb3VzZWRvd246IGZ1bmN0aW9uKGUpIHsKICAgICAgaWYgKCFoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IHQgPSBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpOwogICAgICBsZXQgc2VsZiA9IHRoaXM7CiAgICAgIGxldCBtb3ZlZm4gPSBmdW5jdGlvbiBtb3ZlZm4oZSkgewogICAgICAgIGlmICghaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgICBzZWxmLl9maXJlKCd1cCcsIHQsIGUpOwogICAgICAgICAgdW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBsZXQgdXBmbiA9IGZ1bmN0aW9uIHVwZm4oZSkgewogICAgICAgIGlmIChoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICAgIHNlbGYuX2ZpcmUoJ3VwJywgdCwgZSk7CiAgICAgICAgfQogICAgICAgIHVudHJhY2tEb2N1bWVudChzZWxmLmluZm8pOwogICAgICB9OwogICAgICB0cmFja0RvY3VtZW50KHRoaXMuaW5mbywgbW92ZWZuLCB1cGZuKTsKICAgICAgdGhpcy5fZmlyZSgnZG93bicsIHQsIGUpOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaHN0YXJ0OiBmdW5jdGlvbihlKSB7CiAgICAgIHRoaXMuX2ZpcmUoJ2Rvd24nLCBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpLCBlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgdG91Y2hlbmQ6IGZ1bmN0aW9uKGUpIHsKICAgICAgdGhpcy5fZmlyZSgndXAnLCBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpLCBlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlCiAgICAgKiBAcGFyYW0geyFFdmVudFRhcmdldH0gdGFyZ2V0CiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJldmVudGVyCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfZmlyZTogZnVuY3Rpb24odHlwZSwgdGFyZ2V0LCBldmVudCwgcHJldmVudGVyKSB7CiAgICAgIEdlc3R1cmVzLl9maXJlKHRhcmdldCwgdHlwZSwgewogICAgICAgIHg6IGV2ZW50LmNsaWVudFgsCiAgICAgICAgeTogZXZlbnQuY2xpZW50WSwKICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsCiAgICAgICAgcHJldmVudGVyOiBwcmV2ZW50ZXIsCiAgICAgICAgcHJldmVudDogZnVuY3Rpb24oZSkgewogICAgICAgICAgcmV0dXJuIEdlc3R1cmVzLnByZXZlbnQoZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9KTsKCiAgR2VzdHVyZXMucmVnaXN0ZXIoewogICAgbmFtZTogJ3RyYWNrJywKICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsCiAgICBkZXBzOiBbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZScsICd0b3VjaGVuZCddLAogICAgZmxvdzogewogICAgICBzdGFydDogWydtb3VzZWRvd24nLCAndG91Y2hzdGFydCddLAogICAgICBlbmQ6IFsnbW91c2V1cCcsICd0b3VjaGVuZCddCiAgICB9LAogICAgZW1pdHM6IFsndHJhY2snXSwKCiAgICBpbmZvOiB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHN0YXRlOiAnc3RhcnQnLAogICAgICBzdGFydGVkOiBmYWxzZSwKICAgICAgbW92ZXM6IFtdLAogICAgICAvKiogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfSAqLwogICAgICBhZGRNb3ZlOiBmdW5jdGlvbihtb3ZlKSB7CiAgICAgICAgaWYgKHRoaXMubW92ZXMubGVuZ3RoID4gVFJBQ0tfTEVOR1RIKSB7CiAgICAgICAgICB0aGlzLm1vdmVzLnNoaWZ0KCk7CiAgICAgICAgfQogICAgICAgIHRoaXMubW92ZXMucHVzaChtb3ZlKTsKICAgICAgfSwKICAgICAgbW92ZWZuOiBudWxsLAogICAgICB1cGZuOiBudWxsLAogICAgICBwcmV2ZW50OiBmYWxzZQogICAgfSwKCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5pbmZvLnN0YXRlID0gJ3N0YXJ0JzsKICAgICAgdGhpcy5pbmZvLnN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgdGhpcy5pbmZvLm1vdmVzID0gW107CiAgICAgIHRoaXMuaW5mby54ID0gMDsKICAgICAgdGhpcy5pbmZvLnkgPSAwOwogICAgICB0aGlzLmluZm8ucHJldmVudCA9IGZhbHNlOwogICAgICB1bnRyYWNrRG9jdW1lbnQodGhpcy5pbmZvKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge251bWJlcn0geAogICAgICogQHBhcmFtIHtudW1iZXJ9IHkKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGhhc01vdmVkRW5vdWdoOiBmdW5jdGlvbih4LCB5KSB7CiAgICAgIGlmICh0aGlzLmluZm8ucHJldmVudCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodGhpcy5pbmZvLnN0YXJ0ZWQpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgZHggPSBNYXRoLmFicyh0aGlzLmluZm8ueCAtIHgpOwogICAgICBsZXQgZHkgPSBNYXRoLmFicyh0aGlzLmluZm8ueSAtIHkpOwogICAgICByZXR1cm4gKGR4ID49IFRSQUNLX0RJU1RBTkNFIHx8IGR5ID49IFRSQUNLX0RJU1RBTkNFKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgbW91c2Vkb3duOiBmdW5jdGlvbihlKSB7CiAgICAgIGlmICghaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChlKTsKICAgICAgbGV0IHNlbGYgPSB0aGlzOwogICAgICBsZXQgbW92ZWZuID0gZnVuY3Rpb24gbW92ZWZuKGUpIHsKICAgICAgICBsZXQgeCA9IGUuY2xpZW50WCwgeSA9IGUuY2xpZW50WTsKICAgICAgICBpZiAoc2VsZi5oYXNNb3ZlZEVub3VnaCh4LCB5KSkgewogICAgICAgICAgLy8gZmlyc3QgbW92ZSBpcyAnc3RhcnQnLCBzdWJzZXF1ZW50IG1vdmVzIGFyZSAnbW92ZScsIG1vdXNldXAgaXMgJ2VuZCcKICAgICAgICAgIHNlbGYuaW5mby5zdGF0ZSA9IHNlbGYuaW5mby5zdGFydGVkID8gKGUudHlwZSA9PT0gJ21vdXNldXAnID8gJ2VuZCcgOiAndHJhY2snKSA6ICdzdGFydCc7CiAgICAgICAgICBpZiAoc2VsZi5pbmZvLnN0YXRlID09PSAnc3RhcnQnKSB7CiAgICAgICAgICAgIC8vIGlmIGFuZCBvbmx5IGlmIHRyYWNraW5nLCBhbHdheXMgcHJldmVudCB0YXAKICAgICAgICAgICAgR2VzdHVyZXMucHJldmVudCgndGFwJyk7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxmLmluZm8uYWRkTW92ZSh7eDogeCwgeTogeX0pOwogICAgICAgICAgaWYgKCFoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICAgICAgLy8gYWx3YXlzIF9maXJlICJlbmQiCiAgICAgICAgICAgIHNlbGYuaW5mby5zdGF0ZSA9ICdlbmQnOwogICAgICAgICAgICB1bnRyYWNrRG9jdW1lbnQoc2VsZi5pbmZvKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGYuX2ZpcmUodCwgZSk7CiAgICAgICAgICBzZWxmLmluZm8uc3RhcnRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9OwogICAgICBsZXQgdXBmbiA9IGZ1bmN0aW9uIHVwZm4oZSkgewogICAgICAgIGlmIChzZWxmLmluZm8uc3RhcnRlZCkgewogICAgICAgICAgbW92ZWZuKGUpOwogICAgICAgIH0KCiAgICAgICAgLy8gcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgbGlzdGVuZXJzCiAgICAgICAgdW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7CiAgICAgIH07CiAgICAgIC8vIGFkZCB0ZW1wb3JhcnkgZG9jdW1lbnQgbGlzdGVuZXJzIGFzIG1vdXNlIHJldGFyZ2V0cwogICAgICB0cmFja0RvY3VtZW50KHRoaXMuaW5mbywgbW92ZWZuLCB1cGZuKTsKICAgICAgdGhpcy5pbmZvLnggPSBlLmNsaWVudFg7CiAgICAgIHRoaXMuaW5mby55ID0gZS5jbGllbnRZOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaHN0YXJ0OiBmdW5jdGlvbihlKSB7CiAgICAgIGxldCBjdCA9IGUuY2hhbmdlZFRvdWNoZXNbMF07CiAgICAgIHRoaXMuaW5mby54ID0gY3QuY2xpZW50WDsKICAgICAgdGhpcy5pbmZvLnkgPSBjdC5jbGllbnRZOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaG1vdmU6IGZ1bmN0aW9uKGUpIHsKICAgICAgbGV0IHQgPSBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpOwogICAgICBsZXQgY3QgPSBlLmNoYW5nZWRUb3VjaGVzWzBdOwogICAgICBsZXQgeCA9IGN0LmNsaWVudFgsIHkgPSBjdC5jbGllbnRZOwogICAgICBpZiAodGhpcy5oYXNNb3ZlZEVub3VnaCh4LCB5KSkgewogICAgICAgIGlmICh0aGlzLmluZm8uc3RhdGUgPT09ICdzdGFydCcpIHsKICAgICAgICAgIC8vIGlmIGFuZCBvbmx5IGlmIHRyYWNraW5nLCBhbHdheXMgcHJldmVudCB0YXAKICAgICAgICAgIEdlc3R1cmVzLnByZXZlbnQoJ3RhcCcpOwogICAgICAgIH0KICAgICAgICB0aGlzLmluZm8uYWRkTW92ZSh7eDogeCwgeTogeX0pOwogICAgICAgIHRoaXMuX2ZpcmUodCwgY3QpOwogICAgICAgIHRoaXMuaW5mby5zdGF0ZSA9ICd0cmFjayc7CiAgICAgICAgdGhpcy5pbmZvLnN0YXJ0ZWQgPSB0cnVlOwogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHRvdWNoZW5kOiBmdW5jdGlvbihlKSB7CiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChlKTsKICAgICAgbGV0IGN0ID0gZS5jaGFuZ2VkVG91Y2hlc1swXTsKICAgICAgLy8gb25seSB0cmFja2VuZCBpZiB0cmFjayB3YXMgc3RhcnRlZCBhbmQgbm90IGFib3J0ZWQKICAgICAgaWYgKHRoaXMuaW5mby5zdGFydGVkKSB7CiAgICAgICAgLy8gcmVzZXQgc3RhcnRlZCBzdGF0ZSBvbiB1cAogICAgICAgIHRoaXMuaW5mby5zdGF0ZSA9ICdlbmQnOwogICAgICAgIHRoaXMuaW5mby5hZGRNb3ZlKHt4OiBjdC5jbGllbnRYLCB5OiBjdC5jbGllbnRZfSk7CiAgICAgICAgdGhpcy5fZmlyZSh0LCBjdCwgZSk7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0geyFFdmVudFRhcmdldH0gdGFyZ2V0CiAgICAgKiBAcGFyYW0ge1RvdWNofSB0b3VjaAogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgX2ZpcmU6IGZ1bmN0aW9uKHRhcmdldCwgdG91Y2gpIHsKICAgICAgbGV0IHNlY29uZGxhc3QgPSB0aGlzLmluZm8ubW92ZXNbdGhpcy5pbmZvLm1vdmVzLmxlbmd0aCAtIDJdOwogICAgICBsZXQgbGFzdG1vdmUgPSB0aGlzLmluZm8ubW92ZXNbdGhpcy5pbmZvLm1vdmVzLmxlbmd0aCAtIDFdOwogICAgICBsZXQgZHggPSBsYXN0bW92ZS54IC0gdGhpcy5pbmZvLng7CiAgICAgIGxldCBkeSA9IGxhc3Rtb3ZlLnkgLSB0aGlzLmluZm8ueTsKICAgICAgbGV0IGRkeCwgZGR5ID0gMDsKICAgICAgaWYgKHNlY29uZGxhc3QpIHsKICAgICAgICBkZHggPSBsYXN0bW92ZS54IC0gc2Vjb25kbGFzdC54OwogICAgICAgIGRkeSA9IGxhc3Rtb3ZlLnkgLSBzZWNvbmRsYXN0Lnk7CiAgICAgIH0KICAgICAgR2VzdHVyZXMuX2ZpcmUodGFyZ2V0LCAndHJhY2snLCB7CiAgICAgICAgc3RhdGU6IHRoaXMuaW5mby5zdGF0ZSwKICAgICAgICB4OiB0b3VjaC5jbGllbnRYLAogICAgICAgIHk6IHRvdWNoLmNsaWVudFksCiAgICAgICAgZHg6IGR4LAogICAgICAgIGR5OiBkeSwKICAgICAgICBkZHg6IGRkeCwKICAgICAgICBkZHk6IGRkeSwKICAgICAgICBzb3VyY2VFdmVudDogdG91Y2gsCiAgICAgICAgaG92ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIEdlc3R1cmVzLmRlZXBUYXJnZXRGaW5kKHRvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogIH0pOwoKICBHZXN0dXJlcy5yZWdpc3Rlcih7CiAgICBuYW1lOiAndGFwJywKICAgIGRlcHM6IFsnbW91c2Vkb3duJywgJ2NsaWNrJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnXSwKICAgIGZsb3c6IHsKICAgICAgc3RhcnQ6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXSwKICAgICAgZW5kOiBbJ2NsaWNrJywgJ3RvdWNoZW5kJ10KICAgIH0sCiAgICBlbWl0czogWyd0YXAnXSwKICAgIGluZm86IHsKICAgICAgeDogTmFOLAogICAgICB5OiBOYU4sCiAgICAgIHByZXZlbnQ6IGZhbHNlCiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuaW5mby54ID0gTmFOOwogICAgICB0aGlzLmluZm8ueSA9IE5hTjsKICAgICAgdGhpcy5pbmZvLnByZXZlbnQgPSBmYWxzZTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgc2F2ZTogZnVuY3Rpb24oZSkgewogICAgICB0aGlzLmluZm8ueCA9IGUuY2xpZW50WDsKICAgICAgdGhpcy5pbmZvLnkgPSBlLmNsaWVudFk7CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIG1vdXNlZG93bjogZnVuY3Rpb24oZSkgewogICAgICBpZiAoaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgdGhpcy5zYXZlKGUpOwogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGNsaWNrOiBmdW5jdGlvbihlKSB7CiAgICAgIGlmIChoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICB0aGlzLmZvcndhcmQoZSk7CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgdG91Y2hzdGFydDogZnVuY3Rpb24oZSkgewogICAgICB0aGlzLnNhdmUoZS5jaGFuZ2VkVG91Y2hlc1swXSwgZSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHRvdWNoZW5kOiBmdW5jdGlvbihlKSB7CiAgICAgIHRoaXMuZm9yd2FyZChlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7RXZlbnQgfCBUb3VjaH0gZQogICAgICogQHBhcmFtIHtFdmVudD19IHByZXZlbnRlcgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZm9yd2FyZDogZnVuY3Rpb24oZSwgcHJldmVudGVyKSB7CiAgICAgIGxldCBkeCA9IE1hdGguYWJzKGUuY2xpZW50WCAtIHRoaXMuaW5mby54KTsKICAgICAgbGV0IGR5ID0gTWF0aC5hYnMoZS5jbGllbnRZIC0gdGhpcy5pbmZvLnkpOwogICAgICAvLyBmaW5kIG9yaWdpbmFsIHRhcmdldCBmcm9tIGBwcmV2ZW50ZXJgIGZvciBUb3VjaEV2ZW50cywgb3IgYGVgIGZvciBNb3VzZUV2ZW50cwogICAgICBsZXQgdCA9IEdlc3R1cmVzLl9maW5kT3JpZ2luYWxUYXJnZXQoLyoqIEB0eXBlIHtFdmVudH0gKi8ocHJldmVudGVyIHx8IGUpKTsKICAgICAgaWYgKCF0IHx8IChjYW5CZURpc2FibGVkWy8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0KS5sb2NhbE5hbWVdICYmIHQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBkeCxkeSBjYW4gYmUgTmFOIGlmIGBjbGlja2AgaGFzIGJlZW4gc2ltdWxhdGVkIGFuZCB0aGVyZSB3YXMgbm8gYGRvd25gIGZvciBgc3RhcnRgCiAgICAgIGlmIChpc05hTihkeCkgfHwgaXNOYU4oZHkpIHx8IChkeCA8PSBUQVBfRElTVEFOQ0UgJiYgZHkgPD0gVEFQX0RJU1RBTkNFKSB8fCBpc1N5bnRoZXRpY0NsaWNrKGUpKSB7CiAgICAgICAgLy8gcHJldmVudCB0YXBzIGZyb20gYmVpbmcgZ2VuZXJhdGVkIGlmIGFuIGV2ZW50IGhhcyBjYW5jZWxlZCB0aGVtCiAgICAgICAgaWYgKCF0aGlzLmluZm8ucHJldmVudCkgewogICAgICAgICAgR2VzdHVyZXMuX2ZpcmUodCwgJ3RhcCcsIHsKICAgICAgICAgICAgeDogZS5jbGllbnRYLAogICAgICAgICAgICB5OiBlLmNsaWVudFksCiAgICAgICAgICAgIHNvdXJjZUV2ZW50OiBlLAogICAgICAgICAgICBwcmV2ZW50ZXI6IHByZXZlbnRlcgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSk7CgogIC8qIGVzbGludC1lbmFibGUgdmFsaWQtanNkb2MgKi8KCiAgLyoqIEBkZXByZWNhdGVkICovCiAgR2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldDsKCiAgLyoqIEBkZXByZWNhdGVkICovCiAgR2VzdHVyZXMuYWRkID0gR2VzdHVyZXMuYWRkTGlzdGVuZXI7CgogIC8qKiBAZGVwcmVjYXRlZCAqLwogIEdlc3R1cmVzLnJlbW92ZSA9IEdlc3R1cmVzLnJlbW92ZUxpc3RlbmVyOwoKICBQb2x5bWVyLkdlc3R1cmVzID0gR2VzdHVyZXM7Cgp9KSgpOwoKCihmdW5jdGlvbigpIHsKCiAgJ3VzZSBzdHJpY3QnOwoKICAvKioKICAgKiBAY29uc3Qge1BvbHltZXIuR2VzdHVyZXN9CiAgICovCiAgY29uc3QgZ2VzdHVyZXMgPSBQb2x5bWVyLkdlc3R1cmVzOwoKICAvKioKICAgKiBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgQVBJIGZvciBhZGRpbmcgUG9seW1lcidzIGNyb3NzLXBsYXRmb3JtCiAgICogZ2VzdHVyZSBldmVudHMgdG8gbm9kZXMuCiAgICoKICAgKiBUaGUgQVBJIGlzIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvdmVycmlkZSBwb2ludHMgaW1wbGVtZW50ZWQKICAgKiBpbiBgUG9seW1lci5UZW1wbGF0ZVN0YW1wYCBzdWNoIHRoYXQgZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXJzIGluCiAgICogdGVtcGxhdGVzIHdpbGwgc3VwcG9ydCBnZXN0dXJlIGV2ZW50cyB3aGVuIHRoaXMgbWl4aW4gaXMgYXBwbGllZCBhbG9uZyB3aXRoCiAgICogYFBvbHltZXIuVGVtcGxhdGVTdGFtcGAuCiAgICoKICAgKiBAbWl4aW5GdW5jdGlvbgogICAqIEBwb2x5bWVyCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgQVBJIGZvciBhZGRpbmcgUG9seW1lcidzIGNyb3NzLXBsYXRmb3JtCiAgICogZ2VzdHVyZSBldmVudHMgdG8gbm9kZXMKICAgKi8KICBQb2x5bWVyLkdlc3R1cmVFdmVudExpc3RlbmVycyA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfR2VzdHVyZUV2ZW50TGlzdGVuZXJzfQogICAgICovCiAgICBjbGFzcyBHZXN0dXJlRXZlbnRMaXN0ZW5lcnMgZXh0ZW5kcyBzdXBlckNsYXNzIHsKCiAgICAgIC8qKgogICAgICAgKiBBZGQgdGhlIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBub2RlIGlmIGl0IGlzIGEgZ2VzdHVyZXMgZXZlbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byBhZGQgZXZlbnQgbGlzdGVuZXIgdG8KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBOYW1lIG9mIGV2ZW50CiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUV2ZW50KTp2b2lkfSBoYW5kbGVyIExpc3RlbmVyIGZ1bmN0aW9uIHRvIGFkZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgaWYgKCFnZXN0dXJlcy5hZGRMaXN0ZW5lcihub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpKSB7CiAgICAgICAgICBzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIG5vZGUgaWYgaXQgaXMgYSBnZXN0dXJlcyBldmVudC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBOb2RlIHRvIHJlbW92ZSBldmVudCBsaXN0ZW5lciBmcm9tCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBMaXN0ZW5lciBmdW5jdGlvbiB0byByZW1vdmUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgaWYgKCFnZXN0dXJlcy5yZW1vdmVMaXN0ZW5lcihub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpKSB7CiAgICAgICAgICBzdXBlci5fcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcik7CiAgICAgICAgfQogICAgICB9CgogICAgfQoKICAgIHJldHVybiBHZXN0dXJlRXZlbnRMaXN0ZW5lcnM7CgogIH0pOwoKfSkoKTsKCgogIChmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICBjb25zdCBIT1NUX0RJUiA9IC86aG9zdFwoOmRpclwoKGx0cnxydGwpXClcKS9nOwogICAgY29uc3QgSE9TVF9ESVJfUkVQTEFDTUVOVCA9ICc6aG9zdChbZGlyPSIkMSJdKSc7CgogICAgY29uc3QgRUxfRElSID0gLyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nOwogICAgY29uc3QgRUxfRElSX1JFUExBQ01FTlQgPSAnOmhvc3QoW2Rpcj0iJDIiXSkgJDEnOwoKICAgIGNvbnN0IERJUl9DSEVDSyA9IC86ZGlyXCgoPzpsdHJ8cnRsKVwpLzsKICAgIAogICAgY29uc3QgU0hJTV9TSEFET1cgPSBCb29sZWFuKHdpbmRvd1snU2hhZHlET00nXSAmJiB3aW5kb3dbJ1NoYWR5RE9NJ11bJ2luVXNlJ10pOwoKICAgIC8qKgogICAgICogQHR5cGUgeyFBcnJheTwhUG9seW1lcl9EaXJNaXhpbj59CiAgICAgKi8KICAgIGNvbnN0IERJUl9JTlNUQU5DRVMgPSBbXTsKCiAgICAvKiogQHR5cGUge011dGF0aW9uT2JzZXJ2ZXJ9ICovCiAgICBsZXQgb2JzZXJ2ZXIgPSBudWxsOwoKICAgIGxldCBET0NVTUVOVF9ESVIgPSAnJzsKCiAgICBmdW5jdGlvbiBnZXRSVEwoKSB7CiAgICAgIERPQ1VNRU5UX0RJUiA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RpcicpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHshUG9seW1lcl9EaXJNaXhpbn0gaW5zdGFuY2UgSW5zdGFuY2UgdG8gc2V0IFJUTCBzdGF0dXMgb24KICAgICAqLwogICAgZnVuY3Rpb24gc2V0UlRMKGluc3RhbmNlKSB7CiAgICAgIGlmICghaW5zdGFuY2UuX19hdXRvRGlyT3B0T3V0KSB7CiAgICAgICAgY29uc3QgZWwgPSAvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8oaW5zdGFuY2UpOwogICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGlyJywgRE9DVU1FTlRfRElSKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZURpcmVjdGlvbigpIHsKICAgICAgZ2V0UlRMKCk7CiAgICAgIERPQ1VNRU5UX0RJUiA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RpcicpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IERJUl9JTlNUQU5DRVMubGVuZ3RoOyBpKyspIHsKICAgICAgICBzZXRSVEwoRElSX0lOU1RBTkNFU1tpXSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB0YWtlUmVjb3JkcygpIHsKICAgICAgaWYgKG9ic2VydmVyICYmIG9ic2VydmVyLnRha2VSZWNvcmRzKCkubGVuZ3RoKSB7CiAgICAgICAgdXBkYXRlRGlyZWN0aW9uKCk7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBhbGxvd3MgZWxlbWVudHMgdG8gdXNlIHRoZSBgOmRpcmAgQ1NTIFNlbGVjdG9yIHRvIGhhdmUKICAgICAqIHRleHQgZGlyZWN0aW9uIHNwZWNpZmljIHN0eWxpbmcuCiAgICAgKgogICAgICogV2l0aCB0aGlzIG1peGluLCBhbnkgc3R5bGVzaGVldCBwcm92aWRlZCBpbiB0aGUgdGVtcGxhdGUgd2lsbCB0cmFuc2Zvcm0gYDpkaXJgIGludG8KICAgICAqIGA6aG9zdChbZGlyXSlgIGFuZCBzeW5jIGRpcmVjdGlvbiB3aXRoIHRoZSBwYWdlIHZpYSB0aGUgZWxlbWVudCdzIGBkaXJgIGF0dHJpYnV0ZS4KICAgICAqCiAgICAgKiBFbGVtZW50cyBjYW4gb3B0IG91dCBvZiB0aGUgZ2xvYmFsIHBhZ2UgdGV4dCBkaXJlY3Rpb24gYnkgc2V0dGluZyB0aGUgYGRpcmAgYXR0cmlidXRlCiAgICAgKiBkaXJlY3RseSBpbiBgcmVhZHkoKWAgb3IgaW4gSFRNTC4KICAgICAqCiAgICAgKiBDYXZlYXRzOgogICAgICogLSBBcHBsaWNhdGlvbnMgbXVzdCBzZXQgYDxodG1sIGRpcj0ibHRyIj5gIG9yIGA8aHRtbCBkaXI9InJ0bCI+YCB0byBzeW5jIGRpcmVjdGlvbgogICAgICogLSBBdXRvbWF0aWMgbGVmdC10by1yaWdodCBvciByaWdodC10by1sZWZ0IHN0eWxpbmcgaXMgc3luYydkIHdpdGggdGhlIGA8aHRtbD5gIGVsZW1lbnQgb25seS4KICAgICAqIC0gQ2hhbmdpbmcgYGRpcmAgYXQgcnVudGltZSBpcyBzdXBwb3J0ZWQuCiAgICAgKiAtIE9wdGluZyBvdXQgb2YgdGhlIGdsb2JhbCBkaXJlY3Rpb24gc3R5bGluZyBpcyBwZXJtYW5lbnQKICAgICAqCiAgICAgKiBAbWl4aW5GdW5jdGlvbgogICAgICogQHBvbHltZXIKICAgICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5Qcm9wZXJ0eUFjY2Vzc29ycwogICAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgICAqLwogICAgUG9seW1lci5EaXJNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbigoYmFzZSkgPT4gewoKICAgICAgaWYgKCFTSElNX1NIQURPVykgewogICAgICAgIGlmICghb2JzZXJ2ZXIpIHsKICAgICAgICAgIGdldFJUTCgpOwogICAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih1cGRhdGVEaXJlY3Rpb24pOwogICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHthdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGlyJ119KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBAY29uc3RydWN0b3IKICAgICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnR5QWNjZXNzb3JzfQogICAgICAgKiBAcHJpdmF0ZQogICAgICAgKi8KICAgICAgY29uc3QgZWxlbWVudEJhc2UgPSBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzKGJhc2UpOwoKICAgICAgLyoqCiAgICAgICAqIEBwb2x5bWVyCiAgICAgICAqIEBtaXhpbkNsYXNzCiAgICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0Rpck1peGlufQogICAgICAgKi8KICAgICAgY2xhc3MgRGlyIGV4dGVuZHMgZWxlbWVudEJhc2UgewoKICAgICAgICAvKioKICAgICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoY3NzVGV4dCwgYmFzZVVSSSkgewogICAgICAgICAgY3NzVGV4dCA9IHN1cGVyLl9wcm9jZXNzU3R5bGVUZXh0KGNzc1RleHQsIGJhc2VVUkkpOwogICAgICAgICAgaWYgKCFTSElNX1NIQURPVyAmJiBESVJfQ0hFQ0sudGVzdChjc3NUZXh0KSkgewogICAgICAgICAgICBjc3NUZXh0ID0gdGhpcy5fcmVwbGFjZURpckluQ3NzVGV4dChjc3NUZXh0KTsKICAgICAgICAgICAgdGhpcy5fX2FjdGl2YXRlRGlyID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBjc3NUZXh0OwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogUmVwbGFjZSBgOmRpcmAgaW4gdGhlIGdpdmVuIENTUyB0ZXh0CiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBDU1MgdGV4dCB0byByZXBsYWNlIERJUgogICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gTW9kaWZpZWQgQ1NTCiAgICAgICAgICovCiAgICAgICAgc3RhdGljIF9yZXBsYWNlRGlySW5Dc3NUZXh0KHRleHQpIHsKICAgICAgICAgIGxldCByZXBsYWNlZFRleHQgPSB0ZXh0OwogICAgICAgICAgcmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2UoSE9TVF9ESVIsIEhPU1RfRElSX1JFUExBQ01FTlQpOwogICAgICAgICAgcmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2UoRUxfRElSLCBFTF9ESVJfUkVQTEFDTUVOVCk7CiAgICAgICAgICByZXR1cm4gcmVwbGFjZWRUZXh0OwogICAgICAgIH0KCiAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICBzdXBlcigpOwogICAgICAgICAgLyoqIEB0eXBlIHtib29sZWFufSAqLwogICAgICAgICAgdGhpcy5fX2F1dG9EaXJPcHRPdXQgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfSBDbG9zdXJlIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGF0IGB0aGlzYCBpcyBhbiBIVE1MRWxlbWVudAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgcmVhZHkoKSB7CiAgICAgICAgICBzdXBlci5yZWFkeSgpOwogICAgICAgICAgdGhpcy5fX2F1dG9EaXJPcHRPdXQgPSAvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8odGhpcykuaGFzQXR0cmlidXRlKCdkaXInKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IElmIGl0IGV4aXN0cyBvbiBlbGVtZW50QmFzZSwgaXQgY2FuIGJlIHN1cGVyJ2QKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgaWYgKGVsZW1lbnRCYXNlLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaykgewogICAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcikgewogICAgICAgICAgICB0YWtlUmVjb3JkcygpOwogICAgICAgICAgICBESVJfSU5TVEFOQ0VTLnB1c2godGhpcyk7CiAgICAgICAgICAgIHNldFJUTCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IElmIGl0IGV4aXN0cyBvbiBlbGVtZW50QmFzZSwgaXQgY2FuIGJlIHN1cGVyJ2QKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgaWYgKGVsZW1lbnRCYXNlLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaykgewogICAgICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcikgewogICAgICAgICAgICBjb25zdCBpZHggPSBESVJfSU5TVEFOQ0VTLmluZGV4T2YodGhpcyk7CiAgICAgICAgICAgIGlmIChpZHggPiAtMSkgewogICAgICAgICAgICAgIERJUl9JTlNUQU5DRVMuc3BsaWNlKGlkeCwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIERpci5fX2FjdGl2YXRlRGlyID0gZmFsc2U7CgogICAgICByZXR1cm4gRGlyOwogICAgfSk7CiAgfSkoKTsKCgoKKGZ1bmN0aW9uKCkgewoKICAndXNlIHN0cmljdCc7CgogIC8vIHJ1biBhIGNhbGxiYWNrIHdoZW4gSFRNTEltcG9ydHMgYXJlIHJlYWR5IG9yIGltbWVkaWF0ZWx5IGlmCiAgLy8gdGhpcyBhcGkgaXMgbm90IGF2YWlsYWJsZS4KICBmdW5jdGlvbiB3aGVuSW1wb3J0c1JlYWR5KGNiKSB7CiAgICBpZiAod2luZG93LkhUTUxJbXBvcnRzKSB7CiAgICAgIEhUTUxJbXBvcnRzLndoZW5SZWFkeShjYik7CiAgICB9IGVsc2UgewogICAgICBjYigpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gSFRNTCBkb2N1bWVudCBpbXBlcmF0aXZlbHkuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbmV3IGA8bGluayByZWw9ImltcG9ydCI+YCBlbGVtZW50IHdpdGgKICAgKiB0aGUgcHJvdmlkZWQgVVJMIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBkb2N1bWVudCB0byBzdGFydCBsb2FkaW5nLgogICAqIEluIHRoZSBgb25sb2FkYCBjYWxsYmFjaywgdGhlIGBpbXBvcnRgIHByb3BlcnR5IG9mIHRoZSBgbGlua2AKICAgKiBlbGVtZW50IHdpbGwgY29udGFpbiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQgY29udGVudHMuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIFVSTCB0byBkb2N1bWVudCB0byBsb2FkLgogICAqIEBwYXJhbSB7P2Z1bmN0aW9uKCFFdmVudCk6dm9pZD19IG9ubG9hZCBDYWxsYmFjayB0byBub3RpZnkgd2hlbiBhbiBpbXBvcnQgc3VjY2Vzc2Z1bGx5CiAgICogICBsb2FkZWQuCiAgICogQHBhcmFtIHs/ZnVuY3Rpb24oIUVycm9yRXZlbnQpOnZvaWQ9fSBvbmVycm9yIENhbGxiYWNrIHRvIG5vdGlmeSB3aGVuIGFuIGltcG9ydAogICAqICAgdW5zdWNjZXNzZnVsbHkgbG9hZGVkLgogICAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdEFzeW5jIFRydWUgaWYgdGhlIGltcG9ydCBzaG91bGQgYmUgbG9hZGVkIGBhc3luY2AuCiAgICogICBEZWZhdWx0cyB0byBgZmFsc2VgLgogICAqIEByZXR1cm4geyFIVE1MTGlua0VsZW1lbnR9IFRoZSBsaW5rIGVsZW1lbnQgZm9yIHRoZSBVUkwgdG8gYmUgbG9hZGVkLgogICAqLwogIFBvbHltZXIuaW1wb3J0SHJlZiA9IGZ1bmN0aW9uKGhyZWYsIG9ubG9hZCwgb25lcnJvciwgb3B0QXN5bmMpIHsKICAgIGxldCBsaW5rID0gLyoqIEB0eXBlIHtIVE1MTGlua0VsZW1lbnR9ICovCiAgICAgIChkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZj0iJyArIGhyZWYgKyAnIl1baW1wb3J0LWhyZWZdJykpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIGxpbmsgPSAvKiogQHR5cGUge0hUTUxMaW5rRWxlbWVudH0gKi8gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKSk7CiAgICAgIGxpbmsucmVsID0gJ2ltcG9ydCc7CiAgICAgIGxpbmsuaHJlZiA9IGhyZWY7CiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdpbXBvcnQtaHJlZicsICcnKTsKICAgIH0KICAgIC8vIGFsd2F5cyBlbnN1cmUgbGluayBoYXMgYGFzeW5jYCBhdHRyaWJ1dGUgaWYgdXNlciBzcGVjaWZpZWQgb25lLAogICAgLy8gZXZlbiBpZiBpdCB3YXMgcHJldmlvdXNseSBub3QgYXN5bmMuIFRoaXMgaXMgY29uc2lkZXJlZCBsZXNzIGNvbmZ1c2luZy4KICAgIGlmIChvcHRBc3luYykgewogICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnYXN5bmMnLCAnJyk7CiAgICB9CiAgICAvLyBOT1RFOiB0aGUgbGluayBtYXkgbm93IGJlIGluIDMgc3RhdGVzOiAoMSkgcGVuZGluZyBpbnNlcnRpb24sCiAgICAvLyAoMikgaW5mbGlnaHQsICgzKSBhbHJlYWR5IGxvYWRlZC4gSW4gZWFjaCBjYXNlLCB3ZSBuZWVkIHRvIGFkZAogICAgLy8gZXZlbnQgbGlzdGVuZXJzIHRvIHByb2Nlc3MgY2FsbGJhY2tzLgogICAgbGV0IGNsZWFudXAgPSBmdW5jdGlvbigpIHsKICAgICAgbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZExpc3RlbmVyKTsKICAgICAgbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwogICAgfTsKICAgIGxldCBsb2FkTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBjbGVhbnVwKCk7CiAgICAgIC8vIEluIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGxvYWQsIGNhY2hlIHRoZSBsb2FkIGV2ZW50IG9uIHRoZSBsaW5rIHNvCiAgICAgIC8vIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gc2hvcnQtY2lyY3VpdCB0aGlzIG1ldGhvZCBpbiB0aGUgZnV0dXJlIHdoZW4KICAgICAgLy8gaXQgaXMgY2FsbGVkIHdpdGggdGhlIHNhbWUgaHJlZiBwYXJhbS4KICAgICAgbGluay5fX2R5bmFtaWNJbXBvcnRMb2FkZWQgPSB0cnVlOwogICAgICBpZiAob25sb2FkKSB7CiAgICAgICAgd2hlbkltcG9ydHNSZWFkeSgoKSA9PiB7CiAgICAgICAgICBvbmxvYWQoZXZlbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgbGV0IGVycm9yTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBjbGVhbnVwKCk7CiAgICAgIC8vIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHJlbW92ZSB0aGUgbGluayBmcm9tIHRoZSBkb2N1bWVudCBzbyB0aGF0IGl0CiAgICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgYGltcG9ydEhyZWZgIGlzCiAgICAgIC8vIGNhbGxlZC4KICAgICAgaWYgKGxpbmsucGFyZW50Tm9kZSkgewogICAgICAgIGxpbmsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5rKTsKICAgICAgfQogICAgICBpZiAob25lcnJvcikgewogICAgICAgIHdoZW5JbXBvcnRzUmVhZHkoKCkgPT4gewogICAgICAgICAgb25lcnJvcihldmVudCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBsb2FkTGlzdGVuZXIpOwogICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwogICAgaWYgKGxpbmsucGFyZW50Tm9kZSA9PSBudWxsKSB7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7CiAgICAvLyBpZiB0aGUgbGluayBhbHJlYWR5IGxvYWRlZCwgZGlzcGF0Y2ggYSBmYWtlIGxvYWQgZXZlbnQKICAgIC8vIHNvIHRoYXQgbGlzdGVuZXJzIGFyZSBjYWxsZWQgYW5kIGdldCBhIHByb3BlciBldmVudCBhcmd1bWVudC4KICAgIH0gZWxzZSBpZiAobGluay5fX2R5bmFtaWNJbXBvcnRMb2FkZWQpIHsKICAgICAgbGluay5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZCcpKTsKICAgIH0KICAgIHJldHVybiBsaW5rOwogIH07Cgp9KSgpOwoKCihmdW5jdGlvbigpIHsKCiAgJ3VzZSBzdHJpY3QnOwoKICBsZXQgc2NoZWR1bGVkID0gZmFsc2U7CiAgbGV0IGJlZm9yZVJlbmRlclF1ZXVlID0gW107CiAgbGV0IGFmdGVyUmVuZGVyUXVldWUgPSBbXTsKCiAgZnVuY3Rpb24gc2NoZWR1bGUoKSB7CiAgICBzY2hlZHVsZWQgPSB0cnVlOwogICAgLy8gYmVmb3JlIG5leHQgcmVuZGVyCiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKSB7CiAgICAgIHNjaGVkdWxlZCA9IGZhbHNlOwogICAgICBmbHVzaFF1ZXVlKGJlZm9yZVJlbmRlclF1ZXVlKTsKICAgICAgLy8gYWZ0ZXIgdGhlIHJlbmRlcgogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHJ1blF1ZXVlKGFmdGVyUmVuZGVyUXVldWUpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gZmx1c2hRdWV1ZShxdWV1ZSkgewogICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCkgewogICAgICBjYWxsTWV0aG9kKHF1ZXVlLnNoaWZ0KCkpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcnVuUXVldWUocXVldWUpIHsKICAgIGZvciAobGV0IGk9MCwgbD1xdWV1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgY2FsbE1ldGhvZChxdWV1ZS5zaGlmdCgpKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGNhbGxNZXRob2QoaW5mbykgewogICAgY29uc3QgY29udGV4dCA9IGluZm9bMF07CiAgICBjb25zdCBjYWxsYmFjayA9IGluZm9bMV07CiAgICBjb25zdCBhcmdzID0gaW5mb1syXTsKICAgIHRyeSB7CiAgICAgIGNhbGxiYWNrLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgfSBjYXRjaChlKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRocm93IGU7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZmx1c2goKSB7CiAgICB3aGlsZSAoYmVmb3JlUmVuZGVyUXVldWUubGVuZ3RoIHx8IGFmdGVyUmVuZGVyUXVldWUubGVuZ3RoKSB7CiAgICAgIGZsdXNoUXVldWUoYmVmb3JlUmVuZGVyUXVldWUpOwogICAgICBmbHVzaFF1ZXVlKGFmdGVyUmVuZGVyUXVldWUpOwogICAgfQogICAgc2NoZWR1bGVkID0gZmFsc2U7CiAgfQoKICAvKioKICAgKiBNb2R1bGUgZm9yIHNjaGVkdWxpbmcgZmx1c2hhYmxlIHByZS1yZW5kZXIgYW5kIHBvc3QtcmVuZGVyIHRhc2tzLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgTW9kdWxlIGZvciBzY2hlZHVsaW5nIGZsdXNoYWJsZSBwcmUtcmVuZGVyIGFuZCBwb3N0LXJlbmRlciB0YXNrcy4KICAgKi8KICBQb2x5bWVyLlJlbmRlclN0YXR1cyA9IHsKCiAgICAvKioKICAgICAqIEVucXVldWVzIGEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBydW4gYmVmb3JlIHRoZSBuZXh0IHJlbmRlciwgYXQKICAgICAqIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIHRpbWluZy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIGVucXVldWluZyB3b3JrIHRoYXQgcmVxdWlyZXMgRE9NIG1lYXN1cmVtZW50LAogICAgICogc2luY2UgbWVhc3VyZW1lbnQgbWF5IG5vdCBiZSByZWxpYWJsZSBpbiBjdXN0b20gZWxlbWVudCBjYWxsYmFja3MgYmVmb3JlCiAgICAgKiB0aGUgZmlyc3QgcmVuZGVyLCBhcyB3ZWxsIGFzIGZvciBiYXRjaGluZyBtZWFzdXJlbWVudCB0YXNrcyBpbiBnZW5lcmFsLgogICAgICoKICAgICAqIFRhc2tzIGluIHRoaXMgcXVldWUgbWF5IGJlIGZsdXNoZWQgYnkgY2FsbGluZyBgUG9seW1lci5SZW5kZXJTdGF0dXMuZmx1c2goKWAuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUmVuZGVyU3RhdHVzCiAgICAgKiBAcGFyYW0geyp9IGNvbnRleHQgQ29udGV4dCBvYmplY3QgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgYm91bmQgdG8KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oLi4uKik6dm9pZH0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7IUFycmF5PX0gYXJncyBBbiBhcnJheSBvZiBhcmd1bWVudHMgdG8gY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aAogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgYmVmb3JlTmV4dFJlbmRlcjogZnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIGFyZ3MpIHsKICAgICAgaWYgKCFzY2hlZHVsZWQpIHsKICAgICAgICBzY2hlZHVsZSgpOwogICAgICB9CiAgICAgIGJlZm9yZVJlbmRlclF1ZXVlLnB1c2goW2NvbnRleHQsIGNhbGxiYWNrLCBhcmdzXSk7CiAgICB9LAoKICAgIC8qKgogICAgICogRW5xdWV1ZXMgYSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHJ1biBhZnRlciB0aGUgbmV4dCByZW5kZXIsIGVxdWl2YWxlbnQKICAgICAqIHRvIG9uZSB0YXNrIChgc2V0VGltZW91dGApIGFmdGVyIHRoZSBuZXh0IGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgdHVuaW5nIHRoZSBmaXJzdC1yZW5kZXIgcGVyZm9ybWFuY2Ugb2YgYW4KICAgICAqIGVsZW1lbnQgb3IgYXBwbGljYXRpb24gYnkgZGVmZXJyaW5nIG5vbi1jcml0aWNhbCB3b3JrIHVudGlsIGFmdGVyIHRoZQogICAgICogZmlyc3QgcGFpbnQuICBUeXBpY2FsIG5vbi1yZW5kZXItY3JpdGljYWwgd29yayBtYXkgaW5jbHVkZSBhZGRpbmcgVUkKICAgICAqIGV2ZW50IGxpc3RlbmVycyBhbmQgYXJpYSBhdHRyaWJ1dGVzLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlJlbmRlclN0YXR1cwogICAgICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgb2JqZWN0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGJvdW5kIHRvCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKC4uLiopOnZvaWR9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0geyFBcnJheT19IGFyZ3MgQW4gYXJyYXkgb2YgYXJndW1lbnRzIHRvIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGgKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGFmdGVyTmV4dFJlbmRlcjogZnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2ssIGFyZ3MpIHsKICAgICAgaWYgKCFzY2hlZHVsZWQpIHsKICAgICAgICBzY2hlZHVsZSgpOwogICAgICB9CiAgICAgIGFmdGVyUmVuZGVyUXVldWUucHVzaChbY29udGV4dCwgY2FsbGJhY2ssIGFyZ3NdKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBGbHVzaGVzIGFsbCBgYmVmb3JlTmV4dFJlbmRlcmAgdGFza3MsIGZvbGxvd2VkIGJ5IGFsbCBgYWZ0ZXJOZXh0UmVuZGVyYAogICAgICogdGFza3MuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUmVuZGVyU3RhdHVzCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBmbHVzaDogZmx1c2gKCiAgfTsKCn0pKCk7CgoKKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLy8gdW5yZXNvbHZlZAoKICBmdW5jdGlvbiByZXNvbHZlKCkgewogICAgZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoJ3VucmVzb2x2ZWQnKTsKICB9CgogIGlmICh3aW5kb3cuV2ViQ29tcG9uZW50cykgewogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ1dlYkNvbXBvbmVudHNSZWFkeScsIHJlc29sdmUpOwogIH0gZWxzZSB7CiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7CiAgICAgIHJlc29sdmUoKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgcmVzb2x2ZSk7CiAgICB9CiAgfQoKfSkoKTsKCgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gbmV3U3BsaWNlKGluZGV4LCByZW1vdmVkLCBhZGRlZENvdW50KSB7CiAgICByZXR1cm4gewogICAgICBpbmRleDogaW5kZXgsCiAgICAgIHJlbW92ZWQ6IHJlbW92ZWQsCiAgICAgIGFkZGVkQ291bnQ6IGFkZGVkQ291bnQKICAgIH07CiAgfQoKICBjb25zdCBFRElUX0xFQVZFID0gMDsKICBjb25zdCBFRElUX1VQREFURSA9IDE7CiAgY29uc3QgRURJVF9BREQgPSAyOwogIGNvbnN0IEVESVRfREVMRVRFID0gMzsKCiAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyAqYmFzZWQqIG9uIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgTGV2ZW5zaHRlaW4KICAvLyAiZWRpdCIgZGlzdGFuY2UuIFRoZSBvbmUgY2hhbmdlIGlzIHRoYXQgInVwZGF0ZXMiIGFyZSB0cmVhdGVkIGFzIHR3bwogIC8vIGVkaXRzIC0gbm90IG9uZS4gV2l0aCBBcnJheSBzcGxpY2VzLCBhbiB1cGRhdGUgaXMgcmVhbGx5IGEgZGVsZXRlCiAgLy8gZm9sbG93ZWQgYnkgYW4gYWRkLiBCeSByZXRhaW5pbmcgdGhpcywgd2Ugb3B0aW1pemUgZm9yICJrZWVwaW5nIiB0aGUKICAvLyBtYXhpbXVtIGFycmF5IGl0ZW1zIGluIHRoZSBvcmlnaW5hbCBhcnJheS4gRm9yIGV4YW1wbGU6CiAgLy8KICAvLyAgICd4eHh4MTIzJyAtPiAnMTIzeXl5eScKICAvLwogIC8vIFdpdGggMS1lZGl0IHVwZGF0ZXMsIHRoZSBzaG9ydGVzdCBwYXRoIHdvdWxkIGJlIGp1c3QgdG8gdXBkYXRlIGFsbCBzZXZlbgogIC8vIGNoYXJhY3RlcnMuIFdpdGggMi1lZGl0IHVwZGF0ZXMsIHdlIGRlbGV0ZSA0LCBsZWF2ZSAzLCBhbmQgYWRkIDQuIFRoaXMKICAvLyBsZWF2ZXMgdGhlIHN1YnN0cmluZyAnMTIzJyBpbnRhY3QuCiAgZnVuY3Rpb24gY2FsY0VkaXREaXN0YW5jZXMoY3VycmVudCwgY3VycmVudFN0YXJ0LCBjdXJyZW50RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpIHsKICAgIC8vICJEZWxldGlvbiIgY29sdW1ucwogICAgbGV0IHJvd0NvdW50ID0gb2xkRW5kIC0gb2xkU3RhcnQgKyAxOwogICAgbGV0IGNvbHVtbkNvdW50ID0gY3VycmVudEVuZCAtIGN1cnJlbnRTdGFydCArIDE7CiAgICBsZXQgZGlzdGFuY2VzID0gbmV3IEFycmF5KHJvd0NvdW50KTsKCiAgICAvLyAiQWRkaXRpb24iIHJvd3MuIEluaXRpYWxpemUgbnVsbCBjb2x1bW4uCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHsKICAgICAgZGlzdGFuY2VzW2ldID0gbmV3IEFycmF5KGNvbHVtbkNvdW50KTsKICAgICAgZGlzdGFuY2VzW2ldWzBdID0gaTsKICAgIH0KCiAgICAvLyBJbml0aWFsaXplIG51bGwgcm93CiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbkNvdW50OyBqKyspCiAgICAgIGRpc3RhbmNlc1swXVtqXSA9IGo7CgogICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb3dDb3VudDsgaSsrKSB7CiAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgY29sdW1uQ291bnQ7IGorKykgewogICAgICAgIGlmIChlcXVhbHMoY3VycmVudFtjdXJyZW50U3RhcnQgKyBqIC0gMV0sIG9sZFtvbGRTdGFydCArIGkgLSAxXSkpCiAgICAgICAgICBkaXN0YW5jZXNbaV1bal0gPSBkaXN0YW5jZXNbaSAtIDFdW2ogLSAxXTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGxldCBub3J0aCA9IGRpc3RhbmNlc1tpIC0gMV1bal0gKyAxOwogICAgICAgICAgbGV0IHdlc3QgPSBkaXN0YW5jZXNbaV1baiAtIDFdICsgMTsKICAgICAgICAgIGRpc3RhbmNlc1tpXVtqXSA9IG5vcnRoIDwgd2VzdCA/IG5vcnRoIDogd2VzdDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGlzdGFuY2VzOwogIH0KCiAgLy8gVGhpcyBzdGFydHMgYXQgdGhlIGZpbmFsIHdlaWdodCwgYW5kIHdhbGtzICJiYWNrd2FyZCIgYnkgZmluZGluZwogIC8vIHRoZSBtaW5pbXVtIHByZXZpb3VzIHdlaWdodCByZWN1cnNpdmVseSB1bnRpbCB0aGUgb3JpZ2luIG9mIHRoZSB3ZWlnaHQKICAvLyBtYXRyaXguCiAgZnVuY3Rpb24gc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzKGRpc3RhbmNlcykgewogICAgbGV0IGkgPSBkaXN0YW5jZXMubGVuZ3RoIC0gMTsKICAgIGxldCBqID0gZGlzdGFuY2VzWzBdLmxlbmd0aCAtIDE7CiAgICBsZXQgY3VycmVudCA9IGRpc3RhbmNlc1tpXVtqXTsKICAgIGxldCBlZGl0cyA9IFtdOwogICAgd2hpbGUgKGkgPiAwIHx8IGogPiAwKSB7CiAgICAgIGlmIChpID09IDApIHsKICAgICAgICBlZGl0cy5wdXNoKEVESVRfQUREKTsKICAgICAgICBqLS07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGogPT0gMCkgewogICAgICAgIGVkaXRzLnB1c2goRURJVF9ERUxFVEUpOwogICAgICAgIGktLTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZXQgbm9ydGhXZXN0ID0gZGlzdGFuY2VzW2kgLSAxXVtqIC0gMV07CiAgICAgIGxldCB3ZXN0ID0gZGlzdGFuY2VzW2kgLSAxXVtqXTsKICAgICAgbGV0IG5vcnRoID0gZGlzdGFuY2VzW2ldW2ogLSAxXTsKCiAgICAgIGxldCBtaW47CiAgICAgIGlmICh3ZXN0IDwgbm9ydGgpCiAgICAgICAgbWluID0gd2VzdCA8IG5vcnRoV2VzdCA/IHdlc3QgOiBub3J0aFdlc3Q7CiAgICAgIGVsc2UKICAgICAgICBtaW4gPSBub3J0aCA8IG5vcnRoV2VzdCA/IG5vcnRoIDogbm9ydGhXZXN0OwoKICAgICAgaWYgKG1pbiA9PSBub3J0aFdlc3QpIHsKICAgICAgICBpZiAobm9ydGhXZXN0ID09IGN1cnJlbnQpIHsKICAgICAgICAgIGVkaXRzLnB1c2goRURJVF9MRUFWRSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRzLnB1c2goRURJVF9VUERBVEUpOwogICAgICAgICAgY3VycmVudCA9IG5vcnRoV2VzdDsKICAgICAgICB9CiAgICAgICAgaS0tOwogICAgICAgIGotLTsKICAgICAgfSBlbHNlIGlmIChtaW4gPT0gd2VzdCkgewogICAgICAgIGVkaXRzLnB1c2goRURJVF9ERUxFVEUpOwogICAgICAgIGktLTsKICAgICAgICBjdXJyZW50ID0gd2VzdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBlZGl0cy5wdXNoKEVESVRfQUREKTsKICAgICAgICBqLS07CiAgICAgICAgY3VycmVudCA9IG5vcnRoOwogICAgICB9CiAgICB9CgogICAgZWRpdHMucmV2ZXJzZSgpOwogICAgcmV0dXJuIGVkaXRzOwogIH0KCiAgLyoqCiAgICogU3BsaWNlIFByb2plY3Rpb24gZnVuY3Rpb25zOgogICAqCiAgICogQSBzcGxpY2UgbWFwIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaG93IGEgcHJldmlvdXMgYXJyYXkgb2YgaXRlbXMKICAgKiB3YXMgdHJhbnNmb3JtZWQgaW50byBhIG5ldyBhcnJheSBvZiBpdGVtcy4gQ29uY2VwdHVhbGx5IGl0IGlzIGEgbGlzdCBvZgogICAqIHR1cGxlcyBvZgogICAqCiAgICogICA8aW5kZXgsIHJlbW92ZWQsIGFkZGVkQ291bnQ+CiAgICoKICAgKiB3aGljaCBhcmUga2VwdCBpbiBhc2NlbmRpbmcgaW5kZXggb3JkZXIgb2YuIFRoZSB0dXBsZSByZXByZXNlbnRzIHRoYXQgYXQKICAgKiB0aGUgfGluZGV4fCwgfHJlbW92ZWR8IHNlcXVlbmNlIG9mIGl0ZW1zIHdlcmUgcmVtb3ZlZCwgYW5kIGNvdW50aW5nIGZvcndhcmQKICAgKiBmcm9tIHxpbmRleHwsIHxhZGRlZENvdW50fCBpdGVtcyB3ZXJlIGFkZGVkLgogICAqLwoKICAvKioKICAgKiBMYWNraW5nIGluZGl2aWR1YWwgc3BsaWNlIG11dGF0aW9uIGluZm9ybWF0aW9uLCB0aGUgbWluaW1hbCBzZXQgb2YKICAgKiBzcGxpY2VzIGNhbiBiZSBzeW50aGVzaXplZCBnaXZlbiB0aGUgcHJldmlvdXMgc3RhdGUgYW5kIGZpbmFsIHN0YXRlIG9mIGFuCiAgICogYXJyYXkuIFRoZSBiYXNpYyBhcHByb2FjaCBpcyB0byBjYWxjdWxhdGUgdGhlIGVkaXQgZGlzdGFuY2UgbWF0cml4IGFuZAogICAqIGNob29zZSB0aGUgc2hvcnRlc3QgcGF0aCB0aHJvdWdoIGl0LgogICAqCiAgICogQ29tcGxleGl0eTogTyhsICogcCkKICAgKiAgIGw6IFRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgYXJyYXkKICAgKiAgIHA6IFRoZSBsZW5ndGggb2YgdGhlIG9sZCBhcnJheQogICAqCiAgICogQHBhcmFtIHshQXJyYXl9IGN1cnJlbnQgVGhlIGN1cnJlbnQgImNoYW5nZWQiIGFycmF5IGZvciB3aGljaCB0bwogICAqIGNhbGN1bGF0ZSBzcGxpY2VzLgogICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50U3RhcnQgU3RhcnRpbmcgaW5kZXggaW4gdGhlIGBjdXJyZW50YCBhcnJheSBmb3IKICAgKiB3aGljaCBzcGxpY2VzIGFyZSBjYWxjdWxhdGVkLgogICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50RW5kIEVuZGluZyBpbmRleCBpbiB0aGUgYGN1cnJlbnRgIGFycmF5IGZvcgogICAqIHdoaWNoIHNwbGljZXMgYXJlIGNhbGN1bGF0ZWQuCiAgICogQHBhcmFtIHshQXJyYXl9IG9sZCBUaGUgb3JpZ2luYWwgInVuY2hhbmdlZCIgYXJyYXkgdG8gY29tcGFyZSBgY3VycmVudGAKICAgKiBhZ2FpbnN0IHRvIGRldGVybWluZSBzcGxpY2VzLgogICAqIEBwYXJhbSB7bnVtYmVyfSBvbGRTdGFydCBTdGFydGluZyBpbmRleCBpbiB0aGUgYG9sZGAgYXJyYXkgZm9yCiAgICogd2hpY2ggc3BsaWNlcyBhcmUgY2FsY3VsYXRlZC4KICAgKiBAcGFyYW0ge251bWJlcn0gb2xkRW5kIEVuZGluZyBpbmRleCBpbiB0aGUgYG9sZGAgYXJyYXkgZm9yCiAgICogd2hpY2ggc3BsaWNlcyBhcmUgY2FsY3VsYXRlZC4KICAgKiBAcmV0dXJuIHshQXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZCBvYmplY3RzLiBFYWNoIG9mIHRoZXNlCiAgICogY29udGFpbnM6IGBpbmRleGAgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBzcGxpY2Ugb2NjdXJyZWQ7IGByZW1vdmVkYAogICAqIHRoZSBhcnJheSBvZiByZW1vdmVkIGl0ZW1zIGZyb20gdGhpcyBsb2NhdGlvbjsgYGFkZGVkQ291bnRgIHRoZSBudW1iZXIKICAgKiBvZiBpdGVtcyBhZGRlZCBhdCB0aGlzIGxvY2F0aW9uLgogICAqLwogIGZ1bmN0aW9uIGNhbGNTcGxpY2VzKGN1cnJlbnQsIGN1cnJlbnRTdGFydCwgY3VycmVudEVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgb2xkLCBvbGRTdGFydCwgb2xkRW5kKSB7CiAgICBsZXQgcHJlZml4Q291bnQgPSAwOwogICAgbGV0IHN1ZmZpeENvdW50ID0gMDsKICAgIGxldCBzcGxpY2U7CgogICAgbGV0IG1pbkxlbmd0aCA9IE1hdGgubWluKGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQsIG9sZEVuZCAtIG9sZFN0YXJ0KTsKICAgIGlmIChjdXJyZW50U3RhcnQgPT0gMCAmJiBvbGRTdGFydCA9PSAwKQogICAgICBwcmVmaXhDb3VudCA9IHNoYXJlZFByZWZpeChjdXJyZW50LCBvbGQsIG1pbkxlbmd0aCk7CgogICAgaWYgKGN1cnJlbnRFbmQgPT0gY3VycmVudC5sZW5ndGggJiYgb2xkRW5kID09IG9sZC5sZW5ndGgpCiAgICAgIHN1ZmZpeENvdW50ID0gc2hhcmVkU3VmZml4KGN1cnJlbnQsIG9sZCwgbWluTGVuZ3RoIC0gcHJlZml4Q291bnQpOwoKICAgIGN1cnJlbnRTdGFydCArPSBwcmVmaXhDb3VudDsKICAgIG9sZFN0YXJ0ICs9IHByZWZpeENvdW50OwogICAgY3VycmVudEVuZCAtPSBzdWZmaXhDb3VudDsKICAgIG9sZEVuZCAtPSBzdWZmaXhDb3VudDsKCiAgICBpZiAoY3VycmVudEVuZCAtIGN1cnJlbnRTdGFydCA9PSAwICYmIG9sZEVuZCAtIG9sZFN0YXJ0ID09IDApCiAgICAgIHJldHVybiBbXTsKCiAgICBpZiAoY3VycmVudFN0YXJ0ID09IGN1cnJlbnRFbmQpIHsKICAgICAgc3BsaWNlID0gbmV3U3BsaWNlKGN1cnJlbnRTdGFydCwgW10sIDApOwogICAgICB3aGlsZSAob2xkU3RhcnQgPCBvbGRFbmQpCiAgICAgICAgc3BsaWNlLnJlbW92ZWQucHVzaChvbGRbb2xkU3RhcnQrK10pOwoKICAgICAgcmV0dXJuIFsgc3BsaWNlIF07CiAgICB9IGVsc2UgaWYgKG9sZFN0YXJ0ID09IG9sZEVuZCkKICAgICAgcmV0dXJuIFsgbmV3U3BsaWNlKGN1cnJlbnRTdGFydCwgW10sIGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQpIF07CgogICAgbGV0IG9wcyA9IHNwbGljZU9wZXJhdGlvbnNGcm9tRWRpdERpc3RhbmNlcygKICAgICAgICBjYWxjRWRpdERpc3RhbmNlcyhjdXJyZW50LCBjdXJyZW50U3RhcnQsIGN1cnJlbnRFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpKTsKCiAgICBzcGxpY2UgPSB1bmRlZmluZWQ7CiAgICBsZXQgc3BsaWNlcyA9IFtdOwogICAgbGV0IGluZGV4ID0gY3VycmVudFN0YXJ0OwogICAgbGV0IG9sZEluZGV4ID0gb2xkU3RhcnQ7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgewogICAgICBzd2l0Y2gob3BzW2ldKSB7CiAgICAgICAgY2FzZSBFRElUX0xFQVZFOgogICAgICAgICAgaWYgKHNwbGljZSkgewogICAgICAgICAgICBzcGxpY2VzLnB1c2goc3BsaWNlKTsKICAgICAgICAgICAgc3BsaWNlID0gdW5kZWZpbmVkOwogICAgICAgICAgfQoKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBvbGRJbmRleCsrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBFRElUX1VQREFURToKICAgICAgICAgIGlmICghc3BsaWNlKQogICAgICAgICAgICBzcGxpY2UgPSBuZXdTcGxpY2UoaW5kZXgsIFtdLCAwKTsKCiAgICAgICAgICBzcGxpY2UuYWRkZWRDb3VudCsrOwogICAgICAgICAgaW5kZXgrKzsKCiAgICAgICAgICBzcGxpY2UucmVtb3ZlZC5wdXNoKG9sZFtvbGRJbmRleF0pOwogICAgICAgICAgb2xkSW5kZXgrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRURJVF9BREQ6CiAgICAgICAgICBpZiAoIXNwbGljZSkKICAgICAgICAgICAgc3BsaWNlID0gbmV3U3BsaWNlKGluZGV4LCBbXSwgMCk7CgogICAgICAgICAgc3BsaWNlLmFkZGVkQ291bnQrKzsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEVESVRfREVMRVRFOgogICAgICAgICAgaWYgKCFzcGxpY2UpCiAgICAgICAgICAgIHNwbGljZSA9IG5ld1NwbGljZShpbmRleCwgW10sIDApOwoKICAgICAgICAgIHNwbGljZS5yZW1vdmVkLnB1c2gob2xkW29sZEluZGV4XSk7CiAgICAgICAgICBvbGRJbmRleCsrOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3BsaWNlKSB7CiAgICAgIHNwbGljZXMucHVzaChzcGxpY2UpOwogICAgfQogICAgcmV0dXJuIHNwbGljZXM7CiAgfQoKICBmdW5jdGlvbiBzaGFyZWRQcmVmaXgoY3VycmVudCwgb2xkLCBzZWFyY2hMZW5ndGgpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoTGVuZ3RoOyBpKyspCiAgICAgIGlmICghZXF1YWxzKGN1cnJlbnRbaV0sIG9sZFtpXSkpCiAgICAgICAgcmV0dXJuIGk7CiAgICByZXR1cm4gc2VhcmNoTGVuZ3RoOwogIH0KCiAgZnVuY3Rpb24gc2hhcmVkU3VmZml4KGN1cnJlbnQsIG9sZCwgc2VhcmNoTGVuZ3RoKSB7CiAgICBsZXQgaW5kZXgxID0gY3VycmVudC5sZW5ndGg7CiAgICBsZXQgaW5kZXgyID0gb2xkLmxlbmd0aDsKICAgIGxldCBjb3VudCA9IDA7CiAgICB3aGlsZSAoY291bnQgPCBzZWFyY2hMZW5ndGggJiYgZXF1YWxzKGN1cnJlbnRbLS1pbmRleDFdLCBvbGRbLS1pbmRleDJdKSkKICAgICAgY291bnQrKzsKCiAgICByZXR1cm4gY291bnQ7CiAgfQoKICBmdW5jdGlvbiBjYWxjdWxhdGVTcGxpY2VzKGN1cnJlbnQsIHByZXZpb3VzKSB7CiAgICByZXR1cm4gY2FsY1NwbGljZXMoY3VycmVudCwgMCwgY3VycmVudC5sZW5ndGgsIHByZXZpb3VzLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMubGVuZ3RoKTsKICB9CgogIGZ1bmN0aW9uIGVxdWFscyhjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpIHsKICAgIHJldHVybiBjdXJyZW50VmFsdWUgPT09IHByZXZpb3VzVmFsdWU7CiAgfQoKICAvKioKICAgKiBAbmFtZXNwYWNlCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBNb2R1bGUgdGhhdCBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIGRpZmZpbmcgYXJyYXlzLgogICAqLwogIFBvbHltZXIuQXJyYXlTcGxpY2UgPSB7CiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZHMgaW5kaWNhdGluZyB0aGUgbWluaW11bSBlZGl0cyByZXF1aXJlZAogICAgICogdG8gdHJhbnNmb3JtIHRoZSBgcHJldmlvdXNgIGFycmF5IGludG8gdGhlIGBjdXJyZW50YCBhcnJheS4KICAgICAqCiAgICAgKiBTcGxpY2UgcmVjb3JkcyBhcmUgb3JkZXJlZCBieSBpbmRleCBhbmQgY29udGFpbiB0aGUgZm9sbG93aW5nIGZpZWxkczoKICAgICAqIC0gYGluZGV4YDogaW5kZXggd2hlcmUgZWRpdCBzdGFydGVkCiAgICAgKiAtIGByZW1vdmVkYDogYXJyYXkgb2YgcmVtb3ZlZCBpdGVtcyBmcm9tIHRoaXMgaW5kZXgKICAgICAqIC0gYGFkZGVkQ291bnRgOiBudW1iZXIgb2YgaXRlbXMgYWRkZWQgYXQgdGhpcyBpbmRleAogICAgICoKICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gdGhlIExldmVuc2h0ZWluICJtaW5pbXVtIGVkaXQgZGlzdGFuY2UiCiAgICAgKiBhbGdvcml0aG0uIE5vdGUgdGhhdCB1cGRhdGVzIGFyZSB0cmVhdGVkIGFzIHJlbW92YWwgZm9sbG93ZWQgYnkgYWRkaXRpb24uCiAgICAgKgogICAgICogVGhlIHdvcnN0LWNhc2UgdGltZSBjb21wbGV4aXR5IG9mIHRoaXMgYWxnb3JpdGhtIGlzIGBPKGwgKiBwKWAKICAgICAqICAgbDogVGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBhcnJheQogICAgICogICBwOiBUaGUgbGVuZ3RoIG9mIHRoZSBwcmV2aW91cyBhcnJheQogICAgICoKICAgICAqIEhvd2V2ZXIsIHRoZSB3b3JzdC1jYXNlIGNvbXBsZXhpdHkgaXMgcmVkdWNlZCBieSBhbiBgTyhuKWAgb3B0aW1pemF0aW9uCiAgICAgKiB0byBkZXRlY3QgYW55IHNoYXJlZCBwcmVmaXggJiBzdWZmaXggYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBhbmQgb25seQogICAgICogcGVyZm9ybSB0aGUgbW9yZSBleHBlbnNpdmUgbWluaW11bSBlZGl0IGRpc3RhbmNlIGNhbGN1bGF0aW9uIG92ZXIgdGhlCiAgICAgKiBub24tc2hhcmVkIHBvcnRpb25zIG9mIHRoZSBhcnJheXMuCiAgICAgKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5BcnJheVNwbGljZQogICAgICogQHBhcmFtIHshQXJyYXl9IGN1cnJlbnQgVGhlICJjaGFuZ2VkIiBhcnJheSBmb3Igd2hpY2ggc3BsaWNlcyB3aWxsIGJlCiAgICAgKiBjYWxjdWxhdGVkLgogICAgICogQHBhcmFtIHshQXJyYXl9IHByZXZpb3VzIFRoZSAidW5jaGFuZ2VkIiBvcmlnaW5hbCBhcnJheSB0byBjb21wYXJlCiAgICAgKiBgY3VycmVudGAgYWdhaW5zdCB0byBkZXRlcm1pbmUgdGhlIHNwbGljZXMuCiAgICAgKiBAcmV0dXJuIHshQXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZCBvYmplY3RzLiBFYWNoIG9mIHRoZXNlCiAgICAgKiBjb250YWluczogYGluZGV4YCB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIHNwbGljZSBvY2N1cnJlZDsgYHJlbW92ZWRgCiAgICAgKiB0aGUgYXJyYXkgb2YgcmVtb3ZlZCBpdGVtcyBmcm9tIHRoaXMgbG9jYXRpb247IGBhZGRlZENvdW50YCB0aGUgbnVtYmVyCiAgICAgKiBvZiBpdGVtcyBhZGRlZCBhdCB0aGlzIGxvY2F0aW9uLgogICAgICovCiAgICBjYWxjdWxhdGVTcGxpY2VzCiAgfTsKCn0pKCk7CgoKKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIGBub2RlYCBpcyBhIHNsb3QgZWxlbWVudAogICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRvIHRlc3QuCiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBgbm9kZWAgaXMgYSBzbG90CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBpc1Nsb3Qobm9kZSkgewogICAgcmV0dXJuIChub2RlLmxvY2FsTmFtZSA9PT0gJ3Nsb3QnKTsKICB9CgogIC8qKgogICAqIENsYXNzIHRoYXQgbGlzdGVucyBmb3IgY2hhbmdlcyAoYWRkaXRpb25zIG9yIHJlbW92YWxzKSB0bwogICAqICJmbGF0dGVuZWQgbm9kZXMiIG9uIGEgZ2l2ZW4gYG5vZGVgLiBUaGUgbGlzdCBvZiBmbGF0dGVuZWQgbm9kZXMgY29uc2lzdHMKICAgKiBvZiBhIG5vZGUncyBjaGlsZHJlbiBhbmQsIGZvciBhbnkgY2hpbGRyZW4gdGhhdCBhcmUgYDxzbG90PmAgZWxlbWVudHMsCiAgICogdGhlIGV4cGFuZGVkIGZsYXR0ZW5lZCBsaXN0IG9mIGBhc3NpZ25lZE5vZGVzYC4KICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIG9ic2VydmVkIG5vZGUgaGFzIGNoaWxkcmVuIGA8YT48L2E+PHNsb3Q+PC9zbG90PjxiPjwvYj5gCiAgICogYW5kIHRoZSBgPHNsb3Q+YCBoYXMgb25lIGA8ZGl2PmAgYXNzaWduZWQgdG8gaXQsIHRoZW4gdGhlIGZsYXR0ZW5lZAogICAqIG5vZGVzIGxpc3QgaXMgYDxhPjwvYT48ZGl2PjwvZGl2PjxiPjwvYj5gLiBJZiB0aGUgYDxzbG90PmAgaGFzIG90aGVyCiAgICogYDxzbG90PmAgZWxlbWVudHMgYXNzaWduZWQgdG8gaXQsIHRoZXNlIGFyZSBmbGF0dGVuZWQgYXMgd2VsbC4KICAgKgogICAqIFRoZSBwcm92aWRlZCBgY2FsbGJhY2tgIGlzIGNhbGxlZCB3aGVuZXZlciBhbnkgY2hhbmdlIHRvIHRoaXMgbGlzdAogICAqIG9mIGZsYXR0ZW5lZCBub2RlcyBvY2N1cnMsIHdoZXJlIGFuIGFkZGl0aW9uIG9yIHJlbW92YWwgb2YgYSBub2RlIGlzCiAgICogY29uc2lkZXJlZCBhIGNoYW5nZS4gVGhlIGBjYWxsYmFja2AgaXMgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50LCBhbiBvYmplY3QKICAgKiBjb250YWluaW5nIGFuIGFycmF5IG9mIGFueSBgYWRkZWROb2Rlc2AgYW5kIGByZW1vdmVkTm9kZXNgLgogICAqCiAgICogTm90ZTogdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBhc3luY2hyb25vdXMgdG8gYW55IGNoYW5nZXMKICAgKiBhdCBhIG1pY3JvdGFzayBjaGVja3BvaW50LiBUaGlzIGlzIGJlY2F1c2Ugb2JzZXJ2YXRpb24gaXMgcGVyZm9ybWVkIHVzaW5nCiAgICogYE11dGF0aW9uT2JzZXJ2ZXJgIGFuZCB0aGUgYDxzbG90PmAgZWxlbWVudCdzIGBzbG90Y2hhbmdlYCBldmVudCB3aGljaAogICAqIGFyZSBhc3luY2hyb25vdXMuCiAgICoKICAgKiBBbiBleGFtcGxlOgogICAqIGBgYGpzCiAgICogY2xhc3MgVGVzdFNlbGZPYnNlcnZlIGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHsKICAgKiAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAndGVzdC1zZWxmLW9ic2VydmUnO30KICAgKiAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAqICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAqICAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXIodGhpcywgKGluZm8pID0+IHsKICAgKiAgICAgICB0aGlzLmluZm8gPSBpbmZvOwogICAqICAgICB9KTsKICAgKiAgIH0KICAgKiAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAqICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAqICAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICogICB9CiAgICogfQogICAqIGN1c3RvbUVsZW1lbnRzLmRlZmluZShUZXN0U2VsZk9ic2VydmUuaXMsIFRlc3RTZWxmT2JzZXJ2ZSk7CiAgICogYGBgCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IENsYXNzIHRoYXQgbGlzdGVucyBmb3IgY2hhbmdlcyAoYWRkaXRpb25zIG9yIHJlbW92YWxzKSB0bwogICAqICJmbGF0dGVuZWQgbm9kZXMiIG9uIGEgZ2l2ZW4gYG5vZGVgLgogICAqLwogIGNsYXNzIEZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXIgewoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBmbGF0dGVuZWQgbm9kZXMgZm9yIHRoZSBnaXZlbiBgbm9kZWAuCiAgICAgKiBUaGlzIGxpc3QgY29uc2lzdHMgb2YgYSBub2RlJ3MgY2hpbGRyZW4gYW5kLCBmb3IgYW55IGNoaWxkcmVuCiAgICAgKiB0aGF0IGFyZSBgPHNsb3Q+YCBlbGVtZW50cywgdGhlIGV4cGFuZGVkIGZsYXR0ZW5lZCBsaXN0IG9mIGBhc3NpZ25lZE5vZGVzYC4KICAgICAqIEZvciBleGFtcGxlLCBpZiB0aGUgb2JzZXJ2ZWQgbm9kZSBoYXMgY2hpbGRyZW4gYDxhPjwvYT48c2xvdD48L3Nsb3Q+PGI+PC9iPmAKICAgICAqIGFuZCB0aGUgYDxzbG90PmAgaGFzIG9uZSBgPGRpdj5gIGFzc2lnbmVkIHRvIGl0LCB0aGVuIHRoZSBmbGF0dGVuZWQKICAgICAqIG5vZGVzIGxpc3QgaXMgYDxhPjwvYT48ZGl2PjwvZGl2PjxiPjwvYj5gLiBJZiB0aGUgYDxzbG90PmAgaGFzIG90aGVyCiAgICAgKiBgPHNsb3Q+YCBlbGVtZW50cyBhc3NpZ25lZCB0byBpdCwgdGhlc2UgYXJlIGZsYXR0ZW5lZCBhcyB3ZWxsLgogICAgICoKICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8SFRNTFNsb3RFbGVtZW50fSBub2RlIFRoZSBub2RlIGZvciB3aGljaCB0byByZXR1cm4gdGhlIGxpc3Qgb2YgZmxhdHRlbmVkIG5vZGVzLgogICAgICogQHJldHVybiB7QXJyYXl9IFRoZSBsaXN0IG9mIGZsYXR0ZW5lZCBub2RlcyBmb3IgdGhlIGdpdmVuIGBub2RlYC4KICAgICovCiAgICBzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMobm9kZSkgewogICAgICBpZiAoaXNTbG90KG5vZGUpKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7SFRNTFNsb3RFbGVtZW50fSAqLyhub2RlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWFzc2lnbgogICAgICAgIHJldHVybiBub2RlLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46IHRydWV9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShub2RlLmNoaWxkTm9kZXMpLm1hcCgobm9kZSkgPT4gewogICAgICAgICAgaWYgKGlzU2xvdChub2RlKSkgewogICAgICAgICAgICBub2RlID0gLyoqIEB0eXBlIHtIVE1MU2xvdEVsZW1lbnR9ICovKG5vZGUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtYXNzaWduCiAgICAgICAgICAgIHJldHVybiBub2RlLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46IHRydWV9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBbbm9kZV07CiAgICAgICAgICB9CiAgICAgICAgfSkucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCBOb2RlIG9uIHdoaWNoIHRvIGxpc3RlbiBmb3IgY2hhbmdlcy4KICAgICAqIEBwYXJhbSB7P2Z1bmN0aW9uKCFFbGVtZW50LCB7IHRhcmdldDogIUVsZW1lbnQsIGFkZGVkTm9kZXM6ICFBcnJheTwhRWxlbWVudD4sIHJlbW92ZWROb2RlczogIUFycmF5PCFFbGVtZW50PiB9KTp2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgYWRkaXRpb25zCiAgICAgKiBvciByZW1vdmFscyBmcm9tIHRoZSB0YXJnZXQncyBsaXN0IG9mIGZsYXR0ZW5lZCBub2Rlcy4KICAgICovCiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIGNhbGxiYWNrKSB7CiAgICAgIC8qKgogICAgICAgKiBAdHlwZSB7TXV0YXRpb25PYnNlcnZlcn0KICAgICAgICogQHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciA9IG51bGw7CiAgICAgIC8qKgogICAgICAgKiBAdHlwZSB7TXV0YXRpb25PYnNlcnZlcn0KICAgICAgICogQHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIgPSBudWxsOwogICAgICB0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZTsKICAgICAgLyoqCiAgICAgICAqIEB0eXBlIHtFbGVtZW50fQogICAgICAgKiBAcHJpdmF0ZQogICAgICAgKi8KICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0OwogICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgIHRoaXMuX2VmZmVjdGl2ZU5vZGVzID0gW107CiAgICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDsKICAgICAgdGhpcy5fc2NoZWR1bGVkID0gZmFsc2U7CiAgICAgIC8qKgogICAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKX0KICAgICAgICogQHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMuX2JvdW5kU2NoZWR1bGUgPSAoKSA9PiB7CiAgICAgICAgdGhpcy5fc2NoZWR1bGUoKTsKICAgICAgfTsKICAgICAgdGhpcy5jb25uZWN0KCk7CiAgICAgIHRoaXMuX3NjaGVkdWxlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBY3RpdmF0ZXMgYW4gb2JzZXJ2ZXIuIFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4KICAgICAqIGEgYEZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXJgIGlzIGNyZWF0ZWQuIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB0bwogICAgICogcmUtYWN0aXZhdGUgYW4gb2JzZXJ2ZXIgdGhhdCBoYXMgYmVlbiBkZWFjdGl2YXRlZCB2aWEgdGhlIGBkaXNjb25uZWN0YCBtZXRob2QuCiAgICAgKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgY29ubmVjdCgpIHsKICAgICAgaWYgKGlzU2xvdCh0aGlzLl90YXJnZXQpKSB7CiAgICAgICAgdGhpcy5fbGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOwogICAgICB9IGVsc2UgaWYgKHRoaXMuX3RhcmdldC5jaGlsZHJlbikgewogICAgICAgIHRoaXMuX2xpc3RlblNsb3RzKHRoaXMuX3RhcmdldC5jaGlsZHJlbik7CiAgICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSkgewogICAgICAgICAgdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyID0KICAgICAgICAgICAgU2hhZHlET00ub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3RhcmdldCwgKG11dGF0aW9ucykgPT4gewogICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NNdXRhdGlvbnMobXV0YXRpb25zKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIgPQogICAgICAgICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc011dGF0aW9ucyhtdXRhdGlvbnMpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQsIHtjaGlsZExpc3Q6IHRydWV9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5fY29ubmVjdGVkID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIERlYWN0aXZhdGVzIHRoZSBmbGF0dGVuZWQgbm9kZXMgb2JzZXJ2ZXIuIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QKICAgICAqIHRoZSBvYnNlcnZlciBjYWxsYmFjayB3aWxsIG5vdCBiZSBjYWxsZWQgd2hlbiBjaGFuZ2VzIHRvIGZsYXR0ZW5lZCBub2RlcwogICAgICogb2NjdXIuIFRoZSBgY29ubmVjdGAgbWV0aG9kIG1heSBiZSBzdWJzZXF1ZW50bHkgY2FsbGVkIHRvIHJlYWN0aXZhdGUKICAgICAqIHRoZSBvYnNlcnZlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBkaXNjb25uZWN0KCkgewogICAgICBpZiAoaXNTbG90KHRoaXMuX3RhcmdldCkpIHsKICAgICAgICB0aGlzLl91bmxpc3RlblNsb3RzKFt0aGlzLl90YXJnZXRdKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXJnZXQuY2hpbGRyZW4pIHsKICAgICAgICB0aGlzLl91bmxpc3RlblNsb3RzKHRoaXMuX3RhcmdldC5jaGlsZHJlbik7CiAgICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSAmJiB0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIpIHsKICAgICAgICAgIFNoYWR5RE9NLnVub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcik7CiAgICAgICAgICB0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIgPSBudWxsOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcikgewogICAgICAgICAgdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICB0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5fY29ubmVjdGVkID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgX3NjaGVkdWxlKCkgewogICAgICBpZiAoIXRoaXMuX3NjaGVkdWxlZCkgewogICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IHRydWU7CiAgICAgICAgUG9seW1lci5Bc3luYy5taWNyb1Rhc2sucnVuKCgpID0+IHRoaXMuZmx1c2goKSk7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSB7QXJyYXk8TXV0YXRpb25SZWNvcmQ+fSBtdXRhdGlvbnMgTXV0YXRpb25zIHNpZ25hbGVkIGJ5IHRoZSBtdXRhdGlvbiBvYnNlcnZlcgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIF9wcm9jZXNzTXV0YXRpb25zKG11dGF0aW9ucykgewogICAgICB0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhtdXRhdGlvbnMpOwogICAgICB0aGlzLmZsdXNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0ge0FycmF5PE11dGF0aW9uUmVjb3JkPn0gbXV0YXRpb25zIE11dGF0aW9ucyBzaWduYWxlZCBieSB0aGUgbXV0YXRpb24gb2JzZXJ2ZXIKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBfcHJvY2Vzc1Nsb3RNdXRhdGlvbnMobXV0YXRpb25zKSB7CiAgICAgIGlmIChtdXRhdGlvbnMpIHsKICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBtdXRhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGxldCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTsKICAgICAgICAgIGlmIChtdXRhdGlvbi5hZGRlZE5vZGVzKSB7CiAgICAgICAgICAgIHRoaXMuX2xpc3RlblNsb3RzKG11dGF0aW9uLmFkZGVkTm9kZXMpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG11dGF0aW9uLnJlbW92ZWROb2RlcykgewogICAgICAgICAgICB0aGlzLl91bmxpc3RlblNsb3RzKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGbHVzaGVzIHRoZSBvYnNlcnZlciBjYXVzaW5nIGFueSBwZW5kaW5nIGNoYW5nZXMgdG8gYmUgaW1tZWRpYXRlbHkKICAgICAqIGRlbGl2ZXJlZCB0aGUgb2JzZXJ2ZXIgY2FsbGJhY2suIEJ5IGRlZmF1bHQgdGhlc2UgY2hhbmdlcyBhcmUgZGVsaXZlcmVkCiAgICAgKiBhc3luY2hyb25vdXNseSBhdCB0aGUgbmV4dCBtaWNyb3Rhc2sgY2hlY2twb2ludC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYW55IHBlbmRpbmcgY2hhbmdlcyBjYXVzZWQgdGhlIG9ic2VydmVyCiAgICAgKiBjYWxsYmFjayB0byBydW4uCiAgICAgKi8KICAgIGZsdXNoKCkgewogICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RlZCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAod2luZG93LlNoYWR5RE9NKSB7CiAgICAgICAgU2hhZHlET00uZmx1c2goKTsKICAgICAgfQogICAgICBpZiAodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcikgewogICAgICAgIHRoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5fcHJvY2Vzc1Nsb3RNdXRhdGlvbnModGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpOwogICAgICB9CiAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IGZhbHNlOwogICAgICBsZXQgaW5mbyA9IHsKICAgICAgICB0YXJnZXQ6IHRoaXMuX3RhcmdldCwKICAgICAgICBhZGRlZE5vZGVzOiBbXSwKICAgICAgICByZW1vdmVkTm9kZXM6IFtdCiAgICAgIH07CiAgICAgIGxldCBuZXdOb2RlcyA9IHRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KTsKICAgICAgbGV0IHNwbGljZXMgPSBQb2x5bWVyLkFycmF5U3BsaWNlLmNhbGN1bGF0ZVNwbGljZXMobmV3Tm9kZXMsCiAgICAgICAgdGhpcy5fZWZmZWN0aXZlTm9kZXMpOwogICAgICAvLyBwcm9jZXNzIHJlbW92YWxzCiAgICAgIGZvciAobGV0IGk9MCwgczsgKGk8c3BsaWNlcy5sZW5ndGgpICYmIChzPXNwbGljZXNbaV0pOyBpKyspIHsKICAgICAgICBmb3IgKGxldCBqPTAsIG47IChqIDwgcy5yZW1vdmVkLmxlbmd0aCkgJiYgKG49cy5yZW1vdmVkW2pdKTsgaisrKSB7CiAgICAgICAgICBpbmZvLnJlbW92ZWROb2Rlcy5wdXNoKG4pOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBwcm9jZXNzIGFkZHMKICAgICAgZm9yIChsZXQgaT0wLCBzOyAoaTxzcGxpY2VzLmxlbmd0aCkgJiYgKHM9c3BsaWNlc1tpXSk7IGkrKykgewogICAgICAgIGZvciAobGV0IGo9cy5pbmRleDsgaiA8IHMuaW5kZXggKyBzLmFkZGVkQ291bnQ7IGorKykgewogICAgICAgICAgaW5mby5hZGRlZE5vZGVzLnB1c2gobmV3Tm9kZXNbal0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyB1cGRhdGUgY2FjaGUKICAgICAgdGhpcy5fZWZmZWN0aXZlTm9kZXMgPSBuZXdOb2RlczsKICAgICAgbGV0IGRpZEZsdXNoID0gZmFsc2U7CiAgICAgIGlmIChpbmZvLmFkZGVkTm9kZXMubGVuZ3RoIHx8IGluZm8ucmVtb3ZlZE5vZGVzLmxlbmd0aCkgewogICAgICAgIGRpZEZsdXNoID0gdHJ1ZTsKICAgICAgICB0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5fdGFyZ2V0LCBpbmZvKTsKICAgICAgfQogICAgICByZXR1cm4gZGlkRmx1c2g7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0geyFBcnJheTxFbGVtZW50fE5vZGU+fCFOb2RlTGlzdDxOb2RlPn0gbm9kZUxpc3QgTm9kZXMgdGhhdCBjb3VsZCBjaGFuZ2UKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBfbGlzdGVuU2xvdHMobm9kZUxpc3QpIHsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgbiA9IG5vZGVMaXN0W2ldOwogICAgICAgIGlmIChpc1Nsb3QobikpIHsKICAgICAgICAgIG4uYWRkRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMuX2JvdW5kU2NoZWR1bGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHshQXJyYXk8RWxlbWVudHxOb2RlPnwhTm9kZUxpc3Q8Tm9kZT59IG5vZGVMaXN0IE5vZGVzIHRoYXQgY291bGQgY2hhbmdlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgX3VubGlzdGVuU2xvdHMobm9kZUxpc3QpIHsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgbiA9IG5vZGVMaXN0W2ldOwogICAgICAgIGlmIChpc1Nsb3QobikpIHsKICAgICAgICAgIG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMuX2JvdW5kU2NoZWR1bGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB9CgogIFBvbHltZXIuRmxhdHRlbmVkTm9kZXNPYnNlcnZlciA9IEZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXI7Cgp9KSgpOwoKCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGxldCBkZWJvdW5jZXJRdWV1ZSA9IFtdOwoKICAvKioKICAgKiBBZGRzIGEgYFBvbHltZXIuRGVib3VuY2VyYCB0byBhIGxpc3Qgb2YgZ2xvYmFsbHkgZmx1c2hhYmxlIHRhc2tzLgogICAqCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAcGFyYW0geyFQb2x5bWVyLkRlYm91bmNlcn0gZGVib3VuY2VyIERlYm91bmNlciB0byBlbnF1ZXVlCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLmVucXVldWVEZWJvdW5jZXIgPSBmdW5jdGlvbihkZWJvdW5jZXIpIHsKICAgIGRlYm91bmNlclF1ZXVlLnB1c2goZGVib3VuY2VyKTsKICB9OwoKICBmdW5jdGlvbiBmbHVzaERlYm91bmNlcnMoKSB7CiAgICBjb25zdCBkaWRGbHVzaCA9IEJvb2xlYW4oZGVib3VuY2VyUXVldWUubGVuZ3RoKTsKICAgIHdoaWxlIChkZWJvdW5jZXJRdWV1ZS5sZW5ndGgpIHsKICAgICAgdHJ5IHsKICAgICAgICBkZWJvdW5jZXJRdWV1ZS5zaGlmdCgpLmZsdXNoKCk7CiAgICAgIH0gY2F0Y2goZSkgewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRpZEZsdXNoOwogIH0KCiAgLyoqCiAgICogRm9yY2VzIHNldmVyYWwgY2xhc3NlcyBvZiBhc3luY2hyb25vdXNseSBxdWV1ZWQgdGFza3MgdG8gZmx1c2g6CiAgICogLSBEZWJvdW5jZXJzIGFkZGVkIHZpYSBgZW5xdWV1ZURlYm91bmNlcmAKICAgKiAtIFNoYWR5RE9NIGRpc3RyaWJ1dGlvbgogICAqCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqLwogIFBvbHltZXIuZmx1c2ggPSBmdW5jdGlvbigpIHsKICAgIGxldCBzaGFkeURPTSwgZGVib3VuY2VyczsKICAgIGRvIHsKICAgICAgc2hhZHlET00gPSB3aW5kb3cuU2hhZHlET00gJiYgU2hhZHlET00uZmx1c2goKTsKICAgICAgaWYgKHdpbmRvdy5TaGFkeUNTUyAmJiB3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0pIHsKICAgICAgICB3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKTsKICAgICAgfQogICAgICBkZWJvdW5jZXJzID0gZmx1c2hEZWJvdW5jZXJzKCk7CiAgICB9IHdoaWxlIChzaGFkeURPTSB8fCBkZWJvdW5jZXJzKTsKICB9OwoKfSkoKTsKCgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCBwID0gRWxlbWVudC5wcm90b3R5cGU7CiAgLyoqCiAgICogQGNvbnN0IHtmdW5jdGlvbih0aGlzOk5vZGUsIHN0cmluZyk6IGJvb2xlYW59CiAgICovCiAgY29uc3Qgbm9ybWFsaXplZE1hdGNoZXNTZWxlY3RvciA9IHAubWF0Y2hlcyB8fCBwLm1hdGNoZXNTZWxlY3RvciB8fAogICAgcC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcC5tc01hdGNoZXNTZWxlY3RvciB8fAogICAgcC5vTWF0Y2hlc1NlbGVjdG9yIHx8IHAud2Via2l0TWF0Y2hlc1NlbGVjdG9yOwoKICAvKioKICAgKiBDcm9zcy1wbGF0Zm9ybSBgZWxlbWVudC5tYXRjaGVzYCBzaGltLgogICAqCiAgICogQGZ1bmN0aW9uIG1hdGNoZXNTZWxlY3RvcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyLmRvbQogICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byBjaGVjayBzZWxlY3RvciBhZ2FpbnN0CiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIG1hdGNoCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBub2RlIG1hdGNoZWQgc2VsZWN0b3IKICAgKi8KICBjb25zdCBtYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCBzZWxlY3RvcikgewogICAgcmV0dXJuIG5vcm1hbGl6ZWRNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvcik7CiAgfTsKCiAgLyoqCiAgICogTm9kZSBBUEkgd3JhcHBlciBjbGFzcyByZXR1cm5lZCBmcm9tIGBQb2x5bWVyLmRvbS4odGFyZ2V0KWAgd2hlbgogICAqIGB0YXJnZXRgIGlzIGEgYE5vZGVgLgogICAqCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKi8KICBjbGFzcyBEb21BcGkgewoKICAgIC8qKgogICAgICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgZm9yIHdoaWNoIHRvIGNyZWF0ZSBhIFBvbHltZXIuZG9tIGhlbHBlciBvYmplY3QuCiAgICAgKi8KICAgIGNvbnN0cnVjdG9yKG5vZGUpIHsKICAgICAgdGhpcy5ub2RlID0gbm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgYFBvbHltZXIuRmxhdHRlbmVkTm9kZXNPYnNlcnZlcmAgdGhhdAogICAgICogbGlzdGVucyBmb3Igbm9kZSBjaGFuZ2VzIG9uIHRoaXMgZWxlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFbGVtZW50LCB7IHRhcmdldDogIUVsZW1lbnQsIGFkZGVkTm9kZXM6ICFBcnJheTwhRWxlbWVudD4sIHJlbW92ZWROb2RlczogIUFycmF5PCFFbGVtZW50PiB9KTp2b2lkfSBjYWxsYmFjayBDYWxsZWQgd2hlbiBkaXJlY3Qgb3IgZGlzdHJpYnV0ZWQgY2hpbGRyZW4KICAgICAqICAgb2YgdGhpcyBlbGVtZW50IGNoYW5nZXMKICAgICAqIEByZXR1cm4geyFQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXJ9IE9ic2VydmVyIGluc3RhbmNlCiAgICAgKi8KICAgIG9ic2VydmVOb2RlcyhjYWxsYmFjaykgewogICAgICByZXR1cm4gbmV3IFBvbHltZXIuRmxhdHRlbmVkTm9kZXNPYnNlcnZlcih0aGlzLm5vZGUsIGNhbGxiYWNrKTsKICAgIH0KCiAgICAvKioKICAgICAqIERpc2Nvbm5lY3RzIGFuIG9ic2VydmVyIHByZXZpb3VzbHkgY3JlYXRlZCB2aWEgYG9ic2VydmVOb2Rlc2AKICAgICAqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXJ9IG9ic2VydmVySGFuZGxlIE9ic2VydmVyIGluc3RhbmNlCiAgICAgKiAgIHRvIGRpc2Nvbm5lY3QuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB1bm9ic2VydmVOb2RlcyhvYnNlcnZlckhhbmRsZSkgewogICAgICBvYnNlcnZlckhhbmRsZS5kaXNjb25uZWN0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm92aWRlZCBhcyBhIGJhY2t3YXJkcy1jb21wYXRpYmxlIEFQSSBvbmx5LiAgVGhpcyBtZXRob2QgZG9lcyBub3RoaW5nLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgbm90aWZ5T2JzZXJ2ZXIoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBub2RlIGlzIGNvbnRhaW5lZCB3aXRoIHRoaXMgZWxlbWVudCdzCiAgICAgKiBsaWdodC1ET00gY2hpbGRyZW4gb3Igc2hhZG93IHJvb3QsIGluY2x1ZGluZyBhbnkgbmVzdGVkIHNoYWRvdyByb290cwogICAgICogb2YgY2hpbGRyZW4gdGhlcmVpbi4KICAgICAqCiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byB0ZXN0CiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGBub2RlYCBpcyBjb250YWluZWQgd2l0aGluCiAgICAgKiAgIHRoaXMgZWxlbWVudCdzIGxpZ2h0IG9yIHNoYWRvdyBET00uCiAgICAgKi8KICAgIGRlZXBDb250YWlucyhub2RlKSB7CiAgICAgIGlmICh0aGlzLm5vZGUuY29udGFpbnMobm9kZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgbiA9IG5vZGU7CiAgICAgIGxldCBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQ7CiAgICAgIC8vIHdhbGsgZnJvbSBub2RlIHRvIGB0aGlzYCBvciBgZG9jdW1lbnRgCiAgICAgIHdoaWxlIChuICYmIG4gIT09IGRvYyAmJiBuICE9PSB0aGlzLm5vZGUpIHsKICAgICAgICAvLyB1c2UgbG9naWNhbCBwYXJlbnRub2RlLCBvciBuYXRpdmUgU2hhZG93Um9vdCBob3N0CiAgICAgICAgbiA9IG4ucGFyZW50Tm9kZSB8fCBuLmhvc3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIG4gPT09IHRoaXMubm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJvb3Qgbm9kZSBvZiB0aGlzIG5vZGUuICBFcXVpdmFsZW50IHRvIGBnZXRSb29kTm9kZSgpYC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHtOb2RlfSBUb3AgbW9zdCBlbGVtZW50IGluIHRoZSBkb20gdHJlZSBpbiB3aGljaCB0aGUgbm9kZQogICAgICogZXhpc3RzLiBJZiB0aGUgbm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb2N1bWVudCB0aGlzIGlzIGVpdGhlciBhCiAgICAgKiBzaGFkb3dSb290IG9yIHRoZSBkb2N1bWVudDsgb3RoZXJ3aXNlLCBpdCBtYXkgYmUgdGhlIG5vZGUKICAgICAqIGl0c2VsZiBvciBhIG5vZGUgb3IgZG9jdW1lbnQgZnJhZ21lbnQgY29udGFpbmluZyBpdC4KICAgICAqLwogICAgZ2V0T3duZXJSb290KCkgewogICAgICByZXR1cm4gdGhpcy5ub2RlLmdldFJvb3ROb2RlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3Igc2xvdCBlbGVtZW50cywgcmV0dXJucyB0aGUgbm9kZXMgYXNzaWduZWQgdG8gdGhlIHNsb3Q7IG90aGVyd2lzZQogICAgICogYW4gZW1wdHkgYXJyYXkuIEl0IGlzIGVxdWl2YWxlbnQgdG8gYDxzbG90Pi5hZGRpZ25lZE5vZGVzKHtmbGF0dGVuOnRydWV9KWAuCiAgICAgKgogICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gQXJyYXkgb2YgYXNzaWduZWQgbm9kZXMKICAgICAqLwogICAgZ2V0RGlzdHJpYnV0ZWROb2RlcygpIHsKICAgICAgcmV0dXJuICh0aGlzLm5vZGUubG9jYWxOYW1lID09PSAnc2xvdCcpID8KICAgICAgICB0aGlzLm5vZGUuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjogdHJ1ZX0pIDoKICAgICAgICBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHNsb3RzIHRoaXMgZWxlbWVudCB3YXMgZGlzdHJpYnV0ZWQgdG8uCiAgICAgKgogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU2xvdEVsZW1lbnQ+fSBEZXNjcmlwdGlvbgogICAgICovCiAgICBnZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpIHsKICAgICAgbGV0IGlwJCA9IFtdOwogICAgICBsZXQgbiA9IHRoaXMubm9kZS5hc3NpZ25lZFNsb3Q7CiAgICAgIHdoaWxlIChuKSB7CiAgICAgICAgaXAkLnB1c2gobik7CiAgICAgICAgbiA9IG4uYXNzaWduZWRTbG90OwogICAgICB9CiAgICAgIHJldHVybiBpcCQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxscyBgaW1wb3J0Tm9kZWAgb24gdGhlIGBvd25lckRvY3VtZW50YCBmb3IgdGhpcyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byBpbXBvcnQKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGVlcCBUcnVlIGlmIHRoZSBub2RlIHNob3VsZCBiZSBjbG9uZWQgZGVlcGx5IGR1cmluZwogICAgICogICBpbXBvcnQKICAgICAqIEByZXR1cm4ge05vZGV9IENsb25lIG9mIGdpdmVuIG5vZGUgaW1wb3J0ZWQgdG8gdGhpcyBvd25lciBkb2N1bWVudAogICAgICovCiAgICBpbXBvcnROb2RlKG5vZGUsIGRlZXApIHsKICAgICAgbGV0IGRvYyA9IHRoaXMubm9kZSBpbnN0YW5jZW9mIERvY3VtZW50ID8gdGhpcy5ub2RlIDoKICAgICAgICB0aGlzLm5vZGUub3duZXJEb2N1bWVudDsKICAgICAgcmV0dXJuIGRvYy5pbXBvcnROb2RlKG5vZGUsIGRlZXApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gUmV0dXJucyBhIGZsYXR0ZW5lZCBsaXN0IG9mIGFsbCBjaGlsZCBub2RlcyBhbmQKICAgICAqIG5vZGVzIGFzc2lnbmVkIHRvIGNoaWxkIHNsb3RzLgogICAgICovCiAgICBnZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkgewogICAgICByZXR1cm4gUG9seW1lci5GbGF0dGVuZWROb2Rlc09ic2VydmVyLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMubm9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZmlsdGVyZWQgbGlzdCBvZiBmbGF0dGVuZWQgY2hpbGQgZWxlbWVudHMgZm9yIHRoaXMgZWxlbWVudCBiYXNlZAogICAgICogb24gdGhlIGdpdmVuIHNlbGVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byBmaWx0ZXIgbm9kZXMgYWdhaW5zdAogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MRWxlbWVudD59IExpc3Qgb2YgZmxhdHRlbmVkIGNoaWxkIGVsZW1lbnRzCiAgICAgKi8KICAgIHF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzZWxlY3RvcikgewogICAgICBsZXQgYyQgPSB0aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgbGV0IGxpc3QgPSBbXTsKICAgICAgZm9yIChsZXQgaT0wLCBsPWMkLmxlbmd0aCwgYzsgKGk8bCkgJiYgKGM9YyRbaV0pOyBpKyspIHsKICAgICAgICBpZiAoKGMubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSAmJgogICAgICAgICAgICBtYXRjaGVzU2VsZWN0b3IoYywgc2VsZWN0b3IpKSB7CiAgICAgICAgICBsaXN0LnB1c2goYyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBsaXN0OwogICAgfQoKICAgIC8qKgogICAgICogRm9yIHNoYWRvdyByb290cywgcmV0dXJucyB0aGUgY3VycmVudGx5IGZvY3VzZWQgZWxlbWVudCB3aXRoaW4gdGhpcwogICAgICogc2hhZG93IHJvb3QuCiAgICAgKgogICAgICogQHJldHVybiB7Tm9kZXx1bmRlZmluZWR9IEN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnQKICAgICAqLwogICAgZ2V0IGFjdGl2ZUVsZW1lbnQoKSB7CiAgICAgIGxldCBub2RlID0gdGhpcy5ub2RlOwogICAgICByZXR1cm4gbm9kZS5fYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gbm9kZS5fYWN0aXZlRWxlbWVudCA6IG5vZGUuYWN0aXZlRWxlbWVudDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGZvcndhcmRNZXRob2RzKHByb3RvLCBtZXRob2RzKSB7CiAgICBmb3IgKGxldCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGxldCBtZXRob2QgPSBtZXRob2RzW2ldOwogICAgICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwogICAgICBwcm90b1ttZXRob2RdID0gLyoqIEB0aGlzIHtEb21BcGl9ICovIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLm5vZGVbbWV0aG9kXS5hcHBseSh0aGlzLm5vZGUsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICAgIC8qIGVzbGludC1lbmFibGUgKi8KICAgIH0KICB9CgogIGZ1bmN0aW9uIGZvcndhcmRSZWFkT25seVByb3BlcnRpZXMocHJvdG8sIHByb3BlcnRpZXMpIHsKICAgIGZvciAobGV0IGk9MDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IG5hbWUgPSBwcm9wZXJ0aWVzW2ldOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc3QgZG9tQXBpID0gLyoqIEB0eXBlIHtEb21BcGl9ICovKHRoaXMpOwogICAgICAgICAgcmV0dXJuIGRvbUFwaS5ub2RlW25hbWVdOwogICAgICAgIH0sCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZm9yd2FyZFByb3BlcnRpZXMocHJvdG8sIHByb3BlcnRpZXMpIHsKICAgIGZvciAobGV0IGk9MDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IG5hbWUgPSBwcm9wZXJ0aWVzW2ldOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc3QgZG9tQXBpID0gLyoqIEB0eXBlIHtEb21BcGl9ICovKHRoaXMpOwogICAgICAgICAgcmV0dXJuIGRvbUFwaS5ub2RlW25hbWVdOwogICAgICAgIH0sCiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgLyoqIEB0eXBlIHtEb21BcGl9ICovICh0aGlzKS5ub2RlW25hbWVdID0gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgfQoKICBmb3J3YXJkTWV0aG9kcyhEb21BcGkucHJvdG90eXBlLCBbCiAgICAnY2xvbmVOb2RlJywgJ2FwcGVuZENoaWxkJywgJ2luc2VydEJlZm9yZScsICdyZW1vdmVDaGlsZCcsCiAgICAncmVwbGFjZUNoaWxkJywgJ3NldEF0dHJpYnV0ZScsICdyZW1vdmVBdHRyaWJ1dGUnLAogICAgJ3F1ZXJ5U2VsZWN0b3InLCAncXVlcnlTZWxlY3RvckFsbCcKICBdKTsKCiAgZm9yd2FyZFJlYWRPbmx5UHJvcGVydGllcyhEb21BcGkucHJvdG90eXBlLCBbCiAgICAncGFyZW50Tm9kZScsICdmaXJzdENoaWxkJywgJ2xhc3RDaGlsZCcsCiAgICAnbmV4dFNpYmxpbmcnLCAncHJldmlvdXNTaWJsaW5nJywgJ2ZpcnN0RWxlbWVudENoaWxkJywKICAgICdsYXN0RWxlbWVudENoaWxkJywgJ25leHRFbGVtZW50U2libGluZycsICdwcmV2aW91c0VsZW1lbnRTaWJsaW5nJywKICAgICdjaGlsZE5vZGVzJywgJ2NoaWxkcmVuJywgJ2NsYXNzTGlzdCcKICBdKTsKCiAgZm9yd2FyZFByb3BlcnRpZXMoRG9tQXBpLnByb3RvdHlwZSwgWwogICAgJ3RleHRDb250ZW50JywgJ2lubmVySFRNTCcKICBdKTsKCgogIC8qKgogICAqIEV2ZW50IEFQSSB3cmFwcGVyIGNsYXNzIHJldHVybmVkIGZyb20gYFBvbHltZXIuZG9tLih0YXJnZXQpYCB3aGVuCiAgICogYHRhcmdldGAgaXMgYW4gYEV2ZW50YC4KICAgKi8KICBjbGFzcyBFdmVudEFwaSB7CiAgICBjb25zdHJ1Y3RvcihldmVudCkgewogICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBub2RlIG9uIHRoZSBgY29tcG9zZWRQYXRoYCBvZiB0aGlzIGV2ZW50LgogICAgICoKICAgICAqIEByZXR1cm4geyFFdmVudFRhcmdldH0gVGhlIG5vZGUgdGhpcyBldmVudCB3YXMgZGlzcGF0Y2hlZCB0bwogICAgICovCiAgICBnZXQgcm9vdFRhcmdldCgpIHsKICAgICAgcmV0dXJuIHRoaXMuZXZlbnQuY29tcG9zZWRQYXRoKClbMF07CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbCAocmUtdGFyZ2V0ZWQpIHRhcmdldCBmb3IgdGhpcyBldmVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHshRXZlbnRUYXJnZXR9IFRoZSBsb2NhbCAocmUtdGFyZ2V0ZWQpIHRhcmdldCBmb3IgdGhpcyBldmVudC4KICAgICAqLwogICAgZ2V0IGxvY2FsVGFyZ2V0KCkgewogICAgICByZXR1cm4gdGhpcy5ldmVudC50YXJnZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBgY29tcG9zZWRQYXRoYCBmb3IgdGhpcyBldmVudC4KICAgICAqIEByZXR1cm4geyFBcnJheTwhRXZlbnRUYXJnZXQ+fSBUaGUgbm9kZXMgdGhpcyBldmVudCBwcm9wYWdhdGVkIHRocm91Z2gKICAgICAqLwogICAgZ2V0IHBhdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgfQogIH0KCiAgUG9seW1lci5Eb21BcGkgPSBEb21BcGk7CgogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlZXAKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuY2xvbmVOb2RlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7CiAgLyoqCiAgICogQGZ1bmN0aW9uCiAgICogQHBhcmFtIHshTm9kZX0gbmV3Q2hpbGQKICAgKiBAcGFyYW0ge05vZGV9IHJlZkNoaWxkCiAgICogQHJldHVybiB7IU5vZGV9CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLmluc2VydEJlZm9yZTsKICAvKioKICAgKiBAZnVuY3Rpb24KICAgKiBAcGFyYW0geyFOb2RlfSBub2RlCiAgICogQHJldHVybiB7IU5vZGV9CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLnJlbW92ZUNoaWxkOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7IU5vZGV9IG9sZENoaWxkCiAgICogQHBhcmFtIHshTm9kZX0gbmV3Q2hpbGQKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUucmVwbGFjZUNoaWxkOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuc2V0QXR0cmlidXRlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvcgogICAqIEByZXR1cm4gez9FbGVtZW50fQogICAqLwogIFBvbHltZXIuRG9tQXBpLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvcgogICAqIEByZXR1cm4geyFOb2RlTGlzdDwhRWxlbWVudD59CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7CgogIC8qKgogICAqIExlZ2FjeSBET00gYW5kIEV2ZW50IG1hbmlwdWxhdGlvbiBBUEkgd3JhcHBlciBmYWN0b3J5IHVzZWQgdG8gYWJzdHJhY3QKICAgKiBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5hdGl2ZSBTaGFkb3cgRE9NIGFuZCAiU2hhZHkgRE9NIiB3aGVuIHBvbHlmaWxsaW5nIG9uCiAgICogb2xkZXIgYnJvd3NlcnMuCiAgICoKICAgKiBOb3RlIHRoYXQgaW4gUG9seW1lciAyLnggdXNlIG9mIGBQb2x5bWVyLmRvbWAgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIGFuZAogICAqIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBzaW1wbHkgZmFjYWRlcyBkaXJlY3RseSB0byB0aGUgc3RhbmRhcmQgbmF0aXZlCiAgICogQVBJLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBzdW1tYXJ5IExlZ2FjeSBET00gYW5kIEV2ZW50IG1hbmlwdWxhdGlvbiBBUEkgd3JhcHBlciBmYWN0b3J5IHVzZWQgdG8KICAgKiBhYnN0cmFjdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5hdGl2ZSBTaGFkb3cgRE9NIGFuZCAiU2hhZHkgRE9NLiIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7KE5vZGV8RXZlbnQpPX0gb2JqIE5vZGUgb3IgZXZlbnQgdG8gb3BlcmF0ZSBvbgogICAqIEByZXR1cm4geyFEb21BcGl8IUV2ZW50QXBpfSBXcmFwcGVyIHByb3ZpZGluZyBlaXRoZXIgbm9kZSBBUEkgb3IgZXZlbnQgQVBJCiAgICovCiAgUG9seW1lci5kb20gPSBmdW5jdGlvbihvYmopIHsKICAgIG9iaiA9IG9iaiB8fCBkb2N1bWVudDsKICAgIGlmICghb2JqLl9fZG9tQXBpKSB7CiAgICAgIGxldCBoZWxwZXI7CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBFdmVudCkgewogICAgICAgIGhlbHBlciA9IG5ldyBFdmVudEFwaShvYmopOwogICAgICB9IGVsc2UgewogICAgICAgIGhlbHBlciA9IG5ldyBEb21BcGkob2JqKTsKICAgICAgfQogICAgICBvYmouX19kb21BcGkgPSBoZWxwZXI7CiAgICB9CiAgICByZXR1cm4gb2JqLl9fZG9tQXBpOwogIH07CgogIFBvbHltZXIuZG9tLm1hdGNoZXNTZWxlY3RvciA9IG1hdGNoZXNTZWxlY3RvcjsKCiAgLyoqCiAgICogRm9yY2VzIHNldmVyYWwgY2xhc3NlcyBvZiBhc3luY2hyb25vdXNseSBxdWV1ZWQgdGFza3MgdG8gZmx1c2g6CiAgICogLSBEZWJvdW5jZXJzIGFkZGVkIHZpYSBgUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyYAogICAqIC0gU2hhZHlET00gZGlzdHJpYnV0aW9uCiAgICoKICAgKiBUaGlzIG1ldGhvZCBmYWNhZGVzIHRvIGBQb2x5bWVyLmZsdXNoYC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyLmRvbQogICAqLwogIFBvbHltZXIuZG9tLmZsdXNoID0gUG9seW1lci5mbHVzaDsKCiAgLyoqCiAgICogQWRkcyBhIGBQb2x5bWVyLkRlYm91bmNlcmAgdG8gYSBsaXN0IG9mIGdsb2JhbGx5IGZsdXNoYWJsZSB0YXNrcy4KICAgKgogICAqIFRoaXMgbWV0aG9kIGZhY2FkZXMgdG8gYFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcmAuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lci5kb20KICAgKiBAcGFyYW0geyFQb2x5bWVyLkRlYm91bmNlcn0gZGVib3VuY2VyIERlYm91bmNlciB0byBlbnF1ZXVlCiAgICovCiAgUG9seW1lci5kb20uYWRkRGVib3VuY2VyID0gUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyOwp9KSgpOwoKCihmdW5jdGlvbigpIHsKCiAgJ3VzZSBzdHJpY3QnOwoKICBsZXQgc3R5bGVJbnRlcmZhY2UgPSB3aW5kb3cuU2hhZHlDU1M7CgogIC8qKgogICAqIEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBQb2x5bWVyJ3MgImxlZ2FjeSIgQVBJIGludGVuZGVkIHRvIGJlCiAgICogYmFja3dhcmQtY29tcGF0aWJsZSB0byB0aGUgZ3JlYXRlc3QgZXh0ZW50IHBvc3NpYmxlIHdpdGggdGhlIEFQSQogICAqIGZvdW5kIG9uIHRoZSBQb2x5bWVyIDEueCBgUG9seW1lci5CYXNlYCBwcm90b3R5cGUgYXBwbGllZCB0byBhbGwgZWxlbWVudHMKICAgKiBkZWZpbmVkIHVzaW5nIHRoZSBgUG9seW1lcih7Li4ufSlgIGZ1bmN0aW9uLgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5FbGVtZW50TWl4aW4KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuR2VzdHVyZUV2ZW50TGlzdGVuZXJzCiAgICogQHByb3BlcnR5IGlzQXR0YWNoZWQge2Jvb2xlYW59IFNldCB0byBgdHJ1ZWAgaW4gdGhpcyBlbGVtZW50J3MKICAgKiAgIGBjb25uZWN0ZWRDYWxsYmFja2AgYW5kIGBmYWxzZWAgaW4gYGRpc2Nvbm5lY3RlZENhbGxiYWNrYAogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIFBvbHltZXIncyAibGVnYWN5IiBBUEkKICAgKi8KICBQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbigoYmFzZSkgPT4gewoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKiBAZXh0ZW5kcyB7YmFzZX0KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0VsZW1lbnRNaXhpbn0KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0dlc3R1cmVFdmVudExpc3RlbmVyc30KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0Rpck1peGlufQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgbGVnYWN5RWxlbWVudEJhc2UgPSBQb2x5bWVyLkRpck1peGluKFBvbHltZXIuR2VzdHVyZUV2ZW50TGlzdGVuZXJzKFBvbHltZXIuRWxlbWVudE1peGluKGJhc2UpKSk7CgogICAgLyoqCiAgICAgKiBNYXAgb2Ygc2ltcGxlIG5hbWVzIHRvIHRvdWNoIGFjdGlvbiBuYW1lcwogICAgICogQGRpY3QKICAgICAqLwogICAgY29uc3QgRElSRUNUSU9OX01BUCA9IHsKICAgICAgJ3gnOiAncGFuLXgnLAogICAgICAneSc6ICdwYW4teScsCiAgICAgICdub25lJzogJ25vbmUnLAogICAgICAnYWxsJzogJ2F1dG8nCiAgICB9OwoKICAgIC8qKgogICAgICogQHBvbHltZXIKICAgICAqIEBtaXhpbkNsYXNzCiAgICAgKiBAZXh0ZW5kcyB7bGVnYWN5RWxlbWVudEJhc2V9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9MZWdhY3lFbGVtZW50TWl4aW59CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKi8KICAgIGNsYXNzIExlZ2FjeUVsZW1lbnQgZXh0ZW5kcyBsZWdhY3lFbGVtZW50QmFzZSB7CgogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8KICAgICAgICB0aGlzLmlzQXR0YWNoZWQ7CiAgICAgICAgLyoqIEB0eXBlIHtXZWFrTWFwPCFFbGVtZW50LCAhT2JqZWN0PHN0cmluZywgIUZ1bmN0aW9uPj59ICovCiAgICAgICAgdGhpcy5fX2JvdW5kTGlzdGVuZXJzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0PHN0cmluZywgRnVuY3Rpb24+fSAqLwogICAgICAgIHRoaXMuX2RlYm91bmNlcnM7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBGb3J3YXJkcyBgaW1wb3J0TWV0YWAgZnJvbSB0aGUgcHJvdG90eXBlIChpLmUuIGZyb20gdGhlIGluZm8gb2JqZWN0CiAgICAgICAqIHBhc3NlZCB0byBgUG9seW1lcih7Li4ufSlgKSB0byB0aGUgc3RhdGljIEFQSS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7IU9iamVjdH0gVGhlIGBpbXBvcnQubWV0YWAgb2JqZWN0IHNldCBvbiB0aGUgcHJvdG90eXBlCiAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IGB0aGlzYCBpcyBhbHdheXMgaW4gdGhlIGluc3RhbmNlIGluCiAgICAgICAqICBjbG9zdXJlIGZvciBzb21lIHJlYXNvbiBldmVuIGluIGEgc3RhdGljIG1ldGhvZCwgcmF0aGVyIHRoYW4gdGhlIGNsYXNzCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0IGltcG9ydE1ldGEoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucHJvdG90eXBlLmltcG9ydE1ldGE7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBMZWdhY3kgY2FsbGJhY2sgY2FsbGVkIGR1cmluZyB0aGUgYGNvbnN0cnVjdG9yYCwgZm9yIG92ZXJyaWRpbmcKICAgICAgICogYnkgdGhlIHVzZXIuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBjcmVhdGVkKCkge30KCiAgICAgIC8qKgogICAgICAgKiBQcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgY29ubmVjdGVkQ2FsbGJhY2tgCiAgICAgICAqIHdoaWNoIGFkZHMgUG9seW1lciBsZWdhY3kgQVBJJ3MgYGF0dGFjaGVkYCBtZXRob2QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKi8KICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlOwogICAgICAgIHRoaXMuYXR0YWNoZWQoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIExlZ2FjeSBjYWxsYmFjayBjYWxsZWQgZHVyaW5nIGBjb25uZWN0ZWRDYWxsYmFja2AsIGZvciBvdmVycmlkaW5nCiAgICAgICAqIGJ5IHRoZSB1c2VyLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgYXR0YWNoZWQoKSB7fQoKICAgICAgLyoqCiAgICAgICAqIFByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIGBkaXNjb25uZWN0ZWRDYWxsYmFja2AKICAgICAgICogd2hpY2ggYWRkcyBQb2x5bWVyIGxlZ2FjeSBBUEkncyBgZGV0YWNoZWRgIG1ldGhvZC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqLwogICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuZGV0YWNoZWQoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIExlZ2FjeSBjYWxsYmFjayBjYWxsZWQgZHVyaW5nIGBkaXNjb25uZWN0ZWRDYWxsYmFja2AsIGZvciBvdmVycmlkaW5nCiAgICAgICAqIGJ5IHRoZSB1c2VyLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgZGV0YWNoZWQoKSB7fQoKICAgICAgLyoqCiAgICAgICAqIFByb3ZpZGVzIGFuIG92ZXJyaWRlIGltcGxlbWVudGF0aW9uIG9mIGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tgCiAgICAgICAqIHdoaWNoIGFkZHMgdGhlIFBvbHltZXIgbGVnYWN5IEFQSSdzIGBhdHRyaWJ1dGVDaGFuZ2VkYCBtZXRob2QuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG9sZCBPbGQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIEN1cnJlbnQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG5hbWVzcGFjZSBBdHRyaWJ1dGUgbmFtZXNwYWNlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICovCiAgICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlLCBuYW1lc3BhY2UpIHsKICAgICAgICBpZiAob2xkICE9PSB2YWx1ZSkgewogICAgICAgICAgc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZCwgdmFsdWUsIG5hbWVzcGFjZSk7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgb2xkLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogTGVnYWN5IGNhbGxiYWNrIGNhbGxlZCBkdXJpbmcgYGF0dHJpYnV0ZUNoYW5nZWRDaGFsbGJhY2tgLCBmb3Igb3ZlcnJpZGluZwogICAgICAgKiBieSB0aGUgdXNlci4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBhdHRyaWJ1dGUuCiAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gb2xkIE9sZCB2YWx1ZSBvZiBhdHRyaWJ1dGUuCiAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gdmFsdWUgQ3VycmVudCB2YWx1ZSBvZiBhdHRyaWJ1dGUuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBhdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZCwgdmFsdWUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCBpbXBsZW1lbnRhdGlvbiB0bwogICAgICAgKiBhZGQgc3VwcG9ydCBmb3IgY2xhc3MgaW5pdGlhbGl6YXRpb24gdmlhIHRoZSBgX3JlZ2lzdGVyZWRgIGNhbGxiYWNrLgogICAgICAgKiBUaGlzIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGZpcnN0IGluc3RhbmNlIG9mIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30KICAgICAgICovCiAgICAgIF9pbml0aWFsaXplUHJvcGVydGllcygpIHsKICAgICAgICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7CiAgICAgICAgaWYgKCFwcm90by5oYXNPd25Qcm9wZXJ0eSgnX19oYXNSZWdpc3RlckZpbmlzaGVkJykpIHsKICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyZWQoKTsKICAgICAgICAgIC8vIGJhY2tzdG9wIGluIGNhc2UgdGhlIGBfcmVnaXN0ZXJlZGAgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc2V0IHRoaXMKICAgICAgICAgIHByb3RvLl9faGFzUmVnaXN0ZXJGaW5pc2hlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpOwogICAgICAgIHRoaXMucm9vdCA9IC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovKHRoaXMpOwogICAgICAgIHRoaXMuY3JlYXRlZCgpOwogICAgICAgIC8vIEVuc3VyZSBsaXN0ZW5lcnMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkgc28gdGhhdCB0aGV5IGFyZQogICAgICAgIC8vIGFkZGVkIGJlZm9yZSBkZWNsYXJhdGl2ZSBldmVudCBsaXN0ZW5lcnMuIFRoaXMgYWxsb3dzIGFuIGVsZW1lbnQgdG8KICAgICAgICAvLyBkZWNvcmF0ZSBpdHNlbGYgdmlhIGFuIGV2ZW50IHByaW9yIHRvIGFueSBkZWNsYXJhdGl2ZSBsaXN0ZW5lcnMKICAgICAgICAvLyBzZWVpbmcgdGhlIGV2ZW50LiBOb3RlLCB0aGlzIGVuc3VyZXMgY29tcGF0aWJpbGl0eSB3aXRoIDEueCBvcmRlcmluZy4KICAgICAgICB0aGlzLl9hcHBseUxpc3RlbmVycygpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhbiBlbGVtZW50IGlzIGluaXRpYWxpemluZy4KICAgICAgICogVXNlcnMgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHBlcmZvcm0gY2xhc3MgcmVnaXN0cmF0aW9uIHRpbWUKICAgICAgICogd29yay4gVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBlbnN1cmUgdGhlIHdvcmsgaXMgcGVyZm9ybWVkCiAgICAgICAqIG9ubHkgb25jZSBmb3IgdGhlIGNsYXNzLgogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfcmVnaXN0ZXJlZCgpIHt9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AgaW1wbGVtZW50YXRpb24gdG8KICAgICAgICogYWRkIHN1cHBvcnQgZm9yIGluc3RhbGxpbmcgYGhvc3RBdHRyaWJ1dGVzYCBhbmQgYGxpc3RlbmVyc2AuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKi8KICAgICAgcmVhZHkoKSB7CiAgICAgICAgdGhpcy5fZW5zdXJlQXR0cmlidXRlcygpOwogICAgICAgIHN1cGVyLnJlYWR5KCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBFbnN1cmVzIGFuIGVsZW1lbnQgaGFzIHJlcXVpcmVkIGF0dHJpYnV0ZXMuIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50CiAgICAgICAqIGlzIGJlaW5nIHJlYWRpZWQgdmlhIGByZWFkeWAuIFVzZXJzIHNob3VsZCBvdmVycmlkZSB0byBzZXQgdGhlCiAgICAgICAqIGVsZW1lbnQncyByZXF1aXJlZCBhdHRyaWJ1dGVzLiBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHN1cmUKICAgICAgICogdG8gY2hlY2sgYW5kIG5vdCBvdmVycmlkZSBleGlzdGluZyBhdHRyaWJ1dGVzIGFkZGVkIGJ5CiAgICAgICAqIHRoZSB1c2VyIG9mIHRoZSBlbGVtZW50LiBUeXBpY2FsbHksIHNldHRpbmcgYXR0cmlidXRlcyBzaG91bGQgYmUgbGVmdAogICAgICAgKiB0byB0aGUgZWxlbWVudCB1c2VyIGFuZCBub3QgZG9uZSBoZXJlOyByZWFzb25hYmxlIGV4Y2VwdGlvbnMgaW5jbHVkZQogICAgICAgKiBzZXR0aW5nIGFyaWEgcm9sZXMgYW5kIGZvY3VzYWJpbGl0eS4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2Vuc3VyZUF0dHJpYnV0ZXMoKSB7fQoKICAgICAgLyoqCiAgICAgICAqIEFkZHMgZWxlbWVudCBldmVudCBsaXN0ZW5lcnMuIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50CiAgICAgICAqIGlzIGJlaW5nIHJlYWRpZWQgdmlhIGByZWFkeWAuIFVzZXJzIHNob3VsZCBvdmVycmlkZSB0bwogICAgICAgKiBhZGQgYW55IHJlcXVpcmVkIGVsZW1lbnQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAgKiBJbiBwZXJmb3JtYW5jZSBjcml0aWNhbCBlbGVtZW50cywgdGhlIHdvcmsgZG9uZSBoZXJlIHNob3VsZCBiZSBrZXB0CiAgICAgICAqIHRvIGEgbWluaW11bSBzaW5jZSBpdCBpcyBkb25lIGJlZm9yZSB0aGUgZWxlbWVudCBpcyByZW5kZXJlZC4gSW4KICAgICAgICogdGhlc2UgZWxlbWVudHMsIGNvbnNpZGVyIGFkZGluZyBsaXN0ZW5lcnMgYXN5bmNocm9ub3VzbHkgc28gYXMgbm90IHRvCiAgICAgICAqIGJsb2NrIHJlbmRlci4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2FwcGx5TGlzdGVuZXJzKCkge30KCiAgICAgIC8qKgogICAgICAgKiBDb252ZXJ0cyBhIHR5cGVkIEphdmFTY3JpcHQgdmFsdWUgdG8gYSBzdHJpbmcuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYmFja3dhcmQtY29tcGF0aWJsZSBsZWdhY3kgQVBJCiAgICAgICAqIG9ubHkuICBJdCBpcyBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IGFueSBQb2x5bWVyIGZlYXR1cmVzLiBUbyBjdXN0b21pemUKICAgICAgICogaG93IHByb3BlcnRpZXMgYXJlIHNlcmlhbGl6ZWQgdG8gYXR0cmlidXRlcyBmb3IgYXR0cmlidXRlIGJpbmRpbmdzIGFuZAogICAgICAgKiBgcmVmbGVjdFRvQXR0cmlidXRlOiB0cnVlYCBwcm9wZXJ0aWVzIGFzIHdlbGwgYXMgdGhpcyBtZXRob2QsIG92ZXJyaWRlCiAgICAgICAqIHRoZSBgX3NlcmlhbGl6ZVZhbHVlYCBtZXRob2QgcHJvdmlkZWQgYnkgYFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnNgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIGRlc2VyaWFsaXplCiAgICAgICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gU2VyaWFsaXplZCB2YWx1ZQogICAgICAgKi8KICAgICAgc2VyaWFsaXplKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZVZhbHVlKHZhbHVlKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIGEgdHlwZWQgSmF2YVNjcmlwdCB2YWx1ZS4KICAgICAgICoKICAgICAgICogTm90ZSB0aGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBiYWNrd2FyZC1jb21wYXRpYmxlIGxlZ2FjeSBBUEkKICAgICAgICogb25seS4gIEl0IGlzIG5vdCBkaXJlY3RseSBjYWxsZWQgYnkgYW55IFBvbHltZXIgZmVhdHVyZXMuICBUbyBjdXN0b21pemUKICAgICAgICogaG93IGF0dHJpYnV0ZXMgYXJlIGRlc2VyaWFsaXplZCB0byBwcm9wZXJ0aWVzIGZvciBpbgogICAgICAgKiBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYCwgb3ZlcnJpZGUgYF9kZXNlcmlhbGl6ZVZhbHVlYCBtZXRob2QKICAgICAgICogcHJvdmlkZWQgYnkgYFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnNgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgU3RyaW5nIHRvIGRlc2VyaWFsaXplCiAgICAgICAqIEBwYXJhbSB7Kn0gdHlwZSBUeXBlIHRvIGRlc2VyaWFsaXplIHRoZSBzdHJpbmcgdG8KICAgICAgICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUgZGVzZXJpYWxpemVkIHZhbHVlIGluIHRoZSBgdHlwZWAgZ2l2ZW4uCiAgICAgICAqLwogICAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgdHlwZSkgewogICAgICAgIHJldHVybiB0aGlzLl9kZXNlcmlhbGl6ZVZhbHVlKHZhbHVlLCB0eXBlKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNlcmlhbGl6ZXMgYSBwcm9wZXJ0eSB0byBpdHMgYXNzb2NpYXRlZCBhdHRyaWJ1dGUuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYmFja3dhcmQtY29tcGF0aWJsZSBsZWdhY3kgQVBJCiAgICAgICAqIG9ubHkuICBJdCBpcyBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IGFueSBQb2x5bWVyIGZlYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZSB0byByZWZsZWN0LgogICAgICAgKiBAcGFyYW0ge3N0cmluZz19IGF0dHJpYnV0ZSBBdHRyaWJ1dGUgbmFtZSB0byByZWZsZWN0LgogICAgICAgKiBAcGFyYW0geyo9fSB2YWx1ZSBQcm9wZXJ0eSB2YWx1ZSB0byByZWZsZWN0LgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgcmVmbGVjdFByb3BlcnR5VG9BdHRyaWJ1dGUocHJvcGVydHksIGF0dHJpYnV0ZSwgdmFsdWUpIHsKICAgICAgICB0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHByb3BlcnR5LCBhdHRyaWJ1dGUsIHZhbHVlKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNldHMgYSB0eXBlZCB2YWx1ZSB0byBhbiBIVE1MIGF0dHJpYnV0ZSBvbiBhIG5vZGUuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYmFja3dhcmQtY29tcGF0aWJsZSBsZWdhY3kgQVBJCiAgICAgICAqIG9ubHkuICBJdCBpcyBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IGFueSBQb2x5bWVyIGZlYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNlcmlhbGl6ZS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSBBdHRyaWJ1dGUgbmFtZSB0byBzZXJpYWxpemUgdG8uCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSBFbGVtZW50IHRvIHNldCBhdHRyaWJ1dGUgdG8uCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBzZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHZhbHVlLCBhdHRyaWJ1dGUsIG5vZGUpIHsKICAgICAgICB0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSgvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlIHx8IHRoaXMpLCB2YWx1ZSwgYXR0cmlidXRlKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENvcGllcyBvd24gcHJvcGVydGllcyAoaW5jbHVkaW5nIGFjY2Vzc29yIGRlc2NyaXB0b3JzKSBmcm9tIGEgc291cmNlCiAgICAgICAqIG9iamVjdCB0byBhIHRhcmdldCBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGFyZ2V0IG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhcGkgU291cmNlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS4KICAgICAgICogQHJldHVybiB7T2JqZWN0fSBwcm90b3R5cGUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudC4KICAgICAgICovCiAgICAgIGV4dGVuZChwcm90b3R5cGUsIGFwaSkgewogICAgICAgIGlmICghKHByb3RvdHlwZSAmJiBhcGkpKSB7CiAgICAgICAgICByZXR1cm4gcHJvdG90eXBlIHx8IGFwaTsKICAgICAgICB9CiAgICAgICAgbGV0IG4kID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXBpKTsKICAgICAgICBmb3IgKGxldCBpPTAsIG47IChpPG4kLmxlbmd0aCkgJiYgKG49biRbaV0pOyBpKyspIHsKICAgICAgICAgIGxldCBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXBpLCBuKTsKICAgICAgICAgIGlmIChwZCkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBuLCBwZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcm90b3R5cGU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb3BpZXMgcHJvcHMgZnJvbSBhIHNvdXJjZSBvYmplY3QgdG8gYSB0YXJnZXQgb2JqZWN0LgogICAgICAgKgogICAgICAgKiBOb3RlLCB0aGlzIG1ldGhvZCB1c2VzIGEgc2ltcGxlIGBmb3IuLi5pbmAgc3RyYXRlZ3kgZm9yIGVudW1lcmF0aW5nCiAgICAgICAqIHByb3BlcnRpZXMuICBUbyBlbnN1cmUgb25seSBgb3duUHJvcGVydGllc2AgYXJlIGNvcGllZCBmcm9tIHNvdXJjZQogICAgICAgKiB0byB0YXJnZXQgYW5kIHRoYXQgYWNjZXNzb3IgaW1wbGVtZW50YXRpb25zIGFyZSBjb3BpZWQsIHVzZSBgZXh0ZW5kYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshT2JqZWN0fSB0YXJnZXQgVGFyZ2V0IG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gc291cmNlIFNvdXJjZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uCiAgICAgICAqIEByZXR1cm4geyFPYmplY3R9IFRhcmdldCBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50LgogICAgICAgKi8KICAgICAgbWl4aW4odGFyZ2V0LCBzb3VyY2UpIHsKICAgICAgICBmb3IgKGxldCBpIGluIHNvdXJjZSkgewogICAgICAgICAgdGFyZ2V0W2ldID0gc291cmNlW2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2V0cyB0aGUgcHJvdG90eXBlIG9mIGFuIG9iamVjdC4KICAgICAgICoKICAgICAgICogTm90ZSB0aGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBiYWNrd2FyZC1jb21wYXRpYmxlIGxlZ2FjeSBBUEkKICAgICAgICogb25seS4gIEl0IGlzIG5vdCBkaXJlY3RseSBjYWxsZWQgYnkgYW55IFBvbHltZXIgZmVhdHVyZXMuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCBvbiB3aGljaCB0byBzZXQgdGhlIHByb3RvdHlwZS4KICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3RvdHlwZSBUaGUgcHJvdG90eXBlIHRoYXQgd2lsbCBiZSBzZXQgb24gdGhlIGdpdmVuCiAgICAgICAqIGBvYmplY3RgLgogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgdGhlIGdpdmVuIGBvYmplY3RgIHdpdGggaXRzIHByb3RvdHlwZSBzZXQKICAgICAgICogdG8gdGhlIGdpdmVuIGBwcm90b3R5cGVgIG9iamVjdC4KICAgICAgICovCiAgICAgIGNoYWluT2JqZWN0KG9iamVjdCwgcHJvdG90eXBlKSB7CiAgICAgICAgaWYgKG9iamVjdCAmJiBwcm90b3R5cGUgJiYgb2JqZWN0ICE9PSBwcm90b3R5cGUpIHsKICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgIH0KCiAgICAgIC8qICoqKiogQmVnaW4gVGVtcGxhdGUgKioqKiAqLwoKICAgICAgLyoqCiAgICAgICAqIENhbGxzIGBpbXBvcnROb2RlYCBvbiB0aGUgYGNvbnRlbnRgIG9mIHRoZSBgdGVtcGxhdGVgIHNwZWNpZmllZCBhbmQKICAgICAgICogcmV0dXJucyBhIGRvY3VtZW50IGZyYWdtZW50IGNvbnRhaW5pbmcgdGhlIGltcG9ydGVkIGNvbnRlbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgSFRNTCB0ZW1wbGF0ZSBlbGVtZW50IHRvIGluc3RhbmNlLgogICAgICAgKiBAcmV0dXJuIHshRG9jdW1lbnRGcmFnbWVudH0gRG9jdW1lbnQgZnJhZ21lbnQgY29udGFpbmluZyB0aGUgaW1wb3J0ZWQKICAgICAgICogICB0ZW1wbGF0ZSBjb250ZW50LgogICAgICAqLwogICAgICBpbnN0YW5jZVRlbXBsYXRlKHRlbXBsYXRlKSB7CiAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLmNvbnN0cnVjdG9yLl9jb250ZW50Rm9yVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICAgIGxldCBkb20gPSAvKiogQHR5cGUgeyFEb2N1bWVudEZyYWdtZW50fSAqLwogICAgICAgICAgKGRvY3VtZW50LmltcG9ydE5vZGUoY29udGVudCwgdHJ1ZSkpOwogICAgICAgIHJldHVybiBkb207CiAgICAgIH0KCiAgICAgIC8qICoqKiogQmVnaW4gRXZlbnRzICoqKiogKi8KCgoKICAgICAgLyoqCiAgICAgICAqIERpc3BhdGNoZXMgYSBjdXN0b20gZXZlbnQgd2l0aCBhbiBvcHRpb25hbCBkZXRhaWwgdmFsdWUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIE5hbWUgb2YgZXZlbnQgdHlwZS4KICAgICAgICogQHBhcmFtIHsqPX0gZGV0YWlsIERldGFpbCB2YWx1ZSBjb250YWluaW5nIGV2ZW50LXNwZWNpZmljCiAgICAgICAqICAgcGF5bG9hZC4KICAgICAgICogQHBhcmFtIHt7IGJ1YmJsZXM6IChib29sZWFufHVuZGVmaW5lZCksIGNhbmNlbGFibGU6IChib29sZWFufHVuZGVmaW5lZCksIGNvbXBvc2VkOiAoYm9vbGVhbnx1bmRlZmluZWQpIH09fQogICAgICAgKiAgb3B0aW9ucyBPYmplY3Qgc3BlY2lmeWluZyBvcHRpb25zLiAgVGhlc2UgbWF5IGluY2x1ZGU6CiAgICAgICAqICBgYnViYmxlc2AgKGJvb2xlYW4sIGRlZmF1bHRzIHRvIGB0cnVlYCksCiAgICAgICAqICBgY2FuY2VsYWJsZWAgKGJvb2xlYW4sIGRlZmF1bHRzIHRvIGZhbHNlKSwgYW5kCiAgICAgICAqICBgbm9kZWAgb24gd2hpY2ggdG8gZmlyZSB0aGUgZXZlbnQgKEhUTUxFbGVtZW50LCBkZWZhdWx0cyB0byBgdGhpc2ApLgogICAgICAgKiBAcmV0dXJuIHshRXZlbnR9IFRoZSBuZXcgZXZlbnQgdGhhdCB3YXMgZmlyZWQuCiAgICAgICAqLwogICAgICBmaXJlKHR5cGUsIGRldGFpbCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIGRldGFpbCA9IChkZXRhaWwgPT09IG51bGwgfHwgZGV0YWlsID09PSB1bmRlZmluZWQpID8ge30gOiBkZXRhaWw7CiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHR5cGUsIHsKICAgICAgICAgIGJ1YmJsZXM6IG9wdGlvbnMuYnViYmxlcyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuYnViYmxlcywKICAgICAgICAgIGNhbmNlbGFibGU6IEJvb2xlYW4ob3B0aW9ucy5jYW5jZWxhYmxlKSwKICAgICAgICAgIGNvbXBvc2VkOiBvcHRpb25zLmNvbXBvc2VkID09PSB1bmRlZmluZWQgPyB0cnVlOiBvcHRpb25zLmNvbXBvc2VkCiAgICAgICAgfSk7CiAgICAgICAgZXZlbnQuZGV0YWlsID0gZGV0YWlsOwogICAgICAgIGxldCBub2RlID0gb3B0aW9ucy5ub2RlIHx8IHRoaXM7CiAgICAgICAgbm9kZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICAgICByZXR1cm4gZXZlbnQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gYWRkIGFuIGV2ZW50IGxpc3RlbmVyIG9uIGEgZ2l2ZW4gZWxlbWVudCwKICAgICAgICogbGF0ZSBib3VuZCB0byBhIG5hbWVkIG1ldGhvZCBvbiB0aGlzIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSBFbGVtZW50IHRvIGFkZCBldmVudCBsaXN0ZW5lciB0by4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBOYW1lIG9mIGV2ZW50IHRvIGxpc3RlbiBmb3IuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIE5hbWUgb2YgaGFuZGxlciBtZXRob2Qgb24gYHRoaXNgIHRvIGNhbGwuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBsaXN0ZW4obm9kZSwgZXZlbnROYW1lLCBtZXRob2ROYW1lKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7IUVsZW1lbnR9ICovIChub2RlIHx8IHRoaXMpOwogICAgICAgIGxldCBoYmwgPSB0aGlzLl9fYm91bmRMaXN0ZW5lcnMgfHwKICAgICAgICAgICh0aGlzLl9fYm91bmRMaXN0ZW5lcnMgPSBuZXcgV2Vha01hcCgpKTsKICAgICAgICBsZXQgYmwgPSBoYmwuZ2V0KG5vZGUpOwogICAgICAgIGlmICghYmwpIHsKICAgICAgICAgIGJsID0ge307CiAgICAgICAgICBoYmwuc2V0KG5vZGUsIGJsKTsKICAgICAgICB9CiAgICAgICAgbGV0IGtleSA9IGV2ZW50TmFtZSArIG1ldGhvZE5hbWU7CiAgICAgICAgaWYgKCFibFtrZXldKSB7CiAgICAgICAgICBibFtrZXldID0gdGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSgKICAgICAgICAgICAgbm9kZSwgZXZlbnROYW1lLCBtZXRob2ROYW1lLCB0aGlzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gcmVtb3ZlIGFuIGV2ZW50IGxpc3RlbmVyIGZyb20gYSBnaXZlbiBlbGVtZW50LAogICAgICAgKiBsYXRlIGJvdW5kIHRvIGEgbmFtZWQgbWV0aG9kIG9uIHRoaXMgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBub2RlIEVsZW1lbnQgdG8gcmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGZyb20uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudCB0byBzdG9wIGxpc3RlbmluZyB0by4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgTmFtZSBvZiBoYW5kbGVyIG1ldGhvZCBvbiBgdGhpc2AgdG8gbm90IGNhbGwKICAgICAgIGFueW1vcmUuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICB1bmxpc3Rlbihub2RlLCBldmVudE5hbWUsIG1ldGhvZE5hbWUpIHsKICAgICAgICBub2RlID0gLyoqIEB0eXBlIHshRWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyk7CiAgICAgICAgbGV0IGJsID0gdGhpcy5fX2JvdW5kTGlzdGVuZXJzICYmIHRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQobm9kZSk7CiAgICAgICAgbGV0IGtleSA9IGV2ZW50TmFtZSArIG1ldGhvZE5hbWU7CiAgICAgICAgbGV0IGhhbmRsZXIgPSBibCAmJiBibFtrZXldOwogICAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgICB0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKTsKICAgICAgICAgIGJsW2tleV0gPSBudWxsOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlIHNjcm9sbGluZyBiZWhhdmlvciB0byBhbGwgZGlyZWN0aW9uLCBvbmUgZGlyZWN0aW9uLCBvciBub25lLgogICAgICAgKgogICAgICAgKiBWYWxpZCBzY3JvbGwgZGlyZWN0aW9uczoKICAgICAgICogICAtICdhbGwnOiBzY3JvbGwgaW4gYW55IGRpcmVjdGlvbgogICAgICAgKiAgIC0gJ3gnOiBzY3JvbGwgb25seSBpbiB0aGUgJ3gnIGRpcmVjdGlvbgogICAgICAgKiAgIC0gJ3knOiBzY3JvbGwgb25seSBpbiB0aGUgJ3knIGRpcmVjdGlvbgogICAgICAgKiAgIC0gJ25vbmUnOiBkaXNhYmxlIHNjcm9sbGluZyBmb3IgdGhpcyBub2RlCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gZGlyZWN0aW9uIERpcmVjdGlvbiB0byBhbGxvdyBzY3JvbGxpbmcKICAgICAgICogRGVmYXVsdHMgdG8gYGFsbGAuCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudD19IG5vZGUgRWxlbWVudCB0byBhcHBseSBzY3JvbGwgZGlyZWN0aW9uIHNldHRpbmcuCiAgICAgICAqIERlZmF1bHRzIHRvIGB0aGlzYC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHNldFNjcm9sbERpcmVjdGlvbihkaXJlY3Rpb24sIG5vZGUpIHsKICAgICAgICBQb2x5bWVyLkdlc3R1cmVzLnNldFRvdWNoQWN0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyksIERJUkVDVElPTl9NQVBbZGlyZWN0aW9uXSB8fCAnYXV0bycpOwogICAgICB9CiAgICAgIC8qICoqKiogRW5kIEV2ZW50cyAqKioqICovCgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHJ1biBgcXVlcnlTZWxlY3RvcmAgb24gdGhpcyBsb2NhbCBET00gc2NvcGUuCiAgICAgICAqCiAgICAgICAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgYFBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcihzbGN0cilgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2xjdHIgU2VsZWN0b3IgdG8gcnVuIG9uIHRoaXMgbG9jYWwgRE9NIHNjb3BlCiAgICAgICAqIEByZXR1cm4ge0VsZW1lbnR9IEVsZW1lbnQgZm91bmQgYnkgdGhlIHNlbGVjdG9yLCBvciBudWxsIGlmIG5vdCBmb3VuZC4KICAgICAgICovCiAgICAgICQkKHNsY3RyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKHNsY3RyKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybiB0aGUgZWxlbWVudCB3aG9zZSBsb2NhbCBkb20gd2l0aGluIHdoaWNoIHRoaXMgZWxlbWVudAogICAgICAgKiBpcyBjb250YWluZWQuIFRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yCiAgICAgICAqIGB0aGlzLmdldFJvb3ROb2RlKCkuaG9zdGAuCiAgICAgICAqIEB0aGlzIHtFbGVtZW50fQogICAgICAgKi8KICAgICAgZ2V0IGRvbUhvc3QoKSB7CiAgICAgICAgbGV0IHJvb3QgPSB0aGlzLmdldFJvb3ROb2RlKCk7CiAgICAgICAgcmV0dXJuIChyb290IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkgPyAvKiogQHR5cGUge1NoYWRvd1Jvb3R9ICovIChyb290KS5ob3N0IDogcm9vdDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZvcmNlIHRoaXMgZWxlbWVudCB0byBkaXN0cmlidXRlIGl0cyBjaGlsZHJlbiB0byBpdHMgbG9jYWwgZG9tLgogICAgICAgKiBUaGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGFzIG9mIFBvbHltZXIgMi4wLjIgYW5kIGlzIHByb3ZpZGVkIG9ubHkKICAgICAgICogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgZGlzdHJpYnV0ZUNvbnRlbnQoKSB7CiAgICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSAmJiB0aGlzLnNoYWRvd1Jvb3QpIHsKICAgICAgICAgIFNoYWR5RE9NLmZsdXNoKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIGxpc3Qgb2Ygbm9kZXMgdGhhdCBhcmUgdGhlIGVmZmVjdGl2ZSBjaGlsZE5vZGVzLiBUaGUgZWZmZWN0aXZlCiAgICAgICAqIGNoaWxkTm9kZXMgbGlzdCBpcyB0aGUgc2FtZSBhcyB0aGUgZWxlbWVudCdzIGNoaWxkTm9kZXMgZXhjZXB0IHRoYXQKICAgICAgICogYW55IGA8Y29udGVudD5gIGVsZW1lbnRzIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBsaXN0IG9mIG5vZGVzIGRpc3RyaWJ1dGVkCiAgICAgICAqIHRvIHRoZSBgPGNvbnRlbnQ+YCwgdGhlIHJlc3VsdCBvZiBpdHMgYGdldERpc3RyaWJ1dGVkTm9kZXNgIG1ldGhvZC4KICAgICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gTGlzdCBvZiBlZmZlY3RpdmUgY2hpbGQgbm9kZXMuCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfSBMZWdhY3lFbGVtZW50TWl4aW4gbXVzdCBiZSBhcHBsaWVkIHRvIGFuIEhUTUxFbGVtZW50CiAgICAgICAqLwogICAgICBnZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkgewogICAgICAgIGNvbnN0IHRoaXNFbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKHRoaXMpOwogICAgICAgIGNvbnN0IGRvbUFwaSA9IC8qKiBAdHlwZSB7UG9seW1lci5Eb21BcGl9ICovKFBvbHltZXIuZG9tKHRoaXNFbCkpOwogICAgICAgIHJldHVybiBkb21BcGkuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIGxpc3Qgb2Ygbm9kZXMgZGlzdHJpYnV0ZWQgd2l0aGluIHRoaXMgZWxlbWVudCB0aGF0IG1hdGNoCiAgICAgICAqIGBzZWxlY3RvcmAuIFRoZXNlIGNhbiBiZSBkb20gY2hpbGRyZW4gb3IgZWxlbWVudHMgZGlzdHJpYnV0ZWQgdG8KICAgICAgICogY2hpbGRyZW4gdGhhdCBhcmUgaW5zZXJ0aW9uIHBvaW50cy4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIHJ1bi4KICAgICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gTGlzdCBvZiBkaXN0cmlidXRlZCBlbGVtZW50cyB0aGF0IG1hdGNoIHNlbGVjdG9yLgogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30gTGVnYWN5RWxlbWVudE1peGluIG11c3QgYmUgYXBwbGllZCB0byBhbiBIVE1MRWxlbWVudAogICAgICAgKi8KICAgICAgcXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHNlbGVjdG9yKSB7CiAgICAgICAgY29uc3QgdGhpc0VsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAodGhpcyk7CiAgICAgICAgY29uc3QgZG9tQXBpID0gLyoqIEB0eXBlIHtQb2x5bWVyLkRvbUFwaX0gKi8oUG9seW1lci5kb20odGhpc0VsKSk7CiAgICAgICAgcmV0dXJuIGRvbUFwaS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMoc2VsZWN0b3IpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBhcmUgdGhlIGVmZmVjdGl2ZSBjaGlsZHJlbi4gVGhlIGVmZmVjdGl2ZQogICAgICAgKiBjaGlsZHJlbiBsaXN0IGlzIHRoZSBzYW1lIGFzIHRoZSBlbGVtZW50J3MgY2hpbGRyZW4gZXhjZXB0IHRoYXQKICAgICAgICogYW55IGA8Y29udGVudD5gIGVsZW1lbnRzIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBsaXN0IG9mIGVsZW1lbnRzCiAgICAgICAqIGRpc3RyaWJ1dGVkIHRvIHRoZSBgPGNvbnRlbnQ+YC4KICAgICAgICoKICAgICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gTGlzdCBvZiBlZmZlY3RpdmUgY2hpbGRyZW4uCiAgICAgICAqLwogICAgICBnZXRFZmZlY3RpdmVDaGlsZHJlbigpIHsKICAgICAgICBsZXQgbGlzdCA9IHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpOwogICAgICAgIHJldHVybiBsaXN0LmZpbHRlcihmdW5jdGlvbigvKiogQHR5cGUgeyFOb2RlfSAqLyBuKSB7CiAgICAgICAgICByZXR1cm4gKG4ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgb2YgdGV4dCBjb250ZW50IHRoYXQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlCiAgICAgICAqIHRleHQgY29udGVudCdzIG9mIHRoZSBlbGVtZW50J3MgZWZmZWN0aXZlIGNoaWxkTm9kZXMgKHRoZSBlbGVtZW50cwogICAgICAgKiByZXR1cm5lZCBieSA8YSBocmVmPSIjZ2V0RWZmZWN0aXZlQ2hpbGROb2Rlcz5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzPC9hPi4KICAgICAgICoKICAgICAgICogQHJldHVybiB7c3RyaW5nfSBMaXN0IG9mIGVmZmVjdGl2ZSBjaGlsZHJlbi4KICAgICAgICovCiAgICAgIGdldEVmZmVjdGl2ZVRleHRDb250ZW50KCkgewogICAgICAgIGxldCBjbiA9IHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpOwogICAgICAgIGxldCB0YyA9IFtdOwogICAgICAgIGZvciAobGV0IGk9MCwgYzsgKGMgPSBjbltpXSk7IGkrKykgewogICAgICAgICAgaWYgKGMubm9kZVR5cGUgIT09IE5vZGUuQ09NTUVOVF9OT0RFKSB7CiAgICAgICAgICAgIHRjLnB1c2goYy50ZXh0Q29udGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0Yy5qb2luKCcnKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGVmZmVjdGl2ZSBjaGlsZE5vZGUgd2l0aGluIHRoaXMgZWxlbWVudCB0aGF0CiAgICAgICAqIG1hdGNoIGBzZWxlY3RvcmAuIFRoZXNlIGNhbiBiZSBkb20gY2hpbGQgbm9kZXMgb3IgZWxlbWVudHMgZGlzdHJpYnV0ZWQKICAgICAgICogdG8gY2hpbGRyZW4gdGhhdCBhcmUgaW5zZXJ0aW9uIHBvaW50cy4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIHJ1bi4KICAgICAgICogQHJldHVybiB7Tm9kZX0gRmlyc3QgZWZmZWN0aXZlIGNoaWxkIG5vZGUgdGhhdCBtYXRjaGVzIHNlbGVjdG9yLgogICAgICAgKi8KICAgICAgcXVlcnlFZmZlY3RpdmVDaGlsZHJlbihzZWxlY3RvcikgewogICAgICAgIGxldCBlJCA9IHRoaXMucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHNlbGVjdG9yKTsKICAgICAgICByZXR1cm4gZSQgJiYgZSRbMF07CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBlZmZlY3RpdmUgY2hpbGROb2RlcyB3aXRoaW4gdGhpcyBlbGVtZW50IHRoYXQKICAgICAgICogbWF0Y2ggYHNlbGVjdG9yYC4gVGhlc2UgY2FuIGJlIGRvbSBjaGlsZCBub2RlcyBvciBlbGVtZW50cyBkaXN0cmlidXRlZAogICAgICAgKiB0byBjaGlsZHJlbiB0aGF0IGFyZSBpbnNlcnRpb24gcG9pbnRzLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgU2VsZWN0b3IgdG8gcnVuLgogICAgICAgKiBAcmV0dXJuIHshQXJyYXk8IU5vZGU+fSBMaXN0IG9mIGVmZmVjdGl2ZSBjaGlsZCBub2RlcyB0aGF0IG1hdGNoIHNlbGVjdG9yLgogICAgICAgKi8KICAgICAgcXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzZWxlY3RvcikgewogICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzZWxlY3Rvcik7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBub2RlcyBkaXN0cmlidXRlZCB0byB0aGlzIGVsZW1lbnQncyBgPHNsb3Q+YC4KICAgICAgICoKICAgICAgICogSWYgdGhpcyBlbGVtZW50IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgYDxzbG90PmAgaW4gaXRzIGxvY2FsIERPTSwKICAgICAgICogYW4gb3B0aW9uYWwgc2VsZWN0b3IgbWF5IGJlIHBhc3NlZCB0byBjaG9vc2UgdGhlIGRlc2lyZWQgY29udGVudC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBzbGN0ciBDU1Mgc2VsZWN0b3IgdG8gY2hvb3NlIHRoZSBkZXNpcmVkCiAgICAgICAqICAgYDxzbG90PmAuICBEZWZhdWx0cyB0byBgY29udGVudGAuCiAgICAgICAqIEByZXR1cm4geyFBcnJheTwhTm9kZT59IExpc3Qgb2YgZGlzdHJpYnV0ZWQgbm9kZXMgZm9yIHRoZSBgPHNsb3Q+YC4KICAgICAgICovCiAgICAgIGdldENvbnRlbnRDaGlsZE5vZGVzKHNsY3RyKSB7CiAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzbGN0ciB8fCAnc2xvdCcpOwogICAgICAgIHJldHVybiBjb250ZW50ID8gLyoqIEB0eXBlIHtQb2x5bWVyLkRvbUFwaX0gKi8oUG9seW1lci5kb20oY29udGVudCkpLmdldERpc3RyaWJ1dGVkTm9kZXMoKSA6IFtdOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgZWxlbWVudCBjaGlsZHJlbiBkaXN0cmlidXRlZCB0byB0aGlzIGVsZW1lbnQncwogICAgICAgKiBgPHNsb3Q+YC4KICAgICAgICoKICAgICAgICogSWYgdGhpcyBlbGVtZW50IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgYDxzbG90PmAgaW4gaXRzCiAgICAgICAqIGxvY2FsIERPTSwgYW4gb3B0aW9uYWwgc2VsZWN0b3IgbWF5IGJlIHBhc3NlZCB0byBjaG9vc2UgdGhlIGRlc2lyZWQKICAgICAgICogY29udGVudC4gIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgZ2V0Q29udGVudENoaWxkTm9kZXNgIGluIHRoYXQgb25seQogICAgICAgKiBlbGVtZW50cyBhcmUgcmV0dXJuZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gc2xjdHIgQ1NTIHNlbGVjdG9yIHRvIGNob29zZSB0aGUgZGVzaXJlZAogICAgICAgKiAgIGA8Y29udGVudD5gLiAgRGVmYXVsdHMgdG8gYGNvbnRlbnRgLgogICAgICAgKiBAcmV0dXJuIHshQXJyYXk8IUhUTUxFbGVtZW50Pn0gTGlzdCBvZiBkaXN0cmlidXRlZCBub2RlcyBmb3IgdGhlCiAgICAgICAqICAgYDxzbG90PmAuCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfQogICAgICAgKi8KICAgICAgZ2V0Q29udGVudENoaWxkcmVuKHNsY3RyKSB7CiAgICAgICAgbGV0IGNoaWxkcmVuID0gLyoqIEB0eXBlIHshQXJyYXk8IUhUTUxFbGVtZW50Pn0gKi8odGhpcy5nZXRDb250ZW50Q2hpbGROb2RlcyhzbGN0cikuZmlsdGVyKGZ1bmN0aW9uKG4pIHsKICAgICAgICAgIHJldHVybiAobi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gY2hpbGRyZW47CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDaGVja3Mgd2hldGhlciBhbiBlbGVtZW50IGlzIGluIHRoaXMgZWxlbWVudCdzIGxpZ2h0IERPTSB0cmVlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0gez9Ob2RlfSBub2RlIFRoZSBlbGVtZW50IHRvIGJlIGNoZWNrZWQuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgbm9kZSBpcyBpbiB0aGlzIGVsZW1lbnQncyBsaWdodCBET00gdHJlZS4KICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IExlZ2FjeUVsZW1lbnRNaXhpbiBtdXN0IGJlIGFwcGxpZWQgdG8gYW4gSFRNTEVsZW1lbnQKICAgICAgICovCiAgICAgIGlzTGlnaHREZXNjZW5kYW50KG5vZGUpIHsKICAgICAgICBjb25zdCB0aGlzTm9kZSA9IC8qKiBAdHlwZSB7Tm9kZX0gKi8gKHRoaXMpOwogICAgICAgIHJldHVybiB0aGlzTm9kZSAhPT0gbm9kZSAmJiB0aGlzTm9kZS5jb250YWlucyhub2RlKSAmJgogICAgICAgICAgdGhpc05vZGUuZ2V0Um9vdE5vZGUoKSA9PT0gbm9kZS5nZXRSb290Tm9kZSgpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2hlY2tzIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBpbiB0aGlzIGVsZW1lbnQncyBsb2NhbCBET00gdHJlZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshRWxlbWVudH0gbm9kZSBUaGUgZWxlbWVudCB0byBiZSBjaGVja2VkLgogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIG5vZGUgaXMgaW4gdGhpcyBlbGVtZW50J3MgbG9jYWwgRE9NIHRyZWUuCiAgICAgICAqLwogICAgICBpc0xvY2FsRGVzY2VuZGFudChub2RlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucm9vdCA9PT0gbm9kZS5nZXRSb290Tm9kZSgpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogTm8tb3AgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGlzIHNob3VsZCBub3cgYmUgaGFuZGxlZCBieQogICAgICAgKiBTaGFkeUNzcyBsaWJyYXJ5LgogICAgICAgKiBAcGFyYW0gIHsqfSBjb250YWluZXIgVW51c2VkCiAgICAgICAqIEBwYXJhbSAgeyp9IHNob3VsZE9ic2VydmUgVW51c2VkCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBzY29wZVN1YnRyZWUoY29udGFpbmVyLCBzaG91bGRPYnNlcnZlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGNvbXB1dGVkIHN0eWxlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBUaGUgY3NzIHByb3BlcnR5IG5hbWUuCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgY29tcHV0ZWQgY3NzIHByb3BlcnR5IHZhbHVlIGZvciB0aGUgZ2l2ZW4KICAgICAgICogYHByb3BlcnR5YC4KICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IExlZ2FjeUVsZW1lbnRNaXhpbiBtdXN0IGJlIGFwcGxpZWQgdG8gYW4gSFRNTEVsZW1lbnQKICAgICAgICovCiAgICAgIGdldENvbXB1dGVkU3R5bGVWYWx1ZShwcm9wZXJ0eSkgewogICAgICAgIHJldHVybiBzdHlsZUludGVyZmFjZS5nZXRDb21wdXRlZFN0eWxlVmFsdWUoLyoqIEB0eXBlIHshRWxlbWVudH0gKi8odGhpcyksIHByb3BlcnR5KTsKICAgICAgfQoKICAgICAgLy8gZGVib3VuY2UKCiAgICAgIC8qKgogICAgICAgKiBDYWxsIGBkZWJvdW5jZWAgdG8gY29sbGFwc2UgbXVsdGlwbGUgcmVxdWVzdHMgZm9yIGEgbmFtZWQgdGFzayBpbnRvCiAgICAgICAqIG9uZSBpbnZvY2F0aW9uIHdoaWNoIGlzIG1hZGUgYWZ0ZXIgdGhlIHdhaXQgdGltZSBoYXMgZWxhcHNlZCB3aXRoCiAgICAgICAqIG5vIG5ldyByZXF1ZXN0LiAgSWYgbm8gd2FpdCB0aW1lIGlzIGdpdmVuLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQKICAgICAgICogYXQgbWljcm90YXNrIHRpbWluZyAoZ3VhcmFudGVlZCBiZWZvcmUgcGFpbnQpLgogICAgICAgKgogICAgICAgKiAgICAgZGVib3VuY2VkQ2xpY2tBY3Rpb24oZSkgewogICAgICAgKiAgICAgICAvLyB3aWxsIG5vdCBjYWxsIGBwcm9jZXNzQ2xpY2tgIG1vcmUgdGhhbiBvbmNlIHBlciAxMDBtcwogICAgICAgKiAgICAgICB0aGlzLmRlYm91bmNlKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgKiAgICAgICAgdGhpcy5wcm9jZXNzQ2xpY2soKTsKICAgICAgICogICAgICAgfSAxMDApOwogICAgICAgKiAgICAgfQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gam9iTmFtZSBTdHJpbmcgdG8gaWRlbnRpZnkgdGhlIGRlYm91bmNlIGpvYi4KICAgICAgICogQHBhcmFtIHtmdW5jdGlvbigpOnZvaWR9IGNhbGxiYWNrIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkICh3aXRoIGB0aGlzYAogICAgICAgKiAgIGNvbnRleHQpIHdoZW4gdGhlIHdhaXQgdGltZSBlbGFwc2VzLgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBPcHRpb25hbCB3YWl0IHRpbWUgaW4gbWlsbGlzZWNvbmRzIChtcykgYWZ0ZXIgdGhlCiAgICAgICAqICAgbGFzdCBzaWduYWwgdGhhdCBtdXN0IGVsYXBzZSBiZWZvcmUgaW52b2tpbmcgYGNhbGxiYWNrYAogICAgICAgKiBAcmV0dXJuIHshT2JqZWN0fSBSZXR1cm5zIGEgZGVib3VuY2VyIG9iamVjdCBvbiB3aGljaCBleGlzdHMgdGhlCiAgICAgICAqIGZvbGxvd2luZyBtZXRob2RzOiBgaXNBY3RpdmUoKWAgcmV0dXJucyB0cnVlIGlmIHRoZSBkZWJvdW5jZXIgaXMKICAgICAgICogYWN0aXZlOyBgY2FuY2VsKClgIGNhbmNlbHMgdGhlIGRlYm91bmNlciBpZiBpdCBpcyBhY3RpdmU7CiAgICAgICAqIGBmbHVzaCgpYCBpbW1lZGlhdGVseSBpbnZva2VzIHRoZSBkZWJvdW5jZWQgY2FsbGJhY2sgaWYgdGhlIGRlYm91bmNlcgogICAgICAgKiBpcyBhY3RpdmUuCiAgICAgICAqLwogICAgICBkZWJvdW5jZShqb2JOYW1lLCBjYWxsYmFjaywgd2FpdCkgewogICAgICAgIHRoaXMuX2RlYm91bmNlcnMgPSB0aGlzLl9kZWJvdW5jZXJzIHx8IHt9OwogICAgICAgIHJldHVybiB0aGlzLl9kZWJvdW5jZXJzW2pvYk5hbWVdID0gUG9seW1lci5EZWJvdW5jZXIuZGVib3VuY2UoCiAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXQogICAgICAgICAgICAsIHdhaXQgPiAwID8gUG9seW1lci5Bc3luYy50aW1lT3V0LmFmdGVyKHdhaXQpIDogUG9seW1lci5Bc3luYy5taWNyb1Rhc2sKICAgICAgICAgICAgLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciBhIG5hbWVkIGRlYm91bmNlciBpcyBhY3RpdmUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBqb2JOYW1lIFRoZSBuYW1lIG9mIHRoZSBkZWJvdW5jZXIgc3RhcnRlZCB3aXRoIGBkZWJvdW5jZWAKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZGVib3VuY2VyIGlzIGFjdGl2ZSAoaGFzIG5vdCB5ZXQgZmlyZWQpLgogICAgICAgKi8KICAgICAgaXNEZWJvdW5jZXJBY3RpdmUoam9iTmFtZSkgewogICAgICAgIHRoaXMuX2RlYm91bmNlcnMgPSB0aGlzLl9kZWJvdW5jZXJzIHx8IHt9OwogICAgICAgIGxldCBkZWJvdW5jZXIgPSB0aGlzLl9kZWJvdW5jZXJzW2pvYk5hbWVdOwogICAgICAgIHJldHVybiAhIShkZWJvdW5jZXIgJiYgZGVib3VuY2VyLmlzQWN0aXZlKCkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogSW1tZWRpYXRlbHkgY2FsbHMgdGhlIGRlYm91bmNlciBgY2FsbGJhY2tgIGFuZCBpbmFjdGl2YXRlcyBpdC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGpvYk5hbWUgVGhlIG5hbWUgb2YgdGhlIGRlYm91bmNlciBzdGFydGVkIHdpdGggYGRlYm91bmNlYAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgZmx1c2hEZWJvdW5jZXIoam9iTmFtZSkgewogICAgICAgIHRoaXMuX2RlYm91bmNlcnMgPSB0aGlzLl9kZWJvdW5jZXJzIHx8IHt9OwogICAgICAgIGxldCBkZWJvdW5jZXIgPSB0aGlzLl9kZWJvdW5jZXJzW2pvYk5hbWVdOwogICAgICAgIGlmIChkZWJvdW5jZXIpIHsKICAgICAgICAgIGRlYm91bmNlci5mbHVzaCgpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbmNlbHMgYW4gYWN0aXZlIGRlYm91bmNlci4gIFRoZSBgY2FsbGJhY2tgIHdpbGwgbm90IGJlIGNhbGxlZC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGpvYk5hbWUgVGhlIG5hbWUgb2YgdGhlIGRlYm91bmNlciBzdGFydGVkIHdpdGggYGRlYm91bmNlYAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2FuY2VsRGVib3VuY2VyKGpvYk5hbWUpIHsKICAgICAgICB0aGlzLl9kZWJvdW5jZXJzID0gdGhpcy5fZGVib3VuY2VycyB8fCB7fTsKICAgICAgICBsZXQgZGVib3VuY2VyID0gdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTsKICAgICAgICBpZiAoZGVib3VuY2VyKSB7CiAgICAgICAgICBkZWJvdW5jZXIuY2FuY2VsKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogUnVucyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LgogICAgICAgKgogICAgICAgKiBCeSBkZWZhdWx0IChpZiBubyB3YWl0VGltZSBpcyBzcGVjaWZpZWQpLCBhc3luYyBjYWxsYmFja3MgYXJlIHJ1biBhdAogICAgICAgKiBtaWNyb3Rhc2sgdGltaW5nLCB3aGljaCB3aWxsIG9jY3VyIGJlZm9yZSBwYWludC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshRnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBydW4sIGJvdW5kIHRvIGB0aGlzYC4KICAgICAgICogQHBhcmFtIHtudW1iZXI9fSB3YWl0VGltZSBUaW1lIHRvIHdhaXQgYmVmb3JlIGNhbGxpbmcgdGhlCiAgICAgICAqICAgYGNhbGxiYWNrYC4gIElmIHVuc3BlY2lmaWVkIG9yIDAsIHRoZSBjYWxsYmFjayB3aWxsIGJlIHJ1biBhdCBtaWNyb3Rhc2sKICAgICAgICogICB0aW1pbmcgKGJlZm9yZSBwYWludCkuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gSGFuZGxlIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBhc3luYyBqb2IuCiAgICAgICAqLwogICAgICBhc3luYyhjYWxsYmFjaywgd2FpdFRpbWUpIHsKICAgICAgICByZXR1cm4gd2FpdFRpbWUgPiAwID8gUG9seW1lci5Bc3luYy50aW1lT3V0LnJ1bihjYWxsYmFjay5iaW5kKHRoaXMpLCB3YWl0VGltZSkgOgogICAgICAgICAgICB+UG9seW1lci5Bc3luYy5taWNyb1Rhc2sucnVuKGNhbGxiYWNrLmJpbmQodGhpcykpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2FuY2VscyBhbiBhc3luYyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIGBhc3luY2AuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoYW5kbGUgSGFuZGxlIHJldHVybmVkIGZyb20gb3JpZ2luYWwgYGFzeW5jYCBjYWxsIHRvCiAgICAgICAqICAgY2FuY2VsLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2FuY2VsQXN5bmMoaGFuZGxlKSB7CiAgICAgICAgaGFuZGxlIDwgMCA/IFBvbHltZXIuQXN5bmMubWljcm9UYXNrLmNhbmNlbCh+aGFuZGxlKSA6CiAgICAgICAgICAgIFBvbHltZXIuQXN5bmMudGltZU91dC5jYW5jZWwoaGFuZGxlKTsKICAgICAgfQoKICAgICAgLy8gb3RoZXIKCiAgICAgIC8qKgogICAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNyZWF0aW5nIGFuIGVsZW1lbnQgYW5kIGNvbmZpZ3VyaW5nIGl0LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIEhUTUwgZWxlbWVudCB0YWcgdG8gY3JlYXRlLgogICAgICAgKiBAcGFyYW0ge09iamVjdD19IHByb3BzIE9iamVjdCBvZiBwcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyZSBvbiB0aGUKICAgICAgICogICAgaW5zdGFuY2UuCiAgICAgICAqIEByZXR1cm4geyFFbGVtZW50fSBOZXdseSBjcmVhdGVkIGFuZCBjb25maWd1cmVkIGVsZW1lbnQuCiAgICAgICAqLwogICAgICBjcmVhdGUodGFnLCBwcm9wcykgewogICAgICAgIGxldCBlbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7CiAgICAgICAgaWYgKHByb3BzKSB7CiAgICAgICAgICBpZiAoZWx0LnNldFByb3BlcnRpZXMpIHsKICAgICAgICAgICAgZWx0LnNldFByb3BlcnRpZXMocHJvcHMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yIChsZXQgbiBpbiBwcm9wcykgewogICAgICAgICAgICAgIGVsdFtuXSA9IHByb3BzW25dOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBlbHQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGltcG9ydGluZyBhbiBIVE1MIGRvY3VtZW50IGltcGVyYXRpdmVseS4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIG5ldyBgPGxpbmsgcmVsPSJpbXBvcnQiPmAgZWxlbWVudCB3aXRoCiAgICAgICAqIHRoZSBwcm92aWRlZCBVUkwgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGRvY3VtZW50IHRvIHN0YXJ0IGxvYWRpbmcuCiAgICAgICAqIEluIHRoZSBgb25sb2FkYCBjYWxsYmFjaywgdGhlIGBpbXBvcnRgIHByb3BlcnR5IG9mIHRoZSBgbGlua2AKICAgICAgICogZWxlbWVudCB3aWxsIGNvbnRhaW4gdGhlIGltcG9ydGVkIGRvY3VtZW50IGNvbnRlbnRzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaHJlZiBVUkwgdG8gZG9jdW1lbnQgdG8gbG9hZC4KICAgICAgICogQHBhcmFtIHs/ZnVuY3Rpb24oIUV2ZW50KTp2b2lkPX0gb25sb2FkIENhbGxiYWNrIHRvIG5vdGlmeSB3aGVuIGFuIGltcG9ydCBzdWNjZXNzZnVsbHkKICAgICAgICogICBsb2FkZWQuCiAgICAgICAqIEBwYXJhbSB7P2Z1bmN0aW9uKCFFcnJvckV2ZW50KTp2b2lkPX0gb25lcnJvciBDYWxsYmFjayB0byBub3RpZnkgd2hlbiBhbiBpbXBvcnQKICAgICAgICogICB1bnN1Y2Nlc3NmdWxseSBsb2FkZWQuCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdEFzeW5jIFRydWUgaWYgdGhlIGltcG9ydCBzaG91bGQgYmUgbG9hZGVkIGBhc3luY2AuCiAgICAgICAqICAgRGVmYXVsdHMgdG8gYGZhbHNlYC4KICAgICAgICogQHJldHVybiB7IUhUTUxMaW5rRWxlbWVudH0gVGhlIGxpbmsgZWxlbWVudCBmb3IgdGhlIFVSTCB0byBiZSBsb2FkZWQuCiAgICAgICAqLwogICAgICBpbXBvcnRIcmVmKGhyZWYsIG9ubG9hZCwgb25lcnJvciwgb3B0QXN5bmMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwogICAgICAgIGxldCBsb2FkRm4gPSBvbmxvYWQgPyBvbmxvYWQuYmluZCh0aGlzKSA6IG51bGw7CiAgICAgICAgbGV0IGVycm9yRm4gPSBvbmVycm9yID8gb25lcnJvci5iaW5kKHRoaXMpIDogbnVsbDsKICAgICAgICByZXR1cm4gUG9seW1lci5pbXBvcnRIcmVmKGhyZWYsIGxvYWRGbiwgZXJyb3JGbiwgb3B0QXN5bmMpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUG9seWZpbGwgZm9yIEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMsIHdoaWNoIGlzIHNvbWV0aW1lcyBzdGlsbAogICAgICAgKiBwcmVmaXhlZC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIHRlc3QuCiAgICAgICAqIEBwYXJhbSB7IUVsZW1lbnQ9fSBub2RlIEVsZW1lbnQgdG8gdGVzdCB0aGUgc2VsZWN0b3IgYWdhaW5zdC4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci4KICAgICAgICovCiAgICAgIGVsZW1lbnRNYXRjaGVzKHNlbGVjdG9yLCBub2RlKSB7CiAgICAgICAgcmV0dXJuIFBvbHltZXIuZG9tLm1hdGNoZXNTZWxlY3RvcigvKiogQHR5cGUgeyFFbGVtZW50fSAqLyAobm9kZSB8fCB0aGlzKSwgc2VsZWN0b3IpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogVG9nZ2xlcyBhbiBIVE1MIGF0dHJpYnV0ZSBvbiBvciBvZmYuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEhUTUwgYXR0cmlidXRlIG5hbWUKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gYm9vbCBCb29sZWFuIHRvIGZvcmNlIHRoZSBhdHRyaWJ1dGUgb24gb3Igb2ZmLgogICAgICAgKiAgICBXaGVuIHVuc3BlY2lmaWVkLCB0aGUgc3RhdGUgb2YgdGhlIGF0dHJpYnV0ZSB3aWxsIGJlIHJldmVyc2VkLgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBub2RlIE5vZGUgdG8gdGFyZ2V0LiAgRGVmYXVsdHMgdG8gYHRoaXNgLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgdG9nZ2xlQXR0cmlidXRlKG5hbWUsIGJvb2wsIG5vZGUpIHsKICAgICAgICBub2RlID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSB8fCB0aGlzKTsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICBib29sID0gIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpOwogICAgICAgIH0KICAgICAgICBpZiAoYm9vbCkgewogICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgJycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKICAgICAgICB9CiAgICAgIH0KCgogICAgICAvKioKICAgICAgICogVG9nZ2xlcyBhIENTUyBjbGFzcyBvbiBvciBvZmYuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBjbGFzcyBuYW1lCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGJvb2wgQm9vbGVhbiB0byBmb3JjZSB0aGUgY2xhc3Mgb24gb3Igb2ZmLgogICAgICAgKiAgICBXaGVuIHVuc3BlY2lmaWVkLCB0aGUgc3RhdGUgb2YgdGhlIGNsYXNzIHdpbGwgYmUgcmV2ZXJzZWQuCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudD19IG5vZGUgTm9kZSB0byB0YXJnZXQuICBEZWZhdWx0cyB0byBgdGhpc2AuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICB0b2dnbGVDbGFzcyhuYW1lLCBib29sLCBub2RlKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyk7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgYm9vbCA9ICFub2RlLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKTsKICAgICAgICB9CiAgICAgICAgaWYgKGJvb2wpIHsKICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChuYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENyb3NzLXBsYXRmb3JtIGhlbHBlciBmb3Igc2V0dGluZyBhbiBlbGVtZW50J3MgQ1NTIGB0cmFuc2Zvcm1gIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNmb3JtVGV4dCBUcmFuc2Zvcm0gc2V0dGluZy4KICAgICAgICogQHBhcmFtIHtFbGVtZW50PX0gbm9kZSBFbGVtZW50IHRvIGFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8uCiAgICAgICAqIERlZmF1bHRzIHRvIGB0aGlzYAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgdHJhbnNmb3JtKHRyYW5zZm9ybVRleHQsIG5vZGUpIHsKICAgICAgICBub2RlID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSB8fCB0aGlzKTsKICAgICAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zZm9ybVRleHQ7CiAgICAgICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZXh0OwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3Jvc3MtcGxhdGZvcm0gaGVscGVyIGZvciBzZXR0aW5nIGFuIGVsZW1lbnQncyBDU1MgYHRyYW5zbGF0ZTNkYAogICAgICAgKiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHggWCBvZmZzZXQuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IFkgb2Zmc2V0LgogICAgICAgKiBAcGFyYW0ge251bWJlcn0geiBaIG9mZnNldC4KICAgICAgICogQHBhcmFtIHtFbGVtZW50PX0gbm9kZSBFbGVtZW50IHRvIGFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8uCiAgICAgICAqIERlZmF1bHRzIHRvIGB0aGlzYC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHRyYW5zbGF0ZTNkKHgsIHksIHosIG5vZGUpIHsKICAgICAgICBub2RlID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSB8fCB0aGlzKTsKICAgICAgICB0aGlzLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoJyArIHggKyAnLCcgKyB5ICsgJywnICsgeiArICcpJywgbm9kZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSBhbiBhcnJheSwgaWYgaXQgZXhpc3RzLgogICAgICAgKgogICAgICAgKiBJZiB0aGUgYXJyYXkgaXMgc3BlY2lmaWVkIGJ5IHBhdGgsIGEgY2hhbmdlIG5vdGlmaWNhdGlvbiBpcwogICAgICAgKiBnZW5lcmF0ZWQsIHNvIHRoYXQgb2JzZXJ2ZXJzLCBkYXRhIGJpbmRpbmdzIGFuZCBjb21wdXRlZAogICAgICAgKiBwcm9wZXJ0aWVzIHdhdGNoaW5nIHRoYXQgcGF0aCBjYW4gdXBkYXRlLgogICAgICAgKgogICAgICAgKiBJZiB0aGUgYXJyYXkgaXMgcGFzc2VkIGRpcmVjdGx5LCAqKm5vIGNoYW5nZQogICAgICAgKiBub3RpZmljYXRpb24gaXMgZ2VuZXJhdGVkKiouCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PG51bWJlcnxzdHJpbmc+fSBhcnJheU9yUGF0aCBQYXRoIHRvIGFycmF5IGZyb20gd2hpY2ggdG8gcmVtb3ZlIHRoZSBpdGVtCiAgICAgICAqICAgKG9yIHRoZSBhcnJheSBpdHNlbGYpLgogICAgICAgKiBAcGFyYW0geyp9IGl0ZW0gSXRlbSB0byByZW1vdmUuCiAgICAgICAqIEByZXR1cm4ge0FycmF5fSBBcnJheSBjb250YWluaW5nIGl0ZW0gcmVtb3ZlZC4KICAgICAgICovCiAgICAgIGFycmF5RGVsZXRlKGFycmF5T3JQYXRoLCBpdGVtKSB7CiAgICAgICAgbGV0IGluZGV4OwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5T3JQYXRoKSkgewogICAgICAgICAgaW5kZXggPSBhcnJheU9yUGF0aC5pbmRleE9mKGl0ZW0pOwogICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5T3JQYXRoLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCBhcnIgPSBQb2x5bWVyLlBhdGguZ2V0KHRoaXMsIGFycmF5T3JQYXRoKTsKICAgICAgICAgIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7CiAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5zcGxpY2UoYXJyYXlPclBhdGgsIGluZGV4LCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIC8vIGxvZ2dpbmcKCiAgICAgIC8qKgogICAgICAgKiBGYWNhZGVzIGBjb25zb2xlLmxvZ2AvYHdhcm5gL2BlcnJvcmAgYXMgb3ZlcnJpZGUgcG9pbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsZXZlbCBPbmUgb2YgJ2xvZycsICd3YXJuJywgJ2Vycm9yJwogICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIEFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB0byBsb2cKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9sb2dnZXIobGV2ZWwsIGFyZ3MpIHsKICAgICAgICAvLyBhY2NlcHQgWydmb28nLCAnYmFyJ10gYW5kIFtbJ2ZvbycsICdiYXInXV0KICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSAmJiBhcmdzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7CiAgICAgICAgICBhcmdzID0gYXJnc1swXTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoKGxldmVsKSB7CiAgICAgICAgICBjYXNlICdsb2cnOgogICAgICAgICAgY2FzZSAnd2Fybic6CiAgICAgICAgICBjYXNlICdlcnJvcic6CiAgICAgICAgICAgIGNvbnNvbGVbbGV2ZWxdKC4uLmFyZ3MpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZhY2FkZXMgYGNvbnNvbGUubG9nYCBhcyBhbiBvdmVycmlkZSBwb2ludC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIEFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB0byBsb2cKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9sb2coLi4uYXJncykgewogICAgICAgIHRoaXMuX2xvZ2dlcignbG9nJywgYXJncyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBGYWNhZGVzIGBjb25zb2xlLndhcm5gIGFzIGFuIG92ZXJyaWRlIHBvaW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIHRvIGxvZwogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3dhcm4oLi4uYXJncykgewogICAgICAgIHRoaXMuX2xvZ2dlcignd2FybicsIGFyZ3MpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRmFjYWRlcyBgY29uc29sZS5lcnJvcmAgYXMgYW4gb3ZlcnJpZGUgcG9pbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgdG8gbG9nCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfZXJyb3IoLi4uYXJncykgewogICAgICAgIHRoaXMuX2xvZ2dlcignZXJyb3InLCBhcmdzKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZvcm1hdHMgYSBtZXNzYWdlIHVzaW5nIHRoZSBlbGVtZW50IHR5cGUgYW4gYSBtZXRob2QgbmFtZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgTWV0aG9kIG5hbWUgdG8gYXNzb2NpYXRlIHdpdGggbWVzc2FnZQogICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIHRvIGxvZwogICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgd2l0aCBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIGZvciBgY29uc29sZWAKICAgICAgICogICBsb2dnaW5nLgogICAgICAgKi8KICAgICAgX2xvZ2YobWV0aG9kTmFtZSwgLi4uYXJncykgewogICAgICAgIHJldHVybiBbJ1slczo6JXNdJywgdGhpcy5pcywgbWV0aG9kTmFtZSwgLi4uYXJnc107CiAgICAgIH0KCiAgICB9CgogICAgTGVnYWN5RWxlbWVudC5wcm90b3R5cGUuaXMgPSAnJzsKCiAgICByZXR1cm4gTGVnYWN5RWxlbWVudDsKCiAgfSk7Cgp9KSgpOwoKCgogIChmdW5jdGlvbigpIHsKCiAgICAndXNlIHN0cmljdCc7CgogICAgY29uc3QgbGlmZWN5Y2xlUHJvcHMgPSB7CiAgICAgIGF0dGFjaGVkOiB0cnVlLAogICAgICBkZXRhY2hlZDogdHJ1ZSwKICAgICAgcmVhZHk6IHRydWUsCiAgICAgIGNyZWF0ZWQ6IHRydWUsCiAgICAgIGJlZm9yZVJlZ2lzdGVyOiB0cnVlLAogICAgICByZWdpc3RlcmVkOiB0cnVlLAogICAgICBhdHRyaWJ1dGVDaGFuZ2VkOiB0cnVlLAogICAgICBsaXN0ZW5lcnM6IHRydWUsCiAgICAgIGhvc3RBdHRyaWJ1dGVzOiB0cnVlCiAgICB9OwoKICAgIGNvbnN0IGV4Y2x1ZGVPbkluZm8gPSB7CiAgICAgIGF0dGFjaGVkOiB0cnVlLAogICAgICBkZXRhY2hlZDogdHJ1ZSwKICAgICAgcmVhZHk6IHRydWUsCiAgICAgIGNyZWF0ZWQ6IHRydWUsCiAgICAgIGJlZm9yZVJlZ2lzdGVyOiB0cnVlLAogICAgICByZWdpc3RlcmVkOiB0cnVlLAogICAgICBhdHRyaWJ1dGVDaGFuZ2VkOiB0cnVlLAogICAgICBiZWhhdmlvcnM6IHRydWUsCiAgICAgIF9ub0FjY2Vzc29yczogdHJ1ZQogICAgfTsKCiAgICBjb25zdCBleGNsdWRlT25CZWhhdmlvcnMgPSBPYmplY3QuYXNzaWduKHsKICAgICAgbGlzdGVuZXJzOiB0cnVlLAogICAgICBob3N0QXR0cmlidXRlczogdHJ1ZSwKICAgICAgcHJvcGVydGllczogdHJ1ZSwKICAgICAgb2JzZXJ2ZXJzOiB0cnVlLAogICAgfSwgZXhjbHVkZU9uSW5mbyk7CgogICAgZnVuY3Rpb24gY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQsIGV4Y2x1ZGVQcm9wcykgewogICAgICBjb25zdCBub0FjY2Vzc29ycyA9IHNvdXJjZS5fbm9BY2Nlc3NvcnM7CiAgICAgIGZvciAobGV0IHAgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKCEocCBpbiBleGNsdWRlUHJvcHMpKSB7CiAgICAgICAgICBpZiAobm9BY2Nlc3NvcnMpIHsKICAgICAgICAgICAgdGFyZ2V0W3BdID0gc291cmNlW3BdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGV0IHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHApOwogICAgICAgICAgICBpZiAocGQpIHsKICAgICAgICAgICAgICAvLyBlbnN1cmUgcHJvcGVydHkgaXMgY29uZmlndXJhYmxlIHNvIHRoYXQgYSBsYXRlciBiZWhhdmlvciBjYW4KICAgICAgICAgICAgICAvLyByZS1jb25maWd1cmUgaXQuCiAgICAgICAgICAgICAgcGQuY29uZmlndXJhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwLCBwZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFwcGxpZXMgYSAibGVnYWN5IiBiZWhhdmlvciBvciBhcnJheSBvZiBiZWhhdmlvcnMgdG8gdGhlIHByb3ZpZGVkIGNsYXNzLgogICAgICoKICAgICAqIE5vdGU6IHRoaXMgbWV0aG9kIHdpbGwgYXV0b21hdGljYWxseSBhbHNvIGFwcGx5IHRoZSBgUG9seW1lci5MZWdhY3lFbGVtZW50TWl4aW5gCiAgICAgKiB0byBlbnN1cmUgdGhhdCBhbnkgbGVnYWN5IGJlaGF2aW9ycyBjYW4gcmVseSBvbiBsZWdhY3kgUG9seW1lciBBUEkgb24KICAgICAqIHRoZSB1bmRlcmx5aW5nIGVsZW1lbnQuCiAgICAgKgogICAgICogQHRlbXBsYXRlIFQKICAgICAqIEBwYXJhbSB7IU9iamVjdHwhQXJyYXk8IU9iamVjdD59IGJlaGF2aW9ycyBCZWhhdmlvciBvYmplY3Qgb3IgYXJyYXkgb2YgYmVoYXZpb3JzLgogICAgICogQHBhcmFtIHtmdW5jdGlvbihuZXc6VCl9IGtsYXNzIEVsZW1lbnQgY2xhc3MuCiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6VCl9IFJldHVybnMgYSBuZXcgRWxlbWVudCBjbGFzcyBleHRlbmRlZCBieSB0aGUKICAgICAqIHBhc3NlZCBpbiBgYmVoYXZpb3JzYCBhbmQgYWxzbyBieSBgUG9seW1lci5MZWdhY3lFbGVtZW50TWl4aW5gLgogICAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzLCBjaGVja1R5cGVzfQogICAgICovCiAgICBmdW5jdGlvbiBtaXhpbkJlaGF2aW9ycyhiZWhhdmlvcnMsIGtsYXNzKSB7CiAgICAgIHJldHVybiBHZW5lcmF0ZUNsYXNzRnJvbUluZm8oe30sIFBvbHltZXIuTGVnYWN5RWxlbWVudE1peGluKGtsYXNzKSwgYmVoYXZpb3JzKTsKICAgIH0KCiAgICAvLyBOT1RFOgogICAgLy8gMS54CiAgICAvLyBCZWhhdmlvcnMgd2VyZSBtaXhlZCBpbiAqaW4gcmV2ZXJzZSBvcmRlciogYW5kIGRlLWR1cGVkIG9uIHRoZSBmbHkuCiAgICAvLyBUaGUgcnVsZSB3YXMgdGhhdCBiZWhhdmlvciBwcm9wZXJ0aWVzIHdlcmUgY29waWVkIG9udG8gdGhlIGVsZW1lbnQKICAgIC8vIHByb3RvdHlwZSBpZiBhbmQgb25seSBpZiB0aGUgcHJvcGVydHkgZGlkIG5vdCBhbHJlYWR5IGV4aXN0LgogICAgLy8gR2l2ZW46IFBvbHltZXJ7IGJlaGF2aW9yczogW0EsIEIsIEMsIEEsIEJdfSwgcHJvcGVydHkgY29weSBvcmRlciB3YXM6CiAgICAvLyAoMSksIEIsICgyKSwgQSwgKDMpIEMuIFRoaXMgbWVhbnMgcHJvdG90eXBlIHByb3BlcnRpZXMgd2luIG92ZXIKICAgIC8vIEIgcHJvcGVydGllcyB3aW4gb3ZlciBBIHdpbiBvdmVyIEMuIFRoaXMgbWlycm9ycyB3aGF0IHdvdWxkIGhhcHBlbgogICAgLy8gd2l0aCBpbmhlcml0YW5jZSBpZiBlbGVtZW50IGV4dGVuZGVkIEIgZXh0ZW5kZWQgQSBleHRlbmRlZCBDLgogICAgLy8KICAgIC8vIEFnYWluIGdpdmVuLCBQb2x5bWVyeyBiZWhhdmlvcnM6IFtBLCBCLCBDLCBBLCBCXX0sIHRoZSByZXN1bHRpbmcKICAgIC8vIGBiZWhhdmlvcnNgIGFycmF5IHdhcyBbQywgQSwgQl0uCiAgICAvLyBCZWhhdmlvciBsaWZlY3ljbGUgbWV0aG9kcyB3ZXJlIGNhbGxlZCBpbiBiZWhhdmlvciBhcnJheSBvcmRlcgogICAgLy8gZm9sbG93ZWQgYnkgdGhlIGVsZW1lbnQsIGUuZy4gKDEpIEMuY3JlYXRlZCwgKDIpIEEuY3JlYXRlZCwKICAgIC8vICgzKSBCLmNyZWF0ZWQsICg0KSBlbGVtZW50LmNyZWF0ZWQuIFRoZXJlIHdhcyBubyBzdXBwb3J0IGZvcgogICAgLy8gc3VwZXIsIGFuZCAic3VwZXItYmVoYXZpb3IiIG1ldGhvZHMgd2VyZSBjYWxsYWJsZSBvbmx5IGJ5IG5hbWUpLgogICAgLy8KICAgIC8vIDIueAogICAgLy8gQmVoYXZpb3JzIGFyZSBtYWRlIGludG8gcHJvcGVyIG1peGlucyB3aGljaCBsaXZlIGluIHRoZQogICAgLy8gZWxlbWVudCdzIHByb3RvdHlwZSBjaGFpbi4gQmVoYXZpb3JzIGFyZSBwbGFjZWQgaW4gdGhlIGVsZW1lbnQgcHJvdG90eXBlCiAgICAvLyBlbGRlc3QgdG8geW91bmdlc3QgYW5kIGRlLWR1cGVkIHlvdW5nZXN0IHRvIG9sZGVzdDoKICAgIC8vIFNvLCBmaXJzdCBbQSwgQiwgQywgQSwgQl0gYmVjb21lcyBbQywgQSwgQl0gdGhlbiwKICAgIC8vIHRoZSBlbGVtZW50IHByb3RvdHlwZSBiZWNvbWVzIChvbGRlc3QpICgxKSBQb2x5bWVyLkVsZW1lbnQsICgyKSBjbGFzcyhDKSwKICAgIC8vICgzKSBjbGFzcyhBKSwgKDQpIGNsYXNzKEIpLCAoNSkgY2xhc3MoUG9seW1lcih7Li4ufSkpLgogICAgLy8gUmVzdWx0OgogICAgLy8gVGhpcyBtZWFucyBlbGVtZW50IHByb3BlcnRpZXMgd2luIG92ZXIgQiBwcm9wZXJ0aWVzIHdpbiBvdmVyIEEgd2luCiAgICAvLyBvdmVyIEMuIChzYW1lIGFzIDEueCkKICAgIC8vIElmIGxpZmVjeWNsZSBpcyBjYWxsZWQgKHN1cGVyIHRoZW4gbWUpLCBvcmRlciBpcwogICAgLy8gKDEpIEMuY3JlYXRlZCwgKDIpIEEuY3JlYXRlZCwgKDMpIEIuY3JlYXRlZCwgKDQpIGVsZW1lbnQuY3JlYXRlZAogICAgLy8gKGFnYWluIHNhbWUgYXMgMS54KQogICAgZnVuY3Rpb24gYXBwbHlCZWhhdmlvcnMocHJvdG8sIGJlaGF2aW9ycywgbGlmZWN5Y2xlKSB7CiAgICAgIGZvciAobGV0IGk9MDsgaTxiZWhhdmlvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBhcHBseUluZm8ocHJvdG8sIGJlaGF2aW9yc1tpXSwgbGlmZWN5Y2xlLCBleGNsdWRlT25CZWhhdmlvcnMpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlJbmZvKHByb3RvLCBpbmZvLCBsaWZlY3ljbGUsIGV4Y2x1ZGVQcm9wcykgewogICAgICBjb3B5UHJvcGVydGllcyhpbmZvLCBwcm90bywgZXhjbHVkZVByb3BzKTsKICAgICAgZm9yIChsZXQgcCBpbiBsaWZlY3ljbGVQcm9wcykgewogICAgICAgIGlmIChpbmZvW3BdKSB7CiAgICAgICAgICBsaWZlY3ljbGVbcF0gPSBsaWZlY3ljbGVbcF0gfHwgW107CiAgICAgICAgICBsaWZlY3ljbGVbcF0ucHVzaChpbmZvW3BdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSB7QXJyYXl9IGJlaGF2aW9ycyBMaXN0IG9mIGJlaGF2aW9ycyB0byBmbGF0dGVuLgogICAgICogQHBhcmFtIHtBcnJheT19IGxpc3QgVGFyZ2V0IGxpc3QgdG8gZmxhdHRlbiBiZWhhdmlvcnMgaW50by4KICAgICAqIEBwYXJhbSB7QXJyYXk9fSBleGNsdWRlIExpc3Qgb2YgYmVoYXZpb3JzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgbGlzdC4KICAgICAqIEByZXR1cm4geyFBcnJheX0gUmV0dXJucyB0aGUgbGlzdCBvZiBmbGF0dGVuZWQgYmVoYXZpb3JzLgogICAgICovCiAgICBmdW5jdGlvbiBmbGF0dGVuQmVoYXZpb3JzKGJlaGF2aW9ycywgbGlzdCwgZXhjbHVkZSkgewogICAgICBsaXN0ID0gbGlzdCB8fCBbXTsKICAgICAgZm9yIChsZXQgaT1iZWhhdmlvcnMubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgbGV0IGIgPSBiZWhhdmlvcnNbaV07CiAgICAgICAgaWYgKGIpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7CiAgICAgICAgICAgIGZsYXR0ZW5CZWhhdmlvcnMoYiwgbGlzdCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBkZWR1cAogICAgICAgICAgICBpZiAobGlzdC5pbmRleE9mKGIpIDwgMCAmJiAoIWV4Y2x1ZGUgfHwgZXhjbHVkZS5pbmRleE9mKGIpIDwgMCkpIHsKICAgICAgICAgICAgICBsaXN0LnVuc2hpZnQoYik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS53YXJuKCdiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Jyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBsaXN0OwogICAgfQoKICAgIC8qIE5vdGUgYWJvdXQgY29uc3RydWN0aW9uIGFuZCBleHRlbnNpb24gb2YgbGVnYWN5IGNsYXNzZXMuCiAgICAgIFtDaGFuZ2VkIGluIFE0IDIwMTggdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UuXQoKICAgICAgV2hlbiBjYWxsaW5nIGBQb2x5bWVyYCBvciBgbWl4aW5CZWhhdmlvcnNgLCB0aGUgZ2VuZXJhdGVkIGNsYXNzIGJlbG93IGlzCiAgICAgIG1hZGUuIFRoZSBsaXN0IG9mIGJlaGF2aW9ycyB3YXMgcHJldmlvdXNseSBtYWRlIGludG8gb25lIGdlbmVyYXRlZCBjbGFzcyBwZXIKICAgICAgYmVoYXZpb3IsIGJ1dCB0aGlzIGlzIG5vIGxvbmdlciB0aGUgY2FzZSBhcyBiZWhhdmlvcnMgYXJlIG5vdyBjYWxsZWQKICAgICAgbWFudWFsbHkuIE5vdGUsIHRoZXJlIG1heSAqc3RpbGwqIGJlIG11bHRpcGxlIGdlbmVyYXRlZCBjbGFzc2VzIGluIHRoZQogICAgICBlbGVtZW50J3MgcHJvdG90eXBlIGNoYWluIGlmIGV4dGVuc2lvbiBpcyB1c2VkIHdpdGggYG1peGluQmVoYXZpb3JzYC4KCiAgICAgIFRoZSBnZW5lcmF0ZWQgY2xhc3MgaXMgZGlyZWN0bHkgdGllZCB0byB0aGUgaW5mbyBvYmplY3QgYW5kIGJlaGF2aW9ycwogICAgICB1c2VkIHRvIGNyZWF0ZSBpdC4gVGhhdCBsaXN0IG9mIGJlaGF2aW9ycyBpcyBmaWx0ZXJlZCBzbyBpdCdzIG9ubHkgdGhlCiAgICAgIGJlaGF2aW9ycyBub3QgYWN0aXZlIG9uIHRoZSBzdXBlcmNsYXNzLiBJbiBvcmRlciB0byBjYWxsIHRocm91Z2ggdG8gdGhlCiAgICAgIGVudGlyZSBsaXN0IG9mIGxpZmVjeWNsZSBtZXRob2RzLCBpdCdzIGltcG9ydGFudCB0byBjYWxsIGBzdXBlcmAuCgogICAgICBUaGUgZWxlbWVudCdzIGBwcm9wZXJ0aWVzYCBhbmQgYG9ic2VydmVyc2AgYXJlIGNvbnRyb2xsZWQgdmlhIHRoZSBmaW5hbGl6YXRpb24KICAgICAgbWVjaGFuaXNtIHByb3ZpZGVkIGJ5IGBQcm9wZXJ0aWVzTWl4aW5gLiBgUHJvcGVydGllc2AgYW5kIGBvYnNlcnZlcnNgIGFyZQogICAgICBjb2xsZWN0ZWQgYnkgbWFudWFsbHkgdHJhdmVyc2luZyB0aGUgcHJvdG90eXBlIGNoYWluIGFuZCBtZXJnaW5nLgoKICAgICAgVG8gbGltaXQgY2hhbmdlcywgdGhlIGBfcmVnaXN0ZXJlZGAgbWV0aG9kIGlzIGNhbGxlZCB2aWEgYF9pbml0aWFsaXplUHJvcGVydGllc2AKICAgICAgYW5kIG5vdCBgX2ZpbmFsaXplQ2xhc3NgLgogICAgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHshUG9seW1lckluaXR9IGluZm8gUG9seW1lciBpbmZvIG9iamVjdAogICAgICogQHBhcmFtIHtmdW5jdGlvbihuZXc6SFRNTEVsZW1lbnQpfSBCYXNlIGJhc2UgY2xhc3MgdG8gZXh0ZW5kIHdpdGggaW5mbyBvYmplY3QKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBiZWhhdmlvcnMgYmVoYXZpb3JzIHRvIGNvcHkgaW50byB0aGUgZWxlbWVudAogICAgICogQHJldHVybiB7ZnVuY3Rpb24obmV3OkhUTUxFbGVtZW50KX0gR2VuZXJhdGVkIGNsYXNzCiAgICAgKiBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBHZW5lcmF0ZUNsYXNzRnJvbUluZm8oaW5mbywgQmFzZSwgYmVoYXZpb3JzKSB7CgogICAgICAvLyBtYW5hZ2VzIGJlaGF2aW9yIGFuZCBsaWZlY3ljbGUgcHJvY2Vzc2luZyAoZmlsbGVkIGluIGFmdGVyIGNsYXNzIGRlZmluaXRpb24pCiAgICAgIGxldCBiZWhhdmlvckxpc3Q7CiAgICAgIGNvbnN0IGxpZmVjeWNsZSA9IHt9OwoKICAgICAgLyoqIEBwcml2YXRlICovCiAgICAgIGNsYXNzIFBvbHltZXJHZW5lcmF0ZWQgZXh0ZW5kcyBCYXNlIHsKCiAgICAgICAgLy8gZXhwbGljaXRseSBub3QgY2FsbGluZyBzdXBlci5fZmluYWxpemVDbGFzcwogICAgICAgIHN0YXRpYyBfZmluYWxpemVDbGFzcygpIHsKICAgICAgICAgIC8vIGlmIGNhbGxpbmcgdmlhIGEgc3ViY2xhc3MgdGhhdCBoYXNuJ3QgYmVlbiBnZW5lcmF0ZWQsIHBhc3MgdGhyb3VnaCB0byBzdXBlcgogICAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KHdpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdnZW5lcmF0ZWRGcm9tJywgdGhpcykpKSB7CiAgICAgICAgICAgIHN1cGVyLl9maW5hbGl6ZUNsYXNzKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBpbnRlcmxlYXZlIHByb3BlcnRpZXMgYW5kIG9ic2VydmVycyBwZXIgYmVoYXZpb3IgYW5kIGBpbmZvYAogICAgICAgICAgICBpZiAoYmVoYXZpb3JMaXN0KSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaT0wLCBiOyBpIDwgYmVoYXZpb3JMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBiID0gYmVoYXZpb3JMaXN0W2ldOwogICAgICAgICAgICAgICAgaWYgKGIucHJvcGVydGllcykgewogICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVByb3BlcnRpZXMoYi5wcm9wZXJ0aWVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChiLm9ic2VydmVycykgewogICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU9ic2VydmVycyhiLm9ic2VydmVycywgYi5wcm9wZXJ0aWVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGluZm8ucHJvcGVydGllcykgewogICAgICAgICAgICAgIHRoaXMuY3JlYXRlUHJvcGVydGllcyhpbmZvLnByb3BlcnRpZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpbmZvLm9ic2VydmVycykgewogICAgICAgICAgICAgIHRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGluZm8ub2JzZXJ2ZXJzLCBpbmZvLnByb3BlcnRpZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0byBwcmVwYXJlIHRoZSBlbGVtZW50IHRlbXBsYXRlCiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkgewogICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHt9OwogICAgICAgICAgaWYgKGJlaGF2aW9yTGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBiZWhhdmlvckxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHByb3BlcnRpZXMsIGJlaGF2aW9yTGlzdFtpXS5wcm9wZXJ0aWVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCBpbmZvLnByb3BlcnRpZXMpOwogICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHsKICAgICAgICAgIGxldCBvYnNlcnZlcnMgPSBbXTsKICAgICAgICAgIGlmIChiZWhhdmlvckxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT0wLCBiOyBpIDwgYmVoYXZpb3JMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgYiA9IGJlaGF2aW9yTGlzdFtpXTsKICAgICAgICAgICAgICBpZiAoYi5vYnNlcnZlcnMpIHsKICAgICAgICAgICAgICAgIG9ic2VydmVycyA9IG9ic2VydmVycy5jb25jYXQoYi5vYnNlcnZlcnMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGluZm8ub2JzZXJ2ZXJzKSB7CiAgICAgICAgICAgIG9ic2VydmVycyA9IG9ic2VydmVycy5jb25jYXQoaW5mby5vYnNlcnZlcnMpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG9ic2VydmVyczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgY3JlYXRlZCgpIHsKICAgICAgICAgIHN1cGVyLmNyZWF0ZWQoKTsKICAgICAgICAgIGNvbnN0IGxpc3QgPSBsaWZlY3ljbGUuY3JlYXRlZDsKICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBsaXN0W2ldLmNhbGwodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX3JlZ2lzdGVyZWQoKSB7CiAgICAgICAgICAvKiBOT1RFOiBgYmVmb3JlUmVnaXN0ZXJgIGlzIGNhbGxlZCBoZXJlIGZvciBiYywgYnV0IHRoZSBiZWhhdmlvcgogICAgICAgICAgICBpcyBkaWZmZXJlbnQgdGhhbiBpbiAxLnguIEluIDEuMCwgdGhlIG1ldGhvZCB3YXMgY2FsbGVkICphZnRlcioKICAgICAgICAgICAgbWl4aW5nIHByb3RvdHlwZXMgdG9nZXRoZXIgYnV0ICpiZWZvcmUqIHByb2Nlc3Npbmcgb2YgbWV0YS1vYmplY3RzLgogICAgICAgICAgICBIb3dldmVyLCBkeW5hbWljIGVmZmVjdHMgY2FuIHN0aWxsIGJlIHNldCBoZXJlIGFuZCBjYW4gYmUgZG9uZSBlaXRoZXIKICAgICAgICAgICAgaW4gYGJlZm9yZVJlZ2lzdGVyYCBvciBgcmVnaXN0ZXJlZGAuIEl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBzZXQKICAgICAgICAgICAgYGlzYCBpbiBgYmVmb3JlUmVnaXN0ZXJgIGFzIHlvdSBjb3VsZCBpbiAxLnguCiAgICAgICAgICAqLwogICAgICAgICAgLy8gb25seSBwcm9jZWVkIGlmIHRoZSBnZW5lcmF0ZWQgY2xhc3MnIHByb3RvdHlwZSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZC4KICAgICAgICAgIGNvbnN0IGdlbmVyYXRlZFByb3RvID0gUG9seW1lckdlbmVyYXRlZC5wcm90b3R5cGU7CiAgICAgICAgICBpZiAoIWdlbmVyYXRlZFByb3RvLmhhc093blByb3BlcnR5KCdfX2hhc1JlZ2lzdGVyRmluaXNoZWQnKSkgewogICAgICAgICAgICBnZW5lcmF0ZWRQcm90by5fX2hhc1JlZ2lzdGVyRmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgICAvLyBlbnN1cmUgc3VwZXJjbGFzcyBpcyByZWdpc3RlcmVkIGZpcnN0LgogICAgICAgICAgICBzdXBlci5fcmVnaXN0ZXJlZCgpOwogICAgICAgICAgICAvLyBjb3B5IHByb3BlcnRpZXMgb250byB0aGUgZ2VuZXJhdGVkIGNsYXNzIGxhemlseSBpZiB3ZSdyZSBvcHRpbWl6aW5nLAogICAgICAgICAgICBpZiAoUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zKSB7CiAgICAgICAgICAgICAgY29weVByb3BlcnRpZXNUb1Byb3RvKGdlbmVyYXRlZFByb3RvKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBtYWtlIHN1cmUgbGVnYWN5IGxpZmVjeWNsZSBpcyBjYWxsZWQgb24gdGhlICplbGVtZW50KidzIHByb3RvdHlwZQogICAgICAgICAgICAvLyBhbmQgbm90IHRoZSBnZW5lcmF0ZWQgY2xhc3MgcHJvdG90eXBlOyBpZiB0aGUgZWxlbWVudCBoYXMgYmVlbgogICAgICAgICAgICAvLyBleHRlbmRlZCwgdGhlc2UgYXJlICpub3QqIHRoZSBzYW1lLgogICAgICAgICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTsKICAgICAgICAgICAgbGV0IGxpc3QgPSBsaWZlY3ljbGUuYmVmb3JlUmVnaXN0ZXI7CiAgICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgbGlzdFtpXS5jYWxsKHByb3RvKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlzdCA9IGxpZmVjeWNsZS5yZWdpc3RlcmVkOwogICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGxpc3RbaV0uY2FsbChwcm90byk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgIF9hcHBseUxpc3RlbmVycygpIHsKICAgICAgICAgIHN1cGVyLl9hcHBseUxpc3RlbmVycygpOwogICAgICAgICAgY29uc3QgbGlzdCA9IGxpZmVjeWNsZS5saXN0ZW5lcnM7CiAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gbGlzdFtpXTsKICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzKSB7CiAgICAgICAgICAgICAgICBmb3IgKGxldCBsIGluIGxpc3RlbmVycykgewogICAgICAgICAgICAgICAgICB0aGlzLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsIGwsIGxpc3RlbmVyc1tsXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBub3RlOiBleGNlcHRpb24gdG8gInN1cGVyIHRoZW4gbWUiIHJ1bGU7CiAgICAgICAgLy8gZG8gd29yayBiZWZvcmUgY2FsbGluZyBzdXBlciBzbyB0aGF0IHN1cGVyIGF0dHJpYnV0ZXMKICAgICAgICAvLyBvbmx5IGFwcGx5IGlmIG5vdCBhbHJlYWR5IHNldC4KICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgIF9lbnN1cmVBdHRyaWJ1dGVzKCkgewogICAgICAgICAgY29uc3QgbGlzdCA9IGxpZmVjeWNsZS5ob3N0QXR0cmlidXRlczsKICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9bGlzdC5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICBjb25zdCBob3N0QXR0cmlidXRlcyA9IGxpc3RbaV07CiAgICAgICAgICAgICAgZm9yIChsZXQgYSBpbiBob3N0QXR0cmlidXRlcykgewogICAgICAgICAgICAgICAgICB0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoYSwgaG9zdEF0dHJpYnV0ZXNbYV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzdXBlci5fZW5zdXJlQXR0cmlidXRlcygpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICByZWFkeSgpIHsKICAgICAgICAgIHN1cGVyLnJlYWR5KCk7CiAgICAgICAgICBsZXQgbGlzdCA9IGxpZmVjeWNsZS5yZWFkeTsKICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBsaXN0W2ldLmNhbGwodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgYXR0YWNoZWQoKSB7CiAgICAgICAgICBzdXBlci5hdHRhY2hlZCgpOwogICAgICAgICAgbGV0IGxpc3QgPSBsaWZlY3ljbGUuYXR0YWNoZWQ7CiAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgbGlzdFtpXS5jYWxsKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgIGRldGFjaGVkKCkgewogICAgICAgICAgc3VwZXIuZGV0YWNoZWQoKTsKICAgICAgICAgIGxldCBsaXN0ID0gbGlmZWN5Y2xlLmRldGFjaGVkOwogICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGxpc3RbaV0uY2FsbCh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW1wbGVtZW50cyBuYXRpdmUgQ3VzdG9tIEVsZW1lbnRzIGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tgIHRvCiAgICAgICAgICogc2V0IGFuIGF0dHJpYnV0ZSB2YWx1ZSB0byBhIHByb3BlcnR5IHZpYSBgX2F0dHJpYnV0ZVRvUHJvcGVydHlgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBhdHRyaWJ1dGUgdGhhdCBjaGFuZ2VkCiAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBvbGQgT2xkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gdmFsdWUgTmV3IGF0dHJpYnV0ZSB2YWx1ZQogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChuYW1lLCBvbGQsIHZhbHVlKSB7CiAgICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgICAgICBsZXQgbGlzdCA9IGxpZmVjeWNsZS5hdHRyaWJ1dGVDaGFuZ2VkOwogICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGxpc3RbaV0uY2FsbCh0aGlzLCBuYW1lLCBvbGQsIHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gYXBwbHkgYmVoYXZpb3JzLCBub3RlIGFjdHVhbCBjb3B5aW5nIGlzIGRvbmUgbGF6aWx5IGF0IGZpcnN0IGluc3RhbmNlIGNyZWF0aW9uCiAgICAgIGlmIChiZWhhdmlvcnMpIHsKICAgICAgICAvLyBOT1RFOiBlbnN1cmUgdGhlIGJlaGF2aW9yIGlzIGV4dGVuZGluZyBhIGNsYXNzIHdpdGgKICAgICAgICAvLyBsZWdhY3kgZWxlbWVudCBhcGkuIFRoaXMgaXMgbmVjZXNzYXJ5IHNpbmNlIGJlaGF2aW9ycyBleHBlY3QgdG8gYmUgYWJsZQogICAgICAgIC8vIHRvIGFjY2VzcyAxLnggbGVnYWN5IGFwaS4KICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYmVoYXZpb3JzKSkgewogICAgICAgICAgYmVoYXZpb3JzID0gW2JlaGF2aW9yc107CiAgICAgICAgfQogICAgICAgIGxldCBzdXBlckJlaGF2aW9ycyA9IEJhc2UucHJvdG90eXBlLmJlaGF2aW9yczsKICAgICAgICAvLyBnZXQgZmxhdHRlbmVkLCBkZWR1cGVkIGxpc3Qgb2YgYmVoYXZpb3JzICpub3QqIGFscmVhZHkgb24gc3VwZXIgY2xhc3MKICAgICAgICBiZWhhdmlvckxpc3QgPSBmbGF0dGVuQmVoYXZpb3JzKGJlaGF2aW9ycywgbnVsbCwgc3VwZXJCZWhhdmlvcnMpOwogICAgICAgIFBvbHltZXJHZW5lcmF0ZWQucHJvdG90eXBlLmJlaGF2aW9ycyA9IHN1cGVyQmVoYXZpb3JzID8KICAgICAgICAgIHN1cGVyQmVoYXZpb3JzLmNvbmNhdChiZWhhdmlvcnMpIDogYmVoYXZpb3JMaXN0OwogICAgICB9CgogICAgICBjb25zdCBjb3B5UHJvcGVydGllc1RvUHJvdG8gPSAocHJvdG8pID0+IHsKICAgICAgICBpZiAoYmVoYXZpb3JMaXN0KSB7CiAgICAgICAgICBhcHBseUJlaGF2aW9ycyhwcm90bywgYmVoYXZpb3JMaXN0LCBsaWZlY3ljbGUpOwogICAgICAgIH0KICAgICAgICBhcHBseUluZm8ocHJvdG8sIGluZm8sIGxpZmVjeWNsZSwgZXhjbHVkZU9uSW5mbyk7CiAgICAgIH07CgogICAgICAvLyBjb3B5IHByb3BlcnRpZXMgaWYgd2UncmUgbm90IG9wdGltaXppbmcKICAgICAgaWYgKCFQb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnMpIHsKICAgICAgICBjb3B5UHJvcGVydGllc1RvUHJvdG8oUG9seW1lckdlbmVyYXRlZC5wcm90b3R5cGUpOwogICAgICB9CgogICAgICBQb2x5bWVyR2VuZXJhdGVkLmdlbmVyYXRlZEZyb20gPSBpbmZvOwoKICAgICAgcmV0dXJuIFBvbHltZXJHZW5lcmF0ZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZXMgYSBjbGFzcyB0aGF0IGV4dGVuZHMgYFBvbHltZXIuTGVnYWN5RWxlbWVudGAgYmFzZWQgb24gdGhlCiAgICAgKiBwcm92aWRlZCBpbmZvIG9iamVjdC4gIE1ldGFkYXRhIG9iamVjdHMgb24gdGhlIGBpbmZvYCBvYmplY3QKICAgICAqIChgcHJvcGVydGllc2AsIGBvYnNlcnZlcnNgLCBgbGlzdGVuZXJzYCwgYGJlaGF2aW9yc2AsIGBpc2ApIGFyZSB1c2VkCiAgICAgKiBmb3IgUG9seW1lcidzIG1ldGEtcHJvZ3JhbW1pbmcgc3lzdGVtcywgYW5kIGFueSBmdW5jdGlvbnMgYXJlIGNvcGllZAogICAgICogdG8gdGhlIGdlbmVyYXRlZCBjbGFzcy4KICAgICAqCiAgICAgKiBWYWxpZCAibWV0YWRhdGEiIHZhbHVlcyBhcmUgYXMgZm9sbG93czoKICAgICAqCiAgICAgKiBgaXNgOiBTdHJpbmcgcHJvdmlkaW5nIHRoZSB0YWcgbmFtZSB0byByZWdpc3RlciB0aGUgZWxlbWVudCB1bmRlci4gSW4KICAgICAqIGFkZGl0aW9uLCBpZiBhIGBkb20tbW9kdWxlYCB3aXRoIHRoZSBzYW1lIGlkIGV4aXN0cywgdGhlIGZpcnN0IHRlbXBsYXRlCiAgICAgKiBpbiB0aGF0IGBkb20tbW9kdWxlYCB3aWxsIGJlIHN0YW1wZWQgaW50byB0aGUgc2hhZG93IHJvb3Qgb2YgdGhpcyBlbGVtZW50LAogICAgICogd2l0aCBzdXBwb3J0IGZvciBkZWNsYXJhdGl2ZSBldmVudCBsaXN0ZW5lcnMgKGBvbi0uLi5gKSwgUG9seW1lciBkYXRhCiAgICAgKiBiaW5kaW5ncyAoYFtbLi4uXV1gIGFuZCBge3suLi59fWApLCBhbmQgaWQtYmFzZWQgbm9kZSBmaW5kaW5nIGludG8KICAgICAqIGB0aGlzLiRgLgogICAgICoKICAgICAqIGBwcm9wZXJ0aWVzYDogT2JqZWN0IGRlc2NyaWJpbmcgcHJvcGVydHktcmVsYXRlZCBtZXRhZGF0YSB1c2VkIGJ5IFBvbHltZXIKICAgICAqIGZlYXR1cmVzIChrZXk6IHByb3BlcnR5IG5hbWVzLCB2YWx1ZTogb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydHkgbWV0YWRhdGEpLgogICAgICogVmFsaWQga2V5cyBpbiBwZXItcHJvcGVydHkgbWV0YWRhdGEgaW5jbHVkZToKICAgICAqIC0gYHR5cGVgIChTdHJpbmd8TnVtYmVyfE9iamVjdHxBcnJheXwuLi4pOiBVc2VkIGJ5CiAgICAgKiAgIGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tgIHRvIGRldGVybWluZSBob3cgc3RyaW5nLWJhc2VkIGF0dHJpYnV0ZXMKICAgICAqICAgYXJlIGRlc2VyaWFsaXplZCB0byBKYXZhU2NyaXB0IHByb3BlcnR5IHZhbHVlcy4KICAgICAqIC0gYG5vdGlmeWAgKGJvb2xlYW4pOiBDYXVzZXMgYSBjaGFuZ2UgaW4gdGhlIHByb3BlcnR5IHRvIGZpcmUgYQogICAgICogICBub24tYnViYmxpbmcgZXZlbnQgY2FsbGVkIGA8cHJvcGVydHk+LWNoYW5nZWRgLiBFbGVtZW50cyB0aGF0IGhhdmUKICAgICAqICAgZW5hYmxlZCB0d28td2F5IGJpbmRpbmcgdG8gdGhlIHByb3BlcnR5IHVzZSB0aGlzIGV2ZW50IHRvIG9ic2VydmUgY2hhbmdlcy4KICAgICAqIC0gYHJlYWRPbmx5YCAoYm9vbGVhbik6IENyZWF0ZXMgYSBnZXR0ZXIgZm9yIHRoZSBwcm9wZXJ0eSwgYnV0IG5vIHNldHRlci4KICAgICAqICAgVG8gc2V0IGEgcmVhZC1vbmx5IHByb3BlcnR5LCB1c2UgdGhlIHByaXZhdGUgc2V0dGVyIG1ldGhvZAogICAgICogICBgX3NldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSlgLgogICAgICogLSBgb2JzZXJ2ZXJgIChzdHJpbmcpOiBPYnNlcnZlciBtZXRob2QgbmFtZSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4KICAgICAqICAgdGhlIHByb3BlcnR5IGNoYW5nZXMuIFRoZSBhcmd1bWVudHMgb2YgdGhlIG1ldGhvZCBhcmUKICAgICAqICAgYCh2YWx1ZSwgcHJldmlvdXNWYWx1ZSlgLgogICAgICogLSBgY29tcHV0ZWRgIChzdHJpbmcpOiBTdHJpbmcgZGVzY3JpYmluZyBtZXRob2QgYW5kIGRlcGVuZGVudCBwcm9wZXJ0aWVzCiAgICAgKiAgIGZvciBjb21wdXRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgKGUuZy4gYCdjb21wdXRlRm9vKGJhciwgem90KSdgKS4KICAgICAqICAgQ29tcHV0ZWQgcHJvcGVydGllcyBhcmUgcmVhZC1vbmx5IGJ5IGRlZmF1bHQgYW5kIGNhbiBvbmx5IGJlIGNoYW5nZWQKICAgICAqICAgdmlhIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNvbXB1dGluZyBtZXRob2QuCiAgICAgKgogICAgICogYG9ic2VydmVyc2A6IEFycmF5IG9mIHN0cmluZ3MgZGVzY3JpYmluZyBtdWx0aS1wcm9wZXJ0eSBvYnNlcnZlciBtZXRob2RzCiAgICAgKiAgYW5kIHRoZWlyIGRlcGVuZGVudCBwcm9wZXJ0aWVzIChlLmcuIGAnb2JzZXJ2ZUFCQyhhLCBiLCBjKSdgKS4KICAgICAqCiAgICAgKiBgbGlzdGVuZXJzYDogT2JqZWN0IGRlc2NyaWJpbmcgZXZlbnQgbGlzdGVuZXJzIHRvIGJlIGFkZGVkIHRvIGVhY2gKICAgICAqICBpbnN0YW5jZSBvZiB0aGlzIGVsZW1lbnQgKGtleTogZXZlbnQgbmFtZSwgdmFsdWU6IG1ldGhvZCBuYW1lKS4KICAgICAqCiAgICAgKiBgYmVoYXZpb3JzYDogQXJyYXkgb2YgYWRkaXRpb25hbCBgaW5mb2Agb2JqZWN0cyBjb250YWluaW5nIG1ldGFkYXRhCiAgICAgKiBhbmQgY2FsbGJhY2tzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgYGluZm9gIG9iamVjdCBoZXJlIHdoaWNoIGFyZQogICAgICogbWVyZ2VkIGludG8gdGhpcyBlbGVtZW50LgogICAgICoKICAgICAqIGBob3N0QXR0cmlidXRlc2A6IE9iamVjdCBsaXN0aW5nIGF0dHJpYnV0ZXMgdG8gYmUgYXBwbGllZCB0byB0aGUgaG9zdAogICAgICogIG9uY2UgY3JlYXRlZCAoa2V5OiBhdHRyaWJ1dGUgbmFtZSwgdmFsdWU6IGF0dHJpYnV0ZSB2YWx1ZSkuICBWYWx1ZXMKICAgICAqICBhcmUgc2VyaWFsaXplZCBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgdmFsdWUuICBIb3N0IGF0dHJpYnV0ZXMgc2hvdWxkCiAgICAgKiAgZ2VuZXJhbGx5IGJlIGxpbWl0ZWQgdG8gYXR0cmlidXRlcyBzdWNoIGFzIGB0YWJJbmRleGAgYW5kIGBhcmlhLS4uLmAuCiAgICAgKiAgQXR0cmlidXRlcyBpbiBgaG9zdEF0dHJpYnV0ZXNgIGFyZSBvbmx5IGFwcGxpZWQgaWYgYSB1c2VyLXN1cHBsaWVkCiAgICAgKiAgYXR0cmlidXRlIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgKGF0dHJpYnV0ZXMgaW4gbWFya3VwIG92ZXJyaWRlCiAgICAgKiAgYGhvc3RBdHRyaWJ1dGVzYCkuCiAgICAgKgogICAgICogSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgUG9seW1lci1zcGVjaWZpYyBjYWxsYmFja3MgbWF5IGJlIHByb3ZpZGVkOgogICAgICogLSBgcmVnaXN0ZXJlZGA6IGNhbGxlZCBhZnRlciBmaXJzdCBpbnN0YW5jZSBvZiB0aGlzIGVsZW1lbnQsCiAgICAgKiAtIGBjcmVhdGVkYDogY2FsbGVkIGR1cmluZyBgY29uc3RydWN0b3JgCiAgICAgKiAtIGBhdHRhY2hlZGA6IGNhbGxlZCBkdXJpbmcgYGNvbm5lY3RlZENhbGxiYWNrYAogICAgICogLSBgZGV0YWNoZWRgOiBjYWxsZWQgZHVyaW5nIGBkaXNjb25uZWN0ZWRDYWxsYmFja2AKICAgICAqIC0gYHJlYWR5YDogY2FsbGVkIGJlZm9yZSBmaXJzdCBgYXR0YWNoZWRgLCBhZnRlciBhbGwgcHJvcGVydGllcyBvZgogICAgICogICB0aGlzIGVsZW1lbnQgaGF2ZSBiZWVuIHByb3BhZ2F0ZWQgdG8gaXRzIHRlbXBsYXRlIGFuZCBhbGwgb2JzZXJ2ZXJzCiAgICAgKiAgIGhhdmUgcnVuCiAgICAgKgogICAgICogQHBhcmFtIHshUG9seW1lckluaXR9IGluZm8gT2JqZWN0IGNvbnRhaW5pbmcgUG9seW1lciBtZXRhZGF0YSBhbmQgZnVuY3Rpb25zCiAgICAgKiAgIHRvIGJlY29tZSBjbGFzcyBtZXRob2RzLgogICAgICogQHRlbXBsYXRlIFQKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oVCk6VH0gbWl4aW4gT3B0aW9uYWwgbWl4aW4gdG8gYXBwbHkgdG8gbGVnYWN5IGJhc2UgY2xhc3MKICAgICAqICAgYmVmb3JlIGV4dGVuZGluZyB3aXRoIFBvbHltZXIgbWV0YXByb2dyYW1taW5nLgogICAgICogQHJldHVybiB7ZnVuY3Rpb24obmV3OkhUTUxFbGVtZW50KX0gR2VuZXJhdGVkIGNsYXNzCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICovCiAgICBQb2x5bWVyLkNsYXNzID0gZnVuY3Rpb24oaW5mbywgbWl4aW4pIHsKICAgICAgaWYgKCFpbmZvKSB7CiAgICAgICAgY29uc29sZS53YXJuKCdQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCcpOwogICAgICB9CiAgICAgIGxldCBrbGFzcyA9IG1peGluID8gbWl4aW4oUG9seW1lci5MZWdhY3lFbGVtZW50TWl4aW4oSFRNTEVsZW1lbnQpKSA6CiAgICAgICAgICBQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbihIVE1MRWxlbWVudCk7CiAgICAgIGtsYXNzID0gR2VuZXJhdGVDbGFzc0Zyb21JbmZvKGluZm8sIGtsYXNzLCBpbmZvLmJlaGF2aW9ycyk7CiAgICAgIGlmIChpbmZvLl9lbmFibGVEaXNhYmxlVXBncmFkZSkgewogICAgICAgIGtsYXNzID0gUG9seW1lci5EaXNhYmxlVXBncmFkZU1peGluKGtsYXNzKTsKICAgICAgfQogICAgICAvLyBkZWNvcmF0ZSBrbGFzcyB3aXRoIHJlZ2lzdHJhdGlvbiBpbmZvCiAgICAgIGtsYXNzLmlzID0ga2xhc3MucHJvdG90eXBlLmlzID0gaW5mby5pczsKICAgICAgcmV0dXJuIGtsYXNzOwogICAgfTsKCiAgICBQb2x5bWVyLm1peGluQmVoYXZpb3JzID0gbWl4aW5CZWhhdmlvcnM7CgogIH0pKCk7CgoKCgogIChmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICAvKioKICAgICAqIExlZ2FjeSBjbGFzcyBmYWN0b3J5IGFuZCByZWdpc3RyYXRpb24gaGVscGVyIGZvciBkZWZpbmluZyBQb2x5bWVyCiAgICAgKiBlbGVtZW50cy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvCiAgICAgKiBgY3VzdG9tRWxlbWVudHMuZGVmaW5lKGluZm8uaXMsIFBvbHltZXIuQ2xhc3MoaW5mbykpO2AKICAgICAqCiAgICAgKiBTZWUgYFBvbHltZXIuQ2xhc3NgIGZvciBkZXRhaWxzIG9uIHZhbGlkIGxlZ2FjeSBtZXRhZGF0YSBmb3JtYXQgZm9yIGBpbmZvYC4KICAgICAqCiAgICAgKiBAZ2xvYmFsCiAgICAgKiBAb3ZlcnJpZGUKICAgICAqIEBmdW5jdGlvbiBQb2x5bWVyCiAgICAgKiBAcGFyYW0geyFQb2x5bWVySW5pdH0gaW5mbyBPYmplY3QgY29udGFpbmluZyBQb2x5bWVyIG1ldGFkYXRhIGFuZCBmdW5jdGlvbnMKICAgICAqICAgdG8gYmVjb21lIGNsYXNzIG1ldGhvZHMuCiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6IEhUTUxFbGVtZW50KX0gR2VuZXJhdGVkIGNsYXNzCiAgICAgKiBAc3VwcHJlc3Mge2R1cGxpY2F0ZSwgaW52YWxpZENhc3RzLCBjaGVja1R5cGVzfQogICAgICovCiAgICB3aW5kb3cuUG9seW1lci5fcG9seW1lckZuID0gZnVuY3Rpb24oaW5mbykgewogICAgICAvLyBpZiBpbnB1dCBpcyBhIGBjbGFzc2AgKGFrYSBhIGZ1bmN0aW9uIHdpdGggYSBwcm90b3R5cGUpLCB1c2UgdGhlIHByb3RvdHlwZQogICAgICAvLyByZW1lbWJlciB0aGF0IHRoZSBgY29uc3RydWN0b3JgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkCiAgICAgIGxldCBrbGFzczsKICAgICAgaWYgKHR5cGVvZiBpbmZvID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAga2xhc3MgPSBpbmZvOwogICAgICB9IGVsc2UgewogICAgICAgIGtsYXNzID0gUG9seW1lci5DbGFzcyhpbmZvKTsKICAgICAgfQogICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoa2xhc3MuaXMsIC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyhrbGFzcykpOwogICAgICByZXR1cm4ga2xhc3M7CiAgICB9OwoKICB9KSgpOwoKCgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvLyBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIG1peGluICYgYmVoYXZpb3IKICBmdW5jdGlvbiBtdXRhYmxlUHJvcGVydHlDaGFuZ2UoaW5zdCwgcHJvcGVydHksIHZhbHVlLCBvbGQsIG11dGFibGVEYXRhKSB7CiAgICBsZXQgaXNPYmplY3Q7CiAgICBpZiAobXV0YWJsZURhdGEpIHsKICAgICAgaXNPYmplY3QgPSAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCk7CiAgICAgIC8vIFB1bGwgYG9sZGAgZm9yIE9iamVjdHMgZnJvbSB0ZW1wIGNhY2hlLCBidXQgdHJlYXQgYG51bGxgIGFzIGEgcHJpbWl0aXZlCiAgICAgIGlmIChpc09iamVjdCkgewogICAgICAgIG9sZCA9IGluc3QuX19kYXRhVGVtcFtwcm9wZXJ0eV07CiAgICAgIH0KICAgIH0KICAgIC8vIFN0cmljdCBlcXVhbGl0eSBjaGVjaywgYnV0IHJldHVybiBmYWxzZSBmb3IgTmFOPT09TmFOCiAgICBsZXQgc2hvdWxkQ2hhbmdlID0gKG9sZCAhPT0gdmFsdWUgJiYgKG9sZCA9PT0gb2xkIHx8IHZhbHVlID09PSB2YWx1ZSkpOwogICAgLy8gT2JqZWN0cyBhcmUgc3RvcmVkIGluIHRlbXBvcmFyeSBjYWNoZSAoY2xlYXJlZCBhdCBlbmQgb2YKICAgIC8vIHR1cm4pLCB3aGljaCBpcyB1c2VkIGZvciBkaXJ0eS1jaGVja2luZwogICAgaWYgKGlzT2JqZWN0ICYmIHNob3VsZENoYW5nZSkgewogICAgICBpbnN0Ll9fZGF0YVRlbXBbcHJvcGVydHldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gc2hvdWxkQ2hhbmdlOwogIH0KCiAgLyoqCiAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0byBza2lwIHN0cmljdCBkaXJ0eS1jaGVja2luZyBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzCiAgICogKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpLCBmb3IgdXNlIG9uIGVsZW1lbnRzIHV0aWxpemluZwogICAqIGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AKICAgKgogICAqIEJ5IGRlZmF1bHQsIGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AgcGVyZm9ybXMgc3RyaWN0IGRpcnR5IGNoZWNraW5nIG9uCiAgICogb2JqZWN0cywgd2hpY2ggbWVhbnMgdGhhdCBhbnkgZGVlcCBtb2RpZmljYXRpb25zIHRvIGFuIG9iamVjdCBvciBhcnJheSB3aWxsCiAgICogbm90IGJlIHByb3BhZ2F0ZWQgdW5sZXNzICJpbW11dGFibGUiIGRhdGEgcGF0dGVybnMgYXJlIHVzZWQgKGkuZS4gYWxsIG9iamVjdAogICAqIHJlZmVyZW5jZXMgZnJvbSB0aGUgcm9vdCB0byB0aGUgbXV0YXRpb24gd2VyZSBjaGFuZ2VkKS4KICAgKgogICAqIFBvbHltZXIgYWxzbyBwcm92aWRlcyBhIHByb3ByaWV0YXJ5IGRhdGEgbXV0YXRpb24gYW5kIHBhdGggbm90aWZpY2F0aW9uIEFQSQogICAqIChlLmcuIGBub3RpZnlQYXRoYCwgYHNldGAsIGFuZCBhcnJheSBtdXRhdGlvbiBBUEkncykgdGhhdCBhbGxvdyBlZmZpY2llbnQKICAgKiBtdXRhdGlvbiBhbmQgbm90aWZpY2F0aW9uIG9mIGRlZXAgY2hhbmdlcyBpbiBhbiBvYmplY3QgZ3JhcGggdG8gYWxsIGVsZW1lbnRzCiAgICogYm91bmQgdG8gdGhlIHNhbWUgb2JqZWN0IGdyYXBoLgogICAqCiAgICogSW4gY2FzZXMgd2hlcmUgbmVpdGhlciBpbW11dGFibGUgcGF0dGVybnMgbm9yIHRoZSBkYXRhIG11dGF0aW9uIEFQSSBjYW4gYmUKICAgKiB1c2VkLCBhcHBseWluZyB0aGlzIG1peGluIHdpbGwgY2F1c2UgUG9seW1lciB0byBza2lwIGRpcnR5IGNoZWNraW5nIGZvcgogICAqIG9iamVjdHMgYW5kIGFycmF5cyAoYWx3YXlzIGNvbnNpZGVyIHRoZW0gdG8gYmUgImRpcnR5IikuICBUaGlzIGFsbG93cyBhCiAgICogdXNlciB0byBtYWtlIGEgZGVlcCBtb2RpZmljYXRpb24gdG8gYSBib3VuZCBvYmplY3QgZ3JhcGgsIGFuZCB0aGVuIGVpdGhlcgogICAqIHNpbXBseSByZS1zZXQgdGhlIG9iamVjdCAoZS5nLiBgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXNgKSBvciBjYWxsIGBub3RpZnlQYXRoYAogICAqIChlLmcuIGB0aGlzLm5vdGlmeVBhdGgoJ2l0ZW1zJylgKSB0byB1cGRhdGUgdGhlIHRyZWUuICBOb3RlIHRoYXQgYWxsCiAgICogZWxlbWVudHMgdGhhdCB3aXNoIHRvIGJlIHVwZGF0ZWQgYmFzZWQgb24gZGVlcCBtdXRhdGlvbnMgbXVzdCBhcHBseSB0aGlzCiAgICogbWl4aW4gb3Igb3RoZXJ3aXNlIHNraXAgc3RyaWN0IGRpcnR5IGNoZWNraW5nIGZvciBvYmplY3RzL2FycmF5cy4KICAgKiBTcGVjaWZpY2FsbHksIGFueSBlbGVtZW50cyBpbiB0aGUgYmluZGluZyB0cmVlIGJldHdlZW4gdGhlIHNvdXJjZSBvZiBhCiAgICogbXV0YXRpb24gYW5kIHRoZSBjb25zdW1wdGlvbiBvZiBpdCBtdXN0IGFwcGx5IHRoaXMgbWl4aW4gb3IgZW5hYmxlIHRoZQogICAqIGBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGFgIG1peGluLgogICAqCiAgICogSW4gb3JkZXIgdG8gbWFrZSB0aGUgZGlydHkgY2hlY2sgc3RyYXRlZ3kgY29uZmlndXJhYmxlLCBzZWUKICAgKiBgUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhYC4KICAgKgogICAqIE5vdGUsIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgcHJvcGFnYXRpbmcgbGFyZ2Ugb2JqZWN0IGdyYXBocwogICAqIHdpbGwgYmUgd29yc2UgYXMgb3Bwb3NlZCB0byB1c2luZyBzdHJpY3QgZGlydHkgY2hlY2tpbmcgd2l0aCBpbW11dGFibGUKICAgKiBwYXR0ZXJucyBvciBQb2x5bWVyJ3MgcGF0aCBub3RpZmljYXRpb24gQVBJLgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiB0byBza2lwIHN0cmljdCBkaXJ0eS1jaGVja2luZyBmb3Igb2JqZWN0cwogICAqICAgYW5kIGFycmF5cwogICAqLwogIFBvbHltZXIuTXV0YWJsZURhdGEgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgLyoqCiAgICAgKiBAcG9seW1lcgogICAgICogQG1peGluQ2xhc3MKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX011dGFibGVEYXRhfQogICAgICovCiAgICBjbGFzcyBNdXRhYmxlRGF0YSBleHRlbmRzIHN1cGVyQ2xhc3MgewogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AgdG8gcHJvdmlkZSBvcHRpb24gZm9yIHNraXBwaW5nCiAgICAgICAqIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyBmb3IgT2JqZWN0cyBhbmQgQXJyYXlzLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBwdWxscyB0aGUgdmFsdWUgdG8gZGlydHkgY2hlY2sgYWdhaW5zdCBmcm9tIHRoZSBgX19kYXRhVGVtcGAKICAgICAgICogY2FjaGUgKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAgICogY2FjaGUgaXMgY2xlYXJlZCBhdCB0aGUgZW5kIG9mIGEgdHVybiwgdGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MKICAgICAgICogc2lkZS1lZmZlY3RzIG9mIGRlZXAgb2JqZWN0IGNoYW5nZXMgdG8gYmUgcHJvY2Vzc2VkIGJ5IHJlLXNldHRpbmcgdGhlCiAgICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAgICogY3ljbGVzIGR1ZSB0byAyLXdheSBub3RpZmljYXRpb24pLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIE5ldyBwcm9wZXJ0eSB2YWx1ZQogICAgICAgKiBAcGFyYW0geyp9IG9sZCBQcmV2aW91cyBwcm9wZXJ0eSB2YWx1ZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBvbGQpIHsKICAgICAgICByZXR1cm4gbXV0YWJsZVByb3BlcnR5Q2hhbmdlKHRoaXMsIHByb3BlcnR5LCB2YWx1ZSwgb2xkLCB0cnVlKTsKICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gTXV0YWJsZURhdGE7CgogIH0pOwoKCiAgLyoqCiAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0byBhZGQgdGhlIG9wdGlvbmFsIGFiaWxpdHkgdG8gc2tpcCBzdHJpY3QKICAgKiBkaXJ0eS1jaGVja2luZyBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIChhbHdheXMgY29uc2lkZXIgdGhlbSB0byBiZQogICAqICJkaXJ0eSIpIGJ5IHNldHRpbmcgYSBgbXV0YWJsZS1kYXRhYCBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudCBpbnN0YW5jZS4KICAgKgogICAqIEJ5IGRlZmF1bHQsIGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AgcGVyZm9ybXMgc3RyaWN0IGRpcnR5IGNoZWNraW5nIG9uCiAgICogb2JqZWN0cywgd2hpY2ggbWVhbnMgdGhhdCBhbnkgZGVlcCBtb2RpZmljYXRpb25zIHRvIGFuIG9iamVjdCBvciBhcnJheSB3aWxsCiAgICogbm90IGJlIHByb3BhZ2F0ZWQgdW5sZXNzICJpbW11dGFibGUiIGRhdGEgcGF0dGVybnMgYXJlIHVzZWQgKGkuZS4gYWxsIG9iamVjdAogICAqIHJlZmVyZW5jZXMgZnJvbSB0aGUgcm9vdCB0byB0aGUgbXV0YXRpb24gd2VyZSBjaGFuZ2VkKS4KICAgKgogICAqIFBvbHltZXIgYWxzbyBwcm92aWRlcyBhIHByb3ByaWV0YXJ5IGRhdGEgbXV0YXRpb24gYW5kIHBhdGggbm90aWZpY2F0aW9uIEFQSQogICAqIChlLmcuIGBub3RpZnlQYXRoYCwgYHNldGAsIGFuZCBhcnJheSBtdXRhdGlvbiBBUEkncykgdGhhdCBhbGxvdyBlZmZpY2llbnQKICAgKiBtdXRhdGlvbiBhbmQgbm90aWZpY2F0aW9uIG9mIGRlZXAgY2hhbmdlcyBpbiBhbiBvYmplY3QgZ3JhcGggdG8gYWxsIGVsZW1lbnRzCiAgICogYm91bmQgdG8gdGhlIHNhbWUgb2JqZWN0IGdyYXBoLgogICAqCiAgICogSW4gY2FzZXMgd2hlcmUgbmVpdGhlciBpbW11dGFibGUgcGF0dGVybnMgbm9yIHRoZSBkYXRhIG11dGF0aW9uIEFQSSBjYW4gYmUKICAgKiB1c2VkLCBhcHBseWluZyB0aGlzIG1peGluIHdpbGwgYWxsb3cgUG9seW1lciB0byBza2lwIGRpcnR5IGNoZWNraW5nIGZvcgogICAqIG9iamVjdHMgYW5kIGFycmF5cyAoYWx3YXlzIGNvbnNpZGVyIHRoZW0gdG8gYmUgImRpcnR5IikuICBUaGlzIGFsbG93cyBhCiAgICogdXNlciB0byBtYWtlIGEgZGVlcCBtb2RpZmljYXRpb24gdG8gYSBib3VuZCBvYmplY3QgZ3JhcGgsIGFuZCB0aGVuIGVpdGhlcgogICAqIHNpbXBseSByZS1zZXQgdGhlIG9iamVjdCAoZS5nLiBgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXNgKSBvciBjYWxsIGBub3RpZnlQYXRoYAogICAqIChlLmcuIGB0aGlzLm5vdGlmeVBhdGgoJ2l0ZW1zJylgKSB0byB1cGRhdGUgdGhlIHRyZWUuICBOb3RlIHRoYXQgYWxsCiAgICogZWxlbWVudHMgdGhhdCB3aXNoIHRvIGJlIHVwZGF0ZWQgYmFzZWQgb24gZGVlcCBtdXRhdGlvbnMgbXVzdCBhcHBseSB0aGlzCiAgICogbWl4aW4gb3Igb3RoZXJ3aXNlIHNraXAgc3RyaWN0IGRpcnR5IGNoZWNraW5nIGZvciBvYmplY3RzL2FycmF5cy4KICAgKiBTcGVjaWZpY2FsbHksIGFueSBlbGVtZW50cyBpbiB0aGUgYmluZGluZyB0cmVlIGJldHdlZW4gdGhlIHNvdXJjZSBvZiBhCiAgICogbXV0YXRpb24gYW5kIHRoZSBjb25zdW1wdGlvbiBvZiBpdCBtdXN0IGVuYWJsZSB0aGlzIG1peGluIG9yIGFwcGx5IHRoZQogICAqIGBQb2x5bWVyLk11dGFibGVEYXRhYCBtaXhpbi4KICAgKgogICAqIFdoaWxlIHRoaXMgbWl4aW4gYWRkcyB0aGUgYWJpbGl0eSB0byBmb3JnbyBPYmplY3QvQXJyYXkgZGlydHkgY2hlY2tpbmcsCiAgICogdGhlIGBtdXRhYmxlRGF0YWAgZmxhZyBkZWZhdWx0cyB0byBmYWxzZSBhbmQgbXVzdCBiZSBzZXQgb24gdGhlIGluc3RhbmNlLgogICAqCiAgICogTm90ZSwgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBwcm9wYWdhdGluZyBsYXJnZSBvYmplY3QgZ3JhcGhzCiAgICogd2lsbCBiZSB3b3JzZSBieSByZWx5aW5nIG9uIGBtdXRhYmxlRGF0YTogdHJ1ZWAgYXMgb3Bwb3NlZCB0byB1c2luZwogICAqIHN0cmljdCBkaXJ0eSBjaGVja2luZyB3aXRoIGltbXV0YWJsZSBwYXR0ZXJucyBvciBQb2x5bWVyJ3MgcGF0aCBub3RpZmljYXRpb24KICAgKiBBUEkuCiAgICoKICAgKiBAbWl4aW5GdW5jdGlvbgogICAqIEBwb2x5bWVyCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IGNsYXNzIG1peGluIHRvIG9wdGlvbmFsbHkgc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcKICAgKiAgIGZvciBvYmplY3RzIGFuZCBhcnJheXMKICAgKi8KICBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGEgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgLyoqCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQHBvbHltZXIKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX09wdGlvbmFsTXV0YWJsZURhdGF9CiAgICAgKi8KICAgIGNsYXNzIE9wdGlvbmFsTXV0YWJsZURhdGEgZXh0ZW5kcyBzdXBlckNsYXNzIHsKCiAgICAgIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBJbnN0YW5jZS1sZXZlbCBmbGFnIGZvciBjb25maWd1cmluZyB0aGUgZGlydHktY2hlY2tpbmcgc3RyYXRlZ3kKICAgICAgICAgICAqIGZvciB0aGlzIGVsZW1lbnQuICBXaGVuIHRydWUsIE9iamVjdHMgYW5kIEFycmF5cyB3aWxsIHNraXAgZGlydHkKICAgICAgICAgICAqIGNoZWNraW5nLCBvdGhlcndpc2Ugc3RyaWN0IGVxdWFsaXR5IGNoZWNraW5nIHdpbGwgYmUgdXNlZC4KICAgICAgICAgICAqLwogICAgICAgICAgbXV0YWJsZURhdGE6IEJvb2xlYW4KICAgICAgICB9OwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AgdG8gcHJvdmlkZSBvcHRpb24gZm9yIHNraXBwaW5nCiAgICAgICAqIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyBmb3IgT2JqZWN0cyBhbmQgQXJyYXlzLgogICAgICAgKgogICAgICAgKiBXaGVuIGB0aGlzLm11dGFibGVEYXRhYCBpcyB0cnVlIG9uIHRoaXMgaW5zdGFuY2UsIHRoaXMgbWV0aG9kCiAgICAgICAqIHB1bGxzIHRoZSB2YWx1ZSB0byBkaXJ0eSBjaGVjayBhZ2FpbnN0IGZyb20gdGhlIGBfX2RhdGFUZW1wYCBjYWNoZQogICAgICAgKiAocmF0aGVyIHRoYW4gdGhlIG5vcm1hbCBgX19kYXRhYCBjYWNoZSkgZm9yIE9iamVjdHMuICBTaW5jZSB0aGUgdGVtcAogICAgICAgKiBjYWNoZSBpcyBjbGVhcmVkIGF0IHRoZSBlbmQgb2YgYSB0dXJuLCB0aGlzIGltcGxlbWVudGF0aW9uIGFsbG93cwogICAgICAgKiBzaWRlLWVmZmVjdHMgb2YgZGVlcCBvYmplY3QgY2hhbmdlcyB0byBiZSBwcm9jZXNzZWQgYnkgcmUtc2V0dGluZyB0aGUKICAgICAgICogc2FtZSBvYmplY3QgKHVzaW5nIHRoZSB0ZW1wIGNhY2hlIGFzIGFuIGluLXR1cm4gYmFja3N0b3AgdG8gcHJldmVudAogICAgICAgKiBjeWNsZXMgZHVlIHRvIDItd2F5IG5vdGlmaWNhdGlvbikuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgTmV3IHByb3BlcnR5IHZhbHVlCiAgICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgY2hhbmdlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9zaG91bGRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eSwgdmFsdWUsIG9sZCkgewogICAgICAgIHJldHVybiBtdXRhYmxlUHJvcGVydHlDaGFuZ2UodGhpcywgcHJvcGVydHksIHZhbHVlLCBvbGQsIHRoaXMubXV0YWJsZURhdGEpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIE9wdGlvbmFsTXV0YWJsZURhdGE7CgogIH0pOwoKICAvLyBFeHBvcnQgZm9yIHVzZSBieSBsZWdhY3kgYmVoYXZpb3IKICBQb2x5bWVyLk11dGFibGVEYXRhLl9tdXRhYmxlUHJvcGVydHlDaGFuZ2UgPSBtdXRhYmxlUHJvcGVydHlDaGFuZ2U7Cgp9KSgpOwoKCiAgKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8vIEJhc2UgY2xhc3MgZm9yIEhUTUxUZW1wbGF0ZUVsZW1lbnQgZXh0ZW5zaW9uIHRoYXQgaGFzIHByb3BlcnR5IGVmZmVjdHMKICAgIC8vIG1hY2hpbmVyeSBmb3IgcHJvcGFnYXRpbmcgaG9zdCBwcm9wZXJ0aWVzIHRvIGNoaWxkcmVuLiBUaGlzIGlzIGFuIEVTNQogICAgLy8gY2xhc3Mgb25seSBiZWNhdXNlIEJhYmVsIChpbmNvcnJlY3RseSkgcmVxdWlyZXMgc3VwZXIoKSBpbiB0aGUgY2xhc3MKICAgIC8vIGNvbnN0cnVjdG9yIGV2ZW4gdGhvdWdoIG5vIGB0aGlzYCBpcyB1c2VkIGFuZCBpdCByZXR1cm5zIGFuIGluc3RhbmNlLgogICAgbGV0IG5ld0luc3RhbmNlID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge0hUTUxUZW1wbGF0ZUVsZW1lbnR9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBIVE1MVGVtcGxhdGVFbGVtZW50RXh0ZW5zaW9uKCkgeyByZXR1cm4gbmV3SW5zdGFuY2U7IH0KICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnRFeHRlbnNpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShIVE1MVGVtcGxhdGVFbGVtZW50LnByb3RvdHlwZSwgewogICAgICBjb25zdHJ1Y3RvcjogewogICAgICAgIHZhbHVlOiBIVE1MVGVtcGxhdGVFbGVtZW50RXh0ZW5zaW9uLAogICAgICAgIHdyaXRhYmxlOiB0cnVlCiAgICAgIH0KICAgIH0pOwoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9CiAgICAgKiBAZXh0ZW5kcyB7SFRNTFRlbXBsYXRlRWxlbWVudEV4dGVuc2lvbn0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IERhdGFUZW1wbGF0ZSA9IFBvbHltZXIuUHJvcGVydHlFZmZlY3RzKEhUTUxUZW1wbGF0ZUVsZW1lbnRFeHRlbnNpb24pOwoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9NdXRhYmxlRGF0YX0KICAgICAqIEBleHRlbmRzIHtEYXRhVGVtcGxhdGV9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBjb25zdCBNdXRhYmxlRGF0YVRlbXBsYXRlID0gUG9seW1lci5NdXRhYmxlRGF0YShEYXRhVGVtcGxhdGUpOwoKICAgIC8vIEFwcGxpZXMgYSBEYXRhVGVtcGxhdGUgc3ViY2xhc3MgdG8gYSA8dGVtcGxhdGU+IGluc3RhbmNlCiAgICBmdW5jdGlvbiB1cGdyYWRlVGVtcGxhdGUodGVtcGxhdGUsIGNvbnN0cnVjdG9yKSB7CiAgICAgIG5ld0luc3RhbmNlID0gdGVtcGxhdGU7CiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0ZW1wbGF0ZSwgY29uc3RydWN0b3IucHJvdG90eXBlKTsKICAgICAgbmV3IGNvbnN0cnVjdG9yKCk7CiAgICAgIG5ld0luc3RhbmNlID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEJhc2UgY2xhc3MgZm9yIFRlbXBsYXRlSW5zdGFuY2UuCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnR5RWZmZWN0c30KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IGJhc2UgPSBQb2x5bWVyLlByb3BlcnR5RWZmZWN0cyhjbGFzcyB7fSk7CgogICAgLyoqCiAgICAgKiBAcG9seW1lcgogICAgICogQGN1c3RvbUVsZW1lbnQKICAgICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHMKICAgICAqIEB1bnJlc3RyaWN0ZWQKICAgICAqLwogICAgY2xhc3MgVGVtcGxhdGVJbnN0YW5jZUJhc2UgZXh0ZW5kcyBiYXNlIHsKICAgICAgY29uc3RydWN0b3IocHJvcHMpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIHRoaXMuX2NvbmZpZ3VyZVByb3BlcnRpZXMocHJvcHMpOwogICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX3N0YW1wVGVtcGxhdGUodGhpcy5fX2RhdGFIb3N0KTsKICAgICAgICAvLyBTYXZlIGxpc3Qgb2Ygc3RhbXBlZCBjaGlsZHJlbgogICAgICAgIGxldCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4gPSBbXTsKICAgICAgICBmb3IgKGxldCBuID0gdGhpcy5yb290LmZpcnN0Q2hpbGQ7IG47IG49bi5uZXh0U2libGluZykgewogICAgICAgICAgY2hpbGRyZW4ucHVzaChuKTsKICAgICAgICAgIG4uX190ZW1wbGF0aXplSW5zdGFuY2UgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fX3RlbXBsYXRpemVPd25lciAmJgogICAgICAgICAgdGhpcy5fX3RlbXBsYXRpemVPd25lci5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pIHsKICAgICAgICAgIHRoaXMuX3Nob3dIaWRlQ2hpbGRyZW4odHJ1ZSk7CiAgICAgICAgfQogICAgICAgIC8vIEZsdXNoIHByb3BzIG9ubHkgd2hlbiBwcm9wcyBhcmUgcGFzc2VkIGlmIGluc3RhbmNlIHByb3BzIGV4aXN0CiAgICAgICAgLy8gb3Igd2hlbiB0aGVyZSBpc24ndCBpbnN0YW5jZSBwcm9wcy4KICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMuX190ZW1wbGF0aXplT3B0aW9uczsKICAgICAgICBpZiAoKHByb3BzICYmIG9wdGlvbnMuaW5zdGFuY2VQcm9wcykgfHwgIW9wdGlvbnMuaW5zdGFuY2VQcm9wcykgewogICAgICAgICAgdGhpcy5fZW5hYmxlUHJvcGVydGllcygpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ29uZmlndXJlIHRoZSBnaXZlbiBgcHJvcHNgIGJ5IGNhbGxpbmcgYF9zZXRQZW5kaW5nUHJvcGVydHlgLiBBbHNvCiAgICAgICAqIHNldHMgYW55IHByb3BlcnRpZXMgc3RvcmVkIGluIGBfX2hvc3RQcm9wc2AuCiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBPYmplY3Qgb2YgcHJvcGVydHkgbmFtZS12YWx1ZSBwYWlycyB0byBzZXQuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfY29uZmlndXJlUHJvcGVydGllcyhwcm9wcykgewogICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zOwogICAgICAgIGlmIChvcHRpb25zLmZvcndhcmRIb3N0UHJvcCkgewogICAgICAgICAgZm9yIChsZXQgaHByb3AgaW4gdGhpcy5fX2hvc3RQcm9wcykgewogICAgICAgICAgICB0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkoaHByb3AsIHRoaXMuX19kYXRhSG9zdFsnX2hvc3RfJyArIGhwcm9wXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIEFueSBpbnN0YW5jZSBwcm9wcyBwYXNzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIHdpbGwgb3ZlcndyaXRlIGhvc3QgcHJvcHM7CiAgICAgICAgLy8gbm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHVzZXIgZXJyb3IgYnV0IHdlIGRvbid0IHNwZWNpZmljYWxseSBmaWx0ZXIgdGhlbQogICAgICAgIGZvciAobGV0IGlwcm9wIGluIHByb3BzKSB7CiAgICAgICAgICB0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkoaXByb3AsIHByb3BzW2lwcm9wXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGb3J3YXJkcyBhIGhvc3QgcHJvcGVydHkgdG8gdGhpcyBpbnN0YW5jZS4gIFRoaXMgbWV0aG9kIHNob3VsZCBiZQogICAgICAgKiBjYWxsZWQgb24gaW5zdGFuY2VzIGZyb20gdGhlIGBvcHRpb25zLmZvcndhcmRIb3N0UHJvcGAgY2FsbGJhY2sKICAgICAgICogdG8gcHJvcGFnYXRlIGNoYW5nZXMgb2YgaG9zdCBwcm9wZXJ0aWVzIHRvIGVhY2ggaW5zdGFuY2UuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhpcyBtZXRob2QgZW5xdWV1ZXMgdGhlIGNoYW5nZSwgd2hpY2ggYXJlIGZsdXNoZWQgYXMgYSBiYXRjaC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgb3IgcGF0aCBuYW1lCiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIGZvcndhcmQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGZvcndhcmRIb3N0UHJvcChwcm9wLCB2YWx1ZSkgewogICAgICAgIGlmICh0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocHJvcCwgdmFsdWUsIGZhbHNlLCB0cnVlKSkgewogICAgICAgICAgdGhpcy5fX2RhdGFIb3N0Ll9lbnF1ZXVlQ2xpZW50KHRoaXMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlIHBvaW50IGZvciBhZGRpbmcgY3VzdG9tIG9yIHNpbXVsYXRlZCBldmVudCBoYW5kbGluZy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBOb2RlIHRvIGFkZCBldmVudCBsaXN0ZW5lciB0bwogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgZXZlbnQKICAgICAgICogQHBhcmFtIHtmdW5jdGlvbighRXZlbnQpOnZvaWR9IGhhbmRsZXIgTGlzdGVuZXIgZnVuY3Rpb24gdG8gYWRkCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICBpZiAodGhpcy5fbWV0aG9kSG9zdCAmJiB0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMucGFyZW50TW9kZWwpIHsKICAgICAgICAgIC8vIElmIHRoaXMgaW5zdGFuY2Ugc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBwYXJlbnQgbW9kZWwsIGRlY29yYXRlCiAgICAgICAgICAvLyBldmVudHMgdGhpcyB0ZW1wbGF0ZSBpbnN0YW5jZSBhcyBgbW9kZWxgCiAgICAgICAgICB0aGlzLl9tZXRob2RIb3N0Ll9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgKGUpID0+IHsKICAgICAgICAgICAgZS5tb2RlbCA9IHRoaXM7CiAgICAgICAgICAgIGhhbmRsZXIoZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gT3RoZXJ3aXNlIGRlbGVnYXRlIHRvIHRoZSB0ZW1wbGF0ZSdzIGhvc3QgKHdoaWNoIGNvdWxkIGJlKQogICAgICAgICAgLy8gYW5vdGhlciB0ZW1wbGF0ZSBpbnN0YW5jZQogICAgICAgICAgbGV0IHRlbXBsYXRlSG9zdCA9IHRoaXMuX19kYXRhSG9zdC5fX2RhdGFIb3N0OwogICAgICAgICAgaWYgKHRlbXBsYXRlSG9zdCkgewogICAgICAgICAgICB0ZW1wbGF0ZUhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNob3dzIG9yIGhpZGVzIHRoZSB0ZW1wbGF0ZSBpbnN0YW5jZSB0b3AgbGV2ZWwgY2hpbGQgZWxlbWVudHMuIEZvcgogICAgICAgKiB0ZXh0IG5vZGVzLCBgdGV4dENvbnRlbnRgIGlzIHJlbW92ZWQgd2hpbGUgImhpZGRlbiIgYW5kIHJlcGxhY2VkIHdoZW4KICAgICAgICogInNob3duLiIKICAgICAgICogQHBhcmFtIHtib29sZWFufSBoaWRlIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIGNoaWxkcmVuOwogICAgICAgKiBzZXQgdG8gZmFsc2UgdG8gc2hvdyB0aGVtLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfc2hvd0hpZGVDaGlsZHJlbihoaWRlKSB7CiAgICAgICAgbGV0IGMgPSB0aGlzLmNoaWxkcmVuOwogICAgICAgIGZvciAobGV0IGk9MDsgaTxjLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgbiA9IGNbaV07CiAgICAgICAgICAvLyBJZ25vcmUgbm9uLWNoYW5nZXMKICAgICAgICAgIGlmIChCb29sZWFuKGhpZGUpICE9IEJvb2xlYW4obi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pKSB7CiAgICAgICAgICAgIGlmIChuLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgICAgIGlmIChoaWRlKSB7CiAgICAgICAgICAgICAgICBuLl9fcG9seW1lclRleHRDb250ZW50X18gPSBuLnRleHRDb250ZW50OwogICAgICAgICAgICAgICAgbi50ZXh0Q29udGVudCA9ICcnOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuLnRleHRDb250ZW50ID0gbi5fX3BvbHltZXJUZXh0Q29udGVudF9fOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gcmVtb3ZlIGFuZCByZXBsYWNlIHNsb3QKICAgICAgICAgICAgfSBlbHNlIGlmIChuLmxvY2FsTmFtZSA9PT0gJ3Nsb3QnKSB7CiAgICAgICAgICAgICAgaWYgKGhpZGUpIHsKICAgICAgICAgICAgICAgIG4uX19wb2x5bWVyUmVwbGFjZWRfXyA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJ2hpZGRlbi1zbG90Jyk7CiAgICAgICAgICAgICAgICBuLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG4uX19wb2x5bWVyUmVwbGFjZWRfXywgbik7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2UgPSBuLl9fcG9seW1lclJlcGxhY2VkX187CiAgICAgICAgICAgICAgICBpZiAocmVwbGFjZSkgewogICAgICAgICAgICAgICAgICByZXBsYWNlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG4sIHJlcGxhY2UpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZSBpZiAobi5zdHlsZSkgewogICAgICAgICAgICAgIGlmIChoaWRlKSB7CiAgICAgICAgICAgICAgICBuLl9fcG9seW1lckRpc3BsYXlfXyA9IG4uc3R5bGUuZGlzcGxheTsKICAgICAgICAgICAgICAgIG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbi5zdHlsZS5kaXNwbGF5ID0gbi5fX3BvbHltZXJEaXNwbGF5X187CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBuLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyA9IGhpZGU7CiAgICAgICAgICBpZiAobi5fc2hvd0hpZGVDaGlsZHJlbikgewogICAgICAgICAgICBuLl9zaG93SGlkZUNoaWxkcmVuKGhpZGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgcHJvcGVydHktZWZmZWN0cyBpbXBsZW1lbnRhdGlvbiB0byBpbnRlcmNlcHQKICAgICAgICogdGV4dENvbnRlbnQgYmluZGluZ3Mgd2hpbGUgY2hpbGRyZW4gYXJlICJoaWRkZW4iIGFuZCBjYWNoZSBpbgogICAgICAgKiBwcml2YXRlIHN0b3JhZ2UgZm9yIGxhdGVyIHJldHJpZXZhbC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBzZXQgYSBwcm9wZXJ0eSBvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBUaGUgcHJvcGVydHkgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUobm9kZSwgcHJvcCwgdmFsdWUpIHsKICAgICAgICBpZiAobm9kZS5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18gJiYKICAgICAgICAgICAgbm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSAmJiBwcm9wID09ICd0ZXh0Q29udGVudCcpIHsKICAgICAgICAgIG5vZGUuX19wb2x5bWVyVGV4dENvbnRlbnRfXyA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdXBlci5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUobm9kZSwgcHJvcCwgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogRmluZCB0aGUgcGFyZW50IG1vZGVsIG9mIHRoaXMgdGVtcGxhdGUgaW5zdGFuY2UuICBUaGUgcGFyZW50IG1vZGVsCiAgICAgICAqIGlzIGVpdGhlciBhbm90aGVyIHRlbXBsYXRpemUgaW5zdGFuY2UgdGhhdCBoYWQgb3B0aW9uIGBwYXJlbnRNb2RlbDogdHJ1ZWAsCiAgICAgICAqIG9yIGVsc2UgdGhlIGhvc3QgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQHJldHVybiB7IVBvbHltZXJfUHJvcGVydHlFZmZlY3RzfSBUaGUgcGFyZW50IG1vZGVsIG9mIHRoaXMgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGdldCBwYXJlbnRNb2RlbCgpIHsKICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLl9fcGFyZW50TW9kZWw7CiAgICAgICAgaWYgKCFtb2RlbCkgewogICAgICAgICAgbGV0IG9wdGlvbnM7CiAgICAgICAgICBtb2RlbCA9IHRoaXM7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIC8vIEEgdGVtcGxhdGUgaW5zdGFuY2UncyBgX19kYXRhSG9zdGAgaXMgYSA8dGVtcGxhdGU+CiAgICAgICAgICAgIC8vIGBtb2RlbC5fX2RhdGFIb3N0Ll9fZGF0YUhvc3RgIGlzIHRoZSB0ZW1wbGF0ZSdzIGhvc3QKICAgICAgICAgICAgbW9kZWwgPSBtb2RlbC5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7CiAgICAgICAgICB9IHdoaWxlICgob3B0aW9ucyA9IG1vZGVsLl9fdGVtcGxhdGl6ZU9wdGlvbnMpICYmICFvcHRpb25zLnBhcmVudE1vZGVsKTsKICAgICAgICAgIHRoaXMuX19wYXJlbnRNb2RlbCA9IG1vZGVsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbW9kZWw7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTdHViIG9mIEhUTUxFbGVtZW50J3MgYGRpc3BhdGNoRXZlbnRgLCBzbyB0aGF0IGVmZmVjdHMgdGhhdCBtYXkKICAgICAgICogZGlzcGF0Y2ggZXZlbnRzIHNhZmVseSBuby1vcC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgRXZlbnQgdG8gZGlzcGF0Y2gKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gQWx3YXlzIHRydWUuCiAgICAgICAqLwogICAgICAgZGlzcGF0Y2hFdmVudChldmVudCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CgogICAgLyoqIEB0eXBlIHshRGF0YVRlbXBsYXRlfSAqLwogICAgVGVtcGxhdGVJbnN0YW5jZUJhc2UucHJvdG90eXBlLl9fZGF0YUhvc3Q7CiAgICAvKiogQHR5cGUgeyFUZW1wbGF0aXplT3B0aW9uc30gKi8KICAgIFRlbXBsYXRlSW5zdGFuY2VCYXNlLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPcHRpb25zOwogICAgLyoqIEB0eXBlIHshUG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9ICovCiAgICBUZW1wbGF0ZUluc3RhbmNlQmFzZS5wcm90b3R5cGUuX21ldGhvZEhvc3Q7CiAgICAvKiogQHR5cGUgeyFPYmplY3R9ICovCiAgICBUZW1wbGF0ZUluc3RhbmNlQmFzZS5wcm90b3R5cGUuX190ZW1wbGF0aXplT3duZXI7CiAgICAvKiogQHR5cGUgeyFPYmplY3R9ICovCiAgICBUZW1wbGF0ZUluc3RhbmNlQmFzZS5wcm90b3R5cGUuX19ob3N0UHJvcHM7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBleHRlbmRzIHtUZW1wbGF0ZUluc3RhbmNlQmFzZX0KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX011dGFibGVEYXRhfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgTXV0YWJsZVRlbXBsYXRlSW5zdGFuY2VCYXNlID0gUG9seW1lci5NdXRhYmxlRGF0YShUZW1wbGF0ZUluc3RhbmNlQmFzZSk7CgogICAgZnVuY3Rpb24gZmluZE1ldGhvZEhvc3QodGVtcGxhdGUpIHsKICAgICAgLy8gVGVjaG5pY2FsbHkgdGhpcyBzaG91bGQgYmUgdGhlIG93bmVyIG9mIHRoZSBvdXRlcm1vc3QgdGVtcGxhdGUuCiAgICAgIC8vIEluIHNoYWRvdyBkb20sIHRoaXMgaXMgYWx3YXlzIGdldFJvb3ROb2RlKCkuaG9zdCwgYnV0IHdlIGNhbgogICAgICAvLyBhcHByb3hpbWF0ZSB0aGlzIHZpYSBjb29wZXJhdGlvbiB3aXRoIG91ciBkYXRhSG9zdCBhbHdheXMgc2V0dGluZwogICAgICAvLyBgX21ldGhvZEhvc3RgIGFzIGxvbmcgYXMgdGhlcmUgd2VyZSBiaW5kaW5ncyAob3IgaWQncykgb24gdGhpcwogICAgICAvLyBpbnN0YW5jZSBjYXVzaW5nIGl0IHRvIGdldCBhIGRhdGFIb3N0LgogICAgICBsZXQgdGVtcGxhdGVIb3N0ID0gdGVtcGxhdGUuX19kYXRhSG9zdDsKICAgICAgcmV0dXJuIHRlbXBsYXRlSG9zdCAmJiB0ZW1wbGF0ZUhvc3QuX21ldGhvZEhvc3QgfHwgdGVtcGxhdGVIb3N0OwogICAgfQoKICAgIC8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovCiAgICAvKioKICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IGNsYXNzLnByb3RvdHlwZSBpcyBub3QgZGVmaW5lZCBmb3Igc29tZSByZWFzb24KICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlVGVtcGxhdGl6ZXJDbGFzcyh0ZW1wbGF0ZSwgdGVtcGxhdGVJbmZvLCBvcHRpb25zKSB7CiAgICAgIC8vIEFub255bW91cyBjbGFzcyBjcmVhdGVkIGJ5IHRoZSB0ZW1wbGF0aXplCiAgICAgIGxldCBiYXNlID0gb3B0aW9ucy5tdXRhYmxlRGF0YSA/CiAgICAgICAgTXV0YWJsZVRlbXBsYXRlSW5zdGFuY2VCYXNlIDogVGVtcGxhdGVJbnN0YW5jZUJhc2U7CiAgICAgIC8vIEFmZm9yZGFuY2UgZm9yIGdsb2JhbCBtaXhpbnMgb250byBUZW1wbGF0aXplSW5zdGFuY2UKICAgICAgaWYgKFBvbHltZXIuVGVtcGxhdGl6ZS5taXhpbikgewogICAgICAgIGJhc2UgPSBQb2x5bWVyLlRlbXBsYXRpemUubWl4aW4oYmFzZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAZXh0ZW5kcyB7YmFzZX0KICAgICAgICogQHByaXZhdGUKICAgICAgICovCiAgICAgIGxldCBrbGFzcyA9IGNsYXNzIGV4dGVuZHMgYmFzZSB7IH07CiAgICAgIGtsYXNzLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPcHRpb25zID0gb3B0aW9uczsKICAgICAga2xhc3MucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICBhZGROb3RpZnlFZmZlY3RzKGtsYXNzLCB0ZW1wbGF0ZSwgdGVtcGxhdGVJbmZvLCBvcHRpb25zKTsKICAgICAgcmV0dXJuIGtsYXNzOwogICAgfQoKICAgIC8qKgogICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gY2xhc3MucHJvdG90eXBlIGlzIG5vdCBkZWZpbmVkIGZvciBzb21lIHJlYXNvbgogICAgICovCiAgICBmdW5jdGlvbiBhZGRQcm9wYWdhdGVFZmZlY3RzKHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpIHsKICAgICAgbGV0IHVzZXJGb3J3YXJkSG9zdFByb3AgPSBvcHRpb25zLmZvcndhcmRIb3N0UHJvcDsKICAgICAgaWYgKHVzZXJGb3J3YXJkSG9zdFByb3ApIHsKICAgICAgICAvLyBQcm92aWRlIGRhdGEgQVBJIGFuZCBwcm9wZXJ0eSBlZmZlY3RzIG9uIG1lbW9pemVkIHRlbXBsYXRlIGNsYXNzCiAgICAgICAgbGV0IGtsYXNzID0gdGVtcGxhdGVJbmZvLnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzOwogICAgICAgIGlmICgha2xhc3MpIHsKICAgICAgICAgIGxldCBiYXNlID0gb3B0aW9ucy5tdXRhYmxlRGF0YSA/IE11dGFibGVEYXRhVGVtcGxhdGUgOiBEYXRhVGVtcGxhdGU7CiAgICAgICAgICAvKiogQHByaXZhdGUgKi8KICAgICAgICAgIGtsYXNzID0gdGVtcGxhdGVJbmZvLnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzID0KICAgICAgICAgICAgY2xhc3MgVGVtcGxhdGl6ZWRUZW1wbGF0ZSBleHRlbmRzIGJhc2Uge307CiAgICAgICAgICAvLyBBZGQgdGVtcGxhdGUgLSA+aW5zdGFuY2VzIGVmZmVjdHMKICAgICAgICAgIC8vIGFuZCBob3N0IDwtIHRlbXBsYXRlIGVmZmVjdHMKICAgICAgICAgIGxldCBob3N0UHJvcHMgPSB0ZW1wbGF0ZUluZm8uaG9zdFByb3BzOwogICAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBob3N0UHJvcHMpIHsKICAgICAgICAgICAga2xhc3MucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdCgnX2hvc3RfJyArIHByb3AsCiAgICAgICAgICAgICAga2xhc3MucHJvdG90eXBlLlBST1BFUlRZX0VGRkVDVF9UWVBFUy5QUk9QQUdBVEUsCiAgICAgICAgICAgICAge2ZuOiBjcmVhdGVGb3J3YXJkSG9zdFByb3BFZmZlY3QocHJvcCwgdXNlckZvcndhcmRIb3N0UHJvcCl9KTsKICAgICAgICAgICAga2xhc3MucHJvdG90eXBlLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eSgnX2hvc3RfJyArIHByb3ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1cGdyYWRlVGVtcGxhdGUodGVtcGxhdGUsIGtsYXNzKTsKICAgICAgICAvLyBNaXggYW55IHByZS1ib3VuZCBkYXRhIGludG8gX19kYXRhOyBubyBuZWVkIHRvIGZsdXNoIHRoaXMgdG8KICAgICAgICAvLyBpbnN0YW5jZXMgc2luY2UgdGhleSBwdWxsIGZyb20gdGhlIHRlbXBsYXRlIGF0IGluc3RhbmNlLXRpbWUKICAgICAgICBpZiAodGVtcGxhdGUuX19kYXRhUHJvdG8pIHsKICAgICAgICAgIC8vIE5vdGUsIGdlbmVyYWxseSBgX19kYXRhUHJvdG9gIGNvdWxkIGJlIGNoYWluZWQsIGJ1dCBpdCdzIGd1YXJhbnRlZWQKICAgICAgICAgIC8vIHRvIG5vdCBiZSBzaW5jZSB0aGlzIGlzIGEgdmFuaWxsYSB0ZW1wbGF0ZSB3ZSBqdXN0IGFkZGVkIGVmZmVjdHMgdG8KICAgICAgICAgIE9iamVjdC5hc3NpZ24odGVtcGxhdGUuX19kYXRhLCB0ZW1wbGF0ZS5fX2RhdGFQcm90byk7CiAgICAgICAgfQogICAgICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIGRhdGEgZm9yIHBlcmZvcm1hbmNlCiAgICAgICAgdGVtcGxhdGUuX19kYXRhVGVtcCA9IHt9OwogICAgICAgIHRlbXBsYXRlLl9fZGF0YVBlbmRpbmcgPSBudWxsOwogICAgICAgIHRlbXBsYXRlLl9fZGF0YU9sZCA9IG51bGw7CiAgICAgICAgdGVtcGxhdGUuX2VuYWJsZVByb3BlcnRpZXMoKTsKICAgICAgfQogICAgfQogICAgLyogZXNsaW50LWVuYWJsZSB2YWxpZC1qc2RvYyAqLwoKICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcndhcmRIb3N0UHJvcEVmZmVjdChob3N0UHJvcCwgdXNlckZvcndhcmRIb3N0UHJvcCkgewogICAgICByZXR1cm4gZnVuY3Rpb24gZm9yd2FyZEhvc3RQcm9wKHRlbXBsYXRlLCBwcm9wLCBwcm9wcykgewogICAgICAgIHVzZXJGb3J3YXJkSG9zdFByb3AuY2FsbCh0ZW1wbGF0ZS5fX3RlbXBsYXRpemVPd25lciwKICAgICAgICAgIHByb3Auc3Vic3RyaW5nKCdfaG9zdF8nLmxlbmd0aCksIHByb3BzW3Byb3BdKTsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGROb3RpZnlFZmZlY3RzKGtsYXNzLCB0ZW1wbGF0ZSwgdGVtcGxhdGVJbmZvLCBvcHRpb25zKSB7CiAgICAgIGxldCBob3N0UHJvcHMgPSB0ZW1wbGF0ZUluZm8uaG9zdFByb3BzIHx8IHt9OwogICAgICBmb3IgKGxldCBpcHJvcCBpbiBvcHRpb25zLmluc3RhbmNlUHJvcHMpIHsKICAgICAgICBkZWxldGUgaG9zdFByb3BzW2lwcm9wXTsKICAgICAgICBsZXQgdXNlck5vdGlmeUluc3RhbmNlUHJvcCA9IG9wdGlvbnMubm90aWZ5SW5zdGFuY2VQcm9wOwogICAgICAgIGlmICh1c2VyTm90aWZ5SW5zdGFuY2VQcm9wKSB7CiAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGlwcm9wLAogICAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSwKICAgICAgICAgICAge2ZuOiBjcmVhdGVOb3RpZnlJbnN0YW5jZVByb3BFZmZlY3QoaXByb3AsIHVzZXJOb3RpZnlJbnN0YW5jZVByb3ApfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChvcHRpb25zLmZvcndhcmRIb3N0UHJvcCAmJiB0ZW1wbGF0ZS5fX2RhdGFIb3N0KSB7CiAgICAgICAgZm9yIChsZXQgaHByb3AgaW4gaG9zdFByb3BzKSB7CiAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGhwcm9wLAogICAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSwKICAgICAgICAgICAge2ZuOiBjcmVhdGVOb3RpZnlIb3N0UHJvcEVmZmVjdCgpfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlTm90aWZ5SW5zdGFuY2VQcm9wRWZmZWN0KGluc3RQcm9wLCB1c2VyTm90aWZ5SW5zdGFuY2VQcm9wKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBub3RpZnlJbnN0YW5jZVByb3AoaW5zdCwgcHJvcCwgcHJvcHMpIHsKICAgICAgICB1c2VyTm90aWZ5SW5zdGFuY2VQcm9wLmNhbGwoaW5zdC5fX3RlbXBsYXRpemVPd25lciwKICAgICAgICAgIGluc3QsIHByb3AsIHByb3BzW3Byb3BdKTsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVOb3RpZnlIb3N0UHJvcEVmZmVjdCgpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5vdGlmeUhvc3RQcm9wKGluc3QsIHByb3AsIHByb3BzKSB7CiAgICAgICAgaW5zdC5fX2RhdGFIb3N0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoJ19ob3N0XycgKyBwcm9wLCBwcm9wc1twcm9wXSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNb2R1bGUgZm9yIHByZXBhcmluZyBhbmQgc3RhbXBpbmcgaW5zdGFuY2VzIG9mIHRlbXBsYXRlcyB0aGF0IHV0aWxpemUKICAgICAqIFBvbHltZXIncyBkYXRhLWJpbmRpbmcgYW5kIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVyIGZlYXR1cmVzLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogICAgIC8vIEdldCBhIHRlbXBsYXRlIGZyb20gc29tZXdoZXJlLCBlLmcuIGxpZ2h0IERPTQogICAgICogICAgIGxldCB0ZW1wbGF0ZSA9IHRoaXMucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKTsKICAgICAqICAgICAvLyBQcmVwYXJlIHRoZSB0ZW1wbGF0ZQogICAgICogICAgIGxldCBUZW1wbGF0ZUNsYXNzID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUpOwogICAgICogICAgIC8vIEluc3RhbmNlIHRoZSB0ZW1wbGF0ZSB3aXRoIGFuIGluaXRpYWwgZGF0YSBtb2RlbAogICAgICogICAgIGxldCBpbnN0YW5jZSA9IG5ldyBUZW1wbGF0ZUNsYXNzKHtteVByb3A6ICdpbml0aWFsJ30pOwogICAgICogICAgIC8vIEluc2VydCB0aGUgaW5zdGFuY2UncyBET00gc29tZXdoZXJlLCBlLmcuIGVsZW1lbnQncyBzaGFkb3cgRE9NCiAgICAgKiAgICAgdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGluc3RhbmNlLnJvb3QpOwogICAgICogICAgIC8vIENoYW5naW5nIGEgcHJvcGVydHkgb24gdGhlIGluc3RhbmNlIHdpbGwgcHJvcGFnYXRlIHRvIGJpbmRpbmdzCiAgICAgKiAgICAgLy8gaW4gdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgaW5zdGFuY2UubXlQcm9wID0gJ25ldyB2YWx1ZSc7CiAgICAgKgogICAgICogVGhlIGBvcHRpb25zYCBkaWN0aW9uYXJ5IHBhc3NlZCB0byBgdGVtcGxhdGl6ZWAgYWxsb3dzIGZvciBjdXN0b21pemluZwogICAgICogZmVhdHVyZXMgb2YgdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBjbGFzcywgaW5jbHVkaW5nIGhvdyBvdXRlci1zY29wZSBob3N0CiAgICAgKiBwcm9wZXJ0aWVzIHNob3VsZCBiZSBmb3J3YXJkZWQgaW50byB0ZW1wbGF0ZSBpbnN0YW5jZXMsIGhvdyBhbnkgaW5zdGFuY2UKICAgICAqIHByb3BlcnRpZXMgYWRkZWQgaW50byB0aGUgdGVtcGxhdGUncyBzY29wZSBzaG91bGQgYmUgbm90aWZpZWQgb3V0IHRvCiAgICAgKiB0aGUgaG9zdCwgYW5kIHdoZXRoZXIgdGhlIGluc3RhbmNlIHNob3VsZCBiZSBkZWNvcmF0ZWQgYXMgYSAicGFyZW50IG1vZGVsIgogICAgICogb2YgYW55IGV2ZW50IGhhbmRsZXJzLgogICAgICoKICAgICAqICAgICAvLyBDdXN0b21pemUgcHJvcGVydHkgZm9yd2FyZGluZyBhbmQgZXZlbnQgbW9kZWwgZGVjb3JhdGlvbgogICAgICogICAgIGxldCBUZW1wbGF0ZUNsYXNzID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUsIHRoaXMsIHsKICAgICAqICAgICAgIHBhcmVudE1vZGVsOiB0cnVlLAogICAgICogICAgICAgZm9yd2FyZEhvc3RQcm9wKHByb3BlcnR5LCB2YWx1ZSkgey4uLn0sCiAgICAgKiAgICAgICBpbnN0YW5jZVByb3BzOiB7Li4ufSwKICAgICAqICAgICAgIG5vdGlmeUluc3RhbmNlUHJvcChpbnN0YW5jZSwgcHJvcGVydHksIHZhbHVlKSB7Li4ufSwKICAgICAqICAgICB9KTsKICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1bW1hcnkgTW9kdWxlIGZvciBwcmVwYXJpbmcgYW5kIHN0YW1waW5nIGluc3RhbmNlcyBvZiB0ZW1wbGF0ZXMKICAgICAqICAgdXRpbGl6aW5nIFBvbHltZXIgdGVtcGxhdGluZyBmZWF0dXJlcy4KICAgICAqLwogICAgUG9seW1lci5UZW1wbGF0aXplID0gewoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYW4gYW5vbnltb3VzIGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AgY2xhc3MgYm91bmQgdG8gdGhlCiAgICAgICAqIGA8dGVtcGxhdGU+YCBwcm92aWRlZC4gIEluc3RhbmNpbmcgdGhlIGNsYXNzIHdpbGwgcmVzdWx0IGluIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBiZWluZyBzdGFtcGVkIGludG8gYSBkb2N1bWVudCBmcmFnbWVudCBzdG9yZWQgYXMgdGhlIGluc3RhbmNlJ3MKICAgICAgICogYHJvb3RgIHByb3BlcnR5LCBhZnRlciB3aGljaCBpdCBjYW4gYmUgYXBwZW5kZWQgdG8gdGhlIERPTS4KICAgICAgICoKICAgICAgICogVGVtcGxhdGVzIG1heSB1dGlsaXplIGFsbCBQb2x5bWVyIGRhdGEtYmluZGluZyBmZWF0dXJlcyBhcyB3ZWxsIGFzCiAgICAgICAqIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycy4gIEV2ZW50IGxpc3RlbmVycyBhbmQgaW5saW5lIGNvbXB1dGluZwogICAgICAgKiBmdW5jdGlvbnMgaW4gdGhlIHRlbXBsYXRlIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBob3N0IG9mIHRoZSB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogVGhlIGNvbnN0cnVjdG9yIHJldHVybmVkIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IGRpY3Rpb25hcnkgb2YgaW5pdGlhbAogICAgICAgKiBwcm9wZXJ0eSB2YWx1ZXMgdG8gcHJvcGFnYXRlIGludG8gdGVtcGxhdGUgYmluZGluZ3MuICBBZGRpdGlvbmFsbHkKICAgICAgICogaG9zdCBwcm9wZXJ0aWVzIGNhbiBiZSBmb3J3YXJkZWQgaW4sIGFuZCBpbnN0YW5jZSBwcm9wZXJ0aWVzIGNhbiBiZQogICAgICAgKiBub3RpZmllZCBvdXQgYnkgcHJvdmlkaW5nIG9wdGlvbmFsIGNhbGxiYWNrcyBpbiB0aGUgYG9wdGlvbnNgIGRpY3Rpb25hcnkuCiAgICAgICAqCiAgICAgICAqIFZhbGlkIGNvbmZpZ3VyYXRpb24gaW4gYG9wdGlvbnNgIGFyZSBhcyBmb2xsb3dzOgogICAgICAgKgogICAgICAgKiAtIGBmb3J3YXJkSG9zdFByb3AocHJvcGVydHksIHZhbHVlKWA6IENhbGxlZCB3aGVuIGEgcHJvcGVydHkgcmVmZXJlbmNlZAogICAgICAgKiAgIGluIHRoZSB0ZW1wbGF0ZSBjaGFuZ2VkIG9uIHRoZSB0ZW1wbGF0ZSdzIGhvc3QuIEFzIHRoaXMgbGlicmFyeSBkb2VzCiAgICAgICAqICAgbm90IHJldGFpbiByZWZlcmVuY2VzIHRvIHRlbXBsYXRlcyBpbnN0YW5jZWQgYnkgdGhlIHVzZXIsIGl0IGlzIHRoZQogICAgICAgKiAgIHRlbXBsYXRpemUgb3duZXIncyByZXNwb25zaWJpbGl0eSB0byBmb3J3YXJkIGhvc3QgcHJvcGVydHkgY2hhbmdlcyBpbnRvCiAgICAgICAqICAgdXNlci1zdGFtcGVkIGluc3RhbmNlcy4gIFRoZSBgaW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHByb3BlcnR5LCB2YWx1ZSlgCiAgICAgICAqICAgIG1ldGhvZCBvbiB0aGUgZ2VuZXJhdGVkIGNsYXNzIHNob3VsZCBiZSBjYWxsZWQgdG8gZm9yd2FyZCBob3N0CiAgICAgICAqICAgcHJvcGVydGllcyBpbnRvIHRoZSB0ZW1wbGF0ZSB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHByb3BlcnR5LWNoYW5nZWQKICAgICAgICogICBub3RpZmljYXRpb25zLiBBbnkgcHJvcGVydGllcyByZWZlcmVuY2VkIGluIHRoZSB0ZW1wbGF0ZSB0aGF0IGFyZSBub3QKICAgICAgICogICBkZWZpbmVkIGluIGBpbnN0YW5jZVByb3BzYCB3aWxsIGJlIG5vdGlmaWVkIHVwIHRvIHRoZSB0ZW1wbGF0ZSdzIGhvc3QKICAgICAgICogICBhdXRvbWF0aWNhbGx5LgogICAgICAgKiAtIGBpbnN0YW5jZVByb3BzYDogRGljdGlvbmFyeSBvZiBwcm9wZXJ0eSBuYW1lcyB0aGF0IHdpbGwgYmUgYWRkZWQKICAgICAgICogICB0byB0aGUgaW5zdGFuY2UgYnkgdGhlIHRlbXBsYXRpemUgb3duZXIuICBUaGVzZSBwcm9wZXJ0aWVzIHNoYWRvdyBhbnkKICAgICAgICogICBob3N0IHByb3BlcnRpZXMsIGFuZCBjaGFuZ2VzIHdpdGhpbiB0aGUgdGVtcGxhdGUgdG8gdGhlc2UgcHJvcGVydGllcwogICAgICAgKiAgIHdpbGwgcmVzdWx0IGluIGBub3RpZnlJbnN0YW5jZVByb3BgIGJlaW5nIGNhbGxlZC4KICAgICAgICogLSBgbXV0YWJsZURhdGFgOiBXaGVuIGB0cnVlYCwgdGhlIGdlbmVyYXRlZCBjbGFzcyB3aWxsIHNraXAgc3RyaWN0CiAgICAgICAqICAgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kIGFycmF5cyAoYWx3YXlzIGNvbnNpZGVyIHRoZW0gdG8gYmUKICAgICAgICogICAiZGlydHkiKS4KICAgICAgICogLSBgbm90aWZ5SW5zdGFuY2VQcm9wKGluc3RhbmNlLCBwcm9wZXJ0eSwgdmFsdWUpYDogQ2FsbGVkIHdoZW4KICAgICAgICogICBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBjaGFuZ2VzLiAgVXNlcnMgbWF5IGNob29zZSB0byBjYWxsIGBub3RpZnlQYXRoYAogICAgICAgKiAgIG9uIGUuZy4gdGhlIG93bmVyIHRvIG5vdGlmeSB0aGUgY2hhbmdlLgogICAgICAgKiAtIGBwYXJlbnRNb2RlbGA6IFdoZW4gYHRydWVgLCBldmVudHMgaGFuZGxlZCBieSBkZWNsYXJhdGl2ZSBldmVudCBsaXN0ZW5lcnMKICAgICAgICogICAoYG9uLWV2ZW50PSJoYW5kbGVyImApIHdpbGwgYmUgZGVjb3JhdGVkIHdpdGggYSBgbW9kZWxgIHByb3BlcnR5IHBvaW50aW5nCiAgICAgICAqICAgdG8gdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRoYXQgc3RhbXBlZCBpdC4gIEl0IHdpbGwgYWxzbyBiZSByZXR1cm5lZAogICAgICAgKiAgIGZyb20gYGluc3RhbmNlLnBhcmVudE1vZGVsYCBpbiBjYXNlcyB3aGVyZSB0ZW1wbGF0ZSBpbnN0YW5jZSBuZXN0aW5nCiAgICAgICAqICAgY2F1c2VzIGFuIGlubmVyIG1vZGVsIHRvIHNoYWRvdyBhbiBvdXRlciBtb2RlbC4KICAgICAgICoKICAgICAgICogQWxsIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGJvdW5kIHRvIHRoZSBgb3duZXJgLiBBbnkgY29udGV4dAogICAgICAgKiBuZWVkZWQgZm9yIHRoZSBjYWxsYmFja3MgKHN1Y2ggYXMgcmVmZXJlbmNlcyB0byBgaW5zdGFuY2VzYCBzdGFtcGVkKQogICAgICAgKiBzaG91bGQgYmUgc3RvcmVkIG9uIHRoZSBgb3duZXJgIHN1Y2ggdGhhdCB0aGV5IGNhbiBiZSByZXRyaWV2ZWQgdmlhCiAgICAgICAqIGB0aGlzYC4KICAgICAgICoKICAgICAgICogV2hlbiBgb3B0aW9ucy5mb3J3YXJkSG9zdFByb3BgIGlzIGRlY2xhcmVkIGFzIGFuIG9wdGlvbiwgYW55IHByb3BlcnRpZXMKICAgICAgICogcmVmZXJlbmNlZCBpbiB0aGUgdGVtcGxhdGUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvcndhcmRlZCBmcm9tIHRoZSBob3N0IG9mCiAgICAgICAqIHRoZSBgPHRlbXBsYXRlPmAgdG8gaW5zdGFuY2VzLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgYW55IHByb3BlcnRpZXMgbGlzdGVkIGluCiAgICAgICAqIHRoZSBgb3B0aW9ucy5pbnN0YW5jZVByb3BzYCBvYmplY3QuICBgaW5zdGFuY2VQcm9wc2AgYXJlIGFzc3VtZWQgdG8gYmUKICAgICAgICogbWFuYWdlZCBieSB0aGUgb3duZXIgb2YgdGhlIGluc3RhbmNlcywgZWl0aGVyIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvcgogICAgICAgKiBvciBzZXQgYWZ0ZXIgdGhlIGZhY3QuICBOb3RlLCBhbnkgcHJvcGVydGllcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2lsbAogICAgICAgKiBhbHdheXMgYmUgc2V0IHRvIHRoZSBpbnN0YW5jZSAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgd291bGQgbm9ybWFsbHkKICAgICAgICogYmUgZm9yd2FyZGVkIGZyb20gdGhlIGhvc3QpLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgYHRlbXBsYXRpemUoKWAgY2FuIGJlIHJ1biBvbmx5IG9uY2UgZm9yIGEgZ2l2ZW4gYDx0ZW1wbGF0ZT5gLgogICAgICAgKiBGdXJ0aGVyIGNhbGxzIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLiBBbHNvLCB0aGVyZSBpcyBhIHNwZWNpYWwKICAgICAgICogYmVoYXZpb3IgaWYgdGhlIHRlbXBsYXRlIHdhcyBkdXBsaWNhdGVkIHRocm91Z2ggYSBtZWNoYW5pc20gc3VjaCBhcwogICAgICAgKiBgPGRvbS1yZXBlYXQ+YCBvciBgPHRlc3QtZml4dHVyZT5gLiBJbiB0aGlzIGNhc2UsIGFsbCBjYWxscyB0bwogICAgICAgKiBgdGVtcGxhdGl6ZSgpYCByZXR1cm4gdGhlIHNhbWUgY2xhc3MgZm9yIGFsbCBkdXBsaWNhdGVzIG9mIGEgdGVtcGxhdGUuCiAgICAgICAqIFRoZSBjbGFzcyByZXR1cm5lZCBmcm9tIGB0ZW1wbGF0aXplKClgIGlzIGdlbmVyYXRlZCBvbmx5IG9uY2UgdXNpbmcKICAgICAgICogdGhlIGBvcHRpb25zYCBmcm9tIHRoZSBmaXJzdCBjYWxsLiBUaGlzIG1lYW5zIHRoYXQgYW55IGBvcHRpb25zYAogICAgICAgKiBwcm92aWRlZCB0byBzdWJzZXF1ZW50IGNhbGxzIHdpbGwgYmUgaWdub3JlZC4gVGhlcmVmb3JlLCBpdCBpcyB2ZXJ5CiAgICAgICAqIGltcG9ydGFudCBub3QgdG8gY2xvc2Ugb3ZlciBhbnkgdmFyaWFibGVzIGluc2lkZSB0aGUgY2FsbGJhY2tzLiBBbHNvLAogICAgICAgKiBhcnJvdyBmdW5jdGlvbnMgbXVzdCBiZSBhdm9pZGVkIGJlY2F1c2UgdGhleSBiaW5kIHRoZSBvdXRlciBgdGhpc2AuCiAgICAgICAqIEluc2lkZSB0aGUgY2FsbGJhY2tzLCBhbnkgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBjYW4gYmUgYWNjZXNzZWQKICAgICAgICogdGhyb3VnaCBgdGhpc2AsIHdoaWNoIHBvaW50cyB0byB0aGUgYG93bmVyYC4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuVGVtcGxhdGl6ZQogICAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byB0ZW1wbGF0aXplCiAgICAgICAqIEBwYXJhbSB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHM9fSBvd25lciBPd25lciBvZiB0aGUgdGVtcGxhdGUgaW5zdGFuY2VzOwogICAgICAgKiAgIGFueSBvcHRpb25hbCBjYWxsYmFja3Mgd2lsbCBiZSBib3VuZCB0byB0aGlzIG93bmVyLgogICAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgT3B0aW9ucyBkaWN0aW9uYXJ5IChzZWUgc3VtbWFyeSBmb3IgZGV0YWlscykKICAgICAgICogQHJldHVybiB7ZnVuY3Rpb24obmV3OlRlbXBsYXRlSW5zdGFuY2VCYXNlKX0gR2VuZXJhdGVkIGNsYXNzIGJvdW5kIHRvIHRoZSB0ZW1wbGF0ZQogICAgICAgKiAgIHByb3ZpZGVkCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfQogICAgICAgKi8KICAgICAgdGVtcGxhdGl6ZSh0ZW1wbGF0ZSwgb3duZXIsIG9wdGlvbnMpIHsKICAgICAgICAvLyBVbmRlciBzdHJpY3RUZW1wbGF0ZVBvbGljeSwgdGhlIHRlbXBsYXRpemVkIGVsZW1lbnQgbXVzdCBiZSBvd25lZAogICAgICAgIC8vIGJ5IGEgKHRydXN0ZWQpIFBvbHltZXIgZWxlbWVudCwgaW5kaWNhdGVkIGJ5IGV4aXN0ZW5jZSBvZiBfbWV0aG9kSG9zdDsKICAgICAgICAvLyBlLmcuIGZvciBkb20taWYgJiBkb20tcmVwZWF0IGluIG1haW4gZG9jdW1lbnQsIF9tZXRob2RIb3N0IGlzIG51bGwKICAgICAgICBpZiAoUG9seW1lci5zdHJpY3RUZW1wbGF0ZVBvbGljeSAmJiAhZmluZE1ldGhvZEhvc3QodGVtcGxhdGUpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0cmljdFRlbXBsYXRlUG9saWN5OiB0ZW1wbGF0ZSBvd25lciBub3QgdHJ1c3RlZCcpOwogICAgICAgIH0KICAgICAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshVGVtcGxhdGl6ZU9wdGlvbnN9ICovKG9wdGlvbnMgfHwge30pOwogICAgICAgIGlmICh0ZW1wbGF0ZS5fX3RlbXBsYXRpemVPd25lcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZScpOwogICAgICAgIH0KICAgICAgICB0ZW1wbGF0ZS5fX3RlbXBsYXRpemVPd25lciA9IG93bmVyOwogICAgICAgIGNvbnN0IGN0b3IgPSBvd25lciA/IG93bmVyLmNvbnN0cnVjdG9yIDogVGVtcGxhdGVJbnN0YW5jZUJhc2U7CiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IGN0b3IuX3BhcnNlVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICAgIC8vIEdldCBtZW1vaXplZCBiYXNlIGNsYXNzIGZvciB0aGUgcHJvdG90eXBpY2FsIHRlbXBsYXRlLCB3aGljaAogICAgICAgIC8vIGluY2x1ZGVzIHByb3BlcnR5IGVmZmVjdHMgZm9yIGJpbmRpbmcgdGVtcGxhdGUgJiBmb3J3YXJkaW5nCiAgICAgICAgbGV0IGJhc2VDbGFzcyA9IHRlbXBsYXRlSW5mby50ZW1wbGF0aXplSW5zdGFuY2VDbGFzczsKICAgICAgICBpZiAoIWJhc2VDbGFzcykgewogICAgICAgICAgYmFzZUNsYXNzID0gY3JlYXRlVGVtcGxhdGl6ZXJDbGFzcyh0ZW1wbGF0ZSwgdGVtcGxhdGVJbmZvLCBvcHRpb25zKTsKICAgICAgICAgIHRlbXBsYXRlSW5mby50ZW1wbGF0aXplSW5zdGFuY2VDbGFzcyA9IGJhc2VDbGFzczsKICAgICAgICB9CiAgICAgICAgLy8gSG9zdCBwcm9wZXJ0eSBmb3J3YXJkaW5nIG11c3QgYmUgaW5zdGFsbGVkIG9udG8gdGVtcGxhdGUgaW5zdGFuY2UKICAgICAgICBhZGRQcm9wYWdhdGVFZmZlY3RzKHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpOwogICAgICAgIC8vIFN1YmNsYXNzIGJhc2UgY2xhc3MgYW5kIGFkZCByZWZlcmVuY2UgZm9yIHRoaXMgc3BlY2lmaWMgdGVtcGxhdGUKICAgICAgICAvKiogQHByaXZhdGUgKi8KICAgICAgICBsZXQga2xhc3MgPSBjbGFzcyBUZW1wbGF0ZUluc3RhbmNlIGV4dGVuZHMgYmFzZUNsYXNzIHt9OwogICAgICAgIGtsYXNzLnByb3RvdHlwZS5fbWV0aG9kSG9zdCA9IGZpbmRNZXRob2RIb3N0KHRlbXBsYXRlKTsKICAgICAgICBrbGFzcy5wcm90b3R5cGUuX19kYXRhSG9zdCA9IHRlbXBsYXRlOwogICAgICAgIGtsYXNzLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lciA9IG93bmVyOwogICAgICAgIGtsYXNzLnByb3RvdHlwZS5fX2hvc3RQcm9wcyA9IHRlbXBsYXRlSW5mby5ob3N0UHJvcHM7CiAgICAgICAga2xhc3MgPSAvKiogQHR5cGUge2Z1bmN0aW9uKG5ldzpUZW1wbGF0ZUluc3RhbmNlQmFzZSl9ICovKGtsYXNzKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtYXNzaWduCiAgICAgICAgcmV0dXJuIGtsYXNzOwogICAgICB9LAoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHRlbXBsYXRlICJtb2RlbCIgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZWxlbWVudCwgd2hpY2gKICAgICAgICogc2VydmVzIGFzIHRoZSBiaW5kaW5nIHNjb3BlIGZvciB0aGUgdGVtcGxhdGUgaW5zdGFuY2UgdGhlIGVsZW1lbnQgaXMKICAgICAgICogY29udGFpbmVkIGluLiBBIHRlbXBsYXRlIG1vZGVsIGlzIGFuIGluc3RhbmNlIG9mCiAgICAgICAqIGBUZW1wbGF0ZUluc3RhbmNlQmFzZWAsIGFuZCBzaG91bGQgYmUgdXNlZCB0byBtYW5pcHVsYXRlIGRhdGEKICAgICAgICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGVtcGxhdGUgaW5zdGFuY2UuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgbGV0IG1vZGVsID0gbW9kZWxGb3JFbGVtZW50KGVsKTsKICAgICAgICogICBpZiAobW9kZWwuaW5kZXggPCAxMCkgewogICAgICAgKiAgICAgbW9kZWwuc2V0KCdpdGVtLmNoZWNrZWQnLCB0cnVlKTsKICAgICAgICogICB9CiAgICAgICAqCiAgICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlRlbXBsYXRpemUKICAgICAgICogQHBhcmFtIHtIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUaGUgbW9kZWwgd2lsbCBiZSByZXR1cm5lZCBmb3IKICAgICAgICogICBlbGVtZW50cyBzdGFtcGVkIGZyb20gdGhpcyB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0ge05vZGU9fSBub2RlIE5vZGUgZm9yIHdoaWNoIHRvIHJldHVybiBhIHRlbXBsYXRlIG1vZGVsLgogICAgICAgKiBAcmV0dXJuIHtUZW1wbGF0ZUluc3RhbmNlQmFzZX0gVGVtcGxhdGUgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZQogICAgICAgKiAgIGJpbmRpbmcgc2NvcGUgZm9yIHRoZSBlbGVtZW50CiAgICAgICAqLwogICAgICBtb2RlbEZvckVsZW1lbnQodGVtcGxhdGUsIG5vZGUpIHsKICAgICAgICBsZXQgbW9kZWw7CiAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgIC8vIEFuIGVsZW1lbnQgd2l0aCBhIF9fdGVtcGxhdGl6ZUluc3RhbmNlIG1hcmtzIHRoZSB0b3AgYm91bmRhcnkKICAgICAgICAgIC8vIG9mIGEgc2NvcGU7IHdhbGsgdXAgdW50aWwgd2UgZmluZCBvbmUsIGFuZCB0aGVuIGVuc3VyZSB0aGF0CiAgICAgICAgICAvLyBpdHMgX19kYXRhSG9zdCBtYXRjaGVzIGB0aGlzYCwgbWVhbmluZyB0aGlzIGRvbS1yZXBlYXQgc3RhbXBlZCBpdAogICAgICAgICAgaWYgKChtb2RlbCA9IG5vZGUuX190ZW1wbGF0aXplSW5zdGFuY2UpKSB7CiAgICAgICAgICAgIC8vIEZvdW5kIGFuIGVsZW1lbnQgc3RhbXBlZCBieSBhbm90aGVyIHRlbXBsYXRlOyBrZWVwIHdhbGtpbmcgdXAKICAgICAgICAgICAgLy8gZnJvbSBpdHMgX19kYXRhSG9zdAogICAgICAgICAgICBpZiAobW9kZWwuX19kYXRhSG9zdCAhPSB0ZW1wbGF0ZSkgewogICAgICAgICAgICAgIG5vZGUgPSBtb2RlbC5fX2RhdGFIb3N0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBtb2RlbDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU3RpbGwgaW4gYSB0ZW1wbGF0ZSBzY29wZSwga2VlcCBnb2luZyB1cCB1bnRpbAogICAgICAgICAgICAvLyBhIF9fdGVtcGxhdGl6ZUluc3RhbmNlIGlzIGZvdW5kCiAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9OwoKICAgIFBvbHltZXIuVGVtcGxhdGVJbnN0YW5jZUJhc2UgPSBUZW1wbGF0ZUluc3RhbmNlQmFzZTsKCiAgfSkoKTsKCgoKICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgbGV0IFRlbXBsYXRlSW5zdGFuY2VCYXNlID0gUG9seW1lci5UZW1wbGF0ZUluc3RhbmNlQmFzZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZQoKICAgIC8qKgogICAgICogQHR5cGVkZWYge3sKICAgICAqICAgX3RlbXBsYXRpemVyVGVtcGxhdGU6IEhUTUxUZW1wbGF0ZUVsZW1lbnQsCiAgICAgKiAgIF9wYXJlbnRNb2RlbDogYm9vbGVhbiwKICAgICAqICAgX2luc3RhbmNlUHJvcHM6IE9iamVjdCwKICAgICAqICAgX2ZvcndhcmRIb3N0UHJvcFYyOiBGdW5jdGlvbiwKICAgICAqICAgX25vdGlmeUluc3RhbmNlUHJvcFYyOiBGdW5jdGlvbiwKICAgICAqICAgY3RvcjogVGVtcGxhdGVJbnN0YW5jZUJhc2UKICAgICAqIH19CiAgICAgKi8KICAgIGxldCBUZW1wbGF0aXplclVzZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUKCiAgICAvKioKICAgICAqIFRoZSBgUG9seW1lci5UZW1wbGF0aXplcmAgYmVoYXZpb3IgYWRkcyBtZXRob2RzIHRvIGdlbmVyYXRlIGluc3RhbmNlcyBvZgogICAgICogdGVtcGxhdGVzIHRoYXQgYXJlIGVhY2ggbWFuYWdlZCBieSBhbiBhbm9ueW1vdXMgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYAogICAgICogaW5zdGFuY2Ugd2hlcmUgZGF0YS1iaW5kaW5ncyBpbiB0aGUgc3RhbXBlZCB0ZW1wbGF0ZSBjb250ZW50IGFyZSBib3VuZCB0bwogICAgICogYWNjZXNzb3JzIG9uIGl0c2VsZi4KICAgICAqCiAgICAgKiBUaGlzIGJlaGF2aW9yIGlzIHByb3ZpZGVkIGluIFBvbHltZXIgMi54IGFzIGEgaHlicmlkLWVsZW1lbnQgY29udmVuaWVuY2UKICAgICAqIG9ubHkuICBGb3Igbm9uLWh5YnJpZCB1c2FnZSwgdGhlIGBQb2x5bWVyLlRlbXBsYXRpemVgIGxpYnJhcnkKICAgICAqIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiAgICAgLy8gR2V0IGEgdGVtcGxhdGUgZnJvbSBzb21ld2hlcmUsIGUuZy4gbGlnaHQgRE9NCiAgICAgKiAgICAgbGV0IHRlbXBsYXRlID0gdGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpOwogICAgICogICAgIC8vIFByZXBhcmUgdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgdGhpcy50ZW1wbGF0aXplKHRlbXBsYXRlKTsKICAgICAqICAgICAvLyBJbnN0YW5jZSB0aGUgdGVtcGxhdGUgd2l0aCBhbiBpbml0aWFsIGRhdGEgbW9kZWwKICAgICAqICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLnN0YW1wKHtteVByb3A6ICdpbml0aWFsJ30pOwogICAgICogICAgIC8vIEluc2VydCB0aGUgaW5zdGFuY2UncyBET00gc29tZXdoZXJlLCBlLmcuIGxpZ2h0IERPTQogICAgICogICAgIFBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGluc3RhbmNlLnJvb3QpOwogICAgICogICAgIC8vIENoYW5naW5nIGEgcHJvcGVydHkgb24gdGhlIGluc3RhbmNlIHdpbGwgcHJvcGFnYXRlIHRvIGJpbmRpbmdzCiAgICAgKiAgICAgLy8gaW4gdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgaW5zdGFuY2UubXlQcm9wID0gJ25ldyB2YWx1ZSc7CiAgICAgKgogICAgICogVXNlcnMgb2YgYFRlbXBsYXRpemVyYCBtYXkgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBhYnN0cmFjdAogICAgICogQVBJJ3MgdG8gZGV0ZXJtaW5lIGhvdyBwcm9wZXJ0aWVzIGFuZCBwYXRocyBmcm9tIHRoZSBob3N0IHNob3VsZCBiZQogICAgICogZm9yd2FyZGVkIGludG8gdG8gaW5zdGFuY2VzOgogICAgICoKICAgICAqICAgICBfZm9yd2FyZEhvc3RQcm9wVjI6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKQogICAgICoKICAgICAqIExpa2V3aXNlLCB1c2VycyBtYXkgaW1wbGVtZW50IHRoZXNlIGFkZGl0aW9uYWwgYWJzdHJhY3QgQVBJJ3MgdG8gZGV0ZXJtaW5lCiAgICAgKiBob3cgaW5zdGFuY2Utc3BlY2lmaWMgcHJvcGVydGllcyB0aGF0IGNoYW5nZSBvbiB0aGUgaW5zdGFuY2Ugc2hvdWxkIGJlCiAgICAgKiBmb3J3YXJkZWQgb3V0IHRvIHRoZSBob3N0LCBpZiBuZWNlc3NhcnkuCiAgICAgKgogICAgICogICAgIF9ub3RpZnlJbnN0YW5jZVByb3BWMjogZnVuY3Rpb24oaW5zdCwgcHJvcCwgdmFsdWUpCiAgICAgKgogICAgICogSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIHByb3BlcnRpZXMgYXJlIGluc3RhbmNlLXNwZWNpZmljIGFuZCByZXF1aXJlCiAgICAgKiBjdXN0b20gbm90aWZpY2F0aW9uIHZpYSBgX25vdGlmeUluc3RhbmNlUHJvcGAsIGRlZmluZSBhbiBgX2luc3RhbmNlUHJvcHNgCiAgICAgKiBvYmplY3QgY29udGFpbmluZyBrZXlzIGZvciBlYWNoIGluc3RhbmNlIHByb3AsIGZvciBleGFtcGxlOgogICAgICoKICAgICAqICAgICBfaW5zdGFuY2VQcm9wczogewogICAgICogICAgICAgaXRlbTogdHJ1ZSwKICAgICAqICAgICAgIGluZGV4OiB0cnVlCiAgICAgKiAgICAgfQogICAgICoKICAgICAqIEFueSBwcm9wZXJ0aWVzIHVzZWQgaW4gdGhlIHRlbXBsYXRlIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIF9pbnN0YW5jZVByb3AKICAgICAqIHdpbGwgYmUgZm9yd2FyZGVkIG91dCB0byB0aGUgVGVtcGxhdGl6ZSBgb3duZXJgIGF1dG9tYXRpY2FsbHkuCiAgICAgKgogICAgICogVXNlcnMgbWF5IGFsc28gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgYWJzdHJhY3QgZnVuY3Rpb24gdG8gc2hvdyBvcgogICAgICogaGlkZSBhbnkgRE9NIGdlbmVyYXRlZCB1c2luZyBgc3RhbXBgOgogICAgICoKICAgICAqICAgICBfc2hvd0hpZGVDaGlsZHJlbjogZnVuY3Rpb24oc2hvdWxkSGlkZSkKICAgICAqCiAgICAgKiBOb3RlIHRoYXQgc29tZSBjYWxsYmFja3MgYXJlIHN1ZmZpeGVkIHdpdGggYFYyYCBpbiB0aGUgUG9seW1lciAyLnggYmVoYXZpb3IKICAgICAqIGFzIHRoZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBuZWVkIHRvIGRpZmZlciBmcm9tIHRoZSBjYWxsYmFja3MgcmVxdWlyZWQKICAgICAqIGJ5IHRoZSAxLnggVGVtcGxhdGl6ZXIgQVBJIGR1ZSB0byBjaGFuZ2VzIGluIHRoZSBgVGVtcGxhdGVJbnN0YW5jZWAgQVBJCiAgICAgKiBiZXR3ZWVuIHZlcnNpb25zIDEueCBhbmQgMi54LgogICAgICoKICAgICAqIEBwb2x5bWVyQmVoYXZpb3IKICAgICAqLwogICAgUG9seW1lci5UZW1wbGF0aXplciA9IHsKCiAgICAgIC8qKgogICAgICAgKiBHZW5lcmF0ZXMgYW4gYW5vbnltb3VzIGBUZW1wbGF0ZUluc3RhbmNlYCBjbGFzcyAoc3RvcmVkIGFzIGB0aGlzLmN0b3JgKQogICAgICAgKiBmb3IgdGhlIHByb3ZpZGVkIHRlbXBsYXRlLiAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHBlcgogICAgICAgKiB0ZW1wbGF0ZSB0byBwcmVwYXJlIGFuIGVsZW1lbnQgZm9yIHN0YW1waW5nIHRoZSB0ZW1wbGF0ZSwgZm9sbG93ZWQKICAgICAgICogYnkgYHN0YW1wYCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcyBvZiB0aGUgdGVtcGxhdGUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIHByZXBhcmUKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gbXV0YWJsZURhdGEgV2hlbiBgdHJ1ZWAsIHRoZSBnZW5lcmF0ZWQgY2xhc3Mgd2lsbCBza2lwCiAgICAgICAqICAgc3RyaWN0IGRpcnR5LWNoZWNraW5nIGZvciBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvCiAgICAgICAqICAgYmUgImRpcnR5IikuIERlZmF1bHRzIHRvIGZhbHNlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAdGhpcyB7VGVtcGxhdGl6ZXJVc2VyfQogICAgICAgKi8KICAgICAgdGVtcGxhdGl6ZSh0ZW1wbGF0ZSwgbXV0YWJsZURhdGEpIHsKICAgICAgICB0aGlzLl90ZW1wbGF0aXplclRlbXBsYXRlID0gdGVtcGxhdGU7CiAgICAgICAgdGhpcy5jdG9yID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUsIHRoaXMsIHsKICAgICAgICAgIG11dGFibGVEYXRhOiBCb29sZWFuKG11dGFibGVEYXRhKSwKICAgICAgICAgIHBhcmVudE1vZGVsOiB0aGlzLl9wYXJlbnRNb2RlbCwKICAgICAgICAgIGluc3RhbmNlUHJvcHM6IHRoaXMuX2luc3RhbmNlUHJvcHMsCiAgICAgICAgICBmb3J3YXJkSG9zdFByb3A6IHRoaXMuX2ZvcndhcmRIb3N0UHJvcFYyLAogICAgICAgICAgbm90aWZ5SW5zdGFuY2VQcm9wOiB0aGlzLl9ub3RpZnlJbnN0YW5jZVByb3BWMgogICAgICAgIH0pOwogICAgICB9LAoKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIHByZXBhcmVkIGJ5IGB0ZW1wbGF0aXplYC4gIFRoZSBvYmplY3QKICAgICAgICogcmV0dXJuZWQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFub255bW91cyBjbGFzcyBnZW5lcmF0ZWQgYnkgYHRlbXBsYXRpemVgCiAgICAgICAqIHdob3NlIGByb290YCBwcm9wZXJ0eSBpcyBhIGRvY3VtZW50IGZyYWdtZW50IGNvbnRhaW5pbmcgbmV3bHkgY2xvbmVkCiAgICAgICAqIHRlbXBsYXRlIGNvbnRlbnQsIGFuZCB3aGljaCBoYXMgcHJvcGVydHkgYWNjZXNzb3JzIGNvcnJlc3BvbmRpbmcgdG8KICAgICAgICogcHJvcGVydGllcyByZWZlcmVuY2VkIGluIHRlbXBsYXRlIGJpbmRpbmdzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdD19IG1vZGVsIE9iamVjdCBjb250YWluaW5nIGluaXRpYWwgcHJvcGVydHkgdmFsdWVzIHRvCiAgICAgICAqICAgcG9wdWxhdGUgaW50byB0aGUgdGVtcGxhdGUgYmluZGluZ3MuCiAgICAgICAqIEByZXR1cm4ge1RlbXBsYXRlSW5zdGFuY2VCYXNlfSBSZXR1cm5zIHRoZSBjcmVhdGVkIGluc3RhbmNlIG9mCiAgICAgICAqIHRoZSB0ZW1wbGF0ZSBwcmVwYXJlZCBieSBgdGVtcGxhdGl6ZWAuCiAgICAgICAqIEB0aGlzIHtUZW1wbGF0aXplclVzZXJ9CiAgICAgICAqLwogICAgICBzdGFtcChtb2RlbCkgewogICAgICAgIHJldHVybiBuZXcgdGhpcy5jdG9yKG1vZGVsKTsKICAgICAgfSwKCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSAibW9kZWwiIChgVGVtcGxhdGVJbnN0YW5jZWApIGFzc29jaWF0ZWQgd2l0aAogICAgICAgKiBhIGdpdmVuIGVsZW1lbnQsIHdoaWNoIHNlcnZlcyBhcyB0aGUgYmluZGluZyBzY29wZSBmb3IgdGhlIHRlbXBsYXRlCiAgICAgICAqIGluc3RhbmNlIHRoZSBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbi4gIEEgdGVtcGxhdGUgbW9kZWwgc2hvdWxkIGJlIHVzZWQKICAgICAgICogdG8gbWFuaXB1bGF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRlbXBsYXRlIGluc3RhbmNlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBFbGVtZW50IGZvciB3aGljaCB0byByZXR1cm4gYSB0ZW1wbGF0ZSBtb2RlbC4KICAgICAgICogQHJldHVybiB7VGVtcGxhdGVJbnN0YW5jZUJhc2V9IE1vZGVsIHJlcHJlc2VudGluZyB0aGUgYmluZGluZyBzY29wZSBmb3IKICAgICAgICogICB0aGUgZWxlbWVudC4KICAgICAgICogQHRoaXMge1RlbXBsYXRpemVyVXNlcn0KICAgICAgICovCiAgICAgIG1vZGVsRm9yRWxlbWVudChlbCkgewogICAgICAgIHJldHVybiBQb2x5bWVyLlRlbXBsYXRpemUubW9kZWxGb3JFbGVtZW50KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsIGVsKTsKICAgICAgfQogICAgfTsKCiAgfSkoKTsKCgoKICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBleHRlbmRzIHtIVE1MRWxlbWVudH0KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnR5RWZmZWN0c30KICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX09wdGlvbmFsTXV0YWJsZURhdGF9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9HZXN0dXJlRXZlbnRMaXN0ZW5lcnN9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBjb25zdCBkb21CaW5kQmFzZSA9CiAgICAgIFBvbHltZXIuR2VzdHVyZUV2ZW50TGlzdGVuZXJzKAogICAgICAgIFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YSgKICAgICAgICAgIFBvbHltZXIuUHJvcGVydHlFZmZlY3RzKEhUTUxFbGVtZW50KSkpOwoKICAgIC8qKgogICAgICogQ3VzdG9tIGVsZW1lbnQgdG8gYWxsb3cgdXNpbmcgUG9seW1lcidzIHRlbXBsYXRlIGZlYXR1cmVzIChkYXRhIGJpbmRpbmcsCiAgICAgKiBkZWNsYXJhdGl2ZSBldmVudCBsaXN0ZW5lcnMsIGV0Yy4pIGluIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgZGVmaW5pbmcKICAgICAqIGEgbmV3IGN1c3RvbSBlbGVtZW50LgogICAgICoKICAgICAqIGA8dGVtcGxhdGU+YCB0YWdzIHV0aWxpemluZyBiaW5kaW5ncyBtYXkgYmUgd3JhcHBlZCB3aXRoIHRoZSBgPGRvbS1iaW5kPmAKICAgICAqIGVsZW1lbnQsIHdoaWNoIHdpbGwgaW1tZWRpYXRlbHkgc3RhbXAgdGhlIHdyYXBwZWQgdGVtcGxhdGUgaW50byB0aGUgbWFpbgogICAgICogZG9jdW1lbnQgYW5kIGJpbmQgZWxlbWVudHMgdG8gdGhlIGBkb20tYmluZGAgZWxlbWVudCBpdHNlbGYgYXMgdGhlCiAgICAgKiBiaW5kaW5nIHNjb3BlLgogICAgICoKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAY3VzdG9tRWxlbWVudAogICAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnR5RWZmZWN0cwogICAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGEKICAgICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5HZXN0dXJlRXZlbnRMaXN0ZW5lcnMKICAgICAqIEBleHRlbmRzIHtkb21CaW5kQmFzZX0KICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0byBhbGxvdyB1c2luZyBQb2x5bWVyJ3MgdGVtcGxhdGUgZmVhdHVyZXMgKGRhdGEKICAgICAqICAgYmluZGluZywgZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXJzLCBldGMuKSBpbiB0aGUgbWFpbiBkb2N1bWVudC4KICAgICAqLwogICAgY2xhc3MgRG9tQmluZCBleHRlbmRzIGRvbUJpbmRCYXNlIHsKCiAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gWydtdXRhYmxlLWRhdGEnXTsgfQoKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICBpZiAoUG9seW1lci5zdHJpY3RUZW1wbGF0ZVBvbGljeSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLWJpbmQgbm90IGFsbG93ZWRgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5yb290ID0gbnVsbDsKICAgICAgICB0aGlzLiQgPSBudWxsOwogICAgICAgIHRoaXMuX19jaGlsZHJlbiA9IG51bGw7CiAgICAgIH0KCiAgICAgIC8qKiBAcmV0dXJuIHt2b2lkfSAqLwogICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7CiAgICAgICAgLy8gYXNzdW1lcyBvbmx5IG9uZSBvYnNlcnZlZCBhdHRyaWJ1dGUKICAgICAgICB0aGlzLm11dGFibGVEYXRhID0gdHJ1ZTsKICAgICAgfQoKICAgICAgLyoqIEByZXR1cm4ge3ZvaWR9ICovCiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICB0aGlzLnJlbmRlcigpOwogICAgICB9CgogICAgICAvKiogQHJldHVybiB7dm9pZH0gKi8KICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgdGhpcy5fX3JlbW92ZUNoaWxkcmVuKCk7CiAgICAgIH0KCiAgICAgIF9faW5zZXJ0Q2hpbGRyZW4oKSB7CiAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnJvb3QsIHRoaXMpOwogICAgICB9CgogICAgICBfX3JlbW92ZUNoaWxkcmVuKCkgewogICAgICAgIGlmICh0aGlzLl9fY2hpbGRyZW4pIHsKICAgICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuX19jaGlsZHJlbltpXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRm9yY2VzIHRoZSBlbGVtZW50IHRvIHJlbmRlciBpdHMgY29udGVudC4gVGhpcyBpcyB0eXBpY2FsbHkgb25seQogICAgICAgKiBuZWNlc3NhcnkgdG8gY2FsbCBpZiBIVE1MSW1wb3J0cyB3aXRoIHRoZSBhc3luYyBhdHRyaWJ1dGUgYXJlIHVzZWQuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICByZW5kZXIoKSB7CiAgICAgICAgbGV0IHRlbXBsYXRlOwogICAgICAgIGlmICghdGhpcy5fX2NoaWxkcmVuKSB7CiAgICAgICAgICB0ZW1wbGF0ZSA9IC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi8odGVtcGxhdGUgfHwgdGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpKTsKICAgICAgICAgIGlmICghdGVtcGxhdGUpIHsKICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCBjaGlsZExpc3QgY2hhbmdlcyBhbmQgdGVtcGxhdGUgc2hvdWxkIGJlIHRoZXJlIGJ5IHRoZW4KICAgICAgICAgICAgbGV0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICAgIHRlbXBsYXRlID0gLyoqIEB0eXBlIHtIVE1MVGVtcGxhdGVFbGVtZW50fSAqLyh0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3RlbXBsYXRlJykpOwogICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZSkgewogICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb20tYmluZCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIHtjaGlsZExpc3Q6IHRydWV9KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fc3RhbXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgICB0aGlzLiQgPSB0aGlzLnJvb3QuJDsKICAgICAgICAgIHRoaXMuX19jaGlsZHJlbiA9IFtdOwogICAgICAgICAgZm9yIChsZXQgbj10aGlzLnJvb3QuZmlyc3RDaGlsZDsgbjsgbj1uLm5leHRTaWJsaW5nKSB7CiAgICAgICAgICAgIHRoaXMuX19jaGlsZHJlblt0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoXSA9IG47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX19pbnNlcnRDaGlsZHJlbigpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RvbS1jaGFuZ2UnLCB7CiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0KCiAgICB9CgogICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdkb20tYmluZCcsIERvbUJpbmQpOwoKICAgIC8qKiBAY29uc3QgKi8KICAgIFBvbHltZXIuRG9tQmluZCA9IERvbUJpbmQ7CgogIH0pKCk7CgoKCiAgKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qKgogICAgICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgc3RhdGljIHN0cmluZyB2YWx1ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIKICAgICAqIHN0cmluZ3MgYnkgYXNzZXRpbmcgdGhhdCB0aGV5IGhhdmUgYmVlbiBjcmVhdGVkIHZpYSB0aGlzIGNsYXNzLiBUaGUKICAgICAqIGB2YWx1ZWAgcHJvcGVydHkgcmV0dXJucyB0aGUgc3RyaW5nIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCiAgICAgKi8KICAgIGNsYXNzIExpdGVyYWxTdHJpbmcgewogICAgICBjb25zdHJ1Y3RvcihzdHJpbmcpIHsKICAgICAgICAvKiogQHR5cGUge3N0cmluZ30gKi8KICAgICAgICB0aGlzLnZhbHVlID0gc3RyaW5nLnRvU3RyaW5nKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gTGl0ZXJhbFN0cmluZyBzdHJpbmcgdmFsdWUKICAgICAgICovCiAgICAgIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIE9iamVjdCB0byBzdHJpbmdpZnkgaW50byBIVE1MCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IEhUTUwgc3RyaW5naWZpZWQgZm9ybSBvZiBgb2JqYAogICAgICovCiAgICBmdW5jdGlvbiBsaXRlcmFsVmFsdWUodmFsdWUpIHsKICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGl0ZXJhbFN0cmluZykgewogICAgICAgIHJldHVybiAvKiogQHR5cGUgeyFMaXRlcmFsU3RyaW5nfSAqLyh2YWx1ZSkudmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lci5odG1sTGl0ZXJhbDogJHt2YWx1ZX1gKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHsqfSB2YWx1ZSBPYmplY3QgdG8gc3RyaW5naWZ5IGludG8gSFRNTAogICAgICogQHJldHVybiB7c3RyaW5nfSBIVE1MIHN0cmluZ2lmaWVkIGZvcm0gb2YgYG9iamAKICAgICAqLwogICAgZnVuY3Rpb24gaHRtbFZhbHVlKHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gLyoqIEB0eXBlIHshSFRNTFRlbXBsYXRlRWxlbWVudCB9ICovKHZhbHVlKS5pbm5lckhUTUw7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXRlcmFsU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIGxpdGVyYWxWYWx1ZSh2YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBub24tdGVtcGxhdGUgdmFsdWUgcGFzc2VkIHRvIFBvbHltZXIuaHRtbDogJHt2YWx1ZX1gKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQSB0ZW1wbGF0ZSBsaXRlcmFsIHRhZyB0aGF0IGNyZWF0ZXMgYW4gSFRNTCA8dGVtcGxhdGU+IGVsZW1lbnQgZnJvbSB0aGUKICAgICAqIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcuCiAgICAgKgogICAgICogVGhpcyBhbGxvd3MgeW91IHRvIHdyaXRlIGEgUG9seW1lciBUZW1wbGF0ZSBpbiBKYXZhU2NyaXB0LgogICAgICoKICAgICAqIFRlbXBsYXRlcyBjYW4gYmUgY29tcG9zZWQgYnkgaW50ZXJwb2xhdGluZyBgSFRNTFRlbXBsYXRlRWxlbWVudGBzIGluCiAgICAgKiBleHByZXNzaW9ucyBpbiB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSBsaXRlcmFsLiBUaGUgbmVzdGVkIHRlbXBsYXRlJ3MKICAgICAqIGBpbm5lckhUTUxgIGlzIGluY2x1ZGVkIGluIHRoZSBjb250YWluaW5nIHRlbXBsYXRlLiAgVGhlIG9ubHkgb3RoZXIKICAgICAqIHZhbHVlcyBhbGxvd2VkIGluIGV4cHJlc3Npb25zIGFyZSB0aG9zZSByZXR1cm5lZCBmcm9tIGBQb2x5bWVyLmh0bWxMaXRlcmFsYAogICAgICogd2hpY2ggZW5zdXJlcyBvbmx5IGxpdGVyYWwgdmFsdWVzIGZyb20gSlMgc291cmNlIGV2ZXIgcmVhY2ggdGhlIEhUTUwsIHRvCiAgICAgKiBndWFyZCBhZ2FpbnN0IFhTUyByaXNrcy4KICAgICAqCiAgICAgKiBBbGwgb3RoZXIgdmFsdWVzIGFyZSBkaXNhbGxvd2VkIGluIGV4cHJlc3Npb25zIHRvIGhlbHAgcHJldmVudCBYU1MKICAgICAqIGF0dGFja3M7IGhvd2V2ZXIsIGBQb2x5bWVyLmh0bWxMaXRlcmFsYCBjYW4gYmUgdXNlZCB0byBjb21wb3NlIHN0YXRpYwogICAgICogc3RyaW5nIHZhbHVlcyBpbnRvIHRlbXBsYXRlcy4gVGhpcyBpcyB1c2VmdWwgdG8gY29tcG9zZSBzdHJpbmdzIGludG8KICAgICAqIHBsYWNlcyB0aGF0IGRvIG5vdCBhY2NlcHQgaHRtbCwgbGlrZSB0aGUgY3NzIHRleHQgb2YgYSBgc3R5bGVgCiAgICAgKiBlbGVtZW50LgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7CiAgICAgKiAgICAgICByZXR1cm4gUG9seW1lci5odG1sYAogICAgICogICAgICAgICA8c3R5bGU+Omhvc3R7IGNvbnRlbnQ6Ii4uLiIgfTwvc3R5bGU+CiAgICAgKiAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvd2VkIj4ke3RoaXMucGFydGlhbFRlbXBsYXRlfTwvZGl2PgogICAgICogICAgICAgICAke3N1cGVyLnRlbXBsYXRlfQogICAgICogICAgICAgYDsKICAgICAqICAgICB9CiAgICAgKiAgICAgc3RhdGljIGdldCBwYXJ0aWFsVGVtcGxhdGUoKSB7IHJldHVybiBQb2x5bWVyLmh0bWxgPHNwYW4+UGFydGlhbCE8L3NwYW4+YDsgfQogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICAgKiBAcGFyYW0geyFJVGVtcGxhdGVBcnJheX0gc3RyaW5ncyBDb25zdGFudCBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbAogICAgICogQHBhcmFtIHsuLi4qfSB2YWx1ZXMgVmFyaWFibGUgcGFydHMgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWwKICAgICAqIEByZXR1cm4geyFIVE1MVGVtcGxhdGVFbGVtZW50fSBDb25zdHJ1Y3RlZCBIVE1MVGVtcGxhdGVFbGVtZW50CiAgICAgKi8KICAgIFBvbHltZXIuaHRtbCA9IGZ1bmN0aW9uIGh0bWwoc3RyaW5ncywgLi4udmFsdWVzKSB7CiAgICAgIGNvbnN0IHRlbXBsYXRlID0gLyoqIEB0eXBlIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gKi8oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKSk7CiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdiwgaWR4KSA9PgogICAgICAgICAgYWNjICsgaHRtbFZhbHVlKHYpICsgc3RyaW5nc1tpZHggKyAxXSwgc3RyaW5nc1swXSk7CiAgICAgIHJldHVybiB0ZW1wbGF0ZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBBbiBodG1sIGxpdGVyYWwgdGFnIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBgUG9seW1lci5odG1sYCB0byBjb21wb3NlLgogICAgICogYSBsaXRlcmFsIHN0cmluZy4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICoKICAgICAqICAgICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkgewogICAgICogICAgICAgcmV0dXJuIFBvbHltZXIuaHRtbGAKICAgICAqICAgICAgICAgPHN0eWxlPgogICAgICogICAgICAgICAgIDpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0KICAgICAqICAgICAgICAgICAke3N0eWxlVGVtcGxhdGV9CiAgICAgKiAgICAgICAgIDwvc3R5bGU+CiAgICAgKiAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvd2VkIj4ke3N0YXRpY1ZhbHVlfTwvZGl2PgogICAgICogICAgICAgICAke3N1cGVyLnRlbXBsYXRlfQogICAgICogICAgICAgYDsKICAgICAqICAgICB9CiAgICAgKiAgICAgc3RhdGljIGdldCBzdHlsZVRlbXBsYXRlKCkgeyByZXR1cm4gUG9seW1lci5odG1sTGl0ZXJhbGAuc2hhZG93ZWQgeyBiYWNrZ3JvdW5kOiBncmF5OyB9YDsgfQogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICAgKiBAcGFyYW0geyFJVGVtcGxhdGVBcnJheX0gc3RyaW5ncyBDb25zdGFudCBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbAogICAgICogQHBhcmFtIHsuLi4qfSB2YWx1ZXMgVmFyaWFibGUgcGFydHMgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWwKICAgICAqIEByZXR1cm4geyFMaXRlcmFsU3RyaW5nfSBDb25zdHJ1Y3RlZCBsaXRlcmFsIHN0cmluZwogICAgICovCiAgICBQb2x5bWVyLmh0bWxMaXRlcmFsID0gZnVuY3Rpb24oc3RyaW5ncywgLi4udmFsdWVzKSB7CiAgICAgIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZyh2YWx1ZXMucmVkdWNlKChhY2MsIHYsIGlkeCkgPT4KICAgICAgICAgIGFjYyArIGxpdGVyYWxWYWx1ZSh2KSArIHN0cmluZ3NbaWR4ICsgMV0sIHN0cmluZ3NbMF0pKTsKICAgIH07CiAgfSkoKTsKCgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKioKICAgKiBCYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJIGZvciBQb2x5bWVyJ3MgbWV0YS1wcm9ncmFtbWluZwogICAqIGZlYXR1cmVzIGluY2x1ZGluZyB0ZW1wbGF0ZSBzdGFtcGluZywgZGF0YS1iaW5kaW5nLCBhdHRyaWJ1dGUgZGVzZXJpYWxpemF0aW9uLAogICAqIGFuZCBwcm9wZXJ0eSBjaGFuZ2Ugb2JzZXJ2YXRpb24uCiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQGNvbnN0cnVjdG9yCiAgICogQGltcGxlbWVudHMge1BvbHltZXJfRWxlbWVudE1peGlufQogICAqIEBleHRlbmRzIHtIVE1MRWxlbWVudH0KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuRWxlbWVudE1peGluCiAgICogQHN1bW1hcnkgQ3VzdG9tIGVsZW1lbnQgYmFzZSBjbGFzcyB0aGF0IHByb3ZpZGVzIHRoZSBjb3JlIEFQSSBmb3IgUG9seW1lcidzCiAgICogICBrZXkgbWV0YS1wcm9ncmFtbWluZyBmZWF0dXJlcyBpbmNsdWRpbmcgdGVtcGxhdGUgc3RhbXBpbmcsIGRhdGEtYmluZGluZywKICAgKiAgIGF0dHJpYnV0ZSBkZXNlcmlhbGl6YXRpb24sIGFuZCBwcm9wZXJ0eSBjaGFuZ2Ugb2JzZXJ2YXRpb24KICAgKi8KICBQb2x5bWVyLkVsZW1lbnQgPSBQb2x5bWVyLkVsZW1lbnRNaXhpbihIVE1MRWxlbWVudCk7CgogIC8vIE5PVEU6IHRoaXMgaXMgaGVyZSBmb3IgbW9kdWxpemVyIHRvIGV4cG9ydCBgaHRtbGAgZm9yIHRoZSBtb2R1bGUgdmVyc2lvbiBvZiB0aGlzIGZpbGUKICBQb2x5bWVyLmh0bWwgPSBQb2x5bWVyLmh0bWw7Cn0pKCk7CgoKKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IFRlbXBsYXRlSW5zdGFuY2VCYXNlID0gUG9seW1lci5UZW1wbGF0ZUluc3RhbmNlQmFzZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZQoKICAvKioKICAgKiBAY29uc3RydWN0b3IKICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9PcHRpb25hbE11dGFibGVEYXRhfQogICAqIEBleHRlbmRzIHtQb2x5bWVyLkVsZW1lbnR9CiAgICogQHByaXZhdGUKICAgKi8KICBjb25zdCBkb21SZXBlYXRCYXNlID0gUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhKFBvbHltZXIuRWxlbWVudCk7CgogIC8qKgogICAqIFRoZSBgPGRvbS1yZXBlYXQ+YCBlbGVtZW50IHdpbGwgYXV0b21hdGljYWxseSBzdGFtcCBhbmQgYmluZHMgb25lIGluc3RhbmNlCiAgICogb2YgdGVtcGxhdGUgY29udGVudCB0byBlYWNoIG9iamVjdCBpbiBhIHVzZXItcHJvdmlkZWQgYXJyYXkuCiAgICogYGRvbS1yZXBlYXRgIGFjY2VwdHMgYW4gYGl0ZW1zYCBwcm9wZXJ0eSwgYW5kIG9uZSBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUKICAgKiBpcyBzdGFtcGVkIGZvciBlYWNoIGl0ZW0gaW50byB0aGUgRE9NIGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgYGRvbS1yZXBlYXRgCiAgICogZWxlbWVudC4gIFRoZSBgaXRlbWAgcHJvcGVydHkgd2lsbCBiZSBzZXQgb24gZWFjaCBpbnN0YW5jZSdzIGJpbmRpbmcKICAgKiBzY29wZSwgdGh1cyB0ZW1wbGF0ZXMgc2hvdWxkIGJpbmQgdG8gc3ViLXByb3BlcnRpZXMgb2YgYGl0ZW1gLgogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqIGBgYGh0bWwKICAgKiA8ZG9tLW1vZHVsZSBpZD0iZW1wbG95ZWUtbGlzdCI+CiAgICoKICAgKiAgIDx0ZW1wbGF0ZT4KICAgKgogICAqICAgICA8ZGl2PiBFbXBsb3llZSBsaXN0OiA8L2Rpdj4KICAgKiAgICAgPGRvbS1yZXBlYXQgaXRlbXM9Int7ZW1wbG95ZWVzfX0iPgogICAqICAgICAgIDx0ZW1wbGF0ZT4KICAgKiAgICAgICAgIDxkaXY+Rmlyc3QgbmFtZTogPHNwYW4+e3tpdGVtLmZpcnN0fX08L3NwYW4+PC9kaXY+CiAgICogICAgICAgICA8ZGl2Pkxhc3QgbmFtZTogPHNwYW4+e3tpdGVtLmxhc3R9fTwvc3Bhbj48L2Rpdj4KICAgKiAgICAgICA8L3RlbXBsYXRlPgogICAqICAgICA8L2RvbS1yZXBlYXQ+CiAgICoKICAgKiAgIDwvdGVtcGxhdGU+CiAgICoKICAgKiA8L2RvbS1tb2R1bGU+CiAgICogYGBgCiAgICoKICAgKiBXaXRoIHRoZSBmb2xsb3dpbmcgY3VzdG9tIGVsZW1lbnQgZGVmaW5pdGlvbjoKICAgKgogICAqIGBgYGpzCiAgICogY2xhc3MgRW1wbG95ZWVMaXN0IGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHsKICAgKiAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZW1wbG95ZWUtbGlzdCc7IH0KICAgKiAgIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHsKICAgKiAgICAgcmV0dXJuIHsKICAgKiAgICAgICBlbXBsb3llZXM6IHsKICAgKiAgICAgICAgIHZhbHVlKCkgewogICAqICAgICAgICAgICByZXR1cm4gWwogICAqICAgICAgICAgICAgIHtmaXJzdDogJ0JvYicsIGxhc3Q6ICdTbWl0aCd9LAogICAqICAgICAgICAgICAgIHtmaXJzdDogJ1NhbGx5JywgbGFzdDogJ0pvaG5zb24nfSwKICAgKiAgICAgICAgICAgICAuLi4KICAgKiAgICAgICAgICAgXTsKICAgKiAgICAgICAgIH0KICAgKiAgICAgICB9CiAgICogICAgIH07CiAgICogICB9CiAgICogfQogICAqIGBgYAogICAqCiAgICogTm90aWZpY2F0aW9ucyBmb3IgY2hhbmdlcyB0byBpdGVtcyBzdWItcHJvcGVydGllcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0ZW1wbGF0ZQogICAqIGluc3RhbmNlcywgd2hpY2ggd2lsbCB1cGRhdGUgdmlhIHRoZSBub3JtYWwgc3RydWN0dXJlZCBkYXRhIG5vdGlmaWNhdGlvbiBzeXN0ZW0uCiAgICoKICAgKiBNdXRhdGlvbnMgdG8gdGhlIGBpdGVtc2AgYXJyYXkgaXRzZWxmIHNob3VsZCBiZSBtYWRlIHVzaW5nIHRoZSBBcnJheQogICAqIG11dGF0aW9uIEFQSSdzIG9uIGBQb2x5bWVyLkJhc2VgIChgcHVzaGAsIGBwb3BgLCBgc3BsaWNlYCwgYHNoaWZ0YCwKICAgKiBgdW5zaGlmdGApLCBhbmQgdGVtcGxhdGUgaW5zdGFuY2VzIHdpbGwgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGRhdGEgaW4gdGhlCiAgICogYXJyYXkuCiAgICoKICAgKiBFdmVudHMgY2F1Z2h0IGJ5IGV2ZW50IGhhbmRsZXJzIHdpdGhpbiB0aGUgYGRvbS1yZXBlYXRgIHRlbXBsYXRlIHdpbGwgYmUKICAgKiBkZWNvcmF0ZWQgd2l0aCBhIGBtb2RlbGAgcHJvcGVydHksIHdoaWNoIHJlcHJlc2VudHMgdGhlIGJpbmRpbmcgc2NvcGUgZm9yCiAgICogZWFjaCB0ZW1wbGF0ZSBpbnN0YW5jZS4gIFRoZSBtb2RlbCBpcyBhbiBpbnN0YW5jZSBvZiBQb2x5bWVyLkJhc2UsIGFuZCBzaG91bGQKICAgKiBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgZGF0YSBvbiB0aGUgaW5zdGFuY2UsIGZvciBleGFtcGxlCiAgICogYGV2ZW50Lm1vZGVsLnNldCgnaXRlbS5jaGVja2VkJywgdHJ1ZSk7YC4KICAgKgogICAqIEFsdGVybmF0aXZlbHksIHRoZSBtb2RlbCBmb3IgYSB0ZW1wbGF0ZSBpbnN0YW5jZSBmb3IgYW4gZWxlbWVudCBzdGFtcGVkIGJ5CiAgICogYSBgZG9tLXJlcGVhdGAgY2FuIGJlIG9idGFpbmVkIHVzaW5nIHRoZSBgbW9kZWxGb3JFbGVtZW50YCBBUEkgb24gdGhlCiAgICogYGRvbS1yZXBlYXRgIHRoYXQgc3RhbXBlZCBpdCwgZm9yIGV4YW1wbGUKICAgKiBgdGhpcy4kLmRvbVJlcGVhdC5tb2RlbEZvckVsZW1lbnQoZXZlbnQudGFyZ2V0KS5zZXQoJ2l0ZW0uY2hlY2tlZCcsIHRydWUpO2AuCiAgICogVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBtYW5pcHVsYXRpbmcgaW5zdGFuY2UgZGF0YSBvZiBldmVudCB0YXJnZXRzIG9idGFpbmVkCiAgICogYnkgZXZlbnQgaGFuZGxlcnMgb24gcGFyZW50cyBvZiB0aGUgYGRvbS1yZXBlYXRgIChldmVudCBkZWxlZ2F0aW9uKS4KICAgKgogICAqIEEgdmlldy1zcGVjaWZpYyBmaWx0ZXIvc29ydCBtYXkgYmUgYXBwbGllZCB0byBlYWNoIGBkb20tcmVwZWF0YCBieSBzdXBwbHlpbmcgYQogICAqIGBmaWx0ZXJgIGFuZC9vciBgc29ydGAgcHJvcGVydHkuICBUaGlzIG1heSBiZSBhIHN0cmluZyB0aGF0IG5hbWVzIGEgZnVuY3Rpb24gb24KICAgKiB0aGUgaG9zdCwgb3IgYSBmdW5jdGlvbiBtYXkgYmUgYXNzaWduZWQgdG8gdGhlIHByb3BlcnR5IGRpcmVjdGx5LiAgVGhlIGZ1bmN0aW9ucwogICAqIHNob3VsZCBpbXBsZW1lbnRlZCBmb2xsb3dpbmcgdGhlIHN0YW5kYXJkIGBBcnJheWAgZmlsdGVyL3NvcnQgQVBJLgogICAqCiAgICogSW4gb3JkZXIgdG8gcmUtcnVuIHRoZSBmaWx0ZXIgb3Igc29ydCBmdW5jdGlvbnMgYmFzZWQgb24gY2hhbmdlcyB0byBzdWItZmllbGRzCiAgICogb2YgYGl0ZW1zYCwgdGhlIGBvYnNlcnZlYCBwcm9wZXJ0eSBtYXkgYmUgc2V0IGFzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiBgaXRlbWAgc3ViLWZpZWxkcyB0aGF0IHNob3VsZCBjYXVzZSBhIHJlLWZpbHRlci9zb3J0IHdoZW4gbW9kaWZpZWQuICBJZgogICAqIHRoZSBmaWx0ZXIgb3Igc29ydCBmdW5jdGlvbiBkZXBlbmRzIG9uIHByb3BlcnRpZXMgbm90IGNvbnRhaW5lZCBpbiBgaXRlbXNgLAogICAqIHRoZSB1c2VyIHNob3VsZCBvYnNlcnZlIGNoYW5nZXMgdG8gdGhvc2UgcHJvcGVydGllcyBhbmQgY2FsbCBgcmVuZGVyYCB0byB1cGRhdGUKICAgKiB0aGUgdmlldyBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jeSBjaGFuZ2UuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgZm9yIGFuIGBkb20tcmVwZWF0YCB3aXRoIGEgZmlsdGVyIG9mIHRoZSBmb2xsb3dpbmc6CiAgICoKICAgKiBgYGBqcwogICAqIGlzRW5naW5lZXIoaXRlbSkgewogICAqICAgcmV0dXJuIGl0ZW0udHlwZSA9PSAnZW5naW5lZXInIHx8IGl0ZW0ubWFuYWdlci50eXBlID09ICdlbmdpbmVlcic7CiAgICogfQogICAqIGBgYAogICAqCiAgICogVGhlbiB0aGUgYG9ic2VydmVgIHByb3BlcnR5IHNob3VsZCBiZSBjb25maWd1cmVkIGFzIGZvbGxvd3M6CiAgICoKICAgKiBgYGBodG1sCiAgICogPGRvbS1yZXBlYXQgaXRlbXM9Int7ZW1wbG95ZWVzfX0iIGZpbHRlcj0iaXNFbmdpbmVlciIgb2JzZXJ2ZT0idHlwZSBtYW5hZ2VyLnR5cGUiPgogICAqIGBgYAogICAqCiAgICogQGN1c3RvbUVsZW1lbnQKICAgKiBAcG9seW1lcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQGV4dGVuZHMge2RvbVJlcGVhdEJhc2V9CiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGEKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCBmb3Igc3RhbXBpbmcgaW5zdGFuY2Ugb2YgYSB0ZW1wbGF0ZSBib3VuZCB0bwogICAqICAgaXRlbXMgaW4gYW4gYXJyYXkuCiAgICovCiAgY2xhc3MgRG9tUmVwZWF0IGV4dGVuZHMgZG9tUmVwZWF0QmFzZSB7CgogICAgLy8gTm90IG5lZWRlZCB0byBmaW5kIHRlbXBsYXRlOyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHRoZSBhbmFseXplcgogICAgLy8gY2FuIGZpbmQgdGhlIHRhZyBuYW1lIGZyb20gY3VzdG9tRWxlbWVudHMuZGVmaW5lIGNhbGwKICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZG9tLXJlcGVhdCc7IH0KCiAgICBzdGF0aWMgZ2V0IHRlbXBsYXRlKCkgeyByZXR1cm4gbnVsbDsgfQoKICAgIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHsKCiAgICAgIC8qKgogICAgICAgKiBGaXJlZCB3aGVuZXZlciBET00gaXMgYWRkZWQgb3IgcmVtb3ZlZCBieSB0aGlzIHRlbXBsYXRlIChieQogICAgICAgKiBkZWZhdWx0LCByZW5kZXJpbmcgb2NjdXJzIGxhemlseSkuICBUbyBmb3JjZSBpbW1lZGlhdGUgcmVuZGVyaW5nLCBjYWxsCiAgICAgICAqIGByZW5kZXJgLgogICAgICAgKgogICAgICAgKiBAZXZlbnQgZG9tLWNoYW5nZQogICAgICAgKi8KICAgICAgcmV0dXJuIHsKCiAgICAgICAgLyoqCiAgICAgICAgICogQW4gYXJyYXkgY29udGFpbmluZyBpdGVtcyBkZXRlcm1pbmluZyBob3cgbWFueSBpbnN0YW5jZXMgb2YgdGhlIHRlbXBsYXRlCiAgICAgICAgICogdG8gc3RhbXAgYW5kIHRoYXQgdGhhdCBlYWNoIHRlbXBsYXRlIGluc3RhbmNlIHNob3VsZCBiaW5kIHRvLgogICAgICAgICAqLwogICAgICAgIGl0ZW1zOiB7CiAgICAgICAgICB0eXBlOiBBcnJheQogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBhZGQgdG8gdGhlIGJpbmRpbmcgc2NvcGUgZm9yIHRoZSBhcnJheQogICAgICAgICAqIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gdGVtcGxhdGUgaW5zdGFuY2UuCiAgICAgICAgICovCiAgICAgICAgYXM6IHsKICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgIHZhbHVlOiAnaXRlbScKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gYWRkIHRvIHRoZSBiaW5kaW5nIHNjb3BlIHdpdGggdGhlIGluZGV4CiAgICAgICAgICogb2YgdGhlIGluc3RhbmNlIGluIHRoZSBzb3J0ZWQgYW5kIGZpbHRlcmVkIGxpc3Qgb2YgcmVuZGVyZWQgaXRlbXMuCiAgICAgICAgICogTm90ZSwgZm9yIHRoZSBpbmRleCBpbiB0aGUgYHRoaXMuaXRlbXNgIGFycmF5LCB1c2UgdGhlIHZhbHVlIG9mIHRoZQogICAgICAgICAqIGBpdGVtc0luZGV4QXNgIHByb3BlcnR5LgogICAgICAgICAqLwogICAgICAgIGluZGV4QXM6IHsKICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgIHZhbHVlOiAnaW5kZXgnCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGFkZCB0byB0aGUgYmluZGluZyBzY29wZSB3aXRoIHRoZSBpbmRleAogICAgICAgICAqIG9mIHRoZSBpbnN0YW5jZSBpbiB0aGUgYHRoaXMuaXRlbXNgIGFycmF5LiBOb3RlLCBmb3IgdGhlIGluZGV4IG9mCiAgICAgICAgICogdGhpcyBpbnN0YW5jZSBpbiB0aGUgc29ydGVkIGFuZCBmaWx0ZXJlZCBsaXN0IG9mIHJlbmRlcmVkIGl0ZW1zLAogICAgICAgICAqIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGBpbmRleEFzYCBwcm9wZXJ0eS4KICAgICAgICAgKi8KICAgICAgICBpdGVtc0luZGV4QXM6IHsKICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgIHZhbHVlOiAnaXRlbXNJbmRleCcKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGRldGVybWluZSB0aGUgc29ydCBvcmRlciBvZiB0aGUgaXRlbXMuICBUaGlzCiAgICAgICAgICogcHJvcGVydHkgc2hvdWxkIGVpdGhlciBiZSBwcm92aWRlZCBhcyBhIHN0cmluZywgaW5kaWNhdGluZyBhIG1ldGhvZAogICAgICAgICAqIG5hbWUgb24gdGhlIGVsZW1lbnQncyBob3N0LCBvciBlbHNlIGJlIGFuIGFjdHVhbCBmdW5jdGlvbi4gIFRoZQogICAgICAgICAqIGZ1bmN0aW9uIHNob3VsZCBtYXRjaCB0aGUgc29ydCBmdW5jdGlvbiBwYXNzZWQgdG8gYEFycmF5LnNvcnRgLgogICAgICAgICAqIFVzaW5nIGEgc29ydCBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSB1bmRlcmx5aW5nIGBpdGVtc2AgYXJyYXkuCiAgICAgICAgICovCiAgICAgICAgc29ydDogewogICAgICAgICAgdHlwZTogRnVuY3Rpb24sCiAgICAgICAgICBvYnNlcnZlcjogJ19fc29ydENoYW5nZWQnCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBpdGVtcyBvdXQgb2YgdGhlIHZpZXcuICBUaGlzCiAgICAgICAgICogcHJvcGVydHkgc2hvdWxkIGVpdGhlciBiZSBwcm92aWRlZCBhcyBhIHN0cmluZywgaW5kaWNhdGluZyBhIG1ldGhvZAogICAgICAgICAqIG5hbWUgb24gdGhlIGVsZW1lbnQncyBob3N0LCBvciBlbHNlIGJlIGFuIGFjdHVhbCBmdW5jdGlvbi4gIFRoZQogICAgICAgICAqIGZ1bmN0aW9uIHNob3VsZCBtYXRjaCB0aGUgc29ydCBmdW5jdGlvbiBwYXNzZWQgdG8gYEFycmF5LmZpbHRlcmAuCiAgICAgICAgICogVXNpbmcgYSBmaWx0ZXIgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgdW5kZXJseWluZyBgaXRlbXNgIGFycmF5LgogICAgICAgICAqLwogICAgICAgIGZpbHRlcjogewogICAgICAgICAgdHlwZTogRnVuY3Rpb24sCiAgICAgICAgICBvYnNlcnZlcjogJ19fZmlsdGVyQ2hhbmdlZCcKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBXaGVuIHVzaW5nIGEgYGZpbHRlcmAgb3IgYHNvcnRgIGZ1bmN0aW9uLCB0aGUgYG9ic2VydmVgIHByb3BlcnR5CiAgICAgICAgICogc2hvdWxkIGJlIHNldCB0byBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBuYW1lcyBvZiBpdGVtCiAgICAgICAgICogc3ViLWZpZWxkcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgcmUtc29ydCBvciByZS1maWx0ZXIgd2hlbiBjaGFuZ2VkLgogICAgICAgICAqIFRoZXNlIHNob3VsZCBnZW5lcmFsbHkgYmUgZmllbGRzIG9mIGBpdGVtYCB0aGF0IHRoZSBzb3J0IG9yIGZpbHRlcgogICAgICAgICAqIGZ1bmN0aW9uIGRlcGVuZHMgb24uCiAgICAgICAgICovCiAgICAgICAgb2JzZXJ2ZTogewogICAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX29ic2VydmVDaGFuZ2VkJwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIFdoZW4gdXNpbmcgYSBgZmlsdGVyYCBvciBgc29ydGAgZnVuY3Rpb24sIHRoZSBgZGVsYXlgIHByb3BlcnR5CiAgICAgICAgICogZGV0ZXJtaW5lcyBhIGRlYm91bmNlIHRpbWUgaW4gbXMgYWZ0ZXIgYSBjaGFuZ2UgdG8gb2JzZXJ2ZWQgaXRlbQogICAgICAgICAqIHByb3BlcnRpZXMgdGhhdCBtdXN0IHBhc3MgYmVmb3JlIHRoZSBmaWx0ZXIgb3Igc29ydCBpcyByZS1ydW4uCiAgICAgICAgICogVGhpcyBpcyB1c2VmdWwgaW4gcmF0ZS1saW1pdGluZyBzaHVmZmxpbmcgb2YgdGhlIHZpZXcgd2hlbgogICAgICAgICAqIGl0ZW0gY2hhbmdlcyBtYXkgYmUgZnJlcXVlbnQuCiAgICAgICAgICovCiAgICAgICAgZGVsYXk6IE51bWJlciwKCiAgICAgICAgLyoqCiAgICAgICAgICogQ291bnQgb2YgY3VycmVudGx5IHJlbmRlcmVkIGl0ZW1zIGFmdGVyIGBmaWx0ZXJgIChpZiBhbnkpIGhhcyBiZWVuIGFwcGxpZWQuCiAgICAgICAgICogSWYgImNodW5raW5nIG1vZGUiIGlzIGVuYWJsZWQsIGByZW5kZXJlZEl0ZW1Db3VudGAgaXMgdXBkYXRlZCBlYWNoIHRpbWUgYQogICAgICAgICAqIHNldCBvZiB0ZW1wbGF0ZSBpbnN0YW5jZXMgaXMgcmVuZGVyZWQuCiAgICAgICAgICoKICAgICAgICAgKi8KICAgICAgICByZW5kZXJlZEl0ZW1Db3VudDogewogICAgICAgICAgdHlwZTogTnVtYmVyLAogICAgICAgICAgbm90aWZ5OiB0cnVlLAogICAgICAgICAgcmVhZE9ubHk6IHRydWUKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGFuIGluaXRpYWwgY291bnQgb2YgdGVtcGxhdGUgaW5zdGFuY2VzIHRvIHJlbmRlciBhZnRlciBzZXR0aW5nCiAgICAgICAgICogdGhlIGBpdGVtc2AgYXJyYXksIGJlZm9yZSB0aGUgbmV4dCBwYWludCwgYW5kIHB1dHMgdGhlIGBkb20tcmVwZWF0YAogICAgICAgICAqIGludG8gImNodW5raW5nIG1vZGUiLiAgVGhlIHJlbWFpbmluZyBpdGVtcyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJlbmRlcmVkCiAgICAgICAgICogaW5jcmVtZW50YWxseSBhdCBlYWNoIGFuaW1hdGlvbiBmcmFtZSB0aGVyb2YgdW50aWwgYWxsIGluc3RhbmNlcyBoYXZlCiAgICAgICAgICogYmVlbiByZW5kZXJlZC4KICAgICAgICAgKi8KICAgICAgICBpbml0aWFsQ291bnQ6IHsKICAgICAgICAgIHR5cGU6IE51bWJlciwKICAgICAgICAgIG9ic2VydmVyOiAnX19pbml0aWFsaXplQ2h1bmtpbmcnCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogV2hlbiBgaW5pdGlhbENvdW50YCBpcyB1c2VkLCB0aGlzIHByb3BlcnR5IGRlZmluZXMgYSBmcmFtZSByYXRlIChpbgogICAgICAgICAqIGZwcykgdG8gdGFyZ2V0IGJ5IHRocm90dGxpbmcgdGhlIG51bWJlciBvZiBpbnN0YW5jZXMgcmVuZGVyZWQgZWFjaAogICAgICAgICAqIGZyYW1lIHRvIG5vdCBleGNlZWQgdGhlIGJ1ZGdldCBmb3IgdGhlIHRhcmdldCBmcmFtZSByYXRlLiAgVGhlCiAgICAgICAgICogZnJhbWVyYXRlIGlzIGVmZmVjdGl2ZWx5IHRoZSBudW1iZXIgb2YgYHJlcXVlc3RBbmltYXRpb25GcmFtZWBzIHRoYXQKICAgICAgICAgKiBpdCB0cmllcyB0byBhbGxvdyB0byBhY3R1YWxseSBmaXJlIGluIGEgZ2l2ZW4gc2Vjb25kLiBJdCBkb2VzIHRoaXMKICAgICAgICAgKiBieSBtZWFzdXJpbmcgdGhlIHRpbWUgYmV0d2VlbiBgckFGYHMgYW5kIGNvbnRpbnVvdXNseSBhZGp1c3RpbmcgdGhlCiAgICAgICAgICogbnVtYmVyIG9mIGl0ZW1zIGNyZWF0ZWQgZWFjaCBgckFGYCB0byBtYWludGFpbiB0aGUgdGFyZ2V0IGZyYW1lcmF0ZS4KICAgICAgICAgKiBTZXR0aW5nIHRoaXMgdG8gYSBoaWdoZXIgbnVtYmVyIGFsbG93cyBsb3dlciBsYXRlbmN5IGFuZCBoaWdoZXIKICAgICAgICAgKiB0aHJvdWdocHV0IGZvciBldmVudCBoYW5kbGVycyBhbmQgb3RoZXIgdGFza3MsIGJ1dCByZXN1bHRzIGluIGEKICAgICAgICAgKiBsb25nZXIgdGltZSBmb3IgdGhlIHJlbWFpbmluZyBpdGVtcyB0byBjb21wbGV0ZSByZW5kZXJpbmcuCiAgICAgICAgICovCiAgICAgICAgdGFyZ2V0RnJhbWVyYXRlOiB7CiAgICAgICAgICB0eXBlOiBOdW1iZXIsCiAgICAgICAgICB2YWx1ZTogMjAKICAgICAgICB9LAoKICAgICAgICBfdGFyZ2V0RnJhbWVUaW1lOiB7CiAgICAgICAgICB0eXBlOiBOdW1iZXIsCiAgICAgICAgICBjb21wdXRlZDogJ19fY29tcHV0ZUZyYW1lVGltZSh0YXJnZXRGcmFtZXJhdGUpJwogICAgICAgIH0KCiAgICAgIH07CgogICAgfQoKICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCkgewogICAgICByZXR1cm4gWyAnX19pdGVtc0NoYW5nZWQoaXRlbXMuKiknIF07CiAgICB9CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMuX19pbnN0YW5jZXMgPSBbXTsKICAgICAgdGhpcy5fX2xpbWl0ID0gSW5maW5pdHk7CiAgICAgIHRoaXMuX19wb29sID0gW107CiAgICAgIHRoaXMuX19yZW5kZXJEZWJvdW5jZXIgPSBudWxsOwogICAgICB0aGlzLl9faXRlbXNJZHhUb0luc3RJZHggPSB7fTsKICAgICAgdGhpcy5fX2NodW5rQ291bnQgPSBudWxsOwogICAgICB0aGlzLl9fbGFzdENodW5rVGltZSA9IG51bGw7CiAgICAgIHRoaXMuX19zb3J0Rm4gPSBudWxsOwogICAgICB0aGlzLl9fZmlsdGVyRm4gPSBudWxsOwogICAgICB0aGlzLl9fb2JzZXJ2ZVBhdGhzID0gbnVsbDsKICAgICAgdGhpcy5fX2N0b3IgPSBudWxsOwogICAgICB0aGlzLl9faXNEZXRhY2hlZCA9IHRydWU7CiAgICAgIHRoaXMudGVtcGxhdGUgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuX19pc0RldGFjaGVkID0gdHJ1ZTsKICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB0aGlzLl9fZGV0YWNoSW5zdGFuY2UoaSk7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIC8vIG9ubHkgcGVyZm9ybSBhdHRhY2htZW50IGlmIHRoZSBlbGVtZW50IHdhcyBwcmV2aW91c2x5IGRldGFjaGVkLgogICAgICBpZiAodGhpcy5fX2lzRGV0YWNoZWQpIHsKICAgICAgICB0aGlzLl9faXNEZXRhY2hlZCA9IGZhbHNlOwogICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7CiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHRoaXMuX19hdHRhY2hJbnN0YW5jZShpLCBwYXJlbnQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIF9fZW5zdXJlVGVtcGxhdGl6ZWQoKSB7CiAgICAgIC8vIFRlbXBsYXRpemluZyAoZ2VuZXJhdGluZyB0aGUgaW5zdGFuY2UgY29uc3RydWN0b3IpIG5lZWRzIHRvIHdhaXQKICAgICAgLy8gdW50aWwgcmVhZHksIHNpbmNlIHdvbid0IGhhdmUgaXRzIHRlbXBsYXRlIGNvbnRlbnQgaGFuZGVkIGJhY2sgdG8KICAgICAgLy8gaXQgdW50aWwgdGhlbgogICAgICBpZiAoIXRoaXMuX19jdG9yKSB7CiAgICAgICAgbGV0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZSA9IC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi8odGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpKTsKICAgICAgICBpZiAoIXRlbXBsYXRlKSB7CiAgICAgICAgICAvLyAvLyBXYWl0IHVudGlsIGNoaWxkTGlzdCBjaGFuZ2VzIGFuZCB0ZW1wbGF0ZSBzaG91bGQgYmUgdGhlcmUgYnkgdGhlbgogICAgICAgICAgbGV0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICBpZiAodGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpKSB7CiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgICAgIHRoaXMuX19yZW5kZXIoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvbS1yZXBlYXQgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7Y2hpbGRMaXN0OiB0cnVlfSk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIC8vIFRlbXBsYXRlIGluc3RhbmNlIHByb3BzIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gZm9yd2FyZGluZwogICAgICAgIGxldCBpbnN0YW5jZVByb3BzID0ge307CiAgICAgICAgaW5zdGFuY2VQcm9wc1t0aGlzLmFzXSA9IHRydWU7CiAgICAgICAgaW5zdGFuY2VQcm9wc1t0aGlzLmluZGV4QXNdID0gdHJ1ZTsKICAgICAgICBpbnN0YW5jZVByb3BzW3RoaXMuaXRlbXNJbmRleEFzXSA9IHRydWU7CiAgICAgICAgdGhpcy5fX2N0b3IgPSBQb2x5bWVyLlRlbXBsYXRpemUudGVtcGxhdGl6ZSh0ZW1wbGF0ZSwgdGhpcywgewogICAgICAgICAgbXV0YWJsZURhdGE6IHRoaXMubXV0YWJsZURhdGEsCiAgICAgICAgICBwYXJlbnRNb2RlbDogdHJ1ZSwKICAgICAgICAgIGluc3RhbmNlUHJvcHM6IGluc3RhbmNlUHJvcHMsCiAgICAgICAgICAvKioKICAgICAgICAgICAqIEB0aGlzIHt0aGlzfQogICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgdG8gc2V0CiAgICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldCBwcm9wZXJ0eSB0bwogICAgICAgICAgICovCiAgICAgICAgICBmb3J3YXJkSG9zdFByb3A6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKSB7CiAgICAgICAgICAgIGxldCBpJCA9IHRoaXMuX19pbnN0YW5jZXM7CiAgICAgICAgICAgIGZvciAobGV0IGk9MCwgaW5zdDsgKGk8aSQubGVuZ3RoKSAmJiAoaW5zdD1pJFtpXSk7IGkrKykgewogICAgICAgICAgICAgIGluc3QuZm9yd2FyZEhvc3RQcm9wKHByb3AsIHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIC8qKgogICAgICAgICAgICogQHRoaXMge3RoaXN9CiAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5zdCBJbnN0YW5jZSB0byBub3RpZnkKICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IHRvIG5vdGlmeQogICAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBub3RpZnkKICAgICAgICAgICAqLwogICAgICAgICAgbm90aWZ5SW5zdGFuY2VQcm9wOiBmdW5jdGlvbihpbnN0LCBwcm9wLCB2YWx1ZSkgewogICAgICAgICAgICBpZiAoUG9seW1lci5QYXRoLm1hdGNoZXModGhpcy5hcywgcHJvcCkpIHsKICAgICAgICAgICAgICBsZXQgaWR4ID0gaW5zdFt0aGlzLml0ZW1zSW5kZXhBc107CiAgICAgICAgICAgICAgaWYgKHByb3AgPT0gdGhpcy5hcykgewogICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpZHhdID0gdmFsdWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxldCBwYXRoID0gUG9seW1lci5QYXRoLnRyYW5zbGF0ZSh0aGlzLmFzLCAnaXRlbXMuJyArIGlkeCwgcHJvcCk7CiAgICAgICAgICAgICAgdGhpcy5ub3RpZnlQYXRoKHBhdGgsIHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIF9fZ2V0TWV0aG9kSG9zdCgpIHsKICAgICAgLy8gVGVjaG5pY2FsbHkgdGhpcyBzaG91bGQgYmUgdGhlIG93bmVyIG9mIHRoZSBvdXRlcm1vc3QgdGVtcGxhdGUuCiAgICAgIC8vIEluIHNoYWRvdyBkb20sIHRoaXMgaXMgYWx3YXlzIGdldFJvb3ROb2RlKCkuaG9zdCwgYnV0IHdlIGNhbgogICAgICAvLyBhcHByb3hpbWF0ZSB0aGlzIHZpYSBjb29wZXJhdGlvbiB3aXRoIG91ciBkYXRhSG9zdCBhbHdheXMgc2V0dGluZwogICAgICAvLyBgX21ldGhvZEhvc3RgIGFzIGxvbmcgYXMgdGhlcmUgd2VyZSBiaW5kaW5ncyAob3IgaWQncykgb24gdGhpcwogICAgICAvLyBpbnN0YW5jZSBjYXVzaW5nIGl0IHRvIGdldCBhIGRhdGFIb3N0LgogICAgICByZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0IHx8IHRoaXMuX19kYXRhSG9zdDsKICAgIH0KCiAgICBfX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUoZnVuY3Rpb25Pck1ldGhvZE5hbWUpIHsKICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbk9yTWV0aG9kTmFtZSA9PT0gJ3N0cmluZycpIHsKICAgICAgICBsZXQgbWV0aG9kTmFtZSA9IGZ1bmN0aW9uT3JNZXRob2ROYW1lOwogICAgICAgIGxldCBvYmogPSB0aGlzLl9fZ2V0TWV0aG9kSG9zdCgpOwogICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIG9ialttZXRob2ROYW1lXS5hcHBseShvYmosIGFyZ3VtZW50cyk7IH07CiAgICAgIH0KCiAgICAgIHJldHVybiBmdW5jdGlvbk9yTWV0aG9kTmFtZTsKICAgIH0KCiAgICBfX3NvcnRDaGFuZ2VkKHNvcnQpIHsKICAgICAgdGhpcy5fX3NvcnRGbiA9IHRoaXMuX19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHNvcnQpOwogICAgICBpZiAodGhpcy5pdGVtcykgeyB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcik7IH0KICAgIH0KCiAgICBfX2ZpbHRlckNoYW5nZWQoZmlsdGVyKSB7CiAgICAgIHRoaXMuX19maWx0ZXJGbiA9IHRoaXMuX19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKGZpbHRlcik7CiAgICAgIGlmICh0aGlzLml0ZW1zKSB7IHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKTsgfQogICAgfQoKICAgIF9fY29tcHV0ZUZyYW1lVGltZShyYXRlKSB7CiAgICAgIHJldHVybiBNYXRoLmNlaWwoMTAwMC9yYXRlKTsKICAgIH0KCiAgICBfX2luaXRpYWxpemVDaHVua2luZygpIHsKICAgICAgaWYgKHRoaXMuaW5pdGlhbENvdW50KSB7CiAgICAgICAgdGhpcy5fX2xpbWl0ID0gdGhpcy5pbml0aWFsQ291bnQ7CiAgICAgICAgdGhpcy5fX2NodW5rQ291bnQgPSB0aGlzLmluaXRpYWxDb3VudDsKICAgICAgICB0aGlzLl9fbGFzdENodW5rVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpOwogICAgICB9CiAgICB9CgogICAgX190cnlSZW5kZXJDaHVuaygpIHsKICAgICAgLy8gRGVib3VuY2VkIHNvIHRoYXQgbXVsdGlwbGUgY2FsbHMgdGhyb3VnaCBgX3JlbmRlcmAgYmV0d2VlbiBhbmltYXRpb24KICAgICAgLy8gZnJhbWVzIG9ubHkgcXVldWUgb25lIG5ldyByQUYgKGUuZy4gYXJyYXkgbXV0YXRpb24gJiBjaHVua2VkIHJlbmRlcikKICAgICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5fX2xpbWl0IDwgdGhpcy5pdGVtcy5sZW5ndGgpIHsKICAgICAgICB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlcXVlc3RSZW5kZXJDaHVuayk7CiAgICAgIH0KICAgIH0KCiAgICBfX3JlcXVlc3RSZW5kZXJDaHVuaygpIHsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fcmVuZGVyQ2h1bmsoKSk7CiAgICB9CgogICAgX19yZW5kZXJDaHVuaygpIHsKICAgICAgLy8gU2ltcGxlIGF1dG8gY2h1bmtTaXplIHRocm90dGxpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIGZlZWRiYWNrIGxvb3A6CiAgICAgIC8vIG1lYXN1cmUgYWN0dWFsIHRpbWUgYmV0d2VlbiBmcmFtZXMgYW5kIHNjYWxlIGNodW5rIGNvdW50IGJ5IHJhdGlvCiAgICAgIC8vIG9mIHRhcmdldC9hY3R1YWwgZnJhbWUgdGltZQogICAgICBsZXQgY3VyckNodW5rVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpOwogICAgICBsZXQgcmF0aW8gPSB0aGlzLl90YXJnZXRGcmFtZVRpbWUgLyAoY3VyckNodW5rVGltZSAtIHRoaXMuX19sYXN0Q2h1bmtUaW1lKTsKICAgICAgdGhpcy5fX2NodW5rQ291bnQgPSBNYXRoLnJvdW5kKHRoaXMuX19jaHVua0NvdW50ICogcmF0aW8pIHx8IDE7CiAgICAgIHRoaXMuX19saW1pdCArPSB0aGlzLl9fY2h1bmtDb3VudDsKICAgICAgdGhpcy5fX2xhc3RDaHVua1RpbWUgPSBjdXJyQ2h1bmtUaW1lOwogICAgICB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcik7CiAgICB9CgogICAgX19vYnNlcnZlQ2hhbmdlZCgpIHsKICAgICAgdGhpcy5fX29ic2VydmVQYXRocyA9IHRoaXMub2JzZXJ2ZSAmJgogICAgICAgIHRoaXMub2JzZXJ2ZS5yZXBsYWNlKCcuKicsICcuJykuc3BsaXQoJyAnKTsKICAgIH0KCiAgICBfX2l0ZW1zQ2hhbmdlZChjaGFuZ2UpIHsKICAgICAgaWYgKHRoaXMuaXRlbXMgJiYgIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykpIHsKICAgICAgICBjb25zb2xlLndhcm4oJ2RvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kJywgdGhpcy5pdGVtcyk7CiAgICAgIH0KICAgICAgLy8gSWYgcGF0aCB3YXMgdG8gYW4gaXRlbSAoZS5nLiAnaXRlbXMuMycgb3IgJ2l0ZW1zLjMuZm9vJyksIGZvcndhcmQgdGhlCiAgICAgIC8vIHBhdGggdG8gdGhhdCBpbnN0YW5jZSBzeW5jaHJvbm91c2x5IChyZXR1cm5zIGZhbHNlIGZvciBub24taXRlbSBwYXRocykKICAgICAgaWYgKCF0aGlzLl9faGFuZGxlSXRlbVBhdGgoY2hhbmdlLnBhdGgsIGNoYW5nZS52YWx1ZSkpIHsKICAgICAgICAvLyBPdGhlcndpc2UsIHRoZSBhcnJheSB3YXMgcmVzZXQgKCdpdGVtcycpIG9yIHNwbGljZWQgKCdpdGVtcy5zcGxpY2VzJyksCiAgICAgICAgLy8gc28gcXVldWUgYSBmdWxsIHJlZnJlc2gKICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZUNodW5raW5nKCk7CiAgICAgICAgdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpOwogICAgICB9CiAgICB9CgogICAgX19oYW5kbGVPYnNlcnZlZFBhdGhzKHBhdGgpIHsKICAgICAgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIHBhdGggY2hhbmdlcyBzaG91bGQgY2F1c2UgYSByZS1zb3J0L2ZpbHRlcgogICAgICBpZiAodGhpcy5fX3NvcnRGbiB8fCB0aGlzLl9fZmlsdGVyRm4pIHsKICAgICAgICBpZiAoIXBhdGgpIHsKICAgICAgICAgIC8vIEFsd2F5cyByZS1yZW5kZXIgaWYgdGhlIGl0ZW0gaXRzZWxmIGNoYW5nZWQKICAgICAgICAgIHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLCB0aGlzLmRlbGF5KTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX19vYnNlcnZlUGF0aHMpIHsKICAgICAgICAgIC8vIE90aGVyd2lzZSwgcmUtcmVuZGVyIGlmIHRoZSBwYXRoIGNoYW5nZWQgbWF0Y2hlcyBhbiBvYnNlcnZlZCBwYXRoCiAgICAgICAgICBsZXQgcGF0aHMgPSB0aGlzLl9fb2JzZXJ2ZVBhdGhzOwogICAgICAgICAgZm9yIChsZXQgaT0wOyBpPHBhdGhzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChwYXRoLmluZGV4T2YocGF0aHNbaV0pID09PSAwKSB7CiAgICAgICAgICAgICAgdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIsIHRoaXMuZGVsYXkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHRoaXM6RG9tUmVwZWF0KX0gZm4gRnVuY3Rpb24gdG8gZGVib3VuY2UuCiAgICAgKiBAcGFyYW0ge251bWJlcj19IGRlbGF5IERlbGF5IGluIG1zIHRvIGRlYm91bmNlIGJ5LgogICAgICovCiAgICBfX2RlYm91bmNlUmVuZGVyKGZuLCBkZWxheSA9IDApIHsKICAgICAgdGhpcy5fX3JlbmRlckRlYm91bmNlciA9IFBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKAogICAgICAgICAgICB0aGlzLl9fcmVuZGVyRGVib3VuY2VyCiAgICAgICAgICAsIGRlbGF5ID4gMCA/IFBvbHltZXIuQXN5bmMudGltZU91dC5hZnRlcihkZWxheSkgOiBQb2x5bWVyLkFzeW5jLm1pY3JvVGFzawogICAgICAgICAgLCBmbi5iaW5kKHRoaXMpKTsKICAgICAgUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIpOwogICAgfQoKICAgIC8qKgogICAgICogRm9yY2VzIHRoZSBlbGVtZW50IHRvIHJlbmRlciBpdHMgY29udGVudC4gTm9ybWFsbHkgcmVuZGVyaW5nIGlzCiAgICAgKiBhc3luY2hyb25vdXMgdG8gYSBwcm92b2tpbmcgY2hhbmdlLiBUaGlzIGlzIGRvbmUgZm9yIGVmZmljaWVuY3kgc28KICAgICAqIHRoYXQgbXVsdGlwbGUgY2hhbmdlcyB0cmlnZ2VyIG9ubHkgYSBzaW5nbGUgcmVuZGVyLiBUaGUgcmVuZGVyIG1ldGhvZAogICAgICogc2hvdWxkIGJlIGNhbGxlZCBpZiwgZm9yIGV4YW1wbGUsIHRlbXBsYXRlIHJlbmRlcmluZyBpcyByZXF1aXJlZCB0bwogICAgICogdmFsaWRhdGUgYXBwbGljYXRpb24gc3RhdGUuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICByZW5kZXIoKSB7CiAgICAgIC8vIFF1ZXVlIHRoaXMgcmVwZWF0ZXIsIHRoZW4gZmx1c2ggYWxsIGluIG9yZGVyCiAgICAgIHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKTsKICAgICAgUG9seW1lci5mbHVzaCgpOwogICAgfQoKICAgIF9fcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMuX19lbnN1cmVUZW1wbGF0aXplZCgpKSB7CiAgICAgICAgLy8gTm8gdGVtcGxhdGUgZm91bmQgeWV0CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuX19hcHBseUZ1bGxSZWZyZXNoKCk7CiAgICAgIC8vIFJlc2V0IHRoZSBwb29sCiAgICAgIC8vIFRPRE8oa3NjaGFhZik6IFJldXNlIHBvb2wgYWNyb3NzIHR1cm5zIGFuZCBuZXN0ZWQgdGVtcGxhdGVzCiAgICAgIC8vIE5vdyB0aGF0IG9iamVjdHMvYXJyYXlzIGFyZSByZS1ldmFsdWF0ZWQgd2hlbiBzZXQsIHdlIGNhbiBzYWZlbHkKICAgICAgLy8gcmV1c2UgcG9vbGVkIGluc3RhbmNlcyBhY3Jvc3MgdHVybnMsIGhvd2V2ZXIgd2Ugc3RpbGwgbmVlZCB0byBkZWNpZGUKICAgICAgLy8gc2VtYW50aWNzIHJlZ2FyZGluZyBob3cgbG9uZyB0byBob2xkLCBob3cgbWFueSB0byBob2xkLCBldGMuCiAgICAgIHRoaXMuX19wb29sLmxlbmd0aCA9IDA7CiAgICAgIC8vIFNldCByZW5kZXJlZCBpdGVtIGNvdW50CiAgICAgIHRoaXMuX3NldFJlbmRlcmVkSXRlbUNvdW50KHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoKTsKICAgICAgLy8gTm90aWZ5IHVzZXJzCiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RvbS1jaGFuZ2UnLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHJlbmRlciBtb3JlIGl0ZW1zCiAgICAgIHRoaXMuX190cnlSZW5kZXJDaHVuaygpOwogICAgfQoKICAgIF9fYXBwbHlGdWxsUmVmcmVzaCgpIHsKICAgICAgbGV0IGl0ZW1zID0gdGhpcy5pdGVtcyB8fCBbXTsKICAgICAgbGV0IGlzbnRJZHhUb0l0ZW1zSWR4ID0gbmV3IEFycmF5KGl0ZW1zLmxlbmd0aCk7CiAgICAgIGZvciAobGV0IGk9MDsgaTxpdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlzbnRJZHhUb0l0ZW1zSWR4W2ldID0gaTsKICAgICAgfQogICAgICAvLyBBcHBseSB1c2VyIGZpbHRlcgogICAgICBpZiAodGhpcy5fX2ZpbHRlckZuKSB7CiAgICAgICAgaXNudElkeFRvSXRlbXNJZHggPSBpc250SWR4VG9JdGVtc0lkeC5maWx0ZXIoKGksIGlkeCwgYXJyYXkpID0+CiAgICAgICAgICB0aGlzLl9fZmlsdGVyRm4oaXRlbXNbaV0sIGlkeCwgYXJyYXkpKTsKICAgICAgfQogICAgICAvLyBBcHBseSB1c2VyIHNvcnQKICAgICAgaWYgKHRoaXMuX19zb3J0Rm4pIHsKICAgICAgICBpc250SWR4VG9JdGVtc0lkeC5zb3J0KChhLCBiKSA9PiB0aGlzLl9fc29ydEZuKGl0ZW1zW2FdLCBpdGVtc1tiXSkpOwogICAgICB9CiAgICAgIC8vIGl0ZW1zLT5pbnN0IG1hcCBrZXB0IGZvciBpdGVtIHBhdGggZm9yd2FyZGluZwogICAgICBjb25zdCBpdGVtc0lkeFRvSW5zdElkeCA9IHRoaXMuX19pdGVtc0lkeFRvSW5zdElkeCA9IHt9OwogICAgICBsZXQgaW5zdElkeCA9IDA7CiAgICAgIC8vIEdlbmVyYXRlIGluc3RhbmNlcyBhbmQgYXNzaWduIGl0ZW1zCiAgICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5taW4oaXNudElkeFRvSXRlbXNJZHgubGVuZ3RoLCB0aGlzLl9fbGltaXQpOwogICAgICBmb3IgKDsgaW5zdElkeDxsaW1pdDsgaW5zdElkeCsrKSB7CiAgICAgICAgbGV0IGluc3QgPSB0aGlzLl9faW5zdGFuY2VzW2luc3RJZHhdOwogICAgICAgIGxldCBpdGVtSWR4ID0gaXNudElkeFRvSXRlbXNJZHhbaW5zdElkeF07CiAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpdGVtSWR4XTsKICAgICAgICBpdGVtc0lkeFRvSW5zdElkeFtpdGVtSWR4XSA9IGluc3RJZHg7CiAgICAgICAgaWYgKGluc3QpIHsKICAgICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLmFzLCBpdGVtKTsKICAgICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLmluZGV4QXMsIGluc3RJZHgpOwogICAgICAgICAgaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaXRlbXNJbmRleEFzLCBpdGVtSWR4KTsKICAgICAgICAgIGluc3QuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9faW5zZXJ0SW5zdGFuY2UoaXRlbSwgaW5zdElkeCwgaXRlbUlkeCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFJlbW92ZSBhbnkgZXh0cmEgaW5zdGFuY2VzIGZyb20gcHJldmlvdXMgc3RhdGUKICAgICAgZm9yIChsZXQgaT10aGlzLl9faW5zdGFuY2VzLmxlbmd0aC0xOyBpPj1pbnN0SWR4OyBpLS0pIHsKICAgICAgICB0aGlzLl9fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2UoaSk7CiAgICAgIH0KICAgIH0KCiAgICBfX2RldGFjaEluc3RhbmNlKGlkeCkgewogICAgICBsZXQgaW5zdCA9IHRoaXMuX19pbnN0YW5jZXNbaWR4XTsKICAgICAgZm9yIChsZXQgaT0wOyBpPGluc3QuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZXQgZWwgPSBpbnN0LmNoaWxkcmVuW2ldOwogICAgICAgIGluc3Qucm9vdC5hcHBlbmRDaGlsZChlbCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3Q7CiAgICB9CgogICAgX19hdHRhY2hJbnN0YW5jZShpZHgsIHBhcmVudCkgewogICAgICBsZXQgaW5zdCA9IHRoaXMuX19pbnN0YW5jZXNbaWR4XTsKICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShpbnN0LnJvb3QsIHRoaXMpOwogICAgfQoKICAgIF9fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2UoaWR4KSB7CiAgICAgIGxldCBpbnN0ID0gdGhpcy5fX2RldGFjaEluc3RhbmNlKGlkeCk7CiAgICAgIGlmIChpbnN0KSB7CiAgICAgICAgdGhpcy5fX3Bvb2wucHVzaChpbnN0KTsKICAgICAgfQogICAgICB0aGlzLl9faW5zdGFuY2VzLnNwbGljZShpZHgsIDEpOwogICAgfQoKICAgIF9fc3RhbXBJbnN0YW5jZShpdGVtLCBpbnN0SWR4LCBpdGVtSWR4KSB7CiAgICAgIGxldCBtb2RlbCA9IHt9OwogICAgICBtb2RlbFt0aGlzLmFzXSA9IGl0ZW07CiAgICAgIG1vZGVsW3RoaXMuaW5kZXhBc10gPSBpbnN0SWR4OwogICAgICBtb2RlbFt0aGlzLml0ZW1zSW5kZXhBc10gPSBpdGVtSWR4OwogICAgICByZXR1cm4gbmV3IHRoaXMuX19jdG9yKG1vZGVsKTsKICAgIH0KCiAgICBfX2luc2VydEluc3RhbmNlKGl0ZW0sIGluc3RJZHgsIGl0ZW1JZHgpIHsKICAgICAgbGV0IGluc3QgPSB0aGlzLl9fcG9vbC5wb3AoKTsKICAgICAgaWYgKGluc3QpIHsKICAgICAgICAvLyBUT0RPKGtzY2hhYWYpOiBJZiB0aGUgcG9vbCBpcyBzaGFyZWQgYWNyb3NzIHR1cm5zLCBob3N0UHJvcHMKICAgICAgICAvLyBuZWVkIHRvIGJlIHJlLXNldCB0byByZXVzZWQgaW5zdGFuY2VzIGluIGFkZGl0aW9uIHRvIGl0ZW0KICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5hcywgaXRlbSk7CiAgICAgICAgaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcywgaW5zdElkeCk7CiAgICAgICAgaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaXRlbXNJbmRleEFzLCBpdGVtSWR4KTsKICAgICAgICBpbnN0Ll9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnN0ID0gdGhpcy5fX3N0YW1wSW5zdGFuY2UoaXRlbSwgaW5zdElkeCwgaXRlbUlkeCk7CiAgICAgIH0KICAgICAgbGV0IGJlZm9yZVJvdyA9IHRoaXMuX19pbnN0YW5jZXNbaW5zdElkeCArIDFdOwogICAgICBsZXQgYmVmb3JlTm9kZSA9IGJlZm9yZVJvdyA/IGJlZm9yZVJvdy5jaGlsZHJlblswXSA6IHRoaXM7CiAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW5zdC5yb290LCBiZWZvcmVOb2RlKTsKICAgICAgdGhpcy5fX2luc3RhbmNlc1tpbnN0SWR4XSA9IGluc3Q7CiAgICAgIHJldHVybiBpbnN0OwogICAgfQoKICAgIC8vIEltcGxlbWVudHMgZXh0ZW5zaW9uIHBvaW50IGZyb20gVGVtcGxhdGl6ZSBtaXhpbgogICAgLyoqCiAgICAgKiBTaG93cyBvciBoaWRlcyB0aGUgdGVtcGxhdGUgaW5zdGFuY2UgdG9wIGxldmVsIGNoaWxkIGVsZW1lbnRzLiBGb3IKICAgICAqIHRleHQgbm9kZXMsIGB0ZXh0Q29udGVudGAgaXMgcmVtb3ZlZCB3aGlsZSAiaGlkZGVuIiBhbmQgcmVwbGFjZWQgd2hlbgogICAgICogInNob3duLiIKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGlkZGVuIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIGNoaWxkcmVuOwogICAgICogc2V0IHRvIGZhbHNlIHRvIHNob3cgdGhlbS4KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAcHJvdGVjdGVkCiAgICAgKi8KICAgIF9zaG93SGlkZUNoaWxkcmVuKGhpZGRlbikgewogICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHRoaXMuX19pbnN0YW5jZXNbaV0uX3Nob3dIaWRlQ2hpbGRyZW4oaGlkZGVuKTsKICAgICAgfQogICAgfQoKICAgIC8vIENhbGxlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIGEgaG9zdCBpdGVtcy48a2V5Pi48cGF0aD4gcGF0aCBjaGFuZ2UsCiAgICAvLyByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIGl0ZW0uPHBhdGg+IGNoYW5nZXMgdG8gaW5zdCBmb3Iga2V5CiAgICBfX2hhbmRsZUl0ZW1QYXRoKHBhdGgsIHZhbHVlKSB7CiAgICAgIGxldCBpdGVtc1BhdGggPSBwYXRoLnNsaWNlKDYpOyAvLyAnaXRlbXMuJy5sZW5ndGggPT0gNgogICAgICBsZXQgZG90ID0gaXRlbXNQYXRoLmluZGV4T2YoJy4nKTsKICAgICAgbGV0IGl0ZW1zSWR4ID0gZG90IDwgMCA/IGl0ZW1zUGF0aCA6IGl0ZW1zUGF0aC5zdWJzdHJpbmcoMCwgZG90KTsKICAgICAgLy8gSWYgcGF0aCB3YXMgaW5kZXggaW50byBhcnJheS4uLgogICAgICBpZiAoaXRlbXNJZHggPT0gcGFyc2VJbnQoaXRlbXNJZHgsIDEwKSkgewogICAgICAgIGxldCBpdGVtU3ViUGF0aCA9IGRvdCA8IDAgPyAnJyA6IGl0ZW1zUGF0aC5zdWJzdHJpbmcoZG90KzEpOwogICAgICAgIC8vIElmIHRoZSBwYXRoIGlzIG9ic2VydmVkLCBpdCB3aWxsIHRyaWdnZXIgYSBmdWxsIHJlZnJlc2gKICAgICAgICB0aGlzLl9faGFuZGxlT2JzZXJ2ZWRQYXRocyhpdGVtU3ViUGF0aCk7CiAgICAgICAgLy8gTm90ZSwgZXZlbiBpZiBhIHJ1bGwgcmVmcmVzaCBpcyB0cmlnZ2VyZWQsIGFsd2F5cyBkbyB0aGUgcGF0aAogICAgICAgIC8vIG5vdGlmaWNhdGlvbiBiZWNhdXNlIHVubGVzcyBtdXRhYmxlRGF0YSBpcyB1c2VkIGZvciBkb20tcmVwZWF0CiAgICAgICAgLy8gYW5kIGFsbCBlbGVtZW50cyBpbiB0aGUgaW5zdGFuY2Ugc3VidHJlZSwgYSBmdWxsIHJlZnJlc2ggbWF5CiAgICAgICAgLy8gbm90IHRyaWdnZXIgdGhlIHByb3BlciB1cGRhdGUuCiAgICAgICAgbGV0IGluc3RJZHggPSB0aGlzLl9faXRlbXNJZHhUb0luc3RJZHhbaXRlbXNJZHhdOwogICAgICAgIGxldCBpbnN0ID0gdGhpcy5fX2luc3RhbmNlc1tpbnN0SWR4XTsKICAgICAgICBpZiAoaW5zdCkgewogICAgICAgICAgbGV0IGl0ZW1QYXRoID0gdGhpcy5hcyArIChpdGVtU3ViUGF0aCA/ICcuJyArIGl0ZW1TdWJQYXRoIDogJycpOwogICAgICAgICAgLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBgbm90aWZ5UGF0aGAsIGJ1dCBhdm9pZHMgc29tZSBvZiB0aGUgb3ZlcmhlYWQKICAgICAgICAgIC8vIG9mIHRoZSBwdWJsaWMgQVBJCiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaXRlbVBhdGgsIHZhbHVlLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICBpbnN0Ll9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGl0ZW0gYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZWxlbWVudCBzdGFtcGVkIGJ5CiAgICAgKiB0aGlzIGBkb20tcmVwZWF0YC4KICAgICAqCiAgICAgKiBOb3RlLCB0byBtb2RpZnkgc3ViLXByb3BlcnRpZXMgb2YgdGhlIGl0ZW0sCiAgICAgKiBgbW9kZWxGb3JFbGVtZW50KGVsKS5zZXQoJ2l0ZW0uPHN1Yi1wcm9wPicsIHZhbHVlKWAKICAgICAqIHNob3VsZCBiZSB1c2VkLgogICAgICoKICAgICAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBlbCBFbGVtZW50IGZvciB3aGljaCB0byByZXR1cm4gdGhlIGl0ZW0uCiAgICAgKiBAcmV0dXJuIHsqfSBJdGVtIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudC4KICAgICAqLwogICAgaXRlbUZvckVsZW1lbnQoZWwpIHsKICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5tb2RlbEZvckVsZW1lbnQoZWwpOwogICAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2VbdGhpcy5hc107CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpbnN0IGluZGV4IGZvciBhIGdpdmVuIGVsZW1lbnQgc3RhbXBlZCBieSB0aGlzIGBkb20tcmVwZWF0YC4KICAgICAqIElmIGBzb3J0YCBpcyBwcm92aWRlZCwgdGhlIGluZGV4IHdpbGwgcmVmbGVjdCB0aGUgc29ydGVkIG9yZGVyIChyYXRoZXIKICAgICAqIHRoYW4gdGhlIG9yaWdpbmFsIGFycmF5IG9yZGVyKS4KICAgICAqCiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWwgRWxlbWVudCBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBpbmRleC4KICAgICAqIEByZXR1cm4gez9udW1iZXJ9IFJvdyBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQgKG5vdGUgdGhpcyBtYXkKICAgICAqICAgbm90IGNvcnJlc3BvbmQgdG8gdGhlIGFycmF5IGluZGV4IGlmIGEgdXNlciBgc29ydGAgaXMgYXBwbGllZCkuCiAgICAgKi8KICAgIGluZGV4Rm9yRWxlbWVudChlbCkgewogICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLm1vZGVsRm9yRWxlbWVudChlbCk7CiAgICAgIHJldHVybiBpbnN0YW5jZSAmJiBpbnN0YW5jZVt0aGlzLmluZGV4QXNdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdGVtcGxhdGUgIm1vZGVsIiBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBlbGVtZW50LCB3aGljaAogICAgICogc2VydmVzIGFzIHRoZSBiaW5kaW5nIHNjb3BlIGZvciB0aGUgdGVtcGxhdGUgaW5zdGFuY2UgdGhlIGVsZW1lbnQgaXMKICAgICAqIGNvbnRhaW5lZCBpbi4gQSB0ZW1wbGF0ZSBtb2RlbCBpcyBhbiBpbnN0YW5jZSBvZiBgUG9seW1lci5CYXNlYCwgYW5kCiAgICAgKiBzaG91bGQgYmUgdXNlZCB0byBtYW5pcHVsYXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGVtcGxhdGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiAgIGxldCBtb2RlbCA9IG1vZGVsRm9yRWxlbWVudChlbCk7CiAgICAgKiAgIGlmIChtb2RlbC5pbmRleCA8IDEwKSB7CiAgICAgKiAgICAgbW9kZWwuc2V0KCdpdGVtLmNoZWNrZWQnLCB0cnVlKTsKICAgICAqICAgfQogICAgICoKICAgICAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBlbCBFbGVtZW50IGZvciB3aGljaCB0byByZXR1cm4gYSB0ZW1wbGF0ZSBtb2RlbC4KICAgICAqIEByZXR1cm4ge1RlbXBsYXRlSW5zdGFuY2VCYXNlfSBNb2RlbCByZXByZXNlbnRpbmcgdGhlIGJpbmRpbmcgc2NvcGUgZm9yCiAgICAgKiAgIHRoZSBlbGVtZW50LgogICAgICovCiAgICBtb2RlbEZvckVsZW1lbnQoZWwpIHsKICAgICAgcmV0dXJuIFBvbHltZXIuVGVtcGxhdGl6ZS5tb2RlbEZvckVsZW1lbnQodGhpcy50ZW1wbGF0ZSwgZWwpOwogICAgfQoKICB9CgogIGN1c3RvbUVsZW1lbnRzLmRlZmluZShEb21SZXBlYXQuaXMsIERvbVJlcGVhdCk7CgogIC8qKiBAY29uc3QgKi8KICBQb2x5bWVyLkRvbVJlcGVhdCA9IERvbVJlcGVhdDsKCn0pKCk7CgoKCgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKioKICAgKiBUaGUgYDxkb20taWY+YCBlbGVtZW50IHdpbGwgc3RhbXAgYSBsaWdodC1kb20gYDx0ZW1wbGF0ZT5gIGNoaWxkIHdoZW4KICAgKiB0aGUgYGlmYCBwcm9wZXJ0eSBiZWNvbWVzIHRydXRoeSwgYW5kIHRoZSB0ZW1wbGF0ZSBjYW4gdXNlIFBvbHltZXIKICAgKiBkYXRhLWJpbmRpbmcgYW5kIGRlY2xhcmF0aXZlIGV2ZW50IGZlYXR1cmVzIHdoZW4gdXNlZCBpbiB0aGUgY29udGV4dCBvZgogICAqIGEgUG9seW1lciBlbGVtZW50J3MgdGVtcGxhdGUuCiAgICoKICAgKiBXaGVuIGBpZmAgYmVjb21lcyBmYWxzeSwgdGhlIHN0YW1wZWQgY29udGVudCBpcyBoaWRkZW4gYnV0IG5vdAogICAqIHJlbW92ZWQgZnJvbSBkb20uIFdoZW4gYGlmYCBzdWJzZXF1ZW50bHkgYmVjb21lcyB0cnV0aHkgYWdhaW4sIHRoZSBjb250ZW50CiAgICogaXMgc2ltcGx5IHJlLXNob3duLiBUaGlzIGFwcHJvYWNoIGlzIHVzZWQgZHVlIHRvIGl0cyBmYXZvcmFibGUgcGVyZm9ybWFuY2UKICAgKiBjaGFyYWN0ZXJpc3RpY3M6IHRoZSBleHBlbnNlIG9mIGNyZWF0aW5nIHRlbXBsYXRlIGNvbnRlbnQgaXMgcGFpZCBvbmx5CiAgICogb25jZSBhbmQgbGF6aWx5LgogICAqCiAgICogU2V0IHRoZSBgcmVzdGFtcGAgcHJvcGVydHkgdG8gdHJ1ZSB0byBmb3JjZSB0aGUgc3RhbXBlZCBjb250ZW50IHRvIGJlCiAgICogY3JlYXRlZCAvIGRlc3Ryb3llZCB3aGVuIHRoZSBgaWZgIGNvbmRpdGlvbiBjaGFuZ2VzLgogICAqCiAgICogQGN1c3RvbUVsZW1lbnQKICAgKiBAcG9seW1lcgogICAqIEBleHRlbmRzIFBvbHltZXIuRWxlbWVudAogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgQ3VzdG9tIGVsZW1lbnQgdGhhdCBjb25kaXRpb25hbGx5IHN0YW1wcyBhbmQgaGlkZXMgb3IgcmVtb3ZlcwogICAqICAgdGVtcGxhdGUgY29udGVudCBiYXNlZCBvbiBhIGJvb2xlYW4gZmxhZy4KICAgKi8KICBjbGFzcyBEb21JZiBleHRlbmRzIFBvbHltZXIuRWxlbWVudCB7CgogICAgLy8gTm90IG5lZWRlZCB0byBmaW5kIHRlbXBsYXRlOyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHRoZSBhbmFseXplcgogICAgLy8gY2FuIGZpbmQgdGhlIHRhZyBuYW1lIGZyb20gY3VzdG9tRWxlbWVudHMuZGVmaW5lIGNhbGwKICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZG9tLWlmJzsgfQoKICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7IHJldHVybiBudWxsOyB9CgogICAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkgewoKICAgICAgcmV0dXJuIHsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmlyZWQgd2hlbmV2ZXIgRE9NIGlzIGFkZGVkIG9yIHJlbW92ZWQvaGlkZGVuIGJ5IHRoaXMgdGVtcGxhdGUgKGJ5CiAgICAgICAgICogZGVmYXVsdCwgcmVuZGVyaW5nIG9jY3VycyBsYXppbHkpLiAgVG8gZm9yY2UgaW1tZWRpYXRlIHJlbmRlcmluZywgY2FsbAogICAgICAgICAqIGByZW5kZXJgLgogICAgICAgICAqCiAgICAgICAgICogQGV2ZW50IGRvbS1jaGFuZ2UKICAgICAgICAgKi8KCiAgICAgICAgLyoqCiAgICAgICAgICogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGlzIHRlbXBsYXRlIHNob3VsZCBzdGFtcC4KICAgICAgICAgKi8KICAgICAgICBpZjogewogICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgIG9ic2VydmVyOiAnX19kZWJvdW5jZVJlbmRlcicKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBXaGVuIHRydWUsIGVsZW1lbnRzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIERPTSBhbmQgZGlzY2FyZGVkIHdoZW4gYGlmYAogICAgICAgICAqIGJlY29tZXMgZmFsc2UgYW5kIHJlLWNyZWF0ZWQgYW5kIGFkZGVkIGJhY2sgdG8gdGhlIERPTSB3aGVuIGBpZmAKICAgICAgICAgKiBiZWNvbWVzIHRydWUuICBCeSBkZWZhdWx0LCBzdGFtcGVkIGVsZW1lbnRzIHdpbGwgYmUgaGlkZGVuIGJ1dCBsZWZ0CiAgICAgICAgICogaW4gdGhlIERPTSB3aGVuIGBpZmAgYmVjb21lcyBmYWxzZSwgd2hpY2ggaXMgZ2VuZXJhbGx5IHJlc3VsdHMKICAgICAgICAgKiBpbiBiZXR0ZXIgcGVyZm9ybWFuY2UuCiAgICAgICAgICovCiAgICAgICAgcmVzdGFtcDogewogICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgIG9ic2VydmVyOiAnX19kZWJvdW5jZVJlbmRlcicKICAgICAgICB9CgogICAgICB9OwoKICAgIH0KCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgdGhpcy5fX3JlbmRlckRlYm91bmNlciA9IG51bGw7CiAgICAgIHRoaXMuX19pbnZhbGlkUHJvcHMgPSBudWxsOwogICAgICB0aGlzLl9faW5zdGFuY2UgPSBudWxsOwogICAgICB0aGlzLl9sYXN0SWYgPSBmYWxzZTsKICAgICAgdGhpcy5fX2N0b3IgPSBudWxsOwogICAgfQoKICAgIF9fZGVib3VuY2VSZW5kZXIoKSB7CiAgICAgIC8vIFJlbmRlciBpcyBhc3luYyBmb3IgMiByZWFzb25zOgogICAgICAvLyAxLiBUbyBlbGltaW5hdGUgZG9tIGNyZWF0aW9uIHRyYXNoaW5nIGlmIHVzZXIgY29kZSB0aHJhc2hlcyBgaWZgIGluIHRoZQogICAgICAvLyAgICBzYW1lIHR1cm4uIFRoaXMgd2FzIG1vcmUgY29tbW9uIGluIDEueCB3aGVyZSBhIGNvbXBvdW5kIGNvbXB1dGVkCiAgICAgIC8vICAgIHByb3BlcnR5IGNvdWxkIHJlc3VsdCBpbiB0aGUgcmVzdWx0IGNoYW5naW5nIG11bHRpcGxlIHRpbWVzLCBidXQgaXMKICAgICAgLy8gICAgbWl0aWdhdGVkIHRvIGEgbGFyZ2UgZXh0ZW50IGJ5IGJhdGNoZWQgcHJvcGVydHkgcHJvY2Vzc2luZyBpbiAyLnguCiAgICAgIC8vIDIuIFRvIGF2b2lkIGRvdWJsZSBvYmplY3QgcHJvcGFnYXRpb24gd2hlbiBhIGJhZyBpbmNsdWRpbmcgdmFsdWVzIGJvdW5kCiAgICAgIC8vICAgIHRvIHRoZSBgaWZgIHByb3BlcnR5IGFzIHdlbGwgYXMgb25lIG9yIG1vcmUgaG9zdFByb3BzIGNvdWxkIGVucXVldWUKICAgICAgLy8gICAgdGhlIDxkb20taWY+IHRvIGZsdXNoIGJlZm9yZSB0aGUgPHRlbXBsYXRlPidzIGhvc3QgcHJvcGVydHkKICAgICAgLy8gICAgZm9yd2FyZGluZy4gSW4gdGhhdCBzY2VuYXJpbyBjcmVhdGluZyBhbiBpbnN0YW5jZSB3b3VsZCByZXN1bHQgaW4KICAgICAgLy8gICAgdGhlIGhvc3QgcHJvcHMgYmVpbmcgc2V0IG9uY2UsIGFuZCB0aGVuIHRoZSBlbnF1ZXVlZCBjaGFuZ2VzIG9uIHRoZQogICAgICAvLyAgICB0ZW1wbGF0ZSB3b3VsZCBzZXQgcHJvcGVydGllcyBhIHNlY29uZCB0aW1lLCBwb3RlbnRpYWxseSBjYXVzaW5nIGFuCiAgICAgIC8vICAgIG9iamVjdCB0byBiZSBzZXQgdG8gYW4gaW5zdGFuY2UgbW9yZSB0aGFuIG9uY2UuICBDcmVhdGluZyB0aGUKICAgICAgLy8gICAgaW5zdGFuY2UgYXN5bmMgZnJvbSBmbHVzaGluZyBkYXRhIGVuc3VyZXMgdGhpcyBkb2Vzbid0IGhhcHBlbi4gSWYKICAgICAgLy8gICAgd2Ugd2FudGVkIGEgc3luYyBvcHRpb24gaW4gdGhlIGZ1dHVyZSwgc2ltcGx5IGhhdmluZyA8ZG9tLWlmPiBmbHVzaAogICAgICAvLyAgICAob3IgY2xlYXIpIGl0cyB0ZW1wbGF0ZSdzIHBlbmRpbmcgaG9zdCBwcm9wZXJ0aWVzIGJlZm9yZSBjcmVhdGluZwogICAgICAvLyAgICB0aGUgaW5zdGFuY2Ugd291bGQgYWxzbyBhdm9pZCB0aGUgcHJvYmxlbS4KICAgICAgdGhpcy5fX3JlbmRlckRlYm91bmNlciA9IFBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKAogICAgICAgICAgICB0aGlzLl9fcmVuZGVyRGVib3VuY2VyCiAgICAgICAgICAsIFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAgICAsICgpID0+IHRoaXMuX19yZW5kZXIoKSk7CiAgICAgIFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcih0aGlzLl9fcmVuZGVyRGVib3VuY2VyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAoIXRoaXMucGFyZW50Tm9kZSB8fAogICAgICAgICAgKHRoaXMucGFyZW50Tm9kZS5ub2RlVHlwZSA9PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgJiYKICAgICAgICAgICAhdGhpcy5wYXJlbnROb2RlLmhvc3QpKSB7CiAgICAgICAgdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgaWYgKHRoaXMuaWYpIHsKICAgICAgICB0aGlzLl9fZGVib3VuY2VSZW5kZXIoKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRm9yY2VzIHRoZSBlbGVtZW50IHRvIHJlbmRlciBpdHMgY29udGVudC4gTm9ybWFsbHkgcmVuZGVyaW5nIGlzCiAgICAgKiBhc3luY2hyb25vdXMgdG8gYSBwcm92b2tpbmcgY2hhbmdlLiBUaGlzIGlzIGRvbmUgZm9yIGVmZmljaWVuY3kgc28KICAgICAqIHRoYXQgbXVsdGlwbGUgY2hhbmdlcyB0cmlnZ2VyIG9ubHkgYSBzaW5nbGUgcmVuZGVyLiBUaGUgcmVuZGVyIG1ldGhvZAogICAgICogc2hvdWxkIGJlIGNhbGxlZCBpZiwgZm9yIGV4YW1wbGUsIHRlbXBsYXRlIHJlbmRlcmluZyBpcyByZXF1aXJlZCB0bwogICAgICogdmFsaWRhdGUgYXBwbGljYXRpb24gc3RhdGUuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICByZW5kZXIoKSB7CiAgICAgIFBvbHltZXIuZmx1c2goKTsKICAgIH0KCiAgICBfX3JlbmRlcigpIHsKICAgICAgaWYgKHRoaXMuaWYpIHsKICAgICAgICBpZiAoIXRoaXMuX19lbnN1cmVJbnN0YW5jZSgpKSB7CiAgICAgICAgICAvLyBObyB0ZW1wbGF0ZSBmb3VuZCB5ZXQKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpOwogICAgICB9IGVsc2UgaWYgKHRoaXMucmVzdGFtcCkgewogICAgICAgIHRoaXMuX190ZWFyZG93bkluc3RhbmNlKCk7CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLnJlc3RhbXAgJiYgdGhpcy5fX2luc3RhbmNlKSB7CiAgICAgICAgdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmlmICE9IHRoaXMuX2xhc3RJZikgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RvbS1jaGFuZ2UnLCB7CiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgdGhpcy5fbGFzdElmID0gdGhpcy5pZjsKICAgICAgfQogICAgfQoKICAgIF9fZW5zdXJlSW5zdGFuY2UoKSB7CiAgICAgIGxldCBwYXJlbnROb2RlID0gdGhpcy5wYXJlbnROb2RlOwogICAgICAvLyBHdWFyZCBhZ2FpbnN0IGVsZW1lbnQgYmVpbmcgZGV0YWNoZWQgd2hpbGUgcmVuZGVyIHdhcyBxdWV1ZWQKICAgICAgaWYgKHBhcmVudE5vZGUpIHsKICAgICAgICBpZiAoIXRoaXMuX19jdG9yKSB7CiAgICAgICAgICBsZXQgdGVtcGxhdGUgPSAvKiogQHR5cGUge0hUTUxUZW1wbGF0ZUVsZW1lbnR9ICovKHRoaXMucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKSk7CiAgICAgICAgICBpZiAoIXRlbXBsYXRlKSB7CiAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgY2hpbGRMaXN0IGNoYW5nZXMgYW5kIHRlbXBsYXRlIHNob3VsZCBiZSB0aGVyZSBieSB0aGVuCiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpKSB7CiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgICAgICB0aGlzLl9fcmVuZGVyKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCcpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywge2NoaWxkTGlzdDogdHJ1ZX0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9fY3RvciA9IFBvbHltZXIuVGVtcGxhdGl6ZS50ZW1wbGF0aXplKHRlbXBsYXRlLCB0aGlzLCB7CiAgICAgICAgICAgIC8vIGRvbS1pZiB0ZW1wbGF0aXplciBpbnN0YW5jZXMgcmVxdWlyZSBgbXV0YWJsZTogdHJ1ZWAsIGFzCiAgICAgICAgICAgIC8vIGBfX3N5bmNIb3N0UHJvcGVydGllc2AgcmVsaWVzIG9uIHRoYXQgYmVoYXZpb3IgdG8gc3luYyBvYmplY3RzCiAgICAgICAgICAgIG11dGFibGVEYXRhOiB0cnVlLAogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgdG8gZm9yd2FyZAogICAgICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIG9mIHByb3BlcnR5CiAgICAgICAgICAgICAqIEB0aGlzIHt0aGlzfQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZm9yd2FyZEhvc3RQcm9wOiBmdW5jdGlvbihwcm9wLCB2YWx1ZSkgewogICAgICAgICAgICAgIGlmICh0aGlzLl9faW5zdGFuY2UpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmlmKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnN0YW5jZS5mb3J3YXJkSG9zdFByb3AocHJvcCwgdmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbnN0YW5jZSBidXQgYXJlIHNxdWVsY2hpbmcgaG9zdCBwcm9wZXJ0eQogICAgICAgICAgICAgICAgICAvLyBmb3J3YXJkaW5nIGR1ZSB0byBpZiBiZWluZyBmYWxzZSwgbm90ZSB0aGUgaW52YWxpZGF0ZWQKICAgICAgICAgICAgICAgICAgLy8gcHJvcGVydGllcyBzbyBgX19zeW5jSG9zdFByb3BlcnRpZXNgIGNhbiBzeW5jIHRoZW0gdGhlIG5leHQKICAgICAgICAgICAgICAgICAgLy8gdGltZSBgaWZgIGJlY29tZXMgdHJ1ZQogICAgICAgICAgICAgICAgICB0aGlzLl9faW52YWxpZFByb3BzID0gdGhpcy5fX2ludmFsaWRQcm9wcyB8fCBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICAgICAgICAgICAgICB0aGlzLl9faW52YWxpZFByb3BzW1BvbHltZXIuUGF0aC5yb290KHByb3ApXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLl9faW5zdGFuY2UpIHsKICAgICAgICAgIHRoaXMuX19pbnN0YW5jZSA9IG5ldyB0aGlzLl9fY3RvcigpOwogICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLnJvb3QsIHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCk7CiAgICAgICAgICBsZXQgYyQgPSB0aGlzLl9faW5zdGFuY2UuY2hpbGRyZW47CiAgICAgICAgICBpZiAoYyQgJiYgYyQubGVuZ3RoKSB7CiAgICAgICAgICAgIC8vIERldGVjdCBjYXNlIHdoZXJlIGRvbS1pZiB3YXMgcmUtYXR0YWNoZWQgaW4gbmV3IHBvc2l0aW9uCiAgICAgICAgICAgIGxldCBsYXN0Q2hpbGQgPSB0aGlzLnByZXZpb3VzU2libGluZzsKICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCAhPT0gYyRbYyQubGVuZ3RoLTFdKSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaT0wLCBuOyAoaTxjJC5sZW5ndGgpICYmIChuPWMkW2ldKTsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShuLCB0aGlzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgX19zeW5jSG9zdFByb3BlcnRpZXMoKSB7CiAgICAgIGxldCBwcm9wcyA9IHRoaXMuX19pbnZhbGlkUHJvcHM7CiAgICAgIGlmIChwcm9wcykgewogICAgICAgIGZvciAobGV0IHByb3AgaW4gcHJvcHMpIHsKICAgICAgICAgIHRoaXMuX19pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHByb3AsIHRoaXMuX19kYXRhSG9zdFtwcm9wXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX19pbnZhbGlkUHJvcHMgPSBudWxsOwogICAgICAgIHRoaXMuX19pbnN0YW5jZS5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgIH0KICAgIH0KCiAgICBfX3RlYXJkb3duSW5zdGFuY2UoKSB7CiAgICAgIGlmICh0aGlzLl9faW5zdGFuY2UpIHsKICAgICAgICBsZXQgYyQgPSB0aGlzLl9faW5zdGFuY2UuY2hpbGRyZW47CiAgICAgICAgaWYgKGMkICYmIGMkLmxlbmd0aCkgewogICAgICAgICAgLy8gdXNlIGZpcnN0IGNoaWxkIHBhcmVudCwgZm9yIGNhc2Ugd2hlbiBkb20taWYgbWF5IGhhdmUgYmVlbiBkZXRhY2hlZAogICAgICAgICAgbGV0IHBhcmVudCA9IGMkWzBdLnBhcmVudE5vZGU7CiAgICAgICAgICAvLyBJbnN0YW5jZSBjaGlsZHJlbiBtYXkgYmUgZGlzY29ubmVjdGVkIGZyb20gcGFyZW50cyB3aGVuIGRvbS1pZgogICAgICAgICAgLy8gZGV0YWNoZXMgaWYgYSB0cmVlIHdhcyBpbm5lckhUTUwnZWQKICAgICAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT0wLCBuOyAoaTxjJC5sZW5ndGgpICYmIChuPWMkW2ldKTsgaSsrKSB7CiAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKG4pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX19pbnN0YW5jZSA9IG51bGw7CiAgICAgICAgdGhpcy5fX2ludmFsaWRQcm9wcyA9IG51bGw7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNob3dzIG9yIGhpZGVzIHRoZSB0ZW1wbGF0ZSBpbnN0YW5jZSB0b3AgbGV2ZWwgY2hpbGQgZWxlbWVudHMuIEZvcgogICAgICogdGV4dCBub2RlcywgYHRleHRDb250ZW50YCBpcyByZW1vdmVkIHdoaWxlICJoaWRkZW4iIGFuZCByZXBsYWNlZCB3aGVuCiAgICAgKiAic2hvd24uIgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEBwcm90ZWN0ZWQKICAgICAqLwogICAgX3Nob3dIaWRlQ2hpbGRyZW4oKSB7CiAgICAgIGxldCBoaWRkZW4gPSB0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyB8fCAhdGhpcy5pZjsKICAgICAgaWYgKHRoaXMuX19pbnN0YW5jZSkgewogICAgICAgIHRoaXMuX19pbnN0YW5jZS5fc2hvd0hpZGVDaGlsZHJlbihoaWRkZW4pOwogICAgICB9CiAgICB9CgogIH0KCiAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKERvbUlmLmlzLCBEb21JZik7CgogIC8qKiBAY29uc3QgKi8KICBQb2x5bWVyLkRvbUlmID0gRG9tSWY7Cgp9KSgpOwoKCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIEVsZW1lbnQgbWl4aW4gZm9yIHJlY29yZGluZyBkeW5hbWljIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGl0ZW0gcGF0aHMgaW4gYQogICAqIG1hc3RlciBgaXRlbXNgIGFycmF5IGFuZCBhIGBzZWxlY3RlZGAgYXJyYXkgc3VjaCB0aGF0IHBhdGggY2hhbmdlcyB0byB0aGUKICAgKiBtYXN0ZXIgYXJyYXkgKGF0IHRoZSBob3N0KSBlbGVtZW50IG9yIGVsc2V3aGVyZSB2aWEgZGF0YS1iaW5kaW5nKSBhcmUKICAgKiBjb3JyZWN0bHkgcHJvcGFnYXRlZCB0byBpdGVtcyBpbiB0aGUgc2VsZWN0ZWQgYXJyYXkgYW5kIHZpY2UtdmVyc2EuCiAgICoKICAgKiBUaGUgYGl0ZW1zYCBwcm9wZXJ0eSBhY2NlcHRzIGFuIGFycmF5IG9mIHVzZXIgZGF0YSwgYW5kIHZpYSB0aGUKICAgKiBgc2VsZWN0KGl0ZW0pYCBhbmQgYGRlc2VsZWN0KGl0ZW0pYCBBUEksIHVwZGF0ZXMgdGhlIGBzZWxlY3RlZGAgcHJvcGVydHkKICAgKiB3aGljaCBtYXkgYmUgYm91bmQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGFwcGxpY2F0aW9uLCBhbmQgYW55IGNoYW5nZXMgdG8KICAgKiBzdWItZmllbGRzIG9mIGBzZWxlY3RlZGAgaXRlbShzKSB3aWxsIGJlIGtlcHQgaW4gc3luYyB3aXRoIGl0ZW1zIGluIHRoZQogICAqIGBpdGVtc2AgYXJyYXkuICBXaGVuIGBtdWx0aWAgaXMgZmFsc2UsIGBzZWxlY3RlZGAgaXMgYSBwcm9wZXJ0eQogICAqIHJlcHJlc2VudGluZyB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLiAgV2hlbiBgbXVsdGlgIGlzIHRydWUsIGBzZWxlY3RlZGAKICAgKiBpcyBhbiBhcnJheSBvZiBtdWx0aXBseSBzZWxlY3RlZCBpdGVtcy4KICAgKgogICAqIEBwb2x5bWVyCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuRWxlbWVudE1peGluCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IG1peGluIGZvciByZWNvcmRpbmcgZHluYW1pYyBhc3NvY2lhdGlvbnMgYmV0d2VlbiBpdGVtIHBhdGhzIGluIGEKICAgKiBtYXN0ZXIgYGl0ZW1zYCBhcnJheSBhbmQgYSBgc2VsZWN0ZWRgIGFycmF5CiAgICovCiAgbGV0IEFycmF5U2VsZWN0b3JNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9FbGVtZW50TWl4aW59CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBsZXQgZWxlbWVudEJhc2UgPSBQb2x5bWVyLkVsZW1lbnRNaXhpbihzdXBlckNsYXNzKTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfQXJyYXlTZWxlY3Rvck1peGlufQogICAgICogQHVucmVzdHJpY3RlZAogICAgICovCiAgICBjbGFzcyBBcnJheVNlbGVjdG9yTWl4aW4gZXh0ZW5kcyBlbGVtZW50QmFzZSB7CgogICAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CgogICAgICAgIHJldHVybiB7CgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIGl0ZW1zIGZyb20gd2hpY2ggc2VsZWN0aW9uIHdpbGwgYmUgbWFkZS4KICAgICAgICAgICAqLwogICAgICAgICAgaXRlbXM6IHsKICAgICAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgICB9LAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogV2hlbiBgdHJ1ZWAsIG11bHRpcGxlIGl0ZW1zIG1heSBiZSBzZWxlY3RlZCBhdCBvbmNlIChpbiB0aGlzIGNhc2UsCiAgICAgICAgICAgKiBgc2VsZWN0ZWRgIGlzIGFuIGFycmF5IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcykuICBXaGVuIGBmYWxzZWAsCiAgICAgICAgICAgKiBvbmx5IG9uZSBpdGVtIG1heSBiZSBzZWxlY3RlZCBhdCBhIHRpbWUuCiAgICAgICAgICAgKi8KICAgICAgICAgIG11bHRpOiB7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSwKICAgICAgICAgIH0sCgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBXaGVuIGBtdWx0aWAgaXMgdHJ1ZSwgdGhpcyBpcyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFueSBzZWxlY3RlZC4KICAgICAgICAgICAqIFdoZW4gYG11bHRpYCBpcyBmYWxzZSwgdGhpcyBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0sIG9yIGBudWxsYAogICAgICAgICAgICogaWYgbm8gaXRlbSBpcyBzZWxlY3RlZC4KICAgICAgICAgICAqIEB0eXBlIHs/KE9iamVjdHxBcnJheTwhT2JqZWN0Pil9CiAgICAgICAgICAgKi8KICAgICAgICAgIHNlbGVjdGVkOiB7CiAgICAgICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICAgICAgbm90aWZ5OiB0cnVlCiAgICAgICAgICB9LAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogV2hlbiBgbXVsdGlgIGlzIGZhbHNlLCB0aGlzIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSwgb3IgYG51bGxgCiAgICAgICAgICAgKiBpZiBubyBpdGVtIGlzIHNlbGVjdGVkLgogICAgICAgICAgICogQHR5cGUgez9PYmplY3R9CiAgICAgICAgICAgKi8KICAgICAgICAgIHNlbGVjdGVkSXRlbTogewogICAgICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgICAgIG5vdGlmeTogdHJ1ZQogICAgICAgICAgfSwKCiAgICAgICAgICAvKioKICAgICAgICAgICAqIFdoZW4gYHRydWVgLCBjYWxsaW5nIGBzZWxlY3RgIG9uIGFuIGl0ZW0gdGhhdCBpcyBhbHJlYWR5IHNlbGVjdGVkCiAgICAgICAgICAgKiB3aWxsIGRlc2VsZWN0IHRoZSBpdGVtLgogICAgICAgICAgICovCiAgICAgICAgICB0b2dnbGU6IHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgICAgdmFsdWU6IGZhbHNlCiAgICAgICAgICB9CgogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCkgewogICAgICAgIHJldHVybiBbJ19fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSddOwogICAgICB9CgogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIHRoaXMuX19sYXN0SXRlbXMgPSBudWxsOwogICAgICAgIHRoaXMuX19sYXN0TXVsdGkgPSBudWxsOwogICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtc0luZm8pIHsKICAgICAgICBsZXQgcGF0aCA9IGl0ZW1zSW5mby5wYXRoOwogICAgICAgIGlmIChwYXRoID09ICdpdGVtcycpIHsKICAgICAgICAgIC8vIENhc2UgMSAtIGl0ZW1zIGFycmF5IGNoYW5nZWQsIHNvIGRpZmYgYWdhaW5zdCBwcmV2aW91cyBhcnJheSBhbmQKICAgICAgICAgIC8vIGRlc2VsZWN0IGFueSByZW1vdmVkIGl0ZW1zIGFuZCBhZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcwogICAgICAgICAgbGV0IG5ld0l0ZW1zID0gaXRlbXNJbmZvLmJhc2UgfHwgW107CiAgICAgICAgICBsZXQgbGFzdEl0ZW1zID0gdGhpcy5fX2xhc3RJdGVtczsKICAgICAgICAgIGxldCBsYXN0TXVsdGkgPSB0aGlzLl9fbGFzdE11bHRpOwogICAgICAgICAgaWYgKG11bHRpICE9PSBsYXN0TXVsdGkpIHsKICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxhc3RJdGVtcykgewogICAgICAgICAgICBsZXQgc3BsaWNlcyA9IFBvbHltZXIuQXJyYXlTcGxpY2UuY2FsY3VsYXRlU3BsaWNlcyhuZXdJdGVtcywgbGFzdEl0ZW1zKTsKICAgICAgICAgICAgdGhpcy5fX2FwcGx5U3BsaWNlcyhzcGxpY2VzKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX19sYXN0SXRlbXMgPSBuZXdJdGVtczsKICAgICAgICAgIHRoaXMuX19sYXN0TXVsdGkgPSBtdWx0aTsKICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zSW5mby5wYXRoID09ICdpdGVtcy5zcGxpY2VzJykgewogICAgICAgICAgLy8gQ2FzZSAyIC0gZ290IHNwZWNpZmljIHNwbGljZSBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBhcnJheSBtdXRhdGlvbjoKICAgICAgICAgIC8vIGRlc2VsZWN0IGFueSByZW1vdmVkIGl0ZW1zIGFuZCBhZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcwogICAgICAgICAgdGhpcy5fX2FwcGx5U3BsaWNlcyhpdGVtc0luZm8udmFsdWUuaW5kZXhTcGxpY2VzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gQ2FzZSAzIC0gYW4gYXJyYXkgZWxlbWVudCB3YXMgY2hhbmdlZCwgc28gZGVzZWxlY3QgdGhlIHByZXZpb3VzCiAgICAgICAgICAvLyBpdGVtIGZvciB0aGF0IGluZGV4IGlmIGl0IHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgICBsZXQgcGFydCA9IHBhdGguc2xpY2UoJ2l0ZW1zLicubGVuZ3RoKTsKICAgICAgICAgIGxldCBpZHggPSBwYXJzZUludChwYXJ0LCAxMCk7CiAgICAgICAgICBpZiAoKHBhcnQuaW5kZXhPZignLicpIDwgMCkgJiYgcGFydCA9PSBpZHgpIHsKICAgICAgICAgICAgdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChpZHgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgX19hcHBseVNwbGljZXMoc3BsaWNlcykgewogICAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMuX19zZWxlY3RlZE1hcDsKICAgICAgICAvLyBBZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcyBhbmQgbWFyayByZW1vdmFscwogICAgICAgIGZvciAobGV0IGk9MDsgaTxzcGxpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgcyA9IHNwbGljZXNbaV07CiAgICAgICAgICBzZWxlY3RlZC5mb3JFYWNoKChpZHgsIGl0ZW0pID0+IHsKICAgICAgICAgICAgaWYgKGlkeCA8IHMuaW5kZXgpIHsKICAgICAgICAgICAgICAvLyBubyBjaGFuZ2UKICAgICAgICAgICAgfSBlbHNlIGlmIChpZHggPj0gcy5pbmRleCArIHMucmVtb3ZlZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAvLyBhZGp1c3QgaW5kZXgKICAgICAgICAgICAgICBzZWxlY3RlZC5zZXQoaXRlbSwgaWR4ICsgcy5hZGRlZENvdW50IC0gcy5yZW1vdmVkLmxlbmd0aCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gcmVtb3ZlIGluZGV4CiAgICAgICAgICAgICAgc2VsZWN0ZWQuc2V0KGl0ZW0sIC0xKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8cy5hZGRlZENvdW50OyBqKyspIHsKICAgICAgICAgICAgbGV0IGlkeCA9IHMuaW5kZXggKyBqOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWQuaGFzKHRoaXMuaXRlbXNbaWR4XSkpIHsKICAgICAgICAgICAgICBzZWxlY3RlZC5zZXQodGhpcy5pdGVtc1tpZHhdLCBpZHgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgcGF0aHMKICAgICAgICB0aGlzLl9fdXBkYXRlTGlua3MoKTsKICAgICAgICAvLyBSZW1vdmUgc2VsZWN0ZWQgaXRlbXMgdGhhdCB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgaXRlbXMgYXJyYXkKICAgICAgICBsZXQgc2lkeCA9IDA7CiAgICAgICAgc2VsZWN0ZWQuZm9yRWFjaCgoaWR4LCBpdGVtKSA9PiB7CiAgICAgICAgICBpZiAoaWR4IDwgMCkgewogICAgICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgICAgIHRoaXMuc3BsaWNlKCdzZWxlY3RlZCcsIHNpZHgsIDEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VsZWN0ZWQuZGVsZXRlKGl0ZW0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2lkeCsrOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICBfX3VwZGF0ZUxpbmtzKCkgewogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHMgPSB7fTsKICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgbGV0IHNpZHggPSAwOwogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaWR4ID0+IHsKICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7CiAgICAgICAgICAgICAgdGhpcy5saW5rUGF0aHMoJ2l0ZW1zLicgKyBpZHgsICdzZWxlY3RlZC4nICsgc2lkeCsrKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKGlkeCA9PiB7CiAgICAgICAgICAgIHRoaXMubGlua1BhdGhzKCdzZWxlY3RlZCcsICdpdGVtcy4nICsgaWR4KTsKICAgICAgICAgICAgdGhpcy5saW5rUGF0aHMoJ3NlbGVjdGVkSXRlbScsICdpdGVtcy4nICsgaWR4KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENsZWFycyB0aGUgc2VsZWN0aW9uIHN0YXRlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2xlYXJTZWxlY3Rpb24oKSB7CiAgICAgICAgLy8gVW5iaW5kIHByZXZpb3VzIHNlbGVjdGlvbgogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHMgPSB7fTsKICAgICAgICAvLyBUaGUgc2VsZWN0ZWQgbWFwIHN0b3JlcyAzIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKICAgICAgICAvLyBrZXk6IGl0ZW1zIGFycmF5IG9iamVjdAogICAgICAgIC8vIHZhbHVlOiBpdGVtcyBhcnJheSBpbmRleAogICAgICAgIC8vIG9yZGVyOiBzZWxlY3RlZCBhcnJheSBpbmRleAogICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvbgogICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLm11bHRpID8gW10gOiBudWxsOwogICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaXRlbSBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byB0ZXN0CiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQKICAgICAgICovCiAgICAgIGlzU2VsZWN0ZWQoaXRlbSkgewogICAgICAgIHJldHVybiB0aGlzLl9fc2VsZWN0ZWRNYXAuaGFzKGl0ZW0pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpdGVtIGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeCBJbmRleCBmcm9tIGBpdGVtc2AgYXJyYXkgdG8gdGVzdAogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBpdGVtIGlzIHNlbGVjdGVkCiAgICAgICAqLwogICAgICBpc0luZGV4U2VsZWN0ZWQoaWR4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2lkeF0pOwogICAgICB9CgogICAgICBfX2Rlc2VsZWN0Q2hhbmdlZElkeChpZHgpIHsKICAgICAgICBsZXQgc2lkeCA9IHRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGlkeCk7CiAgICAgICAgaWYgKHNpZHggPj0gMCkgewogICAgICAgICAgbGV0IGkgPSAwOwogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goKGlkeCwgaXRlbSkgPT4gewogICAgICAgICAgICBpZiAoc2lkeCA9PSBpKyspIHsKICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0KGl0ZW0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIF9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpZHgpIHsKICAgICAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzWydpdGVtcy4nICsgaWR4XTsKICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUludChzZWxlY3RlZC5zbGljZSgnc2VsZWN0ZWQuJy5sZW5ndGgpLCAxMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRGVzZWxlY3RzIHRoZSBnaXZlbiBpdGVtIGlmIGl0IGlzIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byBkZXNlbGVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgZGVzZWxlY3QoaXRlbSkgewogICAgICAgIGxldCBpZHggPSB0aGlzLl9fc2VsZWN0ZWRNYXAuZ2V0KGl0ZW0pOwogICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpdGVtKTsKICAgICAgICAgIGxldCBzaWR4OwogICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgc2lkeCA9IHRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGlkeCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9fdXBkYXRlTGlua3MoKTsKICAgICAgICAgIGlmICh0aGlzLm11bHRpKSB7CiAgICAgICAgICAgIHRoaXMuc3BsaWNlKCdzZWxlY3RlZCcsIHNpZHgsIDEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBEZXNlbGVjdHMgdGhlIGdpdmVuIGluZGV4IGlmIGl0IGlzIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHggSW5kZXggZnJvbSBgaXRlbXNgIGFycmF5IHRvIGRlc2VsZWN0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBkZXNlbGVjdEluZGV4KGlkeCkgewogICAgICAgIHRoaXMuZGVzZWxlY3QodGhpcy5pdGVtc1tpZHhdKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNlbGVjdHMgdGhlIGdpdmVuIGl0ZW0uICBXaGVuIGB0b2dnbGVgIGlzIHRydWUsIHRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5CiAgICAgICAqIGRlc2VsZWN0IHRoZSBpdGVtIGlmIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byBzZWxlY3QKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHNlbGVjdChpdGVtKSB7CiAgICAgICAgdGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaXRlbSkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZWN0cyB0aGUgZ2l2ZW4gaW5kZXguICBXaGVuIGB0b2dnbGVgIGlzIHRydWUsIHRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5CiAgICAgICAqIGRlc2VsZWN0IHRoZSBpdGVtIGlmIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHggSW5kZXggZnJvbSBgaXRlbXNgIGFycmF5IHRvIHNlbGVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc2VsZWN0SW5kZXgoaWR4KSB7CiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLml0ZW1zW2lkeF07CiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWQoaXRlbSkpIHsKICAgICAgICAgIGlmICghdGhpcy5tdWx0aSkgewogICAgICAgICAgICB0aGlzLl9fc2VsZWN0ZWRNYXAuY2xlYXIoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcC5zZXQoaXRlbSwgaWR4KTsKICAgICAgICAgIHRoaXMuX191cGRhdGVMaW5rcygpOwogICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgdGhpcy5wdXNoKCdzZWxlY3RlZCcsIGl0ZW0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9nZ2xlKSB7CiAgICAgICAgICB0aGlzLmRlc2VsZWN0SW5kZXgoaWR4KTsKICAgICAgICB9CiAgICAgIH0KCiAgICB9CgogICAgcmV0dXJuIEFycmF5U2VsZWN0b3JNaXhpbjsKCiAgfSk7CgogIC8vIGV4cG9ydCBtaXhpbgogIFBvbHltZXIuQXJyYXlTZWxlY3Rvck1peGluID0gQXJyYXlTZWxlY3Rvck1peGluOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IKICAgKiBAZXh0ZW5kcyB7UG9seW1lci5FbGVtZW50fQogICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0FycmF5U2VsZWN0b3JNaXhpbn0KICAgKiBAcHJpdmF0ZQogICAqLwogIGxldCBiYXNlQXJyYXlTZWxlY3RvciA9IEFycmF5U2VsZWN0b3JNaXhpbihQb2x5bWVyLkVsZW1lbnQpOwoKICAvKioKICAgKiBFbGVtZW50IGltcGxlbWVudGluZyB0aGUgYFBvbHltZXIuQXJyYXlTZWxlY3RvcmAgbWl4aW4sIHdoaWNoIHJlY29yZHMKICAgKiBkeW5hbWljIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGl0ZW0gcGF0aHMgaW4gYSBtYXN0ZXIgYGl0ZW1zYCBhcnJheSBhbmQgYQogICAqIGBzZWxlY3RlZGAgYXJyYXkgc3VjaCB0aGF0IHBhdGggY2hhbmdlcyB0byB0aGUgbWFzdGVyIGFycmF5IChhdCB0aGUgaG9zdCkKICAgKiBlbGVtZW50IG9yIGVsc2V3aGVyZSB2aWEgZGF0YS1iaW5kaW5nKSBhcmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQgdG8gaXRlbXMKICAgKiBpbiB0aGUgc2VsZWN0ZWQgYXJyYXkgYW5kIHZpY2UtdmVyc2EuCiAgICoKICAgKiBUaGUgYGl0ZW1zYCBwcm9wZXJ0eSBhY2NlcHRzIGFuIGFycmF5IG9mIHVzZXIgZGF0YSwgYW5kIHZpYSB0aGUKICAgKiBgc2VsZWN0KGl0ZW0pYCBhbmQgYGRlc2VsZWN0KGl0ZW0pYCBBUEksIHVwZGF0ZXMgdGhlIGBzZWxlY3RlZGAgcHJvcGVydHkKICAgKiB3aGljaCBtYXkgYmUgYm91bmQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGFwcGxpY2F0aW9uLCBhbmQgYW55IGNoYW5nZXMgdG8KICAgKiBzdWItZmllbGRzIG9mIGBzZWxlY3RlZGAgaXRlbShzKSB3aWxsIGJlIGtlcHQgaW4gc3luYyB3aXRoIGl0ZW1zIGluIHRoZQogICAqIGBpdGVtc2AgYXJyYXkuICBXaGVuIGBtdWx0aWAgaXMgZmFsc2UsIGBzZWxlY3RlZGAgaXMgYSBwcm9wZXJ0eQogICAqIHJlcHJlc2VudGluZyB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLiAgV2hlbiBgbXVsdGlgIGlzIHRydWUsIGBzZWxlY3RlZGAKICAgKiBpcyBhbiBhcnJheSBvZiBtdWx0aXBseSBzZWxlY3RlZCBpdGVtcy4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGBodG1sCiAgICogPGRvbS1tb2R1bGUgaWQ9ImVtcGxveWVlLWxpc3QiPgogICAqCiAgICogICA8dGVtcGxhdGU+CiAgICoKICAgKiAgICAgPGRpdj4gRW1wbG95ZWUgbGlzdDogPC9kaXY+CiAgICogICAgIDxkb20tcmVwZWF0IGlkPSJlbXBsb3llZUxpc3QiIGl0ZW1zPSJ7e2VtcGxveWVlc319Ij4KICAgKiAgICAgICA8dGVtcGxhdGU+CiAgICogICAgICAgICA8ZGl2PkZpcnN0IG5hbWU6IDxzcGFuPnt7aXRlbS5maXJzdH19PC9zcGFuPjwvZGl2PgogICAqICAgICAgICAgICA8ZGl2Pkxhc3QgbmFtZTogPHNwYW4+e3tpdGVtLmxhc3R9fTwvc3Bhbj48L2Rpdj4KICAgKiAgICAgICAgICAgPGJ1dHRvbiBvbi1jbGljaz0idG9nZ2xlU2VsZWN0aW9uIj5TZWxlY3Q8L2J1dHRvbj4KICAgKiAgICAgICA8L3RlbXBsYXRlPgogICAqICAgICA8L2RvbS1yZXBlYXQ+CiAgICoKICAgKiAgICAgPGFycmF5LXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgaXRlbXM9Int7ZW1wbG95ZWVzfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkfX0iIG11bHRpIHRvZ2dsZT48L2FycmF5LXNlbGVjdG9yPgogICAqCiAgICogICAgIDxkaXY+IFNlbGVjdGVkIGVtcGxveWVlczogPC9kaXY+CiAgICogICAgIDxkb20tcmVwZWF0IGl0ZW1zPSJ7e3NlbGVjdGVkfX0iPgogICAqICAgICAgIDx0ZW1wbGF0ZT4KICAgKiAgICAgICAgIDxkaXY+Rmlyc3QgbmFtZTogPHNwYW4+e3tpdGVtLmZpcnN0fX08L3NwYW4+PC9kaXY+CiAgICogICAgICAgICA8ZGl2Pkxhc3QgbmFtZTogPHNwYW4+e3tpdGVtLmxhc3R9fTwvc3Bhbj48L2Rpdj4KICAgKiAgICAgICA8L3RlbXBsYXRlPgogICAqICAgICA8L2RvbS1yZXBlYXQ+CiAgICoKICAgKiAgIDwvdGVtcGxhdGU+CiAgICoKICAgKiA8L2RvbS1tb2R1bGU+CiAgICogYGBgCiAgICoKICAgKiBgYGBqcwogICAqY2xhc3MgRW1wbG95ZWVMaXN0IGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHsKICAgKiAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdlbXBsb3llZS1saXN0JzsgfQogICAqICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICogICAgcmV0dXJuIHsKICAgKiAgICAgIGVtcGxveWVlczogewogICAqICAgICAgICB2YWx1ZSgpIHsKICAgKiAgICAgICAgICByZXR1cm4gWwogICAqICAgICAgICAgICAge2ZpcnN0OiAnQm9iJywgbGFzdDogJ1NtaXRoJ30sCiAgICogICAgICAgICAgICB7Zmlyc3Q6ICdTYWxseScsIGxhc3Q6ICdKb2huc29uJ30sCiAgICogICAgICAgICAgICAuLi4KICAgKiAgICAgICAgICBdOwogICAqICAgICAgICB9CiAgICogICAgICB9CiAgICogICAgfTsKICAgKiAgfQogICAqICB0b2dnbGVTZWxlY3Rpb24oZSkgewogICAqICAgIGxldCBpdGVtID0gdGhpcy4kLmVtcGxveWVlTGlzdC5pdGVtRm9yRWxlbWVudChlLnRhcmdldCk7CiAgICogICAgdGhpcy4kLnNlbGVjdG9yLnNlbGVjdChpdGVtKTsKICAgKiAgfQogICAqfQogICAqIGBgYAogICAqCiAgICogQHBvbHltZXIKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBleHRlbmRzIHtiYXNlQXJyYXlTZWxlY3Rvcn0KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuQXJyYXlTZWxlY3Rvck1peGluCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0aGF0IGxpbmtzIHBhdGhzIGJldHdlZW4gYW4gaW5wdXQgYGl0ZW1zYCBhcnJheSBhbmQKICAgKiAgIGFuIG91dHB1dCBgc2VsZWN0ZWRgIGl0ZW0gb3IgYXJyYXkgYmFzZWQgb24gY2FsbHMgdG8gaXRzIHNlbGVjdGlvbiBBUEkuCiAgICovCiAgY2xhc3MgQXJyYXlTZWxlY3RvciBleHRlbmRzIGJhc2VBcnJheVNlbGVjdG9yIHsKICAgIC8vIE5vdCBuZWVkZWQgdG8gZmluZCB0ZW1wbGF0ZTsgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGUgYW5hbHl6ZXIKICAgIC8vIGNhbiBmaW5kIHRoZSB0YWcgbmFtZSBmcm9tIGN1c3RvbUVsZW1lbnRzLmRlZmluZSBjYWxsCiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2FycmF5LXNlbGVjdG9yJzsgfQogIH0KICBjdXN0b21FbGVtZW50cy5kZWZpbmUoQXJyYXlTZWxlY3Rvci5pcywgQXJyYXlTZWxlY3Rvcik7CgogIC8qKiBAY29uc3QgKi8KICBQb2x5bWVyLkFycmF5U2VsZWN0b3IgPSBBcnJheVNlbGVjdG9yOwoKfSkoKTsKCgooZnVuY3Rpb24oKXsvKgoKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KJ3VzZSBzdHJpY3QnO3ZhciBjPW51bGwsZj13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsZztmdW5jdGlvbiBoKGEpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2Y/ZihhKTooY3x8KGM9bmV3IFByb21pc2UoZnVuY3Rpb24oYSl7Zz1hfSksImNvbXBsZXRlIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/ZygpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGZ1bmN0aW9uKCl7ImNvbXBsZXRlIj09PWRvY3VtZW50LnJlYWR5U3RhdGUmJmcoKX0pKSxjLnRoZW4oZnVuY3Rpb24oKXthJiZhKCl9KSl9KX07dmFyIGs9bnVsbCxsPW51bGw7ZnVuY3Rpb24gbSgpe3RoaXMuY3VzdG9tU3R5bGVzPVtdO3RoaXMuZW5xdWV1ZWQ9ITE7aChmdW5jdGlvbigpe3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1mdW5jdGlvbiBuKGEpeyFhLmVucXVldWVkJiZsJiYoYS5lbnF1ZXVlZD0hMCxoKGwpKX1tLnByb3RvdHlwZS5jPWZ1bmN0aW9uKGEpe2EuX19zZWVuQnlTaGFkeUNTU3x8KGEuX19zZWVuQnlTaGFkeUNTUz0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKGEpLG4odGhpcykpfTttLnByb3RvdHlwZS5iPWZ1bmN0aW9uKGEpe2lmKGEuX19zaGFkeUNTU0NhY2hlZFN0eWxlKXJldHVybiBhLl9fc2hhZHlDU1NDYWNoZWRTdHlsZTt2YXIgYjthLmdldFN0eWxlP2I9YS5nZXRTdHlsZSgpOmI9YTtyZXR1cm4gYn07Cm0ucHJvdG90eXBlLmE9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5jdXN0b21TdHlsZXMsYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgZD1hW2JdO2lmKCFkLl9fc2hhZHlDU1NDYWNoZWRTdHlsZSl7dmFyIGU9dGhpcy5iKGQpO2UmJihlPWUuX19hcHBsaWVkRWxlbWVudHx8ZSxrJiZrKGUpLGQuX19zaGFkeUNTU0NhY2hlZFN0eWxlPWUpfX1yZXR1cm4gYX07bS5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9bS5wcm90b3R5cGUuYzttLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPW0ucHJvdG90eXBlLmI7bS5wcm90b3R5cGUucHJvY2Vzc1N0eWxlcz1tLnByb3RvdHlwZS5hOwpPYmplY3QuZGVmaW5lUHJvcGVydGllcyhtLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBrfSxzZXQ6ZnVuY3Rpb24oYSl7az1hfX0sdmFsaWRhdGVDYWxsYmFjazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHNldDpmdW5jdGlvbihhKXt2YXIgYj0hMTtsfHwoYj0hMCk7bD1hO2ImJm4odGhpcyl9fX0pO2Z1bmN0aW9uIHAoYSxiKXtmb3IodmFyIGQgaW4gYiludWxsPT09ZD9hLnN0eWxlLnJlbW92ZVByb3BlcnR5KGQpOmEuc3R5bGUuc2V0UHJvcGVydHkoZCxiW2RdKX07dmFyIHE9ISh3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSkscjtmdW5jdGlvbiB0KGEpe3I9YSYmYS5zaGltY3NzcHJvcGVydGllcz8hMTpxfHwhKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC82MDF8RWRnZVwvMTUvKXx8IXdpbmRvdy5DU1N8fCFDU1Muc3VwcG9ydHN8fCFDU1Muc3VwcG9ydHMoImJveC1zaGFkb3ciLCIwIDAgMCB2YXIoLS1mb28pIikpfXZhciB1O3dpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkJiYodT13aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQpO3ZhciB2PSEoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7CndpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcz9yPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyh0KHdpbmRvdy5TaGFkeUNTUyksd2luZG93LlNoYWR5Q1NTPXZvaWQgMCk6dCh3aW5kb3cuV2ViQ29tcG9uZW50cyYmd2luZG93LldlYkNvbXBvbmVudHMuZmxhZ3MpO3ZhciB3PXIseD11O3ZhciB5PW5ldyBtO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlOmZ1bmN0aW9uKCl7fSxwcmVwYXJlVGVtcGxhdGVEb206ZnVuY3Rpb24oKXt9LHByZXBhcmVUZW1wbGF0ZVN0eWxlczpmdW5jdGlvbigpe30sc3R5bGVTdWJ0cmVlOmZ1bmN0aW9uKGEsYil7eS5hKCk7cChhLGIpfSxzdHlsZUVsZW1lbnQ6ZnVuY3Rpb24oKXt5LmEoKX0sc3R5bGVEb2N1bWVudDpmdW5jdGlvbihhKXt5LmEoKTtwKGRvY3VtZW50LmJvZHksYSl9LGdldENvbXB1dGVkU3R5bGVWYWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybihhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoYikpP2EudHJpbSgpOiIifSxmbHVzaEN1c3RvbVN0eWxlczpmdW5jdGlvbigpe30sbmF0aXZlQ3NzOncsbmF0aXZlU2hhZG93OnEsY3NzQnVpbGQ6eCxkaXNhYmxlUnVudGltZTp2fSk7d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPXk7fSkuY2FsbCh0aGlzKTsKCgoKCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGNvbnN0IGF0dHIgPSAnaW5jbHVkZSc7CgogIGNvbnN0IEN1c3RvbVN0eWxlSW50ZXJmYWNlID0gd2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlOwoKICAvKioKICAgKiBDdXN0b20gZWxlbWVudCBmb3IgZGVmaW5pbmcgc3R5bGVzIGluIHRoZSBtYWluIGRvY3VtZW50IHRoYXQgY2FuIHRha2UKICAgKiBhZHZhbnRhZ2Ugb2YgW3NoYWR5IERPTV0oaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MpIHNoaW1zCiAgICogZm9yIHN0eWxlIGVuY2Fwc3VsYXRpb24sIGN1c3RvbSBwcm9wZXJ0aWVzLCBhbmQgY3VzdG9tIG1peGlucy4KICAgKgogICAqIC0gRG9jdW1lbnQgc3R5bGVzIGRlZmluZWQgaW4gYSBgPGN1c3RvbS1zdHlsZT5gIGFyZSBzaGltbWVkIHRvIGVuc3VyZSB0aGV5CiAgICogICBkbyBub3QgbGVhayBpbnRvIGxvY2FsIERPTSB3aGVuIHJ1bm5pbmcgb24gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUKICAgKiAgIFNoYWRvdyBET00uCiAgICogLSBDdXN0b20gcHJvcGVydGllcyBjYW4gYmUgZGVmaW5lZCBpbiBhIGA8Y3VzdG9tLXN0eWxlPmAuIFVzZSB0aGUgYGh0bWxgIHNlbGVjdG9yCiAgICogICB0byBkZWZpbmUgY3VzdG9tIHByb3BlcnRpZXMgdGhhdCBhcHBseSB0byBhbGwgY3VzdG9tIGVsZW1lbnRzLgogICAqIC0gQ3VzdG9tIG1peGlucyBjYW4gYmUgZGVmaW5lZCBpbiBhIGA8Y3VzdG9tLXN0eWxlPmAsIGlmIHlvdSBpbXBvcnQgdGhlIG9wdGlvbmFsCiAgICogICBbYXBwbHkgc2hpbV0oaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MjYWJvdXQtYXBwbHlzaGltKQogICAqICAgKGBzaGFkeWNzcy9hcHBseS1zaGltLmh0bWxgKS4KICAgKgogICAqIFRvIHVzZToKICAgKgogICAqIC0gSW1wb3J0IGBjdXN0b20tc3R5bGUuaHRtbGAuCiAgICogLSBQbGFjZSBhIGA8Y3VzdG9tLXN0eWxlPmAgZWxlbWVudCBpbiB0aGUgbWFpbiBkb2N1bWVudCwgd3JhcHBpbmcgYW4gaW5saW5lIGA8c3R5bGU+YCB0YWcgdGhhdAogICAqICAgY29udGFpbnMgdGhlIENTUyBydWxlcyB5b3Ugd2FudCB0byBzaGltLgogICAqCiAgICogRm9yIGV4YW1wbGU6CiAgICoKICAgKiBgYGBodG1sCiAgICogPCEtLSBpbXBvcnQgYXBwbHkgc2hpbS0tb25seSByZXF1aXJlZCBpZiB1c2luZyBtaXhpbnMgLS0+CiAgICogPGxpbmsgcmVsPSJpbXBvcnQiIGhyZWY9ImJvd2VyX2NvbXBvbmVudHMvc2hhZHljc3MvYXBwbHktc2hpbS5odG1sIj4KICAgKiA8IS0tIGltcG9ydCBjdXN0b20tc3R5bGUgZWxlbWVudCAtLT4KICAgKiA8bGluayByZWw9ImltcG9ydCIgaHJlZj0iYm93ZXJfY29tcG9uZW50cy9wb2x5bWVyL2xpYi9lbGVtZW50cy9jdXN0b20tc3R5bGUuaHRtbCI+CiAgICoKICAgKiA8Y3VzdG9tLXN0eWxlPgogICAqICAgPHN0eWxlPgogICAqICAgICBodG1sIHsKICAgKiAgICAgICAtLWN1c3RvbS1jb2xvcjogYmx1ZTsKICAgKiAgICAgICAtLWN1c3RvbS1taXhpbjogewogICAqICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICogICAgICAgICBjb2xvcjogcmVkOwogICAqICAgICAgIH07CiAgICogICAgIH0KICAgKiAgIDwvc3R5bGU+CiAgICogPC9jdXN0b20tc3R5bGU+CiAgICogYGBgCiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBleHRlbmRzIEhUTUxFbGVtZW50CiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCBmb3IgZGVmaW5pbmcgc3R5bGVzIGluIHRoZSBtYWluIGRvY3VtZW50IHRoYXQgY2FuCiAgICogICB0YWtlIGFkdmFudGFnZSBvZiBQb2x5bWVyJ3Mgc3R5bGUgc2NvcGluZyBhbmQgY3VzdG9tIHByb3BlcnRpZXMgc2hpbXMuCiAgICovCiAgY2xhc3MgQ3VzdG9tU3R5bGUgZXh0ZW5kcyBIVE1MRWxlbWVudCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgdGhpcy5fc3R5bGUgPSBudWxsOwogICAgICBDdXN0b21TdHlsZUludGVyZmFjZS5hZGRDdXN0b21TdHlsZSh0aGlzKTsKICAgIH0KICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGlnaHQtRE9NIGA8c3R5bGU+YCBjaGlsZCB0aGlzIGVsZW1lbnQgd3JhcHMuICBVcG9uIGZpcnN0CiAgICAgKiBjYWxsIGFueSBzdHlsZSBtb2R1bGVzIHJlZmVyZW5jZWQgdmlhIHRoZSBgaW5jbHVkZWAgYXR0cmlidXRlIHdpbGwgYmUKICAgICAqIGNvbmNhdGVuYXRlZCB0byB0aGlzIGVsZW1lbnQncyBgPHN0eWxlPmAuCiAgICAgKgogICAgICogQHJldHVybiB7SFRNTFN0eWxlRWxlbWVudH0gVGhpcyBlbGVtZW50J3MgbGlnaHQtRE9NIGA8c3R5bGU+YAogICAgICovCiAgICBnZXRTdHlsZSgpIHsKICAgICAgaWYgKHRoaXMuX3N0eWxlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlOwogICAgICB9CiAgICAgIGNvbnN0IHN0eWxlID0gLyoqIEB0eXBlIHtIVE1MU3R5bGVFbGVtZW50fSAqLyh0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlJykpOwogICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5fc3R5bGUgPSBzdHlsZTsKICAgICAgY29uc3QgaW5jbHVkZSA9IHN0eWxlLmdldEF0dHJpYnV0ZShhdHRyKTsKICAgICAgaWYgKGluY2x1ZGUpIHsKICAgICAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7CiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBQb2x5bWVyLlN0eWxlR2F0aGVyLmNzc0Zyb21Nb2R1bGVzKGluY2x1ZGUpICsgc3R5bGUudGV4dENvbnRlbnQ7CiAgICAgIH0KICAgICAgLyoKICAgICAgSFRNTCBJbXBvcnRzIHN0eWxpbmcgdGhlIG1haW4gZG9jdW1lbnQgYXJlIGRlcHJlY2F0ZWQgaW4gQ2hyb21lCiAgICAgIGh0dHBzOi8vY3JidWcuY29tLzUyMzk1MgoKICAgICAgSWYgdGhpcyBlbGVtZW50IGlzIG5vdCBpbiB0aGUgbWFpbiBkb2N1bWVudCwgdGhlbiBpdCBtdXN0IGJlIGluIGFuIEhUTUwgSW1wb3J0IGRvY3VtZW50LgogICAgICBJbiB0aGF0IGNhc2UsIG1vdmUgdGhlIGN1c3RvbSBzdHlsZSB0byB0aGUgbWFpbiBkb2N1bWVudC4KCiAgICAgIFRoZSBvcmRlcmluZyBvZiBgPGN1c3RvbS1zdHlsZT5gIHNob3VsZCBzdGF5IHRoZSBzYW1lIGFzIHdoZW4gbG9hZGVkIGJ5IEhUTUwgSW1wb3J0cywgYnV0IHRoZXJlIG1heSBiZSBvZGQKICAgICAgY2FzZXMgb2Ygb3JkZXJpbmcgdy5yLnQgdGhlIG1haW4gZG9jdW1lbnQgc3R5bGVzLgogICAgICAqLwogICAgICBpZiAodGhpcy5vd25lckRvY3VtZW50ICE9PSB3aW5kb3cuZG9jdW1lbnQpIHsKICAgICAgICB3aW5kb3cuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fc3R5bGU7CiAgICB9CiAgfQoKICB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdjdXN0b20tc3R5bGUnLCBDdXN0b21TdHlsZSk7CgogIC8qKiBAY29uc3QgKi8KICBQb2x5bWVyLkN1c3RvbVN0eWxlID0gQ3VzdG9tU3R5bGU7Cn0pKCk7CgoKKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IG11dGFibGVQcm9wZXJ0eUNoYW5nZTsKICAvKiogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gKi8KICAoKCkgPT4gewogICAgbXV0YWJsZVByb3BlcnR5Q2hhbmdlID0gUG9seW1lci5NdXRhYmxlRGF0YS5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlOwogIH0pKCk7CgogIC8qKgogICAqIExlZ2FjeSBlbGVtZW50IGJlaGF2aW9yIHRvIHNraXAgc3RyaWN0IGRpcnR5LWNoZWNraW5nIGZvciBvYmplY3RzIGFuZCBhcnJheXMsCiAgICogKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpIGZvciB1c2Ugb24gbGVnYWN5IEFQSSBQb2x5bWVyIGVsZW1lbnRzLgogICAqCiAgICogQnkgZGVmYXVsdCwgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCBwZXJmb3JtcyBzdHJpY3QgZGlydHkgY2hlY2tpbmcgb24KICAgKiBvYmplY3RzLCB3aGljaCBtZWFucyB0aGF0IGFueSBkZWVwIG1vZGlmaWNhdGlvbnMgdG8gYW4gb2JqZWN0IG9yIGFycmF5IHdpbGwKICAgKiBub3QgYmUgcHJvcGFnYXRlZCB1bmxlc3MgImltbXV0YWJsZSIgZGF0YSBwYXR0ZXJucyBhcmUgdXNlZCAoaS5lLiBhbGwgb2JqZWN0CiAgICogcmVmZXJlbmNlcyBmcm9tIHRoZSByb290IHRvIHRoZSBtdXRhdGlvbiB3ZXJlIGNoYW5nZWQpLgogICAqCiAgICogUG9seW1lciBhbHNvIHByb3ZpZGVzIGEgcHJvcHJpZXRhcnkgZGF0YSBtdXRhdGlvbiBhbmQgcGF0aCBub3RpZmljYXRpb24gQVBJCiAgICogKGUuZy4gYG5vdGlmeVBhdGhgLCBgc2V0YCwgYW5kIGFycmF5IG11dGF0aW9uIEFQSSdzKSB0aGF0IGFsbG93IGVmZmljaWVudAogICAqIG11dGF0aW9uIGFuZCBub3RpZmljYXRpb24gb2YgZGVlcCBjaGFuZ2VzIGluIGFuIG9iamVjdCBncmFwaCB0byBhbGwgZWxlbWVudHMKICAgKiBib3VuZCB0byB0aGUgc2FtZSBvYmplY3QgZ3JhcGguCiAgICoKICAgKiBJbiBjYXNlcyB3aGVyZSBuZWl0aGVyIGltbXV0YWJsZSBwYXR0ZXJucyBub3IgdGhlIGRhdGEgbXV0YXRpb24gQVBJIGNhbiBiZQogICAqIHVzZWQsIGFwcGx5aW5nIHRoaXMgbWl4aW4gd2lsbCBjYXVzZSBQb2x5bWVyIHRvIHNraXAgZGlydHkgY2hlY2tpbmcgZm9yCiAgICogb2JqZWN0cyBhbmQgYXJyYXlzIChhbHdheXMgY29uc2lkZXIgdGhlbSB0byBiZSAiZGlydHkiKS4gIFRoaXMgYWxsb3dzIGEKICAgKiB1c2VyIHRvIG1ha2UgYSBkZWVwIG1vZGlmaWNhdGlvbiB0byBhIGJvdW5kIG9iamVjdCBncmFwaCwgYW5kIHRoZW4gZWl0aGVyCiAgICogc2ltcGx5IHJlLXNldCB0aGUgb2JqZWN0IChlLmcuIGB0aGlzLml0ZW1zID0gdGhpcy5pdGVtc2ApIG9yIGNhbGwgYG5vdGlmeVBhdGhgCiAgICogKGUuZy4gYHRoaXMubm90aWZ5UGF0aCgnaXRlbXMnKWApIHRvIHVwZGF0ZSB0aGUgdHJlZS4gIE5vdGUgdGhhdCBhbGwKICAgKiBlbGVtZW50cyB0aGF0IHdpc2ggdG8gYmUgdXBkYXRlZCBiYXNlZCBvbiBkZWVwIG11dGF0aW9ucyBtdXN0IGFwcGx5IHRoaXMKICAgKiBtaXhpbiBvciBvdGhlcndpc2Ugc2tpcCBzdHJpY3QgZGlydHkgY2hlY2tpbmcgZm9yIG9iamVjdHMvYXJyYXlzLgogICAqIFNwZWNpZmljYWxseSwgYW55IGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nIHRyZWUgYmV0d2VlbiB0aGUgc291cmNlIG9mIGEKICAgKiBtdXRhdGlvbiBhbmQgdGhlIGNvbnN1bXB0aW9uIG9mIGl0IG11c3QgYXBwbHkgdGhpcyBiZWhhdmlvciBvciBlbmFibGUgdGhlCiAgICogYFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YUJlaGF2aW9yYC4KICAgKgogICAqIEluIG9yZGVyIHRvIG1ha2UgdGhlIGRpcnR5IGNoZWNrIHN0cmF0ZWd5IGNvbmZpZ3VyYWJsZSwgc2VlCiAgICogYFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YUJlaGF2aW9yYC4KICAgKgogICAqIE5vdGUsIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgcHJvcGFnYXRpbmcgbGFyZ2Ugb2JqZWN0IGdyYXBocwogICAqIHdpbGwgYmUgd29yc2UgYXMgb3Bwb3NlZCB0byB1c2luZyBzdHJpY3QgZGlydHkgY2hlY2tpbmcgd2l0aCBpbW11dGFibGUKICAgKiBwYXR0ZXJucyBvciBQb2x5bWVyJ3MgcGF0aCBub3RpZmljYXRpb24gQVBJLgogICAqCiAgICogQHBvbHltZXJCZWhhdmlvcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgQmVoYXZpb3IgdG8gc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kCiAgICogICBhcnJheXMKICAgKi8KICBQb2x5bWVyLk11dGFibGVEYXRhQmVoYXZpb3IgPSB7CgogICAgLyoqCiAgICAgKiBPdmVycmlkZXMgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCB0byBwcm92aWRlIG9wdGlvbiBmb3Igc2tpcHBpbmcKICAgICAqIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyBmb3IgT2JqZWN0cyBhbmQgQXJyYXlzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHB1bGxzIHRoZSB2YWx1ZSB0byBkaXJ0eSBjaGVjayBhZ2FpbnN0IGZyb20gdGhlIGBfX2RhdGFUZW1wYAogICAgICogY2FjaGUgKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAqIGNhY2hlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHR1cm4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzCiAgICAgKiBzaWRlLWVmZmVjdHMgb2YgZGVlcCBvYmplY3QgY2hhbmdlcyB0byBiZSBwcm9jZXNzZWQgYnkgcmUtc2V0dGluZyB0aGUKICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAqIGN5Y2xlcyBkdWUgdG8gMi13YXkgbm90aWZpY2F0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgcHJvcGVydHkgdmFsdWUKICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBfc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBvbGQpIHsKICAgICAgcmV0dXJuIG11dGFibGVQcm9wZXJ0eUNoYW5nZSh0aGlzLCBwcm9wZXJ0eSwgdmFsdWUsIG9sZCwgdHJ1ZSk7CiAgICB9CiAgfTsKCiAgLyoqCiAgICogTGVnYWN5IGVsZW1lbnQgYmVoYXZpb3IgdG8gYWRkIHRoZSBvcHRpb25hbCBhYmlsaXR5IHRvIHNraXAgc3RyaWN0CiAgICogZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kIGFycmF5cyAoYWx3YXlzIGNvbnNpZGVyIHRoZW0gdG8gYmUKICAgKiAiZGlydHkiKSBieSBzZXR0aW5nIGEgYG11dGFibGUtZGF0YWAgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAgICoKICAgKiBCeSBkZWZhdWx0LCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHBlcmZvcm1zIHN0cmljdCBkaXJ0eSBjaGVja2luZyBvbgogICAqIG9iamVjdHMsIHdoaWNoIG1lYW5zIHRoYXQgYW55IGRlZXAgbW9kaWZpY2F0aW9ucyB0byBhbiBvYmplY3Qgb3IgYXJyYXkgd2lsbAogICAqIG5vdCBiZSBwcm9wYWdhdGVkIHVubGVzcyAiaW1tdXRhYmxlIiBkYXRhIHBhdHRlcm5zIGFyZSB1c2VkIChpLmUuIGFsbCBvYmplY3QKICAgKiByZWZlcmVuY2VzIGZyb20gdGhlIHJvb3QgdG8gdGhlIG11dGF0aW9uIHdlcmUgY2hhbmdlZCkuCiAgICoKICAgKiBQb2x5bWVyIGFsc28gcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBkYXRhIG11dGF0aW9uIGFuZCBwYXRoIG5vdGlmaWNhdGlvbiBBUEkKICAgKiAoZS5nLiBgbm90aWZ5UGF0aGAsIGBzZXRgLCBhbmQgYXJyYXkgbXV0YXRpb24gQVBJJ3MpIHRoYXQgYWxsb3cgZWZmaWNpZW50CiAgICogbXV0YXRpb24gYW5kIG5vdGlmaWNhdGlvbiBvZiBkZWVwIGNoYW5nZXMgaW4gYW4gb2JqZWN0IGdyYXBoIHRvIGFsbCBlbGVtZW50cwogICAqIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdCBncmFwaC4KICAgKgogICAqIEluIGNhc2VzIHdoZXJlIG5laXRoZXIgaW1tdXRhYmxlIHBhdHRlcm5zIG5vciB0aGUgZGF0YSBtdXRhdGlvbiBBUEkgY2FuIGJlCiAgICogdXNlZCwgYXBwbHlpbmcgdGhpcyBtaXhpbiB3aWxsIGFsbG93IFBvbHltZXIgdG8gc2tpcCBkaXJ0eSBjaGVja2luZyBmb3IKICAgKiBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpLiAgVGhpcyBhbGxvd3MgYQogICAqIHVzZXIgdG8gbWFrZSBhIGRlZXAgbW9kaWZpY2F0aW9uIHRvIGEgYm91bmQgb2JqZWN0IGdyYXBoLCBhbmQgdGhlbiBlaXRoZXIKICAgKiBzaW1wbHkgcmUtc2V0IHRoZSBvYmplY3QgKGUuZy4gYHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zYCkgb3IgY2FsbCBgbm90aWZ5UGF0aGAKICAgKiAoZS5nLiBgdGhpcy5ub3RpZnlQYXRoKCdpdGVtcycpYCkgdG8gdXBkYXRlIHRoZSB0cmVlLiAgTm90ZSB0aGF0IGFsbAogICAqIGVsZW1lbnRzIHRoYXQgd2lzaCB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIGRlZXAgbXV0YXRpb25zIG11c3QgYXBwbHkgdGhpcwogICAqIG1peGluIG9yIG90aGVyd2lzZSBza2lwIHN0cmljdCBkaXJ0eSBjaGVja2luZyBmb3Igb2JqZWN0cy9hcnJheXMuCiAgICogU3BlY2lmaWNhbGx5LCBhbnkgZWxlbWVudHMgaW4gdGhlIGJpbmRpbmcgdHJlZSBiZXR3ZWVuIHRoZSBzb3VyY2Ugb2YgYQogICAqIG11dGF0aW9uIGFuZCB0aGUgY29uc3VtcHRpb24gb2YgaXQgbXVzdCBlbmFibGUgdGhpcyBiZWhhdmlvciBvciBhcHBseSB0aGUKICAgKiBgUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhQmVoYXZpb3JgLgogICAqCiAgICogV2hpbGUgdGhpcyBiZWhhdmlvciBhZGRzIHRoZSBhYmlsaXR5IHRvIGZvcmdvIE9iamVjdC9BcnJheSBkaXJ0eSBjaGVja2luZywKICAgKiB0aGUgYG11dGFibGVEYXRhYCBmbGFnIGRlZmF1bHRzIHRvIGZhbHNlIGFuZCBtdXN0IGJlIHNldCBvbiB0aGUgaW5zdGFuY2UuCiAgICoKICAgKiBOb3RlLCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHByb3BhZ2F0aW5nIGxhcmdlIG9iamVjdCBncmFwaHMKICAgKiB3aWxsIGJlIHdvcnNlIGJ5IHJlbHlpbmcgb24gYG11dGFibGVEYXRhOiB0cnVlYCBhcyBvcHBvc2VkIHRvIHVzaW5nCiAgICogc3RyaWN0IGRpcnR5IGNoZWNraW5nIHdpdGggaW1tdXRhYmxlIHBhdHRlcm5zIG9yIFBvbHltZXIncyBwYXRoIG5vdGlmaWNhdGlvbgogICAqIEFQSS4KICAgKgogICAqIEBwb2x5bWVyQmVoYXZpb3IKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEJlaGF2aW9yIHRvIG9wdGlvbmFsbHkgc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kCiAgICogICBhcnJheXMKICAgKi8KICBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGFCZWhhdmlvciA9IHsKCiAgICBwcm9wZXJ0aWVzOiB7CiAgICAgIC8qKgogICAgICAgKiBJbnN0YW5jZS1sZXZlbCBmbGFnIGZvciBjb25maWd1cmluZyB0aGUgZGlydHktY2hlY2tpbmcgc3RyYXRlZ3kKICAgICAgICogZm9yIHRoaXMgZWxlbWVudC4gIFdoZW4gdHJ1ZSwgT2JqZWN0cyBhbmQgQXJyYXlzIHdpbGwgc2tpcCBkaXJ0eQogICAgICAgKiBjaGVja2luZywgb3RoZXJ3aXNlIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyB3aWxsIGJlIHVzZWQuCiAgICAgICAqLwogICAgICBtdXRhYmxlRGF0YTogQm9vbGVhbgogICAgfSwKCiAgICAvKioKICAgICAqIE92ZXJyaWRlcyBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHRvIHNraXAgc3RyaWN0IGVxdWFsaXR5IGNoZWNraW5nCiAgICAgKiBmb3IgT2JqZWN0cyBhbmQgQXJyYXlzLgogICAgICoKICAgICAqIFB1bGxzIHRoZSB2YWx1ZSB0byBkaXJ0eSBjaGVjayBhZ2FpbnN0IGZyb20gdGhlIGBfX2RhdGFUZW1wYCBjYWNoZQogICAgICogKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAqIGNhY2hlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHR1cm4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzCiAgICAgKiBzaWRlLWVmZmVjdHMgb2YgZGVlcCBvYmplY3QgY2hhbmdlcyB0byBiZSBwcm9jZXNzZWQgYnkgcmUtc2V0dGluZyB0aGUKICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAqIGN5Y2xlcyBkdWUgdG8gMi13YXkgbm90aWZpY2F0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgcHJvcGVydHkgdmFsdWUKICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICogQHRoaXMge3RoaXN9CiAgICAgKiBAcHJvdGVjdGVkCiAgICAgKi8KICAgIF9zaG91bGRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eSwgdmFsdWUsIG9sZCkgewogICAgICByZXR1cm4gbXV0YWJsZVByb3BlcnR5Q2hhbmdlKHRoaXMsIHByb3BlcnR5LCB2YWx1ZSwgb2xkLCB0aGlzLm11dGFibGVEYXRhKTsKICAgIH0KICB9OwoKfSkoKTsKCgoKICAvLyBiYwogIFBvbHltZXIuQmFzZSA9IFBvbHltZXIuTGVnYWN5RWxlbWVudE1peGluKEhUTUxFbGVtZW50KS5wcm90b3R5cGU7CgogIC8vIE5PVEU6IHRoaXMgaXMgaGVyZSBmb3IgbW9kdWxpemVyIHRvIGV4cG9ydCBgaHRtbGAgZm9yIHRoZSBtb2R1bGUgdmVyc2lvbiBvZiB0aGlzIGZpbGUKICBQb2x5bWVyLmh0bWwgPSBQb2x5bWVyLmh0bWw7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1mbGV4LWxheW91dC9pcm9uLWZsZXgtbGF5b3V0Lmh0bWwuanMKKGZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnRleHRDb250ZW50PSJbaGlkZGVuXSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSI7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhKX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1hMTF5LWtleXMtYmVoYXZpb3IvaXJvbi1hMTF5LWtleXMtYmVoYXZpb3IuaHRtbC5qcwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHgsQyl7dmFyIEY9IiI7aWYoeClpZih4PXgudG9Mb3dlckNhc2UoKSwiICI9PT14fHx5LnRlc3QoeCkpRj0ic3BhY2UiO2Vsc2UgaWYoei50ZXN0KHgpKUY9ImVzYyI7ZWxzZSBpZigxPT14Lmxlbmd0aCl7aWYoIUN8fHIudGVzdCh4KSlGPXh9ZWxzZSBGPXYudGVzdCh4KT94LnJlcGxhY2UoImFycm93IiwiIik6Im11bHRpcGx5Ij09eD8iKiI6eDtyZXR1cm4gRn1mdW5jdGlvbiBjKHgpe3ZhciBDPSIiO3gmJih4IGluIG4/Qz1uW3hdOnQudGVzdCh4KT8oeD1wYXJzZUludCh4LnJlcGxhY2UoIlUrIiwiMHgiKSwxNiksQz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpLnRvTG93ZXJDYXNlKCkpOkM9eC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gQ31mdW5jdGlvbiBkKHgpe3ZhciBDPSIiO051bWJlcih4KSYmKEM9NjU8PXgmJjkwPj14P1N0cmluZy5mcm9tQ2hhckNvZGUoMzIreCk6MTEyPD14JiYxMjM+PXg/ImYiKyh4LTExMisxKTo0ODw9eCYmNTc+PXg/ClN0cmluZyh4LTQ4KTo5Njw9eCYmMTA1Pj14P1N0cmluZyh4LTk2KTpwW3hdKTtyZXR1cm4gQ31mdW5jdGlvbiBmKHgsQyl7cmV0dXJuIHgua2V5P2EoeC5rZXksQyk6eC5kZXRhaWwmJnguZGV0YWlsLmtleT9hKHguZGV0YWlsLmtleSxDKTpjKHgua2V5SWRlbnRpZmllcil8fGQoeC5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gZyh4LEMpe3JldHVybiBmKEMseC5oYXNNb2RpZmllcnMpPT09eC5rZXkmJigheC5oYXNNb2RpZmllcnN8fCEhQy5zaGlmdEtleT09PSEheC5zaGlmdEtleSYmISFDLmN0cmxLZXk9PT0hIXguY3RybEtleSYmISFDLmFsdEtleT09PSEheC5hbHRLZXkmJiEhQy5tZXRhS2V5PT09ISF4Lm1ldGFLZXkpfWZ1bmN0aW9uIGwoeCl7cmV0dXJuIDE9PT14Lmxlbmd0aD97Y29tYm86eCxrZXk6eCxldmVudDoia2V5ZG93biJ9Onguc3BsaXQoIisiKS5yZWR1Y2UoZnVuY3Rpb24oQyxGKXt2YXIgRD1GLnNwbGl0KCI6Iik7Rj1EWzBdO0Q9RFsxXTtGIGluIHE/KENbcVtGXV09ITAsCkMuaGFzTW9kaWZpZXJzPSEwKTooQy5rZXk9RixDLmV2ZW50PUR8fCJrZXlkb3duIik7cmV0dXJuIEN9LHtjb21ibzp4LnNwbGl0KCI6Iikuc2hpZnQoKX0pfWZ1bmN0aW9uIGsoeCl7cmV0dXJuIHgudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBsKEMpfSl9dmFyIG49eyJVKzAwMDgiOiJiYWNrc3BhY2UiLCJVKzAwMDkiOiJ0YWIiLCJVKzAwMUIiOiJlc2MiLCJVKzAwMjAiOiJzcGFjZSIsIlUrMDA3RiI6ImRlbCJ9LHA9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0scT17c2hpZnQ6InNoaWZ0S2V5IixjdHJsOiJjdHJsS2V5IixhbHQ6ImFsdEtleSIsbWV0YToibWV0YUtleSJ9LHI9L1thLXowLTkqXS8sdD0vVVwrLyx2PS9eYXJyb3cvLAp5PS9ec3BhY2UoYmFyKT8vLHo9L15lc2NhcGUkLztQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yPXtwcm9wZXJ0aWVzOntrZXlFdmVudFRhcmdldDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319LHN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2JvdW5kS2V5SGFuZGxlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9pbXBlcmF0aXZlS2V5QmluZGluZ3M6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fX0sb2JzZXJ2ZXJzOlsiX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnMoa2V5RXZlbnRUYXJnZXQsIF9ib3VuZEtleUhhbmRsZXJzKSJdLGtleUJpbmRpbmdzOnt9LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXt0aGlzLl9wcmVwS2V5QmluZGluZ3MoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKX0sCmFkZE93bktleUJpbmRpbmc6ZnVuY3Rpb24oeCxDKXt0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbeF09Qzt0aGlzLl9wcmVwS2V5QmluZGluZ3MoKTt0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LHJlbW92ZU93bktleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzPXt9O3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpO3RoaXMuX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnMoKX0sa2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzOmZ1bmN0aW9uKHgsQyl7Qz1rKEMpO2Zvcih2YXIgRj0wO0Y8Qy5sZW5ndGg7KytGKWlmKGcoQ1tGXSx4KSlyZXR1cm4hMDtyZXR1cm4hMX0sX2NvbGxlY3RLZXlCaW5kaW5nczpmdW5jdGlvbigpe3ZhciB4PXRoaXMuYmVoYXZpb3JzLm1hcChmdW5jdGlvbihDKXtyZXR1cm4gQy5rZXlCaW5kaW5nc30pOy0xPT09eC5pbmRleE9mKHRoaXMua2V5QmluZGluZ3MpJiZ4LnB1c2godGhpcy5rZXlCaW5kaW5ncyk7cmV0dXJuIHh9LApfcHJlcEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dGhpcy5fa2V5QmluZGluZ3M9e307dGhpcy5fY29sbGVjdEtleUJpbmRpbmdzKCkuZm9yRWFjaChmdW5jdGlvbihGKXtmb3IodmFyIEQgaW4gRil0aGlzLl9hZGRLZXlCaW5kaW5nKEQsRltEXSl9LHRoaXMpO2Zvcih2YXIgeCBpbiB0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3MpdGhpcy5fYWRkS2V5QmluZGluZyh4LHRoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5nc1t4XSk7Zm9yKHZhciBDIGluIHRoaXMuX2tleUJpbmRpbmdzKXRoaXMuX2tleUJpbmRpbmdzW0NdLnNvcnQoZnVuY3Rpb24oRixEKXtGPUZbMF0uaGFzTW9kaWZpZXJzO3JldHVybiBGPT09RFswXS5oYXNNb2RpZmllcnM/MDpGPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oeCxDKXtrKHgpLmZvckVhY2goZnVuY3Rpb24oRil7dGhpcy5fa2V5QmluZGluZ3NbRi5ldmVudF09dGhpcy5fa2V5QmluZGluZ3NbRi5ldmVudF18fFtdO3RoaXMuX2tleUJpbmRpbmdzW0YuZXZlbnRdLnB1c2goW0YsCkNdKX0sdGhpcyl9LF9yZXNldEtleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpO3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKX0sX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5rZXlFdmVudFRhcmdldCYmT2JqZWN0LmtleXModGhpcy5fa2V5QmluZGluZ3MpLmZvckVhY2goZnVuY3Rpb24oeCl7dmFyIEM9dGhpcy5fb25LZXlCaW5kaW5nRXZlbnQuYmluZCh0aGlzLHRoaXMuX2tleUJpbmRpbmdzW3hdKTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQseCxDXSk7dGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHgsQyl9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgeCxDLEY7dGhpcy5fYm91bmRLZXlIYW5kbGVycy5sZW5ndGg7KXg9dGhpcy5fYm91bmRLZXlIYW5kbGVycy5wb3AoKSwKQz14WzBdLEY9eFsxXSx4PXhbMl0sQy5yZW1vdmVFdmVudExpc3RlbmVyKEYseCl9LF9vbktleUJpbmRpbmdFdmVudDpmdW5jdGlvbih4LEMpe3RoaXMuc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbiYmQy5zdG9wUHJvcGFnYXRpb24oKTtpZighQy5kZWZhdWx0UHJldmVudGVkKWZvcih2YXIgRj0wO0Y8eC5sZW5ndGg7RisrKXt2YXIgRD14W0ZdWzBdLEI9eFtGXVsxXTtpZihnKEQsQykmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihELEIsQyksQy5kZWZhdWx0UHJldmVudGVkKSlicmVha319LF90cmlnZ2VyS2V5SGFuZGxlcjpmdW5jdGlvbih4LEMsRil7dmFyIEQ9T2JqZWN0LmNyZWF0ZSh4KTtELmtleWJvYXJkRXZlbnQ9Rjt4PW5ldyBDdXN0b21FdmVudCh4LmV2ZW50LHtkZXRhaWw6RCxjYW5jZWxhYmxlOiEwfSk7dGhpc1tDXS5jYWxsKHRoaXMseCk7eC5kZWZhdWx0UHJldmVudGVkJiZGLnByZXZlbnREZWZhdWx0KCl9fX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1iZWhhdmlvcnMvaXJvbi1jb250cm9sLXN0YXRlLmh0bWwuanMKUG9seW1lci5Jcm9uQ29udHJvbFN0YXRlPXtwcm9wZXJ0aWVzOntmb2N1c2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX29sZFRhYkluZGV4Ont0eXBlOlN0cmluZ30sX2JvdW5kRm9jdXNCbHVySGFuZGxlcjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb2N1c0JsdXJIYW5kbGVyLmJpbmQodGhpcyl9fSxfX2hhbmRsZUV2ZW50UmV0YXJnZXRpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnNoYWRvd1Jvb3QmJiFQb2x5bWVyLkVsZW1lbnR9fX0sb2JzZXJ2ZXJzOlsiX2NoYW5nZWRDb250cm9sU3RhdGUoZm9jdXNlZCwgZGlzYWJsZWQpIl0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwKdGhpcy5fYm91bmRGb2N1c0JsdXJIYW5kbGVyLCEwKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCl9LF9mb2N1c0JsdXJIYW5kbGVyOmZ1bmN0aW9uKGEpe2lmKFBvbHltZXIuRWxlbWVudCl0aGlzLl9zZXRGb2N1c2VkKCJmb2N1cyI9PT1hLnR5cGUpO2Vsc2UgaWYoYS50YXJnZXQ9PT10aGlzKXRoaXMuX3NldEZvY3VzZWQoImZvY3VzIj09PWEudHlwZSk7ZWxzZSBpZih0aGlzLl9faGFuZGxlRXZlbnRSZXRhcmdldGluZyl7dmFyIGM9UG9seW1lci5kb20oYSkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChjKXx8dGhpcy5maXJlKGEudHlwZSx7c291cmNlRXZlbnQ6YX0se25vZGU6dGhpcyxidWJibGVzOmEuYnViYmxlcyxjYW5jZWxhYmxlOmEuY2FuY2VsYWJsZX0pfX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIsYT8idHJ1ZSI6ImZhbHNlIik7CnRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1hPyJub25lIjoiIjthPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp2b2lkIDAhPT10aGlzLl9vbGRUYWJJbmRleCYmKG51bGw9PT10aGlzLl9vbGRUYWJJbmRleD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1iZWhhdmlvcnMvaXJvbi1idXR0b24tc3RhdGUuaHRtbC5qcwpQb2x5bWVyLklyb25CdXR0b25TdGF0ZUltcGw9e3Byb3BlcnRpZXM6e3ByZXNzZWQ6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMCx2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9wcmVzc2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHBvaW50ZXJEb3duOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITF9LHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQ6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMH0sYXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtcHJlc3NlZCIsb2JzZXJ2ZXI6Il9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e2Rvd246Il9kb3duSGFuZGxlciIsdXA6Il91cEhhbmRsZXIiLHRhcDoiX3RhcEhhbmRsZXIifSwKb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGEpO2F8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihhKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZhKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihhKXt0aGlzLmFjdGl2ZSE9PQphJiYodGhpcy5hY3RpdmU9YSx0aGlzLmZpcmUoImNoYW5nZSIpKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApO3RoaXMuX3NldFByZXNzZWQoITApO3RoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpO3RoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihhKXthPWEuZGV0YWlsLmtleWJvYXJkRXZlbnQ7dmFyIGM9UG9seW1lci5kb20oYSkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChjKXx8KGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGEpe2E9UG9seW1lci5kb20oYS5kZXRhaWwua2V5Ym9hcmRFdmVudCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChhKXx8Cih0aGlzLnByZXNzZWQmJnRoaXMuX2FzeW5jQ2xpY2soKSx0aGlzLl9zZXRQcmVzc2VkKCExKSl9LF9hc3luY0NsaWNrOmZ1bmN0aW9uKCl7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuY2xpY2soKX0sMSl9LF9wcmVzc2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2NoYW5nZWRCdXR0b25TdGF0ZSgpfSxfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQ6ZnVuY3Rpb24oYSxjKXtjJiZjIT1hJiZ0aGlzLmhhc0F0dHJpYnV0ZShjKSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9LF9hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMudG9nZ2xlcz90aGlzLnNldEF0dHJpYnV0ZSh0aGlzLmFyaWFBY3RpdmVBdHRyaWJ1dGUsYT8idHJ1ZSI6ImZhbHNlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlKTt0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NvbnRyb2xTdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkP3RoaXMuX3NldFByZXNzZWQoITEpOgp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fTtQb2x5bWVyLklyb25CdXR0b25TdGF0ZT1bUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcixQb2x5bWVyLklyb25CdXR0b25TdGF0ZUltcGxdOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLXJpcHBsZS9wYXBlci1yaXBwbGUuaHRtbC5qcwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGYpe3RoaXMuZWxlbWVudD1mO3RoaXMud2lkdGg9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg7dGhpcy5oZWlnaHQ9dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0O3RoaXMuc2l6ZT1NYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1mdW5jdGlvbiBjKGYpe3RoaXMuZWxlbWVudD1mO3RoaXMuY29sb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZikuY29sb3I7dGhpcy53YXZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMud2F2ZUNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLndhdmUuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuY29sb3I7dGhpcy53YXZlLmNsYXNzTGlzdC5hZGQoIndhdmUiKTt0aGlzLndhdmVDb250YWluZXIuY2xhc3NMaXN0LmFkZCgid2F2ZS1jb250YWluZXIiKTtQb2x5bWVyLmRvbSh0aGlzLndhdmVDb250YWluZXIpLmFwcGVuZENoaWxkKHRoaXMud2F2ZSk7dGhpcy5yZXNldEludGVyYWN0aW9uU3RhdGUoKX0KdmFyIGQ9e2Rpc3RhbmNlOmZ1bmN0aW9uKGYsZyxsLGspe2YtPWw7Zy09aztyZXR1cm4gTWF0aC5zcXJ0KGYqZitnKmcpfSxub3c6d2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpOkRhdGUubm93fTthLnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGYsZyl7dmFyIGw9ZC5kaXN0YW5jZShmLGcsMCwwKSxrPWQuZGlzdGFuY2UoZixnLHRoaXMud2lkdGgsMCksbj1kLmRpc3RhbmNlKGYsZywwLHRoaXMuaGVpZ2h0KTtmPWQuZGlzdGFuY2UoZixnLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO3JldHVybiBNYXRoLm1heChsLGssbixmKX19O2MuTUFYX1JBRElVUz0zMDA7Yy5wcm90b3R5cGU9e2dldCByZWNlbnRlcnMoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnJlY2VudGVyc30sCmdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXtpZighdGhpcy5tb3VzZURvd25TdGFydClyZXR1cm4gMDt2YXIgZj1kLm5vdygpLXRoaXMubW91c2VEb3duU3RhcnQ7dGhpcy5tb3VzZVVwU3RhcnQmJihmLT10aGlzLm1vdXNlVXBFbGFwc2VkKTtyZXR1cm4gZn0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P2Qubm93KCktdGhpcy5tb3VzZVVwU3RhcnQ6MH0sZ2V0IG1vdXNlRG93bkVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VEb3duRWxhcHNlZC8xRTN9LGdldCBtb3VzZVVwRWxhcHNlZFNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZVVwRWxhcHNlZC8xRTN9LGdldCBtb3VzZUludGVyYWN0aW9uU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWRTZWNvbmRzK3RoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzfSxnZXQgaW5pdGlhbE9wYWNpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmluaXRpYWxPcGFjaXR5fSwKZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBmPTEuMSpNYXRoLm1pbihNYXRoLnNxcnQodGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoKnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCt0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQpLGMuTUFYX1JBRElVUykrNTtyZXR1cm4gTWF0aC5hYnMoZiooMS1NYXRoLnBvdyg4MCwtKHRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvKDEuMS1mL2MuTUFYX1JBRElVUyouMikpKSkpfSxnZXQgb3BhY2l0eSgpe3JldHVybiB0aGlzLm1vdXNlVXBTdGFydD9NYXRoLm1heCgwLHRoaXMuaW5pdGlhbE9wYWNpdHktdGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqdGhpcy5vcGFjaXR5RGVjYXlWZWxvY2l0eSk6dGhpcy5pbml0aWFsT3BhY2l0eX0sZ2V0IG91dGVyT3BhY2l0eSgpe3JldHVybiBNYXRoLm1heCgwLApNYXRoLm1pbiguMyp0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyx0aGlzLm9wYWNpdHkpKX0sZ2V0IGlzT3BhY2l0eUZ1bGx5RGVjYXllZCgpe3JldHVybi4wMT50aGlzLm9wYWNpdHkmJnRoaXMucmFkaXVzPj1NYXRoLm1pbih0aGlzLm1heFJhZGl1cyxjLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsYy5NQVhfUkFESVVTKX0sZ2V0IGlzQW5pbWF0aW9uQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/dGhpcy5pc09wYWNpdHlGdWxseURlY2F5ZWQ6dGhpcy5pc1Jlc3RpbmdBdE1heFJhZGl1c30sZ2V0IHRyYW5zbGF0aW9uRnJhY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oMSx0aGlzLnJhZGl1cy90aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSoyL01hdGguc3FydCgyKSl9LGdldCB4Tm93KCl7cmV0dXJuIHRoaXMueEVuZD8KdGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLnNsaWRlRGlzdGFuY2U9dGhpcy55RW5kPXRoaXMueEVuZD10aGlzLnlTdGFydD10aGlzLnhTdGFydD10aGlzLm1vdXNlVXBTdGFydD10aGlzLm1vdXNlRG93blN0YXJ0PXRoaXMubWF4UmFkaXVzPTA7dGhpcy5jb250YWluZXJNZXRyaWNzPW5ldyBhKHRoaXMuZWxlbWVudCl9LGRyYXc6ZnVuY3Rpb24oKXt0aGlzLndhdmUuc3R5bGUub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGY9dGhpcy5yYWRpdXMvCih0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKTt2YXIgZz10aGlzLnhOb3ctdGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLzI7dmFyIGw9dGhpcy55Tm93LXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIitnKyJweCwgIitsKyJweCkiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZTNkKCIrZysicHgsICIrbCsicHgsIDApIjt0aGlzLndhdmUuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJzY2FsZSgiK2YrIiwiK2YrIikiO3RoaXMud2F2ZS5zdHlsZS50cmFuc2Zvcm09InNjYWxlM2QoIitmKyIsIitmKyIsMSkifSxkb3duQWN0aW9uOmZ1bmN0aW9uKGYpe3ZhciBnPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLGw9dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yO3RoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCk7dGhpcy5tb3VzZURvd25TdGFydD0KZC5ub3coKTt0aGlzLmNlbnRlcj8odGhpcy54U3RhcnQ9Zyx0aGlzLnlTdGFydD1sLHRoaXMuc2xpZGVEaXN0YW5jZT1kLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKToodGhpcy54U3RhcnQ9Zj9mLmRldGFpbC54LXRoaXMuY29udGFpbmVyTWV0cmljcy5ib3VuZGluZ1JlY3QubGVmdDp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMix0aGlzLnlTdGFydD1mP2YuZGV0YWlsLnktdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC50b3A6dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yKTt0aGlzLnJlY2VudGVycyYmKHRoaXMueEVuZD1nLHRoaXMueUVuZD1sLHRoaXMuc2xpZGVEaXN0YW5jZT1kLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKTt0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsCnRoaXMueVN0YXJ0KTt0aGlzLndhdmVDb250YWluZXIuc3R5bGUudG9wPSh0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCI7dGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmxlZnQ9KHRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSkvMisicHgiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9dGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUrInB4In0sdXBBY3Rpb246ZnVuY3Rpb24oKXt0aGlzLmlzTW91c2VEb3duJiYodGhpcy5tb3VzZVVwU3RhcnQ9ZC5ub3coKSl9LHJlbW92ZTpmdW5jdGlvbigpe1BvbHltZXIuZG9tKHRoaXMud2F2ZUNvbnRhaW5lci5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07UG9seW1lcih7aXM6InBhcGVyLXJpcHBsZSIsCmJlaGF2aW9yczpbUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcl0scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSwKZ2V0IHRhcmdldCgpe3JldHVybiB0aGlzLmtleUV2ZW50VGFyZ2V0fSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfb25FbnRlcktleWRvd24iLCJzcGFjZTprZXlkb3duIjoiX29uU3BhY2VLZXlkb3duIiwic3BhY2U6a2V5dXAiOiJfb25TcGFjZUtleXVwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt2YXIgZj10aGlzLmtleUV2ZW50VGFyZ2V0PTExPT10aGlzLnBhcmVudE5vZGUubm9kZVR5cGU/UG9seW1lci5kb20odGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLnBhcmVudE5vZGU7dGhpcy5saXN0ZW4oZiwidXAiLCJ1aVVwQWN0aW9uIik7dGhpcy5saXN0ZW4oZiwiZG93biIsInVpRG93bkFjdGlvbiIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcy5rZXlFdmVudFRhcmdldCwidXAiLCJ1aVVwQWN0aW9uIik7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJkb3duIiwidWlEb3duQWN0aW9uIik7dGhpcy5rZXlFdmVudFRhcmdldD0KbnVsbH0sZ2V0IHNob3VsZEtlZXBBbmltYXRpbmcoKXtmb3IodmFyIGY9MDtmPHRoaXMucmlwcGxlcy5sZW5ndGg7KytmKWlmKCF0aGlzLnJpcHBsZXNbZl0uaXNBbmltYXRpb25Db21wbGV0ZSlyZXR1cm4hMDtyZXR1cm4hMX0sc2ltdWxhdGVkUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5kb3duQWN0aW9uKG51bGwpO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnVwQWN0aW9uKCl9LDEpfSx1aURvd25BY3Rpb246ZnVuY3Rpb24oZil7dGhpcy5ub2lua3x8dGhpcy5kb3duQWN0aW9uKGYpfSxkb3duQWN0aW9uOmZ1bmN0aW9uKGYpe3RoaXMuaG9sZERvd24mJjA8dGhpcy5yaXBwbGVzLmxlbmd0aHx8KHRoaXMuYWRkUmlwcGxlKCkuZG93bkFjdGlvbihmKSx0aGlzLl9hbmltYXRpbmd8fCh0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpKX0sdWlVcEFjdGlvbjpmdW5jdGlvbihmKXt0aGlzLm5vaW5rfHx0aGlzLnVwQWN0aW9uKGYpfSx1cEFjdGlvbjpmdW5jdGlvbihmKXt0aGlzLmhvbGREb3dufHwKKHRoaXMucmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2cudXBBY3Rpb24oZil9KSx0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpfSxvbkFuaW1hdGlvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW5nPSExO3RoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1udWxsO3RoaXMuZmlyZSgidHJhbnNpdGlvbmVuZCIpfSxhZGRSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZj1uZXcgYyh0aGlzKTtQb2x5bWVyLmRvbSh0aGlzLiQud2F2ZXMpLmFwcGVuZENoaWxkKGYud2F2ZUNvbnRhaW5lcik7dGhpcy4kLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZENvbG9yPWYuY29sb3I7dGhpcy5yaXBwbGVzLnB1c2goZik7dGhpcy5fc2V0QW5pbWF0aW5nKCEwKTtyZXR1cm4gZn0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGYpe3ZhciBnPXRoaXMucmlwcGxlcy5pbmRleE9mKGYpOzA+Z3x8KHRoaXMucmlwcGxlcy5zcGxpY2UoZywxKSxmLnJlbW92ZSgpLAp0aGlzLnJpcHBsZXMubGVuZ3RofHx0aGlzLl9zZXRBbmltYXRpbmcoITEpKX0sYW5pbWF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2FuaW1hdGluZyl7dmFyIGY7Zm9yKGY9MDtmPHRoaXMucmlwcGxlcy5sZW5ndGg7KytmKXt2YXIgZz10aGlzLnJpcHBsZXNbZl07Zy5kcmF3KCk7dGhpcy4kLmJhY2tncm91bmQuc3R5bGUub3BhY2l0eT1nLm91dGVyT3BhY2l0eTtnLmlzT3BhY2l0eUZ1bGx5RGVjYXllZCYmIWcuaXNSZXN0aW5nQXRNYXhSYWRpdXMmJnRoaXMucmVtb3ZlUmlwcGxlKGcpfWlmKHRoaXMuc2hvdWxkS2VlcEFuaW1hdGluZ3x8MCE9PXRoaXMucmlwcGxlcy5sZW5ndGgpd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZEFuaW1hdGUpO2Vsc2UgdGhpcy5vbkFuaW1hdGlvbkNvbXBsZXRlKCl9fSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpO3RoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSwKX29uU3BhY2VLZXl1cDpmdW5jdGlvbigpe3RoaXMudWlVcEFjdGlvbigpfSxfaG9sZERvd25DaGFuZ2VkOmZ1bmN0aW9uKGYsZyl7dm9pZCAwIT09ZyYmKGY/dGhpcy5kb3duQWN0aW9uKCk6dGhpcy51cEFjdGlvbigpKX19KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItYmVoYXZpb3JzL3BhcGVyLXJpcHBsZS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJSaXBwbGVCZWhhdmlvcj17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlSW1wbC5fZG93bkhhbmRsZXIuY2FsbCh0aGlzLGEpO3RoaXMucHJlc3NlZCYmdGhpcy5lbnN1cmVSaXBwbGUoYSl9LGVuc3VyZVJpcHBsZTpmdW5jdGlvbihhKXtpZighdGhpcy5oYXNSaXBwbGUoKSl7dGhpcy5fcmlwcGxlPXRoaXMuX2NyZWF0ZVJpcHBsZSgpO3RoaXMuX3JpcHBsZS5ub2luaz10aGlzLm5vaW5rO3ZhciBjPXRoaXMuX3JpcHBsZUNvbnRhaW5lcnx8dGhpcy5yb290O2MmJlBvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKHRoaXMuX3JpcHBsZSk7aWYoYSl7Yz0KUG9seW1lci5kb20odGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzKTt2YXIgZD1Qb2x5bWVyLmRvbShhKS5yb290VGFyZ2V0O2MuZGVlcENvbnRhaW5zKGQpJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKGEpfX19LGdldFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZW5zdXJlUmlwcGxlKCk7cmV0dXJuIHRoaXMuX3JpcHBsZX0saGFzUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9yaXBwbGV9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGFwZXItcmlwcGxlIil9LF9ub2lua0NoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ub2luaz1hKX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLWJlaGF2aW9ycy9wYXBlci1idXR0b24tYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLlBhcGVyQnV0dG9uQmVoYXZpb3JJbXBsPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgYT0xO3RoaXMuZGlzYWJsZWQ/YT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/YT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGE9Myk7dGhpcy5fc2V0RWxldmF0aW9uKGEpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oYSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLAphKX0sX3NwYWNlS2V5RG93bkhhbmRsZXI6ZnVuY3Rpb24oYSl7UG9seW1lci5Jcm9uQnV0dG9uU3RhdGVJbXBsLl9zcGFjZUtleURvd25IYW5kbGVyLmNhbGwodGhpcyxhKTt0aGlzLmhhc1JpcHBsZSgpJiYxPnRoaXMuZ2V0UmlwcGxlKCkucmlwcGxlcy5sZW5ndGgmJnRoaXMuX3JpcHBsZS51aURvd25BY3Rpb24oKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlSW1wbC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGEpO3RoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fTtQb2x5bWVyLlBhcGVyQnV0dG9uQmVoYXZpb3I9W1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlLFBvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3IsUG9seW1lci5QYXBlckJ1dHRvbkJlaGF2aW9ySW1wbF07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItYnV0dG9uL3BhcGVyLWJ1dHRvbi5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbUG9seW1lci5QYXBlckJ1dHRvbkJlaGF2aW9yXSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP1BvbHltZXIuUGFwZXJCdXR0b25CZWhhdmlvckltcGwuX2NhbGN1bGF0ZUVsZXZhdGlvbi5hcHBseSh0aGlzKTp0aGlzLl9zZXRFbGV2YXRpb24oMCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1tZXRhL2lyb24tbWV0YS5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIuSXJvbk1ldGE9ZnVuY3Rpb24oYyl7UG9seW1lci5Jcm9uTWV0YVsiICJdKGMpO3RoaXMudHlwZT1jJiZjLnR5cGV8fCJkZWZhdWx0Ijt0aGlzLmtleT1jJiZjLmtleTtjJiYidmFsdWUiaW4gYyYmKHRoaXMudmFsdWU9Yy52YWx1ZSl9O1BvbHltZXIuSXJvbk1ldGFbIiAiXT1mdW5jdGlvbigpe307UG9seW1lci5Jcm9uTWV0YS50eXBlcz17fTtQb2x5bWVyLklyb25NZXRhLnByb3RvdHlwZT17Z2V0IHZhbHVlKCl7dmFyIGM9dGhpcy50eXBlLGQ9dGhpcy5rZXk7aWYoYyYmZClyZXR1cm4gUG9seW1lci5Jcm9uTWV0YS50eXBlc1tjXSYmUG9seW1lci5Jcm9uTWV0YS50eXBlc1tjXVtkXX0sc2V0IHZhbHVlKGMpe3ZhciBkPXRoaXMudHlwZSxmPXRoaXMua2V5O2QmJmYmJihkPVBvbHltZXIuSXJvbk1ldGEudHlwZXNbZF09UG9seW1lci5Jcm9uTWV0YS50eXBlc1tkXXx8e30sbnVsbD09Yz9kZWxldGUgZFtmXTpkW2ZdPWMpfSxnZXQgbGlzdCgpe2lmKHRoaXMudHlwZSl7dmFyIGM9ClBvbHltZXIuSXJvbk1ldGEudHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gYz9PYmplY3Qua2V5cyhjKS5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGFbdGhpcy50eXBlXVtkXX0sdGhpcyk6W119fSxieUtleTpmdW5jdGlvbihjKXt0aGlzLmtleT1jO3JldHVybiB0aGlzLnZhbHVlfX07dmFyIGE9UG9seW1lci5Jcm9uTWV0YS50eXBlcztQb2x5bWVyKHtpczoiaXJvbi1tZXRhIixwcm9wZXJ0aWVzOnt0eXBlOnt0eXBlOlN0cmluZyx2YWx1ZToiZGVmYXVsdCJ9LGtleTp7dHlwZTpTdHJpbmd9LHZhbHVlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGY6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX3NlbGZDaGFuZ2VkIn0sX19tZXRhOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9fY29tcHV0ZU1ldGEodHlwZSwga2V5LCB2YWx1ZSkifX0saG9zdEF0dHJpYnV0ZXM6e2hpZGRlbjohMH0sX19jb21wdXRlTWV0YTpmdW5jdGlvbihjLGQsZil7Yz1uZXcgUG9seW1lci5Jcm9uTWV0YSh7dHlwZTpjLAprZXk6ZH0pO3ZvaWQgMCE9PWYmJmYhPT1jLnZhbHVlP2MudmFsdWU9Zjp0aGlzLnZhbHVlIT09Yy52YWx1ZSYmKHRoaXMudmFsdWU9Yy52YWx1ZSk7cmV0dXJuIGN9LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oYyl7YyYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGMpe3JldHVybihuZXcgUG9seW1lci5Jcm9uTWV0YSh7dHlwZTp0aGlzLnR5cGUsa2V5OmN9KSkudmFsdWV9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tdmFsaWRhdGFibGUtYmVoYXZpb3IvaXJvbi12YWxpZGF0YWJsZS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JNZXRhPW51bGw7ClBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e3ZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGludmFsaWQ6e25vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaW52YWxpZENoYW5nZWQifX0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe1BvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JNZXRhPW5ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOiJ2YWxpZGF0b3IifSl9LF9pbnZhbGlkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuaW52YWxpZD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWludmFsaWQiKX0sZ2V0IF92YWxpZGF0b3IoKXtyZXR1cm4gUG9seW1lci5Jcm9uVmFsaWRhdGFibGVCZWhhdmlvck1ldGEmJlBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JNZXRhLmJ5S2V5KHRoaXMudmFsaWRhdG9yKX0saGFzVmFsaWRhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPQp0aGlzLl92YWxpZGF0b3J9LHZhbGlkYXRlOmZ1bmN0aW9uKGEpe3RoaXMuaW52YWxpZD12b2lkIDA9PT1hJiZ2b2lkIDAhPT10aGlzLnZhbHVlPyF0aGlzLl9nZXRWYWxpZGl0eSh0aGlzLnZhbHVlKTohdGhpcy5fZ2V0VmFsaWRpdHkoYSk7cmV0dXJuIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShhKTohMH19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tZm9ybS1lbGVtZW50LWJlaGF2aW9yL2lyb24tZm9ybS1lbGVtZW50LWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uRm9ybUVsZW1lbnRCZWhhdmlvcj17cHJvcGVydGllczp7bmFtZTp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wYXJlbnRGb3JtOnt0eXBlOk9iamVjdH19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5FbGVtZW50fHx0aGlzLmZpcmUoImlyb24tZm9ybS1lbGVtZW50LXJlZ2lzdGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7IVBvbHltZXIuRWxlbWVudCYmdGhpcy5fcGFyZW50Rm9ybSYmdGhpcy5fcGFyZW50Rm9ybS5maXJlKCJpcm9uLWZvcm0tZWxlbWVudC11bnJlZ2lzdGVyIix7dGFyZ2V0OnRoaXN9KX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tY2hlY2tlZC1lbGVtZW50LWJlaGF2aW9yL2lyb24tY2hlY2tlZC1lbGVtZW50LWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvckltcGw9e3Byb3BlcnRpZXM6e2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsbm90aWZ5OiEwLG9ic2VydmVyOiJfY2hlY2tlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIixvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcmVxdWlyZWRDaGFuZ2VkKHJlcXVpcmVkKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNJcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcj0hMH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwKInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yZXF1aXJlZCIpfSxfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT10aGlzLmNoZWNrZWQ7dGhpcy5maXJlKCJpcm9uLWNoYW5nZSIpfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy52YWx1ZXx8bnVsbD09PXRoaXMudmFsdWUpdGhpcy52YWx1ZT0ib24ifX07UG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcj1bUG9seW1lci5Jcm9uRm9ybUVsZW1lbnRCZWhhdmlvcixQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yLFBvbHltZXIuSXJvbkNoZWNrZWRFbGVtZW50QmVoYXZpb3JJbXBsXTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1iZWhhdmlvcnMvcGFwZXItaW5reS1mb2N1cy1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJJbmt5Rm9jdXNCZWhhdmlvckltcGw9e29ic2VydmVyczpbIl9mb2N1c2VkQ2hhbmdlZChyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSJdLF9mb2N1c2VkQ2hhbmdlZDpmdW5jdGlvbihhKXthJiZ0aGlzLmVuc3VyZVJpcHBsZSgpO3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUuaG9sZERvd249YSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgYT1Qb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3IuX2NyZWF0ZVJpcHBsZSgpO2EuaWQ9ImluayI7YS5zZXRBdHRyaWJ1dGUoImNlbnRlciIsIiIpO2EuY2xhc3NMaXN0LmFkZCgiY2lyY2xlIik7cmV0dXJuIGF9fTtQb2x5bWVyLlBhcGVySW5reUZvY3VzQmVoYXZpb3I9W1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlLFBvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3IsUG9seW1lci5QYXBlcklua3lGb2N1c0JlaGF2aW9ySW1wbF07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItYmVoYXZpb3JzL3BhcGVyLWNoZWNrZWQtZWxlbWVudC1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJDaGVja2VkRWxlbWVudEJlaGF2aW9ySW1wbD17X2NoZWNrZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvckltcGwuX2NoZWNrZWRDaGFuZ2VkLmNhbGwodGhpcyk7dGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuY2hlY2tlZD90aGlzLl9yaXBwbGUuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiIik6dGhpcy5fcmlwcGxlLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpKX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe1BvbHltZXIuUGFwZXJSaXBwbGVCZWhhdmlvci5fYnV0dG9uU3RhdGVDaGFuZ2VkLmNhbGwodGhpcyk7IXRoaXMuZGlzYWJsZWQmJnRoaXMuaXNBdHRhY2hlZCYmKHRoaXMuY2hlY2tlZD10aGlzLmFjdGl2ZSl9fTsKUG9seW1lci5QYXBlckNoZWNrZWRFbGVtZW50QmVoYXZpb3I9W1BvbHltZXIuUGFwZXJJbmt5Rm9jdXNCZWhhdmlvcixQb2x5bWVyLklyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yLFBvbHltZXIuUGFwZXJDaGVja2VkRWxlbWVudEJlaGF2aW9ySW1wbF07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItY2hlY2tib3gvcGFwZXItY2hlY2tib3guaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItY2hlY2tib3giLGJlaGF2aW9yczpbUG9seW1lci5QYXBlckNoZWNrZWRFbGVtZW50QmVoYXZpb3JdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJjaGVja2JveCIsImFyaWEtY2hlY2tlZCI6ITEsdGFiaW5kZXg6MH0scHJvcGVydGllczp7YXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtY2hlY2tlZCJ9fSxhdHRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLGZ1bmN0aW9uKCl7aWYoIi0xcHgiPT09dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKSl7dmFyIGE9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplIikudHJpbSgpLGM9InB4IixkPWEubWF0Y2goL1tBLVphLXpdKyQvKTtudWxsIT09ZCYmKGM9ZFswXSk7YT1wYXJzZUZsb2F0KGEpOwpkPTgvMyphOyJweCI9PT1jJiYoZD1NYXRoLmZsb29yKGQpLGQlMiE9PWElMiYmZCsrKTt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUiOmQrY30pfX0pfSxfY29tcHV0ZUNoZWNrYm94Q2xhc3M6ZnVuY3Rpb24oYSxjKXt2YXIgZD0iIjthJiYoZCs9ImNoZWNrZWQgIik7YyYmKGQrPSJpbnZhbGlkIik7cmV0dXJuIGR9LF9jb21wdXRlQ2hlY2ttYXJrQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/IiI6ImhpZGRlbiJ9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyO3JldHVybiBQb2x5bWVyLlBhcGVySW5reUZvY3VzQmVoYXZpb3JJbXBsLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9pcm9uLWljb24vaXJvbi1pY29uLmh0bWwuanMKUG9seW1lcih7aXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOlBvbHltZXIuQmFzZS5jcmVhdGUoImlyb24tbWV0YSIse3R5cGU6Imljb25zZXQifSl9fSxvYnNlcnZlcnM6WyJfdXBkYXRlSWNvbihfbWV0YSwgaXNBdHRhY2hlZCkiLCJfdXBkYXRlSWNvbih0aGVtZSwgaXNBdHRhY2hlZCkiLCJfc3JjQ2hhbmdlZChzcmMsIGlzQXR0YWNoZWQpIiwiX2ljb25DaGFuZ2VkKGljb24sIGlzQXR0YWNoZWQpIl0sX0RFRkFVTFRfSUNPTlNFVDoiaWNvbnMiLF9pY29uQ2hhbmdlZDpmdW5jdGlvbihhKXthPShhfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT1hLnBvcCgpO3RoaXMuX2ljb25zZXROYW1lPWEucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVDt0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWNvbigpfSwKX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJlBvbHltZXIuZG9tKHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSwiIj09PXRoaXMuX2ljb25OYW1lP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKCh0aGlzLl9pY29uc2V0PXRoaXMuX21ldGEuYnlLZXkodGhpcy5faWNvbnNldE5hbWUpKT8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJgp0aGlzLl9pY29uc2V0LnJlbW92ZUljb24odGhpcyksdGhpcy5faW1nfHwodGhpcy5faW1nPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpLHRoaXMuX2ltZy5zdHlsZS53aWR0aD0iMTAwJSIsdGhpcy5faW1nLnN0eWxlLmhlaWdodD0iMTAwJSIsdGhpcy5faW1nLmRyYWdnYWJsZT0hMSksdGhpcy5faW1nLnNyYz10aGlzLnNyYyxQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLmFwcGVuZENoaWxkKHRoaXMuX2ltZykpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tYTExeS1hbm5vdW5jZXIvaXJvbi1hMTF5LWFubm91bmNlci5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIuSXJvbkExMXlBbm5vdW5jZXI9ZnVuY3Rpb24oKXt9O1BvbHltZXIuSXJvbkExMXlBbm5vdW5jZXI9UG9seW1lcih7aXM6Imlyb24tYTExeS1hbm5vdW5jZXIiLHByb3BlcnRpZXM6e21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwb2xpdGUifSxfdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uQTExeUFubm91bmNlci5pbnN0YW5jZXx8KFBvbHltZXIuSXJvbkExMXlBbm5vdW5jZXIuaW5zdGFuY2U9dGhpcyk7ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJpcm9uLWFubm91bmNlIix0aGlzLl9vbklyb25Bbm5vdW5jZS5iaW5kKHRoaXMpKX0sYW5ub3VuY2U6ZnVuY3Rpb24oYSl7dGhpcy5fdGV4dD0iIjt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fdGV4dD1hfSwxMDApfSxfb25Jcm9uQW5ub3VuY2U6ZnVuY3Rpb24oYSl7YS5kZXRhaWwmJmEuZGV0YWlsLnRleHQmJnRoaXMuYW5ub3VuY2UoYS5kZXRhaWwudGV4dCl9fSk7ClBvbHltZXIuSXJvbkExMXlBbm5vdW5jZXIuaW5zdGFuY2U9bnVsbDtQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLnJlcXVlc3RBdmFpbGFiaWxpdHk9ZnVuY3Rpb24oKXtQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLmluc3RhbmNlfHwoUG9seW1lci5Jcm9uQTExeUFubm91bmNlci5pbnN0YW5jZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLWExMXktYW5ub3VuY2VyIikpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoUG9seW1lci5Jcm9uQTExeUFubm91bmNlci5pbnN0YW5jZSl9fSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9pcm9uLWlucHV0L2lyb24taW5wdXQuaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOntiaW5kVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSx2YWx1ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVmFsdWUoYmluZFZhbHVlKSJ9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dEVsZW1lbnQ6T2JqZWN0fSxvYnNlcnZlcnM6WyJfYmluZFZhbHVlQ2hhbmdlZChiaW5kVmFsdWUsIF9pbnB1dEVsZW1lbnQpIl0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQiLGtleXByZXNzOiJfb25LZXlwcmVzcyJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLnJlcXVlc3RBdmFpbGFiaWxpdHkoKTt0aGlzLl9wcmV2aW91c1ZhbGlkSW5wdXQ9IiI7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSExfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPQpQb2x5bWVyLmRvbSh0aGlzKS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24oKXt0aGlzLl9pbml0U2xvdHRlZElucHV0KCl9LmJpbmQodGhpcykpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiYoUG9seW1lci5kb20odGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpLHRoaXMuX29ic2VydmVyPW51bGwpfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudH0sX2luaXRTbG90dGVkSW5wdXQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnB1dEVsZW1lbnQ9dGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpWzBdO3RoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLmlucHV0RWxlbWVudC52YWx1ZSYmKHRoaXMuYmluZFZhbHVlPXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlKTt0aGlzLmZpcmUoImlyb24taW5wdXQtcmVhZHkiKX0sZ2V0IF9wYXR0ZXJuUmVnRXhwKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybil2YXIgYT1uZXcgUmVnRXhwKHRoaXMuYWxsb3dlZFBhdHRlcm4pOwplbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlICJudW1iZXIiOmE9L1swLTkuLGUtXS99cmV0dXJuIGF9LF9iaW5kVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmKHZvaWQgMD09PWE/Yy52YWx1ZT1udWxsOmEhPT1jLnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9YSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmF9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7IXRoaXMuYWxsb3dlZFBhdHRlcm58fHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZHx8dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKXx8KHRoaXMuX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcigiSW52YWxpZCBzdHJpbmcgb2YgY2hhcmFjdGVycyBub3QgZW50ZXJlZC4iKSx0aGlzLmlucHV0RWxlbWVudC52YWx1ZT10aGlzLl9wcmV2aW91c1ZhbGlkSW5wdXQpO3RoaXMuYmluZFZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0KdGhpcy5pbnB1dEVsZW1lbnQudmFsdWU7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSExfSxfaXNQcmludGFibGU6ZnVuY3Rpb24oYSl7dmFyIGM9MTk9PWEua2V5Q29kZXx8MjA9PWEua2V5Q29kZXx8NDU9PWEua2V5Q29kZXx8NDY9PWEua2V5Q29kZXx8MTQ0PT1hLmtleUNvZGV8fDE0NT09YS5rZXlDb2RlfHwzMjxhLmtleUNvZGUmJjQxPmEua2V5Q29kZXx8MTExPGEua2V5Q29kZSYmMTI0PmEua2V5Q29kZTtyZXR1cm4hKDg9PWEua2V5Q29kZXx8OT09YS5rZXlDb2RlfHwxMz09YS5rZXlDb2RlfHwyNz09YS5rZXlDb2RlKSYmISgwPT1hLmNoYXJDb2RlJiZjKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oYSl7aWYodGhpcy5hbGxvd2VkUGF0dGVybnx8Im51bWJlciI9PT10aGlzLmlucHV0RWxlbWVudC50eXBlKXt2YXIgYz10aGlzLl9wYXR0ZXJuUmVnRXhwO2lmKGMmJiEoYS5tZXRhS2V5fHxhLmN0cmxLZXl8fGEuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPQohMDt2YXIgZD1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuY2hhckNvZGUpO3RoaXMuX2lzUHJpbnRhYmxlKGEpJiYhYy50ZXN0KGQpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcigiSW52YWxpZCBjaGFyYWN0ZXIgIitkKyIgbm90IGVudGVyZWQuIikpfX19LF9jaGVja1BhdHRlcm5WYWxpZGl0eTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BhdHRlcm5SZWdFeHA7aWYoIWEpcmV0dXJuITA7Zm9yKHZhciBjPTA7Yzx0aGlzLmlucHV0RWxlbWVudC52YWx1ZS5sZW5ndGg7YysrKWlmKCFhLnRlc3QodGhpcy5pbnB1dEVsZW1lbnQudmFsdWVbY10pKXJldHVybiExO3JldHVybiEwfSx2YWxpZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmlucHV0RWxlbWVudClyZXR1cm4gdGhpcy5pbnZhbGlkPSExLCEwO3ZhciBhPXRoaXMuaW5wdXRFbGVtZW50LmNoZWNrVmFsaWRpdHkoKTthJiYodGhpcy5yZXF1aXJlZCYmIiI9PT10aGlzLmJpbmRWYWx1ZT9hPSExOgp0aGlzLmhhc1ZhbGlkYXRvcigpJiYoYT1Qb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKTt0aGlzLmludmFsaWQ9IWE7dGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIik7cmV0dXJuIGF9LF9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXI6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJpcm9uLWFubm91bmNlIix7dGV4dDphfSl9LF9jb21wdXRlVmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLlBhcGVySW5wdXRIZWxwZXI9e307UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRMYWJlbElEPTE7UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRBZGRvbklEPTE7UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRJbnB1dElEPTE7ClBvbHltZXIuUGFwZXJJbnB1dEJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7bGFiZWw6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnZhbGlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LHR5cGU6e3R5cGU6U3RyaW5nfSxsaXN0Ont0eXBlOlN0cmluZ30scGF0dGVybjp7dHlwZTpTdHJpbmd9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGVycm9yTWVzc2FnZTp7dHlwZTpTdHJpbmd9LGNoYXJDb3VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxhdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLAp2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9hdXRvZm9jdXNDaGFuZ2VkIn0saW5wdXRtb2RlOnt0eXBlOlN0cmluZ30sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbWluOnt0eXBlOlN0cmluZ30sbWF4Ont0eXBlOlN0cmluZ30sc3RlcDp7dHlwZTpTdHJpbmd9LG5hbWU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHJlYWRvbmx5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNpemU6e3R5cGU6TnVtYmVyfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxhdXRvY29ycmVjdDp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9zYXZlOnt0eXBlOlN0cmluZ30scmVzdWx0czp7dHlwZTpOdW1iZXJ9LGFjY2VwdDp7dHlwZTpTdHJpbmd9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW59LF9hcmlhRGVzY3JpYmVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSwKX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7dGhpcy4kfHwodGhpcy4kPXt9KTt0aGlzLiQuaW5wdXR8fCh0aGlzLl9nZW5lcmF0ZUlucHV0SWQoKSx0aGlzLiQuaW5wdXQ9dGhpcy4kJCgiIyIrdGhpcy5faW5wdXRJZCkpO3JldHVybiB0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PSJkYXRlIGRhdGV0aW1lIGRhdGV0aW1lLWxvY2FsIG1vbnRoIHRpbWUgd2VlayBmaWxlIi5zcGxpdCgiICIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCk7CiFQb2x5bWVyLkVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50JiYtMSE9PXRoaXMuX3R5cGVzVGhhdEhhdmVUZXh0LmluZGV4T2YodGhpcy5pbnB1dEVsZW1lbnQudHlwZSkmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApfSxfYXBwZW5kU3RyaW5nV2l0aFNwYWNlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE/YSsiICIrYzpjfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGEpe2E9UG9seW1lci5kb20oYSkucm9vdFRhcmdldDtpZihhLmlkKXRoaXMuX2FyaWFEZXNjcmliZWRCeT10aGlzLl9hcHBlbmRTdHJpbmdXaXRoU3BhY2UodGhpcy5fYXJpYURlc2NyaWJlZEJ5LGEuaWQpO2Vsc2V7dmFyIGM9InBhcGVyLWlucHV0LWFkZC1vbi0iK1BvbHltZXIuUGFwZXJJbnB1dEhlbHBlci5OZXh0QWRkb25JRCsrO2EuaWQ9Yzt0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxjKX19LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnZhbGlkYXRlKCl9LApfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihhKXtQb2x5bWVyLklyb25Db250cm9sU3RhdGUuX2ZvY3VzQmx1ckhhbmRsZXIuY2FsbCh0aGlzLGEpO3RoaXMuZm9jdXNlZCYmIXRoaXMuX3NoaWZ0VGFiUHJlc3NlZCYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITA7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKTt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixhKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGEpe3RyeXt2YXIgYz0KdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7dGhpcy52YWx1ZT1hO3RoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0PWM7dGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kPWN9Y2F0Y2goZCl7dGhpcy52YWx1ZT1hfX0sX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGN8fGF9LF91cGRhdGVBcmlhTGFiZWxsZWRCeTpmdW5jdGlvbigpe3ZhciBhPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcigibGFiZWwiKTtpZihhKXtpZihhLmlkKXZhciBjPWEuaWQ7ZWxzZSBjPSJwYXBlci1pbnB1dC1sYWJlbC0iK1BvbHltZXIuUGFwZXJJbnB1dEhlbHBlci5OZXh0TGFiZWxJRCsrLGEuaWQ9Yzt0aGlzLl9hcmlhTGFiZWxsZWRCeT1jfWVsc2UgdGhpcy5fYXJpYUxhYmVsbGVkQnk9IiJ9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnB1dElkJiYiIiE9PXRoaXMuX2lucHV0SWR8fCh0aGlzLl9pbnB1dElkPQoiaW5wdXQtIitQb2x5bWVyLlBhcGVySW5wdXRIZWxwZXIuTmV4dElucHV0SUQrKyl9LF9vbkNoYW5nZTpmdW5jdGlvbihhKXt0aGlzLnNoYWRvd1Jvb3QmJnRoaXMuZmlyZShhLnR5cGUse3NvdXJjZUV2ZW50OmF9LHtub2RlOnRoaXMsYnViYmxlczphLmJ1YmJsZXMsY2FuY2VsYWJsZTphLmNhbmNlbGFibGV9KX0sX2F1dG9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9mb2N1cyYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCl7dmFyIGE9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDthIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmEhPT1kb2N1bWVudC5ib2R5JiZhIT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX07UG9seW1lci5QYXBlcklucHV0QmVoYXZpb3I9W1BvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLFBvbHltZXIuUGFwZXJJbnB1dEJlaGF2aW9ySW1wbF07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtYWRkb24tYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLlBhcGVySW5wdXRBZGRvbkJlaGF2aW9yPXthdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuZmlyZSgiYWRkb24tYXR0YWNoZWQiKX0sdXBkYXRlOmZ1bmN0aW9uKCl7fX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtY2hhci1jb3VudGVyLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltQb2x5bWVyLlBhcGVySW5wdXRBZGRvbkJlaGF2aW9yXSxwcm9wZXJ0aWVzOntfY2hhckNvdW50ZXJTdHI6e3R5cGU6U3RyaW5nLHZhbHVlOiIwIn19LHVwZGF0ZTpmdW5jdGlvbihhKXtpZihhLmlucHV0RWxlbWVudCl7YS52YWx1ZT1hLnZhbHVlfHwiIjt2YXIgYz1hLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7YS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKGMrPSIvIithLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKTt0aGlzLl9jaGFyQ291bnRlclN0cj1jfX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1pbnB1dC9wYXBlci1pbnB1dC1jb250YWluZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItaW5wdXQtY29udGFpbmVyIixwcm9wZXJ0aWVzOntub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWx3YXlzRmxvYXRMYWJlbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdHRyRm9yVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJiaW5kLXZhbHVlIn0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e29ic2VydmVyOiJfaW52YWxpZENoYW5nZWQiLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZm9jdXNlZDp7cmVhZE9ubHk6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sX2FkZG9uczp7dHlwZTpBcnJheX0sX2lucHV0SGFzQ29udGVudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRTZWxlY3Rvcjp7dHlwZTpTdHJpbmcsdmFsdWU6ImlucHV0LGlyb24taW5wdXQsdGV4dGFyZWEsLnBhcGVyLWlucHV0LWlucHV0In0sX2JvdW5kT25Gb2N1czp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkZvY3VzLmJpbmQodGhpcyl9fSwKX2JvdW5kT25CbHVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQmx1ci5iaW5kKHRoaXMpfX0sX2JvdW5kT25JbnB1dDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbklucHV0LmJpbmQodGhpcyl9fSxfYm91bmRWYWx1ZUNoYW5nZWQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25WYWx1ZUNoYW5nZWQuYmluZCh0aGlzKX19fSxsaXN0ZW5lcnM6eyJhZGRvbi1hdHRhY2hlZCI6Il9vbkFkZG9uQXR0YWNoZWQiLCJpcm9uLWlucHV0LXZhbGlkYXRlIjoiX29uSXJvbklucHV0VmFsaWRhdGUifSxnZXQgX3ZhbHVlQ2hhbmdlZEV2ZW50KCl7cmV0dXJuIHRoaXMuYXR0ckZvclZhbHVlKyItY2hhbmdlZCJ9LGdldCBfcHJvcGVydHlGb3JWYWx1ZSgpe3JldHVybiBQb2x5bWVyLkNhc2VNYXAuZGFzaFRvQ2FtZWxDYXNlKHRoaXMuYXR0ckZvclZhbHVlKX0sZ2V0IF9pbnB1dEVsZW1lbnQoKXtyZXR1cm4gUG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3Rvcih0aGlzLl9pbnB1dFNlbGVjdG9yKX0sCmdldCBfaW5wdXRFbGVtZW50VmFsdWUoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50W3RoaXMuX3Byb3BlcnR5Rm9yVmFsdWVdfHx0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWV9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMDt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kT25Gb2N1cywhMCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZE9uQmx1ciwhMCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5hdHRyRm9yVmFsdWU/dGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fdmFsdWVDaGFuZ2VkRXZlbnQsdGhpcy5fYm91bmRWYWx1ZUNoYW5nZWQpOnRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHRoaXMuX29uSW5wdXQpO3RoaXMuX2lucHV0RWxlbWVudFZhbHVlJiYiIiE9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU/CnRoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihhKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO2E9YS50YXJnZXQ7LTE9PT10aGlzLl9hZGRvbnMuaW5kZXhPZihhKSYmKHRoaXMuX2FkZG9ucy5wdXNoKGEpLHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KSl9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMCl9LF9vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9zZXRGb2N1c2VkKCExKTt0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25JbnB1dDpmdW5jdGlvbihhKXt0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZShhLnRhcmdldCl9LF9vblZhbHVlQ2hhbmdlZDpmdW5jdGlvbihhKXt2YXIgYz0KYS50YXJnZXQ7aWYodGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdm9pZCAwPT09Yy52YWx1ZXx8IiI9PT1jLnZhbHVlKSlyZXR1cm47dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoYS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7Y3x8MD09PWN8fCJudW1iZXIiPT09YS50eXBlJiYhYS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMTt0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmEsdmFsdWU6YyxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oYSl7dGhpcy5hdXRvVmFsaWRhdGUmJmEmJih0aGlzLmludmFsaWQ9IShhLnZhbGlkYXRlP2EudmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50VmFsdWUpOmEuY2hlY2tWYWxpZGl0eSgpKSk7CnRoaXMuX2hhbmRsZVZhbHVlKGEpfSxfb25Jcm9uSW5wdXRWYWxpZGF0ZTpmdW5jdGlvbigpe3RoaXMuaW52YWxpZD10aGlzLl9pbnB1dEVsZW1lbnQuaW52YWxpZH0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fYWRkb25zJiZ0aGlzLnVwZGF0ZUFkZG9ucyh7aW52YWxpZDp0aGlzLmludmFsaWR9KX0sdXBkYXRlQWRkb25zOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPTA7Yz10aGlzLl9hZGRvbnNbZF07ZCsrKWMudXBkYXRlKGEpfSxfY29tcHV0ZUlucHV0Q29udGVudENsYXNzOmZ1bmN0aW9uKGEsYyxkLGYsZyl7dmFyIGw9ImlucHV0LWNvbnRlbnQiO2E/KGcmJihsKz0iIGxhYmVsLWlzLWhpZGRlbiIpLGYmJihsKz0iIGlzLWludmFsaWQiKSk6KGE9dGhpcy5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpLGN8fGc/KGwrPSIgbGFiZWwtaXMtZmxvYXRpbmciLHRoaXMuJC5sYWJlbEFuZElucHV0Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiLGY/bCs9IiBpcy1pbnZhbGlkIjoKZCYmKGwrPSIgbGFiZWwtaXMtaGlnaGxpZ2h0ZWQiKSk6KGEmJih0aGlzLiQubGFiZWxBbmRJbnB1dENvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxmJiYobCs9IiBpcy1pbnZhbGlkIikpKTtkJiYobCs9IiBmb2N1c2VkIik7cmV0dXJuIGx9LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oYSxjKXt2YXIgZD0idW5kZXJsaW5lIjtjP2QrPSIgaXMtaW52YWxpZCI6YSYmKGQrPSIgaXMtaGlnaGxpZ2h0ZWQiKTtyZXR1cm4gZH0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihhLGMpe3ZhciBkPSJhZGQtb24tY29udGVudCI7Yz9kKz0iIGlzLWludmFsaWQiOmEmJihkKz0iIGlzLWhpZ2hsaWdodGVkIik7cmV0dXJuIGR9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtZXJyb3IuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbUG9seW1lci5QYXBlcklucHV0QWRkb25CZWhhdmlvcl0scHJvcGVydGllczp7aW52YWxpZDp7cmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbn19LHVwZGF0ZTpmdW5jdGlvbihhKXt0aGlzLl9zZXRJbnZhbGlkKGEuaW52YWxpZCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItaW5wdXQiLGJlaGF2aW9yczpbUG9seW1lci5QYXBlcklucHV0QmVoYXZpb3IsUG9seW1lci5Jcm9uRm9ybUVsZW1lbnRCZWhhdmlvcl0scHJvcGVydGllczp7dmFsdWU6e3R5cGU6U3RyaW5nfX0sYmVmb3JlUmVnaXN0ZXI6ZnVuY3Rpb24oKXt2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1pbnB1dCIpLl9pbml0U2xvdHRlZElucHV0PyJ2MSI6InYwIixjPVBvbHltZXIuRG9tTW9kdWxlLmltcG9ydCgicGFwZXItaW5wdXQiLCJ0ZW1wbGF0ZSIpO2E9UG9seW1lci5Eb21Nb2R1bGUuaW1wb3J0KCJwYXBlci1pbnB1dCIsInRlbXBsYXRlIyIrYSk7KGM9Yy5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoIiN0ZW1wbGF0ZS1wbGFjZWhvbGRlciIpKSYmYy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChhLmNvbnRlbnQsYyl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiBQb2x5bWVyLkVsZW1lbnQ/dGhpcy5pbnB1dEVsZW1lbnQuX2lucHV0RWxlbWVudDoKdGhpcy5pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpO3RoaXMuaW5wdXRFbGVtZW50JiYtMSE9PXRoaXMuX3R5cGVzVGhhdEhhdmVUZXh0LmluZGV4T2YodGhpcy4kLm5hdGl2ZUlucHV0LnR5cGUpJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKTt0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9pcm9uLWZpdC1iZWhhdmlvci9pcm9uLWZpdC1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvbkZpdEJlaGF2aW9yPXtwcm9wZXJ0aWVzOntzaXppbmdUYXJnZXQ6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSxmaXRJbnRvOnt0eXBlOk9iamVjdCx2YWx1ZTp3aW5kb3d9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxwb3NpdGlvblRhcmdldDp7dHlwZTpFbGVtZW50fSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZ30sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LGF1dG9GaXRPbkF0dGFjaDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz90aGlzLmZpdEludG8uaW5uZXJXaWR0aDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9LApnZXQgX2ZpdEhlaWdodCgpe3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/dGhpcy5maXRJbnRvLmlubmVySGVpZ2h0OnRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHR9LGdldCBfZml0TGVmdCgpe3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/MDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH0sZ2V0IF9maXRUb3AoKXtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93PzA6dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcH0sZ2V0IF9kZWZhdWx0UG9zaXRpb25UYXJnZXQoKXt2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlO2EmJmEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihhPWEuaG9zdCk7cmV0dXJuIGF9LGdldCBfbG9jYWxlSG9yaXpvbnRhbEFsaWduKCl7aWYodGhpcy5faXNSVEwpe2lmKCJyaWdodCI9PT10aGlzLmhvcml6b250YWxBbGlnbilyZXR1cm4ibGVmdCI7CmlmKCJsZWZ0Ij09PXRoaXMuaG9yaXpvbnRhbEFsaWduKXJldHVybiJyaWdodCJ9cmV0dXJuIHRoaXMuaG9yaXpvbnRhbEFsaWdufSxnZXQgX19zaG91bGRQb3NpdGlvbigpe3JldHVybih0aGlzLmhvcml6b250YWxBbGlnbnx8dGhpcy52ZXJ0aWNhbEFsaWduKSYmdGhpcy5wb3NpdGlvblRhcmdldH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXsidW5kZWZpbmVkIj09PXR5cGVvZiB0aGlzLl9pc1JUTCYmKHRoaXMuX2lzUlRMPSJydGwiPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb24pO3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0O3RoaXMuYXV0b0ZpdE9uQXR0YWNoJiYoIm5vbmUiPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSwKdGhpcy5maXQoKSkpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX19kZWZlcnJlZEZpdCYmKGNsZWFyVGltZW91dCh0aGlzLl9fZGVmZXJyZWRGaXQpLHRoaXMuX19kZWZlcnJlZEZpdD1udWxsKX0sZml0OmZ1bmN0aW9uKCl7dGhpcy5wb3NpdGlvbigpO3RoaXMuY29uc3RyYWluKCk7dGhpcy5jZW50ZXIoKX0sX2Rpc2NvdmVySW5mbzpmdW5jdGlvbigpe2lmKCF0aGlzLl9maXRJbmZvKXt2YXIgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKSxjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuc2l6aW5nVGFyZ2V0KTt0aGlzLl9maXRJbmZvPXtpbmxpbmVTdHlsZTp7dG9wOnRoaXMuc3R5bGUudG9wfHwiIixsZWZ0OnRoaXMuc3R5bGUubGVmdHx8IiIscG9zaXRpb246dGhpcy5zdHlsZS5wb3NpdGlvbnx8IiJ9LHNpemVySW5saW5lU3R5bGU6e21heFdpZHRoOnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRofHwiIixtYXhIZWlnaHQ6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4SGVpZ2h0fHwKIiIsYm94U2l6aW5nOnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZ3x8IiJ9LHBvc2l0aW9uZWRCeTp7dmVydGljYWxseToiYXV0byIhPT1hLnRvcD8idG9wIjoiYXV0byIhPT1hLmJvdHRvbT8iYm90dG9tIjpudWxsLGhvcml6b250YWxseToiYXV0byIhPT1hLmxlZnQ/ImxlZnQiOiJhdXRvIiE9PWEucmlnaHQ/InJpZ2h0IjpudWxsfSxzaXplZEJ5OntoZWlnaHQ6Im5vbmUiIT09Yy5tYXhIZWlnaHQsd2lkdGg6Im5vbmUiIT09Yy5tYXhXaWR0aCxtaW5XaWR0aDpwYXJzZUludChjLm1pbldpZHRoLDEwKXx8MCxtaW5IZWlnaHQ6cGFyc2VJbnQoYy5taW5IZWlnaHQsMTApfHwwfSxtYXJnaW46e3RvcDpwYXJzZUludChhLm1hcmdpblRvcCwxMCl8fDAscmlnaHQ6cGFyc2VJbnQoYS5tYXJnaW5SaWdodCwxMCl8fDAsYm90dG9tOnBhcnNlSW50KGEubWFyZ2luQm90dG9tLDEwKXx8MCxsZWZ0OnBhcnNlSW50KGEubWFyZ2luTGVmdCwxMCl8fDB9fX19LHJlc2V0Rml0OmZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMuX2ZpdEluZm98fHt9LGM7Zm9yKGMgaW4gYS5zaXplcklubGluZVN0eWxlKXRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlW2NdPWEuc2l6ZXJJbmxpbmVTdHlsZVtjXTtmb3IoYyBpbiBhLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbY109YS5pbmxpbmVTdHlsZVtjXTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCxjPXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCk7dGhpcy5maXQoKTt0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWE7dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPWN9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCI7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Ijt0aGlzLnN0eWxlLmxlZnQ9IjBweCI7CnRoaXMuc3R5bGUudG9wPSIwcHgiO3ZhciBhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5wb3NpdGlvblRhcmdldCksZD10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxmPXRoaXMuX2ZpdEluZm8ubWFyZ2luLGc9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24se3dpZHRoOmEud2lkdGgrZi5sZWZ0K2YucmlnaHQsaGVpZ2h0OmEuaGVpZ2h0K2YudG9wK2YuYm90dG9tfSxhLGMsZCk7Yz1nLmxlZnQrZi5sZWZ0O2c9Zy50b3ArZi50b3A7dmFyIGw9TWF0aC5taW4oZC5yaWdodC1mLnJpZ2h0LGMrYS53aWR0aCksaz1NYXRoLm1pbihkLmJvdHRvbS1mLmJvdHRvbSxnK2EuaGVpZ2h0KTtjPU1hdGgubWF4KGQubGVmdCtmLmxlZnQsTWF0aC5taW4oYyxsLXRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5XaWR0aCkpO2c9TWF0aC5tYXgoZC50b3ArCmYudG9wLE1hdGgubWluKGcsay10aGlzLl9maXRJbmZvLnNpemVkQnkubWluSGVpZ2h0KSk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9TWF0aC5tYXgobC1jLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5XaWR0aCkrInB4Ijt0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9TWF0aC5tYXgoay1nLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpKyJweCI7dGhpcy5zdHlsZS5sZWZ0PWMtYS5sZWZ0KyJweCI7dGhpcy5zdHlsZS50b3A9Zy1hLnRvcCsicHgifX0sY29uc3RyYWluOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbil7dGhpcy5fZGlzY292ZXJJbmZvKCk7dmFyIGE9dGhpcy5fZml0SW5mbzthLnBvc2l0aW9uZWRCeS52ZXJ0aWNhbGx5fHwodGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHRoaXMuc3R5bGUudG9wPSIwcHgiKTthLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsCnRoaXMuc3R5bGUubGVmdD0iMHB4Iik7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Ijt2YXIgYz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Euc2l6ZWRCeS5oZWlnaHR8fHRoaXMuX19zaXplRGltZW5zaW9uKGMsYS5wb3NpdGlvbmVkQnkudmVydGljYWxseSwidG9wIiwiYm90dG9tIiwiSGVpZ2h0Iik7YS5zaXplZEJ5LndpZHRofHx0aGlzLl9fc2l6ZURpbWVuc2lvbihjLGEucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseSwibGVmdCIsInJpZ2h0IiwiV2lkdGgiKX19LF9zaXplRGltZW5zaW9uOmZ1bmN0aW9uKGEsYyxkLGYsZyl7dGhpcy5fX3NpemVEaW1lbnNpb24oYSxjLGQsZixnKX0sX19zaXplRGltZW5zaW9uOmZ1bmN0aW9uKGEsYyxkLGYsZyl7dmFyIGw9dGhpcy5fZml0SW5mbyxrPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2s9IldpZHRoIj09PWc/ay53aWR0aDprLmhlaWdodDtjPWM9PT1mO3ZhciBuPQoib2Zmc2V0IitnO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlWyJtYXgiK2ddPWstbC5tYXJnaW5bYz9kOmZdLShjP2stYVtmXTphW2RdKS0odGhpc1tuXS10aGlzLnNpemluZ1RhcmdldFtuXSkrInB4In0sY2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbil7dGhpcy5fZGlzY292ZXJJbmZvKCk7dmFyIGE9dGhpcy5fZml0SW5mby5wb3NpdGlvbmVkQnk7aWYoIWEudmVydGljYWxseXx8IWEuaG9yaXpvbnRhbGx5KXt0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCI7YS52ZXJ0aWNhbGx5fHwodGhpcy5zdHlsZS50b3A9IjBweCIpO2EuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5sZWZ0PSIwcHgiKTt2YXIgYz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMuZml0SW50byk7YS52ZXJ0aWNhbGx5fHwodGhpcy5zdHlsZS50b3A9ZC50b3AtYy50b3ArKGQuaGVpZ2h0LWMuaGVpZ2h0KS8yKyJweCIpO2EuaG9yaXpvbnRhbGx5fHwKKHRoaXMuc3R5bGUubGVmdD1kLmxlZnQtYy5sZWZ0KyhkLndpZHRoLWMud2lkdGgpLzIrInB4Iil9fX0sX19nZXROb3JtYWxpemVkUmVjdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8YT09PXdpbmRvdz97dG9wOjAsbGVmdDowLHdpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHQscmlnaHQ6d2luZG93LmlubmVyV2lkdGgsYm90dG9tOndpbmRvdy5pbm5lckhlaWdodH06YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sX19nZXRPZmZzY3JlZW5BcmVhOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gTWF0aC5hYnMoTWF0aC5taW4oMCxhLnRvcCkrTWF0aC5taW4oMCxkLmJvdHRvbS0oYS50b3ArYy5oZWlnaHQpKSkqYy53aWR0aCtNYXRoLmFicyhNYXRoLm1pbigwLGEubGVmdCkrTWF0aC5taW4oMCxkLnJpZ2h0LShhLmxlZnQrYy53aWR0aCkpKSpjLmhlaWdodH0sX19nZXRQb3NpdGlvbjpmdW5jdGlvbihhLGMsCmQsZixnLGwpe3ZhciBrPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDpnLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6Zy5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmcudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpnLnJpZ2h0LWQud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDpnLmJvdHRvbS1kLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6Zy5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmcuYm90dG9tLWQuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDpnLnJpZ2h0LWQud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07CmlmKHRoaXMubm9PdmVybGFwKXtmb3IodmFyIG49MCxwPWsubGVuZ3RoO248cDtuKyspe3ZhciBxPXt9LHI7Zm9yKHIgaW4ga1tuXSlxW3JdPWtbbl1bcl07ay5wdXNoKHEpfWtbMF0udG9wPWtbMV0udG9wKz1nLmhlaWdodDtrWzJdLnRvcD1rWzNdLnRvcC09Zy5oZWlnaHQ7a1s0XS5sZWZ0PWtbNl0ubGVmdCs9Zy53aWR0aDtrWzVdLmxlZnQ9a1s3XS5sZWZ0LT1nLndpZHRofWM9ImF1dG8iPT09Yz9udWxsOmM7YT0iYXV0byI9PT1hP251bGw6YTthJiYiY2VudGVyIiE9PWF8fChrLnB1c2goe3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDpnLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9nLmhlaWdodDowKSxsZWZ0OmcubGVmdC1mLndpZHRoLzIrZy53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pLGsucHVzaCh7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmcuYm90dG9tLQpkLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9nLmhlaWdodDowKSxsZWZ0OmcubGVmdC1mLndpZHRoLzIrZy53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKTtjJiYibWlkZGxlIiE9PWN8fChrLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6Zy50b3AtZi5oZWlnaHQvMitnLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpnLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9nLndpZHRoOjApfSksay5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpnLnRvcC1mLmhlaWdodC8yK2cuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmcucmlnaHQtZC53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2cud2lkdGg6MCl9KSk7Im1pZGRsZSI9PT1jJiYiY2VudGVyIj09PQphJiZrLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDpnLnRvcC1mLmhlaWdodC8yK2cuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmcubGVmdC1mLndpZHRoLzIrZy53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pO2ZvcihuPTA7bjxrLmxlbmd0aDtuKyspe2Y9a1tuXTtnPWYudmVydGljYWxBbGlnbj09PWM7cD1mLmhvcml6b250YWxBbGlnbj09PWE7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJmcmJnApe3ZhciB0PWY7YnJlYWt9cT0oIWN8fGcpJiYoIWF8fHApO2lmKHRoaXMuZHluYW1pY0FsaWdufHxxKXtmLm9mZnNjcmVlbkFyZWE9dGhpcy5fX2dldE9mZnNjcmVlbkFyZWEoZixkLGwpO2lmKDA9PT1mLm9mZnNjcmVlbkFyZWEmJnEpe3Q9ZjticmVha310PXR8fGY7cT1mLm9mZnNjcmVlbkFyZWEtdC5vZmZzY3JlZW5BcmVhO2lmKDA+cXx8MD09PXEmJihnfHxwKSl0PWZ9fXJldHVybiB0fX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1yZXNpemFibGUtYmVoYXZpb3IvaXJvbi1yZXNpemFibGUtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcj17cHJvcGVydGllczp7X3BhcmVudFJlc2l6YWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9wYXJlbnRSZXNpemFibGVDaGFuZ2VkIn0sX25vdGlmeWluZ0Rlc2NlbmRhbnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGxpc3RlbmVyczp7Imlyb24tcmVxdWVzdC1yZXNpemUtbm90aWZpY2F0aW9ucyI6Il9vbklyb25SZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucyJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcz1bXTt0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZT10aGlzLm5vdGlmeVJlc2l6ZS5iaW5kKHRoaXMpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50UmVzaXphYmxlP3RoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKTp3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIiwKdGhpcy5fYm91bmROb3RpZnlSZXNpemUpO3RoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMucmVzaXplclNob3VsZE5vdGlmeShhKSYmdGhpcy5fbm90aWZ5RGVzY2VuZGFudChhKX0sdGhpcyksdGhpcy5fZmlyZVJlc2l6ZSgpKX0sYXNzaWduUGFyZW50UmVzaXphYmxlOmZ1bmN0aW9uKGEpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT1hfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGEpOy0xPGMmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UoYywxKSx0aGlzLnVubGlzdGVuKGEsImlyb24tcmVzaXplIiwiX29uRGVzY2VuZGFudElyb25SZXNpemUiKSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sCl9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGEpe3RoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQ/YS5zdG9wUHJvcGFnYXRpb24oKTpQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvd3x8dGhpcy5fZmlyZVJlc2l6ZSgpfSxfZmlyZVJlc2l6ZTpmdW5jdGlvbigpe3RoaXMuZmlyZSgiaXJvbi1yZXNpemUiLG51bGwse25vZGU6dGhpcyxidWJibGVzOiExfSl9LF9vbklyb25SZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbihhKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5yb290VGFyZ2V0O2MhPT10aGlzJiYoLTE9PT10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGMpJiYodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMucHVzaChjKSx0aGlzLmxpc3RlbihjLCJpcm9uLXJlc2l6ZSIsIl9vbkRlc2NlbmRhbnRJcm9uUmVzaXplIikpLGMuYXNzaWduUGFyZW50UmVzaXphYmxlKHRoaXMpLHRoaXMuX25vdGlmeURlc2NlbmRhbnQoYyksYS5zdG9wUHJvcGFnYXRpb24oKSl9LApfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihhKXthJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGEpe3RoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQ9ITAsYS5ub3RpZnlSZXNpemUoKSx0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSExKX0sX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0F0dGFjaGVkKWlmKCJsb2FkaW5nIj09PWRvY3VtZW50LnJlYWR5U3RhdGUpe3ZhciBhPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gZCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGQpO2EoKX0pfWVsc2UgdGhpcy5maXJlKCJpcm9uLXJlcXVlc3QtcmVzaXplLW5vdGlmaWNhdGlvbnMiLApudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlfHwod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1vdmVybGF5LWJlaGF2aW9yL2lyb24tb3ZlcmxheS1iYWNrZHJvcC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJpcm9uLW92ZXJsYXktYmFja2Ryb3AiLHByb3BlcnRpZXM6e29wZW5lZDp7cmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifX0sbGlzdGVuZXJzOnt0cmFuc2l0aW9uZW5kOiJfb25UcmFuc2l0aW9uZW5kIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCl9LHByZXBhcmU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmIXRoaXMucGFyZW50Tm9kZSYmUG9seW1lci5kb20oZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQodGhpcyl9LG9wZW46ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMX0sY29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZHx8dGhpcy5wYXJlbnROb2RlIT09CmRvY3VtZW50LmJvZHl8fFBvbHltZXIuZG9tKHRoaXMucGFyZW50Tm9kZSkucmVtb3ZlQ2hpbGQodGhpcyl9LF9vblRyYW5zaXRpb25lbmQ6ZnVuY3Rpb24oYSl7YSYmYS50YXJnZXQ9PT10aGlzJiZ0aGlzLmNvbXBsZXRlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe2E/dGhpcy5wcmVwYXJlKCk6KGE9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyksIjBzIiE9PWEudHJhbnNpdGlvbkR1cmF0aW9uJiYwIT1hLm9wYWNpdHl8fHRoaXMuY29tcGxldGUoKSk7dGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbDt0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLAp0aGlzLm9wZW5lZCl9LmJpbmQodGhpcykpKX19KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1vdmVybGF5LWJlaGF2aW9yL2lyb24tb3ZlcmxheS1tYW5hZ2VyLmh0bWwuanMKUG9seW1lci5Jcm9uT3ZlcmxheU1hbmFnZXJDbGFzcz1mdW5jdGlvbigpe3RoaXMuX292ZXJsYXlzPVtdO3RoaXMuX21pbmltdW1aPTEwMTt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbDtQb2x5bWVyLkdlc3R1cmVzLmFkZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfTsKUG9seW1lci5Jcm9uT3ZlcmxheU1hbmFnZXJDbGFzcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBvbHltZXIuSXJvbk92ZXJsYXlNYW5hZ2VyQ2xhc3MsZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3RoaXMuX2JhY2tkcm9wRWxlbWVudHx8KHRoaXMuX2JhY2tkcm9wRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLW92ZXJsYXktYmFja2Ryb3AiKSk7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH0sZ2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIGE9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDthJiYhMSE9PWEgaW5zdGFuY2VvZiBFbGVtZW50fHwoYT1kb2N1bWVudC5ib2R5KTtmb3IoO2Eucm9vdCYmUG9seW1lci5kb20oYS5yb290KS5hY3RpdmVFbGVtZW50OylhPVBvbHltZXIuZG9tKGEucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gYX0sX2JyaW5nT3ZlcmxheUF0SW5kZXhUb0Zyb250OmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuX292ZXJsYXlzW2FdO2lmKGMpe3ZhciBkPQp0aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxmPXRoaXMuX292ZXJsYXlzW2RdO2YmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShjLGYpJiZkLS07aWYoIShhPj1kKSl7Zj1NYXRoLm1heCh0aGlzLmN1cnJlbnRPdmVybGF5WigpLHRoaXMuX21pbmltdW1aKTtmb3IodGhpcy5fZ2V0WihjKTw9ZiYmdGhpcy5fYXBwbHlPdmVybGF5WihjLGYpO2E8ZDspdGhpcy5fb3ZlcmxheXNbYV09dGhpcy5fb3ZlcmxheXNbYSsxXSxhKys7dGhpcy5fb3ZlcmxheXNbZF09Y319fSxhZGRPclJlbW92ZU92ZXJsYXk6ZnVuY3Rpb24oYSl7YS5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KGEpOnRoaXMucmVtb3ZlT3ZlcmxheShhKX0sYWRkT3ZlcmxheTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl9vdmVybGF5cy5pbmRleE9mKGEpO2lmKDA8PWMpdGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQoYyk7ZWxzZXtjPXRoaXMuX292ZXJsYXlzLmxlbmd0aDt2YXIgZD10aGlzLl9vdmVybGF5c1tjLTFdLGY9Ck1hdGgubWF4KHRoaXMuX2dldFooZCksdGhpcy5fbWluaW11bVopLGc9dGhpcy5fZ2V0WihhKTtkJiZ0aGlzLl9zaG91bGRCZUJlaGluZE92ZXJsYXkoYSxkKSYmKHRoaXMuX2FwcGx5T3ZlcmxheVooZCxmKSxjLS0sZj1NYXRoLm1heCh0aGlzLl9nZXRaKHRoaXMuX292ZXJsYXlzW2MtMV0pLHRoaXMuX21pbmltdW1aKSk7Zzw9ZiYmdGhpcy5fYXBwbHlPdmVybGF5WihhLGYpO3RoaXMuX292ZXJsYXlzLnNwbGljZShjLDAsYSl9dGhpcy50cmFja0JhY2tkcm9wKCl9LHJlbW92ZU92ZXJsYXk6ZnVuY3Rpb24oYSl7YT10aGlzLl9vdmVybGF5cy5pbmRleE9mKGEpOy0xIT09YSYmKHRoaXMuX292ZXJsYXlzLnNwbGljZShhLDEpLHRoaXMudHJhY2tCYWNrZHJvcCgpKX0sY3VycmVudE92ZXJsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdGhpcy5fb3ZlcmxheXMubGVuZ3RoLTFdfSxjdXJyZW50T3ZlcmxheVo6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0Wih0aGlzLmN1cnJlbnRPdmVybGF5KCkpfSwKZW5zdXJlTWluaW11bVo6ZnVuY3Rpb24oYSl7dGhpcy5fbWluaW11bVo9TWF0aC5tYXgodGhpcy5fbWluaW11bVosYSl9LGZvY3VzT3ZlcmxheTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VycmVudE92ZXJsYXkoKTthJiZhLl9hcHBseUZvY3VzKCl9LHRyYWNrQmFja2Ryb3A6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7aWYoYXx8dGhpcy5fYmFja2Ryb3BFbGVtZW50KXRoaXMuYmFja2Ryb3BFbGVtZW50LnN0eWxlLnpJbmRleD10aGlzLl9nZXRaKGEpLTEsdGhpcy5iYWNrZHJvcEVsZW1lbnQub3BlbmVkPSEhYSx0aGlzLmJhY2tkcm9wRWxlbWVudC5wcmVwYXJlKCl9LGdldEJhY2tkcm9wczpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxjPTA7Yzx0aGlzLl9vdmVybGF5cy5sZW5ndGg7YysrKXRoaXMuX292ZXJsYXlzW2NdLndpdGhCYWNrZHJvcCYmYS5wdXNoKHRoaXMuX292ZXJsYXlzW2NdKTtyZXR1cm4gYX0sYmFja2Ryb3BaOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0KMX0sX292ZXJsYXlXaXRoQmFja2Ryb3A6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fb3ZlcmxheXMubGVuZ3RoLTE7MDw9YTthLS0paWYodGhpcy5fb3ZlcmxheXNbYV0ud2l0aEJhY2tkcm9wKXJldHVybiB0aGlzLl9vdmVybGF5c1thXX0sX2dldFo6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5fbWluaW11bVo7YSYmKGE9TnVtYmVyKGEuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS56SW5kZXgpLGE9PT1hJiYoYz1hKSk7cmV0dXJuIGN9LF9zZXRaOmZ1bmN0aW9uKGEsYyl7YS5zdHlsZS56SW5kZXg9Y30sX2FwcGx5T3ZlcmxheVo6ZnVuY3Rpb24oYSxjKXt0aGlzLl9zZXRaKGEsYysyKX0sX292ZXJsYXlJblBhdGg6ZnVuY3Rpb24oYSl7YT1hfHxbXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLl9tYW5hZ2VyPT09dGhpcylyZXR1cm4gYVtjXX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0KMTtpZigtMSE9PWMpZm9yKHZhciBkPVBvbHltZXIuZG9tKGEpLnBhdGgsZjsoZj10aGlzLl9vdmVybGF5c1tjXSkmJnRoaXMuX292ZXJsYXlJblBhdGgoZCkhPT1mOylpZihmLl9vbkNhcHR1cmVDbGljayhhKSxmLmFsbG93Q2xpY2tUaHJvdWdoKWMtLTtlbHNlIGJyZWFrfSxfb25DYXB0dXJlRm9jdXM6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5jdXJyZW50T3ZlcmxheSgpO2MmJmMuX29uQ2FwdHVyZUZvY3VzKGEpfSxfb25DYXB0dXJlS2V5RG93bjpmdW5jdGlvbihhKXt2YXIgYz10aGlzLmN1cnJlbnRPdmVybGF5KCk7YyYmKFBvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3Iua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGEsImVzYyIpP2MuX29uQ2FwdHVyZUVzYyhhKTpQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyhhLCJ0YWIiKSYmYy5fb25DYXB0dXJlVGFiKGEpKX0sX3Nob3VsZEJlQmVoaW5kT3ZlcmxheTpmdW5jdGlvbihhLGMpe3JldHVybiFhLmFsd2F5c09uVG9wJiYKYy5hbHdheXNPblRvcH19O1BvbHltZXIuSXJvbk92ZXJsYXlNYW5hZ2VyPW5ldyBQb2x5bWVyLklyb25PdmVybGF5TWFuYWdlckNsYXNzOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tb3ZlcmxheS1iZWhhdmlvci9pcm9uLXNjcm9sbC1tYW5hZ2VyLmh0bWwuanMKKGZ1bmN0aW9uKCl7dmFyIGE9MCxjPTAsZD1udWxsLGY9W10sZz1bIndoZWVsIiwibW91c2V3aGVlbCIsIkRPTU1vdXNlU2Nyb2xsIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSJdO1BvbHltZXIuSXJvblNjcm9sbE1hbmFnZXI9e2dldCBjdXJyZW50TG9ja2luZ0VsZW1lbnQoKXtyZXR1cm4gdGhpcy5fbG9ja2luZ0VsZW1lbnRzW3RoaXMuX2xvY2tpbmdFbGVtZW50cy5sZW5ndGgtMV19LGVsZW1lbnRJc1Njcm9sbExvY2tlZDpmdW5jdGlvbihsKXt2YXIgaz10aGlzLmN1cnJlbnRMb2NraW5nRWxlbWVudDtpZih2b2lkIDA9PT1rKXJldHVybiExO2lmKHRoaXMuX2hhc0NhY2hlZExvY2tlZEVsZW1lbnQobCkpcmV0dXJuITA7aWYodGhpcy5faGFzQ2FjaGVkVW5sb2NrZWRFbGVtZW50KGwpKXJldHVybiExOyhrPSEhayYmayE9PWwmJiF0aGlzLl9jb21wb3NlZFRyZWVDb250YWlucyhrLGwpKT90aGlzLl9sb2NrZWRFbGVtZW50Q2FjaGUucHVzaChsKTp0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZS5wdXNoKGwpOwpyZXR1cm4ga30scHVzaFNjcm9sbExvY2s6ZnVuY3Rpb24obCl7MDw9dGhpcy5fbG9ja2luZ0VsZW1lbnRzLmluZGV4T2YobCl8fCgwPT09dGhpcy5fbG9ja2luZ0VsZW1lbnRzLmxlbmd0aCYmdGhpcy5fbG9ja1Njcm9sbEludGVyYWN0aW9ucygpLHRoaXMuX2xvY2tpbmdFbGVtZW50cy5wdXNoKGwpLHRoaXMuX2xvY2tlZEVsZW1lbnRDYWNoZT1bXSx0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZT1bXSl9LHJlbW92ZVNjcm9sbExvY2s6ZnVuY3Rpb24obCl7bD10aGlzLl9sb2NraW5nRWxlbWVudHMuaW5kZXhPZihsKTstMSE9PWwmJih0aGlzLl9sb2NraW5nRWxlbWVudHMuc3BsaWNlKGwsMSksdGhpcy5fbG9ja2VkRWxlbWVudENhY2hlPVtdLHRoaXMuX3VubG9ja2VkRWxlbWVudENhY2hlPVtdLDA9PT10aGlzLl9sb2NraW5nRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl91bmxvY2tTY3JvbGxJbnRlcmFjdGlvbnMoKSl9LF9sb2NraW5nRWxlbWVudHM6W10sX2xvY2tlZEVsZW1lbnRDYWNoZTpudWxsLApfdW5sb2NrZWRFbGVtZW50Q2FjaGU6bnVsbCxfaGFzQ2FjaGVkTG9ja2VkRWxlbWVudDpmdW5jdGlvbihsKXtyZXR1cm4tMTx0aGlzLl9sb2NrZWRFbGVtZW50Q2FjaGUuaW5kZXhPZihsKX0sX2hhc0NhY2hlZFVubG9ja2VkRWxlbWVudDpmdW5jdGlvbihsKXtyZXR1cm4tMTx0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZS5pbmRleE9mKGwpfSxfY29tcG9zZWRUcmVlQ29udGFpbnM6ZnVuY3Rpb24obCxrKXt2YXIgbixwO2lmKGwuY29udGFpbnMoaykpcmV0dXJuITA7bD1Qb2x5bWVyLmRvbShsKS5xdWVyeVNlbGVjdG9yQWxsKCJjb250ZW50LHNsb3QiKTtmb3Iobj0wO248bC5sZW5ndGg7KytuKXt2YXIgcT1Qb2x5bWVyLmRvbShsW25dKS5nZXREaXN0cmlidXRlZE5vZGVzKCk7Zm9yKHA9MDtwPHEubGVuZ3RoOysrcClpZihxW3BdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuX2NvbXBvc2VkVHJlZUNvbnRhaW5zKHFbcF0saykpcmV0dXJuITB9cmV0dXJuITF9LF9zY3JvbGxJbnRlcmFjdGlvbkhhbmRsZXI6ZnVuY3Rpb24obCl7bC5jYW5jZWxhYmxlJiYKdGhpcy5fc2hvdWxkUHJldmVudFNjcm9sbGluZyhsKSYmbC5wcmV2ZW50RGVmYXVsdCgpO2wudGFyZ2V0VG91Y2hlcyYmKGw9bC50YXJnZXRUb3VjaGVzWzBdLGE9bC5wYWdlWCxjPWwucGFnZVkpfSxfbG9ja1Njcm9sbEludGVyYWN0aW9uczpmdW5jdGlvbigpe3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXJ8fHRoaXMuX3Njcm9sbEludGVyYWN0aW9uSGFuZGxlci5iaW5kKHRoaXMpO2Zvcih2YXIgbD0wLGs9Zy5sZW5ndGg7bDxrO2wrKylkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGdbbF0sdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX0sX3VubG9ja1Njcm9sbEludGVyYWN0aW9uczpmdW5jdGlvbigpe2Zvcih2YXIgbD0wLGs9Zy5sZW5ndGg7bDxrO2wrKylkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGdbbF0sdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX0sCl9zaG91bGRQcmV2ZW50U2Nyb2xsaW5nOmZ1bmN0aW9uKGwpe3ZhciBrPVBvbHltZXIuZG9tKGwpLnJvb3RUYXJnZXQ7InRvdWNobW92ZSIhPT1sLnR5cGUmJmQhPT1rJiYoZD1rLGY9dGhpcy5fZ2V0U2Nyb2xsYWJsZU5vZGVzKFBvbHltZXIuZG9tKGwpLnBhdGgpKTtpZighZi5sZW5ndGgpcmV0dXJuITA7aWYoInRvdWNoc3RhcnQiPT09bC50eXBlKXJldHVybiExO2w9dGhpcy5fZ2V0U2Nyb2xsSW5mbyhsKTtyZXR1cm4hdGhpcy5fZ2V0U2Nyb2xsaW5nTm9kZShmLGwuZGVsdGFYLGwuZGVsdGFZKX0sX2dldFNjcm9sbGFibGVOb2RlczpmdW5jdGlvbihsKXtmb3IodmFyIGs9W10sbj1sLmluZGV4T2YodGhpcy5jdXJyZW50TG9ja2luZ0VsZW1lbnQpLHA9MDtwPD1uO3ArKylpZihsW3BdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBxPWxbcF0scj1xLnN0eWxlOyJzY3JvbGwiIT09ci5vdmVyZmxvdyYmImF1dG8iIT09ci5vdmVyZmxvdyYmKHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUocSkpOwoic2Nyb2xsIiE9PXIub3ZlcmZsb3cmJiJhdXRvIiE9PXIub3ZlcmZsb3d8fGsucHVzaChxKX1yZXR1cm4ga30sX2dldFNjcm9sbGluZ05vZGU6ZnVuY3Rpb24obCxrLG4pe2lmKGt8fG4pZm9yKHZhciBwPU1hdGguYWJzKG4pPj1NYXRoLmFicyhrKSxxPTA7cTxsLmxlbmd0aDtxKyspe3ZhciByPWxbcV07aWYocD8wPm4/MDxyLnNjcm9sbFRvcDpyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLmNsaWVudEhlaWdodDowPms/MDxyLnNjcm9sbExlZnQ6ci5zY3JvbGxMZWZ0PHIuc2Nyb2xsV2lkdGgtci5jbGllbnRXaWR0aClyZXR1cm4gcn19LF9nZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKGwpe3ZhciBrPXtkZWx0YVg6bC5kZWx0YVgsZGVsdGFZOmwuZGVsdGFZfTsiZGVsdGFYImluIGx8fCgid2hlZWxEZWx0YVgiaW4gbCYmIndoZWVsRGVsdGFZImluIGw/KGsuZGVsdGFYPS1sLndoZWVsRGVsdGFYLGsuZGVsdGFZPS1sLndoZWVsRGVsdGFZKToid2hlZWxEZWx0YSJpbiBsPyhrLmRlbHRhWD0KMCxrLmRlbHRhWT0tbC53aGVlbERlbHRhKToiYXhpcyJpbiBsPyhrLmRlbHRhWD0xPT09bC5heGlzP2wuZGV0YWlsOjAsay5kZWx0YVk9Mj09PWwuYXhpcz9sLmRldGFpbDowKTpsLnRhcmdldFRvdWNoZXMmJihsPWwudGFyZ2V0VG91Y2hlc1swXSxrLmRlbHRhWD1hLWwucGFnZVgsay5kZWx0YVk9Yy1sLnBhZ2VZKSk7cmV0dXJuIGt9fX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1vdmVybGF5LWJlaGF2aW9yL2lyb24tZm9jdXNhYmxlcy1oZWxwZXIuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT1FbGVtZW50LnByb3RvdHlwZSxjPWEubWF0Y2hlc3x8YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm1zTWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1BvbHltZXIuSXJvbkZvY3VzYWJsZXNIZWxwZXI9e2dldFRhYmJhYmxlTm9kZXM6ZnVuY3Rpb24oZCl7dmFyIGY9W107cmV0dXJuIHRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKGQsZik/dGhpcy5fc29ydEJ5VGFiSW5kZXgoZik6Zn0saXNGb2N1c2FibGU6ZnVuY3Rpb24oZCl7cmV0dXJuIGMuY2FsbChkLCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9jLmNhbGwoZCwiOm5vdChbZGlzYWJsZWRdKSIpOmMuY2FsbChkLCJhW2hyZWZdLCBhcmVhW2hyZWZdLCBpZnJhbWUsIFt0YWJpbmRleF0sIFtjb250ZW50RWRpdGFibGVdIil9LGlzVGFiYmFibGU6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGUoZCkmJgpjLmNhbGwoZCwnOm5vdChbdGFiaW5kZXhceDNkIi0xIl0pJykmJnRoaXMuX2lzVmlzaWJsZShkKX0sX25vcm1hbGl6ZWRUYWJJbmRleDpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5pc0ZvY3VzYWJsZShkKT8oZD1kLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MCxOdW1iZXIoZCkpOi0xfSxfY29sbGVjdFRhYmJhYmxlTm9kZXM6ZnVuY3Rpb24oZCxmKXtpZihkLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCF0aGlzLl9pc1Zpc2libGUoZCkpcmV0dXJuITE7dmFyIGc9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KGQpLGw9MDxnOzA8PWcmJmYucHVzaChkKTtkPSJjb250ZW50Ij09PWQubG9jYWxOYW1lfHwic2xvdCI9PT1kLmxvY2FsTmFtZT9Qb2x5bWVyLmRvbShkKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6UG9seW1lci5kb20oZC5yb290fHxkKS5jaGlsZHJlbjtmb3IoZz0wO2c8ZC5sZW5ndGg7ZysrKWw9dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoZFtnXSxmKXx8bDsKcmV0dXJuIGx9LF9pc1Zpc2libGU6ZnVuY3Rpb24oZCl7dmFyIGY9ZC5zdHlsZTtyZXR1cm4iaGlkZGVuIiE9PWYudmlzaWJpbGl0eSYmIm5vbmUiIT09Zi5kaXNwbGF5PyhmPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQpLCJoaWRkZW4iIT09Zi52aXNpYmlsaXR5JiYibm9uZSIhPT1mLmRpc3BsYXkpOiExfSxfc29ydEJ5VGFiSW5kZXg6ZnVuY3Rpb24oZCl7dmFyIGY9ZC5sZW5ndGg7aWYoMj5mKXJldHVybiBkO3ZhciBnPU1hdGguY2VpbChmLzIpO2Y9dGhpcy5fc29ydEJ5VGFiSW5kZXgoZC5zbGljZSgwLGcpKTtkPXRoaXMuX3NvcnRCeVRhYkluZGV4KGQuc2xpY2UoZykpO3JldHVybiB0aGlzLl9tZXJnZVNvcnRCeVRhYkluZGV4KGYsZCl9LF9tZXJnZVNvcnRCeVRhYkluZGV4OmZ1bmN0aW9uKGQsZil7Zm9yKHZhciBnPVtdOzA8ZC5sZW5ndGgmJjA8Zi5sZW5ndGg7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIoZFswXSxmWzBdKT9nLnB1c2goZi5zaGlmdCgpKTpnLnB1c2goZC5zaGlmdCgpKTsKcmV0dXJuIGcuY29uY2F0KGQsZil9LF9oYXNMb3dlclRhYk9yZGVyOmZ1bmN0aW9uKGQsZil7ZD1NYXRoLm1heChkLnRhYkluZGV4LDApO2Y9TWF0aC5tYXgoZi50YWJJbmRleCwwKTtyZXR1cm4gMD09PWR8fDA9PT1mP2Y+ZDpkPmZ9fX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1vdmVybGF5LWJlaGF2aW9yL2lyb24tb3ZlcmxheS1iZWhhdmlvci5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvckltcGw9e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LApzY3JvbGxBY3Rpb246e3R5cGU6U3RyaW5nfSxfbWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6UG9seW1lci5Jcm9uT3ZlcmxheU1hbmFnZXJ9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHxQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIFBvbHltZXIuSXJvbkZvY3VzYWJsZXNIZWxwZXIuZ2V0VGFiYmFibGVOb2Rlcyh0aGlzKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9CnRoaXMuX19pc0FuaW1hdGluZz0hMTt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsO3RoaXMuX19yYWZzPXt9O3RoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbDt0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKTt0aGlzLl9fcm9vdE5vZGVzPW51bGw7dGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCk7dGhpcy5fb2JzZXJ2ZXI9UG9seW1lci5kb20odGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuZG9tKHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKTt0aGlzLl9vYnNlcnZlcj1udWxsO2Zvcih2YXIgYSBpbiB0aGlzLl9fcmFmcyludWxsIT09CnRoaXMuX19yYWZzW2FdJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1thXSk7dGhpcy5fX3JhZnM9e307dGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpO3RoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpO3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKTt0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSk7dGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihhKXt0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsYSx7Y2FuY2VsYWJsZTohMH0pLmRlZmF1bHRQcmV2ZW50ZWR8fCh0aGlzLl9zZXRDYW5jZWxlZCghMCksdGhpcy5vcGVuZWQ9CiExKX0saW52YWxpZGF0ZVRhYmJhYmxlczpmdW5jdGlvbigpe3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGx9LF9lbnN1cmVTZXR1cDpmdW5jdGlvbigpe3RoaXMuX292ZXJsYXlTZXR1cHx8KHRoaXMuX292ZXJsYXlTZXR1cD0hMCx0aGlzLnN0eWxlLm91dGxpbmU9Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbihhKXthP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKTt0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9faXNBbmltYXRpbmc9ITAsdGhpcy5fX2RlcmFmKCJfX29wZW5lZENoYW5nZWQiLHRoaXMuX19vcGVuZWRDaGFuZ2VkKSl9LF9jYW5jZWxlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmNsb3NpbmdSZWFzb249dGhpcy5jbG9zaW5nUmVhc29ufHx7fTt0aGlzLmNsb3NpbmdSZWFzb24uY2FuY2VsZWQ9CnRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSk7dGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDt0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKTt0aGlzLnJlZml0KCk7dGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKTt0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09CnRoaXMuX2ZvY3VzTm9kZSYmKHRoaXMuX2ZvY3VzTm9kZS5ibHVyKCksdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUuZm9jdXMoKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfSxfZmluaXNoUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5ub3RpZnlSZXNpemUoKTt0aGlzLl9faXNBbmltYXRpbmc9ITE7dGhpcy5maXJlKCJpcm9uLW92ZXJsYXktb3BlbmVkIil9LF9maW5pc2hSZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMuc3R5bGUuekluZGV4PSIiO3RoaXMubm90aWZ5UmVzaXplKCk7dGhpcy5fX2lzQW5pbWF0aW5nPSExO3RoaXMuZmlyZSgiaXJvbi1vdmVybGF5LWNsb3NlZCIsdGhpcy5jbG9zaW5nUmVhc29uKX0sX3ByZXBhcmVQb3NpdGlvbmluZzpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvbj0KdGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSJub25lIjt0aGlzLnN0eWxlLnRyYW5zZm9ybT10aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ibm9uZSI7dGhpcy5zdHlsZS5kaXNwbGF5PSIifSxfZmluaXNoUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wO3RoaXMuc3R5bGUudHJhbnNpdGlvbj10aGlzLnN0eWxlLndlYmtpdFRyYW5zaXRpb249IiI7dGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09IiI7dGhpcy5zdHlsZS5kaXNwbGF5PSIiO3RoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe2lmKHRoaXMub3BlbmVkKXRoaXMubm9BdXRvRm9jdXN8fHRoaXMuX2ZvY3VzTm9kZS5mb2N1cygpO2Vsc2V7dGhpcy5fZm9jdXNOb2RlLmJsdXIoKTt0aGlzLl9mb2N1c2VkQ2hpbGQ9bnVsbDtpZih0aGlzLnJlc3RvcmVGb2N1c09uQ2xvc2UmJgp0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZSl7dmFyIGE9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDsoYT09PWRvY3VtZW50LmJvZHl8fFBvbHltZXIuZG9tKHRoaXMpLmRlZXBDb250YWlucyhhKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbDsoYT10aGlzLl9tYW5hZ2VyLmN1cnJlbnRPdmVybGF5KCkpJiZ0aGlzIT09YSYmYS5fYXBwbHlGb2N1cygpfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGEpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoYSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihhKXtpZih0aGlzLndpdGhCYWNrZHJvcCl7dmFyIGM9UG9seW1lci5kb20oYSkucGF0aDstMT09PWMuaW5kZXhPZih0aGlzKT8oYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9hcHBseUZvY3VzKCkpOnRoaXMuX2ZvY3VzZWRDaGlsZD1jWzBdfX0sX29uQ2FwdHVyZUVzYzpmdW5jdGlvbihhKXt0aGlzLm5vQ2FuY2VsT25Fc2NLZXl8fAp0aGlzLmNhbmNlbChhKX0sX29uQ2FwdHVyZVRhYjpmdW5jdGlvbihhKXtpZih0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgYz1hLnNoaWZ0S2V5LGQ9Yz90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZTtjPWM/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU7aWYoZD09PWMpZD0hMDtlbHNle3ZhciBmPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7ZD1mPT09ZHx8Zj09PXRoaXN9ZCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkQ2hpbGQ9Yyx0aGlzLl9hcHBseUZvY3VzKCkpfX0sX29uSXJvblJlc2l6ZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiZ0aGlzLl9fZGVyYWYoInJlZml0Iix0aGlzLnJlZml0KX0sX29uTm9kZXNDaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmIXRoaXMuX19pc0FuaW1hdGluZyYmCih0aGlzLmludmFsaWRhdGVUYWJiYWJsZXMoKSx0aGlzLm5vdGlmeVJlc2l6ZSgpKX0sX19lbnN1cmVGaXJzdExhc3RGb2N1c2FibGVzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGV8fCF0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGUpe3ZhciBhPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9YVswXTt0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9YVthLmxlbmd0aC0xXX19LF9fb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkPyh0aGlzLl9wcmVwYXJlUmVuZGVyT3BlbmVkKCksdGhpcy5fbWFuYWdlci5hZGRPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJPcGVuZWQoKSk6KHRoaXMuX21hbmFnZXIucmVtb3ZlT3ZlcmxheSh0aGlzKSx0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fcmVuZGVyQ2xvc2VkKCkpfSxfX2RlcmFmOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcy5fX3JhZnM7Cm51bGwhPT1kW2FdJiZjYW5jZWxBbmltYXRpb25GcmFtZShkW2FdKTtkW2FdPXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2RbYV09bnVsbDtjLmNhbGwodGhpcyl9LmJpbmQodGhpcykpfSxfX3VwZGF0ZVNjcm9sbE9ic2VydmVyczpmdW5jdGlvbihhLGMsZCl7YSYmYyYmdGhpcy5fX2lzVmFsaWRTY3JvbGxBY3Rpb24oZCk/KCJsb2NrIj09PWQmJih0aGlzLl9fc2F2ZVNjcm9sbFBvc2l0aW9uKCksUG9seW1lci5Jcm9uU2Nyb2xsTWFuYWdlci5wdXNoU2Nyb2xsTG9jayh0aGlzKSksdGhpcy5fX2FkZFNjcm9sbExpc3RlbmVycygpKTooUG9seW1lci5Jcm9uU2Nyb2xsTWFuYWdlci5yZW1vdmVTY3JvbGxMb2NrKHRoaXMpLHRoaXMuX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe3RoaXMuX19yb290Tm9kZXM9W107aWYoUG9seW1lci5TZXR0aW5ncy51c2VTaGFkb3cpZm9yKHZhciBhPQp0aGlzO2E7KWEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJmEuaG9zdCYmdGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGEpLGE9YS5ob3N0fHxhLmFzc2lnbmVkU2xvdHx8YS5wYXJlbnROb2RlO3RoaXMuX19yb290Tm9kZXMucHVzaChkb2N1bWVudCl9dGhpcy5fX3Jvb3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2MuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9fb25DYXB0dXJlU2Nyb2xsLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9KX0sdGhpcyl9LF9fcmVtb3ZlU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fX3Jvb3ROb2RlcyYmdGhpcy5fX3Jvb3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9fb25DYXB0dXJlU2Nyb2xsLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9KX0sdGhpcyk7dGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX3Jvb3ROb2Rlcz1udWxsKX0sX19pc1ZhbGlkU2Nyb2xsQWN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiJsb2NrIj09PQphfHwicmVmaXQiPT09YXx8ImNhbmNlbCI9PT1hfSxfX29uQ2FwdHVyZVNjcm9sbDpmdW5jdGlvbihhKXtpZighKHRoaXMuX19pc0FuaW1hdGluZ3x8MDw9UG9seW1lci5kb20oYSkucGF0aC5pbmRleE9mKHRoaXMpKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UgImxvY2siOnRoaXMuX19yZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTticmVhaztjYXNlICJyZWZpdCI6dGhpcy5fX2RlcmFmKCJyZWZpdCIsdGhpcy5yZWZpdCk7YnJlYWs7Y2FzZSAiY2FuY2VsIjp0aGlzLmNhbmNlbChhKX19LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsCmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSx0aGlzLl9fc2Nyb2xsTGVmdD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpKX0sX19yZXN0b3JlU2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXtkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50Pyhkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCk6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A9ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbFRvcCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdD1kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ9dGhpcy5fX3Njcm9sbExlZnQpfX07UG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9yPVtQb2x5bWVyLklyb25GaXRCZWhhdmlvcixQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvciwKUG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9ySW1wbF19KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL25lb24tYW5pbWF0aW9uL25lb24tYW5pbWF0YWJsZS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuTmVvbkFuaW1hdGFibGVCZWhhdmlvcj17cHJvcGVydGllczp7YW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZW50cnlBbmltYXRpb246e29ic2VydmVyOiJfZW50cnlBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ30sZXhpdEFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9leGl0QW5pbWF0aW9uQ2hhbmdlZCIsdHlwZTpTdHJpbmd9fSxfZW50cnlBbmltYXRpb25DaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Db25maWc9dGhpcy5hbmltYXRpb25Db25maWd8fHt9O3RoaXMuYW5pbWF0aW9uQ29uZmlnLmVudHJ5PVt7bmFtZTp0aGlzLmVudHJ5QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfZXhpdEFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e307dGhpcy5hbmltYXRpb25Db25maWcuZXhpdD1be25hbWU6dGhpcy5leGl0QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfY29weVByb3BlcnRpZXM6ZnVuY3Rpb24oYSwKYyl7Zm9yKHZhciBkIGluIGMpYVtkXT1jW2RdfSxfY2xvbmVDb25maWc6ZnVuY3Rpb24oYSl7dmFyIGM9e2lzQ2xvbmU6ITB9O3RoaXMuX2NvcHlQcm9wZXJ0aWVzKGMsYSk7cmV0dXJuIGN9LF9nZXRBbmltYXRpb25Db25maWdSZWN1cnNpdmU6ZnVuY3Rpb24oYSxjLGQpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnKWlmKHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlJiYiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlKXRoaXMuX3dhcm4odGhpcy5fbG9nZigicGxheUFuaW1hdGlvbiIsIlBsZWFzZSBwdXQgJ2FuaW1hdGlvbkNvbmZpZycgaW5zaWRlIG9mIHlvdXIgY29tcG9uZW50cyAncHJvcGVydGllcycgb2JqZWN0IGluc3RlYWQgb2Ygb3V0c2lkZSBvZiBpdC4iKSk7ZWxzZXt2YXIgZj1hP3RoaXMuYW5pbWF0aW9uQ29uZmlnW2FdOnRoaXMuYW5pbWF0aW9uQ29uZmlnO0FycmF5LmlzQXJyYXkoZil8fChmPVtmXSk7aWYoZilmb3IodmFyIGcsbD0wO2c9CmZbbF07bCsrKWlmKGcuYW5pbWF0YWJsZSlnLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShnLnR5cGV8fGEsYyxkKTtlbHNlIGlmKGcuaWQpe3ZhciBrPWNbZy5pZF07az8oay5pc0Nsb25lfHwoY1tnLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhrKSxrPWNbZy5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGssZykpOmNbZy5pZF09Z31lbHNlIGQucHVzaChnKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihhKXt2YXIgYz17fSxkPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShhLGMsZCk7Zm9yKHZhciBmIGluIGMpZC5wdXNoKGNbZl0pO3JldHVybiBkfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vbmVvbi1hbmltYXRpb24vbmVvbi1hbmltYXRpb24tcnVubmVyLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5OZW9uQW5pbWF0aW9uUnVubmVyQmVoYXZpb3JJbXBsPXtfY29uZmlndXJlQW5pbWF0aW9uczpmdW5jdGlvbihhKXt2YXIgYz1bXSxkPVtdO2lmKDA8YS5sZW5ndGgpZm9yKHZhciBmLGc9MDtmPWFbZ107ZysrKXt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGYubmFtZSk7aWYobC5pc05lb25BbmltYXRpb24pe3ZhciBrPW51bGw7bC5jb25maWd1cmV8fChsLmNvbmZpZ3VyZT1mdW5jdGlvbigpe3JldHVybiBudWxsfSk7az1sLmNvbmZpZ3VyZShmKTtkLnB1c2goe3Jlc3VsdDprLGNvbmZpZzpmfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsZi5uYW1lLCJub3QgZm91bmQhIil9Zm9yKGE9MDthPGQubGVuZ3RoO2ErKyl7az1kW2FdLnJlc3VsdDtmPWRbYV0uY29uZmlnO3RyeXsiZnVuY3Rpb24iIT10eXBlb2Ygay5jYW5jZWwmJihrPWRvY3VtZW50LnRpbWVsaW5lLnBsYXkoaykpfWNhdGNoKG4pe2s9bnVsbCxjb25zb2xlLndhcm4oIkNvdWxkbnQgcGxheSIsCiIoIixmLm5hbWUsIikuIixuKX1rJiZjLnB1c2goe25lb25BbmltYXRpb246bCxjb25maWc6ZixhbmltYXRpb246a30pfXJldHVybiBjfSxfc2hvdWxkQ29tcGxldGU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPSEwLGQ9MDtkPGEubGVuZ3RoO2QrKylpZigiZmluaXNoZWQiIT1hW2RdLmFuaW1hdGlvbi5wbGF5U3RhdGUpe2M9ITE7YnJlYWt9cmV0dXJuIGN9LF9jb21wbGV0ZTpmdW5jdGlvbihhKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylhW2NdLm5lb25BbmltYXRpb24uY29tcGxldGUoYVtjXS5jb25maWcpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYVtjXS5hbmltYXRpb24uY2FuY2VsKCl9LHBsYXlBbmltYXRpb246ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLmdldEFuaW1hdGlvbkNvbmZpZyhhKTtpZihkKXt0aGlzLl9hY3RpdmU9dGhpcy5fYWN0aXZlfHx7fTt0aGlzLl9hY3RpdmVbYV0mJih0aGlzLl9jb21wbGV0ZSh0aGlzLl9hY3RpdmVbYV0pLGRlbGV0ZSB0aGlzLl9hY3RpdmVbYV0pOwp2YXIgZj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKGQpO2lmKDA9PWYubGVuZ3RoKXRoaXMuZmlyZSgibmVvbi1hbmltYXRpb24tZmluaXNoIixjLHtidWJibGVzOiExfSk7ZWxzZSBmb3IodGhpcy5fYWN0aXZlW2FdPWYsZD0wO2Q8Zi5sZW5ndGg7ZCsrKWZbZF0uYW5pbWF0aW9uLm9uZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fc2hvdWxkQ29tcGxldGUoZikmJih0aGlzLl9jb21wbGV0ZShmKSxkZWxldGUgdGhpcy5fYWN0aXZlW2FdLHRoaXMuZmlyZSgibmVvbi1hbmltYXRpb24tZmluaXNoIixjLHtidWJibGVzOiExfSkpfS5iaW5kKHRoaXMpfX0sY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIHRoaXMuX2FjdGl2ZSl7dmFyIGM9dGhpcy5fYWN0aXZlW2FdLGQ7Zm9yKGQgaW4gYyljW2RdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fTsKUG9seW1lci5OZW9uQW5pbWF0aW9uUnVubmVyQmVoYXZpb3I9W1BvbHltZXIuTmVvbkFuaW1hdGFibGVCZWhhdmlvcixQb2x5bWVyLk5lb25BbmltYXRpb25SdW5uZXJCZWhhdmlvckltcGxdOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tZHJvcGRvd24vaXJvbi1kcm9wZG93bi1zY3JvbGwtbWFuYWdlci5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIuSXJvbkRyb3Bkb3duU2Nyb2xsTWFuYWdlcj1Qb2x5bWVyLklyb25TY3JvbGxNYW5hZ2VyfSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9pcm9uLWRyb3Bkb3duL2lyb24tZHJvcGRvd24uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25Db250cm9sU3RhdGUsUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcixQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3IsUG9seW1lci5OZW9uQW5pbWF0aW9uUnVubmVyQmVoYXZpb3JdLHByb3BlcnRpZXM6e2hvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sY2xvc2VBbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxmb2N1c1RhcmdldDp7dHlwZTpPYmplY3R9LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2FsbG93T3V0c2lkZVNjcm9sbENoYW5nZWQifX0sCmxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxvYnNlcnZlcnM6WyJfdXBkYXRlT3ZlcmxheVBvc2l0aW9uKHBvc2l0aW9uVGFyZ2V0LCB2ZXJ0aWNhbEFsaWduLCBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsT2Zmc2V0LCBob3Jpem9udGFsT2Zmc2V0KSJdLGdldCBjb250YWluZWRFbGVtZW50KCl7Zm9yKHZhciBhPVBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylpZihhW2NdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGFbY119LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxBY3Rpb258fCh0aGlzLnNjcm9sbEFjdGlvbj10aGlzLmFsbG93T3V0c2lkZVNjcm9sbD8icmVmaXQiOiJsb2NrIik7dGhpcy5fcmVhZGllZD0hMH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnNpemluZ1RhcmdldCYmdGhpcy5zaXppbmdUYXJnZXQhPT0KdGhpc3x8KHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLFBvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvckltcGwuX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcub3Blbj8odGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoImFuaW1hdGluZyIpLHRoaXMucGxheUFuaW1hdGlvbigib3BlbiIpKTpQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JJbXBsLl9yZW5kZXJPcGVuZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSwKX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcuY2xvc2U/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oImNsb3NlIikpOlBvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvckltcGwuX3JlbmRlckNsb3NlZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9vbk5lb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgiYW5pbWF0aW5nIik7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF91cGRhdGVBbmltYXRpb25Db25maWc6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5jb250YWluZWRFbGVtZW50LGM9W10uY29uY2F0KHRoaXMub3BlbkFuaW1hdGlvbkNvbmZpZ3x8W10pLmNvbmNhdCh0aGlzLmNsb3NlQW5pbWF0aW9uQ29uZmlnfHwKW10pLGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdLm5vZGU9YTt0aGlzLmFuaW1hdGlvbkNvbmZpZz17b3Blbjp0aGlzLm9wZW5BbmltYXRpb25Db25maWcsY2xvc2U6dGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ319LF91cGRhdGVPdmVybGF5UG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWQmJnRoaXMubm90aWZ5UmVzaXplKCl9LF9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuX3JlYWRpZWQmJihhP3RoaXMuc2Nyb2xsQWN0aW9uJiYibG9jayIhPT10aGlzLnNjcm9sbEFjdGlvbnx8KHRoaXMuc2Nyb2xsQWN0aW9uPSJyZWZpdCIpOnRoaXMuc2Nyb2xsQWN0aW9uPSJsb2NrIil9LF9hcHBseUZvY3VzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5mb2N1c1RhcmdldHx8dGhpcy5jb250YWluZWRFbGVtZW50O2EmJnRoaXMub3BlbmVkJiYhdGhpcy5ub0F1dG9Gb2N1cz9hLmZvY3VzKCk6UG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9ySW1wbC5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLAphcmd1bWVudHMpfX0pfSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9uZW9uLWFuaW1hdGlvbi9uZW9uLWFuaW1hdGlvbi1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuTmVvbkFuaW1hdGlvbkJlaGF2aW9yPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihhKXtpZihhLnRpbWluZylmb3IodmFyIGMgaW4gYS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbY109YS50aW1pbmdbY107cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGEsYyxkKXtmb3IodmFyIGY9Cnt0cmFuc2Zvcm06WyJ3ZWJraXRUcmFuc2Zvcm0iXSx0cmFuc2Zvcm1PcmlnaW46WyJtb3pUcmFuc2Zvcm1PcmlnaW4iLCJ3ZWJraXRUcmFuc2Zvcm1PcmlnaW4iXX1bY10sZyxsPTA7Zz1mW2xdO2wrKylhLnN0eWxlW2ddPWQ7YS5zdHlsZVtjXT1kfSxjb21wbGV0ZTpmdW5jdGlvbigpe319OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL25lb24tYW5pbWF0aW9uL2FuaW1hdGlvbnMvZmFkZS1pbi1hbmltYXRpb24uaHRtbC5qcwpQb2x5bWVyKHtpczoiZmFkZS1pbi1hbmltYXRpb24iLGJlaGF2aW9yczpbUG9seW1lci5OZW9uQW5pbWF0aW9uQmVoYXZpb3JdLGNvbmZpZ3VyZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChhLm5vZGUsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9uZW9uLWFuaW1hdGlvbi9hbmltYXRpb25zL2ZhZGUtb3V0LWFuaW1hdGlvbi5odG1sLmpzClBvbHltZXIoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbUG9seW1lci5OZW9uQW5pbWF0aW9uQmVoYXZpb3JdLGNvbmZpZ3VyZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChhLm5vZGUsW3tvcGFjaXR5OiIxIn0se29wYWNpdHk6IjAifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1tZW51LWJ1dHRvbi9wYXBlci1tZW51LWJ1dHRvbi1hbmltYXRpb25zLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixiZWhhdmlvcnM6W1BvbHltZXIuTmVvbkFuaW1hdGlvbkJlaGF2aW9yXSxjb25maWd1cmU6ZnVuY3Rpb24oYSl7dmFyIGM9YS5ub2RlLGQ9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoYyxbe2hlaWdodDpkLzIrInB4In0se2hlaWdodDpkKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoYSkpfX0pO1BvbHltZXIoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixiZWhhdmlvcnM6W1BvbHltZXIuTmVvbkFuaW1hdGlvbkJlaGF2aW9yXSxjb25maWd1cmU6ZnVuY3Rpb24oYSl7dmFyIGM9YS5ub2RlLGQ9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChjLFt7d2lkdGg6ZC8yKyJweCJ9LHt3aWR0aDpkKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoYSkpfX0pOwpQb2x5bWVyKHtpczoicGFwZXItbWVudS1zaHJpbmstd2lkdGgtYW5pbWF0aW9uIixiZWhhdmlvcnM6W1BvbHltZXIuTmVvbkFuaW1hdGlvbkJlaGF2aW9yXSxjb25maWd1cmU6ZnVuY3Rpb24oYSl7dmFyIGM9YS5ub2RlLGQ9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChjLFt7d2lkdGg6ZCsicHgifSx7d2lkdGg6ZC1kLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoYSkpfX0pOwpQb2x5bWVyKHtpczoicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3ZhciBjPWEubm9kZSxkPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3RoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eShjLCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKTtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdChjLFt7aGVpZ2h0OmQrInB4Iix0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSx7aGVpZ2h0OmQvMisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtMjBweCkifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1tZW51LWJ1dHRvbi9wYXBlci1tZW51LWJ1dHRvbi5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPXtBTklNQVRJT05fQ1VCSUNfQkVaSUVSOiJjdWJpYy1iZXppZXIoLjMsLjk1LC41LDEpIixNQVhfQU5JTUFUSU9OX1RJTUVfTVM6NDAwfTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbj1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLnJlZ2lzdGVyZWQ9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5hZGRPd25LZXlCaW5kaW5nPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUucmVtb3ZlT3duS2V5QmluZGluZ3M9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXM9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5fY29sbGVjdEtleUJpbmRpbmdzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX3ByZXBLZXlCaW5kaW5ncz0KZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5fYWRkS2V5QmluZGluZz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5fb25LZXlCaW5kaW5nRXZlbnQ9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5fdHJpZ2dlcktleUhhbmRsZXI9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5fZm9jdXNCbHVySGFuZGxlcj1mdW5jdGlvbihjKXtpZihQb2x5bWVyLkVsZW1lbnQpdGhpcy5fc2V0Rm9jdXNlZCgiZm9jdXMiPT09CmMudHlwZSk7ZWxzZSBpZihjLnRhcmdldD09PXRoaXMpdGhpcy5fc2V0Rm9jdXNlZCgiZm9jdXMiPT09Yy50eXBlKTtlbHNlIGlmKHRoaXMuX19oYW5kbGVFdmVudFJldGFyZ2V0aW5nKXt2YXIgZD1Qb2x5bWVyLmRvbShjKS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KGQpfHx0aGlzLmZpcmUoYy50eXBlLHtzb3VyY2VFdmVudDpjfSx7bm9kZTp0aGlzLGJ1YmJsZXM6Yy5idWJibGVzLGNhbmNlbGFibGU6Yy5jYW5jZWxhYmxlfSl9fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX2NoYW5nZWRDb250cm9sU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkJiZ0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkKCl9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5fc2V0Rm9jdXNlZD1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b249UG9seW1lcih7aXM6InBhcGVyLW1lbnUtYnV0dG9uIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3IsClBvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZV0scHJvcGVydGllczp7b3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0saG9yaXpvbnRhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LHZlcnRpY2FsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sbm9PdmVybGFwOnt0eXBlOkJvb2xlYW59LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpZ25vcmVTZWxlY3Q6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2VPbkFjdGl2YXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LAp2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmEuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246Mjc1LGVhc2luZzphLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fV19fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5be25hbWU6ImZhZGUtb3V0LWFuaW1hdGlvbiIsdGltaW5nOntkdXJhdGlvbjoxNTB9fSx7bmFtZToicGFwZXItbWVudS1zaHJpbmstd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjo1MCxlYXNpbmc6YS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0sCntuYW1lOiJwYXBlci1tZW51LXNocmluay1oZWlnaHQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjIwMCxlYXNpbmc6ImVhc2UtaW4ifX1dfX0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sX2Ryb3Bkb3duQ29udGVudDp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToiZ3JvdXAiLCJhcmlhLWhhc3BvcHVwIjoidHJ1ZSJ9LGxpc3RlbmVyczp7Imlyb24tYWN0aXZhdGUiOiJfb25Jcm9uQWN0aXZhdGUiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QifSxnZXQgY29udGVudEVsZW1lbnQoKXtmb3IodmFyIGM9UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKSxkPTAsZj1jLmxlbmd0aDtkPGY7ZCsrKWlmKGNbZF0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gY1tkXX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/CnRoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZVNlbGVjdHx8dGhpcy5jbG9zZSgpfSxfb25Jcm9uQWN0aXZhdGU6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlT25BY3RpdmF0ZSYmdGhpcy5jbG9zZSgpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbihjLGQpe2M/KHRoaXMuX2Ryb3Bkb3duQ29udGVudD10aGlzLmNvbnRlbnRFbGVtZW50LHRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tb3BlbiIpKTpudWxsIT1kJiZ0aGlzLmZpcmUoInBhcGVyLWRyb3Bkb3duLWNsb3NlIil9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oYyl7UG9seW1lci5Jcm9uQ29udHJvbFN0YXRlLl9kaXNhYmxlZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2MmJnRoaXMub3BlbmVkJiYKdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihjKXt2YXIgZD10aGlzLiQudHJpZ2dlcjstMTxQb2x5bWVyLmRvbShjLmRldGFpbCkucGF0aC5pbmRleE9mKGQpJiZjLnByZXZlbnREZWZhdWx0KCl9fSk7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihjKXtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbltjXT1hW2NdfSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24taWNvbnNldC1zdmcvaXJvbi1pY29uc2V0LXN2Zy5odG1sLmpzClBvbHltZXIoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOiJpY29uc2V0IixrZXk6bnVsbCx2YWx1ZTpudWxsfSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIn0sZ2V0SWNvbk5hbWVzOmZ1bmN0aW9uKCl7dGhpcy5faWNvbnM9dGhpcy5fY3JlYXRlSWNvbk1hcCgpO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9pY29ucykubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWUrIjoiK2F9LHRoaXMpfSxhcHBseUljb246ZnVuY3Rpb24oYSxjKXt0aGlzLnJlbW92ZUljb24oYSk7CmlmKGM9dGhpcy5fY2xvbmVJY29uKGMsdGhpcy5ydGxNaXJyb3JpbmcmJnRoaXMuX3RhcmdldElzUlRMKGEpKSl7dmFyIGQ9UG9seW1lci5kb20oYS5yb290fHxhKTtkLmluc2VydEJlZm9yZShjLGQuY2hpbGROb2Rlc1swXSk7cmV0dXJuIGEuX3N2Z0ljb249Y31yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihhKXthLl9zdmdJY29uJiYoUG9seW1lci5kb20oYS5yb290fHxhKS5yZW1vdmVDaGlsZChhLl9zdmdJY29uKSxhLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oYSl7bnVsbD09dGhpcy5fX3RhcmdldElzUlRMJiYodGhpcy51c2VHbG9iYWxSdGxBdHRyaWJ1dGU/dGhpcy5fX3RhcmdldElzUlRMPSJydGwiPT09KGRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJkaXIiKT9kb2N1bWVudC5ib2R5OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0QXR0cmlidXRlKCJkaXIiKTooYSYmYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYKKGE9YS5ob3N0KSx0aGlzLl9fdGFyZ2V0SXNSVEw9YSYmInJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5kaXJlY3Rpb24pKTtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGw7dGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lO3RoaXMuX21ldGEudmFsdWU9dGhpczt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgYT1PYmplY3QuY3JlYXRlKG51bGwpO1BvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2FbYy5pZF09Y30pO3JldHVybiBhfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGEsYyl7dGhpcy5faWNvbnM9dGhpcy5faWNvbnN8fHRoaXMuX2NyZWF0ZUljb25NYXAoKTtyZXR1cm4gdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2FdLAp0aGlzLnNpemUsYyl9LF9wcmVwYXJlU3ZnQ2xvbmU6ZnVuY3Rpb24oYSxjLGQpe2lmKGEpe2E9YS5jbG9uZU5vZGUoITApO3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtjPWEuZ2V0QXR0cmlidXRlKCJ2aWV3Qm94Iil8fCIwIDAgIitjKyIgIitjO3ZhciBnPSJwb2ludGVyLWV2ZW50czogbm9uZTsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IjtkJiZhLmhhc0F0dHJpYnV0ZSgibWlycm9yLWluLXJ0bCIpJiYoZys9Ii13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybTpzY2FsZSgtMSwxKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjsiKTtmLnNldEF0dHJpYnV0ZSgidmlld0JveCIsYyk7Zi5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0Iik7Zi5zZXRBdHRyaWJ1dGUoImZvY3VzYWJsZSIsImZhbHNlIik7Zi5zdHlsZS5jc3NUZXh0PQpnO2YuYXBwZW5kQ2hpbGQoYSkucmVtb3ZlQXR0cmlidXRlKCJpZCIpO3JldHVybiBmfXJldHVybiBudWxsfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLWRyb3Bkb3duLW1lbnUvcGFwZXItZHJvcGRvd24tbWVudS5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJwYXBlci1kcm9wZG93bi1tZW51IixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlLFBvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yLFBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJyaWdodCJ9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AifSx2ZXJ0aWNhbE9mZnNldDpOdW1iZXIsZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dGFwOiJfb25UYXAifSxrZXlCaW5kaW5nczp7InVwIGRvd24iOiJvcGVuIixlc2M6ImNsb3NlIn0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImNvbWJvYm94IiwiYXJpYS1hdXRvY29tcGxldGUiOiJub25lIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxvYnNlcnZlcnM6WyJfc2VsZWN0ZWRJdGVtQ2hhbmdlZChzZWxlY3RlZEl0ZW0pIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5jb250ZW50RWxlbWVudDthJiZhLnNlbGVjdGVkSXRlbSYmdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGEuc2VsZWN0ZWRJdGVtKX0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBhPVBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylpZihhW2NdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGFbY119LG9wZW46ZnVuY3Rpb24oKXt0aGlzLiQubWVudUJ1dHRvbi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oYS5kZXRhaWwuaXRlbSl9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbigpe3RoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKX0sX29uVGFwOmZ1bmN0aW9uKGEpe1BvbHltZXIuR2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0KGEpPT09dGhpcyYmCnRoaXMub3BlbigpfSxfc2VsZWN0ZWRJdGVtQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnZhbHVlPWE9YT9hLmxhYmVsfHxhLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8YS50ZXh0Q29udGVudC50cmltKCk6IiI7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwoYSl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/YzphPy00Ojh9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5yZXF1aXJlZHx8dGhpcy5yZXF1aXJlZCYmISF0aGlzLnZhbHVlfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3BlbmVkPyJ0cnVlIjoiZmFsc2UiLGM9dGhpcy5jb250ZW50RWxlbWVudDtjJiZjLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsYSl9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tc2VsZWN0b3IvaXJvbi1zZWxlY3Rpb24uaHRtbC5qcwpQb2x5bWVyLklyb25TZWxlY3Rpb249ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb249W107dGhpcy5zZWxlY3RDYWxsYmFjaz1hfTsKUG9seW1lci5Jcm9uU2VsZWN0aW9uLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX0sY2xlYXI6ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpeyghYXx8MD5hLmluZGV4T2YoYykpJiZ0aGlzLnNldEl0ZW1TZWxlY3RlZChjLCExKX0sdGhpcyl9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIDA8PXRoaXMuc2VsZWN0aW9uLmluZGV4T2YoYSl9LHNldEl0ZW1TZWxlY3RlZDpmdW5jdGlvbihhLGMpe2lmKG51bGwhPWEmJmMhPT10aGlzLmlzU2VsZWN0ZWQoYSkpe2lmKGMpdGhpcy5zZWxlY3Rpb24ucHVzaChhKTtlbHNle3ZhciBkPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YoYSk7MDw9ZCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKGQsMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayhhLGMpfX0sc2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMubXVsdGk/CnRoaXMudG9nZ2xlKGEpOnRoaXMuZ2V0KCkhPT1hJiYodGhpcy5zZXRJdGVtU2VsZWN0ZWQodGhpcy5nZXQoKSwhMSksdGhpcy5zZXRJdGVtU2VsZWN0ZWQoYSwhMCkpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQoYSwhdGhpcy5pc1NlbGVjdGVkKGEpKX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tc2VsZWN0b3IvaXJvbi1zZWxlY3RhYmxlLmh0bWwuanMKUG9seW1lci5Jcm9uU2VsZWN0YWJsZUJlaGF2aW9yPXtwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LHNlbGVjdGVkOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxhY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZToidGFwIixvYnNlcnZlcjoiX2FjdGl2YXRlRXZlbnRDaGFuZ2VkIn0sc2VsZWN0YWJsZTpTdHJpbmcsc2VsZWN0ZWRDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6Imlyb24tc2VsZWN0ZWQifSxzZWxlY3RlZEF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sZmFsbGJhY2tTZWxlY3Rpb246e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2V4Y2x1ZGVkTG9jYWxOYW1lczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dGVtcGxhdGU6MSwKImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpO3RoaXMuX3NlbGVjdGlvbj1uZXcgUG9seW1lci5Jcm9uU2VsZWN0aW9uKHRoaXMuX2FwcGx5U2VsZWN0aW9uLmJpbmQodGhpcykpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPXRoaXMuX29ic2VydmVJdGVtcyh0aGlzKTt0aGlzLl9hZGRMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZQb2x5bWVyLmRvbSh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlcik7dGhpcy5fcmVtb3ZlTGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50KX0sCmluZGV4T2Y6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlbXM/dGhpcy5pdGVtcy5pbmRleE9mKGEpOi0xfSxzZWxlY3Q6ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3RlZD1hfSxzZWxlY3RQcmV2aW91czpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaXRlbXMubGVuZ3RoO2E9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpLTErYSklYTt0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShhKX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBhPShOdW1iZXIodGhpcy5fdmFsdWVUb0luZGV4KHRoaXMuc2VsZWN0ZWQpKSsxKSV0aGlzLml0ZW1zLmxlbmd0aDt0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShhKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGEpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLl9vYnNlcnZlci5mbHVzaD8KdGhpcy5fb2JzZXJ2ZXIuZmx1c2goKTp0aGlzLl91cGRhdGVJdGVtcygpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiBudWxsIT10aGlzLnNlbGVjdGVkfSxfY2hlY2tGYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbihhKXt0aGlzLmxpc3Rlbih0aGlzLGEsIl9hY3RpdmF0ZUhhbmRsZXIiKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGEpe3RoaXMudW5saXN0ZW4odGhpcyxhLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9hY3RpdmF0ZUV2ZW50Q2hhbmdlZDpmdW5jdGlvbihhLGMpe3RoaXMuX3JlbW92ZUxpc3RlbmVyKGMpO3RoaXMuX2FkZExpc3RlbmVyKGEpfSxfdXBkYXRlSXRlbXM6ZnVuY3Rpb24oKXt2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModGhpcy5zZWxlY3RhYmxlfHwiKiIpO2E9QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGEsdGhpcy5fYmluZEZpbHRlckl0ZW0pOwp0aGlzLl9zZXRJdGVtcyhhKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbigpe2lmKHRoaXMuaXRlbXMpe3ZhciBhPXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO2E/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdChhKTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKTt0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdm9pZCAwPT09dGhpcy5fc2VsZWN0aW9uLmdldCgpJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbYS5sb2NhbE5hbWVdfSwKX3ZhbHVlVG9JdGVtOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP251bGw6dGhpcy5pdGVtc1t0aGlzLl92YWx1ZVRvSW5kZXgoYSldfSxfdmFsdWVUb0luZGV4OmZ1bmN0aW9uKGEpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKWZvcih2YXIgYz0wLGQ7ZD10aGlzLml0ZW1zW2NdO2MrKyl7aWYodGhpcy5fdmFsdWVGb3JJdGVtKGQpPT1hKXJldHVybiBjfWVsc2UgcmV0dXJuIE51bWJlcihhKX0sX2luZGV4VG9WYWx1ZTpmdW5jdGlvbihhKXtpZih0aGlzLmF0dHJGb3JTZWxlY3RlZCl7aWYoYT10aGlzLml0ZW1zW2FdKXJldHVybiB0aGlzLl92YWx1ZUZvckl0ZW0oYSl9ZWxzZSByZXR1cm4gYX0sX3ZhbHVlRm9ySXRlbTpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4gbnVsbDtpZighdGhpcy5hdHRyRm9yU2VsZWN0ZWQpcmV0dXJuIGE9dGhpcy5pbmRleE9mKGEpLC0xPT09YT9udWxsOmE7dmFyIGM9YVtQb2x5bWVyLkNhc2VNYXAuZGFzaFRvQ2FtZWxDYXNlKHRoaXMuYXR0ckZvclNlbGVjdGVkKV07CnJldHVybiB2b2lkIDAhPWM/YzphLmdldEF0dHJpYnV0ZSh0aGlzLmF0dHJGb3JTZWxlY3RlZCl9LF9hcHBseVNlbGVjdGlvbjpmdW5jdGlvbihhLGMpe3RoaXMuc2VsZWN0ZWRDbGFzcyYmdGhpcy50b2dnbGVDbGFzcyh0aGlzLnNlbGVjdGVkQ2xhc3MsYyxhKTt0aGlzLnNlbGVjdGVkQXR0cmlidXRlJiZ0aGlzLnRvZ2dsZUF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkQXR0cmlidXRlLGMsYSk7dGhpcy5fc2VsZWN0aW9uQ2hhbmdlKCk7dGhpcy5maXJlKCJpcm9uLSIrKGM/InNlbGVjdCI6ImRlc2VsZWN0Iikse2l0ZW06YX0pfSxfc2VsZWN0aW9uQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKHRoaXMuX3NlbGVjdGlvbi5nZXQoKSl9LF9vYnNlcnZlSXRlbXM6ZnVuY3Rpb24oYSl7cmV0dXJuIFBvbHltZXIuZG9tKGEpLm9ic2VydmVOb2RlcyhmdW5jdGlvbihjKXt0aGlzLl91cGRhdGVJdGVtcygpO3RoaXMuX3VwZGF0ZVNlbGVjdGVkKCk7dGhpcy5maXJlKCJpcm9uLWl0ZW1zLWNoYW5nZWQiLApjLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KX0pfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGEpe2E9YS50YXJnZXQ7Zm9yKHZhciBjPXRoaXMuaXRlbXM7YSYmYSE9dGhpczspe3ZhciBkPWMuaW5kZXhPZihhKTtpZigwPD1kKXtjPXRoaXMuX2luZGV4VG9WYWx1ZShkKTt0aGlzLl9pdGVtQWN0aXZhdGUoYyxhKTticmVha31hPWEucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oYSxjKXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDphLGl0ZW06Y30se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChhKX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tc2VsZWN0b3IvaXJvbi1tdWx0aS1zZWxlY3RhYmxlLmh0bWwuanMKUG9seW1lci5Jcm9uTXVsdGlTZWxlY3RhYmxlQmVoYXZpb3JJbXBsPXtwcm9wZXJ0aWVzOnttdWx0aTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJtdWx0aUNoYW5nZWQifSxzZWxlY3RlZFZhbHVlczp7dHlwZTpBcnJheSxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LHNlbGVjdGVkSXRlbXM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZVNlbGVjdGVkKHNlbGVjdGVkVmFsdWVzLnNwbGljZXMpIl0sc2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMubXVsdGk/dGhpcy5fdG9nZ2xlU2VsZWN0ZWQoYSk6dGhpcy5zZWxlY3RlZD1hfSxtdWx0aUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fc2VsZWN0aW9uLm11bHRpPWE7dGhpcy5fdXBkYXRlU2VsZWN0ZWQoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5zZWxlY3RlZHx8Cm51bGwhPXRoaXMuc2VsZWN0ZWRWYWx1ZXMmJnRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RofSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJjA8dGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCYmKHRoaXMuc2VsZWN0ZWRWYWx1ZXM9dGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faW5kZXhUb1ZhbHVlKHRoaXMuaW5kZXhPZihhKSl9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YX0sdGhpcykpOlBvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvci5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oYSl7YT0KYXx8W107YT0odGhpcy5fdmFsdWVzVG9JdGVtcyhhKXx8W10pLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gbnVsbCE9PWQmJnZvaWQgMCE9PWR9KTt0aGlzLl9zZWxlY3Rpb24uY2xlYXIoYSk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy5fc2VsZWN0aW9uLnNldEl0ZW1TZWxlY3RlZChhW2NdLCEwKTt0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiYhdGhpcy5fc2VsZWN0aW9uLmdldCgpLmxlbmd0aCYmdGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5mYWxsYmFja1NlbGVjdGlvbikmJnRoaXMuc2VsZWN0KHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfSxfc2VsZWN0aW9uQ2hhbmdlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fc2VsZWN0aW9uLmdldCgpO3RoaXMubXVsdGk/KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoYSksdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGEubGVuZ3RoP2FbMF06bnVsbCkpOm51bGwhPT1hJiZ2b2lkIDAhPT1hPyh0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKFthXSksCnRoaXMuX3NldFNlbGVjdGVkSXRlbShhKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoYSk7MD5jP3RoaXMucHVzaCgic2VsZWN0ZWRWYWx1ZXMiLGEpOnRoaXMuc3BsaWNlKCJzZWxlY3RlZFZhbHVlcyIsYywxKX0sX3ZhbHVlc1RvSXRlbXM6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/bnVsbDphLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fdmFsdWVUb0l0ZW0oYyl9LHRoaXMpfX07UG9seW1lci5Jcm9uTXVsdGlTZWxlY3RhYmxlQmVoYXZpb3I9W1BvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvcixQb2x5bWVyLklyb25NdWx0aVNlbGVjdGFibGVCZWhhdmlvckltcGxdOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tbWVudS1iZWhhdmlvci9pcm9uLW1lbnUtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25NZW51QmVoYXZpb3JJbXBsPXtwcm9wZXJ0aWVzOntmb2N1c2VkSXRlbTp7b2JzZXJ2ZXI6Il9mb2N1c2VkSXRlbUNoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6T2JqZWN0fSxhdHRyRm9ySXRlbVRpdGxlOnt0eXBlOlN0cmluZ30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxfTU9ESUZJRVJfS0VZUzoiQWx0IEFsdEdyYXBoIENhcHNMb2NrIENvbnRyb2wgRm4gRm5Mb2NrIEh5cGVyIE1ldGEgTnVtTG9jayBPUyBTY3JvbGxMb2NrIFNoaWZ0IFN1cGVyIFN5bWJvbCBTeW1ib2xMb2NrIi5zcGxpdCgiICIpLF9TRUFSQ0hfUkVTRVRfVElNRU9VVF9NUzoxRTMsX3ByZXZpb3VzVGFiSW5kZXg6MCxob3N0QXR0cmlidXRlczp7cm9sZToibWVudSJ9LG9ic2VydmVyczpbIl91cGRhdGVNdWx0aXNlbGVjdGFibGUobXVsdGkpIl0sbGlzdGVuZXJzOntmb2N1czoiX29uRm9jdXMiLGtleWRvd246Il9vbktleWRvd24iLAoiaXJvbi1pdGVtcy1jaGFuZ2VkIjoiX29uSXJvbkl0ZW1zQ2hhbmdlZCJ9LGtleUJpbmRpbmdzOnt1cDoiX29uVXBLZXkiLGRvd246Il9vbkRvd25LZXkiLGVzYzoiX29uRXNjS2V5Iiwic2hpZnQrdGFiOmtleWRvd24iOiJfb25TaGlmdFRhYkRvd24ifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxzZWxlY3Q6ZnVuY3Rpb24oYSl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKTt2YXIgYz10aGlzLl92YWx1ZVRvSXRlbShhKTtjJiZjLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKXx8KHRoaXMuX3NldEZvY3VzZWRJdGVtKGMpLFBvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9ySW1wbC5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBhPXRoaXMubXVsdGk/CnRoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbihjKXtjLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGM9PT1hPyIwIjoiLTEiKX0sdGhpcyl9LF91cGRhdGVNdWx0aXNlbGVjdGFibGU6ZnVuY3Rpb24oYSl7YT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9LF9mb2N1c1dpdGhLZXlib2FyZEV2ZW50OmZ1bmN0aW9uKGEpe2lmKC0xPT09dGhpcy5fTU9ESUZJRVJfS0VZUy5pbmRleE9mKGEua2V5KSl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoIl9jbGVhclNlYXJjaFRleHQiKTt2YXIgYz10aGlzLl9zZWFyY2hUZXh0fHwiIjtjKz0oYS5rZXkmJjE9PWEua2V5Lmxlbmd0aD9hLmtleTpTdHJpbmcuZnJvbUNoYXJDb2RlKGEua2V5Q29kZSkpLnRvTG9jYWxlTG93ZXJDYXNlKCk7CmE9Yy5sZW5ndGg7Zm9yKHZhciBkPTAsZjtmPXRoaXMuaXRlbXNbZF07ZCsrKWlmKCFmLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIGc9dGhpcy5hdHRyRm9ySXRlbVRpdGxlfHwidGV4dENvbnRlbnQiO2c9KGZbZ118fGYuZ2V0QXR0cmlidXRlKGcpfHwiIikudHJpbSgpO2lmKCEoZy5sZW5ndGg8YSkmJmcuc2xpY2UoMCxhKS50b0xvY2FsZUxvd2VyQ2FzZSgpPT1jKXt0aGlzLl9zZXRGb2N1c2VkSXRlbShmKTticmVha319dGhpcy5fc2VhcmNoVGV4dD1jO3RoaXMuZGVib3VuY2UoIl9jbGVhclNlYXJjaFRleHQiLHRoaXMuX2NsZWFyU2VhcmNoVGV4dCx0aGlzLl9TRUFSQ0hfUkVTRVRfVElNRU9VVF9NUyl9fSxfY2xlYXJTZWFyY2hUZXh0OmZ1bmN0aW9uKCl7dGhpcy5fc2VhcmNoVGV4dD0iIn0sX2ZvY3VzUHJldmlvdXM6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5pdGVtcy5sZW5ndGgsYz1OdW1iZXIodGhpcy5pbmRleE9mKHRoaXMuZm9jdXNlZEl0ZW0pKSxkPTE7ZDwKYSsxO2QrKyl7dmFyIGY9dGhpcy5pdGVtc1soYy1kK2EpJWFdO2lmKCFmLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIGc9UG9seW1lci5kb20oZikuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O3RoaXMuX3NldEZvY3VzZWRJdGVtKGYpO2lmKFBvbHltZXIuZG9tKGcpLmFjdGl2ZUVsZW1lbnQ9PWYpYnJlYWt9fX0sX2ZvY3VzTmV4dDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLml0ZW1zLmxlbmd0aCxjPU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLGQ9MTtkPGErMTtkKyspe3ZhciBmPXRoaXMuaXRlbXNbKGMrZCklYV07aWYoIWYuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgZz1Qb2x5bWVyLmRvbShmKS5nZXRPd25lclJvb3QoKXx8ZG9jdW1lbnQ7dGhpcy5fc2V0Rm9jdXNlZEl0ZW0oZik7aWYoUG9seW1lci5kb20oZykuYWN0aXZlRWxlbWVudD09ZilicmVha319fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oYSxjKXtjP2Euc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwKInRydWUiKTphLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIpO1BvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvci5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmYy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKTshYXx8YS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fHRoaXMuZGlzYWJsZWR8fChhLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksYS5mb2N1cygpKX0sX29uSXJvbkl0ZW1zQ2hhbmdlZDpmdW5jdGlvbihhKXthLmRldGFpbC5hZGRlZE5vZGVzLmxlbmd0aCYmdGhpcy5fcmVzZXRUYWJpbmRpY2VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO1BvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGwuX3NoaWZ0VGFiUHJlc3NlZD0hMDt0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKTt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLAoiLTEiKTt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixhKTtQb2x5bWVyLklyb25NZW51QmVoYXZpb3JJbXBsLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihhKXshUG9seW1lci5Jcm9uTWVudUJlaGF2aW9ySW1wbC5fc2hpZnRUYWJQcmVzc2VkJiYoYT1Qb2x5bWVyLmRvbShhKS5yb290VGFyZ2V0LGE9PT10aGlzfHwidW5kZWZpbmVkIj09PXR5cGVvZiBhLnRhYkluZGV4fHx0aGlzLmlzTGlnaHREZXNjZW5kYW50KGEpKSYmKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgYz10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpO2M/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0oYyk6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9LF9vblVwS2V5OmZ1bmN0aW9uKGEpe3RoaXMuX2ZvY3VzUHJldmlvdXMoKTsKYS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGEpe3RoaXMuX2ZvY3VzTmV4dCgpO2EuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5mb2N1c2VkSXRlbTthJiZhLmJsdXIoKX0sX29uS2V5ZG93bjpmdW5jdGlvbihhKXt0aGlzLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyhhLCJ1cCBkb3duIGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KGEpO2Euc3RvcFByb3BhZ2F0aW9uKCl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oYSl7UG9seW1lci5Jcm9uU2VsZWN0YWJsZUJlaGF2aW9yLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGEpO2Euc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oYSl7YT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OgowLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpKTp0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0aGlzLl9wcmV2aW91c1RhYkluZGV4KX19O1BvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGwuX3NoaWZ0VGFiUHJlc3NlZD0hMTtQb2x5bWVyLklyb25NZW51QmVoYXZpb3I9W1BvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9yLFBvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3IsUG9seW1lci5Jcm9uTWVudUJlaGF2aW9ySW1wbF07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItbGlzdGJveC9wYXBlci1saXN0Ym94Lmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InBhcGVyLWxpc3Rib3giLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uTWVudUJlaGF2aW9yXSxob3N0QXR0cmlidXRlczp7cm9sZToibGlzdGJveCJ9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLWl0ZW0vcGFwZXItaXRlbS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJJdGVtQmVoYXZpb3JJbXBsPXtob3N0QXR0cmlidXRlczp7cm9sZToib3B0aW9uIix0YWJpbmRleDoiMCJ9fTtQb2x5bWVyLlBhcGVySXRlbUJlaGF2aW9yPVtQb2x5bWVyLklyb25CdXR0b25TdGF0ZSxQb2x5bWVyLklyb25Db250cm9sU3RhdGUsUG9seW1lci5QYXBlckl0ZW1CZWhhdmlvckltcGxdOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLWl0ZW0vcGFwZXItaXRlbS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pdGVtIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJJdGVtQmVoYXZpb3JdfSk7CgovKgoKIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vanMuZm91bmRhdGlvbi8+CiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCiovCihmdW5jdGlvbigpe3ZhciB1bmRlZmluZWQ7dmFyIFZFUlNJT049IjQuMTcuNSI7dmFyIExBUkdFX0FSUkFZX1NJWkU9MjAwO3ZhciBDT1JFX0VSUk9SX1RFWFQ9IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xXHgzZHBvbnlmaWxsLiIsRlVOQ19FUlJPUl9URVhUPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjt2YXIgSEFTSF9VTkRFRklORUQ9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO3ZhciBNQVhfTUVNT0laRV9TSVpFPTUwMDt2YXIgUExBQ0VIT0xERVI9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iO3ZhciBDTE9ORV9ERUVQX0ZMQUc9MSxDTE9ORV9GTEFUX0ZMQUc9MixDTE9ORV9TWU1CT0xTX0ZMQUc9NDt2YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUc9MSxDT01QQVJFX1VOT1JERVJFRF9GTEFHPTI7dmFyIFdSQVBfQklORF9GTEFHPTEsV1JBUF9CSU5EX0tFWV9GTEFHPTIsV1JBUF9DVVJSWV9CT1VORF9GTEFHPTQsV1JBUF9DVVJSWV9GTEFHPQo4LFdSQVBfQ1VSUllfUklHSFRfRkxBRz0xNixXUkFQX1BBUlRJQUxfRkxBRz0zMixXUkFQX1BBUlRJQUxfUklHSFRfRkxBRz02NCxXUkFQX0FSWV9GTEFHPTEyOCxXUkFQX1JFQVJHX0ZMQUc9MjU2LFdSQVBfRkxJUF9GTEFHPTUxMjt2YXIgREVGQVVMVF9UUlVOQ19MRU5HVEg9MzAsREVGQVVMVF9UUlVOQ19PTUlTU0lPTj0iLi4uIjt2YXIgSE9UX0NPVU5UPTgwMCxIT1RfU1BBTj0xNjt2YXIgTEFaWV9GSUxURVJfRkxBRz0xLExBWllfTUFQX0ZMQUc9MixMQVpZX1dISUxFX0ZMQUc9Mzt2YXIgSU5GSU5JVFk9MS8wLE1BWF9TQUZFX0lOVEVHRVI9OTAwNzE5OTI1NDc0MDk5MSxNQVhfSU5URUdFUj0xLjc5NzY5MzEzNDg2MjMxNTdFMzA4LE5BTj0wLzA7dmFyIE1BWF9BUlJBWV9MRU5HVEg9NDI5NDk2NzI5NSxNQVhfQVJSQVlfSU5ERVg9TUFYX0FSUkFZX0xFTkdUSC0xLEhBTEZfTUFYX0FSUkFZX0xFTkdUSD1NQVhfQVJSQVlfTEVOR1RIPj4+MTt2YXIgd3JhcEZsYWdzPVtbImFyeSIsCldSQVBfQVJZX0ZMQUddLFsiYmluZCIsV1JBUF9CSU5EX0ZMQUddLFsiYmluZEtleSIsV1JBUF9CSU5EX0tFWV9GTEFHXSxbImN1cnJ5IixXUkFQX0NVUlJZX0ZMQUddLFsiY3VycnlSaWdodCIsV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxbImZsaXAiLFdSQVBfRkxJUF9GTEFHXSxbInBhcnRpYWwiLFdSQVBfUEFSVElBTF9GTEFHXSxbInBhcnRpYWxSaWdodCIsV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFsicmVhcmciLFdSQVBfUkVBUkdfRkxBR11dO3ZhciBhcmdzVGFnPSJbb2JqZWN0IEFyZ3VtZW50c10iLGFycmF5VGFnPSJbb2JqZWN0IEFycmF5XSIsYXN5bmNUYWc9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGJvb2xUYWc9IltvYmplY3QgQm9vbGVhbl0iLGRhdGVUYWc9IltvYmplY3QgRGF0ZV0iLGRvbUV4Y1RhZz0iW29iamVjdCBET01FeGNlcHRpb25dIixlcnJvclRhZz0iW29iamVjdCBFcnJvcl0iLGZ1bmNUYWc9IltvYmplY3QgRnVuY3Rpb25dIixnZW5UYWc9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiwKbWFwVGFnPSJbb2JqZWN0IE1hcF0iLG51bWJlclRhZz0iW29iamVjdCBOdW1iZXJdIixudWxsVGFnPSJbb2JqZWN0IE51bGxdIixvYmplY3RUYWc9IltvYmplY3QgT2JqZWN0XSIscHJvbWlzZVRhZz0iW29iamVjdCBQcm9taXNlXSIscHJveHlUYWc9IltvYmplY3QgUHJveHldIixyZWdleHBUYWc9IltvYmplY3QgUmVnRXhwXSIsc2V0VGFnPSJbb2JqZWN0IFNldF0iLHN0cmluZ1RhZz0iW29iamVjdCBTdHJpbmddIixzeW1ib2xUYWc9IltvYmplY3QgU3ltYm9sXSIsdW5kZWZpbmVkVGFnPSJbb2JqZWN0IFVuZGVmaW5lZF0iLHdlYWtNYXBUYWc9IltvYmplY3QgV2Vha01hcF0iLHdlYWtTZXRUYWc9IltvYmplY3QgV2Vha1NldF0iO3ZhciBhcnJheUJ1ZmZlclRhZz0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGRhdGFWaWV3VGFnPSJbb2JqZWN0IERhdGFWaWV3XSIsZmxvYXQzMlRhZz0iW29iamVjdCBGbG9hdDMyQXJyYXldIixmbG9hdDY0VGFnPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLAppbnQ4VGFnPSJbb2JqZWN0IEludDhBcnJheV0iLGludDE2VGFnPSJbb2JqZWN0IEludDE2QXJyYXldIixpbnQzMlRhZz0iW29iamVjdCBJbnQzMkFycmF5XSIsdWludDhUYWc9IltvYmplY3QgVWludDhBcnJheV0iLHVpbnQ4Q2xhbXBlZFRhZz0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHVpbnQxNlRhZz0iW29iamVjdCBVaW50MTZBcnJheV0iLHVpbnQzMlRhZz0iW29iamVjdCBVaW50MzJBcnJheV0iO3ZhciByZUVtcHR5U3RyaW5nTGVhZGluZz0vXGJfX3AgXCs9ICcnOy9nLHJlRW1wdHlTdHJpbmdNaWRkbGU9L1xiKF9fcCBcKz0pICcnIFwrL2cscmVFbXB0eVN0cmluZ1RyYWlsaW5nPS8oX19lXCguKj9cKXxcYl9fdFwpKSBcK1xuJyc7L2c7dmFyIHJlRXNjYXBlZEh0bWw9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLHJlVW5lc2NhcGVkSHRtbD0vWyY8PiInXS9nLHJlSGFzRXNjYXBlZEh0bWw9UmVnRXhwKHJlRXNjYXBlZEh0bWwuc291cmNlKSxyZUhhc1VuZXNjYXBlZEh0bWw9ClJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKTt2YXIgcmVFc2NhcGU9LzwlLShbXHNcU10rPyklPi9nLHJlRXZhbHVhdGU9LzwlKFtcc1xTXSs/KSU+L2cscmVJbnRlcnBvbGF0ZT0vPCU9KFtcc1xTXSs/KSU+L2c7dmFyIHJlSXNEZWVwUHJvcD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxyZUlzUGxhaW5Qcm9wPS9eXHcqJC8scmVQcm9wTmFtZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZzt2YXIgcmVSZWdFeHBDaGFyPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxyZUhhc1JlZ0V4cENoYXI9UmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO3ZhciByZVRyaW09L15ccyt8XHMrJC9nLHJlVHJpbVN0YXJ0PS9eXHMrLyxyZVRyaW1FbmQ9L1xzKyQvO3ZhciByZVdyYXBDb21tZW50PS9ceyg/OlxuXC9cKiBcW3dyYXBwZWQgd2l0aCAuK1xdIFwqXC8pP1xuPy8sCnJlV3JhcERldGFpbHM9L1x7XG5cL1wqIFxbd3JhcHBlZCB3aXRoICguKylcXSBcKi8scmVTcGxpdERldGFpbHM9Lyw/ICYgLzt2YXIgcmVBc2NpaVdvcmQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZzt2YXIgcmVFc2NhcGVDaGFyPS9cXChcXCk/L2c7dmFyIHJlRXNUZW1wbGF0ZT0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2c7dmFyIHJlRmxhZ3M9L1x3KiQvO3ZhciByZUlzQmFkSGV4PS9eWy0rXTB4WzAtOWEtZl0rJC9pO3ZhciByZUlzQmluYXJ5PS9eMGJbMDFdKyQvaTt2YXIgcmVJc0hvc3RDdG9yPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvO3ZhciByZUlzT2N0YWw9L14wb1swLTddKyQvaTt2YXIgcmVJc1VpbnQ9L14oPzowfFsxLTldXGQqKSQvO3ZhciByZUxhdGluPS9bXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1ceGZmXHUwMTAwLVx1MDE3Zl0vZzt2YXIgcmVOb01hdGNoPS8oJF4pLzt2YXIgcmVVbmVzY2FwZWRTdHJpbmc9Ci9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZzt2YXIgcnNBc3RyYWxSYW5nZT0iXFx1ZDgwMC1cXHVkZmZmIixyc0NvbWJvTWFya3NSYW5nZT0iXFx1MDMwMC1cXHUwMzZmIixyZUNvbWJvSGFsZk1hcmtzUmFuZ2U9IlxcdWZlMjAtXFx1ZmUyZiIscnNDb21ib1N5bWJvbHNSYW5nZT0iXFx1MjBkMC1cXHUyMGZmIixyc0NvbWJvUmFuZ2U9cnNDb21ib01hcmtzUmFuZ2UrcmVDb21ib0hhbGZNYXJrc1JhbmdlK3JzQ29tYm9TeW1ib2xzUmFuZ2UscnNEaW5nYmF0UmFuZ2U9IlxcdTI3MDAtXFx1MjdiZiIscnNMb3dlclJhbmdlPSJhLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmIixyc01hdGhPcFJhbmdlPSJcXHhhY1xceGIxXFx4ZDdcXHhmNyIscnNOb25DaGFyUmFuZ2U9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixyc1B1bmN0dWF0aW9uUmFuZ2U9IlxcdTIwMDAtXFx1MjA2ZiIscnNTcGFjZVJhbmdlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLApyc1VwcGVyUmFuZ2U9IkEtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGUiLHJzVmFyUmFuZ2U9IlxcdWZlMGVcXHVmZTBmIixyc0JyZWFrUmFuZ2U9cnNNYXRoT3BSYW5nZStyc05vbkNoYXJSYW5nZStyc1B1bmN0dWF0aW9uUmFuZ2UrcnNTcGFjZVJhbmdlO3ZhciByc0Fwb3M9IlsnXHUyMDE5XSIscnNBc3RyYWw9IlsiK3JzQXN0cmFsUmFuZ2UrIl0iLHJzQnJlYWs9IlsiK3JzQnJlYWtSYW5nZSsiXSIscnNDb21ibz0iWyIrcnNDb21ib1JhbmdlKyJdIixyc0RpZ2l0cz0iXFxkKyIscnNEaW5nYmF0PSJbIityc0RpbmdiYXRSYW5nZSsiXSIscnNMb3dlcj0iWyIrcnNMb3dlclJhbmdlKyJdIixyc01pc2M9IlteIityc0FzdHJhbFJhbmdlK3JzQnJlYWtSYW5nZStyc0RpZ2l0cytyc0RpbmdiYXRSYW5nZStyc0xvd2VyUmFuZ2UrcnNVcHBlclJhbmdlKyJdIixyc0ZpdHo9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIscnNNb2RpZmllcj0iKD86Iityc0NvbWJvKyJ8Iityc0ZpdHorIikiLHJzTm9uQXN0cmFsPQoiW14iK3JzQXN0cmFsUmFuZ2UrIl0iLHJzUmVnaW9uYWw9Iig/OlxcdWQ4M2NbXFx1ZGRlNi1cXHVkZGZmXSl7Mn0iLHJzU3VyclBhaXI9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLHJzVXBwZXI9IlsiK3JzVXBwZXJSYW5nZSsiXSIscnNaV0o9IlxcdTIwMGQiO3ZhciByc01pc2NMb3dlcj0iKD86Iityc0xvd2VyKyJ8Iityc01pc2MrIikiLHJzTWlzY1VwcGVyPSIoPzoiK3JzVXBwZXIrInwiK3JzTWlzYysiKSIscnNPcHRDb250ckxvd2VyPSIoPzoiK3JzQXBvcysiKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPyIscnNPcHRDb250clVwcGVyPSIoPzoiK3JzQXBvcysiKD86RHxMTHxNfFJFfFN8VHxWRSkpPyIscmVPcHRNb2Q9cnNNb2RpZmllcisiPyIscnNPcHRWYXI9IlsiK3JzVmFyUmFuZ2UrIl0/Iixyc09wdEpvaW49Iig/OiIrcnNaV0orIig/OiIrW3JzTm9uQXN0cmFsLHJzUmVnaW9uYWwscnNTdXJyUGFpcl0uam9pbigifCIpKyIpIityc09wdFZhcityZU9wdE1vZCsKIikqIixyc09yZExvd2VyPSJcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxkdGgpKD9ceDNkXFxifFtBLVpfXSkiLHJzT3JkVXBwZXI9IlxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXGRUSCkoP1x4M2RcXGJ8W2Etel9dKSIscnNTZXE9cnNPcHRWYXIrcmVPcHRNb2QrcnNPcHRKb2luLHJzRW1vamk9Iig/OiIrW3JzRGluZ2JhdCxyc1JlZ2lvbmFsLHJzU3VyclBhaXJdLmpvaW4oInwiKSsiKSIrcnNTZXEscnNTeW1ib2w9Iig/OiIrW3JzTm9uQXN0cmFsK3JzQ29tYm8rIj8iLHJzQ29tYm8scnNSZWdpb25hbCxyc1N1cnJQYWlyLHJzQXN0cmFsXS5qb2luKCJ8IikrIikiO3ZhciByZUFwb3M9UmVnRXhwKHJzQXBvcywiZyIpO3ZhciByZUNvbWJvTWFyaz1SZWdFeHAocnNDb21ibywiZyIpO3ZhciByZVVuaWNvZGU9UmVnRXhwKHJzRml0eisiKD9ceDNkIityc0ZpdHorIil8Iityc1N5bWJvbCtyc1NlcSwiZyIpO3ZhciByZVVuaWNvZGVXb3JkPVJlZ0V4cChbcnNVcHBlcisiPyIrCnJzTG93ZXIrIisiK3JzT3B0Q29udHJMb3dlcisiKD9ceDNkIitbcnNCcmVhayxyc1VwcGVyLCIkIl0uam9pbigifCIpKyIpIixyc01pc2NVcHBlcisiKyIrcnNPcHRDb250clVwcGVyKyIoP1x4M2QiK1tyc0JyZWFrLHJzVXBwZXIrcnNNaXNjTG93ZXIsIiQiXS5qb2luKCJ8IikrIikiLHJzVXBwZXIrIj8iK3JzTWlzY0xvd2VyKyIrIityc09wdENvbnRyTG93ZXIscnNVcHBlcisiKyIrcnNPcHRDb250clVwcGVyLHJzT3JkVXBwZXIscnNPcmRMb3dlcixyc0RpZ2l0cyxyc0Vtb2ppXS5qb2luKCJ8IiksImciKTt2YXIgcmVIYXNVbmljb2RlPVJlZ0V4cCgiWyIrcnNaV0orcnNBc3RyYWxSYW5nZStyc0NvbWJvUmFuZ2UrcnNWYXJSYW5nZSsiXSIpO3ZhciByZUhhc1VuaWNvZGVXb3JkPS9bYS16XVtBLVpdfFtBLVpdezIsfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLzt2YXIgY29udGV4dFByb3BzPVsiQXJyYXkiLCJCdWZmZXIiLCJEYXRhVmlldyIsCiJEYXRlIiwiRXJyb3IiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJGdW5jdGlvbiIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiTWFwIiwiTWF0aCIsIk9iamVjdCIsIlByb21pc2UiLCJSZWdFeHAiLCJTZXQiLCJTdHJpbmciLCJTeW1ib2wiLCJUeXBlRXJyb3IiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiV2Vha01hcCIsIl8iLCJjbGVhclRpbWVvdXQiLCJpc0Zpbml0ZSIsInBhcnNlSW50Iiwic2V0VGltZW91dCJdO3ZhciB0ZW1wbGF0ZUNvdW50ZXI9LTE7dmFyIHR5cGVkQXJyYXlUYWdzPXt9O3R5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddPXR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddPXR5cGVkQXJyYXlUYWdzW2ludDhUYWddPXR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXT10eXBlZEFycmF5VGFnc1tpbnQzMlRhZ109dHlwZWRBcnJheVRhZ3NbdWludDhUYWddPXR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ109CnR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ109dHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXT10cnVlO3R5cGVkQXJyYXlUYWdzW2FyZ3NUYWddPXR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXT10eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ109dHlwZWRBcnJheVRhZ3NbYm9vbFRhZ109dHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddPXR5cGVkQXJyYXlUYWdzW2RhdGVUYWddPXR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXT10eXBlZEFycmF5VGFnc1tmdW5jVGFnXT10eXBlZEFycmF5VGFnc1ttYXBUYWddPXR5cGVkQXJyYXlUYWdzW251bWJlclRhZ109dHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXT10eXBlZEFycmF5VGFnc1tyZWdleHBUYWddPXR5cGVkQXJyYXlUYWdzW3NldFRhZ109dHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXT10eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXT1mYWxzZTt2YXIgY2xvbmVhYmxlVGFncz17fTtjbG9uZWFibGVUYWdzW2FyZ3NUYWddPWNsb25lYWJsZVRhZ3NbYXJyYXlUYWddPQpjbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXT1jbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXT1jbG9uZWFibGVUYWdzW2Jvb2xUYWddPWNsb25lYWJsZVRhZ3NbZGF0ZVRhZ109Y2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXT1jbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddPWNsb25lYWJsZVRhZ3NbaW50OFRhZ109Y2xvbmVhYmxlVGFnc1tpbnQxNlRhZ109Y2xvbmVhYmxlVGFnc1tpbnQzMlRhZ109Y2xvbmVhYmxlVGFnc1ttYXBUYWddPWNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXT1jbG9uZWFibGVUYWdzW29iamVjdFRhZ109Y2xvbmVhYmxlVGFnc1tyZWdleHBUYWddPWNsb25lYWJsZVRhZ3Nbc2V0VGFnXT1jbG9uZWFibGVUYWdzW3N0cmluZ1RhZ109Y2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddPWNsb25lYWJsZVRhZ3NbdWludDhUYWddPWNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXT1jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ109Y2xvbmVhYmxlVGFnc1t1aW50MzJUYWddPXRydWU7CmNsb25lYWJsZVRhZ3NbZXJyb3JUYWddPWNsb25lYWJsZVRhZ3NbZnVuY1RhZ109Y2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXT1mYWxzZTt2YXIgZGVidXJyZWRMZXR0ZXJzPXsiXHUwMGMwIjoiQSIsIlx1MDBjMSI6IkEiLCJcdTAwYzIiOiJBIiwiXHUwMGMzIjoiQSIsIlx1MDBjNCI6IkEiLCJcdTAwYzUiOiJBIiwiXHUwMGUwIjoiYSIsIlx1MDBlMSI6ImEiLCJcdTAwZTIiOiJhIiwiXHUwMGUzIjoiYSIsIlx1MDBlNCI6ImEiLCJcdTAwZTUiOiJhIiwiXHUwMGM3IjoiQyIsIlx1MDBlNyI6ImMiLCJcdTAwZDAiOiJEIiwiXHUwMGYwIjoiZCIsIlx1MDBjOCI6IkUiLCJcdTAwYzkiOiJFIiwiXHUwMGNhIjoiRSIsIlx1MDBjYiI6IkUiLCJcdTAwZTgiOiJlIiwiXHUwMGU5IjoiZSIsIlx1MDBlYSI6ImUiLCJcdTAwZWIiOiJlIiwiXHUwMGNjIjoiSSIsIlx1MDBjZCI6IkkiLCJcdTAwY2UiOiJJIiwiXHUwMGNmIjoiSSIsIlx1MDBlYyI6ImkiLCJcdTAwZWQiOiJpIiwiXHUwMGVlIjoiaSIsCiJcdTAwZWYiOiJpIiwiXHUwMGQxIjoiTiIsIlx1MDBmMSI6Im4iLCJcdTAwZDIiOiJPIiwiXHUwMGQzIjoiTyIsIlx1MDBkNCI6Ik8iLCJcdTAwZDUiOiJPIiwiXHUwMGQ2IjoiTyIsIlx1MDBkOCI6Ik8iLCJcdTAwZjIiOiJvIiwiXHUwMGYzIjoibyIsIlx1MDBmNCI6Im8iLCJcdTAwZjUiOiJvIiwiXHUwMGY2IjoibyIsIlx1MDBmOCI6Im8iLCJcdTAwZDkiOiJVIiwiXHUwMGRhIjoiVSIsIlx1MDBkYiI6IlUiLCJcdTAwZGMiOiJVIiwiXHUwMGY5IjoidSIsIlx1MDBmYSI6InUiLCJcdTAwZmIiOiJ1IiwiXHUwMGZjIjoidSIsIlx1MDBkZCI6IlkiLCJcdTAwZmQiOiJ5IiwiXHUwMGZmIjoieSIsIlx1MDBjNiI6IkFlIiwiXHUwMGU2IjoiYWUiLCJcdTAwZGUiOiJUaCIsIlx1MDBmZSI6InRoIiwiXHUwMGRmIjoic3MiLCJcdTAxMDAiOiJBIiwiXHUwMTAyIjoiQSIsIlx1MDEwNCI6IkEiLCJcdTAxMDEiOiJhIiwiXHUwMTAzIjoiYSIsIlx1MDEwNSI6ImEiLCJcdTAxMDYiOiJDIiwiXHUwMTA4IjoiQyIsCiJcdTAxMGEiOiJDIiwiXHUwMTBjIjoiQyIsIlx1MDEwNyI6ImMiLCJcdTAxMDkiOiJjIiwiXHUwMTBiIjoiYyIsIlx1MDEwZCI6ImMiLCJcdTAxMGUiOiJEIiwiXHUwMTEwIjoiRCIsIlx1MDEwZiI6ImQiLCJcdTAxMTEiOiJkIiwiXHUwMTEyIjoiRSIsIlx1MDExNCI6IkUiLCJcdTAxMTYiOiJFIiwiXHUwMTE4IjoiRSIsIlx1MDExYSI6IkUiLCJcdTAxMTMiOiJlIiwiXHUwMTE1IjoiZSIsIlx1MDExNyI6ImUiLCJcdTAxMTkiOiJlIiwiXHUwMTFiIjoiZSIsIlx1MDExYyI6IkciLCJcdTAxMWUiOiJHIiwiXHUwMTIwIjoiRyIsIlx1MDEyMiI6IkciLCJcdTAxMWQiOiJnIiwiXHUwMTFmIjoiZyIsIlx1MDEyMSI6ImciLCJcdTAxMjMiOiJnIiwiXHUwMTI0IjoiSCIsIlx1MDEyNiI6IkgiLCJcdTAxMjUiOiJoIiwiXHUwMTI3IjoiaCIsIlx1MDEyOCI6IkkiLCJcdTAxMmEiOiJJIiwiXHUwMTJjIjoiSSIsIlx1MDEyZSI6IkkiLCJcdTAxMzAiOiJJIiwiXHUwMTI5IjoiaSIsIlx1MDEyYiI6ImkiLAoiXHUwMTJkIjoiaSIsIlx1MDEyZiI6ImkiLCJcdTAxMzEiOiJpIiwiXHUwMTM0IjoiSiIsIlx1MDEzNSI6ImoiLCJcdTAxMzYiOiJLIiwiXHUwMTM3IjoiayIsIlx1MDEzOCI6ImsiLCJcdTAxMzkiOiJMIiwiXHUwMTNiIjoiTCIsIlx1MDEzZCI6IkwiLCJcdTAxM2YiOiJMIiwiXHUwMTQxIjoiTCIsIlx1MDEzYSI6ImwiLCJcdTAxM2MiOiJsIiwiXHUwMTNlIjoibCIsIlx1MDE0MCI6ImwiLCJcdTAxNDIiOiJsIiwiXHUwMTQzIjoiTiIsIlx1MDE0NSI6Ik4iLCJcdTAxNDciOiJOIiwiXHUwMTRhIjoiTiIsIlx1MDE0NCI6Im4iLCJcdTAxNDYiOiJuIiwiXHUwMTQ4IjoibiIsIlx1MDE0YiI6Im4iLCJcdTAxNGMiOiJPIiwiXHUwMTRlIjoiTyIsIlx1MDE1MCI6Ik8iLCJcdTAxNGQiOiJvIiwiXHUwMTRmIjoibyIsIlx1MDE1MSI6Im8iLCJcdTAxNTQiOiJSIiwiXHUwMTU2IjoiUiIsIlx1MDE1OCI6IlIiLCJcdTAxNTUiOiJyIiwiXHUwMTU3IjoiciIsIlx1MDE1OSI6InIiLCJcdTAxNWEiOiJTIiwKIlx1MDE1YyI6IlMiLCJcdTAxNWUiOiJTIiwiXHUwMTYwIjoiUyIsIlx1MDE1YiI6InMiLCJcdTAxNWQiOiJzIiwiXHUwMTVmIjoicyIsIlx1MDE2MSI6InMiLCJcdTAxNjIiOiJUIiwiXHUwMTY0IjoiVCIsIlx1MDE2NiI6IlQiLCJcdTAxNjMiOiJ0IiwiXHUwMTY1IjoidCIsIlx1MDE2NyI6InQiLCJcdTAxNjgiOiJVIiwiXHUwMTZhIjoiVSIsIlx1MDE2YyI6IlUiLCJcdTAxNmUiOiJVIiwiXHUwMTcwIjoiVSIsIlx1MDE3MiI6IlUiLCJcdTAxNjkiOiJ1IiwiXHUwMTZiIjoidSIsIlx1MDE2ZCI6InUiLCJcdTAxNmYiOiJ1IiwiXHUwMTcxIjoidSIsIlx1MDE3MyI6InUiLCJcdTAxNzQiOiJXIiwiXHUwMTc1IjoidyIsIlx1MDE3NiI6IlkiLCJcdTAxNzciOiJ5IiwiXHUwMTc4IjoiWSIsIlx1MDE3OSI6IloiLCJcdTAxN2IiOiJaIiwiXHUwMTdkIjoiWiIsIlx1MDE3YSI6InoiLCJcdTAxN2MiOiJ6IiwiXHUwMTdlIjoieiIsIlx1MDEzMiI6IklKIiwiXHUwMTMzIjoiaWoiLCJcdTAxNTIiOiJPZSIsCiJcdTAxNTMiOiJvZSIsIlx1MDE0OSI6IiduIiwiXHUwMTdmIjoicyJ9O3ZhciBodG1sRXNjYXBlcz17Ilx4MjYiOiJceDI2YW1wOyIsIlx4M2MiOiJceDI2bHQ7IiwiXHgzZSI6Ilx4MjZndDsiLCciJzoiXHgyNnF1b3Q7IiwiJyI6Ilx4MjYjMzk7In07dmFyIGh0bWxVbmVzY2FwZXM9eyJceDI2YW1wOyI6Ilx4MjYiLCJceDI2bHQ7IjoiXHgzYyIsIlx4MjZndDsiOiJceDNlIiwiXHgyNnF1b3Q7IjonIicsIlx4MjYjMzk7IjoiJyJ9O3ZhciBzdHJpbmdFc2NhcGVzPXsiXFwiOiJcXCIsIiciOiInIiwiXG4iOiJuIiwiXHIiOiJyIiwiXHUyMDI4IjoidTIwMjgiLCJcdTIwMjkiOiJ1MjAyOSJ9O3ZhciBmcmVlUGFyc2VGbG9hdD1wYXJzZUZsb2F0LGZyZWVQYXJzZUludD1wYXJzZUludDt2YXIgZnJlZUdsb2JhbD10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIGZyZWVTZWxmPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmCnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO3ZhciByb290PWZyZWVHbG9iYWx8fGZyZWVTZWxmfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3ZhciBmcmVlRXhwb3J0cz10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzO3ZhciBmcmVlTW9kdWxlPWZyZWVFeHBvcnRzJiZ0eXBlb2YgbW9kdWxlPT0ib2JqZWN0IiYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGU7dmFyIG1vZHVsZUV4cG9ydHM9ZnJlZU1vZHVsZSYmZnJlZU1vZHVsZS5leHBvcnRzPT09ZnJlZUV4cG9ydHM7dmFyIGZyZWVQcm9jZXNzPW1vZHVsZUV4cG9ydHMmJmZyZWVHbG9iYWwucHJvY2Vzczt2YXIgbm9kZVV0aWw9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGZyZWVQcm9jZXNzJiZmcmVlUHJvY2Vzcy5iaW5kaW5nJiZmcmVlUHJvY2Vzcy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goZSl7fX0oKTt2YXIgbm9kZUlzQXJyYXlCdWZmZXI9bm9kZVV0aWwmJgpub2RlVXRpbC5pc0FycmF5QnVmZmVyLG5vZGVJc0RhdGU9bm9kZVV0aWwmJm5vZGVVdGlsLmlzRGF0ZSxub2RlSXNNYXA9bm9kZVV0aWwmJm5vZGVVdGlsLmlzTWFwLG5vZGVJc1JlZ0V4cD1ub2RlVXRpbCYmbm9kZVV0aWwuaXNSZWdFeHAsbm9kZUlzU2V0PW5vZGVVdGlsJiZub2RlVXRpbC5pc1NldCxub2RlSXNUeXBlZEFycmF5PW5vZGVVdGlsJiZub2RlVXRpbC5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gYXBwbHkoZnVuYyx0aGlzQXJnLGFyZ3Mpe3N3aXRjaChhcmdzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7Y2FzZSAxOnJldHVybiBmdW5jLmNhbGwodGhpc0FyZyxhcmdzWzBdKTtjYXNlIDI6cmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLGFyZ3NbMF0sYXJnc1sxXSk7Y2FzZSAzOnJldHVybiBmdW5jLmNhbGwodGhpc0FyZyxhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSl9cmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZyxhcmdzKX1mdW5jdGlvbiBhcnJheUFnZ3JlZ2F0b3IoYXJyYXksCnNldHRlcixpdGVyYXRlZSxhY2N1bXVsYXRvcil7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XTtzZXR0ZXIoYWNjdW11bGF0b3IsdmFsdWUsaXRlcmF0ZWUodmFsdWUpLGFycmF5KX1yZXR1cm4gYWNjdW11bGF0b3J9ZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LGl0ZXJhdGVlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKWlmKGl0ZXJhdGVlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSk9PT1mYWxzZSlicmVhaztyZXR1cm4gYXJyYXl9ZnVuY3Rpb24gYXJyYXlFYWNoUmlnaHQoYXJyYXksaXRlcmF0ZWUpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUobGVuZ3RoLS0paWYoaXRlcmF0ZWUoYXJyYXlbbGVuZ3RoXSxsZW5ndGgsYXJyYXkpPT09ZmFsc2UpYnJlYWs7CnJldHVybiBhcnJheX1mdW5jdGlvbiBhcnJheUV2ZXJ5KGFycmF5LHByZWRpY2F0ZSl7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aClpZighcHJlZGljYXRlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSkpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfWZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LHByZWRpY2F0ZSl7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aCxyZXNJbmRleD0wLHJlc3VsdD1bXTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XTtpZihwcmVkaWNhdGUodmFsdWUsaW5kZXgsYXJyYXkpKXJlc3VsdFtyZXNJbmRleCsrXT12YWx1ZX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksdmFsdWUpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7cmV0dXJuISFsZW5ndGgmJmJhc2VJbmRleE9mKGFycmF5LAp2YWx1ZSwwKT4tMX1mdW5jdGlvbiBhcnJheUluY2x1ZGVzV2l0aChhcnJheSx2YWx1ZSxjb21wYXJhdG9yKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKWlmKGNvbXBhcmF0b3IodmFsdWUsYXJyYXlbaW5kZXhdKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksaXRlcmF0ZWUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGgscmVzdWx0PUFycmF5KGxlbmd0aCk7d2hpbGUoKytpbmRleDxsZW5ndGgpcmVzdWx0W2luZGV4XT1pdGVyYXRlZShhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LHZhbHVlcyl7dmFyIGluZGV4PS0xLGxlbmd0aD12YWx1ZXMubGVuZ3RoLG9mZnNldD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpYXJyYXlbb2Zmc2V0K2luZGV4XT0KdmFsdWVzW2luZGV4XTtyZXR1cm4gYXJyYXl9ZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksaXRlcmF0ZWUsYWNjdW11bGF0b3IsaW5pdEFjY3VtKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKGluaXRBY2N1bSYmbGVuZ3RoKWFjY3VtdWxhdG9yPWFycmF5WysraW5kZXhdO3doaWxlKCsraW5kZXg8bGVuZ3RoKWFjY3VtdWxhdG9yPWl0ZXJhdGVlKGFjY3VtdWxhdG9yLGFycmF5W2luZGV4XSxpbmRleCxhcnJheSk7cmV0dXJuIGFjY3VtdWxhdG9yfWZ1bmN0aW9uIGFycmF5UmVkdWNlUmlnaHQoYXJyYXksaXRlcmF0ZWUsYWNjdW11bGF0b3IsaW5pdEFjY3VtKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKGluaXRBY2N1bSYmbGVuZ3RoKWFjY3VtdWxhdG9yPWFycmF5Wy0tbGVuZ3RoXTt3aGlsZShsZW5ndGgtLSlhY2N1bXVsYXRvcj1pdGVyYXRlZShhY2N1bXVsYXRvcixhcnJheVtsZW5ndGhdLGxlbmd0aCxhcnJheSk7CnJldHVybiBhY2N1bXVsYXRvcn1mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXkscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKWlmKHByZWRpY2F0ZShhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpKXJldHVybiB0cnVlO3JldHVybiBmYWxzZX12YXIgYXNjaWlTaXplPWJhc2VQcm9wZXJ0eSgibGVuZ3RoIik7ZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZyl7cmV0dXJuIHN0cmluZy5zcGxpdCgiIil9ZnVuY3Rpb24gYXNjaWlXb3JkcyhzdHJpbmcpe3JldHVybiBzdHJpbmcubWF0Y2gocmVBc2NpaVdvcmQpfHxbXX1mdW5jdGlvbiBiYXNlRmluZEtleShjb2xsZWN0aW9uLHByZWRpY2F0ZSxlYWNoRnVuYyl7dmFyIHJlc3VsdDtlYWNoRnVuYyhjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGtleSxjb2xsZWN0aW9uKXtpZihwcmVkaWNhdGUodmFsdWUsa2V5LGNvbGxlY3Rpb24pKXtyZXN1bHQ9a2V5OwpyZXR1cm4gZmFsc2V9fSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LHByZWRpY2F0ZSxmcm9tSW5kZXgsZnJvbVJpZ2h0KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aCxpbmRleD1mcm9tSW5kZXgrKGZyb21SaWdodD8xOi0xKTt3aGlsZShmcm9tUmlnaHQ/aW5kZXgtLTorK2luZGV4PGxlbmd0aClpZihwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KSlyZXR1cm4gaW5kZXg7cmV0dXJuLTF9ZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksdmFsdWUsZnJvbUluZGV4KXtyZXR1cm4gdmFsdWU9PT12YWx1ZT9zdHJpY3RJbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCk6YmFzZUZpbmRJbmRleChhcnJheSxiYXNlSXNOYU4sZnJvbUluZGV4KX1mdW5jdGlvbiBiYXNlSW5kZXhPZldpdGgoYXJyYXksdmFsdWUsZnJvbUluZGV4LGNvbXBhcmF0b3Ipe3ZhciBpbmRleD1mcm9tSW5kZXgtMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8Cmxlbmd0aClpZihjb21wYXJhdG9yKGFycmF5W2luZGV4XSx2YWx1ZSkpcmV0dXJuIGluZGV4O3JldHVybi0xfWZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSl7cmV0dXJuIHZhbHVlIT09dmFsdWV9ZnVuY3Rpb24gYmFzZU1lYW4oYXJyYXksaXRlcmF0ZWUpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7cmV0dXJuIGxlbmd0aD9iYXNlU3VtKGFycmF5LGl0ZXJhdGVlKS9sZW5ndGg6TkFOfWZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBvYmplY3Q9PW51bGw/dW5kZWZpbmVkOm9iamVjdFtrZXldfX1mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3Qpe3JldHVybiBmdW5jdGlvbihrZXkpe3JldHVybiBvYmplY3Q9PW51bGw/dW5kZWZpbmVkOm9iamVjdFtrZXldfX1mdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24saXRlcmF0ZWUsYWNjdW11bGF0b3IsaW5pdEFjY3VtLGVhY2hGdW5jKXtlYWNoRnVuYyhjb2xsZWN0aW9uLApmdW5jdGlvbih2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKXthY2N1bXVsYXRvcj1pbml0QWNjdW0/KGluaXRBY2N1bT1mYWxzZSx2YWx1ZSk6aXRlcmF0ZWUoYWNjdW11bGF0b3IsdmFsdWUsaW5kZXgsY29sbGVjdGlvbil9KTtyZXR1cm4gYWNjdW11bGF0b3J9ZnVuY3Rpb24gYmFzZVNvcnRCeShhcnJheSxjb21wYXJlcil7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7YXJyYXkuc29ydChjb21wYXJlcik7d2hpbGUobGVuZ3RoLS0pYXJyYXlbbGVuZ3RoXT1hcnJheVtsZW5ndGhdLnZhbHVlO3JldHVybiBhcnJheX1mdW5jdGlvbiBiYXNlU3VtKGFycmF5LGl0ZXJhdGVlKXt2YXIgcmVzdWx0LGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBjdXJyZW50PWl0ZXJhdGVlKGFycmF5W2luZGV4XSk7aWYoY3VycmVudCE9PXVuZGVmaW5lZClyZXN1bHQ9cmVzdWx0PT09dW5kZWZpbmVkP2N1cnJlbnQ6cmVzdWx0K2N1cnJlbnR9cmV0dXJuIHJlc3VsdH0KZnVuY3Rpb24gYmFzZVRpbWVzKG4saXRlcmF0ZWUpe3ZhciBpbmRleD0tMSxyZXN1bHQ9QXJyYXkobik7d2hpbGUoKytpbmRleDxuKXJlc3VsdFtpbmRleF09aXRlcmF0ZWUoaW5kZXgpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZVRvUGFpcnMob2JqZWN0LHByb3BzKXtyZXR1cm4gYXJyYXlNYXAocHJvcHMsZnVuY3Rpb24oa2V5KXtyZXR1cm5ba2V5LG9iamVjdFtrZXldXX0pfWZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKXtyZXR1cm4gZnVuY3Rpb24odmFsdWUpe3JldHVybiBmdW5jKHZhbHVlKX19ZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QscHJvcHMpe3JldHVybiBhcnJheU1hcChwcm9wcyxmdW5jdGlvbihrZXkpe3JldHVybiBvYmplY3Rba2V5XX0pfWZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLGtleSl7cmV0dXJuIGNhY2hlLmhhcyhrZXkpfWZ1bmN0aW9uIGNoYXJzU3RhcnRJbmRleChzdHJTeW1ib2xzLGNoclN5bWJvbHMpe3ZhciBpbmRleD0tMSxsZW5ndGg9c3RyU3ltYm9scy5sZW5ndGg7CndoaWxlKCsraW5kZXg8bGVuZ3RoJiZiYXNlSW5kZXhPZihjaHJTeW1ib2xzLHN0clN5bWJvbHNbaW5kZXhdLDApPi0xKTtyZXR1cm4gaW5kZXh9ZnVuY3Rpb24gY2hhcnNFbmRJbmRleChzdHJTeW1ib2xzLGNoclN5bWJvbHMpe3ZhciBpbmRleD1zdHJTeW1ib2xzLmxlbmd0aDt3aGlsZShpbmRleC0tJiZiYXNlSW5kZXhPZihjaHJTeW1ib2xzLHN0clN5bWJvbHNbaW5kZXhdLDApPi0xKTtyZXR1cm4gaW5kZXh9ZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LHBsYWNlaG9sZGVyKXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXN1bHQ9MDt3aGlsZShsZW5ndGgtLSlpZihhcnJheVtsZW5ndGhdPT09cGxhY2Vob2xkZXIpKytyZXN1bHQ7cmV0dXJuIHJlc3VsdH12YXIgZGVidXJyTGV0dGVyPWJhc2VQcm9wZXJ0eU9mKGRlYnVycmVkTGV0dGVycyk7dmFyIGVzY2FwZUh0bWxDaGFyPWJhc2VQcm9wZXJ0eU9mKGh0bWxFc2NhcGVzKTtmdW5jdGlvbiBlc2NhcGVTdHJpbmdDaGFyKGNocil7cmV0dXJuIlxcIisKc3RyaW5nRXNjYXBlc1tjaHJdfWZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCxrZXkpe3JldHVybiBvYmplY3Q9PW51bGw/dW5kZWZpbmVkOm9iamVjdFtrZXldfWZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKXtyZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKX1mdW5jdGlvbiBoYXNVbmljb2RlV29yZChzdHJpbmcpe3JldHVybiByZUhhc1VuaWNvZGVXb3JkLnRlc3Qoc3RyaW5nKX1mdW5jdGlvbiBpdGVyYXRvclRvQXJyYXkoaXRlcmF0b3Ipe3ZhciBkYXRhLHJlc3VsdD1bXTt3aGlsZSghKGRhdGE9aXRlcmF0b3IubmV4dCgpKS5kb25lKXJlc3VsdC5wdXNoKGRhdGEudmFsdWUpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gbWFwVG9BcnJheShtYXApe3ZhciBpbmRleD0tMSxyZXN1bHQ9QXJyYXkobWFwLnNpemUpO21hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLGtleSl7cmVzdWx0WysraW5kZXhdPVtrZXksdmFsdWVdfSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsCnRyYW5zZm9ybSl7cmV0dXJuIGZ1bmN0aW9uKGFyZyl7cmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpfX1mdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSxwbGFjZWhvbGRlcil7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGgscmVzSW5kZXg9MCxyZXN1bHQ9W107d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF07aWYodmFsdWU9PT1wbGFjZWhvbGRlcnx8dmFsdWU9PT1QTEFDRUhPTERFUil7YXJyYXlbaW5kZXhdPVBMQUNFSE9MREVSO3Jlc3VsdFtyZXNJbmRleCsrXT1pbmRleH19cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCxrZXkpe3JldHVybiBrZXk9PSJfX3Byb3RvX18iP3VuZGVmaW5lZDpvYmplY3Rba2V5XX1mdW5jdGlvbiBzZXRUb0FycmF5KHNldCl7dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShzZXQuc2l6ZSk7c2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpe3Jlc3VsdFsrK2luZGV4XT12YWx1ZX0pOwpyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHNldFRvUGFpcnMoc2V0KXt2YXIgaW5kZXg9LTEscmVzdWx0PUFycmF5KHNldC5zaXplKTtzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSl7cmVzdWx0WysraW5kZXhdPVt2YWx1ZSx2YWx1ZV19KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksdmFsdWUsZnJvbUluZGV4KXt2YXIgaW5kZXg9ZnJvbUluZGV4LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aClpZihhcnJheVtpbmRleF09PT12YWx1ZSlyZXR1cm4gaW5kZXg7cmV0dXJuLTF9ZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksdmFsdWUsZnJvbUluZGV4KXt2YXIgaW5kZXg9ZnJvbUluZGV4KzE7d2hpbGUoaW5kZXgtLSlpZihhcnJheVtpbmRleF09PT12YWx1ZSlyZXR1cm4gaW5kZXg7cmV0dXJuIGluZGV4fWZ1bmN0aW9uIHN0cmluZ1NpemUoc3RyaW5nKXtyZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpP3VuaWNvZGVTaXplKHN0cmluZyk6CmFzY2lpU2l6ZShzdHJpbmcpfWZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKXtyZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpP3VuaWNvZGVUb0FycmF5KHN0cmluZyk6YXNjaWlUb0FycmF5KHN0cmluZyl9dmFyIHVuZXNjYXBlSHRtbENoYXI9YmFzZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7ZnVuY3Rpb24gdW5pY29kZVNpemUoc3RyaW5nKXt2YXIgcmVzdWx0PXJlVW5pY29kZS5sYXN0SW5kZXg9MDt3aGlsZShyZVVuaWNvZGUudGVzdChzdHJpbmcpKSsrcmVzdWx0O3JldHVybiByZXN1bHR9ZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKXtyZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZSl8fFtdfWZ1bmN0aW9uIHVuaWNvZGVXb3JkcyhzdHJpbmcpe3JldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlV29yZCl8fFtdfXZhciBydW5JbkNvbnRleHQ9ZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQpe2NvbnRleHQ9Y29udGV4dD09bnVsbD9yb290Ol8uZGVmYXVsdHMocm9vdC5PYmplY3QoKSwKY29udGV4dCxfLnBpY2socm9vdCxjb250ZXh0UHJvcHMpKTt2YXIgQXJyYXk9Y29udGV4dC5BcnJheSxEYXRlPWNvbnRleHQuRGF0ZSxFcnJvcj1jb250ZXh0LkVycm9yLEZ1bmN0aW9uPWNvbnRleHQuRnVuY3Rpb24sTWF0aD1jb250ZXh0Lk1hdGgsT2JqZWN0PWNvbnRleHQuT2JqZWN0LFJlZ0V4cD1jb250ZXh0LlJlZ0V4cCxTdHJpbmc9Y29udGV4dC5TdHJpbmcsVHlwZUVycm9yPWNvbnRleHQuVHlwZUVycm9yO3ZhciBhcnJheVByb3RvPUFycmF5LnByb3RvdHlwZSxmdW5jUHJvdG89RnVuY3Rpb24ucHJvdG90eXBlLG9iamVjdFByb3RvPU9iamVjdC5wcm90b3R5cGU7dmFyIGNvcmVKc0RhdGE9Y29udGV4dFsiX19jb3JlLWpzX3NoYXJlZF9fIl07dmFyIGZ1bmNUb1N0cmluZz1mdW5jUHJvdG8udG9TdHJpbmc7dmFyIGhhc093blByb3BlcnR5PW9iamVjdFByb3RvLmhhc093blByb3BlcnR5O3ZhciBpZENvdW50ZXI9MDt2YXIgbWFza1NyY0tleT1mdW5jdGlvbigpe3ZhciB1aWQ9Ci9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSYmY29yZUpzRGF0YS5rZXlzJiZjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gdWlkPyJTeW1ib2woc3JjKV8xLiIrdWlkOiIifSgpO3ZhciBuYXRpdmVPYmplY3RUb1N0cmluZz1vYmplY3RQcm90by50b1N0cmluZzt2YXIgb2JqZWN0Q3RvclN0cmluZz1mdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO3ZhciBvbGREYXNoPXJvb3QuXzt2YXIgcmVJc05hdGl2ZT1SZWdFeHAoIl4iK2Z1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwiXFwkXHgyNiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTt2YXIgQnVmZmVyPW1vZHVsZUV4cG9ydHM/Y29udGV4dC5CdWZmZXI6dW5kZWZpbmVkLFN5bWJvbD1jb250ZXh0LlN5bWJvbCxVaW50OEFycmF5PWNvbnRleHQuVWludDhBcnJheSxhbGxvY1Vuc2FmZT0KQnVmZmVyP0J1ZmZlci5hbGxvY1Vuc2FmZTp1bmRlZmluZWQsZ2V0UHJvdG90eXBlPW92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCksb2JqZWN0Q3JlYXRlPU9iamVjdC5jcmVhdGUscHJvcGVydHlJc0VudW1lcmFibGU9b2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGUsc3BsaWNlPWFycmF5UHJvdG8uc3BsaWNlLHNwcmVhZGFibGVTeW1ib2w9U3ltYm9sP1N5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGU6dW5kZWZpbmVkLHN5bUl0ZXJhdG9yPVN5bWJvbD9TeW1ib2wuaXRlcmF0b3I6dW5kZWZpbmVkLHN5bVRvU3RyaW5nVGFnPVN5bWJvbD9TeW1ib2wudG9TdHJpbmdUYWc6dW5kZWZpbmVkO3ZhciBkZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbigpe3RyeXt2YXIgZnVuYz1nZXROYXRpdmUoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO2Z1bmMoe30sIiIse30pO3JldHVybiBmdW5jfWNhdGNoKGUpe319KCk7dmFyIGN0eENsZWFyVGltZW91dD1jb250ZXh0LmNsZWFyVGltZW91dCE9PQpyb290LmNsZWFyVGltZW91dCYmY29udGV4dC5jbGVhclRpbWVvdXQsY3R4Tm93PURhdGUmJkRhdGUubm93IT09cm9vdC5EYXRlLm5vdyYmRGF0ZS5ub3csY3R4U2V0VGltZW91dD1jb250ZXh0LnNldFRpbWVvdXQhPT1yb290LnNldFRpbWVvdXQmJmNvbnRleHQuc2V0VGltZW91dDt2YXIgbmF0aXZlQ2VpbD1NYXRoLmNlaWwsbmF0aXZlRmxvb3I9TWF0aC5mbG9vcixuYXRpdmVHZXRTeW1ib2xzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsbmF0aXZlSXNCdWZmZXI9QnVmZmVyP0J1ZmZlci5pc0J1ZmZlcjp1bmRlZmluZWQsbmF0aXZlSXNGaW5pdGU9Y29udGV4dC5pc0Zpbml0ZSxuYXRpdmVKb2luPWFycmF5UHJvdG8uam9pbixuYXRpdmVLZXlzPW92ZXJBcmcoT2JqZWN0LmtleXMsT2JqZWN0KSxuYXRpdmVNYXg9TWF0aC5tYXgsbmF0aXZlTWluPU1hdGgubWluLG5hdGl2ZU5vdz1EYXRlLm5vdyxuYXRpdmVQYXJzZUludD1jb250ZXh0LnBhcnNlSW50LG5hdGl2ZVJhbmRvbT0KTWF0aC5yYW5kb20sbmF0aXZlUmV2ZXJzZT1hcnJheVByb3RvLnJldmVyc2U7dmFyIERhdGFWaWV3PWdldE5hdGl2ZShjb250ZXh0LCJEYXRhVmlldyIpLE1hcD1nZXROYXRpdmUoY29udGV4dCwiTWFwIiksUHJvbWlzZT1nZXROYXRpdmUoY29udGV4dCwiUHJvbWlzZSIpLFNldD1nZXROYXRpdmUoY29udGV4dCwiU2V0IiksV2Vha01hcD1nZXROYXRpdmUoY29udGV4dCwiV2Vha01hcCIpLG5hdGl2ZUNyZWF0ZT1nZXROYXRpdmUoT2JqZWN0LCJjcmVhdGUiKTt2YXIgbWV0YU1hcD1XZWFrTWFwJiZuZXcgV2Vha01hcDt2YXIgcmVhbE5hbWVzPXt9O3ZhciBkYXRhVmlld0N0b3JTdHJpbmc9dG9Tb3VyY2UoRGF0YVZpZXcpLG1hcEN0b3JTdHJpbmc9dG9Tb3VyY2UoTWFwKSxwcm9taXNlQ3RvclN0cmluZz10b1NvdXJjZShQcm9taXNlKSxzZXRDdG9yU3RyaW5nPXRvU291cmNlKFNldCksd2Vha01hcEN0b3JTdHJpbmc9dG9Tb3VyY2UoV2Vha01hcCk7dmFyIHN5bWJvbFByb3RvPVN5bWJvbD8KU3ltYm9sLnByb3RvdHlwZTp1bmRlZmluZWQsc3ltYm9sVmFsdWVPZj1zeW1ib2xQcm90bz9zeW1ib2xQcm90by52YWx1ZU9mOnVuZGVmaW5lZCxzeW1ib2xUb1N0cmluZz1zeW1ib2xQcm90bz9zeW1ib2xQcm90by50b1N0cmluZzp1bmRlZmluZWQ7ZnVuY3Rpb24gbG9kYXNoKHZhbHVlKXtpZihpc09iamVjdExpa2UodmFsdWUpJiYhaXNBcnJheSh2YWx1ZSkmJiEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikpe2lmKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcilyZXR1cm4gdmFsdWU7aWYoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwiX193cmFwcGVkX18iKSlyZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKX1yZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpfXZhciBiYXNlQ3JlYXRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gb2JqZWN0KCl7fXJldHVybiBmdW5jdGlvbihwcm90byl7aWYoIWlzT2JqZWN0KHByb3RvKSlyZXR1cm57fTtpZihvYmplY3RDcmVhdGUpcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7Cm9iamVjdC5wcm90b3R5cGU9cHJvdG87dmFyIHJlc3VsdD1uZXcgb2JqZWN0O29iamVjdC5wcm90b3R5cGU9dW5kZWZpbmVkO3JldHVybiByZXN1bHR9fSgpO2Z1bmN0aW9uIGJhc2VMb2Rhc2goKXt9ZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSxjaGFpbkFsbCl7dGhpcy5fX3dyYXBwZWRfXz12YWx1ZTt0aGlzLl9fYWN0aW9uc19fPVtdO3RoaXMuX19jaGFpbl9fPSEhY2hhaW5BbGw7dGhpcy5fX2luZGV4X189MDt0aGlzLl9fdmFsdWVzX189dW5kZWZpbmVkfWxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzPXsiZXNjYXBlIjpyZUVzY2FwZSwiZXZhbHVhdGUiOnJlRXZhbHVhdGUsImludGVycG9sYXRlIjpyZUludGVycG9sYXRlLCJ2YXJpYWJsZSI6IiIsImltcG9ydHMiOnsiXyI6bG9kYXNofX07bG9kYXNoLnByb3RvdHlwZT1iYXNlTG9kYXNoLnByb3RvdHlwZTtsb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yPWxvZGFzaDtMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZT1iYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTsKTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3I9TG9kYXNoV3JhcHBlcjtmdW5jdGlvbiBMYXp5V3JhcHBlcih2YWx1ZSl7dGhpcy5fX3dyYXBwZWRfXz12YWx1ZTt0aGlzLl9fYWN0aW9uc19fPVtdO3RoaXMuX19kaXJfXz0xO3RoaXMuX19maWx0ZXJlZF9fPWZhbHNlO3RoaXMuX19pdGVyYXRlZXNfXz1bXTt0aGlzLl9fdGFrZUNvdW50X189TUFYX0FSUkFZX0xFTkdUSDt0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBsYXp5Q2xvbmUoKXt2YXIgcmVzdWx0PW5ldyBMYXp5V3JhcHBlcih0aGlzLl9fd3JhcHBlZF9fKTtyZXN1bHQuX19hY3Rpb25zX189Y29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO3Jlc3VsdC5fX2Rpcl9fPXRoaXMuX19kaXJfXztyZXN1bHQuX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fO3Jlc3VsdC5fX2l0ZXJhdGVlc19fPWNvcHlBcnJheSh0aGlzLl9faXRlcmF0ZWVzX18pO3Jlc3VsdC5fX3Rha2VDb3VudF9fPXRoaXMuX190YWtlQ291bnRfXzsKcmVzdWx0Ll9fdmlld3NfXz1jb3B5QXJyYXkodGhpcy5fX3ZpZXdzX18pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gbGF6eVJldmVyc2UoKXtpZih0aGlzLl9fZmlsdGVyZWRfXyl7dmFyIHJlc3VsdD1uZXcgTGF6eVdyYXBwZXIodGhpcyk7cmVzdWx0Ll9fZGlyX189LTE7cmVzdWx0Ll9fZmlsdGVyZWRfXz10cnVlfWVsc2V7cmVzdWx0PXRoaXMuY2xvbmUoKTtyZXN1bHQuX19kaXJfXyo9LTF9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBsYXp5VmFsdWUoKXt2YXIgYXJyYXk9dGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLGRpcj10aGlzLl9fZGlyX18saXNBcnI9aXNBcnJheShhcnJheSksaXNSaWdodD1kaXI8MCxhcnJMZW5ndGg9aXNBcnI/YXJyYXkubGVuZ3RoOjAsdmlldz1nZXRWaWV3KDAsYXJyTGVuZ3RoLHRoaXMuX192aWV3c19fKSxzdGFydD12aWV3LnN0YXJ0LGVuZD12aWV3LmVuZCxsZW5ndGg9ZW5kLXN0YXJ0LGluZGV4PWlzUmlnaHQ/ZW5kOnN0YXJ0LTEsaXRlcmF0ZWVzPXRoaXMuX19pdGVyYXRlZXNfXywKaXRlckxlbmd0aD1pdGVyYXRlZXMubGVuZ3RoLHJlc0luZGV4PTAsdGFrZUNvdW50PW5hdGl2ZU1pbihsZW5ndGgsdGhpcy5fX3Rha2VDb3VudF9fKTtpZighaXNBcnJ8fCFpc1JpZ2h0JiZhcnJMZW5ndGg9PWxlbmd0aCYmdGFrZUNvdW50PT1sZW5ndGgpcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUoYXJyYXksdGhpcy5fX2FjdGlvbnNfXyk7dmFyIHJlc3VsdD1bXTtvdXRlcjp3aGlsZShsZW5ndGgtLSYmcmVzSW5kZXg8dGFrZUNvdW50KXtpbmRleCs9ZGlyO3ZhciBpdGVySW5kZXg9LTEsdmFsdWU9YXJyYXlbaW5kZXhdO3doaWxlKCsraXRlckluZGV4PGl0ZXJMZW5ndGgpe3ZhciBkYXRhPWl0ZXJhdGVlc1tpdGVySW5kZXhdLGl0ZXJhdGVlPWRhdGEuaXRlcmF0ZWUsdHlwZT1kYXRhLnR5cGUsY29tcHV0ZWQ9aXRlcmF0ZWUodmFsdWUpO2lmKHR5cGU9PUxBWllfTUFQX0ZMQUcpdmFsdWU9Y29tcHV0ZWQ7ZWxzZSBpZighY29tcHV0ZWQpaWYodHlwZT09TEFaWV9GSUxURVJfRkxBRyljb250aW51ZSBvdXRlcjsKZWxzZSBicmVhayBvdXRlcn1yZXN1bHRbcmVzSW5kZXgrK109dmFsdWV9cmV0dXJuIHJlc3VsdH1MYXp5V3JhcHBlci5wcm90b3R5cGU9YmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7TGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUxhenlXcmFwcGVyO2Z1bmN0aW9uIEhhc2goZW50cmllcyl7dmFyIGluZGV4PS0xLGxlbmd0aD1lbnRyaWVzPT1udWxsPzA6ZW50cmllcy5sZW5ndGg7dGhpcy5jbGVhcigpO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgZW50cnk9ZW50cmllc1tpbmRleF07dGhpcy5zZXQoZW50cnlbMF0sZW50cnlbMV0pfX1mdW5jdGlvbiBoYXNoQ2xlYXIoKXt0aGlzLl9fZGF0YV9fPW5hdGl2ZUNyZWF0ZT9uYXRpdmVDcmVhdGUobnVsbCk6e307dGhpcy5zaXplPTB9ZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpe3ZhciByZXN1bHQ9dGhpcy5oYXMoa2V5KSYmZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTt0aGlzLnNpemUtPXJlc3VsdD8xOjA7CnJldHVybiByZXN1bHR9ZnVuY3Rpb24gaGFzaEdldChrZXkpe3ZhciBkYXRhPXRoaXMuX19kYXRhX187aWYobmF0aXZlQ3JlYXRlKXt2YXIgcmVzdWx0PWRhdGFba2V5XTtyZXR1cm4gcmVzdWx0PT09SEFTSF9VTkRFRklORUQ/dW5kZWZpbmVkOnJlc3VsdH1yZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLGtleSk/ZGF0YVtrZXldOnVuZGVmaW5lZH1mdW5jdGlvbiBoYXNoSGFzKGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gbmF0aXZlQ3JlYXRlP2RhdGFba2V5XSE9PXVuZGVmaW5lZDpoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsa2V5KX1mdW5jdGlvbiBoYXNoU2V0KGtleSx2YWx1ZSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXzt0aGlzLnNpemUrPXRoaXMuaGFzKGtleSk/MDoxO2RhdGFba2V5XT1uYXRpdmVDcmVhdGUmJnZhbHVlPT09dW5kZWZpbmVkP0hBU0hfVU5ERUZJTkVEOnZhbHVlO3JldHVybiB0aGlzfUhhc2gucHJvdG90eXBlLmNsZWFyPWhhc2hDbGVhcjsKSGFzaC5wcm90b3R5cGVbImRlbGV0ZSJdPWhhc2hEZWxldGU7SGFzaC5wcm90b3R5cGUuZ2V0PWhhc2hHZXQ7SGFzaC5wcm90b3R5cGUuaGFzPWhhc2hIYXM7SGFzaC5wcm90b3R5cGUuc2V0PWhhc2hTZXQ7ZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpe3ZhciBpbmRleD0tMSxsZW5ndGg9ZW50cmllcz09bnVsbD8wOmVudHJpZXMubGVuZ3RoO3RoaXMuY2xlYXIoKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGVudHJ5PWVudHJpZXNbaW5kZXhdO3RoaXMuc2V0KGVudHJ5WzBdLGVudHJ5WzFdKX19ZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKXt0aGlzLl9fZGF0YV9fPVtdO3RoaXMuc2l6ZT0wfWZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpe3ZhciBkYXRhPXRoaXMuX19kYXRhX18saW5kZXg9YXNzb2NJbmRleE9mKGRhdGEsa2V5KTtpZihpbmRleDwwKXJldHVybiBmYWxzZTt2YXIgbGFzdEluZGV4PWRhdGEubGVuZ3RoLTE7aWYoaW5kZXg9PWxhc3RJbmRleClkYXRhLnBvcCgpOwplbHNlIHNwbGljZS5jYWxsKGRhdGEsaW5kZXgsMSk7LS10aGlzLnNpemU7cmV0dXJuIHRydWV9ZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXyxpbmRleD1hc3NvY0luZGV4T2YoZGF0YSxrZXkpO3JldHVybiBpbmRleDwwP3VuZGVmaW5lZDpkYXRhW2luZGV4XVsxXX1mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KXtyZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sa2V5KT4tMX1mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LHZhbHVlKXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fLGluZGV4PWFzc29jSW5kZXhPZihkYXRhLGtleSk7aWYoaW5kZXg8MCl7Kyt0aGlzLnNpemU7ZGF0YS5wdXNoKFtrZXksdmFsdWVdKX1lbHNlIGRhdGFbaW5kZXhdWzFdPXZhbHVlO3JldHVybiB0aGlzfUxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXI9bGlzdENhY2hlQ2xlYXI7TGlzdENhY2hlLnByb3RvdHlwZVsiZGVsZXRlIl09bGlzdENhY2hlRGVsZXRlO0xpc3RDYWNoZS5wcm90b3R5cGUuZ2V0PQpsaXN0Q2FjaGVHZXQ7TGlzdENhY2hlLnByb3RvdHlwZS5oYXM9bGlzdENhY2hlSGFzO0xpc3RDYWNoZS5wcm90b3R5cGUuc2V0PWxpc3RDYWNoZVNldDtmdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWVudHJpZXM9PW51bGw/MDplbnRyaWVzLmxlbmd0aDt0aGlzLmNsZWFyKCk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBlbnRyeT1lbnRyaWVzW2luZGV4XTt0aGlzLnNldChlbnRyeVswXSxlbnRyeVsxXSl9fWZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKXt0aGlzLnNpemU9MDt0aGlzLl9fZGF0YV9fPXsiaGFzaCI6bmV3IEhhc2gsIm1hcCI6bmV3IChNYXB8fExpc3RDYWNoZSksInN0cmluZyI6bmV3IEhhc2h9fWZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSl7dmFyIHJlc3VsdD1nZXRNYXBEYXRhKHRoaXMsa2V5KVsiZGVsZXRlIl0oa2V5KTt0aGlzLnNpemUtPXJlc3VsdD8xOjA7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpe3JldHVybiBnZXRNYXBEYXRhKHRoaXMsCmtleSkuZ2V0KGtleSl9ZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KXtyZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLGtleSkuaGFzKGtleSl9ZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LHZhbHVlKXt2YXIgZGF0YT1nZXRNYXBEYXRhKHRoaXMsa2V5KSxzaXplPWRhdGEuc2l6ZTtkYXRhLnNldChrZXksdmFsdWUpO3RoaXMuc2l6ZSs9ZGF0YS5zaXplPT1zaXplPzA6MTtyZXR1cm4gdGhpc31NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXI9bWFwQ2FjaGVDbGVhcjtNYXBDYWNoZS5wcm90b3R5cGVbImRlbGV0ZSJdPW1hcENhY2hlRGVsZXRlO01hcENhY2hlLnByb3RvdHlwZS5nZXQ9bWFwQ2FjaGVHZXQ7TWFwQ2FjaGUucHJvdG90eXBlLmhhcz1tYXBDYWNoZUhhcztNYXBDYWNoZS5wcm90b3R5cGUuc2V0PW1hcENhY2hlU2V0O2Z1bmN0aW9uIFNldENhY2hlKHZhbHVlcyl7dmFyIGluZGV4PS0xLGxlbmd0aD12YWx1ZXM9PW51bGw/MDp2YWx1ZXMubGVuZ3RoO3RoaXMuX19kYXRhX189bmV3IE1hcENhY2hlOwp3aGlsZSgrK2luZGV4PGxlbmd0aCl0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKX1mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSl7dGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsSEFTSF9VTkRFRklORUQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpfVNldENhY2hlLnByb3RvdHlwZS5hZGQ9U2V0Q2FjaGUucHJvdG90eXBlLnB1c2g9c2V0Q2FjaGVBZGQ7U2V0Q2FjaGUucHJvdG90eXBlLmhhcz1zZXRDYWNoZUhhcztmdW5jdGlvbiBTdGFjayhlbnRyaWVzKXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fPW5ldyBMaXN0Q2FjaGUoZW50cmllcyk7dGhpcy5zaXplPWRhdGEuc2l6ZX1mdW5jdGlvbiBzdGFja0NsZWFyKCl7dGhpcy5fX2RhdGFfXz1uZXcgTGlzdENhY2hlO3RoaXMuc2l6ZT0wfWZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXyxyZXN1bHQ9ZGF0YVsiZGVsZXRlIl0oa2V5KTsKdGhpcy5zaXplPWRhdGEuc2l6ZTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHN0YWNrR2V0KGtleSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSl9ZnVuY3Rpb24gc3RhY2tIYXMoa2V5KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KX1mdW5jdGlvbiBzdGFja1NldChrZXksdmFsdWUpe3ZhciBkYXRhPXRoaXMuX19kYXRhX187aWYoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSl7dmFyIHBhaXJzPWRhdGEuX19kYXRhX187aWYoIU1hcHx8cGFpcnMubGVuZ3RoPExBUkdFX0FSUkFZX1NJWkUtMSl7cGFpcnMucHVzaChba2V5LHZhbHVlXSk7dGhpcy5zaXplPSsrZGF0YS5zaXplO3JldHVybiB0aGlzfWRhdGE9dGhpcy5fX2RhdGFfXz1uZXcgTWFwQ2FjaGUocGFpcnMpfWRhdGEuc2V0KGtleSx2YWx1ZSk7dGhpcy5zaXplPWRhdGEuc2l6ZTtyZXR1cm4gdGhpc31TdGFjay5wcm90b3R5cGUuY2xlYXI9c3RhY2tDbGVhcjtTdGFjay5wcm90b3R5cGVbImRlbGV0ZSJdPXN0YWNrRGVsZXRlOwpTdGFjay5wcm90b3R5cGUuZ2V0PXN0YWNrR2V0O1N0YWNrLnByb3RvdHlwZS5oYXM9c3RhY2tIYXM7U3RhY2sucHJvdG90eXBlLnNldD1zdGFja1NldDtmdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLGluaGVyaXRlZCl7dmFyIGlzQXJyPWlzQXJyYXkodmFsdWUpLGlzQXJnPSFpc0FyciYmaXNBcmd1bWVudHModmFsdWUpLGlzQnVmZj0haXNBcnImJiFpc0FyZyYmaXNCdWZmZXIodmFsdWUpLGlzVHlwZT0haXNBcnImJiFpc0FyZyYmIWlzQnVmZiYmaXNUeXBlZEFycmF5KHZhbHVlKSxza2lwSW5kZXhlcz1pc0Fycnx8aXNBcmd8fGlzQnVmZnx8aXNUeXBlLHJlc3VsdD1za2lwSW5kZXhlcz9iYXNlVGltZXModmFsdWUubGVuZ3RoLFN0cmluZyk6W10sbGVuZ3RoPXJlc3VsdC5sZW5ndGg7Zm9yKHZhciBrZXkgaW4gdmFsdWUpaWYoKGluaGVyaXRlZHx8aGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSxrZXkpKSYmIShza2lwSW5kZXhlcyYmKGtleT09Imxlbmd0aCJ8fGlzQnVmZiYmKGtleT09CiJvZmZzZXQifHxrZXk9PSJwYXJlbnQiKXx8aXNUeXBlJiYoa2V5PT0iYnVmZmVyInx8a2V5PT0iYnl0ZUxlbmd0aCJ8fGtleT09ImJ5dGVPZmZzZXQiKXx8aXNJbmRleChrZXksbGVuZ3RoKSkpKXJlc3VsdC5wdXNoKGtleSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBhcnJheVNhbXBsZShhcnJheSl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7cmV0dXJuIGxlbmd0aD9hcnJheVtiYXNlUmFuZG9tKDAsbGVuZ3RoLTEpXTp1bmRlZmluZWR9ZnVuY3Rpb24gYXJyYXlTYW1wbGVTaXplKGFycmF5LG4pe3JldHVybiBzaHVmZmxlU2VsZihjb3B5QXJyYXkoYXJyYXkpLGJhc2VDbGFtcChuLDAsYXJyYXkubGVuZ3RoKSl9ZnVuY3Rpb24gYXJyYXlTaHVmZmxlKGFycmF5KXtyZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSl9ZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3Qsa2V5LHZhbHVlKXtpZih2YWx1ZSE9PXVuZGVmaW5lZCYmIWVxKG9iamVjdFtrZXldLHZhbHVlKXx8CnZhbHVlPT09dW5kZWZpbmVkJiYhKGtleSBpbiBvYmplY3QpKWJhc2VBc3NpZ25WYWx1ZShvYmplY3Qsa2V5LHZhbHVlKX1mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3Qsa2V5LHZhbHVlKXt2YXIgb2JqVmFsdWU9b2JqZWN0W2tleV07aWYoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCxrZXkpJiZlcShvYmpWYWx1ZSx2YWx1ZSkpfHx2YWx1ZT09PXVuZGVmaW5lZCYmIShrZXkgaW4gb2JqZWN0KSliYXNlQXNzaWduVmFsdWUob2JqZWN0LGtleSx2YWx1ZSl9ZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LGtleSl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUobGVuZ3RoLS0paWYoZXEoYXJyYXlbbGVuZ3RoXVswXSxrZXkpKXJldHVybiBsZW5ndGg7cmV0dXJuLTF9ZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbixzZXR0ZXIsaXRlcmF0ZWUsYWNjdW11bGF0b3Ipe2Jhc2VFYWNoKGNvbGxlY3Rpb24sZnVuY3Rpb24odmFsdWUsa2V5LGNvbGxlY3Rpb24pe3NldHRlcihhY2N1bXVsYXRvciwKdmFsdWUsaXRlcmF0ZWUodmFsdWUpLGNvbGxlY3Rpb24pfSk7cmV0dXJuIGFjY3VtdWxhdG9yfWZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LHNvdXJjZSl7cmV0dXJuIG9iamVjdCYmY29weU9iamVjdChzb3VyY2Usa2V5cyhzb3VyY2UpLG9iamVjdCl9ZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCxzb3VyY2Upe3JldHVybiBvYmplY3QmJmNvcHlPYmplY3Qoc291cmNlLGtleXNJbihzb3VyY2UpLG9iamVjdCl9ZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCxrZXksdmFsdWUpe2lmKGtleT09Il9fcHJvdG9fXyImJmRlZmluZVByb3BlcnR5KWRlZmluZVByb3BlcnR5KG9iamVjdCxrZXkseyJjb25maWd1cmFibGUiOnRydWUsImVudW1lcmFibGUiOnRydWUsInZhbHVlIjp2YWx1ZSwid3JpdGFibGUiOnRydWV9KTtlbHNlIG9iamVjdFtrZXldPXZhbHVlfWZ1bmN0aW9uIGJhc2VBdChvYmplY3QscGF0aHMpe3ZhciBpbmRleD0tMSxsZW5ndGg9cGF0aHMubGVuZ3RoLHJlc3VsdD0KQXJyYXkobGVuZ3RoKSxza2lwPW9iamVjdD09bnVsbDt3aGlsZSgrK2luZGV4PGxlbmd0aClyZXN1bHRbaW5kZXhdPXNraXA/dW5kZWZpbmVkOmdldChvYmplY3QscGF0aHNbaW5kZXhdKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsbG93ZXIsdXBwZXIpe2lmKG51bWJlcj09PW51bWJlcil7aWYodXBwZXIhPT11bmRlZmluZWQpbnVtYmVyPW51bWJlcjw9dXBwZXI/bnVtYmVyOnVwcGVyO2lmKGxvd2VyIT09dW5kZWZpbmVkKW51bWJlcj1udW1iZXI+PWxvd2VyP251bWJlcjpsb3dlcn1yZXR1cm4gbnVtYmVyfWZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSxiaXRtYXNrLGN1c3RvbWl6ZXIsa2V5LG9iamVjdCxzdGFjayl7dmFyIHJlc3VsdCxpc0RlZXA9Yml0bWFzayZDTE9ORV9ERUVQX0ZMQUcsaXNGbGF0PWJpdG1hc2smQ0xPTkVfRkxBVF9GTEFHLGlzRnVsbD1iaXRtYXNrJkNMT05FX1NZTUJPTFNfRkxBRztpZihjdXN0b21pemVyKXJlc3VsdD1vYmplY3Q/CmN1c3RvbWl6ZXIodmFsdWUsa2V5LG9iamVjdCxzdGFjayk6Y3VzdG9taXplcih2YWx1ZSk7aWYocmVzdWx0IT09dW5kZWZpbmVkKXJldHVybiByZXN1bHQ7aWYoIWlzT2JqZWN0KHZhbHVlKSlyZXR1cm4gdmFsdWU7dmFyIGlzQXJyPWlzQXJyYXkodmFsdWUpO2lmKGlzQXJyKXtyZXN1bHQ9aW5pdENsb25lQXJyYXkodmFsdWUpO2lmKCFpc0RlZXApcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSxyZXN1bHQpfWVsc2V7dmFyIHRhZz1nZXRUYWcodmFsdWUpLGlzRnVuYz10YWc9PWZ1bmNUYWd8fHRhZz09Z2VuVGFnO2lmKGlzQnVmZmVyKHZhbHVlKSlyZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsaXNEZWVwKTtpZih0YWc9PW9iamVjdFRhZ3x8dGFnPT1hcmdzVGFnfHxpc0Z1bmMmJiFvYmplY3Qpe3Jlc3VsdD1pc0ZsYXR8fGlzRnVuYz97fTppbml0Q2xvbmVPYmplY3QodmFsdWUpO2lmKCFpc0RlZXApcmV0dXJuIGlzRmxhdD9jb3B5U3ltYm9sc0luKHZhbHVlLGJhc2VBc3NpZ25JbihyZXN1bHQsCnZhbHVlKSk6Y29weVN5bWJvbHModmFsdWUsYmFzZUFzc2lnbihyZXN1bHQsdmFsdWUpKX1lbHNle2lmKCFjbG9uZWFibGVUYWdzW3RhZ10pcmV0dXJuIG9iamVjdD92YWx1ZTp7fTtyZXN1bHQ9aW5pdENsb25lQnlUYWcodmFsdWUsdGFnLGlzRGVlcCl9fXN0YWNrfHwoc3RhY2s9bmV3IFN0YWNrKTt2YXIgc3RhY2tlZD1zdGFjay5nZXQodmFsdWUpO2lmKHN0YWNrZWQpcmV0dXJuIHN0YWNrZWQ7c3RhY2suc2V0KHZhbHVlLHJlc3VsdCk7aWYoaXNTZXQodmFsdWUpKXt2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKXtyZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSxiaXRtYXNrLGN1c3RvbWl6ZXIsc3ViVmFsdWUsdmFsdWUsc3RhY2spKX0pO3JldHVybiByZXN1bHR9aWYoaXNNYXAodmFsdWUpKXt2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLGtleSl7cmVzdWx0LnNldChrZXksYmFzZUNsb25lKHN1YlZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixrZXksdmFsdWUsCnN0YWNrKSl9KTtyZXR1cm4gcmVzdWx0fXZhciBrZXlzRnVuYz1pc0Z1bGw/aXNGbGF0P2dldEFsbEtleXNJbjpnZXRBbGxLZXlzOmlzRmxhdD9rZXlzSW46a2V5czt2YXIgcHJvcHM9aXNBcnI/dW5kZWZpbmVkOmtleXNGdW5jKHZhbHVlKTthcnJheUVhY2gocHJvcHN8fHZhbHVlLGZ1bmN0aW9uKHN1YlZhbHVlLGtleSl7aWYocHJvcHMpe2tleT1zdWJWYWx1ZTtzdWJWYWx1ZT12YWx1ZVtrZXldfWFzc2lnblZhbHVlKHJlc3VsdCxrZXksYmFzZUNsb25lKHN1YlZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixrZXksdmFsdWUsc3RhY2spKX0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUNvbmZvcm1zKHNvdXJjZSl7dmFyIHByb3BzPWtleXMoc291cmNlKTtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LHNvdXJjZSxwcm9wcyl9fWZ1bmN0aW9uIGJhc2VDb25mb3Jtc1RvKG9iamVjdCxzb3VyY2UscHJvcHMpe3ZhciBsZW5ndGg9cHJvcHMubGVuZ3RoOwppZihvYmplY3Q9PW51bGwpcmV0dXJuIWxlbmd0aDtvYmplY3Q9T2JqZWN0KG9iamVjdCk7d2hpbGUobGVuZ3RoLS0pe3ZhciBrZXk9cHJvcHNbbGVuZ3RoXSxwcmVkaWNhdGU9c291cmNlW2tleV0sdmFsdWU9b2JqZWN0W2tleV07aWYodmFsdWU9PT11bmRlZmluZWQmJiEoa2V5IGluIG9iamVjdCl8fCFwcmVkaWNhdGUodmFsdWUpKXJldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1mdW5jdGlvbiBiYXNlRGVsYXkoZnVuYyx3YWl0LGFyZ3Mpe2lmKHR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe2Z1bmMuYXBwbHkodW5kZWZpbmVkLGFyZ3MpfSx3YWl0KX1mdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSx2YWx1ZXMsaXRlcmF0ZWUsY29tcGFyYXRvcil7dmFyIGluZGV4PS0xLGluY2x1ZGVzPWFycmF5SW5jbHVkZXMsaXNDb21tb249dHJ1ZSxsZW5ndGg9YXJyYXkubGVuZ3RoLApyZXN1bHQ9W10sdmFsdWVzTGVuZ3RoPXZhbHVlcy5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm4gcmVzdWx0O2lmKGl0ZXJhdGVlKXZhbHVlcz1hcnJheU1hcCh2YWx1ZXMsYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7aWYoY29tcGFyYXRvcil7aW5jbHVkZXM9YXJyYXlJbmNsdWRlc1dpdGg7aXNDb21tb249ZmFsc2V9ZWxzZSBpZih2YWx1ZXMubGVuZ3RoPj1MQVJHRV9BUlJBWV9TSVpFKXtpbmNsdWRlcz1jYWNoZUhhcztpc0NvbW1vbj1mYWxzZTt2YWx1ZXM9bmV3IFNldENhY2hlKHZhbHVlcyl9b3V0ZXI6d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF0sY29tcHV0ZWQ9aXRlcmF0ZWU9PW51bGw/dmFsdWU6aXRlcmF0ZWUodmFsdWUpO3ZhbHVlPWNvbXBhcmF0b3J8fHZhbHVlIT09MD92YWx1ZTowO2lmKGlzQ29tbW9uJiZjb21wdXRlZD09PWNvbXB1dGVkKXt2YXIgdmFsdWVzSW5kZXg9dmFsdWVzTGVuZ3RoO3doaWxlKHZhbHVlc0luZGV4LS0paWYodmFsdWVzW3ZhbHVlc0luZGV4XT09PQpjb21wdXRlZCljb250aW51ZSBvdXRlcjtyZXN1bHQucHVzaCh2YWx1ZSl9ZWxzZSBpZighaW5jbHVkZXModmFsdWVzLGNvbXB1dGVkLGNvbXBhcmF0b3IpKXJlc3VsdC5wdXNoKHZhbHVlKX1yZXR1cm4gcmVzdWx0fXZhciBiYXNlRWFjaD1jcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duKTt2YXIgYmFzZUVhY2hSaWdodD1jcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duUmlnaHQsdHJ1ZSk7ZnVuY3Rpb24gYmFzZUV2ZXJ5KGNvbGxlY3Rpb24scHJlZGljYXRlKXt2YXIgcmVzdWx0PXRydWU7YmFzZUVhY2goY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKXtyZXN1bHQ9ISFwcmVkaWNhdGUodmFsdWUsaW5kZXgsY29sbGVjdGlvbik7cmV0dXJuIHJlc3VsdH0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUV4dHJlbXVtKGFycmF5LGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9CmFycmF5W2luZGV4XSxjdXJyZW50PWl0ZXJhdGVlKHZhbHVlKTtpZihjdXJyZW50IT1udWxsJiYoY29tcHV0ZWQ9PT11bmRlZmluZWQ/Y3VycmVudD09PWN1cnJlbnQmJiFpc1N5bWJvbChjdXJyZW50KTpjb21wYXJhdG9yKGN1cnJlbnQsY29tcHV0ZWQpKSl2YXIgY29tcHV0ZWQ9Y3VycmVudCxyZXN1bHQ9dmFsdWV9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlRmlsbChhcnJheSx2YWx1ZSxzdGFydCxlbmQpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoO3N0YXJ0PXRvSW50ZWdlcihzdGFydCk7aWYoc3RhcnQ8MClzdGFydD0tc3RhcnQ+bGVuZ3RoPzA6bGVuZ3RoK3N0YXJ0O2VuZD1lbmQ9PT11bmRlZmluZWR8fGVuZD5sZW5ndGg/bGVuZ3RoOnRvSW50ZWdlcihlbmQpO2lmKGVuZDwwKWVuZCs9bGVuZ3RoO2VuZD1zdGFydD5lbmQ/MDp0b0xlbmd0aChlbmQpO3doaWxlKHN0YXJ0PGVuZClhcnJheVtzdGFydCsrXT12YWx1ZTtyZXR1cm4gYXJyYXl9ZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLApwcmVkaWNhdGUpe3ZhciByZXN1bHQ9W107YmFzZUVhY2goY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKXtpZihwcmVkaWNhdGUodmFsdWUsaW5kZXgsY29sbGVjdGlvbikpcmVzdWx0LnB1c2godmFsdWUpfSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSxkZXB0aCxwcmVkaWNhdGUsaXNTdHJpY3QscmVzdWx0KXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aDtwcmVkaWNhdGV8fChwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZSk7cmVzdWx0fHwocmVzdWx0PVtdKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XTtpZihkZXB0aD4wJiZwcmVkaWNhdGUodmFsdWUpKWlmKGRlcHRoPjEpYmFzZUZsYXR0ZW4odmFsdWUsZGVwdGgtMSxwcmVkaWNhdGUsaXNTdHJpY3QscmVzdWx0KTtlbHNlIGFycmF5UHVzaChyZXN1bHQsdmFsdWUpO2Vsc2UgaWYoIWlzU3RyaWN0KXJlc3VsdFtyZXN1bHQubGVuZ3RoXT0KdmFsdWV9cmV0dXJuIHJlc3VsdH12YXIgYmFzZUZvcj1jcmVhdGVCYXNlRm9yKCk7dmFyIGJhc2VGb3JSaWdodD1jcmVhdGVCYXNlRm9yKHRydWUpO2Z1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gb2JqZWN0JiZiYXNlRm9yKG9iamVjdCxpdGVyYXRlZSxrZXlzKX1mdW5jdGlvbiBiYXNlRm9yT3duUmlnaHQob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gb2JqZWN0JiZiYXNlRm9yUmlnaHQob2JqZWN0LGl0ZXJhdGVlLGtleXMpfWZ1bmN0aW9uIGJhc2VGdW5jdGlvbnMob2JqZWN0LHByb3BzKXtyZXR1cm4gYXJyYXlGaWx0ZXIocHJvcHMsZnVuY3Rpb24oa2V5KXtyZXR1cm4gaXNGdW5jdGlvbihvYmplY3Rba2V5XSl9KX1mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCxwYXRoKXtwYXRoPWNhc3RQYXRoKHBhdGgsb2JqZWN0KTt2YXIgaW5kZXg9MCxsZW5ndGg9cGF0aC5sZW5ndGg7d2hpbGUob2JqZWN0IT1udWxsJiZpbmRleDxsZW5ndGgpb2JqZWN0PW9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07CnJldHVybiBpbmRleCYmaW5kZXg9PWxlbmd0aD9vYmplY3Q6dW5kZWZpbmVkfWZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCxrZXlzRnVuYyxzeW1ib2xzRnVuYyl7dmFyIHJlc3VsdD1rZXlzRnVuYyhvYmplY3QpO3JldHVybiBpc0FycmF5KG9iamVjdCk/cmVzdWx0OmFycmF5UHVzaChyZXN1bHQsc3ltYm9sc0Z1bmMob2JqZWN0KSl9ZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSl7aWYodmFsdWU9PW51bGwpcmV0dXJuIHZhbHVlPT09dW5kZWZpbmVkP3VuZGVmaW5lZFRhZzpudWxsVGFnO3JldHVybiBzeW1Ub1N0cmluZ1RhZyYmc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKT9nZXRSYXdUYWcodmFsdWUpOm9iamVjdFRvU3RyaW5nKHZhbHVlKX1mdW5jdGlvbiBiYXNlR3QodmFsdWUsb3RoZXIpe3JldHVybiB2YWx1ZT5vdGhlcn1mdW5jdGlvbiBiYXNlSGFzKG9iamVjdCxrZXkpe3JldHVybiBvYmplY3QhPW51bGwmJmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LAprZXkpfWZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3Qsa2V5KXtyZXR1cm4gb2JqZWN0IT1udWxsJiZrZXkgaW4gT2JqZWN0KG9iamVjdCl9ZnVuY3Rpb24gYmFzZUluUmFuZ2UobnVtYmVyLHN0YXJ0LGVuZCl7cmV0dXJuIG51bWJlcj49bmF0aXZlTWluKHN0YXJ0LGVuZCkmJm51bWJlcjxuYXRpdmVNYXgoc3RhcnQsZW5kKX1mdW5jdGlvbiBiYXNlSW50ZXJzZWN0aW9uKGFycmF5cyxpdGVyYXRlZSxjb21wYXJhdG9yKXt2YXIgaW5jbHVkZXM9Y29tcGFyYXRvcj9hcnJheUluY2x1ZGVzV2l0aDphcnJheUluY2x1ZGVzLGxlbmd0aD1hcnJheXNbMF0ubGVuZ3RoLG90aExlbmd0aD1hcnJheXMubGVuZ3RoLG90aEluZGV4PW90aExlbmd0aCxjYWNoZXM9QXJyYXkob3RoTGVuZ3RoKSxtYXhMZW5ndGg9SW5maW5pdHkscmVzdWx0PVtdO3doaWxlKG90aEluZGV4LS0pe3ZhciBhcnJheT1hcnJheXNbb3RoSW5kZXhdO2lmKG90aEluZGV4JiZpdGVyYXRlZSlhcnJheT1hcnJheU1hcChhcnJheSwKYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7bWF4TGVuZ3RoPW5hdGl2ZU1pbihhcnJheS5sZW5ndGgsbWF4TGVuZ3RoKTtjYWNoZXNbb3RoSW5kZXhdPSFjb21wYXJhdG9yJiYoaXRlcmF0ZWV8fGxlbmd0aD49MTIwJiZhcnJheS5sZW5ndGg+PTEyMCk/bmV3IFNldENhY2hlKG90aEluZGV4JiZhcnJheSk6dW5kZWZpbmVkfWFycmF5PWFycmF5c1swXTt2YXIgaW5kZXg9LTEsc2Vlbj1jYWNoZXNbMF07b3V0ZXI6d2hpbGUoKytpbmRleDxsZW5ndGgmJnJlc3VsdC5sZW5ndGg8bWF4TGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdLGNvbXB1dGVkPWl0ZXJhdGVlP2l0ZXJhdGVlKHZhbHVlKTp2YWx1ZTt2YWx1ZT1jb21wYXJhdG9yfHx2YWx1ZSE9PTA/dmFsdWU6MDtpZighKHNlZW4/Y2FjaGVIYXMoc2Vlbixjb21wdXRlZCk6aW5jbHVkZXMocmVzdWx0LGNvbXB1dGVkLGNvbXBhcmF0b3IpKSl7b3RoSW5kZXg9b3RoTGVuZ3RoO3doaWxlKC0tb3RoSW5kZXgpe3ZhciBjYWNoZT1jYWNoZXNbb3RoSW5kZXhdOwppZighKGNhY2hlP2NhY2hlSGFzKGNhY2hlLGNvbXB1dGVkKTppbmNsdWRlcyhhcnJheXNbb3RoSW5kZXhdLGNvbXB1dGVkLGNvbXBhcmF0b3IpKSljb250aW51ZSBvdXRlcn1pZihzZWVuKXNlZW4ucHVzaChjb21wdXRlZCk7cmVzdWx0LnB1c2godmFsdWUpfX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VJbnZlcnRlcihvYmplY3Qsc2V0dGVyLGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXtiYXNlRm9yT3duKG9iamVjdCxmdW5jdGlvbih2YWx1ZSxrZXksb2JqZWN0KXtzZXR0ZXIoYWNjdW11bGF0b3IsaXRlcmF0ZWUodmFsdWUpLGtleSxvYmplY3QpfSk7cmV0dXJuIGFjY3VtdWxhdG9yfWZ1bmN0aW9uIGJhc2VJbnZva2Uob2JqZWN0LHBhdGgsYXJncyl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7b2JqZWN0PXBhcmVudChvYmplY3QscGF0aCk7dmFyIGZ1bmM9b2JqZWN0PT1udWxsP29iamVjdDpvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO3JldHVybiBmdW5jPT1udWxsP3VuZGVmaW5lZDoKYXBwbHkoZnVuYyxvYmplY3QsYXJncyl9ZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PWFyZ3NUYWd9ZnVuY3Rpb24gYmFzZUlzQXJyYXlCdWZmZXIodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZiYXNlR2V0VGFnKHZhbHVlKT09YXJyYXlCdWZmZXJUYWd9ZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1kYXRlVGFnfWZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixzdGFjayl7aWYodmFsdWU9PT1vdGhlcilyZXR1cm4gdHJ1ZTtpZih2YWx1ZT09bnVsbHx8b3RoZXI9PW51bGx8fCFpc09iamVjdExpa2UodmFsdWUpJiYhaXNPYmplY3RMaWtlKG90aGVyKSlyZXR1cm4gdmFsdWUhPT12YWx1ZSYmb3RoZXIhPT1vdGhlcjtyZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLApvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsYmFzZUlzRXF1YWwsc3RhY2spfWZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3Qsb3RoZXIsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayl7dmFyIG9iaklzQXJyPWlzQXJyYXkob2JqZWN0KSxvdGhJc0Fycj1pc0FycmF5KG90aGVyKSxvYmpUYWc9b2JqSXNBcnI/YXJyYXlUYWc6Z2V0VGFnKG9iamVjdCksb3RoVGFnPW90aElzQXJyP2FycmF5VGFnOmdldFRhZyhvdGhlcik7b2JqVGFnPW9ialRhZz09YXJnc1RhZz9vYmplY3RUYWc6b2JqVGFnO290aFRhZz1vdGhUYWc9PWFyZ3NUYWc/b2JqZWN0VGFnOm90aFRhZzt2YXIgb2JqSXNPYmo9b2JqVGFnPT1vYmplY3RUYWcsb3RoSXNPYmo9b3RoVGFnPT1vYmplY3RUYWcsaXNTYW1lVGFnPW9ialRhZz09b3RoVGFnO2lmKGlzU2FtZVRhZyYmaXNCdWZmZXIob2JqZWN0KSl7aWYoIWlzQnVmZmVyKG90aGVyKSlyZXR1cm4gZmFsc2U7b2JqSXNBcnI9dHJ1ZTtvYmpJc09iaj0KZmFsc2V9aWYoaXNTYW1lVGFnJiYhb2JqSXNPYmope3N0YWNrfHwoc3RhY2s9bmV3IFN0YWNrKTtyZXR1cm4gb2JqSXNBcnJ8fGlzVHlwZWRBcnJheShvYmplY3QpP2VxdWFsQXJyYXlzKG9iamVjdCxvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKTplcXVhbEJ5VGFnKG9iamVjdCxvdGhlcixvYmpUYWcsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayl9aWYoIShiaXRtYXNrJkNPTVBBUkVfUEFSVElBTF9GTEFHKSl7dmFyIG9iaklzV3JhcHBlZD1vYmpJc09iaiYmaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIl9fd3JhcHBlZF9fIiksb3RoSXNXcmFwcGVkPW90aElzT2JqJiZoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCJfX3dyYXBwZWRfXyIpO2lmKG9iaklzV3JhcHBlZHx8b3RoSXNXcmFwcGVkKXt2YXIgb2JqVW53cmFwcGVkPW9iaklzV3JhcHBlZD9vYmplY3QudmFsdWUoKTpvYmplY3Qsb3RoVW53cmFwcGVkPW90aElzV3JhcHBlZD9vdGhlci52YWx1ZSgpOgpvdGhlcjtzdGFja3x8KHN0YWNrPW5ldyBTdGFjayk7cmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsb3RoVW53cmFwcGVkLGJpdG1hc2ssY3VzdG9taXplcixzdGFjayl9fWlmKCFpc1NhbWVUYWcpcmV0dXJuIGZhbHNlO3N0YWNrfHwoc3RhY2s9bmV3IFN0YWNrKTtyZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCxvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKX1mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZnZXRUYWcodmFsdWUpPT1tYXBUYWd9ZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LHNvdXJjZSxtYXRjaERhdGEsY3VzdG9taXplcil7dmFyIGluZGV4PW1hdGNoRGF0YS5sZW5ndGgsbGVuZ3RoPWluZGV4LG5vQ3VzdG9taXplcj0hY3VzdG9taXplcjtpZihvYmplY3Q9PW51bGwpcmV0dXJuIWxlbmd0aDtvYmplY3Q9T2JqZWN0KG9iamVjdCk7d2hpbGUoaW5kZXgtLSl7dmFyIGRhdGE9bWF0Y2hEYXRhW2luZGV4XTsKaWYobm9DdXN0b21pemVyJiZkYXRhWzJdP2RhdGFbMV0hPT1vYmplY3RbZGF0YVswXV06IShkYXRhWzBdaW4gb2JqZWN0KSlyZXR1cm4gZmFsc2V9d2hpbGUoKytpbmRleDxsZW5ndGgpe2RhdGE9bWF0Y2hEYXRhW2luZGV4XTt2YXIga2V5PWRhdGFbMF0sb2JqVmFsdWU9b2JqZWN0W2tleV0sc3JjVmFsdWU9ZGF0YVsxXTtpZihub0N1c3RvbWl6ZXImJmRhdGFbMl0pe2lmKG9ialZhbHVlPT09dW5kZWZpbmVkJiYhKGtleSBpbiBvYmplY3QpKXJldHVybiBmYWxzZX1lbHNle3ZhciBzdGFjaz1uZXcgU3RhY2s7aWYoY3VzdG9taXplcil2YXIgcmVzdWx0PWN1c3RvbWl6ZXIob2JqVmFsdWUsc3JjVmFsdWUsa2V5LG9iamVjdCxzb3VyY2Usc3RhY2spO2lmKCEocmVzdWx0PT09dW5kZWZpbmVkP2Jhc2VJc0VxdWFsKHNyY1ZhbHVlLG9ialZhbHVlLENPTVBBUkVfUEFSVElBTF9GTEFHfENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsY3VzdG9taXplcixzdGFjayk6cmVzdWx0KSlyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpe2lmKCFpc09iamVjdCh2YWx1ZSl8fGlzTWFza2VkKHZhbHVlKSlyZXR1cm4gZmFsc2U7dmFyIHBhdHRlcm49aXNGdW5jdGlvbih2YWx1ZSk/cmVJc05hdGl2ZTpyZUlzSG9zdEN0b3I7cmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpfWZ1bmN0aW9uIGJhc2VJc1JlZ0V4cCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1yZWdleHBUYWd9ZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmZ2V0VGFnKHZhbHVlKT09c2V0VGFnfWZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpJiYhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXX1mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpe2lmKHR5cGVvZiB2YWx1ZT09ImZ1bmN0aW9uIilyZXR1cm4gdmFsdWU7CmlmKHZhbHVlPT1udWxsKXJldHVybiBpZGVudGl0eTtpZih0eXBlb2YgdmFsdWU9PSJvYmplY3QiKXJldHVybiBpc0FycmF5KHZhbHVlKT9iYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLHZhbHVlWzFdKTpiYXNlTWF0Y2hlcyh2YWx1ZSk7cmV0dXJuIHByb3BlcnR5KHZhbHVlKX1mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3Qpe2lmKCFpc1Byb3RvdHlwZShvYmplY3QpKXJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7dmFyIHJlc3VsdD1bXTtmb3IodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSlpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCxrZXkpJiZrZXkhPSJjb25zdHJ1Y3RvciIpcmVzdWx0LnB1c2goa2V5KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KXtpZighaXNPYmplY3Qob2JqZWN0KSlyZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7dmFyIGlzUHJvdG89aXNQcm90b3R5cGUob2JqZWN0KSxyZXN1bHQ9W107Zm9yKHZhciBrZXkgaW4gb2JqZWN0KWlmKCEoa2V5PT0KImNvbnN0cnVjdG9yIiYmKGlzUHJvdG98fCFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCxrZXkpKSkpcmVzdWx0LnB1c2goa2V5KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VMdCh2YWx1ZSxvdGhlcil7cmV0dXJuIHZhbHVlPG90aGVyfWZ1bmN0aW9uIGJhc2VNYXAoY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGluZGV4PS0xLHJlc3VsdD1pc0FycmF5TGlrZShjb2xsZWN0aW9uKT9BcnJheShjb2xsZWN0aW9uLmxlbmd0aCk6W107YmFzZUVhY2goY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxrZXksY29sbGVjdGlvbil7cmVzdWx0WysraW5kZXhdPWl0ZXJhdGVlKHZhbHVlLGtleSxjb2xsZWN0aW9uKX0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKXt2YXIgbWF0Y2hEYXRhPWdldE1hdGNoRGF0YShzb3VyY2UpO2lmKG1hdGNoRGF0YS5sZW5ndGg9PTEmJm1hdGNoRGF0YVswXVsyXSlyZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLAptYXRjaERhdGFbMF1bMV0pO3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBvYmplY3Q9PT1zb3VyY2V8fGJhc2VJc01hdGNoKG9iamVjdCxzb3VyY2UsbWF0Y2hEYXRhKX19ZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLHNyY1ZhbHVlKXtpZihpc0tleShwYXRoKSYmaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSlyZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksc3JjVmFsdWUpO3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3ZhciBvYmpWYWx1ZT1nZXQob2JqZWN0LHBhdGgpO3JldHVybiBvYmpWYWx1ZT09PXVuZGVmaW5lZCYmb2JqVmFsdWU9PT1zcmNWYWx1ZT9oYXNJbihvYmplY3QscGF0aCk6YmFzZUlzRXF1YWwoc3JjVmFsdWUsb2JqVmFsdWUsQ09NUEFSRV9QQVJUSUFMX0ZMQUd8Q09NUEFSRV9VTk9SREVSRURfRkxBRyl9fWZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIsc3RhY2spe2lmKG9iamVjdD09PQpzb3VyY2UpcmV0dXJuO2Jhc2VGb3Ioc291cmNlLGZ1bmN0aW9uKHNyY1ZhbHVlLGtleSl7aWYoaXNPYmplY3Qoc3JjVmFsdWUpKXtzdGFja3x8KHN0YWNrPW5ldyBTdGFjayk7YmFzZU1lcmdlRGVlcChvYmplY3Qsc291cmNlLGtleSxzcmNJbmRleCxiYXNlTWVyZ2UsY3VzdG9taXplcixzdGFjayl9ZWxzZXt2YXIgbmV3VmFsdWU9Y3VzdG9taXplcj9jdXN0b21pemVyKHNhZmVHZXQob2JqZWN0LGtleSksc3JjVmFsdWUsa2V5KyIiLG9iamVjdCxzb3VyY2Usc3RhY2spOnVuZGVmaW5lZDtpZihuZXdWYWx1ZT09PXVuZGVmaW5lZCluZXdWYWx1ZT1zcmNWYWx1ZTthc3NpZ25NZXJnZVZhbHVlKG9iamVjdCxrZXksbmV3VmFsdWUpfX0sa2V5c0luKX1mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCxzb3VyY2Usa2V5LHNyY0luZGV4LG1lcmdlRnVuYyxjdXN0b21pemVyLHN0YWNrKXt2YXIgb2JqVmFsdWU9c2FmZUdldChvYmplY3Qsa2V5KSxzcmNWYWx1ZT1zYWZlR2V0KHNvdXJjZSwKa2V5KSxzdGFja2VkPXN0YWNrLmdldChzcmNWYWx1ZSk7aWYoc3RhY2tlZCl7YXNzaWduTWVyZ2VWYWx1ZShvYmplY3Qsa2V5LHN0YWNrZWQpO3JldHVybn12YXIgbmV3VmFsdWU9Y3VzdG9taXplcj9jdXN0b21pemVyKG9ialZhbHVlLHNyY1ZhbHVlLGtleSsiIixvYmplY3Qsc291cmNlLHN0YWNrKTp1bmRlZmluZWQ7dmFyIGlzQ29tbW9uPW5ld1ZhbHVlPT09dW5kZWZpbmVkO2lmKGlzQ29tbW9uKXt2YXIgaXNBcnI9aXNBcnJheShzcmNWYWx1ZSksaXNCdWZmPSFpc0FyciYmaXNCdWZmZXIoc3JjVmFsdWUpLGlzVHlwZWQ9IWlzQXJyJiYhaXNCdWZmJiZpc1R5cGVkQXJyYXkoc3JjVmFsdWUpO25ld1ZhbHVlPXNyY1ZhbHVlO2lmKGlzQXJyfHxpc0J1ZmZ8fGlzVHlwZWQpaWYoaXNBcnJheShvYmpWYWx1ZSkpbmV3VmFsdWU9b2JqVmFsdWU7ZWxzZSBpZihpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpbmV3VmFsdWU9Y29weUFycmF5KG9ialZhbHVlKTtlbHNlIGlmKGlzQnVmZil7aXNDb21tb249CmZhbHNlO25ld1ZhbHVlPWNsb25lQnVmZmVyKHNyY1ZhbHVlLHRydWUpfWVsc2UgaWYoaXNUeXBlZCl7aXNDb21tb249ZmFsc2U7bmV3VmFsdWU9Y2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLHRydWUpfWVsc2UgbmV3VmFsdWU9W107ZWxzZSBpZihpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKXx8aXNBcmd1bWVudHMoc3JjVmFsdWUpKXtuZXdWYWx1ZT1vYmpWYWx1ZTtpZihpc0FyZ3VtZW50cyhvYmpWYWx1ZSkpbmV3VmFsdWU9dG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7ZWxzZSBpZighaXNPYmplY3Qob2JqVmFsdWUpfHxzcmNJbmRleCYmaXNGdW5jdGlvbihvYmpWYWx1ZSkpbmV3VmFsdWU9aW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKX1lbHNlIGlzQ29tbW9uPWZhbHNlfWlmKGlzQ29tbW9uKXtzdGFjay5zZXQoc3JjVmFsdWUsbmV3VmFsdWUpO21lcmdlRnVuYyhuZXdWYWx1ZSxzcmNWYWx1ZSxzcmNJbmRleCxjdXN0b21pemVyLHN0YWNrKTtzdGFja1siZGVsZXRlIl0oc3JjVmFsdWUpfWFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LAprZXksbmV3VmFsdWUpfWZ1bmN0aW9uIGJhc2VOdGgoYXJyYXksbil7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm47bis9bjwwP2xlbmd0aDowO3JldHVybiBpc0luZGV4KG4sbGVuZ3RoKT9hcnJheVtuXTp1bmRlZmluZWR9ZnVuY3Rpb24gYmFzZU9yZGVyQnkoY29sbGVjdGlvbixpdGVyYXRlZXMsb3JkZXJzKXt2YXIgaW5kZXg9LTE7aXRlcmF0ZWVzPWFycmF5TWFwKGl0ZXJhdGVlcy5sZW5ndGg/aXRlcmF0ZWVzOltpZGVudGl0eV0sYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTt2YXIgcmVzdWx0PWJhc2VNYXAoY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxrZXksY29sbGVjdGlvbil7dmFyIGNyaXRlcmlhPWFycmF5TWFwKGl0ZXJhdGVlcyxmdW5jdGlvbihpdGVyYXRlZSl7cmV0dXJuIGl0ZXJhdGVlKHZhbHVlKX0pO3JldHVybnsiY3JpdGVyaWEiOmNyaXRlcmlhLCJpbmRleCI6KytpbmRleCwidmFsdWUiOnZhbHVlfX0pO3JldHVybiBiYXNlU29ydEJ5KHJlc3VsdCwKZnVuY3Rpb24ob2JqZWN0LG90aGVyKXtyZXR1cm4gY29tcGFyZU11bHRpcGxlKG9iamVjdCxvdGhlcixvcmRlcnMpfSl9ZnVuY3Rpb24gYmFzZVBpY2sob2JqZWN0LHBhdGhzKXtyZXR1cm4gYmFzZVBpY2tCeShvYmplY3QscGF0aHMsZnVuY3Rpb24odmFsdWUscGF0aCl7cmV0dXJuIGhhc0luKG9iamVjdCxwYXRoKX0pfWZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LHBhdGhzLHByZWRpY2F0ZSl7dmFyIGluZGV4PS0xLGxlbmd0aD1wYXRocy5sZW5ndGgscmVzdWx0PXt9O3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgcGF0aD1wYXRoc1tpbmRleF0sdmFsdWU9YmFzZUdldChvYmplY3QscGF0aCk7aWYocHJlZGljYXRlKHZhbHVlLHBhdGgpKWJhc2VTZXQocmVzdWx0LGNhc3RQYXRoKHBhdGgsb2JqZWN0KSx2YWx1ZSl9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBiYXNlR2V0KG9iamVjdCxwYXRoKX19CmZ1bmN0aW9uIGJhc2VQdWxsQWxsKGFycmF5LHZhbHVlcyxpdGVyYXRlZSxjb21wYXJhdG9yKXt2YXIgaW5kZXhPZj1jb21wYXJhdG9yP2Jhc2VJbmRleE9mV2l0aDpiYXNlSW5kZXhPZixpbmRleD0tMSxsZW5ndGg9dmFsdWVzLmxlbmd0aCxzZWVuPWFycmF5O2lmKGFycmF5PT09dmFsdWVzKXZhbHVlcz1jb3B5QXJyYXkodmFsdWVzKTtpZihpdGVyYXRlZSlzZWVuPWFycmF5TWFwKGFycmF5LGJhc2VVbmFyeShpdGVyYXRlZSkpO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgZnJvbUluZGV4PTAsdmFsdWU9dmFsdWVzW2luZGV4XSxjb21wdXRlZD1pdGVyYXRlZT9pdGVyYXRlZSh2YWx1ZSk6dmFsdWU7d2hpbGUoKGZyb21JbmRleD1pbmRleE9mKHNlZW4sY29tcHV0ZWQsZnJvbUluZGV4LGNvbXBhcmF0b3IpKT4tMSl7aWYoc2VlbiE9PWFycmF5KXNwbGljZS5jYWxsKHNlZW4sZnJvbUluZGV4LDEpO3NwbGljZS5jYWxsKGFycmF5LGZyb21JbmRleCwxKX19cmV0dXJuIGFycmF5fWZ1bmN0aW9uIGJhc2VQdWxsQXQoYXJyYXksCmluZGV4ZXMpe3ZhciBsZW5ndGg9YXJyYXk/aW5kZXhlcy5sZW5ndGg6MCxsYXN0SW5kZXg9bGVuZ3RoLTE7d2hpbGUobGVuZ3RoLS0pe3ZhciBpbmRleD1pbmRleGVzW2xlbmd0aF07aWYobGVuZ3RoPT1sYXN0SW5kZXh8fGluZGV4IT09cHJldmlvdXMpe3ZhciBwcmV2aW91cz1pbmRleDtpZihpc0luZGV4KGluZGV4KSlzcGxpY2UuY2FsbChhcnJheSxpbmRleCwxKTtlbHNlIGJhc2VVbnNldChhcnJheSxpbmRleCl9fXJldHVybiBhcnJheX1mdW5jdGlvbiBiYXNlUmFuZG9tKGxvd2VyLHVwcGVyKXtyZXR1cm4gbG93ZXIrbmF0aXZlRmxvb3IobmF0aXZlUmFuZG9tKCkqKHVwcGVyLWxvd2VyKzEpKX1mdW5jdGlvbiBiYXNlUmFuZ2Uoc3RhcnQsZW5kLHN0ZXAsZnJvbVJpZ2h0KXt2YXIgaW5kZXg9LTEsbGVuZ3RoPW5hdGl2ZU1heChuYXRpdmVDZWlsKChlbmQtc3RhcnQpLyhzdGVwfHwxKSksMCkscmVzdWx0PUFycmF5KGxlbmd0aCk7d2hpbGUobGVuZ3RoLS0pe3Jlc3VsdFtmcm9tUmlnaHQ/Cmxlbmd0aDorK2luZGV4XT1zdGFydDtzdGFydCs9c3RlcH1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VSZXBlYXQoc3RyaW5nLG4pe3ZhciByZXN1bHQ9IiI7aWYoIXN0cmluZ3x8bjwxfHxuPk1BWF9TQUZFX0lOVEVHRVIpcmV0dXJuIHJlc3VsdDtkb3tpZihuJTIpcmVzdWx0Kz1zdHJpbmc7bj1uYXRpdmVGbG9vcihuLzIpO2lmKG4pc3RyaW5nKz1zdHJpbmd9d2hpbGUobik7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlUmVzdChmdW5jLHN0YXJ0KXtyZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYyxzdGFydCxpZGVudGl0eSksZnVuYysiIil9ZnVuY3Rpb24gYmFzZVNhbXBsZShjb2xsZWN0aW9uKXtyZXR1cm4gYXJyYXlTYW1wbGUodmFsdWVzKGNvbGxlY3Rpb24pKX1mdW5jdGlvbiBiYXNlU2FtcGxlU2l6ZShjb2xsZWN0aW9uLG4pe3ZhciBhcnJheT12YWx1ZXMoY29sbGVjdGlvbik7cmV0dXJuIHNodWZmbGVTZWxmKGFycmF5LGJhc2VDbGFtcChuLDAsYXJyYXkubGVuZ3RoKSl9CmZ1bmN0aW9uIGJhc2VTZXQob2JqZWN0LHBhdGgsdmFsdWUsY3VzdG9taXplcil7aWYoIWlzT2JqZWN0KG9iamVjdCkpcmV0dXJuIG9iamVjdDtwYXRoPWNhc3RQYXRoKHBhdGgsb2JqZWN0KTt2YXIgaW5kZXg9LTEsbGVuZ3RoPXBhdGgubGVuZ3RoLGxhc3RJbmRleD1sZW5ndGgtMSxuZXN0ZWQ9b2JqZWN0O3doaWxlKG5lc3RlZCE9bnVsbCYmKytpbmRleDxsZW5ndGgpe3ZhciBrZXk9dG9LZXkocGF0aFtpbmRleF0pLG5ld1ZhbHVlPXZhbHVlO2lmKGluZGV4IT1sYXN0SW5kZXgpe3ZhciBvYmpWYWx1ZT1uZXN0ZWRba2V5XTtuZXdWYWx1ZT1jdXN0b21pemVyP2N1c3RvbWl6ZXIob2JqVmFsdWUsa2V5LG5lc3RlZCk6dW5kZWZpbmVkO2lmKG5ld1ZhbHVlPT09dW5kZWZpbmVkKW5ld1ZhbHVlPWlzT2JqZWN0KG9ialZhbHVlKT9vYmpWYWx1ZTppc0luZGV4KHBhdGhbaW5kZXgrMV0pP1tdOnt9fWFzc2lnblZhbHVlKG5lc3RlZCxrZXksbmV3VmFsdWUpO25lc3RlZD1uZXN0ZWRba2V5XX1yZXR1cm4gb2JqZWN0fQp2YXIgYmFzZVNldERhdGE9IW1ldGFNYXA/aWRlbnRpdHk6ZnVuY3Rpb24oZnVuYyxkYXRhKXttZXRhTWFwLnNldChmdW5jLGRhdGEpO3JldHVybiBmdW5jfTt2YXIgYmFzZVNldFRvU3RyaW5nPSFkZWZpbmVQcm9wZXJ0eT9pZGVudGl0eTpmdW5jdGlvbihmdW5jLHN0cmluZyl7cmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsInRvU3RyaW5nIix7ImNvbmZpZ3VyYWJsZSI6dHJ1ZSwiZW51bWVyYWJsZSI6ZmFsc2UsInZhbHVlIjpjb25zdGFudChzdHJpbmcpLCJ3cml0YWJsZSI6dHJ1ZX0pfTtmdW5jdGlvbiBiYXNlU2h1ZmZsZShjb2xsZWN0aW9uKXtyZXR1cm4gc2h1ZmZsZVNlbGYodmFsdWVzKGNvbGxlY3Rpb24pKX1mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksc3RhcnQsZW5kKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aDtpZihzdGFydDwwKXN0YXJ0PS1zdGFydD5sZW5ndGg/MDpsZW5ndGgrc3RhcnQ7ZW5kPWVuZD5sZW5ndGg/bGVuZ3RoOmVuZDtpZihlbmQ8MCllbmQrPQpsZW5ndGg7bGVuZ3RoPXN0YXJ0PmVuZD8wOmVuZC1zdGFydD4+PjA7c3RhcnQ+Pj49MDt2YXIgcmVzdWx0PUFycmF5KGxlbmd0aCk7d2hpbGUoKytpbmRleDxsZW5ndGgpcmVzdWx0W2luZGV4XT1hcnJheVtpbmRleCtzdGFydF07cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlU29tZShjb2xsZWN0aW9uLHByZWRpY2F0ZSl7dmFyIHJlc3VsdDtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe3Jlc3VsdD1wcmVkaWNhdGUodmFsdWUsaW5kZXgsY29sbGVjdGlvbik7cmV0dXJuIXJlc3VsdH0pO3JldHVybiEhcmVzdWx0fWZ1bmN0aW9uIGJhc2VTb3J0ZWRJbmRleChhcnJheSx2YWx1ZSxyZXRIaWdoZXN0KXt2YXIgbG93PTAsaGlnaD1hcnJheT09bnVsbD9sb3c6YXJyYXkubGVuZ3RoO2lmKHR5cGVvZiB2YWx1ZT09Im51bWJlciImJnZhbHVlPT09dmFsdWUmJmhpZ2g8PUhBTEZfTUFYX0FSUkFZX0xFTkdUSCl7d2hpbGUobG93PGhpZ2gpe3ZhciBtaWQ9CmxvdytoaWdoPj4+MSxjb21wdXRlZD1hcnJheVttaWRdO2lmKGNvbXB1dGVkIT09bnVsbCYmIWlzU3ltYm9sKGNvbXB1dGVkKSYmKHJldEhpZ2hlc3Q/Y29tcHV0ZWQ8PXZhbHVlOmNvbXB1dGVkPHZhbHVlKSlsb3c9bWlkKzE7ZWxzZSBoaWdoPW1pZH1yZXR1cm4gaGlnaH1yZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksdmFsdWUsaWRlbnRpdHkscmV0SGlnaGVzdCl9ZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksdmFsdWUsaXRlcmF0ZWUscmV0SGlnaGVzdCl7dmFsdWU9aXRlcmF0ZWUodmFsdWUpO3ZhciBsb3c9MCxoaWdoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoLHZhbElzTmFOPXZhbHVlIT09dmFsdWUsdmFsSXNOdWxsPXZhbHVlPT09bnVsbCx2YWxJc1N5bWJvbD1pc1N5bWJvbCh2YWx1ZSksdmFsSXNVbmRlZmluZWQ9dmFsdWU9PT11bmRlZmluZWQ7d2hpbGUobG93PGhpZ2gpe3ZhciBtaWQ9bmF0aXZlRmxvb3IoKGxvdytoaWdoKS8yKSxjb21wdXRlZD0KaXRlcmF0ZWUoYXJyYXlbbWlkXSksb3RoSXNEZWZpbmVkPWNvbXB1dGVkIT09dW5kZWZpbmVkLG90aElzTnVsbD1jb21wdXRlZD09PW51bGwsb3RoSXNSZWZsZXhpdmU9Y29tcHV0ZWQ9PT1jb21wdXRlZCxvdGhJc1N5bWJvbD1pc1N5bWJvbChjb21wdXRlZCk7aWYodmFsSXNOYU4pdmFyIHNldExvdz1yZXRIaWdoZXN0fHxvdGhJc1JlZmxleGl2ZTtlbHNlIGlmKHZhbElzVW5kZWZpbmVkKXNldExvdz1vdGhJc1JlZmxleGl2ZSYmKHJldEhpZ2hlc3R8fG90aElzRGVmaW5lZCk7ZWxzZSBpZih2YWxJc051bGwpc2V0TG93PW90aElzUmVmbGV4aXZlJiZvdGhJc0RlZmluZWQmJihyZXRIaWdoZXN0fHwhb3RoSXNOdWxsKTtlbHNlIGlmKHZhbElzU3ltYm9sKXNldExvdz1vdGhJc1JlZmxleGl2ZSYmb3RoSXNEZWZpbmVkJiYhb3RoSXNOdWxsJiYocmV0SGlnaGVzdHx8IW90aElzU3ltYm9sKTtlbHNlIGlmKG90aElzTnVsbHx8b3RoSXNTeW1ib2wpc2V0TG93PWZhbHNlO2Vsc2Ugc2V0TG93PQpyZXRIaWdoZXN0P2NvbXB1dGVkPD12YWx1ZTpjb21wdXRlZDx2YWx1ZTtpZihzZXRMb3cpbG93PW1pZCsxO2Vsc2UgaGlnaD1taWR9cmV0dXJuIG5hdGl2ZU1pbihoaWdoLE1BWF9BUlJBWV9JTkRFWCl9ZnVuY3Rpb24gYmFzZVNvcnRlZFVuaXEoYXJyYXksaXRlcmF0ZWUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoLHJlc0luZGV4PTAscmVzdWx0PVtdO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdLGNvbXB1dGVkPWl0ZXJhdGVlP2l0ZXJhdGVlKHZhbHVlKTp2YWx1ZTtpZighaW5kZXh8fCFlcShjb21wdXRlZCxzZWVuKSl7dmFyIHNlZW49Y29tcHV0ZWQ7cmVzdWx0W3Jlc0luZGV4KytdPXZhbHVlPT09MD8wOnZhbHVlfX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VUb051bWJlcih2YWx1ZSl7aWYodHlwZW9mIHZhbHVlPT0ibnVtYmVyIilyZXR1cm4gdmFsdWU7aWYoaXNTeW1ib2wodmFsdWUpKXJldHVybiBOQU47cmV0dXJuK3ZhbHVlfQpmdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpe2lmKHR5cGVvZiB2YWx1ZT09InN0cmluZyIpcmV0dXJuIHZhbHVlO2lmKGlzQXJyYXkodmFsdWUpKXJldHVybiBhcnJheU1hcCh2YWx1ZSxiYXNlVG9TdHJpbmcpKyIiO2lmKGlzU3ltYm9sKHZhbHVlKSlyZXR1cm4gc3ltYm9sVG9TdHJpbmc/c3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSk6IiI7dmFyIHJlc3VsdD12YWx1ZSsiIjtyZXR1cm4gcmVzdWx0PT0iMCImJjEvdmFsdWU9PS1JTkZJTklUWT8iLTAiOnJlc3VsdH1mdW5jdGlvbiBiYXNlVW5pcShhcnJheSxpdGVyYXRlZSxjb21wYXJhdG9yKXt2YXIgaW5kZXg9LTEsaW5jbHVkZXM9YXJyYXlJbmNsdWRlcyxsZW5ndGg9YXJyYXkubGVuZ3RoLGlzQ29tbW9uPXRydWUscmVzdWx0PVtdLHNlZW49cmVzdWx0O2lmKGNvbXBhcmF0b3Ipe2lzQ29tbW9uPWZhbHNlO2luY2x1ZGVzPWFycmF5SW5jbHVkZXNXaXRofWVsc2UgaWYobGVuZ3RoPj1MQVJHRV9BUlJBWV9TSVpFKXt2YXIgc2V0PQppdGVyYXRlZT9udWxsOmNyZWF0ZVNldChhcnJheSk7aWYoc2V0KXJldHVybiBzZXRUb0FycmF5KHNldCk7aXNDb21tb249ZmFsc2U7aW5jbHVkZXM9Y2FjaGVIYXM7c2Vlbj1uZXcgU2V0Q2FjaGV9ZWxzZSBzZWVuPWl0ZXJhdGVlP1tdOnJlc3VsdDtvdXRlcjp3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XSxjb21wdXRlZD1pdGVyYXRlZT9pdGVyYXRlZSh2YWx1ZSk6dmFsdWU7dmFsdWU9Y29tcGFyYXRvcnx8dmFsdWUhPT0wP3ZhbHVlOjA7aWYoaXNDb21tb24mJmNvbXB1dGVkPT09Y29tcHV0ZWQpe3ZhciBzZWVuSW5kZXg9c2Vlbi5sZW5ndGg7d2hpbGUoc2VlbkluZGV4LS0paWYoc2VlbltzZWVuSW5kZXhdPT09Y29tcHV0ZWQpY29udGludWUgb3V0ZXI7aWYoaXRlcmF0ZWUpc2Vlbi5wdXNoKGNvbXB1dGVkKTtyZXN1bHQucHVzaCh2YWx1ZSl9ZWxzZSBpZighaW5jbHVkZXMoc2Vlbixjb21wdXRlZCxjb21wYXJhdG9yKSl7aWYoc2VlbiE9PXJlc3VsdClzZWVuLnB1c2goY29tcHV0ZWQpOwpyZXN1bHQucHVzaCh2YWx1ZSl9fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCxwYXRoKXtwYXRoPWNhc3RQYXRoKHBhdGgsb2JqZWN0KTtvYmplY3Q9cGFyZW50KG9iamVjdCxwYXRoKTtyZXR1cm4gb2JqZWN0PT1udWxsfHxkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXX1mdW5jdGlvbiBiYXNlVXBkYXRlKG9iamVjdCxwYXRoLHVwZGF0ZXIsY3VzdG9taXplcil7cmV0dXJuIGJhc2VTZXQob2JqZWN0LHBhdGgsdXBkYXRlcihiYXNlR2V0KG9iamVjdCxwYXRoKSksY3VzdG9taXplcil9ZnVuY3Rpb24gYmFzZVdoaWxlKGFycmF5LHByZWRpY2F0ZSxpc0Ryb3AsZnJvbVJpZ2h0KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aCxpbmRleD1mcm9tUmlnaHQ/bGVuZ3RoOi0xO3doaWxlKChmcm9tUmlnaHQ/aW5kZXgtLTorK2luZGV4PGxlbmd0aCkmJnByZWRpY2F0ZShhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpKTtyZXR1cm4gaXNEcm9wP2Jhc2VTbGljZShhcnJheSwKZnJvbVJpZ2h0PzA6aW5kZXgsZnJvbVJpZ2h0P2luZGV4KzE6bGVuZ3RoKTpiYXNlU2xpY2UoYXJyYXksZnJvbVJpZ2h0P2luZGV4KzE6MCxmcm9tUmlnaHQ/bGVuZ3RoOmluZGV4KX1mdW5jdGlvbiBiYXNlV3JhcHBlclZhbHVlKHZhbHVlLGFjdGlvbnMpe3ZhciByZXN1bHQ9dmFsdWU7aWYocmVzdWx0IGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpcmVzdWx0PXJlc3VsdC52YWx1ZSgpO3JldHVybiBhcnJheVJlZHVjZShhY3Rpb25zLGZ1bmN0aW9uKHJlc3VsdCxhY3Rpb24pe3JldHVybiBhY3Rpb24uZnVuYy5hcHBseShhY3Rpb24udGhpc0FyZyxhcnJheVB1c2goW3Jlc3VsdF0sYWN0aW9uLmFyZ3MpKX0scmVzdWx0KX1mdW5jdGlvbiBiYXNlWG9yKGFycmF5cyxpdGVyYXRlZSxjb21wYXJhdG9yKXt2YXIgbGVuZ3RoPWFycmF5cy5sZW5ndGg7aWYobGVuZ3RoPDIpcmV0dXJuIGxlbmd0aD9iYXNlVW5pcShhcnJheXNbMF0pOltdO3ZhciBpbmRleD0tMSxyZXN1bHQ9QXJyYXkobGVuZ3RoKTsKd2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBhcnJheT1hcnJheXNbaW5kZXhdLG90aEluZGV4PS0xO3doaWxlKCsrb3RoSW5kZXg8bGVuZ3RoKWlmKG90aEluZGV4IT1pbmRleClyZXN1bHRbaW5kZXhdPWJhc2VEaWZmZXJlbmNlKHJlc3VsdFtpbmRleF18fGFycmF5LGFycmF5c1tvdGhJbmRleF0saXRlcmF0ZWUsY29tcGFyYXRvcil9cmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKHJlc3VsdCwxKSxpdGVyYXRlZSxjb21wYXJhdG9yKX1mdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLHZhbHVlcyxhc3NpZ25GdW5jKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXByb3BzLmxlbmd0aCx2YWxzTGVuZ3RoPXZhbHVlcy5sZW5ndGgscmVzdWx0PXt9O3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9aW5kZXg8dmFsc0xlbmd0aD92YWx1ZXNbaW5kZXhdOnVuZGVmaW5lZDthc3NpZ25GdW5jKHJlc3VsdCxwcm9wc1tpbmRleF0sdmFsdWUpfXJldHVybiByZXN1bHR9ZnVuY3Rpb24gY2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSl7cmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKT8KdmFsdWU6W119ZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlPT0iZnVuY3Rpb24iP3ZhbHVlOmlkZW50aXR5fWZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLG9iamVjdCl7aWYoaXNBcnJheSh2YWx1ZSkpcmV0dXJuIHZhbHVlO3JldHVybiBpc0tleSh2YWx1ZSxvYmplY3QpP1t2YWx1ZV06c3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSl9dmFyIGNhc3RSZXN0PWJhc2VSZXN0O2Z1bmN0aW9uIGNhc3RTbGljZShhcnJheSxzdGFydCxlbmQpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoO2VuZD1lbmQ9PT11bmRlZmluZWQ/bGVuZ3RoOmVuZDtyZXR1cm4hc3RhcnQmJmVuZD49bGVuZ3RoP2FycmF5OmJhc2VTbGljZShhcnJheSxzdGFydCxlbmQpfXZhciBjbGVhclRpbWVvdXQ9Y3R4Q2xlYXJUaW1lb3V0fHxmdW5jdGlvbihpZCl7cmV0dXJuIHJvb3QuY2xlYXJUaW1lb3V0KGlkKX07ZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLGlzRGVlcCl7aWYoaXNEZWVwKXJldHVybiBidWZmZXIuc2xpY2UoKTsKdmFyIGxlbmd0aD1idWZmZXIubGVuZ3RoLHJlc3VsdD1hbGxvY1Vuc2FmZT9hbGxvY1Vuc2FmZShsZW5ndGgpOm5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtidWZmZXIuY29weShyZXN1bHQpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcil7dmFyIHJlc3VsdD1uZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7KG5ldyBVaW50OEFycmF5KHJlc3VsdCkpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldyxpc0RlZXApe3ZhciBidWZmZXI9aXNEZWVwP2Nsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKTpkYXRhVmlldy5idWZmZXI7cmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsZGF0YVZpZXcuYnl0ZU9mZnNldCxkYXRhVmlldy5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApe3ZhciByZXN1bHQ9Cm5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSxyZUZsYWdzLmV4ZWMocmVnZXhwKSk7cmVzdWx0Lmxhc3RJbmRleD1yZWdleHAubGFzdEluZGV4O3JldHVybiByZXN1bHR9ZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKXtyZXR1cm4gc3ltYm9sVmFsdWVPZj9PYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpOnt9fWZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LGlzRGVlcCl7dmFyIGJ1ZmZlcj1pc0RlZXA/Y2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcik6dHlwZWRBcnJheS5idWZmZXI7cmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlcix0eXBlZEFycmF5LmJ5dGVPZmZzZXQsdHlwZWRBcnJheS5sZW5ndGgpfWZ1bmN0aW9uIGNvbXBhcmVBc2NlbmRpbmcodmFsdWUsb3RoZXIpe2lmKHZhbHVlIT09b3RoZXIpe3ZhciB2YWxJc0RlZmluZWQ9dmFsdWUhPT11bmRlZmluZWQsdmFsSXNOdWxsPXZhbHVlPT09Cm51bGwsdmFsSXNSZWZsZXhpdmU9dmFsdWU9PT12YWx1ZSx2YWxJc1N5bWJvbD1pc1N5bWJvbCh2YWx1ZSk7dmFyIG90aElzRGVmaW5lZD1vdGhlciE9PXVuZGVmaW5lZCxvdGhJc051bGw9b3RoZXI9PT1udWxsLG90aElzUmVmbGV4aXZlPW90aGVyPT09b3RoZXIsb3RoSXNTeW1ib2w9aXNTeW1ib2wob3RoZXIpO2lmKCFvdGhJc051bGwmJiFvdGhJc1N5bWJvbCYmIXZhbElzU3ltYm9sJiZ2YWx1ZT5vdGhlcnx8dmFsSXNTeW1ib2wmJm90aElzRGVmaW5lZCYmb3RoSXNSZWZsZXhpdmUmJiFvdGhJc051bGwmJiFvdGhJc1N5bWJvbHx8dmFsSXNOdWxsJiZvdGhJc0RlZmluZWQmJm90aElzUmVmbGV4aXZlfHwhdmFsSXNEZWZpbmVkJiZvdGhJc1JlZmxleGl2ZXx8IXZhbElzUmVmbGV4aXZlKXJldHVybiAxO2lmKCF2YWxJc051bGwmJiF2YWxJc1N5bWJvbCYmIW90aElzU3ltYm9sJiZ2YWx1ZTxvdGhlcnx8b3RoSXNTeW1ib2wmJnZhbElzRGVmaW5lZCYmdmFsSXNSZWZsZXhpdmUmJiF2YWxJc051bGwmJgohdmFsSXNTeW1ib2x8fG90aElzTnVsbCYmdmFsSXNEZWZpbmVkJiZ2YWxJc1JlZmxleGl2ZXx8IW90aElzRGVmaW5lZCYmdmFsSXNSZWZsZXhpdmV8fCFvdGhJc1JlZmxleGl2ZSlyZXR1cm4tMX1yZXR1cm4gMH1mdW5jdGlvbiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LG90aGVyLG9yZGVycyl7dmFyIGluZGV4PS0xLG9iakNyaXRlcmlhPW9iamVjdC5jcml0ZXJpYSxvdGhDcml0ZXJpYT1vdGhlci5jcml0ZXJpYSxsZW5ndGg9b2JqQ3JpdGVyaWEubGVuZ3RoLG9yZGVyc0xlbmd0aD1vcmRlcnMubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgcmVzdWx0PWNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLG90aENyaXRlcmlhW2luZGV4XSk7aWYocmVzdWx0KXtpZihpbmRleD49b3JkZXJzTGVuZ3RoKXJldHVybiByZXN1bHQ7dmFyIG9yZGVyPW9yZGVyc1tpbmRleF07cmV0dXJuIHJlc3VsdCoob3JkZXI9PSJkZXNjIj8tMToxKX19cmV0dXJuIG9iamVjdC5pbmRleC0Kb3RoZXIuaW5kZXh9ZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncyxwYXJ0aWFscyxob2xkZXJzLGlzQ3VycmllZCl7dmFyIGFyZ3NJbmRleD0tMSxhcmdzTGVuZ3RoPWFyZ3MubGVuZ3RoLGhvbGRlcnNMZW5ndGg9aG9sZGVycy5sZW5ndGgsbGVmdEluZGV4PS0xLGxlZnRMZW5ndGg9cGFydGlhbHMubGVuZ3RoLHJhbmdlTGVuZ3RoPW5hdGl2ZU1heChhcmdzTGVuZ3RoLWhvbGRlcnNMZW5ndGgsMCkscmVzdWx0PUFycmF5KGxlZnRMZW5ndGgrcmFuZ2VMZW5ndGgpLGlzVW5jdXJyaWVkPSFpc0N1cnJpZWQ7d2hpbGUoKytsZWZ0SW5kZXg8bGVmdExlbmd0aClyZXN1bHRbbGVmdEluZGV4XT1wYXJ0aWFsc1tsZWZ0SW5kZXhdO3doaWxlKCsrYXJnc0luZGV4PGhvbGRlcnNMZW5ndGgpaWYoaXNVbmN1cnJpZWR8fGFyZ3NJbmRleDxhcmdzTGVuZ3RoKXJlc3VsdFtob2xkZXJzW2FyZ3NJbmRleF1dPWFyZ3NbYXJnc0luZGV4XTt3aGlsZShyYW5nZUxlbmd0aC0tKXJlc3VsdFtsZWZ0SW5kZXgrK109CmFyZ3NbYXJnc0luZGV4KytdO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLHBhcnRpYWxzLGhvbGRlcnMsaXNDdXJyaWVkKXt2YXIgYXJnc0luZGV4PS0xLGFyZ3NMZW5ndGg9YXJncy5sZW5ndGgsaG9sZGVyc0luZGV4PS0xLGhvbGRlcnNMZW5ndGg9aG9sZGVycy5sZW5ndGgscmlnaHRJbmRleD0tMSxyaWdodExlbmd0aD1wYXJ0aWFscy5sZW5ndGgscmFuZ2VMZW5ndGg9bmF0aXZlTWF4KGFyZ3NMZW5ndGgtaG9sZGVyc0xlbmd0aCwwKSxyZXN1bHQ9QXJyYXkocmFuZ2VMZW5ndGgrcmlnaHRMZW5ndGgpLGlzVW5jdXJyaWVkPSFpc0N1cnJpZWQ7d2hpbGUoKythcmdzSW5kZXg8cmFuZ2VMZW5ndGgpcmVzdWx0W2FyZ3NJbmRleF09YXJnc1thcmdzSW5kZXhdO3ZhciBvZmZzZXQ9YXJnc0luZGV4O3doaWxlKCsrcmlnaHRJbmRleDxyaWdodExlbmd0aClyZXN1bHRbb2Zmc2V0K3JpZ2h0SW5kZXhdPXBhcnRpYWxzW3JpZ2h0SW5kZXhdO3doaWxlKCsraG9sZGVyc0luZGV4PApob2xkZXJzTGVuZ3RoKWlmKGlzVW5jdXJyaWVkfHxhcmdzSW5kZXg8YXJnc0xlbmd0aClyZXN1bHRbb2Zmc2V0K2hvbGRlcnNbaG9sZGVyc0luZGV4XV09YXJnc1thcmdzSW5kZXgrK107cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLGFycmF5KXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXNvdXJjZS5sZW5ndGg7YXJyYXl8fChhcnJheT1BcnJheShsZW5ndGgpKTt3aGlsZSgrK2luZGV4PGxlbmd0aClhcnJheVtpbmRleF09c291cmNlW2luZGV4XTtyZXR1cm4gYXJyYXl9ZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UscHJvcHMsb2JqZWN0LGN1c3RvbWl6ZXIpe3ZhciBpc05ldz0hb2JqZWN0O29iamVjdHx8KG9iamVjdD17fSk7dmFyIGluZGV4PS0xLGxlbmd0aD1wcm9wcy5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBrZXk9cHJvcHNbaW5kZXhdO3ZhciBuZXdWYWx1ZT1jdXN0b21pemVyP2N1c3RvbWl6ZXIob2JqZWN0W2tleV0sc291cmNlW2tleV0sCmtleSxvYmplY3Qsc291cmNlKTp1bmRlZmluZWQ7aWYobmV3VmFsdWU9PT11bmRlZmluZWQpbmV3VmFsdWU9c291cmNlW2tleV07aWYoaXNOZXcpYmFzZUFzc2lnblZhbHVlKG9iamVjdCxrZXksbmV3VmFsdWUpO2Vsc2UgYXNzaWduVmFsdWUob2JqZWN0LGtleSxuZXdWYWx1ZSl9cmV0dXJuIG9iamVjdH1mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2Usb2JqZWN0KXtyZXR1cm4gY29weU9iamVjdChzb3VyY2UsZ2V0U3ltYm9scyhzb3VyY2UpLG9iamVjdCl9ZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2Usb2JqZWN0KXtyZXR1cm4gY29weU9iamVjdChzb3VyY2UsZ2V0U3ltYm9sc0luKHNvdXJjZSksb2JqZWN0KX1mdW5jdGlvbiBjcmVhdGVBZ2dyZWdhdG9yKHNldHRlcixpbml0aWFsaXplcil7cmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24saXRlcmF0ZWUpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlBZ2dyZWdhdG9yOmJhc2VBZ2dyZWdhdG9yLGFjY3VtdWxhdG9yPQppbml0aWFsaXplcj9pbml0aWFsaXplcigpOnt9O3JldHVybiBmdW5jKGNvbGxlY3Rpb24sc2V0dGVyLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpLGFjY3VtdWxhdG9yKX19ZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpe3JldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3Qsc291cmNlcyl7dmFyIGluZGV4PS0xLGxlbmd0aD1zb3VyY2VzLmxlbmd0aCxjdXN0b21pemVyPWxlbmd0aD4xP3NvdXJjZXNbbGVuZ3RoLTFdOnVuZGVmaW5lZCxndWFyZD1sZW5ndGg+Mj9zb3VyY2VzWzJdOnVuZGVmaW5lZDtjdXN0b21pemVyPWFzc2lnbmVyLmxlbmd0aD4zJiZ0eXBlb2YgY3VzdG9taXplcj09ImZ1bmN0aW9uIj8obGVuZ3RoLS0sY3VzdG9taXplcik6dW5kZWZpbmVkO2lmKGd1YXJkJiZpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLHNvdXJjZXNbMV0sZ3VhcmQpKXtjdXN0b21pemVyPWxlbmd0aDwzP3VuZGVmaW5lZDpjdXN0b21pemVyO2xlbmd0aD0xfW9iamVjdD1PYmplY3Qob2JqZWN0KTsKd2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBzb3VyY2U9c291cmNlc1tpbmRleF07aWYoc291cmNlKWFzc2lnbmVyKG9iamVjdCxzb3VyY2UsaW5kZXgsY3VzdG9taXplcil9cmV0dXJuIG9iamVjdH0pfWZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLGZyb21SaWdodCl7cmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24saXRlcmF0ZWUpe2lmKGNvbGxlY3Rpb249PW51bGwpcmV0dXJuIGNvbGxlY3Rpb247aWYoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKXJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLGl0ZXJhdGVlKTt2YXIgbGVuZ3RoPWNvbGxlY3Rpb24ubGVuZ3RoLGluZGV4PWZyb21SaWdodD9sZW5ndGg6LTEsaXRlcmFibGU9T2JqZWN0KGNvbGxlY3Rpb24pO3doaWxlKGZyb21SaWdodD9pbmRleC0tOisraW5kZXg8bGVuZ3RoKWlmKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSxpbmRleCxpdGVyYWJsZSk9PT1mYWxzZSlicmVhaztyZXR1cm4gY29sbGVjdGlvbn19ZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpe3JldHVybiBmdW5jdGlvbihvYmplY3QsCml0ZXJhdGVlLGtleXNGdW5jKXt2YXIgaW5kZXg9LTEsaXRlcmFibGU9T2JqZWN0KG9iamVjdCkscHJvcHM9a2V5c0Z1bmMob2JqZWN0KSxsZW5ndGg9cHJvcHMubGVuZ3RoO3doaWxlKGxlbmd0aC0tKXt2YXIga2V5PXByb3BzW2Zyb21SaWdodD9sZW5ndGg6KytpbmRleF07aWYoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSxrZXksaXRlcmFibGUpPT09ZmFsc2UpYnJlYWt9cmV0dXJuIG9iamVjdH19ZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLGJpdG1hc2ssdGhpc0FyZyl7dmFyIGlzQmluZD1iaXRtYXNrJldSQVBfQklORF9GTEFHLEN0b3I9Y3JlYXRlQ3RvcihmdW5jKTtmdW5jdGlvbiB3cmFwcGVyKCl7dmFyIGZuPXRoaXMmJnRoaXMhPT1yb290JiZ0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcj9DdG9yOmZ1bmM7cmV0dXJuIGZuLmFwcGx5KGlzQmluZD90aGlzQXJnOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gd3JhcHBlcn1mdW5jdGlvbiBjcmVhdGVDYXNlRmlyc3QobWV0aG9kTmFtZSl7cmV0dXJuIGZ1bmN0aW9uKHN0cmluZyl7c3RyaW5nPQp0b1N0cmluZyhzdHJpbmcpO3ZhciBzdHJTeW1ib2xzPWhhc1VuaWNvZGUoc3RyaW5nKT9zdHJpbmdUb0FycmF5KHN0cmluZyk6dW5kZWZpbmVkO3ZhciBjaHI9c3RyU3ltYm9scz9zdHJTeW1ib2xzWzBdOnN0cmluZy5jaGFyQXQoMCk7dmFyIHRyYWlsaW5nPXN0clN5bWJvbHM/Y2FzdFNsaWNlKHN0clN5bWJvbHMsMSkuam9pbigiIik6c3RyaW5nLnNsaWNlKDEpO3JldHVybiBjaHJbbWV0aG9kTmFtZV0oKSt0cmFpbGluZ319ZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRlcihjYWxsYmFjayl7cmV0dXJuIGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCIiKSksY2FsbGJhY2ssIiIpfX1mdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3Ipe3JldHVybiBmdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cztzd2l0Y2goYXJncy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IEN0b3I7Y2FzZSAxOnJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTsKY2FzZSAyOnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IEN0b3IoYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IEN0b3IoYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0sYXJnc1szXSk7Y2FzZSA1OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdLGFyZ3NbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IEN0b3IoYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0sYXJnc1szXSxhcmdzWzRdLGFyZ3NbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IEN0b3IoYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0sYXJnc1szXSxhcmdzWzRdLGFyZ3NbNV0sYXJnc1s2XSl9dmFyIHRoaXNCaW5kaW5nPWJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLHJlc3VsdD1DdG9yLmFwcGx5KHRoaXNCaW5kaW5nLGFyZ3MpO3JldHVybiBpc09iamVjdChyZXN1bHQpP3Jlc3VsdDp0aGlzQmluZGluZ319ZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywKYml0bWFzayxhcml0eSl7dmFyIEN0b3I9Y3JlYXRlQ3RvcihmdW5jKTtmdW5jdGlvbiB3cmFwcGVyKCl7dmFyIGxlbmd0aD1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9QXJyYXkobGVuZ3RoKSxpbmRleD1sZW5ndGgscGxhY2Vob2xkZXI9Z2V0SG9sZGVyKHdyYXBwZXIpO3doaWxlKGluZGV4LS0pYXJnc1tpbmRleF09YXJndW1lbnRzW2luZGV4XTt2YXIgaG9sZGVycz1sZW5ndGg8MyYmYXJnc1swXSE9PXBsYWNlaG9sZGVyJiZhcmdzW2xlbmd0aC0xXSE9PXBsYWNlaG9sZGVyP1tdOnJlcGxhY2VIb2xkZXJzKGFyZ3MscGxhY2Vob2xkZXIpO2xlbmd0aC09aG9sZGVycy5sZW5ndGg7aWYobGVuZ3RoPGFyaXR5KXJldHVybiBjcmVhdGVSZWN1cnJ5KGZ1bmMsYml0bWFzayxjcmVhdGVIeWJyaWQsd3JhcHBlci5wbGFjZWhvbGRlcix1bmRlZmluZWQsYXJncyxob2xkZXJzLHVuZGVmaW5lZCx1bmRlZmluZWQsYXJpdHktbGVuZ3RoKTt2YXIgZm49dGhpcyYmdGhpcyE9PXJvb3QmJnRoaXMgaW5zdGFuY2VvZgp3cmFwcGVyP0N0b3I6ZnVuYztyZXR1cm4gYXBwbHkoZm4sdGhpcyxhcmdzKX1yZXR1cm4gd3JhcHBlcn1mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpe3JldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLHByZWRpY2F0ZSxmcm9tSW5kZXgpe3ZhciBpdGVyYWJsZT1PYmplY3QoY29sbGVjdGlvbik7aWYoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKXt2YXIgaXRlcmF0ZWU9Z2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpO2NvbGxlY3Rpb249a2V5cyhjb2xsZWN0aW9uKTtwcmVkaWNhdGU9ZnVuY3Rpb24oa2V5KXtyZXR1cm4gaXRlcmF0ZWUoaXRlcmFibGVba2V5XSxrZXksaXRlcmFibGUpfX12YXIgaW5kZXg9ZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLHByZWRpY2F0ZSxmcm9tSW5kZXgpO3JldHVybiBpbmRleD4tMT9pdGVyYWJsZVtpdGVyYXRlZT9jb2xsZWN0aW9uW2luZGV4XTppbmRleF06dW5kZWZpbmVkfX1mdW5jdGlvbiBjcmVhdGVGbG93KGZyb21SaWdodCl7cmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmNzKXt2YXIgbGVuZ3RoPQpmdW5jcy5sZW5ndGgsaW5kZXg9bGVuZ3RoLHByZXJlcT1Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS50aHJ1O2lmKGZyb21SaWdodClmdW5jcy5yZXZlcnNlKCk7d2hpbGUoaW5kZXgtLSl7dmFyIGZ1bmM9ZnVuY3NbaW5kZXhdO2lmKHR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtpZihwcmVyZXEmJiF3cmFwcGVyJiZnZXRGdW5jTmFtZShmdW5jKT09IndyYXBwZXIiKXZhciB3cmFwcGVyPW5ldyBMb2Rhc2hXcmFwcGVyKFtdLHRydWUpfWluZGV4PXdyYXBwZXI/aW5kZXg6bGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXtmdW5jPWZ1bmNzW2luZGV4XTt2YXIgZnVuY05hbWU9Z2V0RnVuY05hbWUoZnVuYyksZGF0YT1mdW5jTmFtZT09IndyYXBwZXIiP2dldERhdGEoZnVuYyk6dW5kZWZpbmVkO2lmKGRhdGEmJmlzTGF6aWFibGUoZGF0YVswXSkmJmRhdGFbMV09PShXUkFQX0FSWV9GTEFHfFdSQVBfQ1VSUllfRkxBR3xXUkFQX1BBUlRJQUxfRkxBR3wKV1JBUF9SRUFSR19GTEFHKSYmIWRhdGFbNF0ubGVuZ3RoJiZkYXRhWzldPT0xKXdyYXBwZXI9d3JhcHBlcltnZXRGdW5jTmFtZShkYXRhWzBdKV0uYXBwbHkod3JhcHBlcixkYXRhWzNdKTtlbHNlIHdyYXBwZXI9ZnVuYy5sZW5ndGg9PTEmJmlzTGF6aWFibGUoZnVuYyk/d3JhcHBlcltmdW5jTmFtZV0oKTp3cmFwcGVyLnRocnUoZnVuYyl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzLHZhbHVlPWFyZ3NbMF07aWYod3JhcHBlciYmYXJncy5sZW5ndGg9PTEmJmlzQXJyYXkodmFsdWUpKXJldHVybiB3cmFwcGVyLnBsYW50KHZhbHVlKS52YWx1ZSgpO3ZhciBpbmRleD0wLHJlc3VsdD1sZW5ndGg/ZnVuY3NbaW5kZXhdLmFwcGx5KHRoaXMsYXJncyk6dmFsdWU7d2hpbGUoKytpbmRleDxsZW5ndGgpcmVzdWx0PWZ1bmNzW2luZGV4XS5jYWxsKHRoaXMscmVzdWx0KTtyZXR1cm4gcmVzdWx0fX0pfWZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLGJpdG1hc2ssdGhpc0FyZywKcGFydGlhbHMsaG9sZGVycyxwYXJ0aWFsc1JpZ2h0LGhvbGRlcnNSaWdodCxhcmdQb3MsYXJ5LGFyaXR5KXt2YXIgaXNBcnk9Yml0bWFzayZXUkFQX0FSWV9GTEFHLGlzQmluZD1iaXRtYXNrJldSQVBfQklORF9GTEFHLGlzQmluZEtleT1iaXRtYXNrJldSQVBfQklORF9LRVlfRkxBRyxpc0N1cnJpZWQ9Yml0bWFzayYoV1JBUF9DVVJSWV9GTEFHfFdSQVBfQ1VSUllfUklHSFRfRkxBRyksaXNGbGlwPWJpdG1hc2smV1JBUF9GTElQX0ZMQUcsQ3Rvcj1pc0JpbmRLZXk/dW5kZWZpbmVkOmNyZWF0ZUN0b3IoZnVuYyk7ZnVuY3Rpb24gd3JhcHBlcigpe3ZhciBsZW5ndGg9YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KGxlbmd0aCksaW5kZXg9bGVuZ3RoO3doaWxlKGluZGV4LS0pYXJnc1tpbmRleF09YXJndW1lbnRzW2luZGV4XTtpZihpc0N1cnJpZWQpdmFyIHBsYWNlaG9sZGVyPWdldEhvbGRlcih3cmFwcGVyKSxob2xkZXJzQ291bnQ9Y291bnRIb2xkZXJzKGFyZ3MscGxhY2Vob2xkZXIpOwppZihwYXJ0aWFscylhcmdzPWNvbXBvc2VBcmdzKGFyZ3MscGFydGlhbHMsaG9sZGVycyxpc0N1cnJpZWQpO2lmKHBhcnRpYWxzUmlnaHQpYXJncz1jb21wb3NlQXJnc1JpZ2h0KGFyZ3MscGFydGlhbHNSaWdodCxob2xkZXJzUmlnaHQsaXNDdXJyaWVkKTtsZW5ndGgtPWhvbGRlcnNDb3VudDtpZihpc0N1cnJpZWQmJmxlbmd0aDxhcml0eSl7dmFyIG5ld0hvbGRlcnM9cmVwbGFjZUhvbGRlcnMoYXJncyxwbGFjZWhvbGRlcik7cmV0dXJuIGNyZWF0ZVJlY3VycnkoZnVuYyxiaXRtYXNrLGNyZWF0ZUh5YnJpZCx3cmFwcGVyLnBsYWNlaG9sZGVyLHRoaXNBcmcsYXJncyxuZXdIb2xkZXJzLGFyZ1BvcyxhcnksYXJpdHktbGVuZ3RoKX12YXIgdGhpc0JpbmRpbmc9aXNCaW5kP3RoaXNBcmc6dGhpcyxmbj1pc0JpbmRLZXk/dGhpc0JpbmRpbmdbZnVuY106ZnVuYztsZW5ndGg9YXJncy5sZW5ndGg7aWYoYXJnUG9zKWFyZ3M9cmVvcmRlcihhcmdzLGFyZ1Bvcyk7ZWxzZSBpZihpc0ZsaXAmJmxlbmd0aD4KMSlhcmdzLnJldmVyc2UoKTtpZihpc0FyeSYmYXJ5PGxlbmd0aClhcmdzLmxlbmd0aD1hcnk7aWYodGhpcyYmdGhpcyE9PXJvb3QmJnRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKWZuPUN0b3J8fGNyZWF0ZUN0b3IoZm4pO3JldHVybiBmbi5hcHBseSh0aGlzQmluZGluZyxhcmdzKX1yZXR1cm4gd3JhcHBlcn1mdW5jdGlvbiBjcmVhdGVJbnZlcnRlcihzZXR0ZXIsdG9JdGVyYXRlZSl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCxpdGVyYXRlZSl7cmV0dXJuIGJhc2VJbnZlcnRlcihvYmplY3Qsc2V0dGVyLHRvSXRlcmF0ZWUoaXRlcmF0ZWUpLHt9KX19ZnVuY3Rpb24gY3JlYXRlTWF0aE9wZXJhdGlvbihvcGVyYXRvcixkZWZhdWx0VmFsdWUpe3JldHVybiBmdW5jdGlvbih2YWx1ZSxvdGhlcil7dmFyIHJlc3VsdDtpZih2YWx1ZT09PXVuZGVmaW5lZCYmb3RoZXI9PT11bmRlZmluZWQpcmV0dXJuIGRlZmF1bHRWYWx1ZTtpZih2YWx1ZSE9PXVuZGVmaW5lZClyZXN1bHQ9dmFsdWU7aWYob3RoZXIhPT0KdW5kZWZpbmVkKXtpZihyZXN1bHQ9PT11bmRlZmluZWQpcmV0dXJuIG90aGVyO2lmKHR5cGVvZiB2YWx1ZT09InN0cmluZyJ8fHR5cGVvZiBvdGhlcj09InN0cmluZyIpe3ZhbHVlPWJhc2VUb1N0cmluZyh2YWx1ZSk7b3RoZXI9YmFzZVRvU3RyaW5nKG90aGVyKX1lbHNle3ZhbHVlPWJhc2VUb051bWJlcih2YWx1ZSk7b3RoZXI9YmFzZVRvTnVtYmVyKG90aGVyKX1yZXN1bHQ9b3BlcmF0b3IodmFsdWUsb3RoZXIpfXJldHVybiByZXN1bHR9fWZ1bmN0aW9uIGNyZWF0ZU92ZXIoYXJyYXlGdW5jKXtyZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oaXRlcmF0ZWVzKXtpdGVyYXRlZXM9YXJyYXlNYXAoaXRlcmF0ZWVzLGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciB0aGlzQXJnPXRoaXM7cmV0dXJuIGFycmF5RnVuYyhpdGVyYXRlZXMsZnVuY3Rpb24oaXRlcmF0ZWUpe3JldHVybiBhcHBseShpdGVyYXRlZSx0aGlzQXJnLGFyZ3MpfSl9KX0pfQpmdW5jdGlvbiBjcmVhdGVQYWRkaW5nKGxlbmd0aCxjaGFycyl7Y2hhcnM9Y2hhcnM9PT11bmRlZmluZWQ/IiAiOmJhc2VUb1N0cmluZyhjaGFycyk7dmFyIGNoYXJzTGVuZ3RoPWNoYXJzLmxlbmd0aDtpZihjaGFyc0xlbmd0aDwyKXJldHVybiBjaGFyc0xlbmd0aD9iYXNlUmVwZWF0KGNoYXJzLGxlbmd0aCk6Y2hhcnM7dmFyIHJlc3VsdD1iYXNlUmVwZWF0KGNoYXJzLG5hdGl2ZUNlaWwobGVuZ3RoL3N0cmluZ1NpemUoY2hhcnMpKSk7cmV0dXJuIGhhc1VuaWNvZGUoY2hhcnMpP2Nhc3RTbGljZShzdHJpbmdUb0FycmF5KHJlc3VsdCksMCxsZW5ndGgpLmpvaW4oIiIpOnJlc3VsdC5zbGljZSgwLGxlbmd0aCl9ZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmdW5jLGJpdG1hc2ssdGhpc0FyZyxwYXJ0aWFscyl7dmFyIGlzQmluZD1iaXRtYXNrJldSQVBfQklORF9GTEFHLEN0b3I9Y3JlYXRlQ3RvcihmdW5jKTtmdW5jdGlvbiB3cmFwcGVyKCl7dmFyIGFyZ3NJbmRleD0tMSxhcmdzTGVuZ3RoPQphcmd1bWVudHMubGVuZ3RoLGxlZnRJbmRleD0tMSxsZWZ0TGVuZ3RoPXBhcnRpYWxzLmxlbmd0aCxhcmdzPUFycmF5KGxlZnRMZW5ndGgrYXJnc0xlbmd0aCksZm49dGhpcyYmdGhpcyE9PXJvb3QmJnRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyP0N0b3I6ZnVuYzt3aGlsZSgrK2xlZnRJbmRleDxsZWZ0TGVuZ3RoKWFyZ3NbbGVmdEluZGV4XT1wYXJ0aWFsc1tsZWZ0SW5kZXhdO3doaWxlKGFyZ3NMZW5ndGgtLSlhcmdzW2xlZnRJbmRleCsrXT1hcmd1bWVudHNbKythcmdzSW5kZXhdO3JldHVybiBhcHBseShmbixpc0JpbmQ/dGhpc0FyZzp0aGlzLGFyZ3MpfXJldHVybiB3cmFwcGVyfWZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCl7cmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LGVuZCxzdGVwKXtpZihzdGVwJiZ0eXBlb2Ygc3RlcCE9Im51bWJlciImJmlzSXRlcmF0ZWVDYWxsKHN0YXJ0LGVuZCxzdGVwKSllbmQ9c3RlcD11bmRlZmluZWQ7c3RhcnQ9dG9GaW5pdGUoc3RhcnQpO2lmKGVuZD09PQp1bmRlZmluZWQpe2VuZD1zdGFydDtzdGFydD0wfWVsc2UgZW5kPXRvRmluaXRlKGVuZCk7c3RlcD1zdGVwPT09dW5kZWZpbmVkP3N0YXJ0PGVuZD8xOi0xOnRvRmluaXRlKHN0ZXApO3JldHVybiBiYXNlUmFuZ2Uoc3RhcnQsZW5kLHN0ZXAsZnJvbVJpZ2h0KX19ZnVuY3Rpb24gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihvcGVyYXRvcil7cmV0dXJuIGZ1bmN0aW9uKHZhbHVlLG90aGVyKXtpZighKHR5cGVvZiB2YWx1ZT09InN0cmluZyImJnR5cGVvZiBvdGhlcj09InN0cmluZyIpKXt2YWx1ZT10b051bWJlcih2YWx1ZSk7b3RoZXI9dG9OdW1iZXIob3RoZXIpfXJldHVybiBvcGVyYXRvcih2YWx1ZSxvdGhlcil9fWZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYyxiaXRtYXNrLHdyYXBGdW5jLHBsYWNlaG9sZGVyLHRoaXNBcmcscGFydGlhbHMsaG9sZGVycyxhcmdQb3MsYXJ5LGFyaXR5KXt2YXIgaXNDdXJyeT1iaXRtYXNrJldSQVBfQ1VSUllfRkxBRyxuZXdIb2xkZXJzPWlzQ3Vycnk/CmhvbGRlcnM6dW5kZWZpbmVkLG5ld0hvbGRlcnNSaWdodD1pc0N1cnJ5P3VuZGVmaW5lZDpob2xkZXJzLG5ld1BhcnRpYWxzPWlzQ3Vycnk/cGFydGlhbHM6dW5kZWZpbmVkLG5ld1BhcnRpYWxzUmlnaHQ9aXNDdXJyeT91bmRlZmluZWQ6cGFydGlhbHM7Yml0bWFza3w9aXNDdXJyeT9XUkFQX1BBUlRJQUxfRkxBRzpXUkFQX1BBUlRJQUxfUklHSFRfRkxBRztiaXRtYXNrJj1+KGlzQ3Vycnk/V1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUc6V1JBUF9QQVJUSUFMX0ZMQUcpO2lmKCEoYml0bWFzayZXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKWJpdG1hc2smPX4oV1JBUF9CSU5EX0ZMQUd8V1JBUF9CSU5EX0tFWV9GTEFHKTt2YXIgbmV3RGF0YT1bZnVuYyxiaXRtYXNrLHRoaXNBcmcsbmV3UGFydGlhbHMsbmV3SG9sZGVycyxuZXdQYXJ0aWFsc1JpZ2h0LG5ld0hvbGRlcnNSaWdodCxhcmdQb3MsYXJ5LGFyaXR5XTt2YXIgcmVzdWx0PXdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCxuZXdEYXRhKTtpZihpc0xhemlhYmxlKGZ1bmMpKXNldERhdGEocmVzdWx0LApuZXdEYXRhKTtyZXN1bHQucGxhY2Vob2xkZXI9cGxhY2Vob2xkZXI7cmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsZnVuYyxiaXRtYXNrKX1mdW5jdGlvbiBjcmVhdGVSb3VuZChtZXRob2ROYW1lKXt2YXIgZnVuYz1NYXRoW21ldGhvZE5hbWVdO3JldHVybiBmdW5jdGlvbihudW1iZXIscHJlY2lzaW9uKXtudW1iZXI9dG9OdW1iZXIobnVtYmVyKTtwcmVjaXNpb249cHJlY2lzaW9uPT1udWxsPzA6bmF0aXZlTWluKHRvSW50ZWdlcihwcmVjaXNpb24pLDI5Mik7aWYocHJlY2lzaW9uKXt2YXIgcGFpcj0odG9TdHJpbmcobnVtYmVyKSsiZSIpLnNwbGl0KCJlIiksdmFsdWU9ZnVuYyhwYWlyWzBdKyJlIisoK3BhaXJbMV0rcHJlY2lzaW9uKSk7cGFpcj0odG9TdHJpbmcodmFsdWUpKyJlIikuc3BsaXQoImUiKTtyZXR1cm4rKHBhaXJbMF0rImUiKygrcGFpclsxXS1wcmVjaXNpb24pKX1yZXR1cm4gZnVuYyhudW1iZXIpfX12YXIgY3JlYXRlU2V0PSEoU2V0JiYxL3NldFRvQXJyYXkobmV3IFNldChbLAotMF0pKVsxXT09SU5GSU5JVFkpP25vb3A6ZnVuY3Rpb24odmFsdWVzKXtyZXR1cm4gbmV3IFNldCh2YWx1ZXMpfTtmdW5jdGlvbiBjcmVhdGVUb1BhaXJzKGtleXNGdW5jKXtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXt2YXIgdGFnPWdldFRhZyhvYmplY3QpO2lmKHRhZz09bWFwVGFnKXJldHVybiBtYXBUb0FycmF5KG9iamVjdCk7aWYodGFnPT1zZXRUYWcpcmV0dXJuIHNldFRvUGFpcnMob2JqZWN0KTtyZXR1cm4gYmFzZVRvUGFpcnMob2JqZWN0LGtleXNGdW5jKG9iamVjdCkpfX1mdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzLGhvbGRlcnMsYXJnUG9zLGFyeSxhcml0eSl7dmFyIGlzQmluZEtleT1iaXRtYXNrJldSQVBfQklORF9LRVlfRkxBRztpZighaXNCaW5kS2V5JiZ0eXBlb2YgZnVuYyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7dmFyIGxlbmd0aD1wYXJ0aWFscz9wYXJ0aWFscy5sZW5ndGg6CjA7aWYoIWxlbmd0aCl7Yml0bWFzayY9fihXUkFQX1BBUlRJQUxfRkxBR3xXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7cGFydGlhbHM9aG9sZGVycz11bmRlZmluZWR9YXJ5PWFyeT09PXVuZGVmaW5lZD9hcnk6bmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLDApO2FyaXR5PWFyaXR5PT09dW5kZWZpbmVkP2FyaXR5OnRvSW50ZWdlcihhcml0eSk7bGVuZ3RoLT1ob2xkZXJzP2hvbGRlcnMubGVuZ3RoOjA7aWYoYml0bWFzayZXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyl7dmFyIHBhcnRpYWxzUmlnaHQ9cGFydGlhbHMsaG9sZGVyc1JpZ2h0PWhvbGRlcnM7cGFydGlhbHM9aG9sZGVycz11bmRlZmluZWR9dmFyIGRhdGE9aXNCaW5kS2V5P3VuZGVmaW5lZDpnZXREYXRhKGZ1bmMpO3ZhciBuZXdEYXRhPVtmdW5jLGJpdG1hc2ssdGhpc0FyZyxwYXJ0aWFscyxob2xkZXJzLHBhcnRpYWxzUmlnaHQsaG9sZGVyc1JpZ2h0LGFyZ1BvcyxhcnksYXJpdHldO2lmKGRhdGEpbWVyZ2VEYXRhKG5ld0RhdGEsCmRhdGEpO2Z1bmM9bmV3RGF0YVswXTtiaXRtYXNrPW5ld0RhdGFbMV07dGhpc0FyZz1uZXdEYXRhWzJdO3BhcnRpYWxzPW5ld0RhdGFbM107aG9sZGVycz1uZXdEYXRhWzRdO2FyaXR5PW5ld0RhdGFbOV09bmV3RGF0YVs5XT09PXVuZGVmaW5lZD9pc0JpbmRLZXk/MDpmdW5jLmxlbmd0aDpuYXRpdmVNYXgobmV3RGF0YVs5XS1sZW5ndGgsMCk7aWYoIWFyaXR5JiZiaXRtYXNrJihXUkFQX0NVUlJZX0ZMQUd8V1JBUF9DVVJSWV9SSUdIVF9GTEFHKSliaXRtYXNrJj1+KFdSQVBfQ1VSUllfRkxBR3xXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpO2lmKCFiaXRtYXNrfHxiaXRtYXNrPT1XUkFQX0JJTkRfRkxBRyl2YXIgcmVzdWx0PWNyZWF0ZUJpbmQoZnVuYyxiaXRtYXNrLHRoaXNBcmcpO2Vsc2UgaWYoYml0bWFzaz09V1JBUF9DVVJSWV9GTEFHfHxiaXRtYXNrPT1XUkFQX0NVUlJZX1JJR0hUX0ZMQUcpcmVzdWx0PWNyZWF0ZUN1cnJ5KGZ1bmMsYml0bWFzayxhcml0eSk7ZWxzZSBpZigoYml0bWFzaz09CldSQVBfUEFSVElBTF9GTEFHfHxiaXRtYXNrPT0oV1JBUF9CSU5EX0ZMQUd8V1JBUF9QQVJUSUFMX0ZMQUcpKSYmIWhvbGRlcnMubGVuZ3RoKXJlc3VsdD1jcmVhdGVQYXJ0aWFsKGZ1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzKTtlbHNlIHJlc3VsdD1jcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLG5ld0RhdGEpO3ZhciBzZXR0ZXI9ZGF0YT9iYXNlU2V0RGF0YTpzZXREYXRhO3JldHVybiBzZXRXcmFwVG9TdHJpbmcoc2V0dGVyKHJlc3VsdCxuZXdEYXRhKSxmdW5jLGJpdG1hc2spfWZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsc3JjVmFsdWUsa2V5LG9iamVjdCl7aWYob2JqVmFsdWU9PT11bmRlZmluZWR8fGVxKG9ialZhbHVlLG9iamVjdFByb3RvW2tleV0pJiYhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3Qsa2V5KSlyZXR1cm4gc3JjVmFsdWU7cmV0dXJuIG9ialZhbHVlfWZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzTWVyZ2Uob2JqVmFsdWUsc3JjVmFsdWUsCmtleSxvYmplY3Qsc291cmNlLHN0YWNrKXtpZihpc09iamVjdChvYmpWYWx1ZSkmJmlzT2JqZWN0KHNyY1ZhbHVlKSl7c3RhY2suc2V0KHNyY1ZhbHVlLG9ialZhbHVlKTtiYXNlTWVyZ2Uob2JqVmFsdWUsc3JjVmFsdWUsdW5kZWZpbmVkLGN1c3RvbURlZmF1bHRzTWVyZ2Usc3RhY2spO3N0YWNrWyJkZWxldGUiXShzcmNWYWx1ZSl9cmV0dXJuIG9ialZhbHVlfWZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSl7cmV0dXJuIGlzUGxhaW5PYmplY3QodmFsdWUpP3VuZGVmaW5lZDp2YWx1ZX1mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSxvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKXt2YXIgaXNQYXJ0aWFsPWJpdG1hc2smQ09NUEFSRV9QQVJUSUFMX0ZMQUcsYXJyTGVuZ3RoPWFycmF5Lmxlbmd0aCxvdGhMZW5ndGg9b3RoZXIubGVuZ3RoO2lmKGFyckxlbmd0aCE9b3RoTGVuZ3RoJiYhKGlzUGFydGlhbCYmb3RoTGVuZ3RoPmFyckxlbmd0aCkpcmV0dXJuIGZhbHNlOwp2YXIgc3RhY2tlZD1zdGFjay5nZXQoYXJyYXkpO2lmKHN0YWNrZWQmJnN0YWNrLmdldChvdGhlcikpcmV0dXJuIHN0YWNrZWQ9PW90aGVyO3ZhciBpbmRleD0tMSxyZXN1bHQ9dHJ1ZSxzZWVuPWJpdG1hc2smQ09NUEFSRV9VTk9SREVSRURfRkxBRz9uZXcgU2V0Q2FjaGU6dW5kZWZpbmVkO3N0YWNrLnNldChhcnJheSxvdGhlcik7c3RhY2suc2V0KG90aGVyLGFycmF5KTt3aGlsZSgrK2luZGV4PGFyckxlbmd0aCl7dmFyIGFyclZhbHVlPWFycmF5W2luZGV4XSxvdGhWYWx1ZT1vdGhlcltpbmRleF07aWYoY3VzdG9taXplcil2YXIgY29tcGFyZWQ9aXNQYXJ0aWFsP2N1c3RvbWl6ZXIob3RoVmFsdWUsYXJyVmFsdWUsaW5kZXgsb3RoZXIsYXJyYXksc3RhY2spOmN1c3RvbWl6ZXIoYXJyVmFsdWUsb3RoVmFsdWUsaW5kZXgsYXJyYXksb3RoZXIsc3RhY2spO2lmKGNvbXBhcmVkIT09dW5kZWZpbmVkKXtpZihjb21wYXJlZCljb250aW51ZTtyZXN1bHQ9ZmFsc2U7YnJlYWt9aWYoc2Vlbil7aWYoIWFycmF5U29tZShvdGhlciwKZnVuY3Rpb24ob3RoVmFsdWUsb3RoSW5kZXgpe2lmKCFjYWNoZUhhcyhzZWVuLG90aEluZGV4KSYmKGFyclZhbHVlPT09b3RoVmFsdWV8fGVxdWFsRnVuYyhhcnJWYWx1ZSxvdGhWYWx1ZSxiaXRtYXNrLGN1c3RvbWl6ZXIsc3RhY2spKSlyZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KX0pKXtyZXN1bHQ9ZmFsc2U7YnJlYWt9fWVsc2UgaWYoIShhcnJWYWx1ZT09PW90aFZhbHVlfHxlcXVhbEZ1bmMoYXJyVmFsdWUsb3RoVmFsdWUsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKSkpe3Jlc3VsdD1mYWxzZTticmVha319c3RhY2tbImRlbGV0ZSJdKGFycmF5KTtzdGFja1siZGVsZXRlIl0ob3RoZXIpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3Qsb3RoZXIsdGFnLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spe3N3aXRjaCh0YWcpe2Nhc2UgZGF0YVZpZXdUYWc6aWYob2JqZWN0LmJ5dGVMZW5ndGghPW90aGVyLmJ5dGVMZW5ndGh8fG9iamVjdC5ieXRlT2Zmc2V0IT0Kb3RoZXIuYnl0ZU9mZnNldClyZXR1cm4gZmFsc2U7b2JqZWN0PW9iamVjdC5idWZmZXI7b3RoZXI9b3RoZXIuYnVmZmVyO2Nhc2UgYXJyYXlCdWZmZXJUYWc6aWYob2JqZWN0LmJ5dGVMZW5ndGghPW90aGVyLmJ5dGVMZW5ndGh8fCFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSxuZXcgVWludDhBcnJheShvdGhlcikpKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlIGJvb2xUYWc6Y2FzZSBkYXRlVGFnOmNhc2UgbnVtYmVyVGFnOnJldHVybiBlcSgrb2JqZWN0LCtvdGhlcik7Y2FzZSBlcnJvclRhZzpyZXR1cm4gb2JqZWN0Lm5hbWU9PW90aGVyLm5hbWUmJm9iamVjdC5tZXNzYWdlPT1vdGhlci5tZXNzYWdlO2Nhc2UgcmVnZXhwVGFnOmNhc2Ugc3RyaW5nVGFnOnJldHVybiBvYmplY3Q9PW90aGVyKyIiO2Nhc2UgbWFwVGFnOnZhciBjb252ZXJ0PW1hcFRvQXJyYXk7Y2FzZSBzZXRUYWc6dmFyIGlzUGFydGlhbD1iaXRtYXNrJkNPTVBBUkVfUEFSVElBTF9GTEFHO2NvbnZlcnR8fAooY29udmVydD1zZXRUb0FycmF5KTtpZihvYmplY3Quc2l6ZSE9b3RoZXIuc2l6ZSYmIWlzUGFydGlhbClyZXR1cm4gZmFsc2U7dmFyIHN0YWNrZWQ9c3RhY2suZ2V0KG9iamVjdCk7aWYoc3RhY2tlZClyZXR1cm4gc3RhY2tlZD09b3RoZXI7Yml0bWFza3w9Q09NUEFSRV9VTk9SREVSRURfRkxBRztzdGFjay5zZXQob2JqZWN0LG90aGVyKTt2YXIgcmVzdWx0PWVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSxjb252ZXJ0KG90aGVyKSxiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKTtzdGFja1siZGVsZXRlIl0ob2JqZWN0KTtyZXR1cm4gcmVzdWx0O2Nhc2Ugc3ltYm9sVGFnOmlmKHN5bWJvbFZhbHVlT2YpcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpPT1zeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpfXJldHVybiBmYWxzZX1mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spe3ZhciBpc1BhcnRpYWw9CmJpdG1hc2smQ09NUEFSRV9QQVJUSUFMX0ZMQUcsb2JqUHJvcHM9Z2V0QWxsS2V5cyhvYmplY3QpLG9iakxlbmd0aD1vYmpQcm9wcy5sZW5ndGgsb3RoUHJvcHM9Z2V0QWxsS2V5cyhvdGhlciksb3RoTGVuZ3RoPW90aFByb3BzLmxlbmd0aDtpZihvYmpMZW5ndGghPW90aExlbmd0aCYmIWlzUGFydGlhbClyZXR1cm4gZmFsc2U7dmFyIGluZGV4PW9iakxlbmd0aDt3aGlsZShpbmRleC0tKXt2YXIga2V5PW9ialByb3BzW2luZGV4XTtpZighKGlzUGFydGlhbD9rZXkgaW4gb3RoZXI6aGFzT3duUHJvcGVydHkuY2FsbChvdGhlcixrZXkpKSlyZXR1cm4gZmFsc2V9dmFyIHN0YWNrZWQ9c3RhY2suZ2V0KG9iamVjdCk7aWYoc3RhY2tlZCYmc3RhY2suZ2V0KG90aGVyKSlyZXR1cm4gc3RhY2tlZD09b3RoZXI7dmFyIHJlc3VsdD10cnVlO3N0YWNrLnNldChvYmplY3Qsb3RoZXIpO3N0YWNrLnNldChvdGhlcixvYmplY3QpO3ZhciBza2lwQ3Rvcj1pc1BhcnRpYWw7d2hpbGUoKytpbmRleDxvYmpMZW5ndGgpe2tleT0Kb2JqUHJvcHNbaW5kZXhdO3ZhciBvYmpWYWx1ZT1vYmplY3Rba2V5XSxvdGhWYWx1ZT1vdGhlcltrZXldO2lmKGN1c3RvbWl6ZXIpdmFyIGNvbXBhcmVkPWlzUGFydGlhbD9jdXN0b21pemVyKG90aFZhbHVlLG9ialZhbHVlLGtleSxvdGhlcixvYmplY3Qsc3RhY2spOmN1c3RvbWl6ZXIob2JqVmFsdWUsb3RoVmFsdWUsa2V5LG9iamVjdCxvdGhlcixzdGFjayk7aWYoIShjb21wYXJlZD09PXVuZGVmaW5lZD9vYmpWYWx1ZT09PW90aFZhbHVlfHxlcXVhbEZ1bmMob2JqVmFsdWUsb3RoVmFsdWUsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKTpjb21wYXJlZCkpe3Jlc3VsdD1mYWxzZTticmVha31za2lwQ3Rvcnx8KHNraXBDdG9yPWtleT09ImNvbnN0cnVjdG9yIil9aWYocmVzdWx0JiYhc2tpcEN0b3Ipe3ZhciBvYmpDdG9yPW9iamVjdC5jb25zdHJ1Y3RvcixvdGhDdG9yPW90aGVyLmNvbnN0cnVjdG9yO2lmKG9iakN0b3IhPW90aEN0b3ImJigiY29uc3RydWN0b3IiaW4gb2JqZWN0JiYiY29uc3RydWN0b3IiaW4Kb3RoZXIpJiYhKHR5cGVvZiBvYmpDdG9yPT0iZnVuY3Rpb24iJiZvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciYmdHlwZW9mIG90aEN0b3I9PSJmdW5jdGlvbiImJm90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSlyZXN1bHQ9ZmFsc2V9c3RhY2tbImRlbGV0ZSJdKG9iamVjdCk7c3RhY2tbImRlbGV0ZSJdKG90aGVyKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpe3JldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLHVuZGVmaW5lZCxmbGF0dGVuKSxmdW5jKyIiKX1mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCl7cmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCxrZXlzLGdldFN5bWJvbHMpfWZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3Qpe3JldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3Qsa2V5c0luLGdldFN5bWJvbHNJbil9dmFyIGdldERhdGE9IW1ldGFNYXA/bm9vcDpmdW5jdGlvbihmdW5jKXtyZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyl9OwpmdW5jdGlvbiBnZXRGdW5jTmFtZShmdW5jKXt2YXIgcmVzdWx0PWZ1bmMubmFtZSsiIixhcnJheT1yZWFsTmFtZXNbcmVzdWx0XSxsZW5ndGg9aGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMscmVzdWx0KT9hcnJheS5sZW5ndGg6MDt3aGlsZShsZW5ndGgtLSl7dmFyIGRhdGE9YXJyYXlbbGVuZ3RoXSxvdGhlckZ1bmM9ZGF0YS5mdW5jO2lmKG90aGVyRnVuYz09bnVsbHx8b3RoZXJGdW5jPT1mdW5jKXJldHVybiBkYXRhLm5hbWV9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBnZXRIb2xkZXIoZnVuYyl7dmFyIG9iamVjdD1oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaCwicGxhY2Vob2xkZXIiKT9sb2Rhc2g6ZnVuYztyZXR1cm4gb2JqZWN0LnBsYWNlaG9sZGVyfWZ1bmN0aW9uIGdldEl0ZXJhdGVlKCl7dmFyIHJlc3VsdD1sb2Rhc2guaXRlcmF0ZWV8fGl0ZXJhdGVlO3Jlc3VsdD1yZXN1bHQ9PT1pdGVyYXRlZT9iYXNlSXRlcmF0ZWU6cmVzdWx0O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPwpyZXN1bHQoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk6cmVzdWx0fWZ1bmN0aW9uIGdldE1hcERhdGEobWFwLGtleSl7dmFyIGRhdGE9bWFwLl9fZGF0YV9fO3JldHVybiBpc0tleWFibGUoa2V5KT9kYXRhW3R5cGVvZiBrZXk9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ZGF0YS5tYXB9ZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCl7dmFyIHJlc3VsdD1rZXlzKG9iamVjdCksbGVuZ3RoPXJlc3VsdC5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pe3ZhciBrZXk9cmVzdWx0W2xlbmd0aF0sdmFsdWU9b2JqZWN0W2tleV07cmVzdWx0W2xlbmd0aF09W2tleSx2YWx1ZSxpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3Qsa2V5KXt2YXIgdmFsdWU9Z2V0VmFsdWUob2JqZWN0LGtleSk7cmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSk/dmFsdWU6dW5kZWZpbmVkfWZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSl7dmFyIGlzT3duPQpoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLHN5bVRvU3RyaW5nVGFnKSx0YWc9dmFsdWVbc3ltVG9TdHJpbmdUYWddO3RyeXt2YWx1ZVtzeW1Ub1N0cmluZ1RhZ109dW5kZWZpbmVkO3ZhciB1bm1hc2tlZD10cnVlfWNhdGNoKGUpe312YXIgcmVzdWx0PW5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO2lmKHVubWFza2VkKWlmKGlzT3duKXZhbHVlW3N5bVRvU3RyaW5nVGFnXT10YWc7ZWxzZSBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO3JldHVybiByZXN1bHR9dmFyIGdldFN5bWJvbHM9IW5hdGl2ZUdldFN5bWJvbHM/c3R1YkFycmF5OmZ1bmN0aW9uKG9iamVjdCl7aWYob2JqZWN0PT1udWxsKXJldHVybltdO29iamVjdD1PYmplY3Qob2JqZWN0KTtyZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLGZ1bmN0aW9uKHN5bWJvbCl7cmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LHN5bWJvbCl9KX07dmFyIGdldFN5bWJvbHNJbj0KIW5hdGl2ZUdldFN5bWJvbHM/c3R1YkFycmF5OmZ1bmN0aW9uKG9iamVjdCl7dmFyIHJlc3VsdD1bXTt3aGlsZShvYmplY3Qpe2FycmF5UHVzaChyZXN1bHQsZ2V0U3ltYm9scyhvYmplY3QpKTtvYmplY3Q9Z2V0UHJvdG90eXBlKG9iamVjdCl9cmV0dXJuIHJlc3VsdH07dmFyIGdldFRhZz1iYXNlR2V0VGFnO2lmKERhdGFWaWV3JiZnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1kYXRhVmlld1RhZ3x8TWFwJiZnZXRUYWcobmV3IE1hcCkhPW1hcFRhZ3x8UHJvbWlzZSYmZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSE9cHJvbWlzZVRhZ3x8U2V0JiZnZXRUYWcobmV3IFNldCkhPXNldFRhZ3x8V2Vha01hcCYmZ2V0VGFnKG5ldyBXZWFrTWFwKSE9d2Vha01hcFRhZylnZXRUYWc9ZnVuY3Rpb24odmFsdWUpe3ZhciByZXN1bHQ9YmFzZUdldFRhZyh2YWx1ZSksQ3Rvcj1yZXN1bHQ9PW9iamVjdFRhZz92YWx1ZS5jb25zdHJ1Y3Rvcjp1bmRlZmluZWQsY3RvclN0cmluZz0KQ3Rvcj90b1NvdXJjZShDdG9yKToiIjtpZihjdG9yU3RyaW5nKXN3aXRjaChjdG9yU3RyaW5nKXtjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzpyZXR1cm4gZGF0YVZpZXdUYWc7Y2FzZSBtYXBDdG9yU3RyaW5nOnJldHVybiBtYXBUYWc7Y2FzZSBwcm9taXNlQ3RvclN0cmluZzpyZXR1cm4gcHJvbWlzZVRhZztjYXNlIHNldEN0b3JTdHJpbmc6cmV0dXJuIHNldFRhZztjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOnJldHVybiB3ZWFrTWFwVGFnfXJldHVybiByZXN1bHR9O2Z1bmN0aW9uIGdldFZpZXcoc3RhcnQsZW5kLHRyYW5zZm9ybXMpe3ZhciBpbmRleD0tMSxsZW5ndGg9dHJhbnNmb3Jtcy5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBkYXRhPXRyYW5zZm9ybXNbaW5kZXhdLHNpemU9ZGF0YS5zaXplO3N3aXRjaChkYXRhLnR5cGUpe2Nhc2UgImRyb3AiOnN0YXJ0Kz1zaXplO2JyZWFrO2Nhc2UgImRyb3BSaWdodCI6ZW5kLT1zaXplO2JyZWFrO2Nhc2UgInRha2UiOmVuZD1uYXRpdmVNaW4oZW5kLApzdGFydCtzaXplKTticmVhaztjYXNlICJ0YWtlUmlnaHQiOnN0YXJ0PW5hdGl2ZU1heChzdGFydCxlbmQtc2l6ZSk7YnJlYWt9fXJldHVybnsic3RhcnQiOnN0YXJ0LCJlbmQiOmVuZH19ZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKXt2YXIgbWF0Y2g9c291cmNlLm1hdGNoKHJlV3JhcERldGFpbHMpO3JldHVybiBtYXRjaD9tYXRjaFsxXS5zcGxpdChyZVNwbGl0RGV0YWlscyk6W119ZnVuY3Rpb24gaGFzUGF0aChvYmplY3QscGF0aCxoYXNGdW5jKXtwYXRoPWNhc3RQYXRoKHBhdGgsb2JqZWN0KTt2YXIgaW5kZXg9LTEsbGVuZ3RoPXBhdGgubGVuZ3RoLHJlc3VsdD1mYWxzZTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGtleT10b0tleShwYXRoW2luZGV4XSk7aWYoIShyZXN1bHQ9b2JqZWN0IT1udWxsJiZoYXNGdW5jKG9iamVjdCxrZXkpKSlicmVhaztvYmplY3Q9b2JqZWN0W2tleV19aWYocmVzdWx0fHwrK2luZGV4IT1sZW5ndGgpcmV0dXJuIHJlc3VsdDtsZW5ndGg9Cm9iamVjdD09bnVsbD8wOm9iamVjdC5sZW5ndGg7cmV0dXJuISFsZW5ndGgmJmlzTGVuZ3RoKGxlbmd0aCkmJmlzSW5kZXgoa2V5LGxlbmd0aCkmJihpc0FycmF5KG9iamVjdCl8fGlzQXJndW1lbnRzKG9iamVjdCkpfWZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXN1bHQ9bmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7aWYobGVuZ3RoJiZ0eXBlb2YgYXJyYXlbMF09PSJzdHJpbmciJiZoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCJpbmRleCIpKXtyZXN1bHQuaW5kZXg9YXJyYXkuaW5kZXg7cmVzdWx0LmlucHV0PWFycmF5LmlucHV0fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCl7cmV0dXJuIHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiFpc1Byb3RvdHlwZShvYmplY3QpP2Jhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpOnt9fWZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwKdGFnLGlzRGVlcCl7dmFyIEN0b3I9b2JqZWN0LmNvbnN0cnVjdG9yO3N3aXRjaCh0YWcpe2Nhc2UgYXJyYXlCdWZmZXJUYWc6cmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtjYXNlIGJvb2xUYWc6Y2FzZSBkYXRlVGFnOnJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtjYXNlIGRhdGFWaWV3VGFnOnJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCxpc0RlZXApO2Nhc2UgZmxvYXQzMlRhZzpjYXNlIGZsb2F0NjRUYWc6Y2FzZSBpbnQ4VGFnOmNhc2UgaW50MTZUYWc6Y2FzZSBpbnQzMlRhZzpjYXNlIHVpbnQ4VGFnOmNhc2UgdWludDhDbGFtcGVkVGFnOmNhc2UgdWludDE2VGFnOmNhc2UgdWludDMyVGFnOnJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LGlzRGVlcCk7Y2FzZSBtYXBUYWc6cmV0dXJuIG5ldyBDdG9yO2Nhc2UgbnVtYmVyVGFnOmNhc2Ugc3RyaW5nVGFnOnJldHVybiBuZXcgQ3RvcihvYmplY3QpO2Nhc2UgcmVnZXhwVGFnOnJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpOwpjYXNlIHNldFRhZzpyZXR1cm4gbmV3IEN0b3I7Y2FzZSBzeW1ib2xUYWc6cmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCl9fWZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSxkZXRhaWxzKXt2YXIgbGVuZ3RoPWRldGFpbHMubGVuZ3RoO2lmKCFsZW5ndGgpcmV0dXJuIHNvdXJjZTt2YXIgbGFzdEluZGV4PWxlbmd0aC0xO2RldGFpbHNbbGFzdEluZGV4XT0obGVuZ3RoPjE/Ilx4MjYgIjoiIikrZGV0YWlsc1tsYXN0SW5kZXhdO2RldGFpbHM9ZGV0YWlscy5qb2luKGxlbmd0aD4yPyIsICI6IiAiKTtyZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwie1xuLyogW3dyYXBwZWQgd2l0aCAiK2RldGFpbHMrIl0gKi9cbiIpfWZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpe3JldHVybiBpc0FycmF5KHZhbHVlKXx8aXNBcmd1bWVudHModmFsdWUpfHwhIShzcHJlYWRhYmxlU3ltYm9sJiZ2YWx1ZSYmdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pfWZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsCmxlbmd0aCl7dmFyIHR5cGU9dHlwZW9mIHZhbHVlO2xlbmd0aD1sZW5ndGg9PW51bGw/TUFYX1NBRkVfSU5URUdFUjpsZW5ndGg7cmV0dXJuISFsZW5ndGgmJih0eXBlPT0ibnVtYmVyInx8dHlwZSE9InN5bWJvbCImJnJlSXNVaW50LnRlc3QodmFsdWUpKSYmKHZhbHVlPi0xJiZ2YWx1ZSUxPT0wJiZ2YWx1ZTxsZW5ndGgpfWZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLGluZGV4LG9iamVjdCl7aWYoIWlzT2JqZWN0KG9iamVjdCkpcmV0dXJuIGZhbHNlO3ZhciB0eXBlPXR5cGVvZiBpbmRleDtpZih0eXBlPT0ibnVtYmVyIj9pc0FycmF5TGlrZShvYmplY3QpJiZpc0luZGV4KGluZGV4LG9iamVjdC5sZW5ndGgpOnR5cGU9PSJzdHJpbmciJiZpbmRleCBpbiBvYmplY3QpcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sdmFsdWUpO3JldHVybiBmYWxzZX1mdW5jdGlvbiBpc0tleSh2YWx1ZSxvYmplY3Qpe2lmKGlzQXJyYXkodmFsdWUpKXJldHVybiBmYWxzZTt2YXIgdHlwZT10eXBlb2YgdmFsdWU7CmlmKHR5cGU9PSJudW1iZXIifHx0eXBlPT0ic3ltYm9sInx8dHlwZT09ImJvb2xlYW4ifHx2YWx1ZT09bnVsbHx8aXNTeW1ib2wodmFsdWUpKXJldHVybiB0cnVlO3JldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpfHwhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpfHxvYmplY3QhPW51bGwmJnZhbHVlIGluIE9iamVjdChvYmplY3QpfWZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSl7dmFyIHR5cGU9dHlwZW9mIHZhbHVlO3JldHVybiB0eXBlPT0ic3RyaW5nInx8dHlwZT09Im51bWJlciJ8fHR5cGU9PSJzeW1ib2wifHx0eXBlPT0iYm9vbGVhbiI/dmFsdWUhPT0iX19wcm90b19fIjp2YWx1ZT09PW51bGx9ZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKXt2YXIgZnVuY05hbWU9Z2V0RnVuY05hbWUoZnVuYyksb3RoZXI9bG9kYXNoW2Z1bmNOYW1lXTtpZih0eXBlb2Ygb3RoZXIhPSJmdW5jdGlvbiJ8fCEoZnVuY05hbWUgaW4gTGF6eVdyYXBwZXIucHJvdG90eXBlKSlyZXR1cm4gZmFsc2U7CmlmKGZ1bmM9PT1vdGhlcilyZXR1cm4gdHJ1ZTt2YXIgZGF0YT1nZXREYXRhKG90aGVyKTtyZXR1cm4hIWRhdGEmJmZ1bmM9PT1kYXRhWzBdfWZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpe3JldHVybiEhbWFza1NyY0tleSYmbWFza1NyY0tleSBpbiBmdW5jfXZhciBpc01hc2thYmxlPWNvcmVKc0RhdGE/aXNGdW5jdGlvbjpzdHViRmFsc2U7ZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpe3ZhciBDdG9yPXZhbHVlJiZ2YWx1ZS5jb25zdHJ1Y3Rvcixwcm90bz10eXBlb2YgQ3Rvcj09ImZ1bmN0aW9uIiYmQ3Rvci5wcm90b3R5cGV8fG9iamVjdFByb3RvO3JldHVybiB2YWx1ZT09PXByb3RvfWZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSl7cmV0dXJuIHZhbHVlPT09dmFsdWUmJiFpc09iamVjdCh2YWx1ZSl9ZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LHNyY1ZhbHVlKXtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXtpZihvYmplY3Q9PW51bGwpcmV0dXJuIGZhbHNlOwpyZXR1cm4gb2JqZWN0W2tleV09PT1zcmNWYWx1ZSYmKHNyY1ZhbHVlIT09dW5kZWZpbmVkfHxrZXkgaW4gT2JqZWN0KG9iamVjdCkpfX1mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpe3ZhciByZXN1bHQ9bWVtb2l6ZShmdW5jLGZ1bmN0aW9uKGtleSl7aWYoY2FjaGUuc2l6ZT09PU1BWF9NRU1PSVpFX1NJWkUpY2FjaGUuY2xlYXIoKTtyZXR1cm4ga2V5fSk7dmFyIGNhY2hlPXJlc3VsdC5jYWNoZTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLHNvdXJjZSl7dmFyIGJpdG1hc2s9ZGF0YVsxXSxzcmNCaXRtYXNrPXNvdXJjZVsxXSxuZXdCaXRtYXNrPWJpdG1hc2t8c3JjQml0bWFzayxpc0NvbW1vbj1uZXdCaXRtYXNrPChXUkFQX0JJTkRfRkxBR3xXUkFQX0JJTkRfS0VZX0ZMQUd8V1JBUF9BUllfRkxBRyk7dmFyIGlzQ29tYm89c3JjQml0bWFzaz09V1JBUF9BUllfRkxBRyYmYml0bWFzaz09V1JBUF9DVVJSWV9GTEFHfHxzcmNCaXRtYXNrPT1XUkFQX0FSWV9GTEFHJiYKYml0bWFzaz09V1JBUF9SRUFSR19GTEFHJiZkYXRhWzddLmxlbmd0aDw9c291cmNlWzhdfHxzcmNCaXRtYXNrPT0oV1JBUF9BUllfRkxBR3xXUkFQX1JFQVJHX0ZMQUcpJiZzb3VyY2VbN10ubGVuZ3RoPD1zb3VyY2VbOF0mJmJpdG1hc2s9PVdSQVBfQ1VSUllfRkxBRztpZighKGlzQ29tbW9ufHxpc0NvbWJvKSlyZXR1cm4gZGF0YTtpZihzcmNCaXRtYXNrJldSQVBfQklORF9GTEFHKXtkYXRhWzJdPXNvdXJjZVsyXTtuZXdCaXRtYXNrfD1iaXRtYXNrJldSQVBfQklORF9GTEFHPzA6V1JBUF9DVVJSWV9CT1VORF9GTEFHfXZhciB2YWx1ZT1zb3VyY2VbM107aWYodmFsdWUpe3ZhciBwYXJ0aWFscz1kYXRhWzNdO2RhdGFbM109cGFydGlhbHM/Y29tcG9zZUFyZ3MocGFydGlhbHMsdmFsdWUsc291cmNlWzRdKTp2YWx1ZTtkYXRhWzRdPXBhcnRpYWxzP3JlcGxhY2VIb2xkZXJzKGRhdGFbM10sUExBQ0VIT0xERVIpOnNvdXJjZVs0XX12YWx1ZT1zb3VyY2VbNV07aWYodmFsdWUpe3BhcnRpYWxzPQpkYXRhWzVdO2RhdGFbNV09cGFydGlhbHM/Y29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscyx2YWx1ZSxzb3VyY2VbNl0pOnZhbHVlO2RhdGFbNl09cGFydGlhbHM/cmVwbGFjZUhvbGRlcnMoZGF0YVs1XSxQTEFDRUhPTERFUik6c291cmNlWzZdfXZhbHVlPXNvdXJjZVs3XTtpZih2YWx1ZSlkYXRhWzddPXZhbHVlO2lmKHNyY0JpdG1hc2smV1JBUF9BUllfRkxBRylkYXRhWzhdPWRhdGFbOF09PW51bGw/c291cmNlWzhdOm5hdGl2ZU1pbihkYXRhWzhdLHNvdXJjZVs4XSk7aWYoZGF0YVs5XT09bnVsbClkYXRhWzldPXNvdXJjZVs5XTtkYXRhWzBdPXNvdXJjZVswXTtkYXRhWzFdPW5ld0JpdG1hc2s7cmV0dXJuIGRhdGF9ZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCl7dmFyIHJlc3VsdD1bXTtpZihvYmplY3QhPW51bGwpZm9yKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpcmVzdWx0LnB1c2goa2V5KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKXtyZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSl9CmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsc3RhcnQsdHJhbnNmb3JtKXtzdGFydD1uYXRpdmVNYXgoc3RhcnQ9PT11bmRlZmluZWQ/ZnVuYy5sZW5ndGgtMTpzdGFydCwwKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHMsaW5kZXg9LTEsbGVuZ3RoPW5hdGl2ZU1heChhcmdzLmxlbmd0aC1zdGFydCwwKSxhcnJheT1BcnJheShsZW5ndGgpO3doaWxlKCsraW5kZXg8bGVuZ3RoKWFycmF5W2luZGV4XT1hcmdzW3N0YXJ0K2luZGV4XTtpbmRleD0tMTt2YXIgb3RoZXJBcmdzPUFycmF5KHN0YXJ0KzEpO3doaWxlKCsraW5kZXg8c3RhcnQpb3RoZXJBcmdzW2luZGV4XT1hcmdzW2luZGV4XTtvdGhlckFyZ3Nbc3RhcnRdPXRyYW5zZm9ybShhcnJheSk7cmV0dXJuIGFwcGx5KGZ1bmMsdGhpcyxvdGhlckFyZ3MpfX1mdW5jdGlvbiBwYXJlbnQob2JqZWN0LHBhdGgpe3JldHVybiBwYXRoLmxlbmd0aDwyP29iamVjdDpiYXNlR2V0KG9iamVjdCxiYXNlU2xpY2UocGF0aCwwLC0xKSl9CmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksaW5kZXhlcyl7dmFyIGFyckxlbmd0aD1hcnJheS5sZW5ndGgsbGVuZ3RoPW5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCxhcnJMZW5ndGgpLG9sZEFycmF5PWNvcHlBcnJheShhcnJheSk7d2hpbGUobGVuZ3RoLS0pe3ZhciBpbmRleD1pbmRleGVzW2xlbmd0aF07YXJyYXlbbGVuZ3RoXT1pc0luZGV4KGluZGV4LGFyckxlbmd0aCk/b2xkQXJyYXlbaW5kZXhdOnVuZGVmaW5lZH1yZXR1cm4gYXJyYXl9dmFyIHNldERhdGE9c2hvcnRPdXQoYmFzZVNldERhdGEpO3ZhciBzZXRUaW1lb3V0PWN0eFNldFRpbWVvdXR8fGZ1bmN0aW9uKGZ1bmMsd2FpdCl7cmV0dXJuIHJvb3Quc2V0VGltZW91dChmdW5jLHdhaXQpfTt2YXIgc2V0VG9TdHJpbmc9c2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtmdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlcixyZWZlcmVuY2UsYml0bWFzayl7dmFyIHNvdXJjZT1yZWZlcmVuY2UrIiI7cmV0dXJuIHNldFRvU3RyaW5nKHdyYXBwZXIsCmluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSx1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLGJpdG1hc2spKSl9ZnVuY3Rpb24gc2hvcnRPdXQoZnVuYyl7dmFyIGNvdW50PTAsbGFzdENhbGxlZD0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBzdGFtcD1uYXRpdmVOb3coKSxyZW1haW5pbmc9SE9UX1NQQU4tKHN0YW1wLWxhc3RDYWxsZWQpO2xhc3RDYWxsZWQ9c3RhbXA7aWYocmVtYWluaW5nPjApe2lmKCsrY291bnQ+PUhPVF9DT1VOVClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgY291bnQ9MDtyZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsYXJndW1lbnRzKX19ZnVuY3Rpb24gc2h1ZmZsZVNlbGYoYXJyYXksc2l6ZSl7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGgsbGFzdEluZGV4PWxlbmd0aC0xO3NpemU9c2l6ZT09PXVuZGVmaW5lZD9sZW5ndGg6c2l6ZTt3aGlsZSgrK2luZGV4PHNpemUpe3ZhciByYW5kPWJhc2VSYW5kb20oaW5kZXgsbGFzdEluZGV4KSwKdmFsdWU9YXJyYXlbcmFuZF07YXJyYXlbcmFuZF09YXJyYXlbaW5kZXhdO2FycmF5W2luZGV4XT12YWx1ZX1hcnJheS5sZW5ndGg9c2l6ZTtyZXR1cm4gYXJyYXl9dmFyIHN0cmluZ1RvUGF0aD1tZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZyl7dmFyIHJlc3VsdD1bXTtpZihzdHJpbmcuY2hhckNvZGVBdCgwKT09PTQ2KXJlc3VsdC5wdXNoKCIiKTtzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLGZ1bmN0aW9uKG1hdGNoLG51bWJlcixxdW90ZSxzdWJTdHJpbmcpe3Jlc3VsdC5wdXNoKHF1b3RlP3N1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwiJDEiKTpudW1iZXJ8fG1hdGNoKX0pO3JldHVybiByZXN1bHR9KTtmdW5jdGlvbiB0b0tleSh2YWx1ZSl7aWYodHlwZW9mIHZhbHVlPT0ic3RyaW5nInx8aXNTeW1ib2wodmFsdWUpKXJldHVybiB2YWx1ZTt2YXIgcmVzdWx0PXZhbHVlKyIiO3JldHVybiByZXN1bHQ9PSIwIiYmMS92YWx1ZT09LUlORklOSVRZPyItMCI6cmVzdWx0fQpmdW5jdGlvbiB0b1NvdXJjZShmdW5jKXtpZihmdW5jIT1udWxsKXt0cnl7cmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpfWNhdGNoKGUpe310cnl7cmV0dXJuIGZ1bmMrIiJ9Y2F0Y2goZSQwKXt9fXJldHVybiIifWZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsYml0bWFzayl7YXJyYXlFYWNoKHdyYXBGbGFncyxmdW5jdGlvbihwYWlyKXt2YXIgdmFsdWU9Il8uIitwYWlyWzBdO2lmKGJpdG1hc2smcGFpclsxXSYmIWFycmF5SW5jbHVkZXMoZGV0YWlscyx2YWx1ZSkpZGV0YWlscy5wdXNoKHZhbHVlKX0pO3JldHVybiBkZXRhaWxzLnNvcnQoKX1mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcil7aWYod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKXJldHVybiB3cmFwcGVyLmNsb25lKCk7dmFyIHJlc3VsdD1uZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLHdyYXBwZXIuX19jaGFpbl9fKTtyZXN1bHQuX19hY3Rpb25zX189Y29weUFycmF5KHdyYXBwZXIuX19hY3Rpb25zX18pOwpyZXN1bHQuX19pbmRleF9fPXdyYXBwZXIuX19pbmRleF9fO3Jlc3VsdC5fX3ZhbHVlc19fPXdyYXBwZXIuX192YWx1ZXNfXztyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNodW5rKGFycmF5LHNpemUsZ3VhcmQpe2lmKGd1YXJkP2lzSXRlcmF0ZWVDYWxsKGFycmF5LHNpemUsZ3VhcmQpOnNpemU9PT11bmRlZmluZWQpc2l6ZT0xO2Vsc2Ugc2l6ZT1uYXRpdmVNYXgodG9JbnRlZ2VyKHNpemUpLDApO3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aHx8c2l6ZTwxKXJldHVybltdO3ZhciBpbmRleD0wLHJlc0luZGV4PTAscmVzdWx0PUFycmF5KG5hdGl2ZUNlaWwobGVuZ3RoL3NpemUpKTt3aGlsZShpbmRleDxsZW5ndGgpcmVzdWx0W3Jlc0luZGV4KytdPWJhc2VTbGljZShhcnJheSxpbmRleCxpbmRleCs9c2l6ZSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjb21wYWN0KGFycmF5KXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoLApyZXNJbmRleD0wLHJlc3VsdD1bXTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XTtpZih2YWx1ZSlyZXN1bHRbcmVzSW5kZXgrK109dmFsdWV9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjb25jYXQoKXt2YXIgbGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm5bXTt2YXIgYXJncz1BcnJheShsZW5ndGgtMSksYXJyYXk9YXJndW1lbnRzWzBdLGluZGV4PWxlbmd0aDt3aGlsZShpbmRleC0tKWFyZ3NbaW5kZXgtMV09YXJndW1lbnRzW2luZGV4XTtyZXR1cm4gYXJyYXlQdXNoKGlzQXJyYXkoYXJyYXkpP2NvcHlBcnJheShhcnJheSk6W2FycmF5XSxiYXNlRmxhdHRlbihhcmdzLDEpKX12YXIgZGlmZmVyZW5jZT1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3JldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSk/YmFzZURpZmZlcmVuY2UoYXJyYXksYmFzZUZsYXR0ZW4odmFsdWVzLDEsaXNBcnJheUxpa2VPYmplY3QsdHJ1ZSkpOgpbXX0pO3ZhciBkaWZmZXJlbmNlQnk9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksdmFsdWVzKXt2YXIgaXRlcmF0ZWU9bGFzdCh2YWx1ZXMpO2lmKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSlpdGVyYXRlZT11bmRlZmluZWQ7cmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KT9iYXNlRGlmZmVyZW5jZShhcnJheSxiYXNlRmxhdHRlbih2YWx1ZXMsMSxpc0FycmF5TGlrZU9iamVjdCx0cnVlKSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk6W119KTt2YXIgZGlmZmVyZW5jZVdpdGg9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksdmFsdWVzKXt2YXIgY29tcGFyYXRvcj1sYXN0KHZhbHVlcyk7aWYoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpY29tcGFyYXRvcj11bmRlZmluZWQ7cmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KT9iYXNlRGlmZmVyZW5jZShhcnJheSxiYXNlRmxhdHRlbih2YWx1ZXMsMSxpc0FycmF5TGlrZU9iamVjdCx0cnVlKSx1bmRlZmluZWQsY29tcGFyYXRvcik6CltdfSk7ZnVuY3Rpb24gZHJvcChhcnJheSxuLGd1YXJkKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKCFsZW5ndGgpcmV0dXJuW107bj1ndWFyZHx8bj09PXVuZGVmaW5lZD8xOnRvSW50ZWdlcihuKTtyZXR1cm4gYmFzZVNsaWNlKGFycmF5LG48MD8wOm4sbGVuZ3RoKX1mdW5jdGlvbiBkcm9wUmlnaHQoYXJyYXksbixndWFyZCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO249Z3VhcmR8fG49PT11bmRlZmluZWQ/MTp0b0ludGVnZXIobik7bj1sZW5ndGgtbjtyZXR1cm4gYmFzZVNsaWNlKGFycmF5LDAsbjwwPzA6bil9ZnVuY3Rpb24gZHJvcFJpZ2h0V2hpbGUoYXJyYXkscHJlZGljYXRlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlV2hpbGUoYXJyYXksZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLHRydWUsdHJ1ZSk6W119ZnVuY3Rpb24gZHJvcFdoaWxlKGFycmF5LHByZWRpY2F0ZSl7cmV0dXJuIGFycmF5JiYKYXJyYXkubGVuZ3RoP2Jhc2VXaGlsZShhcnJheSxnZXRJdGVyYXRlZShwcmVkaWNhdGUsMyksdHJ1ZSk6W119ZnVuY3Rpb24gZmlsbChhcnJheSx2YWx1ZSxzdGFydCxlbmQpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm5bXTtpZihzdGFydCYmdHlwZW9mIHN0YXJ0IT0ibnVtYmVyIiYmaXNJdGVyYXRlZUNhbGwoYXJyYXksdmFsdWUsc3RhcnQpKXtzdGFydD0wO2VuZD1sZW5ndGh9cmV0dXJuIGJhc2VGaWxsKGFycmF5LHZhbHVlLHN0YXJ0LGVuZCl9ZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LHByZWRpY2F0ZSxmcm9tSW5kZXgpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm4tMTt2YXIgaW5kZXg9ZnJvbUluZGV4PT1udWxsPzA6dG9JbnRlZ2VyKGZyb21JbmRleCk7aWYoaW5kZXg8MClpbmRleD1uYXRpdmVNYXgobGVuZ3RoK2luZGV4LDApO3JldHVybiBiYXNlRmluZEluZGV4KGFycmF5LApnZXRJdGVyYXRlZShwcmVkaWNhdGUsMyksaW5kZXgpfWZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgoYXJyYXkscHJlZGljYXRlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybi0xO3ZhciBpbmRleD1sZW5ndGgtMTtpZihmcm9tSW5kZXghPT11bmRlZmluZWQpe2luZGV4PXRvSW50ZWdlcihmcm9tSW5kZXgpO2luZGV4PWZyb21JbmRleDwwP25hdGl2ZU1heChsZW5ndGgraW5kZXgsMCk6bmF0aXZlTWluKGluZGV4LGxlbmd0aC0xKX1yZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSxnZXRJdGVyYXRlZShwcmVkaWNhdGUsMyksaW5kZXgsdHJ1ZSl9ZnVuY3Rpb24gZmxhdHRlbihhcnJheSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VGbGF0dGVuKGFycmF5LDEpOltdfWZ1bmN0aW9uIGZsYXR0ZW5EZWVwKGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoOwpyZXR1cm4gbGVuZ3RoP2Jhc2VGbGF0dGVuKGFycmF5LElORklOSVRZKTpbXX1mdW5jdGlvbiBmbGF0dGVuRGVwdGgoYXJyYXksZGVwdGgpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm5bXTtkZXB0aD1kZXB0aD09PXVuZGVmaW5lZD8xOnRvSW50ZWdlcihkZXB0aCk7cmV0dXJuIGJhc2VGbGF0dGVuKGFycmF5LGRlcHRoKX1mdW5jdGlvbiBmcm9tUGFpcnMocGFpcnMpe3ZhciBpbmRleD0tMSxsZW5ndGg9cGFpcnM9PW51bGw/MDpwYWlycy5sZW5ndGgscmVzdWx0PXt9O3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgcGFpcj1wYWlyc1tpbmRleF07cmVzdWx0W3BhaXJbMF1dPXBhaXJbMV19cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBoZWFkKGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9hcnJheVswXTp1bmRlZmluZWR9ZnVuY3Rpb24gaW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3ZhciBsZW5ndGg9YXJyYXk9PQpudWxsPzA6YXJyYXkubGVuZ3RoO2lmKCFsZW5ndGgpcmV0dXJuLTE7dmFyIGluZGV4PWZyb21JbmRleD09bnVsbD8wOnRvSW50ZWdlcihmcm9tSW5kZXgpO2lmKGluZGV4PDApaW5kZXg9bmF0aXZlTWF4KGxlbmd0aCtpbmRleCwwKTtyZXR1cm4gYmFzZUluZGV4T2YoYXJyYXksdmFsdWUsaW5kZXgpfWZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7cmV0dXJuIGxlbmd0aD9iYXNlU2xpY2UoYXJyYXksMCwtMSk6W119dmFyIGludGVyc2VjdGlvbj1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBtYXBwZWQ9YXJyYXlNYXAoYXJyYXlzLGNhc3RBcnJheUxpa2VPYmplY3QpO3JldHVybiBtYXBwZWQubGVuZ3RoJiZtYXBwZWRbMF09PT1hcnJheXNbMF0/YmFzZUludGVyc2VjdGlvbihtYXBwZWQpOltdfSk7dmFyIGludGVyc2VjdGlvbkJ5PWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIGl0ZXJhdGVlPWxhc3QoYXJyYXlzKSwKbWFwcGVkPWFycmF5TWFwKGFycmF5cyxjYXN0QXJyYXlMaWtlT2JqZWN0KTtpZihpdGVyYXRlZT09PWxhc3QobWFwcGVkKSlpdGVyYXRlZT11bmRlZmluZWQ7ZWxzZSBtYXBwZWQucG9wKCk7cmV0dXJuIG1hcHBlZC5sZW5ndGgmJm1hcHBlZFswXT09PWFycmF5c1swXT9iYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk6W119KTt2YXIgaW50ZXJzZWN0aW9uV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBjb21wYXJhdG9yPWxhc3QoYXJyYXlzKSxtYXBwZWQ9YXJyYXlNYXAoYXJyYXlzLGNhc3RBcnJheUxpa2VPYmplY3QpO2NvbXBhcmF0b3I9dHlwZW9mIGNvbXBhcmF0b3I9PSJmdW5jdGlvbiI/Y29tcGFyYXRvcjp1bmRlZmluZWQ7aWYoY29tcGFyYXRvciltYXBwZWQucG9wKCk7cmV0dXJuIG1hcHBlZC5sZW5ndGgmJm1hcHBlZFswXT09PWFycmF5c1swXT9iYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCx1bmRlZmluZWQsY29tcGFyYXRvcik6CltdfSk7ZnVuY3Rpb24gam9pbihhcnJheSxzZXBhcmF0b3Ipe3JldHVybiBhcnJheT09bnVsbD8iIjpuYXRpdmVKb2luLmNhbGwoYXJyYXksc2VwYXJhdG9yKX1mdW5jdGlvbiBsYXN0KGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3JldHVybiBsZW5ndGg/YXJyYXlbbGVuZ3RoLTFdOnVuZGVmaW5lZH1mdW5jdGlvbiBsYXN0SW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm4tMTt2YXIgaW5kZXg9bGVuZ3RoO2lmKGZyb21JbmRleCE9PXVuZGVmaW5lZCl7aW5kZXg9dG9JbnRlZ2VyKGZyb21JbmRleCk7aW5kZXg9aW5kZXg8MD9uYXRpdmVNYXgobGVuZ3RoK2luZGV4LDApOm5hdGl2ZU1pbihpbmRleCxsZW5ndGgtMSl9cmV0dXJuIHZhbHVlPT09dmFsdWU/c3RyaWN0TGFzdEluZGV4T2YoYXJyYXksdmFsdWUsaW5kZXgpOmJhc2VGaW5kSW5kZXgoYXJyYXksCmJhc2VJc05hTixpbmRleCx0cnVlKX1mdW5jdGlvbiBudGgoYXJyYXksbil7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZU50aChhcnJheSx0b0ludGVnZXIobikpOnVuZGVmaW5lZH12YXIgcHVsbD1iYXNlUmVzdChwdWxsQWxsKTtmdW5jdGlvbiBwdWxsQWxsKGFycmF5LHZhbHVlcyl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGgmJnZhbHVlcyYmdmFsdWVzLmxlbmd0aD9iYXNlUHVsbEFsbChhcnJheSx2YWx1ZXMpOmFycmF5fWZ1bmN0aW9uIHB1bGxBbGxCeShhcnJheSx2YWx1ZXMsaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoJiZ2YWx1ZXMmJnZhbHVlcy5sZW5ndGg/YmFzZVB1bGxBbGwoYXJyYXksdmFsdWVzLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTphcnJheX1mdW5jdGlvbiBwdWxsQWxsV2l0aChhcnJheSx2YWx1ZXMsY29tcGFyYXRvcil7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGgmJnZhbHVlcyYmdmFsdWVzLmxlbmd0aD9iYXNlUHVsbEFsbChhcnJheSwKdmFsdWVzLHVuZGVmaW5lZCxjb21wYXJhdG9yKTphcnJheX12YXIgcHVsbEF0PWZsYXRSZXN0KGZ1bmN0aW9uKGFycmF5LGluZGV4ZXMpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGgscmVzdWx0PWJhc2VBdChhcnJheSxpbmRleGVzKTtiYXNlUHVsbEF0KGFycmF5LGFycmF5TWFwKGluZGV4ZXMsZnVuY3Rpb24oaW5kZXgpe3JldHVybiBpc0luZGV4KGluZGV4LGxlbmd0aCk/K2luZGV4OmluZGV4fSkuc29ydChjb21wYXJlQXNjZW5kaW5nKSk7cmV0dXJuIHJlc3VsdH0pO2Z1bmN0aW9uIHJlbW92ZShhcnJheSxwcmVkaWNhdGUpe3ZhciByZXN1bHQ9W107aWYoIShhcnJheSYmYXJyYXkubGVuZ3RoKSlyZXR1cm4gcmVzdWx0O3ZhciBpbmRleD0tMSxpbmRleGVzPVtdLGxlbmd0aD1hcnJheS5sZW5ndGg7cHJlZGljYXRlPWdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XTtpZihwcmVkaWNhdGUodmFsdWUsCmluZGV4LGFycmF5KSl7cmVzdWx0LnB1c2godmFsdWUpO2luZGV4ZXMucHVzaChpbmRleCl9fWJhc2VQdWxsQXQoYXJyYXksaW5kZXhlcyk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiByZXZlcnNlKGFycmF5KXtyZXR1cm4gYXJyYXk9PW51bGw/YXJyYXk6bmF0aXZlUmV2ZXJzZS5jYWxsKGFycmF5KX1mdW5jdGlvbiBzbGljZShhcnJheSxzdGFydCxlbmQpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm5bXTtpZihlbmQmJnR5cGVvZiBlbmQhPSJudW1iZXIiJiZpc0l0ZXJhdGVlQ2FsbChhcnJheSxzdGFydCxlbmQpKXtzdGFydD0wO2VuZD1sZW5ndGh9ZWxzZXtzdGFydD1zdGFydD09bnVsbD8wOnRvSW50ZWdlcihzdGFydCk7ZW5kPWVuZD09PXVuZGVmaW5lZD9sZW5ndGg6dG9JbnRlZ2VyKGVuZCl9cmV0dXJuIGJhc2VTbGljZShhcnJheSxzdGFydCxlbmQpfWZ1bmN0aW9uIHNvcnRlZEluZGV4KGFycmF5LHZhbHVlKXtyZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LAp2YWx1ZSl9ZnVuY3Rpb24gc29ydGVkSW5kZXhCeShhcnJheSx2YWx1ZSxpdGVyYXRlZSl7cmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LHZhbHVlLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKX1mdW5jdGlvbiBzb3J0ZWRJbmRleE9mKGFycmF5LHZhbHVlKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKGxlbmd0aCl7dmFyIGluZGV4PWJhc2VTb3J0ZWRJbmRleChhcnJheSx2YWx1ZSk7aWYoaW5kZXg8bGVuZ3RoJiZlcShhcnJheVtpbmRleF0sdmFsdWUpKXJldHVybiBpbmRleH1yZXR1cm4tMX1mdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXgoYXJyYXksdmFsdWUpe3JldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksdmFsdWUsdHJ1ZSl9ZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4QnkoYXJyYXksdmFsdWUsaXRlcmF0ZWUpe3JldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSx2YWx1ZSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSx0cnVlKX1mdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhPZihhcnJheSwKdmFsdWUpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYobGVuZ3RoKXt2YXIgaW5kZXg9YmFzZVNvcnRlZEluZGV4KGFycmF5LHZhbHVlLHRydWUpLTE7aWYoZXEoYXJyYXlbaW5kZXhdLHZhbHVlKSlyZXR1cm4gaW5kZXh9cmV0dXJuLTF9ZnVuY3Rpb24gc29ydGVkVW5pcShhcnJheSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVNvcnRlZFVuaXEoYXJyYXkpOltdfWZ1bmN0aW9uIHNvcnRlZFVuaXFCeShhcnJheSxpdGVyYXRlZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVNvcnRlZFVuaXEoYXJyYXksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOltdfWZ1bmN0aW9uIHRhaWwoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7cmV0dXJuIGxlbmd0aD9iYXNlU2xpY2UoYXJyYXksMSxsZW5ndGgpOltdfWZ1bmN0aW9uIHRha2UoYXJyYXksbixndWFyZCl7aWYoIShhcnJheSYmYXJyYXkubGVuZ3RoKSlyZXR1cm5bXTsKbj1ndWFyZHx8bj09PXVuZGVmaW5lZD8xOnRvSW50ZWdlcihuKTtyZXR1cm4gYmFzZVNsaWNlKGFycmF5LDAsbjwwPzA6bil9ZnVuY3Rpb24gdGFrZVJpZ2h0KGFycmF5LG4sZ3VhcmQpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm5bXTtuPWd1YXJkfHxuPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKG4pO249bGVuZ3RoLW47cmV0dXJuIGJhc2VTbGljZShhcnJheSxuPDA/MDpuLGxlbmd0aCl9ZnVuY3Rpb24gdGFrZVJpZ2h0V2hpbGUoYXJyYXkscHJlZGljYXRlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlV2hpbGUoYXJyYXksZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGZhbHNlLHRydWUpOltdfWZ1bmN0aW9uIHRha2VXaGlsZShhcnJheSxwcmVkaWNhdGUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VXaGlsZShhcnJheSxnZXRJdGVyYXRlZShwcmVkaWNhdGUsMykpOltdfXZhciB1bmlvbj1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3JldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsCjEsaXNBcnJheUxpa2VPYmplY3QsdHJ1ZSkpfSk7dmFyIHVuaW9uQnk9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgaXRlcmF0ZWU9bGFzdChhcnJheXMpO2lmKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSlpdGVyYXRlZT11bmRlZmluZWQ7cmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywxLGlzQXJyYXlMaWtlT2JqZWN0LHRydWUpLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKX0pO3ZhciB1bmlvbldpdGg9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgY29tcGFyYXRvcj1sYXN0KGFycmF5cyk7Y29tcGFyYXRvcj10eXBlb2YgY29tcGFyYXRvcj09ImZ1bmN0aW9uIj9jb21wYXJhdG9yOnVuZGVmaW5lZDtyZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLDEsaXNBcnJheUxpa2VPYmplY3QsdHJ1ZSksdW5kZWZpbmVkLGNvbXBhcmF0b3IpfSk7ZnVuY3Rpb24gdW5pcShhcnJheSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVVuaXEoYXJyYXkpOgpbXX1mdW5jdGlvbiB1bmlxQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VVbmlxKGFycmF5LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTpbXX1mdW5jdGlvbiB1bmlxV2l0aChhcnJheSxjb21wYXJhdG9yKXtjb21wYXJhdG9yPXR5cGVvZiBjb21wYXJhdG9yPT0iZnVuY3Rpb24iP2NvbXBhcmF0b3I6dW5kZWZpbmVkO3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VVbmlxKGFycmF5LHVuZGVmaW5lZCxjb21wYXJhdG9yKTpbXX1mdW5jdGlvbiB1bnppcChhcnJheSl7aWYoIShhcnJheSYmYXJyYXkubGVuZ3RoKSlyZXR1cm5bXTt2YXIgbGVuZ3RoPTA7YXJyYXk9YXJyYXlGaWx0ZXIoYXJyYXksZnVuY3Rpb24oZ3JvdXApe2lmKGlzQXJyYXlMaWtlT2JqZWN0KGdyb3VwKSl7bGVuZ3RoPW5hdGl2ZU1heChncm91cC5sZW5ndGgsbGVuZ3RoKTtyZXR1cm4gdHJ1ZX19KTtyZXR1cm4gYmFzZVRpbWVzKGxlbmd0aCxmdW5jdGlvbihpbmRleCl7cmV0dXJuIGFycmF5TWFwKGFycmF5LApiYXNlUHJvcGVydHkoaW5kZXgpKX0pfWZ1bmN0aW9uIHVuemlwV2l0aChhcnJheSxpdGVyYXRlZSl7aWYoIShhcnJheSYmYXJyYXkubGVuZ3RoKSlyZXR1cm5bXTt2YXIgcmVzdWx0PXVuemlwKGFycmF5KTtpZihpdGVyYXRlZT09bnVsbClyZXR1cm4gcmVzdWx0O3JldHVybiBhcnJheU1hcChyZXN1bHQsZnVuY3Rpb24oZ3JvdXApe3JldHVybiBhcHBseShpdGVyYXRlZSx1bmRlZmluZWQsZ3JvdXApfSl9dmFyIHdpdGhvdXQ9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksdmFsdWVzKXtyZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpP2Jhc2VEaWZmZXJlbmNlKGFycmF5LHZhbHVlcyk6W119KTt2YXIgeG9yPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7cmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLGlzQXJyYXlMaWtlT2JqZWN0KSl9KTt2YXIgeG9yQnk9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgaXRlcmF0ZWU9bGFzdChhcnJheXMpO2lmKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSlpdGVyYXRlZT0KdW5kZWZpbmVkO3JldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cyxpc0FycmF5TGlrZU9iamVjdCksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpfSk7dmFyIHhvcldpdGg9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgY29tcGFyYXRvcj1sYXN0KGFycmF5cyk7Y29tcGFyYXRvcj10eXBlb2YgY29tcGFyYXRvcj09ImZ1bmN0aW9uIj9jb21wYXJhdG9yOnVuZGVmaW5lZDtyZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsaXNBcnJheUxpa2VPYmplY3QpLHVuZGVmaW5lZCxjb21wYXJhdG9yKX0pO3ZhciB6aXA9YmFzZVJlc3QodW56aXApO2Z1bmN0aW9uIHppcE9iamVjdChwcm9wcyx2YWx1ZXMpe3JldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzfHxbXSx2YWx1ZXN8fFtdLGFzc2lnblZhbHVlKX1mdW5jdGlvbiB6aXBPYmplY3REZWVwKHByb3BzLHZhbHVlcyl7cmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHN8fFtdLHZhbHVlc3x8W10sYmFzZVNldCl9dmFyIHppcFdpdGg9CmJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIGxlbmd0aD1hcnJheXMubGVuZ3RoLGl0ZXJhdGVlPWxlbmd0aD4xP2FycmF5c1tsZW5ndGgtMV06dW5kZWZpbmVkO2l0ZXJhdGVlPXR5cGVvZiBpdGVyYXRlZT09ImZ1bmN0aW9uIj8oYXJyYXlzLnBvcCgpLGl0ZXJhdGVlKTp1bmRlZmluZWQ7cmV0dXJuIHVuemlwV2l0aChhcnJheXMsaXRlcmF0ZWUpfSk7ZnVuY3Rpb24gY2hhaW4odmFsdWUpe3ZhciByZXN1bHQ9bG9kYXNoKHZhbHVlKTtyZXN1bHQuX19jaGFpbl9fPXRydWU7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiB0YXAodmFsdWUsaW50ZXJjZXB0b3Ipe2ludGVyY2VwdG9yKHZhbHVlKTtyZXR1cm4gdmFsdWV9ZnVuY3Rpb24gdGhydSh2YWx1ZSxpbnRlcmNlcHRvcil7cmV0dXJuIGludGVyY2VwdG9yKHZhbHVlKX12YXIgd3JhcHBlckF0PWZsYXRSZXN0KGZ1bmN0aW9uKHBhdGhzKXt2YXIgbGVuZ3RoPXBhdGhzLmxlbmd0aCxzdGFydD1sZW5ndGg/cGF0aHNbMF06MCx2YWx1ZT0KdGhpcy5fX3dyYXBwZWRfXyxpbnRlcmNlcHRvcj1mdW5jdGlvbihvYmplY3Qpe3JldHVybiBiYXNlQXQob2JqZWN0LHBhdGhzKX07aWYobGVuZ3RoPjF8fHRoaXMuX19hY3Rpb25zX18ubGVuZ3RofHwhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpfHwhaXNJbmRleChzdGFydCkpcmV0dXJuIHRoaXMudGhydShpbnRlcmNlcHRvcik7dmFsdWU9dmFsdWUuc2xpY2Uoc3RhcnQsK3N0YXJ0KyhsZW5ndGg/MTowKSk7dmFsdWUuX19hY3Rpb25zX18ucHVzaCh7ImZ1bmMiOnRocnUsImFyZ3MiOltpbnRlcmNlcHRvcl0sInRoaXNBcmciOnVuZGVmaW5lZH0pO3JldHVybihuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSx0aGlzLl9fY2hhaW5fXykpLnRocnUoZnVuY3Rpb24oYXJyYXkpe2lmKGxlbmd0aCYmIWFycmF5Lmxlbmd0aClhcnJheS5wdXNoKHVuZGVmaW5lZCk7cmV0dXJuIGFycmF5fSl9KTtmdW5jdGlvbiB3cmFwcGVyQ2hhaW4oKXtyZXR1cm4gY2hhaW4odGhpcyl9ZnVuY3Rpb24gd3JhcHBlckNvbW1pdCgpe3JldHVybiBuZXcgTG9kYXNoV3JhcHBlcih0aGlzLnZhbHVlKCksCnRoaXMuX19jaGFpbl9fKX1mdW5jdGlvbiB3cmFwcGVyTmV4dCgpe2lmKHRoaXMuX192YWx1ZXNfXz09PXVuZGVmaW5lZCl0aGlzLl9fdmFsdWVzX189dG9BcnJheSh0aGlzLnZhbHVlKCkpO3ZhciBkb25lPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoLHZhbHVlPWRvbmU/dW5kZWZpbmVkOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXTtyZXR1cm57ImRvbmUiOmRvbmUsInZhbHVlIjp2YWx1ZX19ZnVuY3Rpb24gd3JhcHBlclRvSXRlcmF0b3IoKXtyZXR1cm4gdGhpc31mdW5jdGlvbiB3cmFwcGVyUGxhbnQodmFsdWUpe3ZhciByZXN1bHQscGFyZW50PXRoaXM7d2hpbGUocGFyZW50IGluc3RhbmNlb2YgYmFzZUxvZGFzaCl7dmFyIGNsb25lPXdyYXBwZXJDbG9uZShwYXJlbnQpO2Nsb25lLl9faW5kZXhfXz0wO2Nsb25lLl9fdmFsdWVzX189dW5kZWZpbmVkO2lmKHJlc3VsdClwcmV2aW91cy5fX3dyYXBwZWRfXz1jbG9uZTtlbHNlIHJlc3VsdD1jbG9uZTsKdmFyIHByZXZpb3VzPWNsb25lO3BhcmVudD1wYXJlbnQuX193cmFwcGVkX199cHJldmlvdXMuX193cmFwcGVkX189dmFsdWU7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiB3cmFwcGVyUmV2ZXJzZSgpe3ZhciB2YWx1ZT10aGlzLl9fd3JhcHBlZF9fO2lmKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpe3ZhciB3cmFwcGVkPXZhbHVlO2lmKHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKXdyYXBwZWQ9bmV3IExhenlXcmFwcGVyKHRoaXMpO3dyYXBwZWQ9d3JhcHBlZC5yZXZlcnNlKCk7d3JhcHBlZC5fX2FjdGlvbnNfXy5wdXNoKHsiZnVuYyI6dGhydSwiYXJncyI6W3JldmVyc2VdLCJ0aGlzQXJnIjp1bmRlZmluZWR9KTtyZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlZCx0aGlzLl9fY2hhaW5fXyl9cmV0dXJuIHRoaXMudGhydShyZXZlcnNlKX1mdW5jdGlvbiB3cmFwcGVyVmFsdWUoKXtyZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZSh0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfQp2YXIgY291bnRCeT1jcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCx2YWx1ZSxrZXkpe2lmKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LGtleSkpKytyZXN1bHRba2V5XTtlbHNlIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsa2V5LDEpfSk7ZnVuY3Rpb24gZXZlcnkoY29sbGVjdGlvbixwcmVkaWNhdGUsZ3VhcmQpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlFdmVyeTpiYXNlRXZlcnk7aWYoZ3VhcmQmJmlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24scHJlZGljYXRlLGd1YXJkKSlwcmVkaWNhdGU9dW5kZWZpbmVkO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpKX1mdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbixwcmVkaWNhdGUpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlGaWx0ZXI6YmFzZUZpbHRlcjtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSl9dmFyIGZpbmQ9CmNyZWF0ZUZpbmQoZmluZEluZGV4KTt2YXIgZmluZExhc3Q9Y3JlYXRlRmluZChmaW5kTGFzdEluZGV4KTtmdW5jdGlvbiBmbGF0TWFwKGNvbGxlY3Rpb24saXRlcmF0ZWUpe3JldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbixpdGVyYXRlZSksMSl9ZnVuY3Rpb24gZmxhdE1hcERlZXAoY29sbGVjdGlvbixpdGVyYXRlZSl7cmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLGl0ZXJhdGVlKSxJTkZJTklUWSl9ZnVuY3Rpb24gZmxhdE1hcERlcHRoKGNvbGxlY3Rpb24saXRlcmF0ZWUsZGVwdGgpe2RlcHRoPWRlcHRoPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKGRlcHRoKTtyZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24saXRlcmF0ZWUpLGRlcHRoKX1mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24saXRlcmF0ZWUpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlFYWNoOmJhc2VFYWNoO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsCjMpKX1mdW5jdGlvbiBmb3JFYWNoUmlnaHQoY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUVhY2hSaWdodDpiYXNlRWFjaFJpZ2h0O3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMykpfXZhciBncm91cEJ5PWNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LHZhbHVlLGtleSl7aWYoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsa2V5KSlyZXN1bHRba2V5XS5wdXNoKHZhbHVlKTtlbHNlIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsa2V5LFt2YWx1ZV0pfSk7ZnVuY3Rpb24gaW5jbHVkZXMoY29sbGVjdGlvbix2YWx1ZSxmcm9tSW5kZXgsZ3VhcmQpe2NvbGxlY3Rpb249aXNBcnJheUxpa2UoY29sbGVjdGlvbik/Y29sbGVjdGlvbjp2YWx1ZXMoY29sbGVjdGlvbik7ZnJvbUluZGV4PWZyb21JbmRleCYmIWd1YXJkP3RvSW50ZWdlcihmcm9tSW5kZXgpOjA7dmFyIGxlbmd0aD1jb2xsZWN0aW9uLmxlbmd0aDsKaWYoZnJvbUluZGV4PDApZnJvbUluZGV4PW5hdGl2ZU1heChsZW5ndGgrZnJvbUluZGV4LDApO3JldHVybiBpc1N0cmluZyhjb2xsZWN0aW9uKT9mcm9tSW5kZXg8PWxlbmd0aCYmY29sbGVjdGlvbi5pbmRleE9mKHZhbHVlLGZyb21JbmRleCk+LTE6ISFsZW5ndGgmJmJhc2VJbmRleE9mKGNvbGxlY3Rpb24sdmFsdWUsZnJvbUluZGV4KT4tMX12YXIgaW52b2tlTWFwPWJhc2VSZXN0KGZ1bmN0aW9uKGNvbGxlY3Rpb24scGF0aCxhcmdzKXt2YXIgaW5kZXg9LTEsaXNGdW5jPXR5cGVvZiBwYXRoPT0iZnVuY3Rpb24iLHJlc3VsdD1pc0FycmF5TGlrZShjb2xsZWN0aW9uKT9BcnJheShjb2xsZWN0aW9uLmxlbmd0aCk6W107YmFzZUVhY2goY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSl7cmVzdWx0WysraW5kZXhdPWlzRnVuYz9hcHBseShwYXRoLHZhbHVlLGFyZ3MpOmJhc2VJbnZva2UodmFsdWUscGF0aCxhcmdzKX0pO3JldHVybiByZXN1bHR9KTt2YXIga2V5Qnk9Y3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsCnZhbHVlLGtleSl7YmFzZUFzc2lnblZhbHVlKHJlc3VsdCxrZXksdmFsdWUpfSk7ZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24saXRlcmF0ZWUpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlNYXA6YmFzZU1hcDtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpKX1mdW5jdGlvbiBvcmRlckJ5KGNvbGxlY3Rpb24saXRlcmF0ZWVzLG9yZGVycyxndWFyZCl7aWYoY29sbGVjdGlvbj09bnVsbClyZXR1cm5bXTtpZighaXNBcnJheShpdGVyYXRlZXMpKWl0ZXJhdGVlcz1pdGVyYXRlZXM9PW51bGw/W106W2l0ZXJhdGVlc107b3JkZXJzPWd1YXJkP3VuZGVmaW5lZDpvcmRlcnM7aWYoIWlzQXJyYXkob3JkZXJzKSlvcmRlcnM9b3JkZXJzPT1udWxsP1tdOltvcmRlcnNdO3JldHVybiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLGl0ZXJhdGVlcyxvcmRlcnMpfXZhciBwYXJ0aXRpb249Y3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsdmFsdWUsCmtleSl7cmVzdWx0W2tleT8wOjFdLnB1c2godmFsdWUpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbixpdGVyYXRlZSxhY2N1bXVsYXRvcil7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheVJlZHVjZTpiYXNlUmVkdWNlLGluaXRBY2N1bT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShpdGVyYXRlZSw0KSxhY2N1bXVsYXRvcixpbml0QWNjdW0sYmFzZUVhY2gpfWZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNvbGxlY3Rpb24saXRlcmF0ZWUsYWNjdW11bGF0b3Ipe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlSZWR1Y2VSaWdodDpiYXNlUmVkdWNlLGluaXRBY2N1bT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShpdGVyYXRlZSw0KSxhY2N1bXVsYXRvcixpbml0QWNjdW0sYmFzZUVhY2hSaWdodCl9ZnVuY3Rpb24gcmVqZWN0KGNvbGxlY3Rpb24sCnByZWRpY2F0ZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUZpbHRlcjpiYXNlRmlsdGVyO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSkpfWZ1bmN0aW9uIHNhbXBsZShjb2xsZWN0aW9uKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5U2FtcGxlOmJhc2VTYW1wbGU7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbil9ZnVuY3Rpb24gc2FtcGxlU2l6ZShjb2xsZWN0aW9uLG4sZ3VhcmQpe2lmKGd1YXJkP2lzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sbixndWFyZCk6bj09PXVuZGVmaW5lZCluPTE7ZWxzZSBuPXRvSW50ZWdlcihuKTt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5U2FtcGxlU2l6ZTpiYXNlU2FtcGxlU2l6ZTtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLG4pfWZ1bmN0aW9uIHNodWZmbGUoY29sbGVjdGlvbil7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheVNodWZmbGU6CmJhc2VTaHVmZmxlO3JldHVybiBmdW5jKGNvbGxlY3Rpb24pfWZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbil7aWYoY29sbGVjdGlvbj09bnVsbClyZXR1cm4gMDtpZihpc0FycmF5TGlrZShjb2xsZWN0aW9uKSlyZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbik/c3RyaW5nU2l6ZShjb2xsZWN0aW9uKTpjb2xsZWN0aW9uLmxlbmd0aDt2YXIgdGFnPWdldFRhZyhjb2xsZWN0aW9uKTtpZih0YWc9PW1hcFRhZ3x8dGFnPT1zZXRUYWcpcmV0dXJuIGNvbGxlY3Rpb24uc2l6ZTtyZXR1cm4gYmFzZUtleXMoY29sbGVjdGlvbikubGVuZ3RofWZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbixwcmVkaWNhdGUsZ3VhcmQpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlTb21lOmJhc2VTb21lO2lmKGd1YXJkJiZpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLHByZWRpY2F0ZSxndWFyZCkpcHJlZGljYXRlPXVuZGVmaW5lZDtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwKMykpfXZhciBzb3J0Qnk9YmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZXMpe2lmKGNvbGxlY3Rpb249PW51bGwpcmV0dXJuW107dmFyIGxlbmd0aD1pdGVyYXRlZXMubGVuZ3RoO2lmKGxlbmd0aD4xJiZpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLGl0ZXJhdGVlc1swXSxpdGVyYXRlZXNbMV0pKWl0ZXJhdGVlcz1bXTtlbHNlIGlmKGxlbmd0aD4yJiZpc0l0ZXJhdGVlQ2FsbChpdGVyYXRlZXNbMF0saXRlcmF0ZWVzWzFdLGl0ZXJhdGVlc1syXSkpaXRlcmF0ZWVzPVtpdGVyYXRlZXNbMF1dO3JldHVybiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLGJhc2VGbGF0dGVuKGl0ZXJhdGVlcywxKSxbXSl9KTt2YXIgbm93PWN0eE5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4gcm9vdC5EYXRlLm5vdygpfTtmdW5jdGlvbiBhZnRlcihuLGZ1bmMpe2lmKHR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtuPXRvSW50ZWdlcihuKTsKcmV0dXJuIGZ1bmN0aW9uKCl7aWYoLS1uPDEpcmV0dXJuIGZ1bmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBhcnkoZnVuYyxuLGd1YXJkKXtuPWd1YXJkP3VuZGVmaW5lZDpuO249ZnVuYyYmbj09bnVsbD9mdW5jLmxlbmd0aDpuO3JldHVybiBjcmVhdGVXcmFwKGZ1bmMsV1JBUF9BUllfRkxBRyx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsbil9ZnVuY3Rpb24gYmVmb3JlKG4sZnVuYyl7dmFyIHJlc3VsdDtpZih0eXBlb2YgZnVuYyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7bj10b0ludGVnZXIobik7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoLS1uPjApcmVzdWx0PWZ1bmMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKG48PTEpZnVuYz11bmRlZmluZWQ7cmV0dXJuIHJlc3VsdH19dmFyIGJpbmQ9YmFzZVJlc3QoZnVuY3Rpb24oZnVuYyx0aGlzQXJnLHBhcnRpYWxzKXt2YXIgYml0bWFzaz1XUkFQX0JJTkRfRkxBRzsKaWYocGFydGlhbHMubGVuZ3RoKXt2YXIgaG9sZGVycz1yZXBsYWNlSG9sZGVycyhwYXJ0aWFscyxnZXRIb2xkZXIoYmluZCkpO2JpdG1hc2t8PVdSQVBfUEFSVElBTF9GTEFHfXJldHVybiBjcmVhdGVXcmFwKGZ1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzLGhvbGRlcnMpfSk7dmFyIGJpbmRLZXk9YmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LGtleSxwYXJ0aWFscyl7dmFyIGJpdG1hc2s9V1JBUF9CSU5EX0ZMQUd8V1JBUF9CSU5EX0tFWV9GTEFHO2lmKHBhcnRpYWxzLmxlbmd0aCl7dmFyIGhvbGRlcnM9cmVwbGFjZUhvbGRlcnMocGFydGlhbHMsZ2V0SG9sZGVyKGJpbmRLZXkpKTtiaXRtYXNrfD1XUkFQX1BBUlRJQUxfRkxBR31yZXR1cm4gY3JlYXRlV3JhcChrZXksYml0bWFzayxvYmplY3QscGFydGlhbHMsaG9sZGVycyl9KTtmdW5jdGlvbiBjdXJyeShmdW5jLGFyaXR5LGd1YXJkKXthcml0eT1ndWFyZD91bmRlZmluZWQ6YXJpdHk7dmFyIHJlc3VsdD1jcmVhdGVXcmFwKGZ1bmMsCldSQVBfQ1VSUllfRkxBRyx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLGFyaXR5KTtyZXN1bHQucGxhY2Vob2xkZXI9Y3VycnkucGxhY2Vob2xkZXI7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjdXJyeVJpZ2h0KGZ1bmMsYXJpdHksZ3VhcmQpe2FyaXR5PWd1YXJkP3VuZGVmaW5lZDphcml0eTt2YXIgcmVzdWx0PWNyZWF0ZVdyYXAoZnVuYyxXUkFQX0NVUlJZX1JJR0hUX0ZMQUcsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCxhcml0eSk7cmVzdWx0LnBsYWNlaG9sZGVyPWN1cnJ5UmlnaHQucGxhY2Vob2xkZXI7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBkZWJvdW5jZShmdW5jLHdhaXQsb3B0aW9ucyl7dmFyIGxhc3RBcmdzLGxhc3RUaGlzLG1heFdhaXQscmVzdWx0LHRpbWVySWQsbGFzdENhbGxUaW1lLGxhc3RJbnZva2VUaW1lPTAsbGVhZGluZz1mYWxzZSxtYXhpbmc9ZmFsc2UsdHJhaWxpbmc9dHJ1ZTsKaWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3dhaXQ9dG9OdW1iZXIod2FpdCl8fDA7aWYoaXNPYmplY3Qob3B0aW9ucykpe2xlYWRpbmc9ISFvcHRpb25zLmxlYWRpbmc7bWF4aW5nPSJtYXhXYWl0ImluIG9wdGlvbnM7bWF4V2FpdD1tYXhpbmc/bmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCl8fDAsd2FpdCk6bWF4V2FpdDt0cmFpbGluZz0idHJhaWxpbmciaW4gb3B0aW9ucz8hIW9wdGlvbnMudHJhaWxpbmc6dHJhaWxpbmd9ZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKXt2YXIgYXJncz1sYXN0QXJncyx0aGlzQXJnPWxhc3RUaGlzO2xhc3RBcmdzPWxhc3RUaGlzPXVuZGVmaW5lZDtsYXN0SW52b2tlVGltZT10aW1lO3Jlc3VsdD1mdW5jLmFwcGx5KHRoaXNBcmcsYXJncyk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBsZWFkaW5nRWRnZSh0aW1lKXtsYXN0SW52b2tlVGltZT10aW1lO3RpbWVySWQ9c2V0VGltZW91dCh0aW1lckV4cGlyZWQsCndhaXQpO3JldHVybiBsZWFkaW5nP2ludm9rZUZ1bmModGltZSk6cmVzdWx0fWZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSl7dmFyIHRpbWVTaW5jZUxhc3RDYWxsPXRpbWUtbGFzdENhbGxUaW1lLHRpbWVTaW5jZUxhc3RJbnZva2U9dGltZS1sYXN0SW52b2tlVGltZSx0aW1lV2FpdGluZz13YWl0LXRpbWVTaW5jZUxhc3RDYWxsO3JldHVybiBtYXhpbmc/bmF0aXZlTWluKHRpbWVXYWl0aW5nLG1heFdhaXQtdGltZVNpbmNlTGFzdEludm9rZSk6dGltZVdhaXRpbmd9ZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpe3ZhciB0aW1lU2luY2VMYXN0Q2FsbD10aW1lLWxhc3RDYWxsVGltZSx0aW1lU2luY2VMYXN0SW52b2tlPXRpbWUtbGFzdEludm9rZVRpbWU7cmV0dXJuIGxhc3RDYWxsVGltZT09PXVuZGVmaW5lZHx8dGltZVNpbmNlTGFzdENhbGw+PXdhaXR8fHRpbWVTaW5jZUxhc3RDYWxsPDB8fG1heGluZyYmdGltZVNpbmNlTGFzdEludm9rZT49bWF4V2FpdH1mdW5jdGlvbiB0aW1lckV4cGlyZWQoKXt2YXIgdGltZT0Kbm93KCk7aWYoc2hvdWxkSW52b2tlKHRpbWUpKXJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7dGltZXJJZD1zZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCxyZW1haW5pbmdXYWl0KHRpbWUpKX1mdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSl7dGltZXJJZD11bmRlZmluZWQ7aWYodHJhaWxpbmcmJmxhc3RBcmdzKXJldHVybiBpbnZva2VGdW5jKHRpbWUpO2xhc3RBcmdzPWxhc3RUaGlzPXVuZGVmaW5lZDtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNhbmNlbCgpe2lmKHRpbWVySWQhPT11bmRlZmluZWQpY2xlYXJUaW1lb3V0KHRpbWVySWQpO2xhc3RJbnZva2VUaW1lPTA7bGFzdEFyZ3M9bGFzdENhbGxUaW1lPWxhc3RUaGlzPXRpbWVySWQ9dW5kZWZpbmVkfWZ1bmN0aW9uIGZsdXNoKCl7cmV0dXJuIHRpbWVySWQ9PT11bmRlZmluZWQ/cmVzdWx0OnRyYWlsaW5nRWRnZShub3coKSl9ZnVuY3Rpb24gZGVib3VuY2VkKCl7dmFyIHRpbWU9bm93KCksaXNJbnZva2luZz1zaG91bGRJbnZva2UodGltZSk7Cmxhc3RBcmdzPWFyZ3VtZW50cztsYXN0VGhpcz10aGlzO2xhc3RDYWxsVGltZT10aW1lO2lmKGlzSW52b2tpbmcpe2lmKHRpbWVySWQ9PT11bmRlZmluZWQpcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7aWYobWF4aW5nKXt0aW1lcklkPXNldFRpbWVvdXQodGltZXJFeHBpcmVkLHdhaXQpO3JldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSl9fWlmKHRpbWVySWQ9PT11bmRlZmluZWQpdGltZXJJZD1zZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCx3YWl0KTtyZXR1cm4gcmVzdWx0fWRlYm91bmNlZC5jYW5jZWw9Y2FuY2VsO2RlYm91bmNlZC5mbHVzaD1mbHVzaDtyZXR1cm4gZGVib3VuY2VkfXZhciBkZWZlcj1iYXNlUmVzdChmdW5jdGlvbihmdW5jLGFyZ3Mpe3JldHVybiBiYXNlRGVsYXkoZnVuYywxLGFyZ3MpfSk7dmFyIGRlbGF5PWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsd2FpdCxhcmdzKXtyZXR1cm4gYmFzZURlbGF5KGZ1bmMsdG9OdW1iZXIod2FpdCl8fDAsYXJncyl9KTsKZnVuY3Rpb24gZmxpcChmdW5jKXtyZXR1cm4gY3JlYXRlV3JhcChmdW5jLFdSQVBfRkxJUF9GTEFHKX1mdW5jdGlvbiBtZW1vaXplKGZ1bmMscmVzb2x2ZXIpe2lmKHR5cGVvZiBmdW5jIT0iZnVuY3Rpb24ifHxyZXNvbHZlciE9bnVsbCYmdHlwZW9mIHJlc29sdmVyIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTt2YXIgbWVtb2l6ZWQ9ZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHMsa2V5PXJlc29sdmVyP3Jlc29sdmVyLmFwcGx5KHRoaXMsYXJncyk6YXJnc1swXSxjYWNoZT1tZW1vaXplZC5jYWNoZTtpZihjYWNoZS5oYXMoa2V5KSlyZXR1cm4gY2FjaGUuZ2V0KGtleSk7dmFyIHJlc3VsdD1mdW5jLmFwcGx5KHRoaXMsYXJncyk7bWVtb2l6ZWQuY2FjaGU9Y2FjaGUuc2V0KGtleSxyZXN1bHQpfHxjYWNoZTtyZXR1cm4gcmVzdWx0fTttZW1vaXplZC5jYWNoZT1uZXcgKG1lbW9pemUuQ2FjaGV8fE1hcENhY2hlKTtyZXR1cm4gbWVtb2l6ZWR9Cm1lbW9pemUuQ2FjaGU9TWFwQ2FjaGU7ZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSl7aWYodHlwZW9mIHByZWRpY2F0ZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzO3N3aXRjaChhcmdzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiFwcmVkaWNhdGUuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIXByZWRpY2F0ZS5jYWxsKHRoaXMsYXJnc1swXSk7Y2FzZSAyOnJldHVybiFwcmVkaWNhdGUuY2FsbCh0aGlzLGFyZ3NbMF0sYXJnc1sxXSk7Y2FzZSAzOnJldHVybiFwcmVkaWNhdGUuY2FsbCh0aGlzLGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzJdKX1yZXR1cm4hcHJlZGljYXRlLmFwcGx5KHRoaXMsYXJncyl9fWZ1bmN0aW9uIG9uY2UoZnVuYyl7cmV0dXJuIGJlZm9yZSgyLGZ1bmMpfXZhciBvdmVyQXJncz1jYXN0UmVzdChmdW5jdGlvbihmdW5jLHRyYW5zZm9ybXMpe3RyYW5zZm9ybXM9dHJhbnNmb3Jtcy5sZW5ndGg9PQoxJiZpc0FycmF5KHRyYW5zZm9ybXNbMF0pP2FycmF5TWFwKHRyYW5zZm9ybXNbMF0sYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTphcnJheU1hcChiYXNlRmxhdHRlbih0cmFuc2Zvcm1zLDEpLGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7dmFyIGZ1bmNzTGVuZ3RoPXRyYW5zZm9ybXMubGVuZ3RoO3JldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPW5hdGl2ZU1pbihhcmdzLmxlbmd0aCxmdW5jc0xlbmd0aCk7d2hpbGUoKytpbmRleDxsZW5ndGgpYXJnc1tpbmRleF09dHJhbnNmb3Jtc1tpbmRleF0uY2FsbCh0aGlzLGFyZ3NbaW5kZXhdKTtyZXR1cm4gYXBwbHkoZnVuYyx0aGlzLGFyZ3MpfSl9KTt2YXIgcGFydGlhbD1iYXNlUmVzdChmdW5jdGlvbihmdW5jLHBhcnRpYWxzKXt2YXIgaG9sZGVycz1yZXBsYWNlSG9sZGVycyhwYXJ0aWFscyxnZXRIb2xkZXIocGFydGlhbCkpO3JldHVybiBjcmVhdGVXcmFwKGZ1bmMsV1JBUF9QQVJUSUFMX0ZMQUcsCnVuZGVmaW5lZCxwYXJ0aWFscyxob2xkZXJzKX0pO3ZhciBwYXJ0aWFsUmlnaHQ9YmFzZVJlc3QoZnVuY3Rpb24oZnVuYyxwYXJ0aWFscyl7dmFyIGhvbGRlcnM9cmVwbGFjZUhvbGRlcnMocGFydGlhbHMsZ2V0SG9sZGVyKHBhcnRpYWxSaWdodCkpO3JldHVybiBjcmVhdGVXcmFwKGZ1bmMsV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcsdW5kZWZpbmVkLHBhcnRpYWxzLGhvbGRlcnMpfSk7dmFyIHJlYXJnPWZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmMsaW5kZXhlcyl7cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxXUkFQX1JFQVJHX0ZMQUcsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsaW5kZXhlcyl9KTtmdW5jdGlvbiByZXN0KGZ1bmMsc3RhcnQpe2lmKHR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtzdGFydD1zdGFydD09PXVuZGVmaW5lZD9zdGFydDp0b0ludGVnZXIoc3RhcnQpO3JldHVybiBiYXNlUmVzdChmdW5jLHN0YXJ0KX0KZnVuY3Rpb24gc3ByZWFkKGZ1bmMsc3RhcnQpe2lmKHR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtzdGFydD1zdGFydD09bnVsbD8wOm5hdGl2ZU1heCh0b0ludGVnZXIoc3RhcnQpLDApO3JldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKXt2YXIgYXJyYXk9YXJnc1tzdGFydF0sb3RoZXJBcmdzPWNhc3RTbGljZShhcmdzLDAsc3RhcnQpO2lmKGFycmF5KWFycmF5UHVzaChvdGhlckFyZ3MsYXJyYXkpO3JldHVybiBhcHBseShmdW5jLHRoaXMsb3RoZXJBcmdzKX0pfWZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsd2FpdCxvcHRpb25zKXt2YXIgbGVhZGluZz10cnVlLHRyYWlsaW5nPXRydWU7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO2lmKGlzT2JqZWN0KG9wdGlvbnMpKXtsZWFkaW5nPSJsZWFkaW5nImluIG9wdGlvbnM/ISFvcHRpb25zLmxlYWRpbmc6CmxlYWRpbmc7dHJhaWxpbmc9InRyYWlsaW5nImluIG9wdGlvbnM/ISFvcHRpb25zLnRyYWlsaW5nOnRyYWlsaW5nfXJldHVybiBkZWJvdW5jZShmdW5jLHdhaXQseyJsZWFkaW5nIjpsZWFkaW5nLCJtYXhXYWl0Ijp3YWl0LCJ0cmFpbGluZyI6dHJhaWxpbmd9KX1mdW5jdGlvbiB1bmFyeShmdW5jKXtyZXR1cm4gYXJ5KGZ1bmMsMSl9ZnVuY3Rpb24gd3JhcCh2YWx1ZSx3cmFwcGVyKXtyZXR1cm4gcGFydGlhbChjYXN0RnVuY3Rpb24od3JhcHBlciksdmFsdWUpfWZ1bmN0aW9uIGNhc3RBcnJheSgpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciB2YWx1ZT1hcmd1bWVudHNbMF07cmV0dXJuIGlzQXJyYXkodmFsdWUpP3ZhbHVlOlt2YWx1ZV19ZnVuY3Rpb24gY2xvbmUodmFsdWUpe3JldHVybiBiYXNlQ2xvbmUodmFsdWUsQ0xPTkVfU1lNQk9MU19GTEFHKX1mdW5jdGlvbiBjbG9uZVdpdGgodmFsdWUsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09CiJmdW5jdGlvbiI/Y3VzdG9taXplcjp1bmRlZmluZWQ7cmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSxDTE9ORV9TWU1CT0xTX0ZMQUcsY3VzdG9taXplcil9ZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlKXtyZXR1cm4gYmFzZUNsb25lKHZhbHVlLENMT05FX0RFRVBfRkxBR3xDTE9ORV9TWU1CT0xTX0ZMQUcpfWZ1bmN0aW9uIGNsb25lRGVlcFdpdGgodmFsdWUsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09ImZ1bmN0aW9uIj9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gYmFzZUNsb25lKHZhbHVlLENMT05FX0RFRVBfRkxBR3xDTE9ORV9TWU1CT0xTX0ZMQUcsY3VzdG9taXplcil9ZnVuY3Rpb24gY29uZm9ybXNUbyhvYmplY3Qsc291cmNlKXtyZXR1cm4gc291cmNlPT1udWxsfHxiYXNlQ29uZm9ybXNUbyhvYmplY3Qsc291cmNlLGtleXMoc291cmNlKSl9ZnVuY3Rpb24gZXEodmFsdWUsb3RoZXIpe3JldHVybiB2YWx1ZT09PW90aGVyfHx2YWx1ZSE9PXZhbHVlJiYKb3RoZXIhPT1vdGhlcn12YXIgZ3Q9Y3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihiYXNlR3QpO3ZhciBndGU9Y3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihmdW5jdGlvbih2YWx1ZSxvdGhlcil7cmV0dXJuIHZhbHVlPj1vdGhlcn0pO3ZhciBpc0FyZ3VtZW50cz1iYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9iYXNlSXNBcmd1bWVudHM6ZnVuY3Rpb24odmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCJjYWxsZWUiKSYmIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsImNhbGxlZSIpfTt2YXIgaXNBcnJheT1BcnJheS5pc0FycmF5O3ZhciBpc0FycmF5QnVmZmVyPW5vZGVJc0FycmF5QnVmZmVyP2Jhc2VVbmFyeShub2RlSXNBcnJheUJ1ZmZlcik6YmFzZUlzQXJyYXlCdWZmZXI7ZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpe3JldHVybiB2YWx1ZSE9bnVsbCYmaXNMZW5ndGgodmFsdWUubGVuZ3RoKSYmCiFpc0Z1bmN0aW9uKHZhbHVlKX1mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmlzQXJyYXlMaWtlKHZhbHVlKX1mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpe3JldHVybiB2YWx1ZT09PXRydWV8fHZhbHVlPT09ZmFsc2V8fGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1ib29sVGFnfXZhciBpc0J1ZmZlcj1uYXRpdmVJc0J1ZmZlcnx8c3R1YkZhbHNlO3ZhciBpc0RhdGU9bm9kZUlzRGF0ZT9iYXNlVW5hcnkobm9kZUlzRGF0ZSk6YmFzZUlzRGF0ZTtmdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZ2YWx1ZS5ub2RlVHlwZT09PTEmJiFpc1BsYWluT2JqZWN0KHZhbHVlKX1mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKXtpZih2YWx1ZT09bnVsbClyZXR1cm4gdHJ1ZTtpZihpc0FycmF5TGlrZSh2YWx1ZSkmJihpc0FycmF5KHZhbHVlKXx8dHlwZW9mIHZhbHVlPT0KInN0cmluZyJ8fHR5cGVvZiB2YWx1ZS5zcGxpY2U9PSJmdW5jdGlvbiJ8fGlzQnVmZmVyKHZhbHVlKXx8aXNUeXBlZEFycmF5KHZhbHVlKXx8aXNBcmd1bWVudHModmFsdWUpKSlyZXR1cm4hdmFsdWUubGVuZ3RoO3ZhciB0YWc9Z2V0VGFnKHZhbHVlKTtpZih0YWc9PW1hcFRhZ3x8dGFnPT1zZXRUYWcpcmV0dXJuIXZhbHVlLnNpemU7aWYoaXNQcm90b3R5cGUodmFsdWUpKXJldHVybiFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO2Zvcih2YXIga2V5IGluIHZhbHVlKWlmKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsa2V5KSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWV9ZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSxvdGhlcil7cmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLG90aGVyKX1mdW5jdGlvbiBpc0VxdWFsV2l0aCh2YWx1ZSxvdGhlcixjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT0iZnVuY3Rpb24iP2N1c3RvbWl6ZXI6dW5kZWZpbmVkO3ZhciByZXN1bHQ9CmN1c3RvbWl6ZXI/Y3VzdG9taXplcih2YWx1ZSxvdGhlcik6dW5kZWZpbmVkO3JldHVybiByZXN1bHQ9PT11bmRlZmluZWQ/YmFzZUlzRXF1YWwodmFsdWUsb3RoZXIsdW5kZWZpbmVkLGN1c3RvbWl6ZXIpOiEhcmVzdWx0fWZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpe2lmKCFpc09iamVjdExpa2UodmFsdWUpKXJldHVybiBmYWxzZTt2YXIgdGFnPWJhc2VHZXRUYWcodmFsdWUpO3JldHVybiB0YWc9PWVycm9yVGFnfHx0YWc9PWRvbUV4Y1RhZ3x8dHlwZW9mIHZhbHVlLm1lc3NhZ2U9PSJzdHJpbmciJiZ0eXBlb2YgdmFsdWUubmFtZT09InN0cmluZyImJiFpc1BsYWluT2JqZWN0KHZhbHVlKX1mdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09Im51bWJlciImJm5hdGl2ZUlzRmluaXRlKHZhbHVlKX1mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKXtpZighaXNPYmplY3QodmFsdWUpKXJldHVybiBmYWxzZTt2YXIgdGFnPWJhc2VHZXRUYWcodmFsdWUpO3JldHVybiB0YWc9PQpmdW5jVGFnfHx0YWc9PWdlblRhZ3x8dGFnPT1hc3luY1RhZ3x8dGFnPT1wcm94eVRhZ31mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWU9PSJudW1iZXIiJiZ2YWx1ZT09dG9JbnRlZ2VyKHZhbHVlKX1mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09Im51bWJlciImJnZhbHVlPi0xJiZ2YWx1ZSUxPT0wJiZ2YWx1ZTw9TUFYX1NBRkVfSU5URUdFUn1mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSl7dmFyIHR5cGU9dHlwZW9mIHZhbHVlO3JldHVybiB2YWx1ZSE9bnVsbCYmKHR5cGU9PSJvYmplY3QifHx0eXBlPT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpe3JldHVybiB2YWx1ZSE9bnVsbCYmdHlwZW9mIHZhbHVlPT0ib2JqZWN0In12YXIgaXNNYXA9bm9kZUlzTWFwP2Jhc2VVbmFyeShub2RlSXNNYXApOmJhc2VJc01hcDtmdW5jdGlvbiBpc01hdGNoKG9iamVjdCxzb3VyY2Upe3JldHVybiBvYmplY3Q9PT0Kc291cmNlfHxiYXNlSXNNYXRjaChvYmplY3Qsc291cmNlLGdldE1hdGNoRGF0YShzb3VyY2UpKX1mdW5jdGlvbiBpc01hdGNoV2l0aChvYmplY3Qsc291cmNlLGN1c3RvbWl6ZXIpe2N1c3RvbWl6ZXI9dHlwZW9mIGN1c3RvbWl6ZXI9PSJmdW5jdGlvbiI/Y3VzdG9taXplcjp1bmRlZmluZWQ7cmV0dXJuIGJhc2VJc01hdGNoKG9iamVjdCxzb3VyY2UsZ2V0TWF0Y2hEYXRhKHNvdXJjZSksY3VzdG9taXplcil9ZnVuY3Rpb24gaXNOYU4odmFsdWUpe3JldHVybiBpc051bWJlcih2YWx1ZSkmJnZhbHVlIT0rdmFsdWV9ZnVuY3Rpb24gaXNOYXRpdmUodmFsdWUpe2lmKGlzTWFza2FibGUodmFsdWUpKXRocm93IG5ldyBFcnJvcihDT1JFX0VSUk9SX1RFWFQpO3JldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpfWZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSl7cmV0dXJuIHZhbHVlPT09bnVsbH1mdW5jdGlvbiBpc05pbCh2YWx1ZSl7cmV0dXJuIHZhbHVlPT1udWxsfWZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlPT0KIm51bWJlciJ8fGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1udW1iZXJUYWd9ZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSl7aWYoIWlzT2JqZWN0TGlrZSh2YWx1ZSl8fGJhc2VHZXRUYWcodmFsdWUpIT1vYmplY3RUYWcpcmV0dXJuIGZhbHNlO3ZhciBwcm90bz1nZXRQcm90b3R5cGUodmFsdWUpO2lmKHByb3RvPT09bnVsbClyZXR1cm4gdHJ1ZTt2YXIgQ3Rvcj1oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCJjb25zdHJ1Y3RvciIpJiZwcm90by5jb25zdHJ1Y3RvcjtyZXR1cm4gdHlwZW9mIEN0b3I9PSJmdW5jdGlvbiImJkN0b3IgaW5zdGFuY2VvZiBDdG9yJiZmdW5jVG9TdHJpbmcuY2FsbChDdG9yKT09b2JqZWN0Q3RvclN0cmluZ312YXIgaXNSZWdFeHA9bm9kZUlzUmVnRXhwP2Jhc2VVbmFyeShub2RlSXNSZWdFeHApOmJhc2VJc1JlZ0V4cDtmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKHZhbHVlKXtyZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSYmdmFsdWU+PQotTUFYX1NBRkVfSU5URUdFUiYmdmFsdWU8PU1BWF9TQUZFX0lOVEVHRVJ9dmFyIGlzU2V0PW5vZGVJc1NldD9iYXNlVW5hcnkobm9kZUlzU2V0KTpiYXNlSXNTZXQ7ZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWU9PSJzdHJpbmcifHwhaXNBcnJheSh2YWx1ZSkmJmlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1zdHJpbmdUYWd9ZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWU9PSJzeW1ib2wifHxpc09iamVjdExpa2UodmFsdWUpJiZiYXNlR2V0VGFnKHZhbHVlKT09c3ltYm9sVGFnfXZhciBpc1R5cGVkQXJyYXk9bm9kZUlzVHlwZWRBcnJheT9iYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSk6YmFzZUlzVHlwZWRBcnJheTtmdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSl7cmV0dXJuIHZhbHVlPT09dW5kZWZpbmVkfWZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJgpnZXRUYWcodmFsdWUpPT13ZWFrTWFwVGFnfWZ1bmN0aW9uIGlzV2Vha1NldCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT13ZWFrU2V0VGFnfXZhciBsdD1jcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VMdCk7dmFyIGx0ZT1jcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLG90aGVyKXtyZXR1cm4gdmFsdWU8PW90aGVyfSk7ZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSl7aWYoIXZhbHVlKXJldHVybltdO2lmKGlzQXJyYXlMaWtlKHZhbHVlKSlyZXR1cm4gaXNTdHJpbmcodmFsdWUpP3N0cmluZ1RvQXJyYXkodmFsdWUpOmNvcHlBcnJheSh2YWx1ZSk7aWYoc3ltSXRlcmF0b3ImJnZhbHVlW3N5bUl0ZXJhdG9yXSlyZXR1cm4gaXRlcmF0b3JUb0FycmF5KHZhbHVlW3N5bUl0ZXJhdG9yXSgpKTt2YXIgdGFnPWdldFRhZyh2YWx1ZSksZnVuYz10YWc9PW1hcFRhZz9tYXBUb0FycmF5OnRhZz09c2V0VGFnP3NldFRvQXJyYXk6CnZhbHVlcztyZXR1cm4gZnVuYyh2YWx1ZSl9ZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpe2lmKCF2YWx1ZSlyZXR1cm4gdmFsdWU9PT0wP3ZhbHVlOjA7dmFsdWU9dG9OdW1iZXIodmFsdWUpO2lmKHZhbHVlPT09SU5GSU5JVFl8fHZhbHVlPT09LUlORklOSVRZKXt2YXIgc2lnbj12YWx1ZTwwPy0xOjE7cmV0dXJuIHNpZ24qTUFYX0lOVEVHRVJ9cmV0dXJuIHZhbHVlPT09dmFsdWU/dmFsdWU6MH1mdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpe3ZhciByZXN1bHQ9dG9GaW5pdGUodmFsdWUpLHJlbWFpbmRlcj1yZXN1bHQlMTtyZXR1cm4gcmVzdWx0PT09cmVzdWx0P3JlbWFpbmRlcj9yZXN1bHQtcmVtYWluZGVyOnJlc3VsdDowfWZ1bmN0aW9uIHRvTGVuZ3RoKHZhbHVlKXtyZXR1cm4gdmFsdWU/YmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksMCxNQVhfQVJSQVlfTEVOR1RIKTowfWZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKXtpZih0eXBlb2YgdmFsdWU9PSJudW1iZXIiKXJldHVybiB2YWx1ZTsKaWYoaXNTeW1ib2wodmFsdWUpKXJldHVybiBOQU47aWYoaXNPYmplY3QodmFsdWUpKXt2YXIgb3RoZXI9dHlwZW9mIHZhbHVlLnZhbHVlT2Y9PSJmdW5jdGlvbiI/dmFsdWUudmFsdWVPZigpOnZhbHVlO3ZhbHVlPWlzT2JqZWN0KG90aGVyKT9vdGhlcisiIjpvdGhlcn1pZih0eXBlb2YgdmFsdWUhPSJzdHJpbmciKXJldHVybiB2YWx1ZT09PTA/dmFsdWU6K3ZhbHVlO3ZhbHVlPXZhbHVlLnJlcGxhY2UocmVUcmltLCIiKTt2YXIgaXNCaW5hcnk9cmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtyZXR1cm4gaXNCaW5hcnl8fHJlSXNPY3RhbC50ZXN0KHZhbHVlKT9mcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksaXNCaW5hcnk/Mjo4KTpyZUlzQmFkSGV4LnRlc3QodmFsdWUpP05BTjordmFsdWV9ZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSl7cmV0dXJuIGNvcHlPYmplY3QodmFsdWUsa2V5c0luKHZhbHVlKSl9ZnVuY3Rpb24gdG9TYWZlSW50ZWdlcih2YWx1ZSl7cmV0dXJuIHZhbHVlPwpiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwtTUFYX1NBRkVfSU5URUdFUixNQVhfU0FGRV9JTlRFR0VSKTp2YWx1ZT09PTA/dmFsdWU6MH1mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSl7cmV0dXJuIHZhbHVlPT1udWxsPyIiOmJhc2VUb1N0cmluZyh2YWx1ZSl9dmFyIGFzc2lnbj1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3Qsc291cmNlKXtpZihpc1Byb3RvdHlwZShzb3VyY2UpfHxpc0FycmF5TGlrZShzb3VyY2UpKXtjb3B5T2JqZWN0KHNvdXJjZSxrZXlzKHNvdXJjZSksb2JqZWN0KTtyZXR1cm59Zm9yKHZhciBrZXkgaW4gc291cmNlKWlmKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLGtleSkpYXNzaWduVmFsdWUob2JqZWN0LGtleSxzb3VyY2Vba2V5XSl9KTt2YXIgYXNzaWduSW49Y3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZSl7Y29weU9iamVjdChzb3VyY2Usa2V5c0luKHNvdXJjZSksb2JqZWN0KX0pO3ZhciBhc3NpZ25JbldpdGg9Y3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LApzb3VyY2Usc3JjSW5kZXgsY3VzdG9taXplcil7Y29weU9iamVjdChzb3VyY2Usa2V5c0luKHNvdXJjZSksb2JqZWN0LGN1c3RvbWl6ZXIpfSk7dmFyIGFzc2lnbldpdGg9Y3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZSxzcmNJbmRleCxjdXN0b21pemVyKXtjb3B5T2JqZWN0KHNvdXJjZSxrZXlzKHNvdXJjZSksb2JqZWN0LGN1c3RvbWl6ZXIpfSk7dmFyIGF0PWZsYXRSZXN0KGJhc2VBdCk7ZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSxwcm9wZXJ0aWVzKXt2YXIgcmVzdWx0PWJhc2VDcmVhdGUocHJvdG90eXBlKTtyZXR1cm4gcHJvcGVydGllcz09bnVsbD9yZXN1bHQ6YmFzZUFzc2lnbihyZXN1bHQscHJvcGVydGllcyl9dmFyIGRlZmF1bHRzPWJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCxzb3VyY2VzKXtvYmplY3Q9T2JqZWN0KG9iamVjdCk7dmFyIGluZGV4PS0xO3ZhciBsZW5ndGg9c291cmNlcy5sZW5ndGg7dmFyIGd1YXJkPWxlbmd0aD4yP3NvdXJjZXNbMl06CnVuZGVmaW5lZDtpZihndWFyZCYmaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSxzb3VyY2VzWzFdLGd1YXJkKSlsZW5ndGg9MTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHNvdXJjZT1zb3VyY2VzW2luZGV4XTt2YXIgcHJvcHM9a2V5c0luKHNvdXJjZSk7dmFyIHByb3BzSW5kZXg9LTE7dmFyIHByb3BzTGVuZ3RoPXByb3BzLmxlbmd0aDt3aGlsZSgrK3Byb3BzSW5kZXg8cHJvcHNMZW5ndGgpe3ZhciBrZXk9cHJvcHNbcHJvcHNJbmRleF07dmFyIHZhbHVlPW9iamVjdFtrZXldO2lmKHZhbHVlPT09dW5kZWZpbmVkfHxlcSh2YWx1ZSxvYmplY3RQcm90b1trZXldKSYmIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkpb2JqZWN0W2tleV09c291cmNlW2tleV19fXJldHVybiBvYmplY3R9KTt2YXIgZGVmYXVsdHNEZWVwPWJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe2FyZ3MucHVzaCh1bmRlZmluZWQsY3VzdG9tRGVmYXVsdHNNZXJnZSk7cmV0dXJuIGFwcGx5KG1lcmdlV2l0aCwKdW5kZWZpbmVkLGFyZ3MpfSk7ZnVuY3Rpb24gZmluZEtleShvYmplY3QscHJlZGljYXRlKXtyZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSxiYXNlRm9yT3duKX1mdW5jdGlvbiBmaW5kTGFzdEtleShvYmplY3QscHJlZGljYXRlKXtyZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSxiYXNlRm9yT3duUmlnaHQpfWZ1bmN0aW9uIGZvckluKG9iamVjdCxpdGVyYXRlZSl7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZUZvcihvYmplY3QsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMyksa2V5c0luKX1mdW5jdGlvbiBmb3JJblJpZ2h0KG9iamVjdCxpdGVyYXRlZSl7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZUZvclJpZ2h0KG9iamVjdCxnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSxrZXlzSW4pfWZ1bmN0aW9uIGZvck93bihvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3JPd24ob2JqZWN0LApnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSl9ZnVuY3Rpb24gZm9yT3duUmlnaHQob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gb2JqZWN0JiZiYXNlRm9yT3duUmlnaHQob2JqZWN0LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpKX1mdW5jdGlvbiBmdW5jdGlvbnMob2JqZWN0KXtyZXR1cm4gb2JqZWN0PT1udWxsP1tdOmJhc2VGdW5jdGlvbnMob2JqZWN0LGtleXMob2JqZWN0KSl9ZnVuY3Rpb24gZnVuY3Rpb25zSW4ob2JqZWN0KXtyZXR1cm4gb2JqZWN0PT1udWxsP1tdOmJhc2VGdW5jdGlvbnMob2JqZWN0LGtleXNJbihvYmplY3QpKX1mdW5jdGlvbiBnZXQob2JqZWN0LHBhdGgsZGVmYXVsdFZhbHVlKXt2YXIgcmVzdWx0PW9iamVjdD09bnVsbD91bmRlZmluZWQ6YmFzZUdldChvYmplY3QscGF0aCk7cmV0dXJuIHJlc3VsdD09PXVuZGVmaW5lZD9kZWZhdWx0VmFsdWU6cmVzdWx0fWZ1bmN0aW9uIGhhcyhvYmplY3QscGF0aCl7cmV0dXJuIG9iamVjdCE9bnVsbCYmaGFzUGF0aChvYmplY3QsCnBhdGgsYmFzZUhhcyl9ZnVuY3Rpb24gaGFzSW4ob2JqZWN0LHBhdGgpe3JldHVybiBvYmplY3QhPW51bGwmJmhhc1BhdGgob2JqZWN0LHBhdGgsYmFzZUhhc0luKX12YXIgaW52ZXJ0PWNyZWF0ZUludmVydGVyKGZ1bmN0aW9uKHJlc3VsdCx2YWx1ZSxrZXkpe2lmKHZhbHVlIT1udWxsJiZ0eXBlb2YgdmFsdWUudG9TdHJpbmchPSJmdW5jdGlvbiIpdmFsdWU9bmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7cmVzdWx0W3ZhbHVlXT1rZXl9LGNvbnN0YW50KGlkZW50aXR5KSk7dmFyIGludmVydEJ5PWNyZWF0ZUludmVydGVyKGZ1bmN0aW9uKHJlc3VsdCx2YWx1ZSxrZXkpe2lmKHZhbHVlIT1udWxsJiZ0eXBlb2YgdmFsdWUudG9TdHJpbmchPSJmdW5jdGlvbiIpdmFsdWU9bmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7aWYoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsdmFsdWUpKXJlc3VsdFt2YWx1ZV0ucHVzaChrZXkpO2Vsc2UgcmVzdWx0W3ZhbHVlXT1ba2V5XX0sCmdldEl0ZXJhdGVlKTt2YXIgaW52b2tlPWJhc2VSZXN0KGJhc2VJbnZva2UpO2Z1bmN0aW9uIGtleXMob2JqZWN0KXtyZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KT9hcnJheUxpa2VLZXlzKG9iamVjdCk6YmFzZUtleXMob2JqZWN0KX1mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KXtyZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KT9hcnJheUxpa2VLZXlzKG9iamVjdCx0cnVlKTpiYXNlS2V5c0luKG9iamVjdCl9ZnVuY3Rpb24gbWFwS2V5cyhvYmplY3QsaXRlcmF0ZWUpe3ZhciByZXN1bHQ9e307aXRlcmF0ZWU9Z2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMyk7YmFzZUZvck93bihvYmplY3QsZnVuY3Rpb24odmFsdWUsa2V5LG9iamVjdCl7YmFzZUFzc2lnblZhbHVlKHJlc3VsdCxpdGVyYXRlZSh2YWx1ZSxrZXksb2JqZWN0KSx2YWx1ZSl9KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsaXRlcmF0ZWUpe3ZhciByZXN1bHQ9e307aXRlcmF0ZWU9Z2V0SXRlcmF0ZWUoaXRlcmF0ZWUsCjMpO2Jhc2VGb3JPd24ob2JqZWN0LGZ1bmN0aW9uKHZhbHVlLGtleSxvYmplY3Qpe2Jhc2VBc3NpZ25WYWx1ZShyZXN1bHQsa2V5LGl0ZXJhdGVlKHZhbHVlLGtleSxvYmplY3QpKX0pO3JldHVybiByZXN1bHR9dmFyIG1lcmdlPWNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCxzb3VyY2Usc3JjSW5kZXgpe2Jhc2VNZXJnZShvYmplY3Qsc291cmNlLHNyY0luZGV4KX0pO3ZhciBtZXJnZVdpdGg9Y3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZSxzcmNJbmRleCxjdXN0b21pemVyKXtiYXNlTWVyZ2Uob2JqZWN0LHNvdXJjZSxzcmNJbmRleCxjdXN0b21pemVyKX0pO3ZhciBvbWl0PWZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCxwYXRocyl7dmFyIHJlc3VsdD17fTtpZihvYmplY3Q9PW51bGwpcmV0dXJuIHJlc3VsdDt2YXIgaXNEZWVwPWZhbHNlO3BhdGhzPWFycmF5TWFwKHBhdGhzLGZ1bmN0aW9uKHBhdGgpe3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO2lzRGVlcHx8Cihpc0RlZXA9cGF0aC5sZW5ndGg+MSk7cmV0dXJuIHBhdGh9KTtjb3B5T2JqZWN0KG9iamVjdCxnZXRBbGxLZXlzSW4ob2JqZWN0KSxyZXN1bHQpO2lmKGlzRGVlcClyZXN1bHQ9YmFzZUNsb25lKHJlc3VsdCxDTE9ORV9ERUVQX0ZMQUd8Q0xPTkVfRkxBVF9GTEFHfENMT05FX1NZTUJPTFNfRkxBRyxjdXN0b21PbWl0Q2xvbmUpO3ZhciBsZW5ndGg9cGF0aHMubGVuZ3RoO3doaWxlKGxlbmd0aC0tKWJhc2VVbnNldChyZXN1bHQscGF0aHNbbGVuZ3RoXSk7cmV0dXJuIHJlc3VsdH0pO2Z1bmN0aW9uIG9taXRCeShvYmplY3QscHJlZGljYXRlKXtyZXR1cm4gcGlja0J5KG9iamVjdCxuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlKSkpfXZhciBwaWNrPWZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCxwYXRocyl7cmV0dXJuIG9iamVjdD09bnVsbD97fTpiYXNlUGljayhvYmplY3QscGF0aHMpfSk7ZnVuY3Rpb24gcGlja0J5KG9iamVjdCxwcmVkaWNhdGUpe2lmKG9iamVjdD09bnVsbClyZXR1cm57fTsKdmFyIHByb3BzPWFycmF5TWFwKGdldEFsbEtleXNJbihvYmplY3QpLGZ1bmN0aW9uKHByb3Ape3JldHVybltwcm9wXX0pO3ByZWRpY2F0ZT1nZXRJdGVyYXRlZShwcmVkaWNhdGUpO3JldHVybiBiYXNlUGlja0J5KG9iamVjdCxwcm9wcyxmdW5jdGlvbih2YWx1ZSxwYXRoKXtyZXR1cm4gcHJlZGljYXRlKHZhbHVlLHBhdGhbMF0pfSl9ZnVuY3Rpb24gcmVzdWx0KG9iamVjdCxwYXRoLGRlZmF1bHRWYWx1ZSl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7dmFyIGluZGV4PS0xLGxlbmd0aD1wYXRoLmxlbmd0aDtpZighbGVuZ3RoKXtsZW5ndGg9MTtvYmplY3Q9dW5kZWZpbmVkfXdoaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9b2JqZWN0PT1udWxsP3VuZGVmaW5lZDpvYmplY3RbdG9LZXkocGF0aFtpbmRleF0pXTtpZih2YWx1ZT09PXVuZGVmaW5lZCl7aW5kZXg9bGVuZ3RoO3ZhbHVlPWRlZmF1bHRWYWx1ZX1vYmplY3Q9aXNGdW5jdGlvbih2YWx1ZSk/dmFsdWUuY2FsbChvYmplY3QpOgp2YWx1ZX1yZXR1cm4gb2JqZWN0fWZ1bmN0aW9uIHNldChvYmplY3QscGF0aCx2YWx1ZSl7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVNldChvYmplY3QscGF0aCx2YWx1ZSl9ZnVuY3Rpb24gc2V0V2l0aChvYmplY3QscGF0aCx2YWx1ZSxjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT0iZnVuY3Rpb24iP2N1c3RvbWl6ZXI6dW5kZWZpbmVkO3JldHVybiBvYmplY3Q9PW51bGw/b2JqZWN0OmJhc2VTZXQob2JqZWN0LHBhdGgsdmFsdWUsY3VzdG9taXplcil9dmFyIHRvUGFpcnM9Y3JlYXRlVG9QYWlycyhrZXlzKTt2YXIgdG9QYWlyc0luPWNyZWF0ZVRvUGFpcnMoa2V5c0luKTtmdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXt2YXIgaXNBcnI9aXNBcnJheShvYmplY3QpLGlzQXJyTGlrZT1pc0Fycnx8aXNCdWZmZXIob2JqZWN0KXx8aXNUeXBlZEFycmF5KG9iamVjdCk7aXRlcmF0ZWU9Z2V0SXRlcmF0ZWUoaXRlcmF0ZWUsCjQpO2lmKGFjY3VtdWxhdG9yPT1udWxsKXt2YXIgQ3Rvcj1vYmplY3QmJm9iamVjdC5jb25zdHJ1Y3RvcjtpZihpc0Fyckxpa2UpYWNjdW11bGF0b3I9aXNBcnI/bmV3IEN0b3I6W107ZWxzZSBpZihpc09iamVjdChvYmplY3QpKWFjY3VtdWxhdG9yPWlzRnVuY3Rpb24oQ3Rvcik/YmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSk6e307ZWxzZSBhY2N1bXVsYXRvcj17fX0oaXNBcnJMaWtlP2FycmF5RWFjaDpiYXNlRm9yT3duKShvYmplY3QsZnVuY3Rpb24odmFsdWUsaW5kZXgsb2JqZWN0KXtyZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsdmFsdWUsaW5kZXgsb2JqZWN0KX0pO3JldHVybiBhY2N1bXVsYXRvcn1mdW5jdGlvbiB1bnNldChvYmplY3QscGF0aCl7cmV0dXJuIG9iamVjdD09bnVsbD90cnVlOmJhc2VVbnNldChvYmplY3QscGF0aCl9ZnVuY3Rpb24gdXBkYXRlKG9iamVjdCxwYXRoLHVwZGF0ZXIpe3JldHVybiBvYmplY3Q9PW51bGw/b2JqZWN0OmJhc2VVcGRhdGUob2JqZWN0LApwYXRoLGNhc3RGdW5jdGlvbih1cGRhdGVyKSl9ZnVuY3Rpb24gdXBkYXRlV2l0aChvYmplY3QscGF0aCx1cGRhdGVyLGN1c3RvbWl6ZXIpe2N1c3RvbWl6ZXI9dHlwZW9mIGN1c3RvbWl6ZXI9PSJmdW5jdGlvbiI/Y3VzdG9taXplcjp1bmRlZmluZWQ7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVVwZGF0ZShvYmplY3QscGF0aCxjYXN0RnVuY3Rpb24odXBkYXRlciksY3VzdG9taXplcil9ZnVuY3Rpb24gdmFsdWVzKG9iamVjdCl7cmV0dXJuIG9iamVjdD09bnVsbD9bXTpiYXNlVmFsdWVzKG9iamVjdCxrZXlzKG9iamVjdCkpfWZ1bmN0aW9uIHZhbHVlc0luKG9iamVjdCl7cmV0dXJuIG9iamVjdD09bnVsbD9bXTpiYXNlVmFsdWVzKG9iamVjdCxrZXlzSW4ob2JqZWN0KSl9ZnVuY3Rpb24gY2xhbXAobnVtYmVyLGxvd2VyLHVwcGVyKXtpZih1cHBlcj09PXVuZGVmaW5lZCl7dXBwZXI9bG93ZXI7bG93ZXI9dW5kZWZpbmVkfWlmKHVwcGVyIT09dW5kZWZpbmVkKXt1cHBlcj0KdG9OdW1iZXIodXBwZXIpO3VwcGVyPXVwcGVyPT09dXBwZXI/dXBwZXI6MH1pZihsb3dlciE9PXVuZGVmaW5lZCl7bG93ZXI9dG9OdW1iZXIobG93ZXIpO2xvd2VyPWxvd2VyPT09bG93ZXI/bG93ZXI6MH1yZXR1cm4gYmFzZUNsYW1wKHRvTnVtYmVyKG51bWJlciksbG93ZXIsdXBwZXIpfWZ1bmN0aW9uIGluUmFuZ2UobnVtYmVyLHN0YXJ0LGVuZCl7c3RhcnQ9dG9GaW5pdGUoc3RhcnQpO2lmKGVuZD09PXVuZGVmaW5lZCl7ZW5kPXN0YXJ0O3N0YXJ0PTB9ZWxzZSBlbmQ9dG9GaW5pdGUoZW5kKTtudW1iZXI9dG9OdW1iZXIobnVtYmVyKTtyZXR1cm4gYmFzZUluUmFuZ2UobnVtYmVyLHN0YXJ0LGVuZCl9ZnVuY3Rpb24gcmFuZG9tKGxvd2VyLHVwcGVyLGZsb2F0aW5nKXtpZihmbG9hdGluZyYmdHlwZW9mIGZsb2F0aW5nIT0iYm9vbGVhbiImJmlzSXRlcmF0ZWVDYWxsKGxvd2VyLHVwcGVyLGZsb2F0aW5nKSl1cHBlcj1mbG9hdGluZz11bmRlZmluZWQ7aWYoZmxvYXRpbmc9PT11bmRlZmluZWQpaWYodHlwZW9mIHVwcGVyPT0KImJvb2xlYW4iKXtmbG9hdGluZz11cHBlcjt1cHBlcj11bmRlZmluZWR9ZWxzZSBpZih0eXBlb2YgbG93ZXI9PSJib29sZWFuIil7ZmxvYXRpbmc9bG93ZXI7bG93ZXI9dW5kZWZpbmVkfWlmKGxvd2VyPT09dW5kZWZpbmVkJiZ1cHBlcj09PXVuZGVmaW5lZCl7bG93ZXI9MDt1cHBlcj0xfWVsc2V7bG93ZXI9dG9GaW5pdGUobG93ZXIpO2lmKHVwcGVyPT09dW5kZWZpbmVkKXt1cHBlcj1sb3dlcjtsb3dlcj0wfWVsc2UgdXBwZXI9dG9GaW5pdGUodXBwZXIpfWlmKGxvd2VyPnVwcGVyKXt2YXIgdGVtcD1sb3dlcjtsb3dlcj11cHBlcjt1cHBlcj10ZW1wfWlmKGZsb2F0aW5nfHxsb3dlciUxfHx1cHBlciUxKXt2YXIgcmFuZD1uYXRpdmVSYW5kb20oKTtyZXR1cm4gbmF0aXZlTWluKGxvd2VyK3JhbmQqKHVwcGVyLWxvd2VyK2ZyZWVQYXJzZUZsb2F0KCIxZS0iKygocmFuZCsiIikubGVuZ3RoLTEpKSksdXBwZXIpfXJldHVybiBiYXNlUmFuZG9tKGxvd2VyLHVwcGVyKX12YXIgY2FtZWxDYXNlPQpjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCx3b3JkLGluZGV4KXt3b3JkPXdvcmQudG9Mb3dlckNhc2UoKTtyZXR1cm4gcmVzdWx0KyhpbmRleD9jYXBpdGFsaXplKHdvcmQpOndvcmQpfSk7ZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpe3JldHVybiB1cHBlckZpcnN0KHRvU3RyaW5nKHN0cmluZykudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gZGVidXJyKHN0cmluZyl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7cmV0dXJuIHN0cmluZyYmc3RyaW5nLnJlcGxhY2UocmVMYXRpbixkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssIiIpfWZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZyx0YXJnZXQscG9zaXRpb24pe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3RhcmdldD1iYXNlVG9TdHJpbmcodGFyZ2V0KTt2YXIgbGVuZ3RoPXN0cmluZy5sZW5ndGg7cG9zaXRpb249cG9zaXRpb249PT11bmRlZmluZWQ/bGVuZ3RoOmJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLAowLGxlbmd0aCk7dmFyIGVuZD1wb3NpdGlvbjtwb3NpdGlvbi09dGFyZ2V0Lmxlbmd0aDtyZXR1cm4gcG9zaXRpb24+PTAmJnN0cmluZy5zbGljZShwb3NpdGlvbixlbmQpPT10YXJnZXR9ZnVuY3Rpb24gZXNjYXBlKHN0cmluZyl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7cmV0dXJuIHN0cmluZyYmcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKT9zdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsZXNjYXBlSHRtbENoYXIpOnN0cmluZ31mdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtyZXR1cm4gc3RyaW5nJiZyZUhhc1JlZ0V4cENoYXIudGVzdChzdHJpbmcpP3N0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwiXFwkXHgyNiIpOnN0cmluZ312YXIga2ViYWJDYXNlPWNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LHdvcmQsaW5kZXgpe3JldHVybiByZXN1bHQrKGluZGV4PyItIjoiIikrd29yZC50b0xvd2VyQ2FzZSgpfSk7CnZhciBsb3dlckNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/IiAiOiIiKSt3b3JkLnRvTG93ZXJDYXNlKCl9KTt2YXIgbG93ZXJGaXJzdD1jcmVhdGVDYXNlRmlyc3QoInRvTG93ZXJDYXNlIik7ZnVuY3Rpb24gcGFkKHN0cmluZyxsZW5ndGgsY2hhcnMpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO2xlbmd0aD10b0ludGVnZXIobGVuZ3RoKTt2YXIgc3RyTGVuZ3RoPWxlbmd0aD9zdHJpbmdTaXplKHN0cmluZyk6MDtpZighbGVuZ3RofHxzdHJMZW5ndGg+PWxlbmd0aClyZXR1cm4gc3RyaW5nO3ZhciBtaWQ9KGxlbmd0aC1zdHJMZW5ndGgpLzI7cmV0dXJuIGNyZWF0ZVBhZGRpbmcobmF0aXZlRmxvb3IobWlkKSxjaGFycykrc3RyaW5nK2NyZWF0ZVBhZGRpbmcobmF0aXZlQ2VpbChtaWQpLGNoYXJzKX1mdW5jdGlvbiBwYWRFbmQoc3RyaW5nLGxlbmd0aCxjaGFycyl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7Cmxlbmd0aD10b0ludGVnZXIobGVuZ3RoKTt2YXIgc3RyTGVuZ3RoPWxlbmd0aD9zdHJpbmdTaXplKHN0cmluZyk6MDtyZXR1cm4gbGVuZ3RoJiZzdHJMZW5ndGg8bGVuZ3RoP3N0cmluZytjcmVhdGVQYWRkaW5nKGxlbmd0aC1zdHJMZW5ndGgsY2hhcnMpOnN0cmluZ31mdW5jdGlvbiBwYWRTdGFydChzdHJpbmcsbGVuZ3RoLGNoYXJzKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtsZW5ndGg9dG9JbnRlZ2VyKGxlbmd0aCk7dmFyIHN0ckxlbmd0aD1sZW5ndGg/c3RyaW5nU2l6ZShzdHJpbmcpOjA7cmV0dXJuIGxlbmd0aCYmc3RyTGVuZ3RoPGxlbmd0aD9jcmVhdGVQYWRkaW5nKGxlbmd0aC1zdHJMZW5ndGgsY2hhcnMpK3N0cmluZzpzdHJpbmd9ZnVuY3Rpb24gcGFyc2VJbnQoc3RyaW5nLHJhZGl4LGd1YXJkKXtpZihndWFyZHx8cmFkaXg9PW51bGwpcmFkaXg9MDtlbHNlIGlmKHJhZGl4KXJhZGl4PStyYWRpeDtyZXR1cm4gbmF0aXZlUGFyc2VJbnQodG9TdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LAoiIikscmFkaXh8fDApfWZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsbixndWFyZCl7aWYoZ3VhcmQ/aXNJdGVyYXRlZUNhbGwoc3RyaW5nLG4sZ3VhcmQpOm49PT11bmRlZmluZWQpbj0xO2Vsc2Ugbj10b0ludGVnZXIobik7cmV0dXJuIGJhc2VSZXBlYXQodG9TdHJpbmcoc3RyaW5nKSxuKX1mdW5jdGlvbiByZXBsYWNlKCl7dmFyIGFyZ3M9YXJndW1lbnRzLHN0cmluZz10b1N0cmluZyhhcmdzWzBdKTtyZXR1cm4gYXJncy5sZW5ndGg8Mz9zdHJpbmc6c3RyaW5nLnJlcGxhY2UoYXJnc1sxXSxhcmdzWzJdKX12YXIgc25ha2VDYXNlPWNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LHdvcmQsaW5kZXgpe3JldHVybiByZXN1bHQrKGluZGV4PyJfIjoiIikrd29yZC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gc3BsaXQoc3RyaW5nLHNlcGFyYXRvcixsaW1pdCl7aWYobGltaXQmJnR5cGVvZiBsaW1pdCE9Im51bWJlciImJmlzSXRlcmF0ZWVDYWxsKHN0cmluZyxzZXBhcmF0b3IsbGltaXQpKXNlcGFyYXRvcj0KbGltaXQ9dW5kZWZpbmVkO2xpbWl0PWxpbWl0PT09dW5kZWZpbmVkP01BWF9BUlJBWV9MRU5HVEg6bGltaXQ+Pj4wO2lmKCFsaW1pdClyZXR1cm5bXTtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJih0eXBlb2Ygc2VwYXJhdG9yPT0ic3RyaW5nInx8c2VwYXJhdG9yIT1udWxsJiYhaXNSZWdFeHAoc2VwYXJhdG9yKSkpe3NlcGFyYXRvcj1iYXNlVG9TdHJpbmcoc2VwYXJhdG9yKTtpZighc2VwYXJhdG9yJiZoYXNVbmljb2RlKHN0cmluZykpcmV0dXJuIGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHN0cmluZyksMCxsaW1pdCl9cmV0dXJuIHN0cmluZy5zcGxpdChzZXBhcmF0b3IsbGltaXQpfXZhciBzdGFydENhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/IiAiOiIiKSt1cHBlckZpcnN0KHdvcmQpfSk7ZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsdGFyZ2V0LHBvc2l0aW9uKXtzdHJpbmc9CnRvU3RyaW5nKHN0cmluZyk7cG9zaXRpb249cG9zaXRpb249PW51bGw/MDpiYXNlQ2xhbXAodG9JbnRlZ2VyKHBvc2l0aW9uKSwwLHN0cmluZy5sZW5ndGgpO3RhcmdldD1iYXNlVG9TdHJpbmcodGFyZ2V0KTtyZXR1cm4gc3RyaW5nLnNsaWNlKHBvc2l0aW9uLHBvc2l0aW9uK3RhcmdldC5sZW5ndGgpPT10YXJnZXR9ZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nLG9wdGlvbnMsZ3VhcmQpe3ZhciBzZXR0aW5ncz1sb2Rhc2gudGVtcGxhdGVTZXR0aW5ncztpZihndWFyZCYmaXNJdGVyYXRlZUNhbGwoc3RyaW5nLG9wdGlvbnMsZ3VhcmQpKW9wdGlvbnM9dW5kZWZpbmVkO3N0cmluZz10b1N0cmluZyhzdHJpbmcpO29wdGlvbnM9YXNzaWduSW5XaXRoKHt9LG9wdGlvbnMsc2V0dGluZ3MsY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7dmFyIGltcG9ydHM9YXNzaWduSW5XaXRoKHt9LG9wdGlvbnMuaW1wb3J0cyxzZXR0aW5ncy5pbXBvcnRzLGN1c3RvbURlZmF1bHRzQXNzaWduSW4pLGltcG9ydHNLZXlzPQprZXlzKGltcG9ydHMpLGltcG9ydHNWYWx1ZXM9YmFzZVZhbHVlcyhpbXBvcnRzLGltcG9ydHNLZXlzKTt2YXIgaXNFc2NhcGluZyxpc0V2YWx1YXRpbmcsaW5kZXg9MCxpbnRlcnBvbGF0ZT1vcHRpb25zLmludGVycG9sYXRlfHxyZU5vTWF0Y2gsc291cmNlPSJfX3AgK1x4M2QgJyI7dmFyIHJlRGVsaW1pdGVycz1SZWdFeHAoKG9wdGlvbnMuZXNjYXBlfHxyZU5vTWF0Y2gpLnNvdXJjZSsifCIraW50ZXJwb2xhdGUuc291cmNlKyJ8IisoaW50ZXJwb2xhdGU9PT1yZUludGVycG9sYXRlP3JlRXNUZW1wbGF0ZTpyZU5vTWF0Y2gpLnNvdXJjZSsifCIrKG9wdGlvbnMuZXZhbHVhdGV8fHJlTm9NYXRjaCkuc291cmNlKyJ8JCIsImciKTt2YXIgc291cmNlVVJMPSIvLyMgc291cmNlVVJMXHgzZCIrKCJzb3VyY2VVUkwiaW4gb3B0aW9ucz9vcHRpb25zLnNvdXJjZVVSTDoibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK3RlbXBsYXRlQ291bnRlcisiXSIpKyJcbiI7c3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLApmdW5jdGlvbihtYXRjaCxlc2NhcGVWYWx1ZSxpbnRlcnBvbGF0ZVZhbHVlLGVzVGVtcGxhdGVWYWx1ZSxldmFsdWF0ZVZhbHVlLG9mZnNldCl7aW50ZXJwb2xhdGVWYWx1ZXx8KGludGVycG9sYXRlVmFsdWU9ZXNUZW1wbGF0ZVZhbHVlKTtzb3VyY2UrPXN0cmluZy5zbGljZShpbmRleCxvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsZXNjYXBlU3RyaW5nQ2hhcik7aWYoZXNjYXBlVmFsdWUpe2lzRXNjYXBpbmc9dHJ1ZTtzb3VyY2UrPSInICtcbl9fZSgiK2VzY2FwZVZhbHVlKyIpICtcbicifWlmKGV2YWx1YXRlVmFsdWUpe2lzRXZhbHVhdGluZz10cnVlO3NvdXJjZSs9Iic7XG4iK2V2YWx1YXRlVmFsdWUrIjtcbl9fcCArXHgzZCAnIn1pZihpbnRlcnBvbGF0ZVZhbHVlKXNvdXJjZSs9IicgK1xuKChfX3QgXHgzZCAoIitpbnRlcnBvbGF0ZVZhbHVlKyIpKSBceDNkXHgzZCBudWxsID8gJycgOiBfX3QpICtcbiciO2luZGV4PW9mZnNldCttYXRjaC5sZW5ndGg7cmV0dXJuIG1hdGNofSk7CnNvdXJjZSs9Iic7XG4iO3ZhciB2YXJpYWJsZT1vcHRpb25zLnZhcmlhYmxlO2lmKCF2YXJpYWJsZSlzb3VyY2U9IndpdGggKG9iaikge1xuIitzb3VyY2UrIlxufVxuIjtzb3VyY2U9KGlzRXZhbHVhdGluZz9zb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywiIik6c291cmNlKS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsIiQxIikucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsIiQxOyIpO3NvdXJjZT0iZnVuY3Rpb24oIisodmFyaWFibGV8fCJvYmoiKSsiKSB7XG4iKyh2YXJpYWJsZT8iIjoib2JqIHx8IChvYmogXHgzZCB7fSk7XG4iKSsidmFyIF9fdCwgX19wIFx4M2QgJyciKyhpc0VzY2FwaW5nPyIsIF9fZSBceDNkIF8uZXNjYXBlIjoiIikrKGlzRXZhbHVhdGluZz8iLCBfX2ogXHgzZCBBcnJheS5wcm90b3R5cGUuam9pbjtcbiIrImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgK1x4M2QgX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxuIjoiO1xuIikrc291cmNlKwoicmV0dXJuIF9fcFxufSI7dmFyIHJlc3VsdD1hdHRlbXB0KGZ1bmN0aW9uKCl7cmV0dXJuIEZ1bmN0aW9uKGltcG9ydHNLZXlzLHNvdXJjZVVSTCsicmV0dXJuICIrc291cmNlKS5hcHBseSh1bmRlZmluZWQsaW1wb3J0c1ZhbHVlcyl9KTtyZXN1bHQuc291cmNlPXNvdXJjZTtpZihpc0Vycm9yKHJlc3VsdCkpdGhyb3cgcmVzdWx0O3JldHVybiByZXN1bHR9ZnVuY3Rpb24gdG9Mb3dlcih2YWx1ZSl7cmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHRvVXBwZXIodmFsdWUpe3JldHVybiB0b1N0cmluZyh2YWx1ZSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiB0cmltKHN0cmluZyxjaGFycyxndWFyZCl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7aWYoc3RyaW5nJiYoZ3VhcmR8fGNoYXJzPT09dW5kZWZpbmVkKSlyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVUcmltLCIiKTtpZighc3RyaW5nfHwhKGNoYXJzPWJhc2VUb1N0cmluZyhjaGFycykpKXJldHVybiBzdHJpbmc7CnZhciBzdHJTeW1ib2xzPXN0cmluZ1RvQXJyYXkoc3RyaW5nKSxjaHJTeW1ib2xzPXN0cmluZ1RvQXJyYXkoY2hhcnMpLHN0YXJ0PWNoYXJzU3RhcnRJbmRleChzdHJTeW1ib2xzLGNoclN5bWJvbHMpLGVuZD1jaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsY2hyU3ltYm9scykrMTtyZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsc3RhcnQsZW5kKS5qb2luKCIiKX1mdW5jdGlvbiB0cmltRW5kKHN0cmluZyxjaGFycyxndWFyZCl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7aWYoc3RyaW5nJiYoZ3VhcmR8fGNoYXJzPT09dW5kZWZpbmVkKSlyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVUcmltRW5kLCIiKTtpZighc3RyaW5nfHwhKGNoYXJzPWJhc2VUb1N0cmluZyhjaGFycykpKXJldHVybiBzdHJpbmc7dmFyIHN0clN5bWJvbHM9c3RyaW5nVG9BcnJheShzdHJpbmcpLGVuZD1jaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsc3RyaW5nVG9BcnJheShjaGFycykpKzE7cmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLAowLGVuZCkuam9pbigiIil9ZnVuY3Rpb24gdHJpbVN0YXJ0KHN0cmluZyxjaGFycyxndWFyZCl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7aWYoc3RyaW5nJiYoZ3VhcmR8fGNoYXJzPT09dW5kZWZpbmVkKSlyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVUcmltU3RhcnQsIiIpO2lmKCFzdHJpbmd8fCEoY2hhcnM9YmFzZVRvU3RyaW5nKGNoYXJzKSkpcmV0dXJuIHN0cmluZzt2YXIgc3RyU3ltYm9scz1zdHJpbmdUb0FycmF5KHN0cmluZyksc3RhcnQ9Y2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsc3RyaW5nVG9BcnJheShjaGFycykpO3JldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scyxzdGFydCkuam9pbigiIil9ZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLG9wdGlvbnMpe3ZhciBsZW5ndGg9REVGQVVMVF9UUlVOQ19MRU5HVEgsb21pc3Npb249REVGQVVMVF9UUlVOQ19PTUlTU0lPTjtpZihpc09iamVjdChvcHRpb25zKSl7dmFyIHNlcGFyYXRvcj0ic2VwYXJhdG9yImluIG9wdGlvbnM/Cm9wdGlvbnMuc2VwYXJhdG9yOnNlcGFyYXRvcjtsZW5ndGg9Imxlbmd0aCJpbiBvcHRpb25zP3RvSW50ZWdlcihvcHRpb25zLmxlbmd0aCk6bGVuZ3RoO29taXNzaW9uPSJvbWlzc2lvbiJpbiBvcHRpb25zP2Jhc2VUb1N0cmluZyhvcHRpb25zLm9taXNzaW9uKTpvbWlzc2lvbn1zdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTt2YXIgc3RyTGVuZ3RoPXN0cmluZy5sZW5ndGg7aWYoaGFzVW5pY29kZShzdHJpbmcpKXt2YXIgc3RyU3ltYm9scz1zdHJpbmdUb0FycmF5KHN0cmluZyk7c3RyTGVuZ3RoPXN0clN5bWJvbHMubGVuZ3RofWlmKGxlbmd0aD49c3RyTGVuZ3RoKXJldHVybiBzdHJpbmc7dmFyIGVuZD1sZW5ndGgtc3RyaW5nU2l6ZShvbWlzc2lvbik7aWYoZW5kPDEpcmV0dXJuIG9taXNzaW9uO3ZhciByZXN1bHQ9c3RyU3ltYm9scz9jYXN0U2xpY2Uoc3RyU3ltYm9scywwLGVuZCkuam9pbigiIik6c3RyaW5nLnNsaWNlKDAsZW5kKTtpZihzZXBhcmF0b3I9PT11bmRlZmluZWQpcmV0dXJuIHJlc3VsdCsKb21pc3Npb247aWYoc3RyU3ltYm9scyllbmQrPXJlc3VsdC5sZW5ndGgtZW5kO2lmKGlzUmVnRXhwKHNlcGFyYXRvcikpe2lmKHN0cmluZy5zbGljZShlbmQpLnNlYXJjaChzZXBhcmF0b3IpKXt2YXIgbWF0Y2gsc3Vic3RyaW5nPXJlc3VsdDtpZighc2VwYXJhdG9yLmdsb2JhbClzZXBhcmF0b3I9UmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsdG9TdHJpbmcocmVGbGFncy5leGVjKHNlcGFyYXRvcikpKyJnIik7c2VwYXJhdG9yLmxhc3RJbmRleD0wO3doaWxlKG1hdGNoPXNlcGFyYXRvci5leGVjKHN1YnN0cmluZykpdmFyIG5ld0VuZD1tYXRjaC5pbmRleDtyZXN1bHQ9cmVzdWx0LnNsaWNlKDAsbmV3RW5kPT09dW5kZWZpbmVkP2VuZDpuZXdFbmQpfX1lbHNlIGlmKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLGVuZCkhPWVuZCl7dmFyIGluZGV4PXJlc3VsdC5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO2lmKGluZGV4Pi0xKXJlc3VsdD1yZXN1bHQuc2xpY2UoMCxpbmRleCl9cmV0dXJuIHJlc3VsdCsKb21pc3Npb259ZnVuY3Rpb24gdW5lc2NhcGUoc3RyaW5nKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtyZXR1cm4gc3RyaW5nJiZyZUhhc0VzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKT9zdHJpbmcucmVwbGFjZShyZUVzY2FwZWRIdG1sLHVuZXNjYXBlSHRtbENoYXIpOnN0cmluZ312YXIgdXBwZXJDYXNlPWNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LHdvcmQsaW5kZXgpe3JldHVybiByZXN1bHQrKGluZGV4PyIgIjoiIikrd29yZC50b1VwcGVyQ2FzZSgpfSk7dmFyIHVwcGVyRmlyc3Q9Y3JlYXRlQ2FzZUZpcnN0KCJ0b1VwcGVyQ2FzZSIpO2Z1bmN0aW9uIHdvcmRzKHN0cmluZyxwYXR0ZXJuLGd1YXJkKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtwYXR0ZXJuPWd1YXJkP3VuZGVmaW5lZDpwYXR0ZXJuO2lmKHBhdHRlcm49PT11bmRlZmluZWQpcmV0dXJuIGhhc1VuaWNvZGVXb3JkKHN0cmluZyk/dW5pY29kZVdvcmRzKHN0cmluZyk6YXNjaWlXb3JkcyhzdHJpbmcpO3JldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybil8fApbXX12YXIgYXR0ZW1wdD1iYXNlUmVzdChmdW5jdGlvbihmdW5jLGFyZ3Mpe3RyeXtyZXR1cm4gYXBwbHkoZnVuYyx1bmRlZmluZWQsYXJncyl9Y2F0Y2goZSl7cmV0dXJuIGlzRXJyb3IoZSk/ZTpuZXcgRXJyb3IoZSl9fSk7dmFyIGJpbmRBbGw9ZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LG1ldGhvZE5hbWVzKXthcnJheUVhY2gobWV0aG9kTmFtZXMsZnVuY3Rpb24oa2V5KXtrZXk9dG9LZXkoa2V5KTtiYXNlQXNzaWduVmFsdWUob2JqZWN0LGtleSxiaW5kKG9iamVjdFtrZXldLG9iamVjdCkpfSk7cmV0dXJuIG9iamVjdH0pO2Z1bmN0aW9uIGNvbmQocGFpcnMpe3ZhciBsZW5ndGg9cGFpcnM9PW51bGw/MDpwYWlycy5sZW5ndGgsdG9JdGVyYXRlZT1nZXRJdGVyYXRlZSgpO3BhaXJzPSFsZW5ndGg/W106YXJyYXlNYXAocGFpcnMsZnVuY3Rpb24ocGFpcil7aWYodHlwZW9mIHBhaXJbMV0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3JldHVyblt0b0l0ZXJhdGVlKHBhaXJbMF0pLApwYWlyWzFdXX0pO3JldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKXt2YXIgaW5kZXg9LTE7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBwYWlyPXBhaXJzW2luZGV4XTtpZihhcHBseShwYWlyWzBdLHRoaXMsYXJncykpcmV0dXJuIGFwcGx5KHBhaXJbMV0sdGhpcyxhcmdzKX19KX1mdW5jdGlvbiBjb25mb3Jtcyhzb3VyY2Upe3JldHVybiBiYXNlQ29uZm9ybXMoYmFzZUNsb25lKHNvdXJjZSxDTE9ORV9ERUVQX0ZMQUcpKX1mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZhbHVlfX1mdW5jdGlvbiBkZWZhdWx0VG8odmFsdWUsZGVmYXVsdFZhbHVlKXtyZXR1cm4gdmFsdWU9PW51bGx8fHZhbHVlIT09dmFsdWU/ZGVmYXVsdFZhbHVlOnZhbHVlfXZhciBmbG93PWNyZWF0ZUZsb3coKTt2YXIgZmxvd1JpZ2h0PWNyZWF0ZUZsb3codHJ1ZSk7ZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpe3JldHVybiB2YWx1ZX1mdW5jdGlvbiBpdGVyYXRlZShmdW5jKXtyZXR1cm4gYmFzZUl0ZXJhdGVlKHR5cGVvZiBmdW5jPT0KImZ1bmN0aW9uIj9mdW5jOmJhc2VDbG9uZShmdW5jLENMT05FX0RFRVBfRkxBRykpfWZ1bmN0aW9uIG1hdGNoZXMoc291cmNlKXtyZXR1cm4gYmFzZU1hdGNoZXMoYmFzZUNsb25lKHNvdXJjZSxDTE9ORV9ERUVQX0ZMQUcpKX1mdW5jdGlvbiBtYXRjaGVzUHJvcGVydHkocGF0aCxzcmNWYWx1ZSl7cmV0dXJuIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCxiYXNlQ2xvbmUoc3JjVmFsdWUsQ0xPTkVfREVFUF9GTEFHKSl9dmFyIG1ldGhvZD1iYXNlUmVzdChmdW5jdGlvbihwYXRoLGFyZ3Mpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBiYXNlSW52b2tlKG9iamVjdCxwYXRoLGFyZ3MpfX0pO3ZhciBtZXRob2RPZj1iYXNlUmVzdChmdW5jdGlvbihvYmplY3QsYXJncyl7cmV0dXJuIGZ1bmN0aW9uKHBhdGgpe3JldHVybiBiYXNlSW52b2tlKG9iamVjdCxwYXRoLGFyZ3MpfX0pO2Z1bmN0aW9uIG1peGluKG9iamVjdCxzb3VyY2Usb3B0aW9ucyl7dmFyIHByb3BzPWtleXMoc291cmNlKSwKbWV0aG9kTmFtZXM9YmFzZUZ1bmN0aW9ucyhzb3VyY2UscHJvcHMpO2lmKG9wdGlvbnM9PW51bGwmJiEoaXNPYmplY3Qoc291cmNlKSYmKG1ldGhvZE5hbWVzLmxlbmd0aHx8IXByb3BzLmxlbmd0aCkpKXtvcHRpb25zPXNvdXJjZTtzb3VyY2U9b2JqZWN0O29iamVjdD10aGlzO21ldGhvZE5hbWVzPWJhc2VGdW5jdGlvbnMoc291cmNlLGtleXMoc291cmNlKSl9dmFyIGNoYWluPSEoaXNPYmplY3Qob3B0aW9ucykmJiJjaGFpbiJpbiBvcHRpb25zKXx8ISFvcHRpb25zLmNoYWluLGlzRnVuYz1pc0Z1bmN0aW9uKG9iamVjdCk7YXJyYXlFYWNoKG1ldGhvZE5hbWVzLGZ1bmN0aW9uKG1ldGhvZE5hbWUpe3ZhciBmdW5jPXNvdXJjZVttZXRob2ROYW1lXTtvYmplY3RbbWV0aG9kTmFtZV09ZnVuYztpZihpc0Z1bmMpb2JqZWN0LnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbigpe3ZhciBjaGFpbkFsbD10aGlzLl9fY2hhaW5fXztpZihjaGFpbnx8Y2hhaW5BbGwpe3ZhciByZXN1bHQ9Cm9iamVjdCh0aGlzLl9fd3JhcHBlZF9fKSxhY3Rpb25zPXJlc3VsdC5fX2FjdGlvbnNfXz1jb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7YWN0aW9ucy5wdXNoKHsiZnVuYyI6ZnVuYywiYXJncyI6YXJndW1lbnRzLCJ0aGlzQXJnIjpvYmplY3R9KTtyZXN1bHQuX19jaGFpbl9fPWNoYWluQWxsO3JldHVybiByZXN1bHR9cmV0dXJuIGZ1bmMuYXBwbHkob2JqZWN0LGFycmF5UHVzaChbdGhpcy52YWx1ZSgpXSxhcmd1bWVudHMpKX19KTtyZXR1cm4gb2JqZWN0fWZ1bmN0aW9uIG5vQ29uZmxpY3QoKXtpZihyb290Ll89PT10aGlzKXJvb3QuXz1vbGREYXNoO3JldHVybiB0aGlzfWZ1bmN0aW9uIG5vb3AoKXt9ZnVuY3Rpb24gbnRoQXJnKG4pe249dG9JbnRlZ2VyKG4pO3JldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKXtyZXR1cm4gYmFzZU50aChhcmdzLG4pfSl9dmFyIG92ZXI9Y3JlYXRlT3ZlcihhcnJheU1hcCk7dmFyIG92ZXJFdmVyeT1jcmVhdGVPdmVyKGFycmF5RXZlcnkpOwp2YXIgb3ZlclNvbWU9Y3JlYXRlT3ZlcihhcnJheVNvbWUpO2Z1bmN0aW9uIHByb3BlcnR5KHBhdGgpe3JldHVybiBpc0tleShwYXRoKT9iYXNlUHJvcGVydHkodG9LZXkocGF0aCkpOmJhc2VQcm9wZXJ0eURlZXAocGF0aCl9ZnVuY3Rpb24gcHJvcGVydHlPZihvYmplY3Qpe3JldHVybiBmdW5jdGlvbihwYXRoKXtyZXR1cm4gb2JqZWN0PT1udWxsP3VuZGVmaW5lZDpiYXNlR2V0KG9iamVjdCxwYXRoKX19dmFyIHJhbmdlPWNyZWF0ZVJhbmdlKCk7dmFyIHJhbmdlUmlnaHQ9Y3JlYXRlUmFuZ2UodHJ1ZSk7ZnVuY3Rpb24gc3R1YkFycmF5KCl7cmV0dXJuW119ZnVuY3Rpb24gc3R1YkZhbHNlKCl7cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIHN0dWJPYmplY3QoKXtyZXR1cm57fX1mdW5jdGlvbiBzdHViU3RyaW5nKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gc3R1YlRydWUoKXtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiB0aW1lcyhuLGl0ZXJhdGVlKXtuPXRvSW50ZWdlcihuKTtpZihuPDF8fG4+TUFYX1NBRkVfSU5URUdFUilyZXR1cm5bXTsKdmFyIGluZGV4PU1BWF9BUlJBWV9MRU5HVEgsbGVuZ3RoPW5hdGl2ZU1pbihuLE1BWF9BUlJBWV9MRU5HVEgpO2l0ZXJhdGVlPWdldEl0ZXJhdGVlKGl0ZXJhdGVlKTtuLT1NQVhfQVJSQVlfTEVOR1RIO3ZhciByZXN1bHQ9YmFzZVRpbWVzKGxlbmd0aCxpdGVyYXRlZSk7d2hpbGUoKytpbmRleDxuKWl0ZXJhdGVlKGluZGV4KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSl7aWYoaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGFycmF5TWFwKHZhbHVlLHRvS2V5KTtyZXR1cm4gaXNTeW1ib2wodmFsdWUpP1t2YWx1ZV06Y29weUFycmF5KHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpKX1mdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpe3ZhciBpZD0rK2lkQ291bnRlcjtyZXR1cm4gdG9TdHJpbmcocHJlZml4KStpZH12YXIgYWRkPWNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24oYXVnZW5kLGFkZGVuZCl7cmV0dXJuIGF1Z2VuZCthZGRlbmR9LDApO3ZhciBjZWlsPWNyZWF0ZVJvdW5kKCJjZWlsIik7CnZhciBkaXZpZGU9Y3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihkaXZpZGVuZCxkaXZpc29yKXtyZXR1cm4gZGl2aWRlbmQvZGl2aXNvcn0sMSk7dmFyIGZsb29yPWNyZWF0ZVJvdW5kKCJmbG9vciIpO2Z1bmN0aW9uIG1heChhcnJheSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZUV4dHJlbXVtKGFycmF5LGlkZW50aXR5LGJhc2VHdCk6dW5kZWZpbmVkfWZ1bmN0aW9uIG1heEJ5KGFycmF5LGl0ZXJhdGVlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlRXh0cmVtdW0oYXJyYXksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMiksYmFzZUd0KTp1bmRlZmluZWR9ZnVuY3Rpb24gbWVhbihhcnJheSl7cmV0dXJuIGJhc2VNZWFuKGFycmF5LGlkZW50aXR5KX1mdW5jdGlvbiBtZWFuQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBiYXNlTWVhbihhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSl9ZnVuY3Rpb24gbWluKGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD8KYmFzZUV4dHJlbXVtKGFycmF5LGlkZW50aXR5LGJhc2VMdCk6dW5kZWZpbmVkfWZ1bmN0aW9uIG1pbkJ5KGFycmF5LGl0ZXJhdGVlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlRXh0cmVtdW0oYXJyYXksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMiksYmFzZUx0KTp1bmRlZmluZWR9dmFyIG11bHRpcGx5PWNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obXVsdGlwbGllcixtdWx0aXBsaWNhbmQpe3JldHVybiBtdWx0aXBsaWVyKm11bHRpcGxpY2FuZH0sMSk7dmFyIHJvdW5kPWNyZWF0ZVJvdW5kKCJyb3VuZCIpO3ZhciBzdWJ0cmFjdD1jcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKG1pbnVlbmQsc3VidHJhaGVuZCl7cmV0dXJuIG1pbnVlbmQtc3VidHJhaGVuZH0sMCk7ZnVuY3Rpb24gc3VtKGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlU3VtKGFycmF5LGlkZW50aXR5KTowfWZ1bmN0aW9uIHN1bUJ5KGFycmF5LGl0ZXJhdGVlKXtyZXR1cm4gYXJyYXkmJgphcnJheS5sZW5ndGg/YmFzZVN1bShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk6MH1sb2Rhc2guYWZ0ZXI9YWZ0ZXI7bG9kYXNoLmFyeT1hcnk7bG9kYXNoLmFzc2lnbj1hc3NpZ247bG9kYXNoLmFzc2lnbkluPWFzc2lnbkluO2xvZGFzaC5hc3NpZ25JbldpdGg9YXNzaWduSW5XaXRoO2xvZGFzaC5hc3NpZ25XaXRoPWFzc2lnbldpdGg7bG9kYXNoLmF0PWF0O2xvZGFzaC5iZWZvcmU9YmVmb3JlO2xvZGFzaC5iaW5kPWJpbmQ7bG9kYXNoLmJpbmRBbGw9YmluZEFsbDtsb2Rhc2guYmluZEtleT1iaW5kS2V5O2xvZGFzaC5jYXN0QXJyYXk9Y2FzdEFycmF5O2xvZGFzaC5jaGFpbj1jaGFpbjtsb2Rhc2guY2h1bms9Y2h1bms7bG9kYXNoLmNvbXBhY3Q9Y29tcGFjdDtsb2Rhc2guY29uY2F0PWNvbmNhdDtsb2Rhc2guY29uZD1jb25kO2xvZGFzaC5jb25mb3Jtcz1jb25mb3Jtcztsb2Rhc2guY29uc3RhbnQ9Y29uc3RhbnQ7bG9kYXNoLmNvdW50Qnk9Y291bnRCeTtsb2Rhc2guY3JlYXRlPQpjcmVhdGU7bG9kYXNoLmN1cnJ5PWN1cnJ5O2xvZGFzaC5jdXJyeVJpZ2h0PWN1cnJ5UmlnaHQ7bG9kYXNoLmRlYm91bmNlPWRlYm91bmNlO2xvZGFzaC5kZWZhdWx0cz1kZWZhdWx0cztsb2Rhc2guZGVmYXVsdHNEZWVwPWRlZmF1bHRzRGVlcDtsb2Rhc2guZGVmZXI9ZGVmZXI7bG9kYXNoLmRlbGF5PWRlbGF5O2xvZGFzaC5kaWZmZXJlbmNlPWRpZmZlcmVuY2U7bG9kYXNoLmRpZmZlcmVuY2VCeT1kaWZmZXJlbmNlQnk7bG9kYXNoLmRpZmZlcmVuY2VXaXRoPWRpZmZlcmVuY2VXaXRoO2xvZGFzaC5kcm9wPWRyb3A7bG9kYXNoLmRyb3BSaWdodD1kcm9wUmlnaHQ7bG9kYXNoLmRyb3BSaWdodFdoaWxlPWRyb3BSaWdodFdoaWxlO2xvZGFzaC5kcm9wV2hpbGU9ZHJvcFdoaWxlO2xvZGFzaC5maWxsPWZpbGw7bG9kYXNoLmZpbHRlcj1maWx0ZXI7bG9kYXNoLmZsYXRNYXA9ZmxhdE1hcDtsb2Rhc2guZmxhdE1hcERlZXA9ZmxhdE1hcERlZXA7bG9kYXNoLmZsYXRNYXBEZXB0aD1mbGF0TWFwRGVwdGg7CmxvZGFzaC5mbGF0dGVuPWZsYXR0ZW47bG9kYXNoLmZsYXR0ZW5EZWVwPWZsYXR0ZW5EZWVwO2xvZGFzaC5mbGF0dGVuRGVwdGg9ZmxhdHRlbkRlcHRoO2xvZGFzaC5mbGlwPWZsaXA7bG9kYXNoLmZsb3c9Zmxvdztsb2Rhc2guZmxvd1JpZ2h0PWZsb3dSaWdodDtsb2Rhc2guZnJvbVBhaXJzPWZyb21QYWlycztsb2Rhc2guZnVuY3Rpb25zPWZ1bmN0aW9ucztsb2Rhc2guZnVuY3Rpb25zSW49ZnVuY3Rpb25zSW47bG9kYXNoLmdyb3VwQnk9Z3JvdXBCeTtsb2Rhc2guaW5pdGlhbD1pbml0aWFsO2xvZGFzaC5pbnRlcnNlY3Rpb249aW50ZXJzZWN0aW9uO2xvZGFzaC5pbnRlcnNlY3Rpb25CeT1pbnRlcnNlY3Rpb25CeTtsb2Rhc2guaW50ZXJzZWN0aW9uV2l0aD1pbnRlcnNlY3Rpb25XaXRoO2xvZGFzaC5pbnZlcnQ9aW52ZXJ0O2xvZGFzaC5pbnZlcnRCeT1pbnZlcnRCeTtsb2Rhc2guaW52b2tlTWFwPWludm9rZU1hcDtsb2Rhc2guaXRlcmF0ZWU9aXRlcmF0ZWU7bG9kYXNoLmtleUJ5PQprZXlCeTtsb2Rhc2gua2V5cz1rZXlzO2xvZGFzaC5rZXlzSW49a2V5c0luO2xvZGFzaC5tYXA9bWFwO2xvZGFzaC5tYXBLZXlzPW1hcEtleXM7bG9kYXNoLm1hcFZhbHVlcz1tYXBWYWx1ZXM7bG9kYXNoLm1hdGNoZXM9bWF0Y2hlcztsb2Rhc2gubWF0Y2hlc1Byb3BlcnR5PW1hdGNoZXNQcm9wZXJ0eTtsb2Rhc2gubWVtb2l6ZT1tZW1vaXplO2xvZGFzaC5tZXJnZT1tZXJnZTtsb2Rhc2gubWVyZ2VXaXRoPW1lcmdlV2l0aDtsb2Rhc2gubWV0aG9kPW1ldGhvZDtsb2Rhc2gubWV0aG9kT2Y9bWV0aG9kT2Y7bG9kYXNoLm1peGluPW1peGluO2xvZGFzaC5uZWdhdGU9bmVnYXRlO2xvZGFzaC5udGhBcmc9bnRoQXJnO2xvZGFzaC5vbWl0PW9taXQ7bG9kYXNoLm9taXRCeT1vbWl0Qnk7bG9kYXNoLm9uY2U9b25jZTtsb2Rhc2gub3JkZXJCeT1vcmRlckJ5O2xvZGFzaC5vdmVyPW92ZXI7bG9kYXNoLm92ZXJBcmdzPW92ZXJBcmdzO2xvZGFzaC5vdmVyRXZlcnk9b3ZlckV2ZXJ5O2xvZGFzaC5vdmVyU29tZT0Kb3ZlclNvbWU7bG9kYXNoLnBhcnRpYWw9cGFydGlhbDtsb2Rhc2gucGFydGlhbFJpZ2h0PXBhcnRpYWxSaWdodDtsb2Rhc2gucGFydGl0aW9uPXBhcnRpdGlvbjtsb2Rhc2gucGljaz1waWNrO2xvZGFzaC5waWNrQnk9cGlja0J5O2xvZGFzaC5wcm9wZXJ0eT1wcm9wZXJ0eTtsb2Rhc2gucHJvcGVydHlPZj1wcm9wZXJ0eU9mO2xvZGFzaC5wdWxsPXB1bGw7bG9kYXNoLnB1bGxBbGw9cHVsbEFsbDtsb2Rhc2gucHVsbEFsbEJ5PXB1bGxBbGxCeTtsb2Rhc2gucHVsbEFsbFdpdGg9cHVsbEFsbFdpdGg7bG9kYXNoLnB1bGxBdD1wdWxsQXQ7bG9kYXNoLnJhbmdlPXJhbmdlO2xvZGFzaC5yYW5nZVJpZ2h0PXJhbmdlUmlnaHQ7bG9kYXNoLnJlYXJnPXJlYXJnO2xvZGFzaC5yZWplY3Q9cmVqZWN0O2xvZGFzaC5yZW1vdmU9cmVtb3ZlO2xvZGFzaC5yZXN0PXJlc3Q7bG9kYXNoLnJldmVyc2U9cmV2ZXJzZTtsb2Rhc2guc2FtcGxlU2l6ZT1zYW1wbGVTaXplO2xvZGFzaC5zZXQ9c2V0O2xvZGFzaC5zZXRXaXRoPQpzZXRXaXRoO2xvZGFzaC5zaHVmZmxlPXNodWZmbGU7bG9kYXNoLnNsaWNlPXNsaWNlO2xvZGFzaC5zb3J0Qnk9c29ydEJ5O2xvZGFzaC5zb3J0ZWRVbmlxPXNvcnRlZFVuaXE7bG9kYXNoLnNvcnRlZFVuaXFCeT1zb3J0ZWRVbmlxQnk7bG9kYXNoLnNwbGl0PXNwbGl0O2xvZGFzaC5zcHJlYWQ9c3ByZWFkO2xvZGFzaC50YWlsPXRhaWw7bG9kYXNoLnRha2U9dGFrZTtsb2Rhc2gudGFrZVJpZ2h0PXRha2VSaWdodDtsb2Rhc2gudGFrZVJpZ2h0V2hpbGU9dGFrZVJpZ2h0V2hpbGU7bG9kYXNoLnRha2VXaGlsZT10YWtlV2hpbGU7bG9kYXNoLnRhcD10YXA7bG9kYXNoLnRocm90dGxlPXRocm90dGxlO2xvZGFzaC50aHJ1PXRocnU7bG9kYXNoLnRvQXJyYXk9dG9BcnJheTtsb2Rhc2gudG9QYWlycz10b1BhaXJzO2xvZGFzaC50b1BhaXJzSW49dG9QYWlyc0luO2xvZGFzaC50b1BhdGg9dG9QYXRoO2xvZGFzaC50b1BsYWluT2JqZWN0PXRvUGxhaW5PYmplY3Q7bG9kYXNoLnRyYW5zZm9ybT0KdHJhbnNmb3JtO2xvZGFzaC51bmFyeT11bmFyeTtsb2Rhc2gudW5pb249dW5pb247bG9kYXNoLnVuaW9uQnk9dW5pb25CeTtsb2Rhc2gudW5pb25XaXRoPXVuaW9uV2l0aDtsb2Rhc2gudW5pcT11bmlxO2xvZGFzaC51bmlxQnk9dW5pcUJ5O2xvZGFzaC51bmlxV2l0aD11bmlxV2l0aDtsb2Rhc2gudW5zZXQ9dW5zZXQ7bG9kYXNoLnVuemlwPXVuemlwO2xvZGFzaC51bnppcFdpdGg9dW56aXBXaXRoO2xvZGFzaC51cGRhdGU9dXBkYXRlO2xvZGFzaC51cGRhdGVXaXRoPXVwZGF0ZVdpdGg7bG9kYXNoLnZhbHVlcz12YWx1ZXM7bG9kYXNoLnZhbHVlc0luPXZhbHVlc0luO2xvZGFzaC53aXRob3V0PXdpdGhvdXQ7bG9kYXNoLndvcmRzPXdvcmRzO2xvZGFzaC53cmFwPXdyYXA7bG9kYXNoLnhvcj14b3I7bG9kYXNoLnhvckJ5PXhvckJ5O2xvZGFzaC54b3JXaXRoPXhvcldpdGg7bG9kYXNoLnppcD16aXA7bG9kYXNoLnppcE9iamVjdD16aXBPYmplY3Q7bG9kYXNoLnppcE9iamVjdERlZXA9CnppcE9iamVjdERlZXA7bG9kYXNoLnppcFdpdGg9emlwV2l0aDtsb2Rhc2guZW50cmllcz10b1BhaXJzO2xvZGFzaC5lbnRyaWVzSW49dG9QYWlyc0luO2xvZGFzaC5leHRlbmQ9YXNzaWduSW47bG9kYXNoLmV4dGVuZFdpdGg9YXNzaWduSW5XaXRoO21peGluKGxvZGFzaCxsb2Rhc2gpO2xvZGFzaC5hZGQ9YWRkO2xvZGFzaC5hdHRlbXB0PWF0dGVtcHQ7bG9kYXNoLmNhbWVsQ2FzZT1jYW1lbENhc2U7bG9kYXNoLmNhcGl0YWxpemU9Y2FwaXRhbGl6ZTtsb2Rhc2guY2VpbD1jZWlsO2xvZGFzaC5jbGFtcD1jbGFtcDtsb2Rhc2guY2xvbmU9Y2xvbmU7bG9kYXNoLmNsb25lRGVlcD1jbG9uZURlZXA7bG9kYXNoLmNsb25lRGVlcFdpdGg9Y2xvbmVEZWVwV2l0aDtsb2Rhc2guY2xvbmVXaXRoPWNsb25lV2l0aDtsb2Rhc2guY29uZm9ybXNUbz1jb25mb3Jtc1RvO2xvZGFzaC5kZWJ1cnI9ZGVidXJyO2xvZGFzaC5kZWZhdWx0VG89ZGVmYXVsdFRvO2xvZGFzaC5kaXZpZGU9ZGl2aWRlO2xvZGFzaC5lbmRzV2l0aD0KZW5kc1dpdGg7bG9kYXNoLmVxPWVxO2xvZGFzaC5lc2NhcGU9ZXNjYXBlO2xvZGFzaC5lc2NhcGVSZWdFeHA9ZXNjYXBlUmVnRXhwO2xvZGFzaC5ldmVyeT1ldmVyeTtsb2Rhc2guZmluZD1maW5kO2xvZGFzaC5maW5kSW5kZXg9ZmluZEluZGV4O2xvZGFzaC5maW5kS2V5PWZpbmRLZXk7bG9kYXNoLmZpbmRMYXN0PWZpbmRMYXN0O2xvZGFzaC5maW5kTGFzdEluZGV4PWZpbmRMYXN0SW5kZXg7bG9kYXNoLmZpbmRMYXN0S2V5PWZpbmRMYXN0S2V5O2xvZGFzaC5mbG9vcj1mbG9vcjtsb2Rhc2guZm9yRWFjaD1mb3JFYWNoO2xvZGFzaC5mb3JFYWNoUmlnaHQ9Zm9yRWFjaFJpZ2h0O2xvZGFzaC5mb3JJbj1mb3JJbjtsb2Rhc2guZm9ySW5SaWdodD1mb3JJblJpZ2h0O2xvZGFzaC5mb3JPd249Zm9yT3duO2xvZGFzaC5mb3JPd25SaWdodD1mb3JPd25SaWdodDtsb2Rhc2guZ2V0PWdldDtsb2Rhc2guZ3Q9Z3Q7bG9kYXNoLmd0ZT1ndGU7bG9kYXNoLmhhcz1oYXM7bG9kYXNoLmhhc0luPWhhc0luOwpsb2Rhc2guaGVhZD1oZWFkO2xvZGFzaC5pZGVudGl0eT1pZGVudGl0eTtsb2Rhc2guaW5jbHVkZXM9aW5jbHVkZXM7bG9kYXNoLmluZGV4T2Y9aW5kZXhPZjtsb2Rhc2guaW5SYW5nZT1pblJhbmdlO2xvZGFzaC5pbnZva2U9aW52b2tlO2xvZGFzaC5pc0FyZ3VtZW50cz1pc0FyZ3VtZW50cztsb2Rhc2guaXNBcnJheT1pc0FycmF5O2xvZGFzaC5pc0FycmF5QnVmZmVyPWlzQXJyYXlCdWZmZXI7bG9kYXNoLmlzQXJyYXlMaWtlPWlzQXJyYXlMaWtlO2xvZGFzaC5pc0FycmF5TGlrZU9iamVjdD1pc0FycmF5TGlrZU9iamVjdDtsb2Rhc2guaXNCb29sZWFuPWlzQm9vbGVhbjtsb2Rhc2guaXNCdWZmZXI9aXNCdWZmZXI7bG9kYXNoLmlzRGF0ZT1pc0RhdGU7bG9kYXNoLmlzRWxlbWVudD1pc0VsZW1lbnQ7bG9kYXNoLmlzRW1wdHk9aXNFbXB0eTtsb2Rhc2guaXNFcXVhbD1pc0VxdWFsO2xvZGFzaC5pc0VxdWFsV2l0aD1pc0VxdWFsV2l0aDtsb2Rhc2guaXNFcnJvcj1pc0Vycm9yO2xvZGFzaC5pc0Zpbml0ZT0KaXNGaW5pdGU7bG9kYXNoLmlzRnVuY3Rpb249aXNGdW5jdGlvbjtsb2Rhc2guaXNJbnRlZ2VyPWlzSW50ZWdlcjtsb2Rhc2guaXNMZW5ndGg9aXNMZW5ndGg7bG9kYXNoLmlzTWFwPWlzTWFwO2xvZGFzaC5pc01hdGNoPWlzTWF0Y2g7bG9kYXNoLmlzTWF0Y2hXaXRoPWlzTWF0Y2hXaXRoO2xvZGFzaC5pc05hTj1pc05hTjtsb2Rhc2guaXNOYXRpdmU9aXNOYXRpdmU7bG9kYXNoLmlzTmlsPWlzTmlsO2xvZGFzaC5pc051bGw9aXNOdWxsO2xvZGFzaC5pc051bWJlcj1pc051bWJlcjtsb2Rhc2guaXNPYmplY3Q9aXNPYmplY3Q7bG9kYXNoLmlzT2JqZWN0TGlrZT1pc09iamVjdExpa2U7bG9kYXNoLmlzUGxhaW5PYmplY3Q9aXNQbGFpbk9iamVjdDtsb2Rhc2guaXNSZWdFeHA9aXNSZWdFeHA7bG9kYXNoLmlzU2FmZUludGVnZXI9aXNTYWZlSW50ZWdlcjtsb2Rhc2guaXNTZXQ9aXNTZXQ7bG9kYXNoLmlzU3RyaW5nPWlzU3RyaW5nO2xvZGFzaC5pc1N5bWJvbD1pc1N5bWJvbDtsb2Rhc2guaXNUeXBlZEFycmF5PQppc1R5cGVkQXJyYXk7bG9kYXNoLmlzVW5kZWZpbmVkPWlzVW5kZWZpbmVkO2xvZGFzaC5pc1dlYWtNYXA9aXNXZWFrTWFwO2xvZGFzaC5pc1dlYWtTZXQ9aXNXZWFrU2V0O2xvZGFzaC5qb2luPWpvaW47bG9kYXNoLmtlYmFiQ2FzZT1rZWJhYkNhc2U7bG9kYXNoLmxhc3Q9bGFzdDtsb2Rhc2gubGFzdEluZGV4T2Y9bGFzdEluZGV4T2Y7bG9kYXNoLmxvd2VyQ2FzZT1sb3dlckNhc2U7bG9kYXNoLmxvd2VyRmlyc3Q9bG93ZXJGaXJzdDtsb2Rhc2gubHQ9bHQ7bG9kYXNoLmx0ZT1sdGU7bG9kYXNoLm1heD1tYXg7bG9kYXNoLm1heEJ5PW1heEJ5O2xvZGFzaC5tZWFuPW1lYW47bG9kYXNoLm1lYW5CeT1tZWFuQnk7bG9kYXNoLm1pbj1taW47bG9kYXNoLm1pbkJ5PW1pbkJ5O2xvZGFzaC5zdHViQXJyYXk9c3R1YkFycmF5O2xvZGFzaC5zdHViRmFsc2U9c3R1YkZhbHNlO2xvZGFzaC5zdHViT2JqZWN0PXN0dWJPYmplY3Q7bG9kYXNoLnN0dWJTdHJpbmc9c3R1YlN0cmluZztsb2Rhc2guc3R1YlRydWU9CnN0dWJUcnVlO2xvZGFzaC5tdWx0aXBseT1tdWx0aXBseTtsb2Rhc2gubnRoPW50aDtsb2Rhc2gubm9Db25mbGljdD1ub0NvbmZsaWN0O2xvZGFzaC5ub29wPW5vb3A7bG9kYXNoLm5vdz1ub3c7bG9kYXNoLnBhZD1wYWQ7bG9kYXNoLnBhZEVuZD1wYWRFbmQ7bG9kYXNoLnBhZFN0YXJ0PXBhZFN0YXJ0O2xvZGFzaC5wYXJzZUludD1wYXJzZUludDtsb2Rhc2gucmFuZG9tPXJhbmRvbTtsb2Rhc2gucmVkdWNlPXJlZHVjZTtsb2Rhc2gucmVkdWNlUmlnaHQ9cmVkdWNlUmlnaHQ7bG9kYXNoLnJlcGVhdD1yZXBlYXQ7bG9kYXNoLnJlcGxhY2U9cmVwbGFjZTtsb2Rhc2gucmVzdWx0PXJlc3VsdDtsb2Rhc2gucm91bmQ9cm91bmQ7bG9kYXNoLnJ1bkluQ29udGV4dD1ydW5JbkNvbnRleHQ7bG9kYXNoLnNhbXBsZT1zYW1wbGU7bG9kYXNoLnNpemU9c2l6ZTtsb2Rhc2guc25ha2VDYXNlPXNuYWtlQ2FzZTtsb2Rhc2guc29tZT1zb21lO2xvZGFzaC5zb3J0ZWRJbmRleD1zb3J0ZWRJbmRleDtsb2Rhc2guc29ydGVkSW5kZXhCeT0Kc29ydGVkSW5kZXhCeTtsb2Rhc2guc29ydGVkSW5kZXhPZj1zb3J0ZWRJbmRleE9mO2xvZGFzaC5zb3J0ZWRMYXN0SW5kZXg9c29ydGVkTGFzdEluZGV4O2xvZGFzaC5zb3J0ZWRMYXN0SW5kZXhCeT1zb3J0ZWRMYXN0SW5kZXhCeTtsb2Rhc2guc29ydGVkTGFzdEluZGV4T2Y9c29ydGVkTGFzdEluZGV4T2Y7bG9kYXNoLnN0YXJ0Q2FzZT1zdGFydENhc2U7bG9kYXNoLnN0YXJ0c1dpdGg9c3RhcnRzV2l0aDtsb2Rhc2guc3VidHJhY3Q9c3VidHJhY3Q7bG9kYXNoLnN1bT1zdW07bG9kYXNoLnN1bUJ5PXN1bUJ5O2xvZGFzaC50ZW1wbGF0ZT10ZW1wbGF0ZTtsb2Rhc2gudGltZXM9dGltZXM7bG9kYXNoLnRvRmluaXRlPXRvRmluaXRlO2xvZGFzaC50b0ludGVnZXI9dG9JbnRlZ2VyO2xvZGFzaC50b0xlbmd0aD10b0xlbmd0aDtsb2Rhc2gudG9Mb3dlcj10b0xvd2VyO2xvZGFzaC50b051bWJlcj10b051bWJlcjtsb2Rhc2gudG9TYWZlSW50ZWdlcj10b1NhZmVJbnRlZ2VyO2xvZGFzaC50b1N0cmluZz0KdG9TdHJpbmc7bG9kYXNoLnRvVXBwZXI9dG9VcHBlcjtsb2Rhc2gudHJpbT10cmltO2xvZGFzaC50cmltRW5kPXRyaW1FbmQ7bG9kYXNoLnRyaW1TdGFydD10cmltU3RhcnQ7bG9kYXNoLnRydW5jYXRlPXRydW5jYXRlO2xvZGFzaC51bmVzY2FwZT11bmVzY2FwZTtsb2Rhc2gudW5pcXVlSWQ9dW5pcXVlSWQ7bG9kYXNoLnVwcGVyQ2FzZT11cHBlckNhc2U7bG9kYXNoLnVwcGVyRmlyc3Q9dXBwZXJGaXJzdDtsb2Rhc2guZWFjaD1mb3JFYWNoO2xvZGFzaC5lYWNoUmlnaHQ9Zm9yRWFjaFJpZ2h0O2xvZGFzaC5maXJzdD1oZWFkO21peGluKGxvZGFzaCxmdW5jdGlvbigpe3ZhciBzb3VyY2U9e307YmFzZUZvck93bihsb2Rhc2gsZnVuY3Rpb24oZnVuYyxtZXRob2ROYW1lKXtpZighaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gucHJvdG90eXBlLG1ldGhvZE5hbWUpKXNvdXJjZVttZXRob2ROYW1lXT1mdW5jfSk7cmV0dXJuIHNvdXJjZX0oKSx7ImNoYWluIjpmYWxzZX0pO2xvZGFzaC5WRVJTSU9OPQpWRVJTSU9OO2FycmF5RWFjaChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG1ldGhvZE5hbWUpe2xvZGFzaFttZXRob2ROYW1lXS5wbGFjZWhvbGRlcj1sb2Rhc2h9KTthcnJheUVhY2goWyJkcm9wIiwidGFrZSJdLGZ1bmN0aW9uKG1ldGhvZE5hbWUsaW5kZXgpe0xhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbihuKXtuPW49PT11bmRlZmluZWQ/MTpuYXRpdmVNYXgodG9JbnRlZ2VyKG4pLDApO3ZhciByZXN1bHQ9dGhpcy5fX2ZpbHRlcmVkX18mJiFpbmRleD9uZXcgTGF6eVdyYXBwZXIodGhpcyk6dGhpcy5jbG9uZSgpO2lmKHJlc3VsdC5fX2ZpbHRlcmVkX18pcmVzdWx0Ll9fdGFrZUNvdW50X189bmF0aXZlTWluKG4scmVzdWx0Ll9fdGFrZUNvdW50X18pO2Vsc2UgcmVzdWx0Ll9fdmlld3NfXy5wdXNoKHsic2l6ZSI6bmF0aXZlTWluKG4sTUFYX0FSUkFZX0xFTkdUSCksCiJ0eXBlIjptZXRob2ROYW1lKyhyZXN1bHQuX19kaXJfXzwwPyJSaWdodCI6IiIpfSk7cmV0dXJuIHJlc3VsdH07TGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUrIlJpZ2h0Il09ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKX19KTthcnJheUVhY2goWyJmaWx0ZXIiLCJtYXAiLCJ0YWtlV2hpbGUiXSxmdW5jdGlvbihtZXRob2ROYW1lLGluZGV4KXt2YXIgdHlwZT1pbmRleCsxLGlzRmlsdGVyPXR5cGU9PUxBWllfRklMVEVSX0ZMQUd8fHR5cGU9PUxBWllfV0hJTEVfRkxBRztMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24oaXRlcmF0ZWUpe3ZhciByZXN1bHQ9dGhpcy5jbG9uZSgpO3Jlc3VsdC5fX2l0ZXJhdGVlc19fLnB1c2goeyJpdGVyYXRlZSI6Z2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMyksInR5cGUiOnR5cGV9KTtyZXN1bHQuX19maWx0ZXJlZF9fPXJlc3VsdC5fX2ZpbHRlcmVkX198fAppc0ZpbHRlcjtyZXR1cm4gcmVzdWx0fX0pO2FycmF5RWFjaChbImhlYWQiLCJsYXN0Il0sZnVuY3Rpb24obWV0aG9kTmFtZSxpbmRleCl7dmFyIHRha2VOYW1lPSJ0YWtlIisoaW5kZXg/IlJpZ2h0IjoiIik7TGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGFrZU5hbWVdKDEpLnZhbHVlKClbMF19fSk7YXJyYXlFYWNoKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtZXRob2ROYW1lLGluZGV4KXt2YXIgZHJvcE5hbWU9ImRyb3AiKyhpbmRleD8iIjoiUmlnaHQiKTtMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IExhenlXcmFwcGVyKHRoaXMpOnRoaXNbZHJvcE5hbWVdKDEpfX0pO0xhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKGlkZW50aXR5KX07TGF6eVdyYXBwZXIucHJvdG90eXBlLmZpbmQ9CmZ1bmN0aW9uKHByZWRpY2F0ZSl7cmV0dXJuIHRoaXMuZmlsdGVyKHByZWRpY2F0ZSkuaGVhZCgpfTtMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24ocHJlZGljYXRlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZChwcmVkaWNhdGUpfTtMYXp5V3JhcHBlci5wcm90b3R5cGUuaW52b2tlTWFwPWJhc2VSZXN0KGZ1bmN0aW9uKHBhdGgsYXJncyl7aWYodHlwZW9mIHBhdGg9PSJmdW5jdGlvbiIpcmV0dXJuIG5ldyBMYXp5V3JhcHBlcih0aGlzKTtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpe3JldHVybiBiYXNlSW52b2tlKHZhbHVlLHBhdGgsYXJncyl9KX0pO0xhenlXcmFwcGVyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24ocHJlZGljYXRlKXtyZXR1cm4gdGhpcy5maWx0ZXIobmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSkpKX07TGF6eVdyYXBwZXIucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHN0YXJ0LGVuZCl7c3RhcnQ9dG9JbnRlZ2VyKHN0YXJ0KTsKdmFyIHJlc3VsdD10aGlzO2lmKHJlc3VsdC5fX2ZpbHRlcmVkX18mJihzdGFydD4wfHxlbmQ8MCkpcmV0dXJuIG5ldyBMYXp5V3JhcHBlcihyZXN1bHQpO2lmKHN0YXJ0PDApcmVzdWx0PXJlc3VsdC50YWtlUmlnaHQoLXN0YXJ0KTtlbHNlIGlmKHN0YXJ0KXJlc3VsdD1yZXN1bHQuZHJvcChzdGFydCk7aWYoZW5kIT09dW5kZWZpbmVkKXtlbmQ9dG9JbnRlZ2VyKGVuZCk7cmVzdWx0PWVuZDwwP3Jlc3VsdC5kcm9wUmlnaHQoLWVuZCk6cmVzdWx0LnRha2UoZW5kLXN0YXJ0KX1yZXR1cm4gcmVzdWx0fTtMYXp5V3JhcHBlci5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24ocHJlZGljYXRlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKHByZWRpY2F0ZSkucmV2ZXJzZSgpfTtMYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UoTUFYX0FSUkFZX0xFTkdUSCl9O2Jhc2VGb3JPd24oTGF6eVdyYXBwZXIucHJvdG90eXBlLApmdW5jdGlvbihmdW5jLG1ldGhvZE5hbWUpe3ZhciBjaGVja0l0ZXJhdGVlPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG1ldGhvZE5hbWUpLGlzVGFrZXI9L14oPzpoZWFkfGxhc3QpJC8udGVzdChtZXRob2ROYW1lKSxsb2Rhc2hGdW5jPWxvZGFzaFtpc1Rha2VyPyJ0YWtlIisobWV0aG9kTmFtZT09Imxhc3QiPyJSaWdodCI6IiIpOm1ldGhvZE5hbWVdLHJldFVud3JhcHBlZD1pc1Rha2VyfHwvXmZpbmQvLnRlc3QobWV0aG9kTmFtZSk7aWYoIWxvZGFzaEZ1bmMpcmV0dXJuO2xvZGFzaC5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24oKXt2YXIgdmFsdWU9dGhpcy5fX3dyYXBwZWRfXyxhcmdzPWlzVGFrZXI/WzFdOmFyZ3VtZW50cyxpc0xhenk9dmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcixpdGVyYXRlZT1hcmdzWzBdLHVzZUxhenk9aXNMYXp5fHxpc0FycmF5KHZhbHVlKTt2YXIgaW50ZXJjZXB0b3I9ZnVuY3Rpb24odmFsdWUpe3ZhciByZXN1bHQ9CmxvZGFzaEZ1bmMuYXBwbHkobG9kYXNoLGFycmF5UHVzaChbdmFsdWVdLGFyZ3MpKTtyZXR1cm4gaXNUYWtlciYmY2hhaW5BbGw/cmVzdWx0WzBdOnJlc3VsdH07aWYodXNlTGF6eSYmY2hlY2tJdGVyYXRlZSYmdHlwZW9mIGl0ZXJhdGVlPT0iZnVuY3Rpb24iJiZpdGVyYXRlZS5sZW5ndGghPTEpaXNMYXp5PXVzZUxhenk9ZmFsc2U7dmFyIGNoYWluQWxsPXRoaXMuX19jaGFpbl9fLGlzSHlicmlkPSEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsaXNVbndyYXBwZWQ9cmV0VW53cmFwcGVkJiYhY2hhaW5BbGwsb25seUxhenk9aXNMYXp5JiYhaXNIeWJyaWQ7aWYoIXJldFVud3JhcHBlZCYmdXNlTGF6eSl7dmFsdWU9b25seUxhenk/dmFsdWU6bmV3IExhenlXcmFwcGVyKHRoaXMpO3ZhciByZXN1bHQ9ZnVuYy5hcHBseSh2YWx1ZSxhcmdzKTtyZXN1bHQuX19hY3Rpb25zX18ucHVzaCh7ImZ1bmMiOnRocnUsImFyZ3MiOltpbnRlcmNlcHRvcl0sInRoaXNBcmciOnVuZGVmaW5lZH0pO3JldHVybiBuZXcgTG9kYXNoV3JhcHBlcihyZXN1bHQsCmNoYWluQWxsKX1pZihpc1Vud3JhcHBlZCYmb25seUxhenkpcmV0dXJuIGZ1bmMuYXBwbHkodGhpcyxhcmdzKTtyZXN1bHQ9dGhpcy50aHJ1KGludGVyY2VwdG9yKTtyZXR1cm4gaXNVbndyYXBwZWQ/aXNUYWtlcj9yZXN1bHQudmFsdWUoKVswXTpyZXN1bHQudmFsdWUoKTpyZXN1bHR9fSk7YXJyYXlFYWNoKFsicG9wIiwicHVzaCIsInNoaWZ0Iiwic29ydCIsInNwbGljZSIsInVuc2hpZnQiXSxmdW5jdGlvbihtZXRob2ROYW1lKXt2YXIgZnVuYz1hcnJheVByb3RvW21ldGhvZE5hbWVdLGNoYWluTmFtZT0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSk/InRhcCI6InRocnUiLHJldFVud3JhcHBlZD0vXig/OnBvcHxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpO2xvZGFzaC5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHM7aWYocmV0VW53cmFwcGVkJiYhdGhpcy5fX2NoYWluX18pe3ZhciB2YWx1ZT10aGlzLnZhbHVlKCk7CnJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpP3ZhbHVlOltdLGFyZ3MpfXJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpe3JldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpP3ZhbHVlOltdLGFyZ3MpfSl9fSk7YmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsZnVuY3Rpb24oZnVuYyxtZXRob2ROYW1lKXt2YXIgbG9kYXNoRnVuYz1sb2Rhc2hbbWV0aG9kTmFtZV07aWYobG9kYXNoRnVuYyl7dmFyIGtleT1sb2Rhc2hGdW5jLm5hbWUrIiIsbmFtZXM9cmVhbE5hbWVzW2tleV18fChyZWFsTmFtZXNba2V5XT1bXSk7bmFtZXMucHVzaCh7Im5hbWUiOm1ldGhvZE5hbWUsImZ1bmMiOmxvZGFzaEZ1bmN9KX19KTtyZWFsTmFtZXNbY3JlYXRlSHlicmlkKHVuZGVmaW5lZCxXUkFQX0JJTkRfS0VZX0ZMQUcpLm5hbWVdPVt7Im5hbWUiOiJ3cmFwcGVyIiwiZnVuYyI6dW5kZWZpbmVkfV07TGF6eVdyYXBwZXIucHJvdG90eXBlLmNsb25lPWxhenlDbG9uZTsKTGF6eVdyYXBwZXIucHJvdG90eXBlLnJldmVyc2U9bGF6eVJldmVyc2U7TGF6eVdyYXBwZXIucHJvdG90eXBlLnZhbHVlPWxhenlWYWx1ZTtsb2Rhc2gucHJvdG90eXBlLmF0PXdyYXBwZXJBdDtsb2Rhc2gucHJvdG90eXBlLmNoYWluPXdyYXBwZXJDaGFpbjtsb2Rhc2gucHJvdG90eXBlLmNvbW1pdD13cmFwcGVyQ29tbWl0O2xvZGFzaC5wcm90b3R5cGUubmV4dD13cmFwcGVyTmV4dDtsb2Rhc2gucHJvdG90eXBlLnBsYW50PXdyYXBwZXJQbGFudDtsb2Rhc2gucHJvdG90eXBlLnJldmVyc2U9d3JhcHBlclJldmVyc2U7bG9kYXNoLnByb3RvdHlwZS50b0pTT049bG9kYXNoLnByb3RvdHlwZS52YWx1ZU9mPWxvZGFzaC5wcm90b3R5cGUudmFsdWU9d3JhcHBlclZhbHVlO2xvZGFzaC5wcm90b3R5cGUuZmlyc3Q9bG9kYXNoLnByb3RvdHlwZS5oZWFkO2lmKHN5bUl0ZXJhdG9yKWxvZGFzaC5wcm90b3R5cGVbc3ltSXRlcmF0b3JdPXdyYXBwZXJUb0l0ZXJhdG9yO3JldHVybiBsb2Rhc2h9Owp2YXIgXz1ydW5JbkNvbnRleHQoKTtpZih0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZ0eXBlb2YgZGVmaW5lLmFtZD09Im9iamVjdCImJmRlZmluZS5hbWQpe3Jvb3QuXz1fO2RlZmluZShmdW5jdGlvbigpe3JldHVybiBffSl9ZWxzZSBpZihmcmVlTW9kdWxlKXsoZnJlZU1vZHVsZS5leHBvcnRzPV8pLl89XztmcmVlRXhwb3J0cy5fPV99ZWxzZSByb290Ll89X30pLmNhbGwodGhpcyk7Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92ei1zb3J0aW5nL3NvcnRpbmcuanMKdmFyIGduOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhnLGwpe2xldCBrOyhmdW5jdGlvbihwKXtwW3AuTkFUVVJBTD0wXT0iTkFUVVJBTCI7cFtwLlJFQUw9MV09IlJFQUwiO3BbcC5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIjtwW3AuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKGt8fChrPXt9KSk7bGV0IG49ay5OQVRVUkFMO2Zvcig7bDxnLmxlbmd0aDtsKyspaWYobj09PWsuTkFUVVJBTClpZigiLiI9PT1nW2xdKW49ay5SRUFMO2Vsc2UgaWYoImUiPT09Z1tsXXx8IkUiPT09Z1tsXSluPWsuRVhQT05FTlRfU0lHTjtlbHNle2lmKCFkKGdbbF0pKWJyZWFrfWVsc2UgaWYobj09PWsuUkVBTClpZigiZSI9PT1nW2xdfHwiRSI9PT1nW2xdKW49ay5FWFBPTkVOVF9TSUdOO2Vsc2V7aWYoIWQoZ1tsXSkpYnJlYWt9ZWxzZSBpZihuPT09ay5FWFBPTkVOVF9TSUdOKWlmKGQoZ1tsXSl8fCIrIj09PWdbbF18fCItIj09PWdbbF0pbj1rLkVYUE9ORU5UO2Vsc2UgYnJlYWs7ZWxzZSBpZihuPT09ay5FWFBPTkVOVCYmCiFkKGdbbF0pKWJyZWFrO3JldHVybiBsfWZ1bmN0aW9uIGQoZyl7cmV0dXJuIjAiPD1nJiYiOSI+PWd9ZnVuY3Rpb24gZihnKXtyZXR1cm4iLyI9PT1nfHwiXyI9PT1nfHxkKGcpfWEuY29tcGFyZVRhZ05hbWVzPWZ1bmN0aW9uKGcsbCl7bGV0IGs9MCxuPTA7Zm9yKDs7KXtpZihrPT09Zy5sZW5ndGgpcmV0dXJuIG49PT1sLmxlbmd0aD8wOi0xO2lmKG49PT1sLmxlbmd0aClyZXR1cm4gMTtpZihkKGdba10pJiZkKGxbbl0pKXt2YXIgcD1rLHE9bjtrPWMoZyxrKzEpO249YyhsLG4rMSk7cD1wYXJzZUZsb2F0KGcuc2xpY2UocCxrKSk7cT1wYXJzZUZsb2F0KGwuc2xpY2UocSxuKSk7aWYocDxxKXJldHVybi0xO2lmKHA+cSlyZXR1cm4gMX1lbHNle2lmKGYoZ1trXSkpe2lmKCFmKGxbbl0pKXJldHVybi0xfWVsc2V7aWYoZihsW25dKSlyZXR1cm4gMTtpZihnW2tdPGxbbl0pcmV0dXJuLTE7aWYoZ1trXT5sW25dKXJldHVybiAxfWsrKztuKyt9fX19KShnbnx8KGduPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtYmFja2VuZC9yZXF1ZXN0TWFuYWdlci5qcwp2YXIgUW87CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKHIsdCx2LHkpe2NvbnN0IHo9bmV3IFhNTEh0dHBSZXF1ZXN0O3oub3BlbihyLHQpO3YmJih6LndpdGhDcmVkZW50aWFscz12KTt5JiZ6LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIseSk7cmV0dXJuIHp9ZnVuY3Rpb24gZChyKXtjb25zdCB0PW5ldyBwO2lmKCFyKXJldHVybiB0Lm1ldGhvZFR5cGU9bi5HRVQsdDt0Lm1ldGhvZFR5cGU9bi5QT1NUO3QuYm9keT1mKHIpO3JldHVybiB0fWZ1bmN0aW9uIGYocil7Y29uc3QgdD1uZXcgRm9ybURhdGE7Zm9yKGxldCB2IGluIHIpdiYmdC5hcHBlbmQodixyW3ZdKTtyZXR1cm4gdH1jbGFzcyBnIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO3RoaXMubmFtZT0iUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yIn19YS5SZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3I9ZztjbGFzcyBsIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3Iocil7c3VwZXIocik7dGhpcy5uYW1lPQoiSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3IiO09iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGwucHJvdG90eXBlKX19YS5JbnZhbGlkUmVxdWVzdE9wdGlvbnNFcnJvcj1sO2NsYXNzIGsgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihyLHQpe3N1cGVyKCk7dGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Iuc3RhdHVzfSBhdCAke3R9YDt0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiO3RoaXMucmVxPXI7dGhpcy51cmw9dH19YS5SZXF1ZXN0TmV0d29ya0Vycm9yPWs7bGV0IG47KGZ1bmN0aW9uKHIpe3IuR0VUPSJHRVQiO3IuUE9TVD0iUE9TVCJ9KShuPWEuSHR0cE1ldGhvZFR5cGV8fChhLkh0dHBNZXRob2RUeXBlPXt9KSk7Y2xhc3MgcHt2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PW4uR0VUJiZ0aGlzLmJvZHkpdGhyb3cgbmV3IGwoImJvZHkgbXVzdCBiZSBtaXNzaW5nIGZvciBhIEdFVCByZXF1ZXN0LiIpO319YS5SZXF1ZXN0T3B0aW9ucz0KcDtjbGFzcyBxe2NvbnN0cnVjdG9yKHI9MUUzLHQ9Myl7dGhpcy5fcXVldWU9W107dGhpcy5fbkFjdGl2ZVJlcXVlc3RzPTA7dGhpcy5fblNpbXVsdGFuZW91c1JlcXVlc3RzPXI7dGhpcy5fbWF4UmV0cmllcz10fXJlcXVlc3Qocix0KXt0PWQodCk7cmV0dXJuIHRoaXMucmVxdWVzdFdpdGhPcHRpb25zKHIsdCl9cmVxdWVzdFdpdGhPcHRpb25zKHIsdCl7dC52YWxpZGF0ZSgpO3JldHVybihuZXcgUHJvbWlzZSgodix5KT0+e3RoaXMuX3F1ZXVlLnB1c2goe3Jlc29sdmU6dixyZWplY3Q6eX0pO3RoaXMubGF1bmNoUmVxdWVzdHMoKX0pKS50aGVuKCgpPT50aGlzLnByb21pc2VXaXRoUmV0cmllcyhyLHRoaXMuX21heFJldHJpZXMsdCkpLnRoZW4odj0+e3RoaXMuX25BY3RpdmVSZXF1ZXN0cy0tO3RoaXMubGF1bmNoUmVxdWVzdHMoKTtyZXR1cm4gdn0sdj0+eyJSZXF1ZXN0TmV0d29ya0Vycm9yIj09PXYubmFtZSYmKHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKSk7CnJldHVybiBQcm9taXNlLnJlamVjdCh2KX0pfWZldGNoKHIsdCl7cmV0dXJuKG5ldyBQcm9taXNlKCh2LHkpPT57dGhpcy5fcXVldWUucHVzaCh7cmVzb2x2ZTp2LHJlamVjdDp5fSk7dGhpcy5sYXVuY2hSZXF1ZXN0cygpfSkpLnRoZW4oKCk9PntsZXQgdj0xO3JldHVybiBuZXcgUHJvbWlzZSh5PT57Y29uc3Qgej0oKT0+e2ZldGNoKHIsdCkudGhlbih4PT57IXgub2smJnRoaXMuX21heFJldHJpZXM+dj8odisrLHooKSk6KHkoeCksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpKX0pfTt6KCl9KX0pfWNsZWFyUXVldWUoKXtmb3IoOzA8dGhpcy5fcXVldWUubGVuZ3RoOyl0aGlzLl9xdWV1ZS5wb3AoKS5yZWplY3QobmV3IGcoIlJlcXVlc3QgY2FuY2VsbGVkIGJ5IGNsZWFyUXVldWUiKSl9YWN0aXZlUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5fbkFjdGl2ZVJlcXVlc3RzfW91dHN0YW5kaW5nUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5fbkFjdGl2ZVJlcXVlc3RzKwp0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJjA8dGhpcy5fcXVldWUubGVuZ3RoOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKCl9cHJvbWlzZVdpdGhSZXRyaWVzKHIsdCx2KXtyZXR1cm4gdGhpcy5fcHJvbWlzZUZyb21Vcmwocix2KS50aGVuKHk9PnkseT0+MDx0P3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHIsdC0xLHYpOlByb21pc2UucmVqZWN0KHkpKX1fcHJvbWlzZUZyb21Vcmwocix0KXtyZXR1cm4gbmV3IFByb21pc2UoKHYseSk9Pntjb25zdCB6PWModC5tZXRob2RUeXBlLHIsdC53aXRoQ3JlZGVudGlhbHMsdC5jb250ZW50VHlwZSk7ei5vbmxvYWQ9ZnVuY3Rpb24oKXsyMDA9PT16LnN0YXR1cz92KEpTT04ucGFyc2Uoei5yZXNwb25zZVRleHQpKTp5KG5ldyBrKHoscikpfTt6Lm9uZXJyb3I9ZnVuY3Rpb24oKXt5KG5ldyBrKHosCnIpKX07dC5ib2R5P3ouc2VuZCh0LmJvZHkpOnouc2VuZCgpfSl9fWEuUmVxdWVzdE1hbmFnZXI9cX0pKFFvfHwoUW89e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1iYWNrZW5kL3VybFBhdGhIZWxwZXJzLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5Iil9YS5hZGRQYXJhbXM9ZnVuY3Rpb24oZCxmKXt2YXIgZz1PYmplY3Qua2V5cyhmKS5zb3J0KCkuZmlsdGVyKGs9PnZvaWQgMCE9PWZba10pO2lmKCFnLmxlbmd0aClyZXR1cm4gZDtjb25zdCBsPS0xIT09ZC5pbmRleE9mKCI/Iik/Ilx4MjYiOiI/IjtnPVtdLmNvbmNhdCguLi5nLm1hcChrPT57Y29uc3Qgbj1mW2tdO3JldHVybihBcnJheS5pc0FycmF5KG4pP246W25dKS5tYXAocD0+YCR7a309JHtjKHApfWApfSkpLmpvaW4oIlx4MjYiKTtyZXR1cm4gZCtsK2d9fSkoUW98fChRbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWJhY2tlbmQvcm91dGVyLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGw9ImRhdGEiKXsiLyI9PT1sW2wubGVuZ3RoLTFdJiYobD1sLnNsaWNlKDAsbC5sZW5ndGgtMSkpO3JldHVybntlbnZpcm9ubWVudDooKT0+ZChsLCIvZW52aXJvbm1lbnQiKSxleHBlcmltZW50czooKT0+ZChsLCIvZXhwZXJpbWVudHMiKSxwbHVnaW5Sb3V0ZTooayxuLHApPT5kKGwrIi9wbHVnaW4iLGAvJHtrfSR7bn1gLHApLHBsdWdpbnNMaXN0aW5nOigpPT5kKGwsIi9wbHVnaW5zX2xpc3RpbmciKSxydW5zOigpPT5kKGwsIi9ydW5zIikscnVuc0ZvckV4cGVyaW1lbnQ6az0+ZChsLCIvZXhwZXJpbWVudF9ydW5zIixmKHtleHBlcmltZW50OlN0cmluZyhrKX0pKX19ZnVuY3Rpb24gZChsLGssbj1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsKz1rO1N0cmluZyhuKSYmKGs9ay5pbmNsdWRlcygiPyIpPyJceDI2IjoiPyIsbCs9aytTdHJpbmcobikpO3JldHVybiBsfWZ1bmN0aW9uIGYobD17fSl7Y29uc3Qgaz1PYmplY3Qua2V5cyhsKS5zb3J0KCkuZmlsdGVyKHA9PgpsW3BdKSxuPW5ldyBVUkxTZWFyY2hQYXJhbXM7ay5mb3JFYWNoKHA9Pntjb25zdCBxPWxbcF07KEFycmF5LmlzQXJyYXkocSk/cTpbcV0pLmZvckVhY2gocj0+bi5hcHBlbmQocCxyKSl9KTtyZXR1cm4gbn1sZXQgZz1jKCk7YS5jcmVhdGVSb3V0ZXI9YzthLmdldFJvdXRlcj1mdW5jdGlvbigpe3JldHVybiBnfTthLnNldFJvdXRlcj1mdW5jdGlvbihsKXtpZihudWxsPT1sKXRocm93IEVycm9yKCJSb3V0ZXIgcmVxdWlyZWQsIGJ1dCBnb3Q6ICIrbCk7Zz1sfTthLmNyZWF0ZVNlYXJjaFBhcmFtPWZ9KShRb3x8KFFvPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtYmFja2VuZC9iYXNlU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZil7dGhpcy5saXN0ZW5lcj1mfX1hLkxpc3RlbktleT1jO2NsYXNzIGR7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPW5ldyBhLlJlcXVlc3RNYW5hZ2VyKDEpO3RoaXMuX2xpc3RlbmVycz1uZXcgU2V0O3RoaXMuaW5pdGlhbGl6ZWQ9ITF9cmVmcmVzaCgpe3JldHVybiB0aGlzLmxvYWQoKS50aGVuKCgpPT57dGhpcy5pbml0aWFsaXplZD0hMH0pfWFkZExpc3RlbmVyKGYpe2Y9bmV3IGMoZik7dGhpcy5fbGlzdGVuZXJzLmFkZChmKTtyZXR1cm4gZn1yZW1vdmVMaXN0ZW5lckJ5S2V5KGYpe3RoaXMuX2xpc3RlbmVycy5kZWxldGUoZil9ZW1pdENoYW5nZSgpe3RoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGY9Pnt0cnl7Zi5saXN0ZW5lcigpfWNhdGNoKGcpe319KX19YS5CYXNlU3RvcmU9ZH0pKFFvfHwoUW89e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1iYWNrZW5kL2Vudmlyb25tZW50U3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtsb2FkKCl7Y29uc3QgZD1hLmdldFJvdXRlcigpLmVudmlyb25tZW50KCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKS50aGVuKGY9PntmPXtkYXRhTG9jYXRpb246Zi5kYXRhX2xvY2F0aW9uLHdpbmRvd1RpdGxlOmYud2luZG93X3RpdGxlfTtfLmlzRXF1YWwodGhpcy5lbnZpcm9ubWVudCxmKXx8KHRoaXMuZW52aXJvbm1lbnQ9Zix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXREYXRhTG9jYXRpb24oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmRhdGFMb2NhdGlvbjoiIn1nZXRXaW5kb3dUaXRsZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQud2luZG93VGl0bGU6IiJ9fWEuRW52aXJvbm1lbnRTdG9yZT1jO2EuZW52aXJvbm1lbnRTdG9yZT1uZXcgY30pKFFvfHwoUW89e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1iYWNrZW5kL2V4cGVyaW1lbnRzU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2NvbnN0IGQ9YS5nZXRSb3V0ZXIoKS5leHBlcmltZW50cygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZCkudGhlbihmPT57Xy5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLGYpfHwodGhpcy5fZXhwZXJpbWVudHM9Zix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX1hLkV4cGVyaW1lbnRzU3RvcmU9YzthLmV4cGVyaW1lbnRzU3RvcmU9bmV3IGN9KShRb3x8KFFvPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtYmFja2VuZC9ydW5zU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5fcnVucz1bXX1sb2FkKCl7Y29uc3QgZD1hLmdldFJvdXRlcigpLnJ1bnMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGQpLnRoZW4oZj0+e18uaXNFcXVhbCh0aGlzLl9ydW5zLGYpfHwodGhpcy5fcnVucz1mLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldFJ1bnMoKXtyZXR1cm4gdGhpcy5fcnVucy5zbGljZSgpfX1hLlJ1bnNTdG9yZT1jO2EucnVuc1N0b3JlPW5ldyBjfSkoUW98fChRbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWJhY2tlbmQvYmFja2VuZC5qcwooZnVuY3Rpb24oYSl7YS5UWVBFUz1bXTthLmdldFJ1bnNOYW1lZD1mdW5jdGlvbihjKXtyZXR1cm4gXy5rZXlzKGMpLnNvcnQoZ24uY29tcGFyZVRhZ05hbWVzKX07YS5nZXRUYWdzPWZ1bmN0aW9uKGMpe3JldHVybiBfLnVuaW9uLmFwcGx5KG51bGwsXy52YWx1ZXMoYykpLnNvcnQoZ24uY29tcGFyZVRhZ05hbWVzKX07YS5maWx0ZXJUYWdzPWZ1bmN0aW9uKGMsZCl7bGV0IGY9W107ZC5mb3JFYWNoKGc9PmY9Zi5jb25jYXQoY1tnXSkpO3JldHVybiBfLnVuaXEoZikuc29ydChnbi5jb21wYXJlVGFnTmFtZXMpfX0pKFFvfHwoUW89e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1iYWNrZW5kL2NhbmNlbGxlci5qcwooZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZShkKXtjb25zdCBmPXRoaXMuY2FuY2VsbGF0aW9uQ291bnQ7cmV0dXJuIGc9PmQoe3ZhbHVlOmcsY2FuY2VsbGVkOnRoaXMuY2FuY2VsbGF0aW9uQ291bnQhPT1mfSl9Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX1hLkNhbmNlbGxlcj1jfSkoUW98fChRbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWJhY2tlbmQvdGYtYmFja2VuZC1wb2x5bWVyLmpzCihmdW5jdGlvbihhKXtQb2x5bWVyKHtpczoidGYtYmFja2VuZCIsX3RlbXBsYXRlOm51bGwsdGZfYmFja2VuZDphfSl9KShRb3x8KFFvPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtY2F0ZWdvcml6YXRpb24tdXRpbHMvY2F0ZWdvcml6YXRpb25VdGlscy5qcwp2YXIgUm87CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKHAscSl7Y29uc3Qgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAocSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTpxLG1ldGFkYXRhOnt0eXBlOm4uU0VBUkNIX1JFU1VMVFMsdmFsaWRSZWdleDohIXIsdW5pdmVyc2FsUmVnZXg6Ii4qIj09PXF9LGl0ZW1zOnI/cC5maWx0ZXIodD0+dC5tYXRjaChyKSk6W119fWZ1bmN0aW9uIGQocCxxPSIvIil7Y29uc3Qgcj1bXSx0PXt9O3AuZm9yRWFjaCh2PT57dmFyIHk9di5pbmRleE9mKHEpO3k9MDw9eT92LnNsaWNlKDAseSk6djtpZighdFt5XSl7Y29uc3Qgej17bmFtZTp5LG1ldGFkYXRhOnt0eXBlOm4uUFJFRklYX0dST1VQfSxpdGVtczpbXX07dFt5XT16O3IucHVzaCh6KX10W3ldLml0ZW1zLnB1c2godil9KTtyZXR1cm4gcn1mdW5jdGlvbiBmKHAscT0iIil7cT1bYyhwLHEpXTtwPWQocCk7cmV0dXJuW10uY29uY2F0KHEscCl9ZnVuY3Rpb24gZyhwLHEscil7Y29uc3QgdD0KUW8uZ2V0VGFncyhwKTtyPWYodCxyKTtjb25zdCB2PWwoXy5waWNrKHAscSkpO3JldHVybiByLm1hcCgoe25hbWU6eSxtZXRhZGF0YTp6LGl0ZW1zOnh9KT0+KHtuYW1lOnksbWV0YWRhdGE6eixpdGVtczp4Lm1hcChDPT4oe3RhZzpDLHJ1bnM6KHYuZ2V0KEMpfHxbXSkuc2xpY2UoKX0pKX0pKX1mdW5jdGlvbiBsKHApe2NvbnN0IHE9bmV3IE1hcDtPYmplY3Qua2V5cyhwKS5mb3JFYWNoKHI9PntwW3JdLmZvckVhY2godD0+e2NvbnN0IHY9cS5nZXQodCl8fFtdO3YucHVzaChyKTtxLnNldCh0LHYpfSl9KTtyZXR1cm4gcX1mdW5jdGlvbiBrKHAscSl7Y29uc3Qgcj1nbi5jb21wYXJlVGFnTmFtZXMocC50YWcscS50YWcpO3JldHVybiAwIT1yP3I6Z24uY29tcGFyZVRhZ05hbWVzKHAucnVuLHEucnVuKX1sZXQgbjsoZnVuY3Rpb24ocCl7cFtwLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyI7cFtwLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKG49YS5DYXRlZ29yeVR5cGV8fAooYS5DYXRlZ29yeVR5cGU9e30pKTthLmNhdGVnb3JpemVCeVNlYXJjaFF1ZXJ5PWM7YS5jYXRlZ29yaXplQnlQcmVmaXg9ZDthLmNhdGVnb3JpemU9ZjthLmNhdGVnb3JpemVUYWdzPWc7YS5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zPWZ1bmN0aW9uKHAscSxyKXtyZXR1cm4gZyhwLHEscikubWFwKGZ1bmN0aW9uKHQpe2NvbnN0IHY9Xy5mbGF0dGVuKHQuaXRlbXMubWFwKCh7dGFnOnkscnVuczp6fSk9PnoubWFwKHg9Pih7dGFnOnkscnVuOnh9KSkpKTt2LnNvcnQoayk7cmV0dXJue25hbWU6dC5uYW1lLG1ldGFkYXRhOnQubWV0YWRhdGEsaXRlbXM6dn19KX19KShSb3x8KFJvPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ2xvYmFscy9nbG9iYWxzLmpzCnZhciBTbzsoZnVuY3Rpb24oYSl7bGV0IGM9ITE7YS5zZXRVc2VIYXNoPWZ1bmN0aW9uKGYpe2M9Zn07YS51c2VIYXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGN9O2xldCBkPSIiO2Euc2V0RmFrZUhhc2g9ZnVuY3Rpb24oZil7ZD1mfTthLmdldEZha2VIYXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGR9fSkoU298fChTbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLXN0b3JhZ2UvbGlzdGVuZXJzLmpzCnZhciBUbzsKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZyl7dGhpcy5saXN0ZW5lcj1nfX1hLkxpc3RlbktleT1jO2NvbnN0IGQ9bmV3IFNldCxmPW5ldyBTZXQ7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCgpPT57ZC5mb3JFYWNoKGc9PmcubGlzdGVuZXIoKSl9KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIsKCk9PntmLmZvckVhY2goZz0+Zy5saXN0ZW5lcigpKX0pO2EuYWRkSGFzaExpc3RlbmVyPWZ1bmN0aW9uKGcpe2c9bmV3IGMoZyk7ZC5hZGQoZyk7cmV0dXJuIGd9O2EuYWRkU3RvcmFnZUxpc3RlbmVyPWZ1bmN0aW9uKGcpe2c9bmV3IGMoZyk7Zi5hZGQoZyk7cmV0dXJuIGd9O2EuZmlyZVN0b3JhZ2VDaGFuZ2VkPWZ1bmN0aW9uKCl7Zi5mb3JFYWNoKGc9PmcubGlzdGVuZXIoKSl9O2EucmVtb3ZlSGFzaExpc3RlbmVyQnlLZXk9ZnVuY3Rpb24oZyl7ZC5kZWxldGUoZyl9O2EucmVtb3ZlU3RvcmFnZUxpc3RlbmVyQnlLZXk9ZnVuY3Rpb24oZyl7Zi5kZWxldGUoZyl9fSkoVG98fAooVG89e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1zdG9yYWdlL3N0b3JhZ2UuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMocSxyKXtmdW5jdGlvbiB0KHgsQz17fSl7Y29uc3Qge2RlZmF1bHRWYWx1ZTpGLHVzZUxvY2FsU3RvcmFnZTpEPSExfT1DO3g9RD93aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oeCk6ayhmKCkpW3hdO3JldHVybiB2b2lkIDA9PXg/Xy5jbG9uZURlZXAoRik6cSh4KX1mdW5jdGlvbiB2KHgsQyxGPXt9KXtjb25zdCB7ZGVmYXVsdFZhbHVlOkQsdXNlTG9jYWxTdG9yYWdlOkI9ITEsdXNlTG9jYXRpb25SZXBsYWNlOkk9ITF9PUY7Rj1yKEMpO0I/KHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh4LEYpLGEuZmlyZVN0b3JhZ2VDaGFuZ2VkKCkpOl8uaXNFcXVhbChDLHQoeCx7dXNlTG9jYWxTdG9yYWdlOkJ9KSl8fChfLmlzRXF1YWwoQyxEKT9uKHgpOihDPWsoZigpKSxDW3hdPUYsZyhsKEMpLEkpKSl9Y29uc3QgeT1bXSx6PVtdO3JldHVybntnZXQ6dCxzZXQ6dixnZXRJbml0aWFsaXplcjpmdW5jdGlvbih4LEMpe2NvbnN0IEY9T2JqZWN0LmFzc2lnbih7ZGVmYXVsdFZhbHVlOkMuZGVmYXVsdFZhbHVlLApwb2x5bWVyUHJvcGVydHk6eCx1c2VMb2NhbFN0b3JhZ2U6ITF9LEMpO3JldHVybiBmdW5jdGlvbigpe2NvbnN0IEQ9ZCh0aGlzLHgpLEI9KCk9Pntjb25zdCBPPXQoRCxGKTtfLmlzRXF1YWwoTyx0aGlzW0YucG9seW1lclByb3BlcnR5XSl8fCh0aGlzW0YucG9seW1lclByb3BlcnR5XT1PKX0sST0oRi51c2VMb2NhbFN0b3JhZ2U/YS5hZGRTdG9yYWdlTGlzdGVuZXI6YS5hZGRIYXNoTGlzdGVuZXIpKCgpPT5CKCkpO0YudXNlTG9jYWxTdG9yYWdlP3oucHVzaChJKTp5LnB1c2goSSk7QigpO3JldHVybiB0aGlzW0YucG9seW1lclByb3BlcnR5XX19LGdldE9ic2VydmVyOmZ1bmN0aW9uKHgsQyl7Y29uc3QgRj1PYmplY3QuYXNzaWduKHtkZWZhdWx0VmFsdWU6Qy5kZWZhdWx0VmFsdWUscG9seW1lclByb3BlcnR5OngsdXNlTG9jYWxTdG9yYWdlOiExfSxDKTtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBEPWQodGhpcyx4KTt2KEQsdGhpc1tGLnBvbHltZXJQcm9wZXJ0eV0sRil9fSxkaXNwb3NlQmluZGluZzpmdW5jdGlvbigpe3kuZm9yRWFjaCh4PT4KYS5yZW1vdmVIYXNoTGlzdGVuZXJCeUtleSh4KSk7ei5mb3JFYWNoKHg9PmEucmVtb3ZlU3RvcmFnZUxpc3RlbmVyQnlLZXkoeCkpfX19ZnVuY3Rpb24gZChxLHIpe3E9cVthLkRJU0FNQklHVUFUT1JdO3JldHVybihudWxsPT1xP1tyXTpbcSxyXSkuam9pbigiLiIpfWZ1bmN0aW9uIGYoKXtyZXR1cm4gU28udXNlSGFzaCgpP3dpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpOlNvLmdldEZha2VIYXNoKCl9ZnVuY3Rpb24gZyhxLHI9ITEpe1NvLnVzZUhhc2goKT9yP3dpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCIjIitxKTp3aW5kb3cubG9jYXRpb24uaGFzaD1xOlNvLnNldEZha2VIYXNoKHEpfWZ1bmN0aW9uIGwocSl7bGV0IHI9IiI7dm9pZCAwIT09cVthLlRBQl0mJihyKz1xW2EuVEFCXSk7Y29uc3QgdD1PYmplY3Qua2V5cyhxKS5tYXAodj0+W3YscVt2XV0pLmZpbHRlcih2PT52WzBdIT09YS5UQUIpLm1hcCh2PT5lbmNvZGVVUklDb21wb25lbnQodlswXSkrIlx4M2QiK2VuY29kZVVSSUNvbXBvbmVudCh2WzFdKSkuam9pbigiXHgyNiIpOwpyZXR1cm4gMDx0Lmxlbmd0aD9yKyJceDI2Iit0OnJ9ZnVuY3Rpb24gayhxKXtjb25zdCByPXt9O3Euc3BsaXQoIlx4MjYiKS5mb3JFYWNoKHQ9Pnt0PXQuc3BsaXQoIlx4M2QiKTsxPT09dC5sZW5ndGg/clthLlRBQl09dFswXToyPT09dC5sZW5ndGgmJihyW2RlY29kZVVSSUNvbXBvbmVudCh0WzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KHRbMV0pKX0pO3JldHVybiByfWZ1bmN0aW9uIG4ocSl7Y29uc3Qgcj1rKGYoKSk7ZGVsZXRlIHJbcV07ZyhsKHIpKX1hLlRBQj0iX190YWJfXyI7YS5ESVNBTUJJR1VBVE9SPSJkaXNhbWJpZ3VhdG9yIjt2YXIgcD1jKHE9PnEscT0+cSk7YS5nZXRTdHJpbmc9cC5nZXQ7YS5zZXRTdHJpbmc9cC5zZXQ7YS5nZXRTdHJpbmdJbml0aWFsaXplcj1wLmdldEluaXRpYWxpemVyO2EuZ2V0U3RyaW5nT2JzZXJ2ZXI9cC5nZXRPYnNlcnZlcjthLmRpc3Bvc2VTdHJpbmdCaW5kaW5nPXAuZGlzcG9zZUJpbmRpbmc7cD1jKHE9PiJ0cnVlIj09PXE/ITA6ImZhbHNlIj09PQpxPyExOnZvaWQgMCxxPT5xLnRvU3RyaW5nKCkpO2EuZ2V0Qm9vbGVhbj1wLmdldDthLnNldEJvb2xlYW49cC5zZXQ7YS5nZXRCb29sZWFuSW5pdGlhbGl6ZXI9cC5nZXRJbml0aWFsaXplcjthLmdldEJvb2xlYW5PYnNlcnZlcj1wLmdldE9ic2VydmVyO2EuZGlzcG9zZUJvb2xlYW5CaW5kaW5nPXAuZGlzcG9zZUJpbmRpbmc7cD1jKHE9PitxLHE9PnEudG9TdHJpbmcoKSk7YS5nZXROdW1iZXI9cC5nZXQ7YS5zZXROdW1iZXI9cC5zZXQ7YS5nZXROdW1iZXJJbml0aWFsaXplcj1wLmdldEluaXRpYWxpemVyO2EuZ2V0TnVtYmVyT2JzZXJ2ZXI9cC5nZXRPYnNlcnZlcjthLmRpc3Bvc2VOdW1iZXJCaW5kaW5nPXAuZGlzcG9zZUJpbmRpbmc7cD1jKHE9PkpTT04ucGFyc2UoYXRvYihxKSkscT0+YnRvYShKU09OLnN0cmluZ2lmeShxKSkpO2EuZ2V0T2JqZWN0PXAuZ2V0O2Euc2V0T2JqZWN0PXAuc2V0O2EuZ2V0T2JqZWN0SW5pdGlhbGl6ZXI9cC5nZXRJbml0aWFsaXplcjthLmdldE9iamVjdE9ic2VydmVyPQpwLmdldE9ic2VydmVyO2EuZGlzcG9zZU9iamVjdEJpbmRpbmc9cC5kaXNwb3NlQmluZGluZzthLm1ha2VCaW5kaW5ncz1jfSkoVG98fChUbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLXN0b3JhZ2UvdGYtc3RvcmFnZS1wb2x5bWVyLmpzCihmdW5jdGlvbihhKXtQb2x5bWVyKHtpczoidGYtc3RvcmFnZSIsX3RlbXBsYXRlOm51bGwsdGZfc3RvcmFnZTphfSl9KShUb3x8KFRvPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtY2F0ZWdvcml6YXRpb24tdXRpbHMvdGYtdGFnLWZpbHRlcmVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXRhZy1maWx0ZXJlciIscHJvcGVydGllczp7dGFnRmlsdGVyOnt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0sX3RhZ0ZpbHRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6VG8uZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoInRhZ0ZpbHRlciIse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITEscG9seW1lclByb3BlcnR5OiJfdGFnRmlsdGVyIn0pLG9ic2VydmVyOiJfdGFnRmlsdGVyT2JzZXJ2ZXIifX0sX3RhZ0ZpbHRlck9ic2VydmVyOlRvLmdldFN0cmluZ09ic2VydmVyKCJ0YWdGaWx0ZXIiLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExLHBvbHltZXJQcm9wZXJ0eToiX3RhZ0ZpbHRlciJ9KSxfY29tcHV0ZVRhZ0ZpbHRlcigpe3JldHVybiB0aGlzLl90YWdGaWx0ZXJ9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZGFzaGJvYXJkLWNvbW1vbi9hcnJheS11cGRhdGUtaGVscGVyLmpzCnZhciBVbzsoZnVuY3Rpb24oYSl7YS5BcnJheVVwZGF0ZUhlbHBlcj17dXBkYXRlQXJyYXlQcm9wKGMsZCxmKXtsZXQgZz10aGlzLmdldChjKTtpZighQXJyYXkuaXNBcnJheShkKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7Y30nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoZyl8fChnPVtdLHRoaXMuc2V0KGMsZykpO2NvbnN0IGw9bmV3IFNldChkLm1hcCgocCxxKT0+ZihwLHEpKSk7bGV0IGs9MCxuPTA7Zm9yKDtrPGcubGVuZ3RoJiZuPGQubGVuZ3RoOylsLmhhcyhmKGdba10saykpPyhmKGdba10sayk9PWYoZFtuXSxuKT90aGlzLnNldChgJHtjfS4ke2t9YCxkW25dKTp0aGlzLnNwbGljZShjLGssMCxkW25dKSxuKyssaysrKTp0aGlzLnNwbGljZShjLGssMSk7azxnLmxlbmd0aCYmdGhpcy5zcGxpY2UoYyxrKTtuPGQubGVuZ3RoJiZ0aGlzLnB1c2goYywuLi5kLnNsaWNlKG4pKX19fSkoVW98fChVbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWRhc2hib2FyZC1jb21tb24vdGYtZGFzaGJvYXJkLWxheW91dC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1kYXNoYm9hcmQtbGF5b3V0In0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWRhc2hib2FyZC1jb21tb24vdGYtb3B0aW9uLXNlbGVjdG9yLmh0bWwuanMKUG9seW1lcih7aXM6InRmLW9wdGlvbi1zZWxlY3RvciIscHJvcGVydGllczp7bmFtZTpTdHJpbmcsc2VsZWN0ZWRJZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2VsZWN0ZWRJZENoYW5nZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5saXN0ZW4oYSwidGFwIiwiX3NlbGVjdFRhcmdldCIpfS5iaW5kKHRoaXMpKX0pfSxfc2VsZWN0VGFyZ2V0OmZ1bmN0aW9uKGEpe3RoaXMuc2VsZWN0ZWRJZD1hLmN1cnJlbnRUYXJnZXQuaWR9LF9zZWxlY3RlZElkQ2hhbmdlZDpmdW5jdGlvbigpe3ZhciBhPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTthJiYodGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpfSksYS5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9pcm9uLWNvbGxhcHNlL2lyb24tY29sbGFwc2UuaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1jb2xsYXBzZSIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcl0scHJvcGVydGllczp7aG9yaXpvbnRhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaG9yaXpvbnRhbENoYW5nZWQifSxvcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn0sdHJhbnNpdGlvbmluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMH0sbm9BbmltYXRpb246e3R5cGU6Qm9vbGVhbn0sX2Rlc2lyZWRTaXplOnt0eXBlOlN0cmluZyx2YWx1ZToiIn19LGdldCBkaW1lbnNpb24oKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJ3aWR0aCI6ImhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4KCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4V2lkdGgiOiJtYXhIZWlnaHQifSxnZXQgX2RpbWVuc2lvbk1heENzcygpe3JldHVybiB0aGlzLmhvcml6b250YWw/Im1heC13aWR0aCI6CiJtYXgtaGVpZ2h0In0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sbGlzdGVuZXJzOnt0cmFuc2l0aW9uZW5kOiJfb25UcmFuc2l0aW9uRW5kIn0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9IXRoaXMub3BlbmVkfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMX0sdXBkYXRlU2l6ZTpmdW5jdGlvbihhLGMpe2E9ImF1dG8iPT09YT8iIjphO2M9YyYmIXRoaXMubm9BbmltYXRpb24mJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fZGVzaXJlZFNpemUhPT1hO3RoaXMuX2Rlc2lyZWRTaXplPWE7dGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSk7YyYmKGM9dGhpcy5fY2FsY1NpemUoKSwiIj09PWEmJih0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09IiIsYT10aGlzLl9jYWxjU2l6ZSgpKSx0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09Yyx0aGlzLnNjcm9sbFRvcD0KdGhpcy5zY3JvbGxUb3AsdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMCksYz1hIT09Yyk7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWE7Y3x8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGEpe1BvbHltZXIuQmFzZS5fd2FybigiYGVuYWJsZVRyYW5zaXRpb24oKWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBub0FuaW1hdGlvbmAgaW5zdGVhZC4iKTt0aGlzLm5vQW5pbWF0aW9uPSFhfSxfdXBkYXRlVHJhbnNpdGlvbjpmdW5jdGlvbihhKXt0aGlzLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1hJiYhdGhpcy5ub0FuaW1hdGlvbj8iIjoiMHMifSxfaG9yaXpvbnRhbENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnRyYW5zaXRpb25Qcm9wZXJ0eT10aGlzLl9kaW1lbnNpb25NYXhDc3M7dGhpcy5zdHlsZVsibWF4V2lkdGgiPT09dGhpcy5fZGltZW5zaW9uTWF4PyJtYXhIZWlnaHQiOiJtYXhXaWR0aCJdPSIiO3RoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8KImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCk7dGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCk7dGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKTt0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpO3RoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApO3RoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplO3RoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpO3RoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCk7dGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSk7dGhpcy5ub3RpZnlSZXNpemUoKTsKdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMSl9LF9vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oYSl7UG9seW1lci5kb20oYSkucm9vdFRhcmdldD09PXRoaXMmJnRoaXMuX3RyYW5zaXRpb25FbmQoKX0sX2NhbGNTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5kaW1lbnNpb25dKyJweCJ9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtcGFnaW5hdGVkLXZpZXcvdGYtZG9tLXJlcGVhdC5odG1sLmpzCnZhciBWbzsKKGZ1bmN0aW9uKGEpe2EuVGZEb21SZXBlYXRCZWhhdmlvcj1bVW8uQXJyYXlVcGRhdGVIZWxwZXIse3Byb3BlcnRpZXM6e2FzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LF9jb250ZW50QWN0aXZlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF9kb21Cb290c3RyYXBwZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2N0b3I6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pm51bGx9LF9yZW5kZXJlZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3JlbmRlcmVkVGVtcGxhdGVJbnN0Ont0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IE1hcH0sX2xydUNhY2hlZEl0ZW1zOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IE1hcH0sX2NhY2hlU2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MTB9LF9nZXRJdGVtS2V5Ont0eXBlOkZ1bmN0aW9uLHZhbHVlOigpPT5jPT5KU09OLnN0cmluZ2lmeShjKX19LG9ic2VydmVyczpbIl9ib290c3RyYXBEb20oX2l0ZW1zUmVuZGVyZWQsIGlzQXR0YWNoZWQpIiwiX3VwZGF0ZURvbShfcmVuZGVyZWRJdGVtcy4qLCBfZG9tQm9vdHN0cmFwcGVkKSIsCiJfdXBkYXRlQWN0aXZlKF9jb250ZW50QWN0aXZlKSIsIl90cmltQ2FjaGUoX2NhY2hlU2l6ZSkiXSxzZXRDYWNoZVNpemUoYyl7dGhpcy5fY2FjaGVTaXplPWN9LHNldEdldEl0ZW1LZXkoYyl7dGhpcy5fZ2V0SXRlbUtleT1jfSx1cGRhdGVEb20oYyl7dGhpcy51cGRhdGVBcnJheVByb3AoIl9yZW5kZXJlZEl0ZW1zIixjLHRoaXMuX2dldEl0ZW1LZXkpfSxfZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybiExO3RoaXMuX2N0b3J8fCh0aGlzLl9jdG9yPVBvbHltZXIuVGVtcGxhdGl6ZS50ZW1wbGF0aXplKHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihjLGQpe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goZj0+e2YuZm9yd2FyZEhvc3RQcm9wKGMsCmQpfSl9fSkpO3JldHVybiEwfSxfYm9vdHN0cmFwRG9tKCl7dGhpcy5faXRlbXNSZW5kZXJlZCYmdGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKSYmIXRoaXMuX2RvbUJvb3RzdHJhcHBlZCYmKEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikuZm9yRWFjaChjPT57UG9seW1lci5kb20odGhpcykucmVtb3ZlQ2hpbGQoYyl9KSx0aGlzLl9scnVDYWNoZWRJdGVtcy5jbGVhcigpLHRoaXMuX3JlbmRlcmVkSXRlbXMuZm9yRWFjaCgoYyxkKT0+dGhpcy5faW5zZXJ0SXRlbShjLGQpKSx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITApfSxfdXBkYXRlQWN0aXZlKCl7dGhpcy5fZG9tQm9vdHN0cmFwcGVkJiZBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKGM9PntjLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX0sX3VwZGF0ZURvbShjKXtpZih0aGlzLl9kb21Cb290c3RyYXBwZWQmJiJfcmVuZGVyZWRJdGVtcyIhPWMucGF0aCYmCiJfcmVuZGVyZWRJdGVtcy5sZW5ndGgiIT1jLnBhdGgpaWYoIl9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiPT09Yy5wYXRoKWMudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2goZD0+e2NvbnN0IHtpbmRleDpmLGFkZGVkQ291bnQ6ZyxvYmplY3Q6bCxyZW1vdmVkOmt9PWQ7ay5mb3JFYWNoKG49Pnt0aGlzLl9yZW1vdmVJdGVtKG4sdGhpcy5jaGlsZHJlbltmXSl9KTtsLnNsaWNlKGYsZitnKS5mb3JFYWNoKChuLHApPT50aGlzLl9pbnNlcnRJdGVtKG4sZitwKSk7dGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2NvbnN0IGQ9dGhpcy5fZ2V0SXRlbUtleShjLnZhbHVlKTt0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5oYXMoZCk/dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGQpLm5vdGlmeVBhdGgodGhpcy5hcyxjLnZhbHVlKTpjb25zb2xlLndhcm4oYEV4cGVjdGVkICcke2R9JyB0byBleGlzdCBpbiB0aGUgRE9NIGJ1dCBgKyJjb3VsZCBub3QgZmluZCBvbmUuIil9fSxfaW5zZXJ0SXRlbShjLApkKXtpZighdGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKSl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7Y29uc3QgZj10aGlzLl9nZXRJdGVtS2V5KGMpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhmKSljPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChmKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoZiksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGYpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtjb25zdCBnPW5ldyB0aGlzLl9jdG9yKHtbdGhpcy5hc106YyxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0pO2M9Zy5yb290O3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnNldChmLGcpfXRoaXMuY2hpbGRyZW5bZF0/UG9seW1lci5kb20odGhpcykuaW5zZXJ0QmVmb3JlKGMsdGhpcy5jaGlsZHJlbltkXSk6KChjLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/CkFycmF5LmZyb20oYy5jaGlsZHJlbik6W2NdKS5mb3JFYWNoKGc9Pmcuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksUG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQoYykpfSxfcmVtb3ZlSXRlbShjLGQpe1BvbHltZXIuZG9tKGQucGFyZW50Tm9kZSkucmVtb3ZlQ2hpbGQoZCk7Yz10aGlzLl9nZXRJdGVtS2V5KGMpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChjLGQpO3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChjKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX0sX3RyaW1DYWNoZSgpe2Zvcig7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuc2l6ZT50aGlzLl9jYWNoZVNpemU7KXtjb25zdCBbY109dGhpcy5fbHJ1Q2FjaGVkSXRlbXMua2V5cygpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLmRlbGV0ZShjKTt0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5kZWxldGUoYyl9fX1dfSkoVm98fChWbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLXBhZ2luYXRlZC12aWV3L3BhZ2luYXRlZFZpZXdTdG9yZS5qcwp2YXIgV287CihmdW5jdGlvbihhKXtsZXQgYz1udWxsO2NvbnN0IGQ9bmV3IFNldDthLmFkZExpbWl0TGlzdGVuZXI9ZnVuY3Rpb24oZil7ZC5hZGQoZil9O2EucmVtb3ZlTGltaXRMaXN0ZW5lcj1mdW5jdGlvbihmKXtkLmRlbGV0ZShmKX07YS5nZXRMaW1pdD1mdW5jdGlvbigpe251bGw9PWMmJihjPVRvLmdldE51bWJlcigiVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIse3VzZUxvY2FsU3RvcmFnZTohMH0pLG51bGw9PWN8fCFpc0Zpbml0ZShjKXx8MD49YykmJihjPTEyKTtyZXR1cm4gY307YS5zZXRMaW1pdD1mdW5jdGlvbihmKXtpZihmIT09TWF0aC5mbG9vcihmKSl0aHJvdyBFcnJvcihgbGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZ290OiAke2Z9YCk7aWYoMD49Zil0aHJvdyBFcnJvcihgbGltaXQgbXVzdCBiZSBwb3NpdGl2ZSwgYnV0IGdvdDogJHtmfWApO2YhPT1jJiYoYz1mLFRvLnNldE51bWJlcigiVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIsYywKe3VzZUxvY2FsU3RvcmFnZTohMH0pLGQuZm9yRWFjaChnPT57ZygpfSkpfX0pKFdvfHwoV289e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1wYWdpbmF0ZWQtdmlldy90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldyIscHJvcGVydGllczp7Y2F0ZWdvcnk6T2JqZWN0LGluaXRpYWxPcGVuZWQ6Qm9vbGVhbixvcGVuZWQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITB9LF9jb250ZW50QWN0aXZlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQ29udGVudEFjdGl2ZShvcGVuZWQpIn0sZGlzYWJsZVBhZ2luYXRpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2NvdW50Ont0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9LF9oYXNNdWx0aXBsZTp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUhhc011bHRpcGxlKF9jb3VudCkifSxfcGFuZVJlbmRlcmVkOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlUGFuZVJlbmRlcmVkKGNhdGVnb3J5KSIsb2JzZXJ2ZXI6Il9vblBhbmVSZW5kZXJlZENoYW5nZWQifSxfaXRlbXNSZW5kZXJlZDp7dHlwZTpCb29sZWFuLApjb21wdXRlZDoiX2NvbXB1dGVJdGVtc1JlbmRlcmVkKG9wZW5lZCwgX3BhbmVSZW5kZXJlZCkifSxfaXNTZWFyY2hSZXN1bHRzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKGNhdGVnb3J5Lm1ldGFkYXRhLnR5cGUpIn0sX2lzSW52YWxpZFNlYXJjaFJlc3VsdHM6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKGNhdGVnb3J5Lm1ldGFkYXRhKSJ9LF9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Ont0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSxnZXRDYXRlZ29yeUl0ZW1LZXk6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9PmE9PkpTT04uc3RyaW5naWZ5KGEpLG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9LF9saW1pdDp7dHlwZTpOdW1iZXIsdmFsdWU6MTIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSwKX2FjdGl2ZUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfY3VycmVudFBhZ2U6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZUN1cnJlbnRQYWdlKF9saW1pdCwgX2FjdGl2ZUluZGV4KSJ9LF9wYWdlQ291bnQ6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0sX211bHRpcGxlUGFnZXNFeGlzdDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZU11bHRpcGxlUGFnZXNFeGlzdChfcGFnZUNvdW50LCBkaXNhYmxlUGFnaW5hdGlvbikifSxfaGFzUHJldmlvdXNQYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzUHJldmlvdXNQYWdlKF9jdXJyZW50UGFnZSkifSxfaGFzTmV4dFBhZ2U6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNOZXh0UGFnZShfY3VycmVudFBhZ2UsIF9wYWdlQ291bnQpIn0sX2lucHV0V2lkdGg6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUlucHV0V2lkdGgoX3BhZ2VDb3VudCkiLApvYnNlcnZlcjoiX3VwZGF0ZUlucHV0V2lkdGgifSxfcGFnZUlucHV0VmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSxfcGFnZUlucHV0UmF3VmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfcGFnZUlucHV0Rm9jdXNlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sb2JzZXJ2ZXJzOlsiX2NsYW1wQWN0aXZlSW5kZXgoY2F0ZWdvcnkuaXRlbXMuKikiLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyhfaXRlbXNSZW5kZXJlZCwgY2F0ZWdvcnkuaXRlbXMuKiwgX2xpbWl0LCBfYWN0aXZlSW5kZXgsIF9wYWdlQ291bnQsIGRpc2FibGVQYWdpbmF0aW9uKSJdLGJlaGF2aW9yczpbVm8uVGZEb21SZXBlYXRCZWhhdmlvcl0sX2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH0sCl9jb21wdXRlSGFzTXVsdGlwbGUoKXtyZXR1cm4gMTx0aGlzLl9jb3VudH0sX3RvZ2dsZVBhbmUoKXt0aGlzLl9zZXRPcGVuZWQoIXRoaXMub3BlbmVkKX0sX2NvbXB1dGVDb250ZW50QWN0aXZlKCl7cmV0dXJuIHRoaXMub3BlbmVkfSxfb25QYW5lUmVuZGVyZWRDaGFuZ2VkKGEsYyl7YSYmYSE9PWMmJnRoaXMuJC5pZlJlbmRlcmVkLnJlbmRlcigpfSxfY29tcHV0ZVBhbmVSZW5kZXJlZChhKXtyZXR1cm4hKGEubWV0YWRhdGEudHlwZT09PVJvLkNhdGVnb3J5VHlwZS5TRUFSQ0hfUkVTVUxUUyYmIiI9PT1hLm5hbWUpfSxfY29tcHV0ZUl0ZW1zUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy5fcGFuZVJlbmRlcmVkJiZ0aGlzLm9wZW5lZH0sX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoYSl7cmV0dXJuIGE9PT1Sby5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFN9LF9jb21wdXRlSXNJbnZhbGlkU2VhcmNoUmVzdWx0cyhhKXtyZXR1cm4gYS50eXBlPT09Um8uQ2F0ZWdvcnlUeXBlLlNFQVJDSF9SRVNVTFRTJiYKIWEudmFsaWRSZWdleH0sX2NvbXB1dGVJc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5KGEpe3JldHVybiBhLnR5cGU9PT1Sby5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFMmJmEudW5pdmVyc2FsUmVnZXh9LF9pc0NvbXBvc2l0ZVNlYXJjaCgpe2NvbnN0IHt0eXBlOmEsY29tcG9zaXRlU2VhcmNoOmN9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIGMmJmE9PT1Sby5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFN9LHJlYWR5KCl7dGhpcy5fc2V0T3BlbmVkKG51bGw9PXRoaXMuaW5pdGlhbE9wZW5lZD8hMDp0aGlzLmluaXRpYWxPcGVuZWQpO3RoaXMuX2xpbWl0TGlzdGVuZXI9KCk9Pnt0aGlzLnNldCgiX2xpbWl0IixXby5nZXRMaW1pdCgpKX07V28uYWRkTGltaXRMaXN0ZW5lcih0aGlzLl9saW1pdExpc3RlbmVyKTt0aGlzLl9saW1pdExpc3RlbmVyKCl9LGRldGFjaGVkKCl7V28ucmVtb3ZlTGltaXRMaXN0ZW5lcih0aGlzLl9saW1pdExpc3RlbmVyKX0sX3VwZGF0ZVJlbmRlcmVkSXRlbXMoYSwKYyxkLGYsZyxsKXthJiYoYT1NYXRoLmZsb29yKGYvZCksYz10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSx0aGlzLnVwZGF0ZURvbShsP2M6Yy5zbGljZShhKmQsKGErMSkqZCksdGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpKX0sX2xpbWl0Q2hhbmdlZChhKXt0aGlzLnNldENhY2hlU2l6ZSgyKmEpfSxfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCgpe3RoaXMuc2V0R2V0SXRlbUtleSh0aGlzLmdldENhdGVnb3J5SXRlbUtleSl9LF9jb21wdXRlQ3VycmVudFBhZ2UoYSxjKXtyZXR1cm4gTWF0aC5mbG9vcihjL2EpKzF9LF9jb21wdXRlUGFnZUNvdW50KGEsYyl7cmV0dXJuIHRoaXMuY2F0ZWdvcnk/TWF0aC5jZWlsKHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RoL2MpOjB9LF9jb21wdXRlTXVsdGlwbGVQYWdlc0V4aXN0KGEsYyl7cmV0dXJuIWMmJjE8YX0sX2NvbXB1dGVIYXNQcmV2aW91c1BhZ2UoYSl7cmV0dXJuIDE8YX0sX2NvbXB1dGVIYXNOZXh0UGFnZShhLGMpe3JldHVybiBhPGN9LApfY29tcHV0ZUlucHV0V2lkdGgoYSl7cmV0dXJuYGNhbGMoJHthLnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfSxfc2V0QWN0aXZlSW5kZXgoYSl7Y29uc3QgYz0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO2E+YyYmKGE9Yyk7MD5hJiYoYT0wKTt0aGlzLnNldCgiX2FjdGl2ZUluZGV4IixhKX0sX2NsYW1wQWN0aXZlSW5kZXgoKXt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9hY3RpdmVJbmRleCl9LF9wZXJmb3JtUHJldmlvdXNQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgtdGhpcy5fbGltaXQpfSxfcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfSxfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKGEsYyxkKXtyZXR1cm4gYT9jOmQudG9TdHJpbmcoKX0sX2hhbmRsZVBhZ2VJbnB1dEV2ZW50KGEpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLGEudGFyZ2V0LnZhbHVlKTsKYT1hLnRhcmdldC52YWx1ZUFzTnVtYmVyO2lzTmFOKGEpfHx0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCooTWF0aC5tYXgoMSxNYXRoLm1pbihhLHRoaXMuX3BhZ2VDb3VudCkpLTEpKX0sX2hhbmRsZVBhZ2VDaGFuZ2VFdmVudCgpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHRoaXMuX2N1cnJlbnRQYWdlLnRvU3RyaW5nKCkpfSxfaGFuZGxlUGFnZUZvY3VzRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0aGlzLl9wYWdlSW5wdXRWYWx1ZSk7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMCl9LF9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9LF91cGRhdGVQYWdlSW5wdXRWYWx1ZShhKXtjb25zdCBjPXRoaXMuJCQoIiNwYWdlLWlucHV0IGlucHV0Iik7YyYmKGMudmFsdWU9YSl9LF91cGRhdGVJbnB1dFdpZHRoKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3LXBhZ2UtaW5wdXQtd2lkdGgiOnRoaXMuX2lucHV0V2lkdGh9KX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1kaWFsb2ctYmVoYXZpb3IvcGFwZXItZGlhbG9nLWJlaGF2aW9yLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lci5QYXBlckRpYWxvZ0JlaGF2aW9ySW1wbD17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrO3RoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXk7dGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3A7dGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oYSxjKXtjJiYoYT8odGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrPQp0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLndpdGhCYWNrZHJvcD10aGlzLm5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oYSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8Cnt9O3RoaXMuY2xvc2luZ1JlYXNvbi5jb25maXJtZWQ9YX0sX29uRGlhbG9nQ2xpY2s6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPVBvbHltZXIuZG9tKGEpLnBhdGgsZD0wLGY9Yy5pbmRleE9mKHRoaXMpO2Q8ZjtkKyspe3ZhciBnPWNbZF07aWYoZy5oYXNBdHRyaWJ1dGUmJihnLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWRpc21pc3MiKXx8Zy5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpKXt0aGlzLl91cGRhdGVDbG9zaW5nUmVhc29uQ29uZmlybWVkKGcuaGFzQXR0cmlidXRlKCJkaWFsb2ctY29uZmlybSIpKTt0aGlzLmNsb3NlKCk7YS5zdG9wUHJvcGFnYXRpb24oKTticmVha319fX07UG9seW1lci5QYXBlckRpYWxvZ0JlaGF2aW9yPVtQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3IsUG9seW1lci5QYXBlckRpYWxvZ0JlaGF2aW9ySW1wbF19KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLWRpYWxvZy9wYXBlci1kaWFsb2cuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItZGlhbG9nIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvcixQb2x5bWVyLk5lb25BbmltYXRpb25SdW5uZXJCZWhhdmlvcl0sbGlzdGVuZXJzOnsibmVvbi1hbmltYXRpb24tZmluaXNoIjoiX29uTmVvbkFuaW1hdGlvbkZpbmlzaCJ9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpO3RoaXMucGxheUFuaW1hdGlvbigiZW50cnkiKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCk7dGhpcy5wbGF5QW5pbWF0aW9uKCJleGl0Iil9LF9vbk5lb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX19KTsKCi8vIGh0dHBzOi8vZDNqcy5vcmcgdjUuNy4wIENvcHlyaWdodCAyMDE4IE1pa2UgQm9zdG9jawohZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP24oZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sbik6bih0LmQzPXQuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn1mdW5jdGlvbiBlKHQpe3ZhciBlO3JldHVybiAxPT09dC5sZW5ndGgmJihlPXQsdD1mdW5jdGlvbih0LHIpe3JldHVybiBuKGUodCkscil9KSx7bGVmdDpmdW5jdGlvbihuLGUscixpKXtmb3IobnVsbD09ciYmKHI9MCksbnVsbD09aSYmKGk9bi5sZW5ndGgpO3I8aTspe3ZhciBvPXIraT4+PjE7dChuW29dLGUpPDA/cj1vKzE6aT1vfXJldHVybiByfSxyaWdodDpmdW5jdGlvbihuLGUscixpKXtmb3IobnVsbD09ciYmKHI9MCksbnVsbD09aSYmKGk9bi5sZW5ndGgpO3I8aTspe3ZhciBvPXIraT4+PjE7dChuW29dLGUpPjA/aT1vOnI9bysxfXJldHVybiByfX19dmFyIHI9ZShuKSxpPXIucmlnaHQsbz1yLmxlZnQ7ZnVuY3Rpb24gYSh0LG4pe3JldHVyblt0LG5dfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBmKHQsbil7dmFyIGUscixpPXQubGVuZ3RoLG89MCxhPS0xLGY9MCxjPTA7aWYobnVsbD09bilmb3IoOysrYTxpOylpc05hTihlPXUodFthXSkpfHwoYys9KHI9ZS1mKSooZS0oZis9ci8rK28pKSk7ZWxzZSBmb3IoOysrYTxpOylpc05hTihlPXUobih0W2FdLGEsdCkpKXx8KGMrPShyPWUtZikqKGUtKGYrPXIvKytvKSkpO2lmKG8+MSlyZXR1cm4gYy8oby0xKX1mdW5jdGlvbiBjKHQsbil7dmFyIGU9Zih0LG4pO3JldHVybiBlP01hdGguc3FydChlKTplfWZ1bmN0aW9uIHModCxuKXt2YXIgZSxyLGksbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PW4pe2Zvcig7KythPG87KWlmKG51bGwhPShlPXRbYV0pJiZlPj1lKWZvcihyPWk9ZTsrK2E8bzspbnVsbCE9KGU9dFthXSkmJihyPmUmJihyPWUpLGk8ZSYmKGk9ZSkpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KGU9bih0W2FdLGEsdCkpJiZlPj1lKWZvcihyPWk9ZTsrK2E8bzspbnVsbCE9KGU9bih0W2FdLGEsdCkpJiYocj5lJiYocj1lKSxpPGUmJihpPWUpKTtyZXR1cm5bcixpXX12YXIgbD1BcnJheS5wcm90b3R5cGUsaD1sLnNsaWNlLGQ9bC5tYXA7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdih0KXtyZXR1cm4gdH1mdW5jdGlvbiBnKHQsbixlKXt0PSt0LG49K24sZT0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhuPXQsdD0wLDEpOmk8Mz8xOitlO2Zvcih2YXIgcj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKG4tdCkvZSkpLG89bmV3IEFycmF5KGkpOysrcjxpOylvW3JdPXQrciplO3JldHVybiBvfXZhciB5PU1hdGguc3FydCg1MCksXz1NYXRoLnNxcnQoMTApLGI9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIG0odCxuLGUpe3ZhciByLGksbyxhLHU9LTE7aWYoZT0rZSwodD0rdCk9PT0obj0rbikmJmU+MClyZXR1cm5bdF07aWYoKHI9bjx0KSYmKGk9dCx0PW4sbj1pKSwwPT09KGE9eCh0LG4sZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcih0PU1hdGguY2VpbCh0L2EpLG49TWF0aC5mbG9vcihuL2EpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKG4tdCsxKSk7Kyt1PGk7KW9bdV09KHQrdSkqYTtlbHNlIGZvcih0PU1hdGguZmxvb3IodCphKSxuPU1hdGguY2VpbChuKmEpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtbisxKSk7Kyt1PGk7KW9bdV09KHQtdSkvYTtyZXR1cm4gciYmby5yZXZlcnNlKCksb31mdW5jdGlvbiB4KHQsbixlKXt2YXIgcj0obi10KS9NYXRoLm1heCgwLGUpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLG89ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49eT8xMDpvPj1fPzU6bz49Yj8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PXk/MTA6bz49Xz81Om8+PWI/MjoxKX1mdW5jdGlvbiB3KHQsbixlKXt2YXIgcj1NYXRoLmFicyhuLXQpL01hdGgubWF4KDAsZSksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLG89ci9pO3JldHVybiBvPj15P2kqPTEwOm8+PV8/aSo9NTpvPj1iJiYoaSo9Miksbjx0Py1pOml9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBBKHQsbixlKXtpZihudWxsPT1lJiYoZT11KSxyPXQubGVuZ3RoKXtpZigobj0rbik8PTB8fHI8MilyZXR1cm4rZSh0WzBdLDAsdCk7aWYobj49MSlyZXR1cm4rZSh0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqbixvPU1hdGguZmxvb3IoaSksYT0rZSh0W29dLG8sdCk7cmV0dXJuIGErKCtlKHRbbysxXSxvKzEsdCktYSkqKGktbyl9fWZ1bmN0aW9uIFQodCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1uKXtmb3IoOysrbzxpOylpZihudWxsIT0oZT10W29dKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT10W29dKSYmZT5yJiYocj1lKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShlPW4odFtvXSxvLHQpKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT1uKHRbb10sbyx0KSkmJmU+ciYmKHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTih0KXtmb3IodmFyIG4sZSxyLGk9dC5sZW5ndGgsbz0tMSxhPTA7KytvPGk7KWErPXRbb10ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKTstLWk+PTA7KWZvcihuPShyPXRbaV0pLmxlbmd0aDstLW4+PTA7KWVbLS1hXT1yW25dO3JldHVybiBlfWZ1bmN0aW9uIFModCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1uKXtmb3IoOysrbzxpOylpZihudWxsIT0oZT10W29dKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT10W29dKSYmcj5lJiYocj1lKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShlPW4odFtvXSxvLHQpKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT1uKHRbb10sbyx0KSkmJnI+ZSYmKHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRSh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgbj0tMSxlPVModCxrKSxyPW5ldyBBcnJheShlKTsrK248ZTspZm9yKHZhciBpLG89LTEsYT1yW25dPW5ldyBBcnJheShpKTsrK288aTspYVtvXT10W29dW25dO3JldHVybiByfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQubGVuZ3RofXZhciBDPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBQKHQpe3JldHVybiB0fXZhciB6PTEsUj0yLEw9MyxEPTQsVT0xZS02O2Z1bmN0aW9uIHEodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Ky41KSsiLDApIn1mdW5jdGlvbiBPKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0Ky41KSsiKSJ9ZnVuY3Rpb24gWSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBCKHQsbil7dmFyIGU9W10scj1udWxsLGk9bnVsbCxvPTYsYT02LHU9MyxmPXQ9PT16fHx0PT09RD8tMToxLGM9dD09PUR8fHQ9PT1SPyJ4IjoieSIscz10PT09enx8dD09PUw/cTpPO2Z1bmN0aW9uIGwobCl7dmFyIGg9bnVsbD09cj9uLnRpY2tzP24udGlja3MuYXBwbHkobixlKTpuLmRvbWFpbigpOnIsZD1udWxsPT1pP24udGlja0Zvcm1hdD9uLnRpY2tGb3JtYXQuYXBwbHkobixlKTpQOmkscD1NYXRoLm1heChvLDApK3Usdj1uLnJhbmdlKCksZz0rdlswXSsuNSx5PSt2W3YubGVuZ3RoLTFdKy41LF89KG4uYmFuZHdpZHRoP2Z1bmN0aW9uKHQpe3ZhciBuPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihuPU1hdGgucm91bmQobikpLGZ1bmN0aW9uKGUpe3JldHVybit0KGUpK259fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuK3Qobil9fSkobi5jb3B5KCkpLGI9bC5zZWxlY3Rpb24/bC5zZWxlY3Rpb24oKTpsLG09Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSkseD1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGgsbikub3JkZXIoKSx3PXguZXhpdCgpLE09eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEE9eC5zZWxlY3QoImxpbmUiKSxUPXguc2VsZWN0KCJ0ZXh0Iik7bT1tLm1lcmdlKG0uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLHg9eC5tZXJnZShNKSxBPUEubWVyZ2UoTS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGYqbykpLFQ9VC5tZXJnZShNLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsZipwKS5hdHRyKCJkeSIsdD09PXo/IjBlbSI6dD09PUw/IjAuNzFlbSI6IjAuMzJlbSIpKSxsIT09YiYmKG09bS50cmFuc2l0aW9uKGwpLHg9eC50cmFuc2l0aW9uKGwpLEE9QS50cmFuc2l0aW9uKGwpLFQ9VC50cmFuc2l0aW9uKGwpLHc9dy50cmFuc2l0aW9uKGwpLmF0dHIoIm9wYWNpdHkiLFUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9Xyh0KSk/cyh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxNLmF0dHIoIm9wYWNpdHkiLFUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gcyhuJiZpc0Zpbml0ZShuPW4odCkpP246Xyh0KSl9KSksdy5yZW1vdmUoKSxtLmF0dHIoImQiLHQ9PT1EfHx0PT1SP2E/Ik0iK2YqYSsiLCIrZysiSDAuNVYiK3krIkgiK2YqYToiTTAuNSwiK2crIlYiK3k6YT8iTSIrZysiLCIrZiphKyJWMC41SCIreSsiViIrZiphOiJNIitnKyIsMC41SCIreSkseC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiBzKF8odCkpfSksQS5hdHRyKGMrIjIiLGYqbyksVC5hdHRyKGMsZipwKS50ZXh0KGQpLGIuZmlsdGVyKFkpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLHQ9PT1SPyJzdGFydCI6dD09PUQ/ImVuZCI6Im1pZGRsZSIpLGIuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPV99KX1yZXR1cm4gbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gZT1DLmNhbGwoYXJndW1lbnRzKSxsfSxsLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9bXTpDLmNhbGwodCksbCk6ZS5zbGljZSgpfSxsLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOkMuY2FsbCh0KSxsKTpyJiZyLnNsaWNlKCl9LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGwpOml9LGwudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rdCxsKTpvfSxsLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsbCk6b30sbC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGwpOmF9LGwudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsbCk6dX0sbH12YXIgRj17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBJKCl7Zm9yKHZhciB0LG49MCxlPWFyZ3VtZW50cy5sZW5ndGgscj17fTtuPGU7KytuKXtpZighKHQ9YXJndW1lbnRzW25dKyIiKXx8dCBpbiByKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBIKHIpfWZ1bmN0aW9uIEgodCl7dGhpcy5fPXR9ZnVuY3Rpb24gaih0LG4pe2Zvcih2YXIgZSxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChlPXRbcl0pLm5hbWU9PT1uKXJldHVybiBlLnZhbHVlfWZ1bmN0aW9uIFgodCxuLGUpe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1uKXt0W3JdPUYsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWUmJnQucHVzaCh7bmFtZTpuLHZhbHVlOmV9KSx0fUgucHJvdG90eXBlPUkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpILG9uOmZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXRoaXMuXyxvPShyPWksKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtpZihlPj0wJiYobj10LnNsaWNlKGUrMSksdD10LnNsaWNlKDAsZSkpLHQmJiFyLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKSxhPS0xLHU9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1uJiYiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbik7Zm9yKDsrK2E8dTspaWYoZT0odD1vW2FdKS50eXBlKWlbZV09WChpW2VdLHQubmFtZSxuKTtlbHNlIGlmKG51bGw9PW4pZm9yKGUgaW4gaSlpW2VdPVgoaVtlXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8dTspaWYoKGU9KHQ9b1thXSkudHlwZSkmJihlPWooaVtlXSx0Lm5hbWUpKSlyZXR1cm4gZX0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LG49dGhpcy5fO2Zvcih2YXIgZSBpbiBuKXRbZV09bltlXS5zbGljZSgpO3JldHVybiBuZXcgSCh0KX0sY2FsbDpmdW5jdGlvbih0LG4pe2lmKChlPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGUscixpPW5ldyBBcnJheShlKSxvPTA7bzxlOysrbylpW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxlPShyPXRoaXMuX1t0XSkubGVuZ3RoO288ZTsrK28pcltvXS52YWx1ZS5hcHBseShuLGkpfSxhcHBseTpmdW5jdGlvbih0LG4sZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXS52YWx1ZS5hcHBseShuLGUpfX07dmFyIEc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFY9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkcseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiAkKHQpe3ZhciBuPXQrPSIiLGU9bi5pbmRleE9mKCI6Iik7cmV0dXJuIGU+PTAmJiJ4bWxucyIhPT0obj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLFYuaGFzT3duUHJvcGVydHkobik/e3NwYWNlOlZbbl0sbG9jYWw6dH06dH1mdW5jdGlvbiBXKHQpe3ZhciBuPSQodCk7cmV0dXJuKG4ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09RyYmbi5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Rz9uLmNyZWF0ZUVsZW1lbnQodCk6bi5jcmVhdGVFbGVtZW50TlMoZSx0KX19KShuKX1mdW5jdGlvbiBaKCl7fWZ1bmN0aW9uIFEodCl7cmV0dXJuIG51bGw9PXQ/WjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIEooKXtyZXR1cm5bXX1mdW5jdGlvbiBLKHQpe3JldHVybiBudWxsPT10P0o6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX12YXIgdHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIW50Lm1hdGNoZXMpe3ZhciBldD1udC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG50Lm1zTWF0Y2hlc1NlbGVjdG9yfHxudC5tb3pNYXRjaGVzU2VsZWN0b3J8fG50Lm9NYXRjaGVzU2VsZWN0b3I7dHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV0LmNhbGwodGhpcyx0KX19fX12YXIgcnQ9dHQ7ZnVuY3Rpb24gaXQodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gb3QodCxuKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPW59b3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvdCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LG4pfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgYXQ9IiQiO2Z1bmN0aW9uIHV0KHQsbixlLHIsaSxvKXtmb3IodmFyIGEsdT0wLGY9bi5sZW5ndGgsYz1vLmxlbmd0aDt1PGM7Kyt1KShhPW5bdV0pPyhhLl9fZGF0YV9fPW9bdV0sclt1XT1hKTplW3VdPW5ldyBvdCh0LG9bdV0pO2Zvcig7dTxmOysrdSkoYT1uW3VdKSYmKGlbdV09YSl9ZnVuY3Rpb24gZnQodCxuLGUscixpLG8sYSl7dmFyIHUsZixjLHM9e30sbD1uLmxlbmd0aCxoPW8ubGVuZ3RoLGQ9bmV3IEFycmF5KGwpO2Zvcih1PTA7dTxsOysrdSkoZj1uW3VdKSYmKGRbdV09Yz1hdCthLmNhbGwoZixmLl9fZGF0YV9fLHUsbiksYyBpbiBzP2lbdV09ZjpzW2NdPWYpO2Zvcih1PTA7dTxoOysrdSkoZj1zW2M9YXQrYS5jYWxsKHQsb1t1XSx1LG8pXSk/KHJbdV09ZixmLl9fZGF0YV9fPW9bdV0sc1tjXT1udWxsKTplW3VdPW5ldyBvdCh0LG9bdV0pO2Zvcih1PTA7dTxsOysrdSkoZj1uW3VdKSYmc1tkW3VdXT09PWYmJihpW3VdPWYpfWZ1bmN0aW9uIGN0KHQsbil7cmV0dXJuIHQ8bj8tMTp0Pm4/MTp0Pj1uPzA6TmFOfWZ1bmN0aW9uIHN0KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBsdCh0LG4pe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUobil8fHN0KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBwdCh0KX1mdW5jdGlvbiBwdCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9aHQodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB2dCh0LG4pe2Zvcih2YXIgZT1kdCh0KSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUuYWRkKG5bcl0pfWZ1bmN0aW9uIGd0KHQsbil7Zm9yKHZhciBlPWR0KHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5yZW1vdmUobltyXSl9ZnVuY3Rpb24geXQoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIF90KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gYnQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbXQoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiB4dCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHd0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTXQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gQXQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9cHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgVHQ9e307KHQuZXZlbnQ9bnVsbCwidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KSYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoVHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO2Z1bmN0aW9uIE50KHQsbixlKXtyZXR1cm4gdD1TdCh0LG4sZSksZnVuY3Rpb24obil7dmFyIGU9bi5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFN0KG4sZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89dC5ldmVudDt0LmV2ZW50PWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxyKX1maW5hbGx5e3QuZXZlbnQ9b319fWZ1bmN0aW9uIEV0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMuX19vbjtpZihuKXtmb3IodmFyIGUscj0wLGk9LTEsbz1uLmxlbmd0aDtyPG87KytyKWU9bltyXSx0LnR5cGUmJmUudHlwZSE9PXQudHlwZXx8ZS5uYW1lIT09dC5uYW1lP25bKytpXT1lOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLnR5cGUsZS5saXN0ZW5lcixlLmNhcHR1cmUpOysraT9uLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBrdCh0LG4sZSl7dmFyIHI9VHQuaGFzT3duUHJvcGVydHkodC50eXBlKT9OdDpTdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciB1LGY9dGhpcy5fX29uLGM9cihuLG8sYSk7aWYoZilmb3IodmFyIHM9MCxsPWYubGVuZ3RoO3M8bDsrK3MpaWYoKHU9ZltzXSkudHlwZT09PXQudHlwZSYmdS5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodS50eXBlLHUubGlzdGVuZXIsdS5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIodS50eXBlLHUubGlzdGVuZXI9Yyx1LmNhcHR1cmU9ZSksdm9pZCh1LnZhbHVlPW4pO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxlKSx1PXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTpuLGxpc3RlbmVyOmMsY2FwdHVyZTplfSxmP2YucHVzaCh1KTp0aGlzLl9fb249W3VdfX1mdW5jdGlvbiBDdChuLGUscixpKXt2YXIgbz10LmV2ZW50O24uc291cmNlRXZlbnQ9dC5ldmVudCx0LmV2ZW50PW47dHJ5e3JldHVybiBlLmFwcGx5KHIsaSl9ZmluYWxseXt0LmV2ZW50PW99fWZ1bmN0aW9uIFB0KHQsbixlKXt2YXIgcj1zdCh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShuLGUpOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZT8oaS5pbml0RXZlbnQobixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlKSxpLmRldGFpbD1lLmRldGFpbCk6aS5pbml0RXZlbnQobiwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX12YXIgenQ9W251bGxdO2Z1bmN0aW9uIFJ0KHQsbil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1ufWZ1bmN0aW9uIEx0KCl7cmV0dXJuIG5ldyBSdChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHp0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFJ0KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgUnQoW1t0XV0senQpfVJ0LnByb3RvdHlwZT1MdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJ0LHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9USh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhLHU9bltpXSxmPXUubGVuZ3RoLGM9cltpXT1uZXcgQXJyYXkoZikscz0wO3M8ZjsrK3MpKG89dVtzXSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18scyx1KSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1tzXT1hKTtyZXR1cm4gbmV3IFJ0KHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Syh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9W10saT1bXSxvPTA7bzxlOysrbylmb3IodmFyIGEsdT1uW29dLGY9dS5sZW5ndGgsYz0wO2M8ZjsrK2MpKGE9dVtjXSkmJihyLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHUpKSxpLnB1c2goYSkpO3JldHVybiBuZXcgUnQocixpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ydCh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhPW5baV0sdT1hLmxlbmd0aCxmPXJbaV09W10sYz0wO2M8dTsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmZi5wdXNoKG8pO3JldHVybiBuZXcgUnQocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSkscz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7cFsrK3NdPXR9KSxwO3ZhciBlLHI9bj9mdDp1dCxpPXRoaXMuX3BhcmVudHMsbz10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihlPXQsdD1mdW5jdGlvbigpe3JldHVybiBlfSk7Zm9yKHZhciBhPW8ubGVuZ3RoLHU9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKXt2YXIgbD1pW3NdLGg9b1tzXSxkPWgubGVuZ3RoLHA9dC5jYWxsKGwsbCYmbC5fX2RhdGFfXyxzLGkpLHY9cC5sZW5ndGgsZz1mW3NdPW5ldyBBcnJheSh2KSx5PXVbc109bmV3IEFycmF5KHYpO3IobCxoLGcseSxjW3NdPW5ldyBBcnJheShkKSxwLG4pO2Zvcih2YXIgXyxiLG09MCx4PTA7bTx2OysrbSlpZihfPWdbbV0pe2ZvcihtPj14JiYoeD1tKzEpOyEoYj15W3hdKSYmKyt4PHY7KTtfLl9uZXh0PWJ8fG51bGx9fXJldHVybih1PW5ldyBSdCh1LGkpKS5fZW50ZXI9Zix1Ll9leGl0PWMsdX0sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJ0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKGl0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgUnQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChpdCksdGhpcy5fcGFyZW50cyl9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSxhPW5ldyBBcnJheShyKSx1PTA7dTxvOysrdSlmb3IodmFyIGYsYz1uW3VdLHM9ZVt1XSxsPWMubGVuZ3RoLGg9YVt1XT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpKGY9Y1tkXXx8c1tkXSkmJihoW2RdPWYpO2Zvcig7dTxyOysrdSlhW3VdPW5bdV07cmV0dXJuIG5ldyBSdChhLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0tMSxlPXQubGVuZ3RoOysrbjxlOylmb3IodmFyIHIsaT10W25dLG89aS5sZW5ndGgtMSxhPWlbb107LS1vPj0wOykocj1pW29dKSYmKGEmJmEhPT1yLm5leHRTaWJsaW5nJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsYSksYT1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4sZSl7cmV0dXJuIG4mJmU/dChuLl9fZGF0YV9fLGUuX19kYXRhX18pOiFuLSFlfXR8fCh0PWN0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgYSx1PWVbb10sZj11Lmxlbmd0aCxjPWlbb109bmV3IEFycmF5KGYpLHM9MDtzPGY7KytzKShhPXVbc10pJiYoY1tzXT1hKTtjLnNvcnQobil9cmV0dXJuIG5ldyBSdChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxuPS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0Wysrbl09dGhpc30pLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49MCxlPXQubGVuZ3RoO248ZTsrK24pZm9yKHZhciByPXRbbl0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIGE9cltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPTAscj1uLmxlbmd0aDtlPHI7KytlKWZvcih2YXIgaSxvPW5bZV0sYT0wLHU9by5sZW5ndGg7YTx1OysrYSkoaT1vW2FdKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsbil7dmFyIGU9JCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2UubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fToiZnVuY3Rpb24iPT10eXBlb2Ygbj9lLmxvY2FsP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19OmUubG9jYWw/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19KShlLG4pKX0sc3R5bGU6ZnVuY3Rpb24odCxuLGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1uP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fToiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLGUpfX06ZnVuY3Rpb24odCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLGUpfX0pKHQsbixudWxsPT1lPyIiOmUpKTpsdCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bj9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19OiJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPWV9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09bn19KSh0LG4pKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LG4pe3ZhciBlPWh0KHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPWR0KHRoaXMubm9kZSgpKSxpPS0xLG89ZS5sZW5ndGg7KytpPG87KWlmKCFyLmNvbnRhaW5zKGVbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7KG4uYXBwbHkodGhpcyxhcmd1bWVudHMpP3Z0Omd0KSh0aGlzLHQpfX06bj9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2dCh0aGlzLHQpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Z3QodGhpcyx0KX19KShlLG4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD95dDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1uPyIiOm59fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P190OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1uPyIiOm59fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX0pKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChidCl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChtdCl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbih0LG4pe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Vyh0KSxyPW51bGw9PW4/eHQ6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRKG4pO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh3dCl9LGNsb25lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P0F0Ok10KX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKG49dC5zbGljZShlKzEpLHQ9dC5zbGljZSgwLGUpKSx7dHlwZTp0LG5hbWU6bn19KX0odCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2Zvcih1PW4/a3Q6RXQsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPGE7KytyKXRoaXMuZWFjaCh1KG9bcl0sbixlKSk7cmV0dXJuIHRoaXN9dmFyIHU9dGhpcy5ub2RlKCkuX19vbjtpZih1KWZvcih2YXIgZixjPTAscz11Lmxlbmd0aDtjPHM7KytjKWZvcihyPTAsZj11W2NdO3I8YTsrK3IpaWYoKGk9b1tyXSkudHlwZT09PWYudHlwZSYmaS5uYW1lPT09Zi5uYW1lKXJldHVybiBmLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFB0KHRoaXMsdCxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBQdCh0aGlzLHQsbil9fSkodCxuKSl9fTt2YXIgVXQ9MDtmdW5jdGlvbiBxdCgpe3JldHVybiBuZXcgT3R9ZnVuY3Rpb24gT3QoKXt0aGlzLl89IkAiKygrK1V0KS50b1N0cmluZygzNil9ZnVuY3Rpb24gWXQoKXtmb3IodmFyIG4sZT10LmV2ZW50O249ZS5zb3VyY2VFdmVudDspZT1uO3JldHVybiBlfWZ1bmN0aW9uIEJ0KHQsbil7dmFyIGU9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiByLng9bi5jbGllbnRYLHIueT1uLmNsaWVudFksWyhyPXIubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxyLnldfXZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW24uY2xpZW50WC1pLmxlZnQtdC5jbGllbnRMZWZ0LG4uY2xpZW50WS1pLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gRnQodCl7dmFyIG49WXQoKTtyZXR1cm4gbi5jaGFuZ2VkVG91Y2hlcyYmKG49bi5jaGFuZ2VkVG91Y2hlc1swXSksQnQodCxuKX1mdW5jdGlvbiBJdCh0LG4sZSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoZT1uLG49WXQoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxvPW4/bi5sZW5ndGg6MDtpPG87KytpKWlmKChyPW5baV0pLmlkZW50aWZpZXI9PT1lKXJldHVybiBCdCh0LHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEh0KCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBqdCgpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFh0KHQpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9RHQodCkub24oImRyYWdzdGFydC5kcmFnIixqdCwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gbj9lLm9uKCJzZWxlY3RzdGFydC5kcmFnIixqdCwhMCk6KG4uX19ub3NlbGVjdD1uLnN0eWxlLk1velVzZXJTZWxlY3Qsbi5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gR3QodCxuKXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPUR0KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7biYmKHIub24oImNsaWNrLmRyYWciLGp0LCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBlP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihlLnN0eWxlLk1velVzZXJTZWxlY3Q9ZS5fX25vc2VsZWN0LGRlbGV0ZSBlLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFZ0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiAkdCh0LG4sZSxyLGksbyxhLHUsZixjKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMuc3ViamVjdD1lLHRoaXMuaWRlbnRpZmllcj1yLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD11LHRoaXMuZHk9Zix0aGlzLl89Y31mdW5jdGlvbiBXdCgpe3JldHVybiF0LmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBadCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gUXQobil7cmV0dXJuIG51bGw9PW4/e3g6dC5ldmVudC54LHk6dC5ldmVudC55fTpufWZ1bmN0aW9uIEp0KCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEt0KHQsbixlKXt0LnByb3RvdHlwZT1uLnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiB0bih0LG4pe3ZhciBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX1mdW5jdGlvbiBubigpe31PdC5wcm90b3R5cGU9cXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPdCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuXzshKG4gaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtuXX0sc2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbdGhpcy5fXT1ufSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSwkdC5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgZW49IlxccyooWystXT9cXGQrKVxccyoiLHJuPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG9uPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixhbj0vXiMoWzAtOWEtZl17M30pJC8sdW49L14jKFswLTlhLWZdezZ9KSQvLGZuPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tlbixlbixlbl0rIlxcKSQiKSxjbj1uZXcgUmVnRXhwKCJecmdiXFwoIitbb24sb24sb25dKyJcXCkkIiksc249bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tlbixlbixlbixybl0rIlxcKSQiKSxsbj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW29uLG9uLG9uLHJuXSsiXFwpJCIpLGhuPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tybixvbixvbl0rIlxcKSQiKSxkbj1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3JuLG9uLG9uLHJuXSsiXFwpJCIpLHBuPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHZuKHQpe3ZhciBuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobj1hbi5leGVjKHQpKT9uZXcgbW4oKG49cGFyc2VJbnQoblsxXSwxNikpPj44JjE1fG4+PjQmMjQwLG4+PjQmMTV8MjQwJm4sKDE1Jm4pPDw0fDE1Jm4sMSk6KG49dW4uZXhlYyh0KSk/Z24ocGFyc2VJbnQoblsxXSwxNikpOihuPWZuLmV4ZWModCkpP25ldyBtbihuWzFdLG5bMl0sblszXSwxKToobj1jbi5leGVjKHQpKT9uZXcgbW4oMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsMSk6KG49c24uZXhlYyh0KSk/eW4oblsxXSxuWzJdLG5bM10sbls0XSk6KG49bG4uZXhlYyh0KSk/eW4oMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsbls0XSk6KG49aG4uZXhlYyh0KSk/d24oblsxXSxuWzJdLzEwMCxuWzNdLzEwMCwxKToobj1kbi5leGVjKHQpKT93bihuWzFdLG5bMl0vMTAwLG5bM10vMTAwLG5bNF0pOnBuLmhhc093blByb3BlcnR5KHQpP2duKHBuW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgbW4oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBnbih0KXtyZXR1cm4gbmV3IG1uKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB5bih0LG4sZSxyKXtyZXR1cm4gcjw9MCYmKHQ9bj1lPU5hTiksbmV3IG1uKHQsbixlLHIpfWZ1bmN0aW9uIF9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbm58fCh0PXZuKHQpKSx0P25ldyBtbigodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgbW59ZnVuY3Rpb24gYm4odCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP19uKHQpOm5ldyBtbih0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gbW4odCxuLGUscil7dGhpcy5yPSt0LHRoaXMuZz0rbix0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHhuKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gd24odCxuLGUscil7cmV0dXJuIHI8PTA/dD1uPWU9TmFOOmU8PTB8fGU+PTE/dD1uPU5hTjpuPD0wJiYodD1OYU4pLG5ldyBBbih0LG4sZSxyKX1mdW5jdGlvbiBNbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEFuKXJldHVybiBuZXcgQW4odC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygbm58fCh0PXZuKHQpKSwhdClyZXR1cm4gbmV3IEFuO2lmKHQgaW5zdGFuY2VvZiBBbilyZXR1cm4gdDt2YXIgbj0odD10LnJnYigpKS5yLzI1NSxlPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4obixlLHIpLG89TWF0aC5tYXgobixlLHIpLGE9TmFOLHU9by1pLGY9KG8raSkvMjtyZXR1cm4gdT8oYT1uPT09bz8oZS1yKS91KzYqKGU8cik6ZT09PW8/KHItbikvdSsyOihuLWUpL3UrNCx1Lz1mPC41P28raToyLW8taSxhKj02MCk6dT1mPjAmJmY8MT8wOmEsbmV3IEFuKGEsdSxmLHQub3BhY2l0eSl9KHQpOm5ldyBBbih0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gQW4odCxuLGUscil7dGhpcy5oPSt0LHRoaXMucz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFRuKHQsbixlKXtyZXR1cm4gMjU1Kih0PDYwP24rKGUtbikqdC82MDp0PDE4MD9lOnQ8MjQwP24rKGUtbikqKDI0MC10KS82MDpuKX1LdChubix2bix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5oZXgoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn19KSxLdChtbixibix0bihubix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IG1uKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBtbih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpmdW5jdGlvbigpe3JldHVybiIjIit4bih0aGlzLnIpK3huKHRoaXMuZykreG4odGhpcy5iKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksS3QoQW4sTW4sdG4obm4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBBbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBBbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksbj1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxyPWUrKGU8LjU/ZToxLWUpKm4saT0yKmUtcjtyZXR1cm4gbmV3IG1uKFRuKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLFRuKHQsaSxyKSxUbih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgTm49TWF0aC5QSS8xODAsU249MTgwL01hdGguUEksRW49Ljk2NDIyLGtuPTEsQ249LjgyNTIxLFBuPTQvMjksem49Ni8yOSxSbj0zKnpuKnpuLExuPXpuKnpuKnpuO2Z1bmN0aW9uIERuKHQpe2lmKHQgaW5zdGFuY2VvZiBxbilyZXR1cm4gbmV3IHFuKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGpuKXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgcW4odC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBuPXQuaCpObjtyZXR1cm4gbmV3IHFuKHQubCxNYXRoLmNvcyhuKSp0LmMsTWF0aC5zaW4obikqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIG1ufHwodD1fbih0KSk7dmFyIGUscixpPUZuKHQuciksbz1Gbih0LmcpLGE9Rm4odC5iKSx1PU9uKCguMjIyNTA0NSppKy43MTY4Nzg2Km8rLjA2MDYxNjkqYSkva24pO3JldHVybiBpPT09byYmbz09PWE/ZT1yPXU6KGU9T24oKC40MzYwNzQ3KmkrLjM4NTA2NDkqbysuMTQzMDgwNCphKS9Fbikscj1PbigoLjAxMzkzMjIqaSsuMDk3MTA0NSpvKy43MTQxNzMzKmEpL0NuKSksbmV3IHFuKDExNip1LTE2LDUwMCooZS11KSwyMDAqKHUtciksdC5vcGFjaXR5KX1mdW5jdGlvbiBVbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RG4odCk6bmV3IHFuKHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBxbih0LG4sZSxyKXt0aGlzLmw9K3QsdGhpcy5hPStuLHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gT24odCl7cmV0dXJuIHQ+TG4/TWF0aC5wb3codCwxLzMpOnQvUm4rUG59ZnVuY3Rpb24gWW4odCl7cmV0dXJuIHQ+em4/dCp0KnQ6Um4qKHQtUG4pfWZ1bmN0aW9uIEJuKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gRm4odCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gSW4odCl7aWYodCBpbnN0YW5jZW9mIGpuKXJldHVybiBuZXcgam4odC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcW58fCh0PURuKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgam4oTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIG49TWF0aC5hdGFuMih0LmIsdC5hKSpTbjtyZXR1cm4gbmV3IGpuKG48MD9uKzM2MDpuLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEhuKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Jbih0KTpuZXcgam4odCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGpuKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLmM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1LdChxbixVbix0bihubix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxbih0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHFuKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LG49aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxlPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBtbihCbigzLjEzMzg1NjEqKG49RW4qWW4obikpLTEuNjE2ODY2NyoodD1rbipZbih0KSktLjQ5MDYxNDYqKGU9Q24qWW4oZSkpKSxCbigtLjk3ODc2ODQqbisxLjkxNjE0MTUqdCsuMDMzNDU0KmUpLEJuKC4wNzE5NDUzKm4tLjIyODk5MTQqdCsxLjQwNTI0MjcqZSksdGhpcy5vcGFjaXR5KX19KSksS3Qoam4sSG4sdG4obm4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgam4odGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqbih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBEbih0aGlzKS5yZ2IoKX19KSk7dmFyIFhuPS0uMTQ4NjEsR249MS43ODI3NyxWbj0tLjI5MjI3LCRuPS0uOTA2NDksV249MS45NzI5NCxabj1XbiokbixRbj1XbipHbixKbj1HbipWbi0kbipYbjtmdW5jdGlvbiBLbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHRlKXJldHVybiBuZXcgdGUodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgbW58fCh0PV9uKHQpKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT0oSm4qcitabipuLVFuKmUpLyhKbitabi1Rbiksbz1yLWksYT0oV24qKGUtaSktVm4qbykvJG4sdT1NYXRoLnNxcnQoYSphK28qbykvKFduKmkqKDEtaSkpLGY9dT9NYXRoLmF0YW4yKGEsbykqU24tMTIwOk5hTjtyZXR1cm4gbmV3IHRlKGY8MD9mKzM2MDpmLHUsaSx0Lm9wYWNpdHkpfSh0KTpuZXcgdGUodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHRlKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBuZSh0LG4sZSxyLGkpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSpuKyg0LTYqbyszKmEpKmUrKDErMyp0KzMqby0zKmEpKnIrYSppKS82fWZ1bmN0aW9uIGVlKHQpe3ZhciBuPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWU8PTA/ZT0wOmU+PTE/KGU9MSxuLTEpOk1hdGguZmxvb3IoZSpuKSxpPXRbcl0sbz10W3IrMV0sYT1yPjA/dFtyLTFdOjIqaS1vLHU9cjxuLTE/dFtyKzJdOjIqby1pO3JldHVybiBuZSgoZS1yL24pKm4sYSxpLG8sdSl9fWZ1bmN0aW9uIHJlKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqbiksaT10WyhyK24tMSklbl0sbz10W3Ilbl0sYT10WyhyKzEpJW5dLHU9dFsocisyKSVuXTtyZXR1cm4gbmUoKGUtci9uKSpuLGksbyxhLHUpfX1mdW5jdGlvbiBpZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gb2UodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQrZSpufX1mdW5jdGlvbiBhZSh0LG4pe3ZhciBlPW4tdDtyZXR1cm4gZT9vZSh0LGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6aWUoaXNOYU4odCk/bjp0KX1mdW5jdGlvbiB1ZSh0KXtyZXR1cm4gMT09KHQ9K3QpP2ZlOmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGUtbj9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9TWF0aC5wb3codCxlKSxuPU1hdGgucG93KG4sZSktdCxlPTEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKm4sZSl9fShuLGUsdCk6aWUoaXNOYU4obik/ZTpuKX19ZnVuY3Rpb24gZmUodCxuKXt2YXIgZT1uLXQ7cmV0dXJuIGU/b2UodCxlKTppZShpc05hTih0KT9uOnQpfUt0KHRlLEtuLHRuKG5uLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgdGUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgdGUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKk5uLG49K3RoaXMubCxlPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqbiooMS1uKSxyPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBtbigyNTUqKG4rZSooWG4qcitHbippKSksMjU1KihuK2UqKFZuKnIrJG4qaSkpLDI1NSoobitlKihXbipyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIGNlPWZ1bmN0aW9uIHQobil7dmFyIGU9dWUobik7ZnVuY3Rpb24gcih0LG4pe3ZhciByPWUoKHQ9Ym4odCkpLnIsKG49Ym4obikpLnIpLGk9ZSh0Lmcsbi5nKSxvPWUodC5iLG4uYiksYT1mZSh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQucj1yKG4pLHQuZz1pKG4pLHQuYj1vKG4pLHQub3BhY2l0eT1hKG4pLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlLHIsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSx1PW5ldyBBcnJheShpKTtmb3IoZT0wO2U8aTsrK2Upcj1ibihuW2VdKSxvW2VdPXIucnx8MCxhW2VdPXIuZ3x8MCx1W2VdPXIuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSx1PXQodSksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1vKHQpLHIuZz1hKHQpLHIuYj11KHQpLHIrIiJ9fX12YXIgbGU9c2UoZWUpLGhlPXNlKHJlKTtmdW5jdGlvbiBkZSh0LG4pe3ZhciBlLHI9bj9uLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxpOysrZSlvW2VdPW1lKHRbZV0sbltlXSk7Zm9yKDtlPHI7KytlKWFbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGU9MDtlPGk7KytlKWFbZV09b1tlXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gcGUodCxuKXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbi09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZS5zZXRUaW1lKHQrbipyKSxlfX1mdW5jdGlvbiB2ZSh0LG4pe3JldHVybiBuLT10PSt0LGZ1bmN0aW9uKGUpe3JldHVybiB0K24qZX19ZnVuY3Rpb24gZ2UodCxuKXt2YXIgZSxyPXt9LGk9e307Zm9yKGUgaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG58fChuPXt9KSxuKWUgaW4gdD9yW2VdPW1lKHRbZV0sbltlXSk6aVtlXT1uW2VdO3JldHVybiBmdW5jdGlvbih0KXtmb3IoZSBpbiByKWlbZV09cltlXSh0KTtyZXR1cm4gaX19dmFyIHllPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxfZT1uZXcgUmVnRXhwKHllLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIGJlKHQsbil7dmFyIGUscixpLG89eWUubGFzdEluZGV4PV9lLmxhc3RJbmRleD0wLGE9LTEsdT1bXSxmPVtdO2Zvcih0Kz0iIixuKz0iIjsoZT15ZS5leGVjKHQpKSYmKHI9X2UuZXhlYyhuKSk7KShpPXIuaW5kZXgpPm8mJihpPW4uc2xpY2UobyxpKSx1W2FdP3VbYV0rPWk6dVsrK2FdPWkpLChlPWVbMF0pPT09KHI9clswXSk/dVthXT91W2FdKz1yOnVbKythXT1yOih1WysrYV09bnVsbCxmLnB1c2goe2k6YSx4OnZlKGUscil9KSksbz1fZS5sYXN0SW5kZXg7cmV0dXJuIG88bi5sZW5ndGgmJihpPW4uc2xpY2UobyksdVthXT91W2FdKz1pOnVbKythXT1pKSx1Lmxlbmd0aDwyP2ZbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pKyIifX0oZlswXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KG4pOihuPWYubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTA7cjxuOysrcil1WyhlPWZbcl0pLmldPWUueCh0KTtyZXR1cm4gdS5qb2luKCIiKX0pfWZ1bmN0aW9uIG1lKHQsbil7dmFyIGUscj10eXBlb2YgbjtyZXR1cm4gbnVsbD09bnx8ImJvb2xlYW4iPT09cj9pZShuKTooIm51bWJlciI9PT1yP3ZlOiJzdHJpbmciPT09cj8oZT12bihuKSk/KG49ZSxjZSk6YmU6biBpbnN0YW5jZW9mIHZuP2NlOm4gaW5zdGFuY2VvZiBEYXRlP3BlOkFycmF5LmlzQXJyYXkobik/ZGU6ImZ1bmN0aW9uIiE9dHlwZW9mIG4udmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIG4udG9TdHJpbmd8fGlzTmFOKG4pP2dlOnZlKSh0LG4pfWZ1bmN0aW9uIHhlKHQsbil7cmV0dXJuIG4tPXQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQodCtuKmUpfX12YXIgd2UsTWUsQWUsVGUsTmU9MTgwL01hdGguUEksU2U9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gRWUodCxuLGUscixpLG8pe3ZhciBhLHUsZjtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K24qbikpJiYodC89YSxuLz1hKSwoZj10KmUrbipyKSYmKGUtPXQqZixyLT1uKmYpLCh1PU1hdGguc3FydChlKmUrcipyKSkmJihlLz11LHIvPXUsZi89dSksdCpyPG4qZSYmKHQ9LXQsbj0tbixmPS1mLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKG4sdCkqTmUsc2tld1g6TWF0aC5hdGFuKGYpKk5lLHNjYWxlWDphLHNjYWxlWTp1fX1mdW5jdGlvbiBrZSh0LG4sZSxyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgdT1bXSxmPVtdO3JldHVybiBvPXQobyksYT10KGEpLGZ1bmN0aW9uKHQscixpLG8sYSx1KXtpZih0IT09aXx8ciE9PW8pe3ZhciBmPWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxuLG51bGwsZSk7dS5wdXNoKHtpOmYtNCx4OnZlKHQsaSl9LHtpOmYtMix4OnZlKHIsbyl9KX1lbHNlKGl8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK2krbitvK2UpfShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksdSxmKSxmdW5jdGlvbih0LG4sZSxvKXt0IT09bj8odC1uPjE4MD9uKz0zNjA6bi10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOmUucHVzaChpKGUpKyJyb3RhdGUoIixudWxsLHIpLTIseDp2ZSh0LG4pfSkpOm4mJmUucHVzaChpKGUpKyJyb3RhdGUoIituK3IpfShvLnJvdGF0ZSxhLnJvdGF0ZSx1LGYpLGZ1bmN0aW9uKHQsbixlLG8pe3QhPT1uP28ucHVzaCh7aTplLnB1c2goaShlKSsic2tld1goIixudWxsLHIpLTIseDp2ZSh0LG4pfSk6biYmZS5wdXNoKGkoZSkrInNrZXdYKCIrbityKX0oby5za2V3WCxhLnNrZXdYLHUsZiksZnVuY3Rpb24odCxuLGUscixvLGEpe2lmKHQhPT1lfHxuIT09cil7dmFyIHU9by5wdXNoKGkobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTp1LTQseDp2ZSh0LGUpfSx7aTp1LTIseDp2ZShuLHIpfSl9ZWxzZSAxPT09ZSYmMT09PXJ8fG8ucHVzaChpKG8pKyJzY2FsZSgiK2UrIiwiK3IrIikiKX0oby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVksdSxmKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxyPWYubGVuZ3RoOysrZTxyOyl1WyhuPWZbZV0pLmldPW4ueCh0KTtyZXR1cm4gdS5qb2luKCIiKX19fXZhciBDZT1rZShmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P1NlOih3ZXx8KHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLE1lPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZT1kb2N1bWVudC5kZWZhdWx0Vmlldyksd2Uuc3R5bGUudHJhbnNmb3JtPXQsdD1BZS5nZXRDb21wdXRlZFN0eWxlKE1lLmFwcGVuZENoaWxkKHdlKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxNZS5yZW1vdmVDaGlsZCh3ZSksRWUoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksUGU9a2UoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/U2U6KFRlfHwoVGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksVGUuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PVRlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0VlKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOlNlKX0sIiwgIiwiKSIsIikiKSx6ZT1NYXRoLlNRUlQyLFJlPTIsTGU9NCxEZT0xZS0xMjtmdW5jdGlvbiBVZSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBxZSh0LG4pe3ZhciBlLHIsaT10WzBdLG89dFsxXSxhPXRbMl0sdT1uWzBdLGY9blsxXSxjPW5bMl0scz11LWksbD1mLW8saD1zKnMrbCpsO2lmKGg8RGUpcj1NYXRoLmxvZyhjL2EpL3plLGU9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCpzLG8rdCpsLGEqTWF0aC5leHAoemUqdCpyKV19O2Vsc2V7dmFyIGQ9TWF0aC5zcXJ0KGgpLHA9KGMqYy1hKmErTGUqaCkvKDIqYSpSZSpkKSx2PShjKmMtYSphLUxlKmgpLygyKmMqUmUqZCksZz1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApLHk9TWF0aC5sb2coTWF0aC5zcXJ0KHYqdisxKS12KTtyPSh5LWcpL3plLGU9ZnVuY3Rpb24odCl7dmFyIG4sZT10KnIsdT1VZShnKSxmPWEvKFJlKmQpKih1KihuPXplKmUrZywoKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krZipzLG8rZipsLGEqdS9VZSh6ZSplK2cpXX19cmV0dXJuIGUuZHVyYXRpb249MWUzKnIsZX1mdW5jdGlvbiBPZSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPU1uKG4pKS5oLChlPU1uKGUpKS5oKSxpPWZlKG4ucyxlLnMpLG89ZmUobi5sLGUubCksYT1mZShuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4ucz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fX12YXIgWWU9T2UoYWUpLEJlPU9lKGZlKTtmdW5jdGlvbiBGZSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPUhuKG4pKS5oLChlPUhuKGUpKS5oKSxpPWZlKG4uYyxlLmMpLG89ZmUobi5sLGUubCksYT1mZShuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4uYz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fX12YXIgSWU9RmUoYWUpLEhlPUZlKGZlKTtmdW5jdGlvbiBqZSh0KXtyZXR1cm4gZnVuY3Rpb24gbihlKXtmdW5jdGlvbiByKG4scil7dmFyIGk9dCgobj1LbihuKSkuaCwocj1LbihyKSkuaCksbz1mZShuLnMsci5zKSxhPWZlKG4ubCxyLmwpLHU9ZmUobi5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLmg9aSh0KSxuLnM9byh0KSxuLmw9YShNYXRoLnBvdyh0LGUpKSxuLm9wYWNpdHk9dSh0KSxuKyIifX1yZXR1cm4gZT0rZSxyLmdhbW1hPW4scn0oMSl9dmFyIFhlPWplKGFlKSxHZT1qZShmZSk7dmFyIFZlLCRlLFdlPTAsWmU9MCxRZT0wLEplPTFlMyxLZT0wLHRyPTAsbnI9MCxlcj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxycj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBpcigpe3JldHVybiB0cnx8KHJyKG9yKSx0cj1lci5ub3coKStucil9ZnVuY3Rpb24gb3IoKXt0cj0wfWZ1bmN0aW9uIGFyKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1cih0LG4sZSl7dmFyIHI9bmV3IGFyO3JldHVybiByLnJlc3RhcnQodCxuLGUpLHJ9ZnVuY3Rpb24gZnIoKXtpcigpLCsrV2U7Zm9yKHZhciB0LG49VmU7bjspKHQ9dHItbi5fdGltZSk+PTAmJm4uX2NhbGwuY2FsbChudWxsLHQpLG49bi5fbmV4dDstLVdlfWZ1bmN0aW9uIGNyKCl7dHI9KEtlPWVyLm5vdygpKStucixXZT1aZT0wO3RyeXtmcigpfWZpbmFsbHl7V2U9MCxmdW5jdGlvbigpe3ZhciB0LG4sZT1WZSxyPTEvMDtmb3IoO2U7KWUuX2NhbGw/KHI+ZS5fdGltZSYmKHI9ZS5fdGltZSksdD1lLGU9ZS5fbmV4dCk6KG49ZS5fbmV4dCxlLl9uZXh0PW51bGwsZT10P3QuX25leHQ9bjpWZT1uKTskZT10LGxyKHIpfSgpLHRyPTB9fWZ1bmN0aW9uIHNyKCl7dmFyIHQ9ZXIubm93KCksbj10LUtlO24+SmUmJihuci09bixLZT10KX1mdW5jdGlvbiBscih0KXtXZXx8KFplJiYoWmU9Y2xlYXJUaW1lb3V0KFplKSksdC10cj4yND8odDwxLzAmJihaZT1zZXRUaW1lb3V0KGNyLHQtZXIubm93KCktbnIpKSxRZSYmKFFlPWNsZWFySW50ZXJ2YWwoUWUpKSk6KFFlfHwoS2U9ZXIubm93KCksUWU9c2V0SW50ZXJ2YWwoc3IsSmUpKSxXZT0xLHJyKGNyKSkpfWZ1bmN0aW9uIGhyKHQsbixlKXt2YXIgcj1uZXcgYXI7cmV0dXJuIG49bnVsbD09bj8wOituLHIucmVzdGFydChmdW5jdGlvbihlKXtyLnN0b3AoKSx0KGUrbil9LG4sZSkscn1hci5wcm90b3R5cGU9dXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphcixyZXN0YXJ0OmZ1bmN0aW9uKHQsbixlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KG51bGw9PWU/aXIoKTorZSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8JGU9PT10aGlzfHwoJGU/JGUuX25leHQ9dGhpczpWZT10aGlzLCRlPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWUsbHIoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsbHIoKSl9fTt2YXIgZHI9SSgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxwcj1bXSx2cj0wLGdyPTEseXI9Mixfcj0zLGJyPTQsbXI9NSx4cj02O2Z1bmN0aW9uIHdyKHQsbixlLHIsaSxvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihlIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8oZil7dmFyIGMscyxsLGg7aWYoZS5zdGF0ZSE9PWdyKXJldHVybiB1KCk7Zm9yKGMgaW4gaSlpZigoaD1pW2NdKS5uYW1lPT09ZS5uYW1lKXtpZihoLnN0YXRlPT09X3IpcmV0dXJuIGhyKG8pO2guc3RhdGU9PT1icj8oaC5zdGF0ZT14cixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbY10pOitjPG4mJihoLnN0YXRlPXhyLGgudGltZXIuc3RvcCgpLGRlbGV0ZSBpW2NdKX1pZihocihmdW5jdGlvbigpe2Uuc3RhdGU9PT1fciYmKGUuc3RhdGU9YnIsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoZikpfSksZS5zdGF0ZT15cixlLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09eXIpe2ZvcihlLnN0YXRlPV9yLHI9bmV3IEFycmF5KGw9ZS50d2Vlbi5sZW5ndGgpLGM9MCxzPS0xO2M8bDsrK2MpKGg9ZS50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytzXT1oKTtyLmxlbmd0aD1zKzF9fWZ1bmN0aW9uIGEobil7Zm9yKHZhciBpPW48ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLG4vZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydCh1KSxlLnN0YXRlPW1yLDEpLG89LTEsYT1yLmxlbmd0aDsrK288YTspcltvXS5jYWxsKG51bGwsaSk7ZS5zdGF0ZT09PW1yJiYoZS5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLHUoKSl9ZnVuY3Rpb24gdSgpe2Zvcih2YXIgciBpbiBlLnN0YXRlPXhyLGUudGltZXIuc3RvcCgpLGRlbGV0ZSBpW25dLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW25dPWUsZS50aW1lcj11cihmdW5jdGlvbih0KXtlLnN0YXRlPWdyLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD10JiZvKHQtZS5kZWxheSl9LDAsZS50aW1lKX0odCxlLHtuYW1lOm4saW5kZXg6cixncm91cDppLG9uOmRyLHR3ZWVuOnByLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOnZyfSl9ZnVuY3Rpb24gTXIodCxuKXt2YXIgZT1Ucih0LG4pO2lmKGUuc3RhdGU+dnIpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBBcih0LG4pe3ZhciBlPVRyKHQsbik7aWYoZS5zdGF0ZT55cil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBUcih0LG4pe3ZhciBlPXQuX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVtuXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBlfWZ1bmN0aW9uIE5yKHQsbil7dmFyIGUscixpLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IoaSBpbiBuPW51bGw9PW4/bnVsbDpuKyIiLG8pKGU9b1tpXSkubmFtZT09PW4/KHI9ZS5zdGF0ZT55ciYmZS5zdGF0ZTxtcixlLnN0YXRlPXhyLGUudGltZXIuc3RvcCgpLHImJmUub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxkZWxldGUgb1tpXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIFNyKHQsbixlKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9QXIodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtuXT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBUcih0LHIpLnZhbHVlW25dfX1mdW5jdGlvbiBFcih0LG4pe3ZhciBlO3JldHVybigibnVtYmVyIj09dHlwZW9mIG4/dmU6biBpbnN0YW5jZW9mIHZuP2NlOihlPXZuKG4pKT8obj1lLGNlKTpiZSkodCxuKX12YXIga3I9THQucHJvdG90eXBlLmNvbnN0cnVjdG9yO3ZhciBDcj0wO2Z1bmN0aW9uIFByKHQsbixlLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bix0aGlzLl9uYW1lPWUsdGhpcy5faWQ9cn1mdW5jdGlvbiB6cih0KXtyZXR1cm4gTHQoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIFJyKCl7cmV0dXJuKytDcn12YXIgTHI9THQucHJvdG90eXBlO2Z1bmN0aW9uIERyKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfWZ1bmN0aW9uIFVyKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfVByLnByb3RvdHlwZT16ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlByLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVEodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHUsZixjPXJbYV0scz1jLmxlbmd0aCxsPW9bYV09bmV3IEFycmF5KHMpLGg9MDtoPHM7KytoKSh1PWNbaF0pJiYoZj10LmNhbGwodSx1Ll9fZGF0YV9fLGgsYykpJiYoIl9fZGF0YV9fImluIHUmJihmLl9fZGF0YV9fPXUuX19kYXRhX18pLGxbaF09Zix3cihsW2hdLG4sZSxoLGwsVHIodSxlKSkpO3JldHVybiBuZXcgUHIobyx0aGlzLl9wYXJlbnRzLG4sZSl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUsodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPVtdLGE9W10sdT0wO3U8aTsrK3UpZm9yKHZhciBmLGM9clt1XSxzPWMubGVuZ3RoLGw9MDtsPHM7KytsKWlmKGY9Y1tsXSl7Zm9yKHZhciBoLGQ9dC5jYWxsKGYsZi5fX2RhdGFfXyxsLGMpLHA9VHIoZixlKSx2PTAsZz1kLmxlbmd0aDt2PGc7Kyt2KShoPWRbdl0pJiZ3cihoLG4sZSx2LGQscCk7by5wdXNoKGQpLGEucHVzaChmKX1yZXR1cm4gbmV3IFByKG8sYSxuLGUpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXJ0KHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLGE9bltpXSx1PWEubGVuZ3RoLGY9cltpXT1bXSxjPTA7Yzx1OysrYykobz1hW2NdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxjLGEpJiZmLnB1c2gobyk7cmV0dXJuIG5ldyBQcihyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSxhPW5ldyBBcnJheShyKSx1PTA7dTxvOysrdSlmb3IodmFyIGYsYz1uW3VdLHM9ZVt1XSxsPWMubGVuZ3RoLGg9YVt1XT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpKGY9Y1tkXXx8c1tkXSkmJihoW2RdPWYpO2Zvcig7dTxyOysrdSlhW3VdPW5bdV07cmV0dXJuIG5ldyBQcihhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcga3IodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsbj10aGlzLl9pZCxlPVJyKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEsdT1yW29dLGY9dS5sZW5ndGgsYz0wO2M8ZjsrK2MpaWYoYT11W2NdKXt2YXIgcz1UcihhLG4pO3dyKGEsdCxlLGMsdSx7dGltZTpzLnRpbWUrcy5kZWxheStzLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246cy5kdXJhdGlvbixlYXNlOnMuZWFzZX0pfXJldHVybiBuZXcgUHIocix0aGlzLl9wYXJlbnRzLHQsZSl9LGNhbGw6THIuY2FsbCxub2RlczpMci5ub2Rlcyxub2RlOkxyLm5vZGUsc2l6ZTpMci5zaXplLGVtcHR5OkxyLmVtcHR5LGVhY2g6THIuZWFjaCxvbjpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/VHIodGhpcy5ub2RlKCksZSkub24ub24odCk6dGhpcy5lYWNoKGZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG89ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8InN0YXJ0Ij09PXR9KX0obik/TXI6QXI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHU9YS5vbjt1IT09ciYmKGk9KHI9dSkuY29weSgpKS5vbihuLGUpLGEub249aX19KGUsdCxuKSl9LGF0dHI6ZnVuY3Rpb24odCxuKXt2YXIgZT0kKHQpLHI9InRyYW5zZm9ybSI9PT1lP1BlOkVyO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBuPyhlLmxvY2FsP2Z1bmN0aW9uKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEsdT1lKHRoaXMpO2lmKG51bGwhPXUpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXU/bnVsbDphPT09ciYmdT09PWk/bzpvPW4ocj1hLGk9dSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx1PWUodGhpcyk7aWYobnVsbCE9dSlyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT11P251bGw6YT09PXImJnU9PT1pP286bz1uKHI9YSxpPXUpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKGUscixTcih0aGlzLCJhdHRyLiIrdCxuKSk6bnVsbD09bj8oZS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShlKTooZS5sb2NhbD9mdW5jdGlvbih0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX0pKGUscixuKyIiKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciBlPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dmFyIHI9JCh0KTtyZXR1cm4gdGhpcy50d2VlbihlLChyLmxvY2FsP2Z1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscihuKSl9fXJldHVybiBlLl92YWx1ZT1uLGV9OmZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGUodCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX0pKHIsbikpfSxzdHlsZTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9InRyYW5zZm9ybSI9PSh0Kz0iIik/Q2U6RXI7cmV0dXJuIG51bGw9PW4/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bHQodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGx0KHRoaXMsdCkpO3JldHVybiBvPT09YT9udWxsOm89PT1lJiZhPT09cj9pOmk9bihlPW8scj1hKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sdCh0aGlzLHQpLHU9ZSh0aGlzKTtyZXR1cm4gbnVsbD09dSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksdT1sdCh0aGlzLHQpKSxhPT09dT9udWxsOmE9PT1yJiZ1PT09aT9vOm89bihyPWEsaT11KX19KHQscixTcih0aGlzLCJzdHlsZS4iK3QsbikpOmZ1bmN0aW9uKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWx0KHRoaXMsdCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX0odCxyLG4rIiIpLGUpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLGZ1bmN0aW9uKHQsbixlKXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpcyxpPW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihuKXtyLnN0eWxlLnNldFByb3BlcnR5KHQsaShuKSxlKX19cmV0dXJuIHIuX3ZhbHVlPW4scn0odCxuLG51bGw9PWU/IiI6ZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09bj8iIjpufX0oU3IodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKHQ9dGhpcy5faWQsZnVuY3Rpb24oKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBlIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtlIT09dClyZXR1cm47biYmbi5yZW1vdmVDaGlsZCh0aGlzKX0pKTt2YXIgdH0sdHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcixpPVRyKHRoaXMubm9kZSgpLGUpLnR3ZWVuLG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoKHI9aVtvXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bj9mdW5jdGlvbih0LG4pe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9QXIodGhpcyx0KSxvPWkudHdlZW47aWYobyE9PWUpZm9yKHZhciBhPTAsdT0ocj1lPW8pLmxlbmd0aDthPHU7KythKWlmKHJbYV0ubmFtZT09PW4peyhyPXIuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9aS50d2Vlbj1yfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUFyKHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1yKXtpPShyPWEpLnNsaWNlKCk7Zm9yKHZhciB1PXtuYW1lOm4sdmFsdWU6ZX0sZj0wLGM9aS5sZW5ndGg7ZjxjOysrZilpZihpW2ZdLm5hbWU9PT1uKXtpW2ZdPXU7YnJlYWt9Zj09PWMmJmkucHVzaCh1KX1vLnR3ZWVuPWl9fSkoZSx0LG4pKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe01yKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe01yKHRoaXMsdCkuZGVsYXk9bn19KShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe0FyKHRoaXMsdCkuZHVyYXRpb249K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe0FyKHRoaXMsdCkuZHVyYXRpb249bn19KShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24odCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7QXIodGhpcyx0KS5lYXNlPW59fShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5lYXNlfX07dmFyIHFyPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gTWF0aC5wb3codCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksT3I9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksWXI9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxuKToyLU1hdGgucG93KDItdCxuKSkvMn1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksQnI9TWF0aC5QSSxGcj1Cci8yO2Z1bmN0aW9uIElyKHQpe3JldHVybigxLU1hdGguY29zKEJyKnQpKS8yfWZ1bmN0aW9uIEhyKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3coMiwxMCp0LTEwKToyLU1hdGgucG93KDIsMTAtMTAqdCkpLzJ9ZnVuY3Rpb24ganIodCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIFhyPTQvMTEsR3I9Ni8xMSxWcj04LzExLCRyPS43NSxXcj05LzExLFpyPTEwLzExLFFyPS45Mzc1LEpyPTIxLzIyLEtyPTYzLzY0LHRpPTEvWHIvWHI7ZnVuY3Rpb24gbmkodCl7cmV0dXJuKHQ9K3QpPFhyP3RpKnQqdDp0PFZyP3RpKih0LT1HcikqdCskcjp0PFpyP3RpKih0LT1XcikqdCtRcjp0aSoodC09SnIpKnQrS3J9dmFyIGVpPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oMS43MDE1OCkscmk9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybi0tdCp0KigobisxKSp0K24pKzF9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfSgxLjcwMTU4KSxpaT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKG4rMSkqdC1uKToodC09MikqdCooKG4rMSkqdCtuKSsyKS8yfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oMS43MDE1OCksb2k9MipNYXRoLlBJLGFpPWZ1bmN0aW9uIHQobixlKXt2YXIgcj1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPW9pKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoci10KS9lKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKm9pKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksdWk9ZnVuY3Rpb24gdChuLGUpe3ZhciByPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89b2kpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtbipNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K3IpL2UpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqb2kpfSxpLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxpfSgxLC4zKSxmaT1mdW5jdGlvbiB0KG4sZSl7dmFyIHI9TWF0aC5hc2luKDEvKG49TWF0aC5tYXgoMSxuKSkpKihlLz1vaSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/bipNYXRoLnBvdygyLDEwKnQpKk1hdGguc2luKChyLXQpL2UpOjItbipNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigocit0KS9lKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKm9pKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksY2k9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlVyfTtmdW5jdGlvbiBzaSh0LG4pe2Zvcih2YXIgZTshKGU9dC5fX3RyYW5zaXRpb24pfHwhKGU9ZVtuXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBjaS50aW1lPWlyKCksY2k7cmV0dXJuIGV9THQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TnIodGhpcyx0KX0pfSxMdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgbixlO3QgaW5zdGFuY2VvZiBQcj8obj10Ll9pZCx0PXQuX25hbWUpOihuPVJyKCksKGU9Y2kpLnRpbWU9aXIoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHU9cltvXSxmPXUubGVuZ3RoLGM9MDtjPGY7KytjKShhPXVbY10pJiZ3cihhLHQsbixjLHUsZXx8c2koYSxuKSk7cmV0dXJuIG5ldyBQcihyLHRoaXMuX3BhcmVudHMsdCxuKX07dmFyIGxpPVtudWxsXTtmdW5jdGlvbiBoaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZGkodCxuLGUpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy5zZWxlY3Rpb249ZX1mdW5jdGlvbiBwaSgpe3QuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gdmkoKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgZ2k9e25hbWU6ImRyYWcifSx5aT17bmFtZToic3BhY2UifSxfaT17bmFtZToiaGFuZGxlIn0sYmk9e25hbWU6ImNlbnRlciJ9LG1pPXtuYW1lOiJ4IixoYW5kbGVzOlsiZSIsInciXS5tYXAoRWkpLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQmJltbdFswXSxuWzBdWzFdXSxbdFsxXSxuWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx4aT17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKEVpKSxpbnB1dDpmdW5jdGlvbih0LG4pe3JldHVybiB0JiZbW25bMF1bMF0sdFswXV0sW25bMV1bMF0sdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sd2k9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKEVpKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sTWk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LEFpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxUaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sTmk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sU2k9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gRWkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24ga2koKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gQ2koKXt2YXIgdD10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm5bWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gUGkodCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiB6aSh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uIFJpKG4pe3ZhciBlLHI9Q2ksaT1raSxvPUkodSwic3RhcnQiLCJicnVzaCIsImVuZCIpLGE9NjtmdW5jdGlvbiB1KHQpe3ZhciBlPXQucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtFaSgib3ZlcmxheSIpXSk7ZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixNaS5vdmVybGF5KS5tZXJnZShlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9UGkodGhpcykuZXh0ZW50O0R0KHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pLHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbRWkoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsTWkuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIHI9dC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKG4uaGFuZGxlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiBNaVt0LnR5cGVdfSksdC5lYWNoKGYpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsbCl9ZnVuY3Rpb24gZigpe3ZhciB0PUR0KHRoaXMpLG49UGkodGhpcykuc2VsZWN0aW9uO24/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLG5bMF1bMF0pLmF0dHIoInkiLG5bMF1bMV0pLmF0dHIoIndpZHRoIixuWzFdWzBdLW5bMF1bMF0pLmF0dHIoImhlaWdodCIsblsxXVsxXS1uWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9uWzFdWzBdLWEvMjpuWzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9uWzFdWzFdLWEvMjpuWzBdWzFdLWEvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9uWzFdWzBdLW5bMF1bMF0rYTphfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9uWzFdWzFdLW5bMF1bMV0rYTphfSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiBjKHQsbil7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgcyh0LG4pfWZ1bmN0aW9uIHModCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGwoKXtpZih0LmV2ZW50LnRvdWNoZXMpe2lmKHQuZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIHZpKCl9ZWxzZSBpZihlKXJldHVybjtpZihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHIsbyxhLHUscyxsLGgsZCxwLHYsZyx5LF8sYj10aGlzLG09dC5ldmVudC50YXJnZXQuX19kYXRhX18udHlwZSx4PSJzZWxlY3Rpb24iPT09KHQuZXZlbnQubWV0YUtleT9tPSJvdmVybGF5IjptKT9naTp0LmV2ZW50LmFsdEtleT9iaTpfaSx3PW49PT14aT9udWxsOk5pW21dLE09bj09PW1pP251bGw6U2lbbV0sQT1QaShiKSxUPUEuZXh0ZW50LE49QS5zZWxlY3Rpb24sUz1UWzBdWzBdLEU9VFswXVsxXSxrPVRbMV1bMF0sQz1UWzFdWzFdLFA9dyYmTSYmdC5ldmVudC5zaGlmdEtleSx6PUZ0KGIpLFI9eixMPWMoYixhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09bT9BLnNlbGVjdGlvbj1OPVtbcj1uPT09eGk/Uzp6WzBdLGE9bj09PW1pP0U6elsxXV0sW3M9bj09PXhpP2s6cixoPW49PT1taT9DOmFdXToocj1OWzBdWzBdLGE9TlswXVsxXSxzPU5bMV1bMF0saD1OWzFdWzFdKSxvPXIsdT1hLGw9cyxkPWg7dmFyIEQ9RHQoYikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksVT1ELnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLE1pW21dKTtpZih0LmV2ZW50LnRvdWNoZXMpRC5vbigidG91Y2htb3ZlLmJydXNoIixPLCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLEIsITApO2Vsc2V7dmFyIHE9RHQodC5ldmVudC52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZnVuY3Rpb24oKXtzd2l0Y2godC5ldmVudC5rZXlDb2RlKXtjYXNlIDE2OlA9dyYmTTticmVhaztjYXNlIDE4Ong9PT1faSYmKHcmJihzPWwtcCp3LHI9bytwKncpLE0mJihoPWQtdipNLGE9dSt2Kk0pLHg9YmksWSgpKTticmVhaztjYXNlIDMyOnghPT1faSYmeCE9PWJpfHwodzwwP3M9bC1wOnc+MCYmKHI9by1wKSxNPDA/aD1kLXY6TT4wJiYoYT11LXYpLHg9eWksVS5hdHRyKCJjdXJzb3IiLE1pLnNlbGVjdGlvbiksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn12aSgpfSwhMCkub24oImtleXVwLmJydXNoIixmdW5jdGlvbigpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6UCYmKHk9Xz1QPSExLFkoKSk7YnJlYWs7Y2FzZSAxODp4PT09YmkmJih3PDA/cz1sOnc+MCYmKHI9byksTTwwP2g9ZDpNPjAmJihhPXUpLHg9X2ksWSgpKTticmVhaztjYXNlIDMyOng9PT15aSYmKHQuZXZlbnQuYWx0S2V5Pyh3JiYocz1sLXAqdyxyPW8rcCp3KSxNJiYoaD1kLXYqTSxhPXUrdipNKSx4PWJpKToodzwwP3M9bDp3PjAmJihyPW8pLE08MD9oPWQ6TT4wJiYoYT11KSx4PV9pKSxVLmF0dHIoImN1cnNvciIsTWlbbV0pLFkoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dmkoKX0sITApLm9uKCJtb3VzZW1vdmUuYnJ1c2giLE8sITApLm9uKCJtb3VzZXVwLmJydXNoIixCLCEwKTtYdCh0LmV2ZW50LnZpZXcpfXBpKCksTnIoYiksZi5jYWxsKGIpLEwuc3RhcnQoKX1mdW5jdGlvbiBPKCl7dmFyIHQ9RnQoYik7IVB8fHl8fF98fChNYXRoLmFicyh0WzBdLVJbMF0pPk1hdGguYWJzKHRbMV0tUlsxXSk/Xz0hMDp5PSEwKSxSPXQsZz0hMCx2aSgpLFkoKX1mdW5jdGlvbiBZKCl7dmFyIHQ7c3dpdGNoKHA9UlswXS16WzBdLHY9UlsxXS16WzFdLHgpe2Nhc2UgeWk6Y2FzZSBnaTp3JiYocD1NYXRoLm1heChTLXIsTWF0aC5taW4oay1zLHApKSxvPXIrcCxsPXMrcCksTSYmKHY9TWF0aC5tYXgoRS1hLE1hdGgubWluKEMtaCx2KSksdT1hK3YsZD1oK3YpO2JyZWFrO2Nhc2UgX2k6dzwwPyhwPU1hdGgubWF4KFMtcixNYXRoLm1pbihrLXIscCkpLG89citwLGw9cyk6dz4wJiYocD1NYXRoLm1heChTLXMsTWF0aC5taW4oay1zLHApKSxvPXIsbD1zK3ApLE08MD8odj1NYXRoLm1heChFLWEsTWF0aC5taW4oQy1hLHYpKSx1PWErdixkPWgpOk0+MCYmKHY9TWF0aC5tYXgoRS1oLE1hdGgubWluKEMtaCx2KSksdT1hLGQ9aCt2KTticmVhaztjYXNlIGJpOncmJihvPU1hdGgubWF4KFMsTWF0aC5taW4oayxyLXAqdykpLGw9TWF0aC5tYXgoUyxNYXRoLm1pbihrLHMrcCp3KSkpLE0mJih1PU1hdGgubWF4KEUsTWF0aC5taW4oQyxhLXYqTSkpLGQ9TWF0aC5tYXgoRSxNYXRoLm1pbihDLGgrdipNKSkpfWw8byYmKHcqPS0xLHQ9cixyPXMscz10LHQ9byxvPWwsbD10LG0gaW4gQWkmJlUuYXR0cigiY3Vyc29yIixNaVttPUFpW21dXSkpLGQ8dSYmKE0qPS0xLHQ9YSxhPWgsaD10LHQ9dSx1PWQsZD10LG0gaW4gVGkmJlUuYXR0cigiY3Vyc29yIixNaVttPVRpW21dXSkpLEEuc2VsZWN0aW9uJiYoTj1BLnNlbGVjdGlvbikseSYmKG89TlswXVswXSxsPU5bMV1bMF0pLF8mJih1PU5bMF1bMV0sZD1OWzFdWzFdKSxOWzBdWzBdPT09byYmTlswXVsxXT09PXUmJk5bMV1bMF09PT1sJiZOWzFdWzFdPT09ZHx8KEEuc2VsZWN0aW9uPVtbbyx1XSxbbCxkXV0sZi5jYWxsKGIpLEwuYnJ1c2goKSl9ZnVuY3Rpb24gQigpe2lmKHBpKCksdC5ldmVudC50b3VjaGVzKXtpZih0LmV2ZW50LnRvdWNoZXMubGVuZ3RoKXJldHVybjtlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1udWxsfSw1MDApLEQub24oInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsbnVsbCl9ZWxzZSBHdCh0LmV2ZW50LnZpZXcsZykscS5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7RC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLFUuYXR0cigiY3Vyc29yIixNaS5vdmVybGF5KSxBLnNlbGVjdGlvbiYmKE49QS5zZWxlY3Rpb24pLHppKE4pJiYoQS5zZWxlY3Rpb249bnVsbCxmLmNhbGwoYikpLEwuZW5kKCl9fWZ1bmN0aW9uIGgoKXt2YXIgdD10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIHQuZXh0ZW50PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuZGltPW4sdH1yZXR1cm4gdS5tb3ZlPWZ1bmN0aW9uKHQsZSl7dC5zZWxlY3Rpb24/dC5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7Yyh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7Yyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPXQuX19icnVzaCxpPWModCxhcmd1bWVudHMpLG89ci5zZWxlY3Rpb24sYT1uLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsci5leHRlbnQpLHU9bWUobyxhKTtmdW5jdGlvbiBzKG4pe3Iuc2VsZWN0aW9uPTE9PT1uJiZ6aShhKT9udWxsOnUobiksZi5jYWxsKHQpLGkuYnJ1c2goKX1yZXR1cm4gbyYmYT9zOnMoMSl9KTp0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMscj10aGlzLl9fYnJ1c2gsaT1uLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyx0KTplLHIuZXh0ZW50KSxvPWModGhpcyx0KS5iZWZvcmVzdGFydCgpO05yKHRoaXMpLHIuc2VsZWN0aW9uPW51bGw9PWl8fHppKGkpP251bGw6aSxmLmNhbGwodGhpcyksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KX0scy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtDdChuZXcgZGkodSx0LG4ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksby5hcHBseSxvLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LHUuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aGkoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLHUpOnJ9LHUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aGkoISF0KSx1KTppfSx1LmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz91OnR9LHV9dmFyIExpPU1hdGguY29zLERpPU1hdGguc2luLFVpPU1hdGguUEkscWk9VWkvMixPaT0yKlVpLFlpPU1hdGgubWF4O3ZhciBCaT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gRmkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBJaT1NYXRoLlBJLEhpPTIqSWksamk9SGktMWUtNjtmdW5jdGlvbiBYaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIEdpKCl7cmV0dXJuIG5ldyBYaX1mdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gJGkodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIFdpKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBaaSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFFpKHQpe3JldHVybiB0LmVuZEFuZ2xlfVhpLnByb3RvdHlwZT1HaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhpLG1vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rbil9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStuKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArbisiLCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK24rIiwiKyArZSsiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LG4sZSxyLGkpe3Q9K3Qsbj0rbixlPStlLHI9K3IsaT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHU9ZS10LGY9ci1uLGM9by10LHM9YS1uLGw9YypjK3MqcztpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2UgaWYobD4xZS02KWlmKE1hdGguYWJzKHMqdS1mKmMpPjFlLTYmJmkpe3ZhciBoPWUtbyxkPXItYSxwPXUqdStmKmYsdj1oKmgrZCpkLGc9TWF0aC5zcXJ0KHApLHk9TWF0aC5zcXJ0KGwpLF89aSpNYXRoLnRhbigoSWktTWF0aC5hY29zKChwK2wtdikvKDIqZyp5KSkpLzIpLGI9Xy95LG09Xy9nO01hdGguYWJzKGItMSk+MWUtNiYmKHRoaXMuXys9IkwiKyh0K2IqYykrIiwiKyhuK2IqcykpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhzKmg+YypkKSsiLCIrKHRoaXMuX3gxPXQrbSp1KSsiLCIrKHRoaXMuX3kxPW4rbSpmKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxuLGUscixpLG8pe3Q9K3Qsbj0rbjt2YXIgYT0oZT0rZSkqTWF0aC5jb3MociksdT1lKk1hdGguc2luKHIpLGY9dCthLGM9bit1LHM9MV5vLGw9bz9yLWk6aS1yO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitlKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrZisiLCIrYzooTWF0aC5hYnModGhpcy5feDEtZik+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtYyk+MWUtNikmJih0aGlzLl8rPSJMIitmKyIsIitjKSxlJiYobDwwJiYobD1sJUhpK0hpKSxsPmppP3RoaXMuXys9IkEiK2UrIiwiK2UrIiwwLDEsIitzKyIsIisodC1hKSsiLCIrKG4tdSkrIkEiK2UrIiwiK2UrIiwwLDEsIitzKyIsIisodGhpcy5feDE9ZikrIiwiKyh0aGlzLl95MT1jKTpsPjFlLTYmJih0aGlzLl8rPSJBIitlKyIsIitlKyIsMCwiKyArKGw+PUlpKSsiLCIrcysiLCIrKHRoaXMuX3gxPXQrZSpNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1uK2UqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxuLGUscil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKSsiaCIrICtlKyJ2IisgK3IrImgiKy1lKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07ZnVuY3Rpb24gSmkoKXt9ZnVuY3Rpb24gS2kodCxuKXt2YXIgZT1uZXcgSmk7aWYodCBpbnN0YW5jZW9mIEppKXQuZWFjaChmdW5jdGlvbih0LG4pe2Uuc2V0KG4sdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKWZvcig7KytpPG87KWUuc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxvOyllLnNldChuKHI9dFtpXSxpLHQpLHIpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCllLnNldChhLHRbYV0pO3JldHVybiBlfWZ1bmN0aW9uIHRvKCl7cmV0dXJue319ZnVuY3Rpb24gbm8odCxuLGUpe3Rbbl09ZX1mdW5jdGlvbiBlbygpe3JldHVybiBLaSgpfWZ1bmN0aW9uIHJvKHQsbixlKXt0LnNldChuLGUpfWZ1bmN0aW9uIGlvKCl7fUppLnByb3RvdHlwZT1LaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkppLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpc1siJCIrdF09bix0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49IiQiK3Q7cmV0dXJuIG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiZ0LnB1c2gobi5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJnQucHVzaCh0aGlzW25dKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJnQucHVzaCh7a2V5Om4uc2xpY2UoMSksdmFsdWU6dGhpc1tuXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiZ0KHRoaXNbbl0sbi5zbGljZSgxKSx0aGlzKX19O3ZhciBvbz1LaS5wcm90b3R5cGU7ZnVuY3Rpb24gYW8odCxuKXt2YXIgZT1uZXcgaW87aWYodCBpbnN0YW5jZW9mIGlvKXQuZWFjaChmdW5jdGlvbih0KXtlLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1uKWZvcig7KytyPGk7KWUuYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspZS5hZGQobih0W3JdLHIsdCkpfXJldHVybiBlfWlvLnByb3RvdHlwZT1hby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlvLGhhczpvby5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpvby5yZW1vdmUsY2xlYXI6b28uY2xlYXIsdmFsdWVzOm9vLmtleXMsc2l6ZTpvby5zaXplLGVtcHR5Om9vLmVtcHR5LGVhY2g6b28uZWFjaH07dmFyIHVvPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBmbyh0LG4pe3JldHVybiB0LW59ZnVuY3Rpb24gY28odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHNvKHQsbil7Zm9yKHZhciBlLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoZT1sbyh0LG5bcl0pKXJldHVybiBlO3JldHVybiAwfWZ1bmN0aW9uIGxvKHQsbil7Zm9yKHZhciBlPW5bMF0scj1uWzFdLGk9LTEsbz0wLGE9dC5sZW5ndGgsdT1hLTE7bzxhO3U9bysrKXt2YXIgZj10W29dLGM9ZlswXSxzPWZbMV0sbD10W3VdLGg9bFswXSxkPWxbMV07aWYoaG8oZixsLG4pKXJldHVybiAwO3M+ciE9ZD5yJiZlPChoLWMpKihyLXMpLyhkLXMpK2MmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBobyh0LG4sZSl7dmFyIHIsaSxvLGE7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oblswXS10WzBdKSooZVsxXS10WzFdKT09KGVbMF0tdFswXSkqKG5bMV0tdFsxXSl9KHQsbixlKSYmKGk9dFtyPSsodFswXT09PW5bMF0pXSxvPWVbcl0sYT1uW3JdLGk8PW8mJm88PWF8fGE8PW8mJm88PWkpfWZ1bmN0aW9uIHBvKCl7fXZhciB2bz1bW10sW1tbMSwxLjVdLFsuNSwxXV1dLFtbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsuNSwxXV1dLFtbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWy41LDFdXSxbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLC41XSxbMSwxLjVdXV0sW1tbMSwuNV0sWy41LDFdXV0sW1tbLjUsMV0sWzEsLjVdXV0sW1tbMSwxLjVdLFsxLC41XV1dLFtbWy41LDFdLFsxLC41XV0sW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbMSwuNV1dXSxbW1suNSwxXSxbMS41LDFdXV0sW1tbMSwxLjVdLFsxLjUsMV1dXSxbW1suNSwxXSxbMSwxLjVdXV0sW11dO2Z1bmN0aW9uIGdvKCl7dmFyIHQ9MSxuPTEsZT1NLHI9dTtmdW5jdGlvbiBpKHQpe3ZhciBuPWUodCk7aWYoQXJyYXkuaXNBcnJheShuKSluPW4uc2xpY2UoKS5zb3J0KGZvKTtlbHNle3ZhciByPXModCksaT1yWzBdLGE9clsxXTtuPXcoaSxhLG4pLG49ZyhNYXRoLmZsb29yKGkvbikqbixNYXRoLmZsb29yKGEvbikqbixuKX1yZXR1cm4gbi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG8odCxuKX0pfWZ1bmN0aW9uIG8oZSxpKXt2YXIgbz1bXSx1PVtdO3JldHVybiBmdW5jdGlvbihlLHIsaSl7dmFyIG8sdSxmLGMscyxsLGg9bmV3IEFycmF5LGQ9bmV3IEFycmF5O289dT0tMSxjPWVbMF0+PXIsdm9bYzw8MV0uZm9yRWFjaChwKTtmb3IoOysrbzx0LTE7KWY9YyxjPWVbbysxXT49cix2b1tmfGM8PDFdLmZvckVhY2gocCk7dm9bYzw8MF0uZm9yRWFjaChwKTtmb3IoOysrdTxuLTE7KXtmb3Iobz0tMSxjPWVbdSp0K3RdPj1yLHM9ZVt1KnRdPj1yLHZvW2M8PDF8czw8Ml0uZm9yRWFjaChwKTsrK288dC0xOylmPWMsYz1lW3UqdCt0K28rMV0+PXIsbD1zLHM9ZVt1KnQrbysxXT49cix2b1tmfGM8PDF8czw8MnxsPDwzXS5mb3JFYWNoKHApO3ZvW2N8czw8M10uZm9yRWFjaChwKX1vPS0xLHM9ZVt1KnRdPj1yLHZvW3M8PDJdLmZvckVhY2gocCk7Zm9yKDsrK288dC0xOylsPXMscz1lW3UqdCtvKzFdPj1yLHZvW3M8PDJ8bDw8M10uZm9yRWFjaChwKTtmdW5jdGlvbiBwKHQpe3ZhciBuLGUscj1bdFswXVswXStvLHRbMF1bMV0rdV0sZj1bdFsxXVswXStvLHRbMV1bMV0rdV0sYz1hKHIpLHM9YShmKTsobj1kW2NdKT8oZT1oW3NdKT8oZGVsZXRlIGRbbi5lbmRdLGRlbGV0ZSBoW2Uuc3RhcnRdLG49PT1lPyhuLnJpbmcucHVzaChmKSxpKG4ucmluZykpOmhbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBkW24uZW5kXSxuLnJpbmcucHVzaChmKSxkW24uZW5kPXNdPW4pOihuPWhbc10pPyhlPWRbY10pPyhkZWxldGUgaFtuLnN0YXJ0XSxkZWxldGUgZFtlLmVuZF0sbj09PWU/KG4ucmluZy5wdXNoKGYpLGkobi5yaW5nKSk6aFtlLnN0YXJ0XT1kW24uZW5kXT17c3RhcnQ6ZS5zdGFydCxlbmQ6bi5lbmQscmluZzplLnJpbmcuY29uY2F0KG4ucmluZyl9KTooZGVsZXRlIGhbbi5zdGFydF0sbi5yaW5nLnVuc2hpZnQociksaFtuLnN0YXJ0PWNdPW4pOmhbY109ZFtzXT17c3RhcnQ6YyxlbmQ6cyxyaW5nOltyLGZdfX12b1tzPDwzXS5mb3JFYWNoKHApfShlLGksZnVuY3Rpb24odCl7cih0LGUsaSksZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aCxyPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrbjxlOylyKz10W24tMV1bMV0qdFtuXVswXS10W24tMV1bMF0qdFtuXVsxXTtyZXR1cm4gcn0odCk+MD9vLnB1c2goW3RdKTp1LnB1c2godCl9KSx1LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9MCxyPW8ubGVuZ3RoO2U8cjsrK2UpaWYoLTEhPT1zbygobj1vW2VdKVswXSx0KSlyZXR1cm4gdm9pZCBuLnB1c2godCl9KSx7dHlwZToiTXVsdGlQb2x5Z29uIix2YWx1ZTppLGNvb3JkaW5hdGVzOm99fWZ1bmN0aW9uIGEobil7cmV0dXJuIDIqblswXStuWzFdKih0KzEpKjR9ZnVuY3Rpb24gdShlLHIsaSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvLGE9ZVswXSx1PWVbMV0sZj0wfGEsYz0wfHUscz1yW2MqdCtmXTthPjAmJmE8dCYmZj09PWEmJihvPXJbYyp0K2YtMV0sZVswXT1hKyhpLW8pLyhzLW8pLS41KSx1PjAmJnU8biYmYz09PXUmJihvPXJbKGMtMSkqdCtmXSxlWzFdPXUrKGktbykvKHMtbyktLjUpfSl9cmV0dXJuIGkuY29udG91cj1vLGkuc2l6ZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bdCxuXTt2YXIgcj1NYXRoLmNlaWwoZVswXSksbz1NYXRoLmNlaWwoZVsxXSk7aWYoIShyPjAmJm8+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1yLG49byxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP2NvKHVvLmNhbGwodCkpOmNvKHQpLGkpOmV9LGkuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQ/dTpwbyxpKTpyPT09dX0saX1mdW5jdGlvbiB5byh0LG4sZSl7Zm9yKHZhciByPXQud2lkdGgsaT10LmhlaWdodCxvPTErKGU8PDEpLGE9MDthPGk7KythKWZvcih2YXIgdT0wLGY9MDt1PHIrZTsrK3UpdTxyJiYoZis9dC5kYXRhW3UrYSpyXSksdT49ZSYmKHU+PW8mJihmLT10LmRhdGFbdS1vK2Eqcl0pLG4uZGF0YVt1LWUrYSpyXT1mL01hdGgubWluKHUrMSxyLTErby11LG8pKX1mdW5jdGlvbiBfbyh0LG4sZSl7Zm9yKHZhciByPXQud2lkdGgsaT10LmhlaWdodCxvPTErKGU8PDEpLGE9MDthPHI7KythKWZvcih2YXIgdT0wLGY9MDt1PGkrZTsrK3UpdTxpJiYoZis9dC5kYXRhW2ErdSpyXSksdT49ZSYmKHU+PW8mJihmLT10LmRhdGFbYSsodS1vKSpyXSksbi5kYXRhW2ErKHUtZSkqcl09Zi9NYXRoLm1pbih1KzEsaS0xK28tdSxvKSl9ZnVuY3Rpb24gYm8odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gbW8odCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24geG8oKXtyZXR1cm4gMX12YXIgd289e30sTW89e30sQW89MzQsVG89MTAsTm89MTM7ZnVuY3Rpb24gU28odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrbisiXSJ9KS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBFbyh0KXt2YXIgbj1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxlPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsbil7dmFyIHIsaT1bXSxvPXQubGVuZ3RoLGE9MCx1PTAsZj1vPD0wLGM9ITE7ZnVuY3Rpb24gcygpe2lmKGYpcmV0dXJuIE1vO2lmKGMpcmV0dXJuIGM9ITEsd287dmFyIG4scixpPWE7aWYodC5jaGFyQ29kZUF0KGkpPT09QW8pe2Zvcig7YSsrPG8mJnQuY2hhckNvZGVBdChhKSE9PUFvfHx0LmNoYXJDb2RlQXQoKythKT09PUFvOyk7cmV0dXJuKG49YSk+PW8/Zj0hMDoocj10LmNoYXJDb2RlQXQoYSsrKSk9PT1Ubz9jPSEwOnI9PT1ObyYmKGM9ITAsdC5jaGFyQ29kZUF0KGEpPT09VG8mJisrYSksdC5zbGljZShpKzEsbi0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDthPG87KXtpZigocj10LmNoYXJDb2RlQXQobj1hKyspKT09PVRvKWM9ITA7ZWxzZSBpZihyPT09Tm8pYz0hMCx0LmNoYXJDb2RlQXQoYSk9PT1UbyYmKythO2Vsc2UgaWYociE9PWUpY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxuKX1yZXR1cm4gZj0hMCx0LnNsaWNlKGksbyl9Zm9yKHQuY2hhckNvZGVBdChvLTEpPT09VG8mJi0tbyx0LmNoYXJDb2RlQXQoby0xKT09PU5vJiYtLW87KHI9cygpKSE9PU1vOyl7Zm9yKHZhciBsPVtdO3IhPT13byYmciE9PU1vOylsLnB1c2gocikscj1zKCk7biYmbnVsbD09KGw9bihsLHUrKykpfHxpLnB1c2gobCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gbi5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10PyIiOm4udGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvIi9nLCciIicpKyciJzp0fXJldHVybntwYXJzZTpmdW5jdGlvbih0LG4pe3ZhciBlLGksbz1yKHQsZnVuY3Rpb24odCxyKXtpZihlKXJldHVybiBlKHQsci0xKTtpPXQsZT1uP2Z1bmN0aW9uKHQsbil7dmFyIGU9U28odCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4oZShyKSxpLHQpfX0odCxuKTpTbyh0KX0pO3JldHVybiBvLmNvbHVtbnM9aXx8W10sb30scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKG4sZSl7cmV0dXJuIG51bGw9PWUmJihlPWZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksZT1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gbnx8ZS5wdXNoKG5bcl09cil9KSxlfShuKSksW2UubWFwKG8pLmpvaW4odCldLmNvbmNhdChuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8oblt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGkpLmpvaW4oIlxuIil9fX12YXIga289RW8oIiwiKSxDbz1rby5wYXJzZSxQbz1rby5wYXJzZVJvd3Msem89a28uZm9ybWF0LFJvPWtvLmZvcm1hdFJvd3MsTG89RW8oIlx0IiksRG89TG8ucGFyc2UsVW89TG8ucGFyc2VSb3dzLHFvPUxvLmZvcm1hdCxPbz1Mby5mb3JtYXRSb3dzO2Z1bmN0aW9uIFlvKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5ibG9iKCl9ZnVuY3Rpb24gQm8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gRm8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX1mdW5jdGlvbiBJbyh0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oRm8pfWZ1bmN0aW9uIEhvKHQpe3JldHVybiBmdW5jdGlvbihuLGUscil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPXZvaWQgMCksSW8obixlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiB0KG4scil9KX19dmFyIGpvPUhvKENvKSxYbz1IbyhEbyk7ZnVuY3Rpb24gR28odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gSW8obixlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcobix0KX0pfX12YXIgJG89Vm8oImFwcGxpY2F0aW9uL3htbCIpLFdvPVZvKCJ0ZXh0L2h0bWwiKSxabz1WbygiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFFvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBKbygpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX1mdW5jdGlvbiBLbyh0LG4sZSxyKXtpZihpc05hTihuKXx8aXNOYU4oZSkpcmV0dXJuIHQ7dmFyIGksbyxhLHUsZixjLHMsbCxoLGQ9dC5fcm9vdCxwPXtkYXRhOnJ9LHY9dC5feDAsZz10Ll95MCx5PXQuX3gxLF89dC5feTE7aWYoIWQpcmV0dXJuIHQuX3Jvb3Q9cCx0O2Zvcig7ZC5sZW5ndGg7KWlmKChjPW4+PShvPSh2K3kpLzIpKT92PW86eT1vLChzPWU+PShhPShnK18pLzIpKT9nPWE6Xz1hLGk9ZCwhKGQ9ZFtsPXM8PDF8Y10pKXJldHVybiBpW2xdPXAsdDtpZih1PSt0Ll94LmNhbGwobnVsbCxkLmRhdGEpLGY9K3QuX3kuY2FsbChudWxsLGQuZGF0YSksbj09PXUmJmU9PT1mKXJldHVybiBwLm5leHQ9ZCxpP2lbbF09cDp0Ll9yb290PXAsdDtkb3tpPWk/aVtsXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKGM9bj49KG89KHYreSkvMikpP3Y9bzp5PW8sKHM9ZT49KGE9KGcrXykvMikpP2c9YTpfPWF9d2hpbGUoKGw9czw8MXxjKT09KGg9KGY+PWEpPDwxfHU+PW8pKTtyZXR1cm4gaVtoXT1kLGlbbF09cCx0fWZ1bmN0aW9uIHRhKHQsbixlLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1uLHRoaXMueTA9ZSx0aGlzLngxPXIsdGhpcy55MT1pfWZ1bmN0aW9uIG5hKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGVhKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIHJhKHQsbixlKXt2YXIgcj1uZXcgaWEobnVsbD09bj9uYTpuLG51bGw9PWU/ZWE6ZSxOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9ZnVuY3Rpb24gaWEodCxuLGUscixpLG8pe3RoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5feDA9ZSx0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBvYSh0KXtmb3IodmFyIG49e2RhdGE6dC5kYXRhfSxlPW47dD10Lm5leHQ7KWU9ZS5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIG59dmFyIGFhPXJhLnByb3RvdHlwZT1pYS5wcm90b3R5cGU7ZnVuY3Rpb24gdWEodCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGZhKHQpe3JldHVybiB0LnkrdC52eX1mdW5jdGlvbiBjYSh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBzYSh0LG4pe3ZhciBlPXQuZ2V0KG4pO2lmKCFlKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIituKTtyZXR1cm4gZX1mdW5jdGlvbiBsYSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGhhKHQpe3JldHVybiB0Lnl9YWEuY29weT1mdW5jdGlvbigpe3ZhciB0LG4sZT1uZXcgaWEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIGU7aWYoIXIubGVuZ3RoKXJldHVybiBlLl9yb290PW9hKHIpLGU7Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6ZS5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKG49ci5zb3VyY2VbaV0pJiYobi5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6bix0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09b2EobikpO3JldHVybiBlfSxhYS5hZGQ9ZnVuY3Rpb24odCl7dmFyIG49K3RoaXMuX3guY2FsbChudWxsLHQpLGU9K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBLbyh0aGlzLmNvdmVyKG4sZSksbixlLHQpfSxhYS5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKSx1PW5ldyBBcnJheShvKSxmPTEvMCxjPTEvMCxzPS0xLzAsbD0tMS8wO2ZvcihlPTA7ZTxvOysrZSlpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxuPXRbZV0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsbikpfHwoYVtlXT1yLHVbZV09aSxyPGYmJihmPXIpLHI+cyYmKHM9ciksaTxjJiYoYz1pKSxpPmwmJihsPWkpKTtmb3IoczxmJiYoZj10aGlzLl94MCxzPXRoaXMuX3gxKSxsPGMmJihjPXRoaXMuX3kwLGw9dGhpcy5feTEpLHRoaXMuY292ZXIoZixjKS5jb3ZlcihzLGwpLGU9MDtlPG87KytlKUtvKHRoaXMsYVtlXSx1W2VdLHRbZV0pO3JldHVybiB0aGlzfSxhYS5jb3Zlcj1mdW5jdGlvbih0LG4pe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihuPStuKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihlKSlpPShlPU1hdGguZmxvb3IodCkpKzEsbz0ocj1NYXRoLmZsb29yKG4pKSsxO2Vsc2V7aWYoIShlPnR8fHQ+aXx8cj5ufHxuPm8pKXJldHVybiB0aGlzO3ZhciBhLHUsZj1pLWUsYz10aGlzLl9yb290O3N3aXRjaCh1PShuPChyK28pLzIpPDwxfHQ8KGUraSkvMil7Y2FzZSAwOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUobz1yKyhmKj0yKSx0PihpPWUrZil8fG4+byk7YnJlYWs7Y2FzZSAxOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUobz1yKyhmKj0yKSwoZT1pLWYpPnR8fG4+byk7YnJlYWs7Y2FzZSAyOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUocj1vLShmKj0yKSx0PihpPWUrZil8fHI+bik7YnJlYWs7Y2FzZSAzOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUocj1vLShmKj0yKSwoZT1pLWYpPnR8fHI+bil9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXN9LGFhLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihuKXtpZighbi5sZW5ndGgpZG97dC5wdXNoKG4uZGF0YSl9d2hpbGUobj1uLm5leHQpfSksdH0sYWEuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxhYS5maW5kPWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sYSx1LGYsYyxzPXRoaXMuX3gwLGw9dGhpcy5feTAsaD10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10sdj10aGlzLl9yb290O2Zvcih2JiZwLnB1c2gobmV3IHRhKHYscyxsLGgsZCkpLG51bGw9PWU/ZT0xLzA6KHM9dC1lLGw9bi1lLGg9dCtlLGQ9bitlLGUqPWUpO2Y9cC5wb3AoKTspaWYoISghKHY9Zi5ub2RlKXx8KGk9Zi54MCk+aHx8KG89Zi55MCk+ZHx8KGE9Zi54MSk8c3x8KHU9Zi55MSk8bCkpaWYodi5sZW5ndGgpe3ZhciBnPShpK2EpLzIseT0obyt1KS8yO3AucHVzaChuZXcgdGEodlszXSxnLHksYSx1KSxuZXcgdGEodlsyXSxpLHksZyx1KSxuZXcgdGEodlsxXSxnLG8sYSx5KSxuZXcgdGEodlswXSxpLG8sZyx5KSksKGM9KG4+PXkpPDwxfHQ+PWcpJiYoZj1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLWNdLHBbcC5sZW5ndGgtMS1jXT1mKX1lbHNle3ZhciBfPXQtK3RoaXMuX3guY2FsbChudWxsLHYuZGF0YSksYj1uLSt0aGlzLl95LmNhbGwobnVsbCx2LmRhdGEpLG09XypfK2IqYjtpZihtPGUpe3ZhciB4PU1hdGguc3FydChlPW0pO3M9dC14LGw9bi14LGg9dCt4LGQ9bit4LHI9di5kYXRhfX1yZXR1cm4gcn0sYWEucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBuLGUscixpLG8sYSx1LGYsYyxzLGwsaCxkPXRoaXMuX3Jvb3QscD10aGlzLl94MCx2PXRoaXMuX3kwLGc9dGhpcy5feDEseT10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKChjPW8+PSh1PShwK2cpLzIpKT9wPXU6Zz11LChzPWE+PShmPSh2K3kpLzIpKT92PWY6eT1mLG49ZCwhKGQ9ZFtsPXM8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsobltsKzEmM118fG5bbCsyJjNdfHxuW2wrMyYzXSkmJihlPW4saD1sKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTpuPyhpP25bbF09aTpkZWxldGUgbltsXSwoZD1uWzBdfHxuWzFdfHxuWzJdfHxuWzNdKSYmZD09PShuWzNdfHxuWzJdfHxuWzFdfHxuWzBdKSYmIWQubGVuZ3RoJiYoZT9lW2hdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxhYS5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aDtuPGU7KytuKXRoaXMucmVtb3ZlKHRbbl0pO3JldHVybiB0aGlzfSxhYS5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGFhLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClkb3srK3R9d2hpbGUobj1uLm5leHQpfSksdH0sYWEudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyxhLHU9W10sZj10aGlzLl9yb290O2ZvcihmJiZ1LnB1c2gobmV3IHRhKGYsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPXUucG9wKCk7KWlmKCF0KGY9bi5ub2RlLHI9bi54MCxpPW4ueTAsbz1uLngxLGE9bi55MSkmJmYubGVuZ3RoKXt2YXIgYz0ocitvKS8yLHM9KGkrYSkvMjsoZT1mWzNdKSYmdS5wdXNoKG5ldyB0YShlLGMscyxvLGEpKSwoZT1mWzJdKSYmdS5wdXNoKG5ldyB0YShlLHIscyxjLGEpKSwoZT1mWzFdKSYmdS5wdXNoKG5ldyB0YShlLGMsaSxvLHMpKSwoZT1mWzBdKSYmdS5wdXNoKG5ldyB0YShlLHIsaSxjLHMpKX1yZXR1cm4gdGhpc30sYWEudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgbixlPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJmUucHVzaChuZXcgdGEodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249ZS5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHU9bi55MCxmPW4ueDEsYz1uLnkxLHM9KGErZikvMixsPSh1K2MpLzI7KG89aVswXSkmJmUucHVzaChuZXcgdGEobyxhLHUscyxsKSksKG89aVsxXSkmJmUucHVzaChuZXcgdGEobyxzLHUsZixsKSksKG89aVsyXSkmJmUucHVzaChuZXcgdGEobyxhLGwscyxjKSksKG89aVszXSkmJmUucHVzaChuZXcgdGEobyxzLGwsZixjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyl0KG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc30sYWEueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGFhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgZGE9MTAscGE9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIHZhKHQsbil7aWYoKGU9KHQ9bj90LnRvRXhwb25lbnRpYWwobi0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBlLHI9dC5zbGljZSgwLGUpO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKGUrMSldfWZ1bmN0aW9uIGdhKHQpe3JldHVybih0PXZhKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIHlhLF9hPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGJhKHQpe3JldHVybiBuZXcgbWEodCl9ZnVuY3Rpb24gbWEodCl7aWYoIShuPV9hLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIG47dGhpcy5maWxsPW5bMV18fCIgIix0aGlzLmFsaWduPW5bMl18fCI+Iix0aGlzLnNpZ249blszXXx8Ii0iLHRoaXMuc3ltYm9sPW5bNF18fCIiLHRoaXMuemVybz0hIW5bNV0sdGhpcy53aWR0aD1uWzZdJiYrbls2XSx0aGlzLmNvbW1hPSEhbls3XSx0aGlzLnByZWNpc2lvbj1uWzhdJiYrbls4XS5zbGljZSgxKSx0aGlzLnRyaW09ISFuWzldLHRoaXMudHlwZT1uWzEwXXx8IiJ9ZnVuY3Rpb24geGEodCxuKXt2YXIgZT12YSh0LG4pO2lmKCFlKXJldHVybiB0KyIiO3ZhciByPWVbMF0saT1lWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfWJhLnByb3RvdHlwZT1tYS5wcm90b3R5cGUsbWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKG51bGw9PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyhudWxsPT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIHdhPXsiJSI6ZnVuY3Rpb24odCxuKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQobil9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9FeHBvbmVudGlhbChuKX0sZjpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvRml4ZWQobil9LGc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b1ByZWNpc2lvbihuKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LG4pe3JldHVybiB4YSgxMDAqdCxuKX0scjp4YSxzOmZ1bmN0aW9uKHQsbil7dmFyIGU9dmEodCxuKTtpZighZSlyZXR1cm4gdCsiIjt2YXIgcj1lWzBdLGk9ZVsxXSxvPWktKHlhPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSxhPXIubGVuZ3RoO3JldHVybiBvPT09YT9yOm8+YT9yK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9yLnNsaWNlKDAsbykrIi4iK3Iuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrdmEodCxNYXRoLm1heCgwLG4rby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gTWEodCl7cmV0dXJuIHR9dmFyIEFhLFRhPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBOYSh0KXt2YXIgbixlLHI9dC5ncm91cGluZyYmdC50aG91c2FuZHM/KG49dC5ncm91cGluZyxlPXQudGhvdXNhbmRzLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPXQubGVuZ3RoLG89W10sYT0wLHU9blswXSxmPTA7aT4wJiZ1PjAmJihmK3UrMT5yJiYodT1NYXRoLm1heCgxLHItZikpLG8ucHVzaCh0LnN1YnN0cmluZyhpLT11LGkrdSkpLCEoKGYrPXUrMSk+cikpOyl1PW5bYT0oYSsxKSVuLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4oZSl9KTpNYSxpPXQuY3VycmVuY3ksbz10LmRlY2ltYWwsYT10Lm51bWVyYWxzP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0WytuXX0pfX0odC5udW1lcmFscyk6TWEsdT10LnBlcmNlbnR8fCIlIjtmdW5jdGlvbiBmKHQpe3ZhciBuPSh0PWJhKHQpKS5maWxsLGU9dC5hbGlnbixmPXQuc2lnbixjPXQuc3ltYm9sLHM9dC56ZXJvLGw9dC53aWR0aCxoPXQuY29tbWEsZD10LnByZWNpc2lvbixwPXQudHJpbSx2PXQudHlwZTsibiI9PT12PyhoPSEwLHY9ImciKTp3YVt2XXx8KG51bGw9PWQmJihkPTEyKSxwPSEwLHY9ImciKSwoc3x8IjAiPT09biYmIj0iPT09ZSkmJihzPSEwLG49IjAiLGU9Ij0iKTt2YXIgZz0iJCI9PT1jP2lbMF06IiMiPT09YyYmL1tib3hYXS8udGVzdCh2KT8iMCIrdi50b0xvd2VyQ2FzZSgpOiIiLHk9IiQiPT09Yz9pWzFdOi9bJXBdLy50ZXN0KHYpP3U6IiIsXz13YVt2XSxiPS9bZGVmZ3BycyVdLy50ZXN0KHYpO2Z1bmN0aW9uIG0odCl7dmFyIGksdSxjLG09Zyx4PXk7aWYoImMiPT09dil4PV8odCkreCx0PSIiO2Vsc2V7dmFyIHc9KHQ9K3QpPDA7aWYodD1fKE1hdGguYWJzKHQpLGQpLHAmJih0PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBuLGU9dC5sZW5ndGgscj0xLGk9LTE7cjxlOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPW49cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxuPXI7YnJlYWs7ZGVmYXVsdDppZihpPjApe2lmKCErdFtyXSlicmVhayB0O2k9MH19cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShuKzEpOnR9KHQpKSx3JiYwPT0rdCYmKHc9ITEpLG09KHc/IigiPT09Zj9mOiItIjoiLSI9PT1mfHwiKCI9PT1mPyIiOmYpK20seD0oInMiPT09dj9UYVs4K3lhLzNdOiIiKSt4Kyh3JiYiKCI9PT1mPyIpIjoiIiksYilmb3IoaT0tMSx1PXQubGVuZ3RoOysraTx1OylpZig0OD4oYz10LmNoYXJDb2RlQXQoaSkpfHxjPjU3KXt4PSg0Nj09PWM/byt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkreCx0PXQuc2xpY2UoMCxpKTticmVha319aCYmIXMmJih0PXIodCwxLzApKTt2YXIgTT1tLmxlbmd0aCt0Lmxlbmd0aCt4Lmxlbmd0aCxBPU08bD9uZXcgQXJyYXkobC1NKzEpLmpvaW4obik6IiI7c3dpdGNoKGgmJnMmJih0PXIoQSt0LEEubGVuZ3RoP2wteC5sZW5ndGg6MS8wKSxBPSIiKSxlKXtjYXNlIjwiOnQ9bSt0K3grQTticmVhaztjYXNlIj0iOnQ9bStBK3QreDticmVhaztjYXNlIl4iOnQ9QS5zbGljZSgwLE09QS5sZW5ndGg+PjEpK20rdCt4K0Euc2xpY2UoTSk7YnJlYWs7ZGVmYXVsdDp0PUErbSt0K3h9cmV0dXJuIGEodCl9cmV0dXJuIGQ9bnVsbD09ZD82Oi9bZ3Byc10vLnRlc3Qodik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxkKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxkKSksbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxtfXJldHVybntmb3JtYXQ6Zixmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxuKXt2YXIgZT1mKCgodD1iYSh0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZ2EobikvMykpKSxpPU1hdGgucG93KDEwLC1yKSxvPVRhWzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUoaSp0KStvfX19fWZ1bmN0aW9uIFNhKG4pe3JldHVybiBBYT1OYShuKSx0LmZvcm1hdD1BYS5mb3JtYXQsdC5mb3JtYXRQcmVmaXg9QWEuZm9ybWF0UHJlZml4LEFhfWZ1bmN0aW9uIEVhKHQpe3JldHVybiBNYXRoLm1heCgwLC1nYShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIGthKHQsbil7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZ2EobikvMykpKS1nYShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIENhKHQsbil7cmV0dXJuIHQ9TWF0aC5hYnModCksbj1NYXRoLmFicyhuKS10LE1hdGgubWF4KDAsZ2EobiktZ2EodCkpKzF9ZnVuY3Rpb24gUGEoKXtyZXR1cm4gbmV3IHphfWZ1bmN0aW9uIHphKCl7dGhpcy5yZXNldCgpfVNhKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLHphLnByb3RvdHlwZT17Y29uc3RydWN0b3I6emEscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtMYShSYSx0LHRoaXMudCksTGEodGhpcyxSYS5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9UmEudDp0aGlzLnM9UmEudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgUmE9bmV3IHphO2Z1bmN0aW9uIExhKHQsbixlKXt2YXIgcj10LnM9bitlLGk9ci1uLG89ci1pO3QudD1uLW8rKGUtaSl9dmFyIERhPTFlLTYsVWE9MWUtMTIscWE9TWF0aC5QSSxPYT1xYS8yLFlhPXFhLzQsQmE9MipxYSxGYT0xODAvcWEsSWE9cWEvMTgwLEhhPU1hdGguYWJzLGphPU1hdGguYXRhbixYYT1NYXRoLmF0YW4yLEdhPU1hdGguY29zLFZhPU1hdGguY2VpbCwkYT1NYXRoLmV4cCxXYT1NYXRoLmxvZyxaYT1NYXRoLnBvdyxRYT1NYXRoLnNpbixKYT1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sS2E9TWF0aC5zcXJ0LHR1PU1hdGgudGFuO2Z1bmN0aW9uIG51KHQpe3JldHVybiB0PjE/MDp0PC0xP3FhOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBldSh0KXtyZXR1cm4gdD4xP09hOnQ8LTE/LU9hOk1hdGguYXNpbih0KX1mdW5jdGlvbiBydSh0KXtyZXR1cm4odD1RYSh0LzIpKSp0fWZ1bmN0aW9uIGl1KCl7fWZ1bmN0aW9uIG91KHQsbil7dCYmdXUuaGFzT3duUHJvcGVydHkodC50eXBlKSYmdXVbdC50eXBlXSh0LG4pfXZhciBhdT17RmVhdHVyZTpmdW5jdGlvbih0LG4pe291KHQuZ2VvbWV0cnksbil9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZmVhdHVyZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylvdShlW3JdLmdlb21ldHJ5LG4pfX0sdXU9e1NwaGVyZTpmdW5jdGlvbih0LG4pe24uc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsbil7dD10LmNvb3JkaW5hdGVzLG4ucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyl0PWVbcl0sbi5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmdSh0LmNvb3JkaW5hdGVzLG4sMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspZnUoZVtyXSxuLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Y3UodC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyljdShlW3JdLG4pfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5nZW9tZXRyaWVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspb3UoZVtyXSxuKX19O2Z1bmN0aW9uIGZ1KHQsbixlKXt2YXIgcixpPS0xLG89dC5sZW5ndGgtZTtmb3Iobi5saW5lU3RhcnQoKTsrK2k8bzspcj10W2ldLG4ucG9pbnQoclswXSxyWzFdLHJbMl0pO24ubGluZUVuZCgpfWZ1bmN0aW9uIGN1KHQsbil7dmFyIGU9LTEscj10Lmxlbmd0aDtmb3Iobi5wb2x5Z29uU3RhcnQoKTsrK2U8cjspZnUodFtlXSxuLDEpO24ucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHN1KHQsbil7dCYmYXUuaGFzT3duUHJvcGVydHkodC50eXBlKT9hdVt0LnR5cGVdKHQsbik6b3UodCxuKX12YXIgbHUsaHUsZHUscHUsdnUsZ3U9UGEoKSx5dT1QYSgpLF91PXtwb2ludDppdSxsaW5lU3RhcnQ6aXUsbGluZUVuZDppdSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtndS5yZXNldCgpLF91LmxpbmVTdGFydD1idSxfdS5saW5lRW5kPW11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K2d1O3l1LmFkZCh0PDA/QmErdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1pdX0sc3BoZXJlOmZ1bmN0aW9uKCl7eXUuYWRkKEJhKX19O2Z1bmN0aW9uIGJ1KCl7X3UucG9pbnQ9eHV9ZnVuY3Rpb24gbXUoKXt3dShsdSxodSl9ZnVuY3Rpb24geHUodCxuKXtfdS5wb2ludD13dSxsdT10LGh1PW4sZHU9dCo9SWEscHU9R2Eobj0obio9SWEpLzIrWWEpLHZ1PVFhKG4pfWZ1bmN0aW9uIHd1KHQsbil7dmFyIGU9KHQqPUlhKS1kdSxyPWU+PTA/MTotMSxpPXIqZSxvPUdhKG49KG4qPUlhKS8yK1lhKSxhPVFhKG4pLHU9dnUqYSxmPXB1Km8rdSpHYShpKSxjPXUqcipRYShpKTtndS5hZGQoWGEoYyxmKSksZHU9dCxwdT1vLHZ1PWF9ZnVuY3Rpb24gTXUodCl7cmV0dXJuW1hhKHRbMV0sdFswXSksZXUodFsyXSldfWZ1bmN0aW9uIEF1KHQpe3ZhciBuPXRbMF0sZT10WzFdLHI9R2EoZSk7cmV0dXJuW3IqR2EobikscipRYShuKSxRYShlKV19ZnVuY3Rpb24gVHUodCxuKXtyZXR1cm4gdFswXSpuWzBdK3RbMV0qblsxXSt0WzJdKm5bMl19ZnVuY3Rpb24gTnUodCxuKXtyZXR1cm5bdFsxXSpuWzJdLXRbMl0qblsxXSx0WzJdKm5bMF0tdFswXSpuWzJdLHRbMF0qblsxXS10WzFdKm5bMF1dfWZ1bmN0aW9uIFN1KHQsbil7dFswXSs9blswXSx0WzFdKz1uWzFdLHRbMl0rPW5bMl19ZnVuY3Rpb24gRXUodCxuKXtyZXR1cm5bdFswXSpuLHRbMV0qbix0WzJdKm5dfWZ1bmN0aW9uIGt1KHQpe3ZhciBuPUthKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1uLHRbMV0vPW4sdFsyXS89bn12YXIgQ3UsUHUsenUsUnUsTHUsRHUsVXUscXUsT3UsWXUsQnUsRnUsSXUsSHUsanUsWHUsR3UsVnUsJHUsV3UsWnUsUXUsSnUsS3UsdGYsbmYsZWY9UGEoKSxyZj17cG9pbnQ6b2YsbGluZVN0YXJ0OnVmLGxpbmVFbmQ6ZmYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cmYucG9pbnQ9Y2YscmYubGluZVN0YXJ0PXNmLHJmLmxpbmVFbmQ9bGYsZWYucmVzZXQoKSxfdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe191LnBvbHlnb25FbmQoKSxyZi5wb2ludD1vZixyZi5saW5lU3RhcnQ9dWYscmYubGluZUVuZD1mZixndTwwPyhDdT0tKHp1PTE4MCksUHU9LShSdT05MCkpOmVmPkRhP1J1PTkwOmVmPC1EYSYmKFB1PS05MCksWXVbMF09Q3UsWXVbMV09enV9fTtmdW5jdGlvbiBvZih0LG4pe091LnB1c2goWXU9W0N1PXQsenU9dF0pLG48UHUmJihQdT1uKSxuPlJ1JiYoUnU9bil9ZnVuY3Rpb24gYWYodCxuKXt2YXIgZT1BdShbdCpJYSxuKklhXSk7aWYocXUpe3ZhciByPU51KHF1LGUpLGk9TnUoW3JbMV0sLXJbMF0sMF0scik7a3UoaSksaT1NdShpKTt2YXIgbyxhPXQtTHUsdT1hPjA/MTotMSxmPWlbMF0qRmEqdSxjPUhhKGEpPjE4MDtjXih1Kkx1PGYmJmY8dSp0KT8obz1pWzFdKkZhKT5SdSYmKFJ1PW8pOmNeKHUqTHU8KGY9KGYrMzYwKSUzNjAtMTgwKSYmZjx1KnQpPyhvPS1pWzFdKkZhKTxQdSYmKFB1PW8pOihuPFB1JiYoUHU9biksbj5SdSYmKFJ1PW4pKSxjP3Q8THU/aGYoQ3UsdCk+aGYoQ3UsenUpJiYoenU9dCk6aGYodCx6dSk+aGYoQ3UsenUpJiYoQ3U9dCk6enU+PUN1Pyh0PEN1JiYoQ3U9dCksdD56dSYmKHp1PXQpKTp0Pkx1P2hmKEN1LHQpPmhmKEN1LHp1KSYmKHp1PXQpOmhmKHQsenUpPmhmKEN1LHp1KSYmKEN1PXQpfWVsc2UgT3UucHVzaChZdT1bQ3U9dCx6dT10XSk7bjxQdSYmKFB1PW4pLG4+UnUmJihSdT1uKSxxdT1lLEx1PXR9ZnVuY3Rpb24gdWYoKXtyZi5wb2ludD1hZn1mdW5jdGlvbiBmZigpe1l1WzBdPUN1LFl1WzFdPXp1LHJmLnBvaW50PW9mLHF1PW51bGx9ZnVuY3Rpb24gY2YodCxuKXtpZihxdSl7dmFyIGU9dC1MdTtlZi5hZGQoSGEoZSk+MTgwP2UrKGU+MD8zNjA6LTM2MCk6ZSl9ZWxzZSBEdT10LFV1PW47X3UucG9pbnQodCxuKSxhZih0LG4pfWZ1bmN0aW9uIHNmKCl7X3UubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbGYoKXtjZihEdSxVdSksX3UubGluZUVuZCgpLEhhKGVmKT5EYSYmKEN1PS0oenU9MTgwKSksWXVbMF09Q3UsWXVbMV09enUscXU9bnVsbH1mdW5jdGlvbiBoZih0LG4pe3JldHVybihuLT10KTwwP24rMzYwOm59ZnVuY3Rpb24gZGYodCxuKXtyZXR1cm4gdFswXS1uWzBdfWZ1bmN0aW9uIHBmKHQsbil7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn12YXIgdmY9e3NwaGVyZTppdSxwb2ludDpnZixsaW5lU3RhcnQ6X2YsbGluZUVuZDp4Zixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt2Zi5saW5lU3RhcnQ9d2YsdmYubGluZUVuZD1NZn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZmLmxpbmVTdGFydD1fZix2Zi5saW5lRW5kPXhmfX07ZnVuY3Rpb24gZ2YodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSk7eWYoZSpHYSh0KSxlKlFhKHQpLFFhKG4pKX1mdW5jdGlvbiB5Zih0LG4sZSl7SXUrPSh0LUl1KS8rK0J1LEh1Kz0obi1IdSkvQnUsanUrPShlLWp1KS9CdX1mdW5jdGlvbiBfZigpe3ZmLnBvaW50PWJmfWZ1bmN0aW9uIGJmKHQsbil7dCo9SWE7dmFyIGU9R2Eobio9SWEpO0t1PWUqR2EodCksdGY9ZSpRYSh0KSxuZj1RYShuKSx2Zi5wb2ludD1tZix5ZihLdSx0ZixuZil9ZnVuY3Rpb24gbWYodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSkscj1lKkdhKHQpLGk9ZSpRYSh0KSxvPVFhKG4pLGE9WGEoS2EoKGE9dGYqby1uZippKSphKyhhPW5mKnItS3UqbykqYSsoYT1LdSppLXRmKnIpKmEpLEt1KnIrdGYqaStuZipvKTtGdSs9YSxYdSs9YSooS3UrKEt1PXIpKSxHdSs9YSoodGYrKHRmPWkpKSxWdSs9YSoobmYrKG5mPW8pKSx5ZihLdSx0ZixuZil9ZnVuY3Rpb24geGYoKXt2Zi5wb2ludD1nZn1mdW5jdGlvbiB3Zigpe3ZmLnBvaW50PUFmfWZ1bmN0aW9uIE1mKCl7VGYoUXUsSnUpLHZmLnBvaW50PWdmfWZ1bmN0aW9uIEFmKHQsbil7UXU9dCxKdT1uLHQqPUlhLG4qPUlhLHZmLnBvaW50PVRmO3ZhciBlPUdhKG4pO0t1PWUqR2EodCksdGY9ZSpRYSh0KSxuZj1RYShuKSx5ZihLdSx0ZixuZil9ZnVuY3Rpb24gVGYodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSkscj1lKkdhKHQpLGk9ZSpRYSh0KSxvPVFhKG4pLGE9dGYqby1uZippLHU9bmYqci1LdSpvLGY9S3UqaS10ZipyLGM9S2EoYSphK3UqdStmKmYpLHM9ZXUoYyksbD1jJiYtcy9jOyR1Kz1sKmEsV3UrPWwqdSxadSs9bCpmLEZ1Kz1zLFh1Kz1zKihLdSsoS3U9cikpLEd1Kz1zKih0ZisodGY9aSkpLFZ1Kz1zKihuZisobmY9bykpLHlmKEt1LHRmLG5mKX1mdW5jdGlvbiBOZih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gU2YodCxuKXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGU9dChlLHIpLG4oZVswXSxlWzFdKX1yZXR1cm4gdC5pbnZlcnQmJm4uaW52ZXJ0JiYoZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4oZT1uLmludmVydChlLHIpKSYmdC5pbnZlcnQoZVswXSxlWzFdKX0pLGV9ZnVuY3Rpb24gRWYodCxuKXtyZXR1cm5bdD5xYT90LUJhOnQ8LXFhP3QrQmE6dCxuXX1mdW5jdGlvbiBrZih0LG4sZSl7cmV0dXJuKHQlPUJhKT9ufHxlP1NmKFBmKHQpLHpmKG4sZSkpOlBmKHQpOm58fGU/emYobixlKTpFZn1mdW5jdGlvbiBDZih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm5bKG4rPXQpPnFhP24tQmE6bjwtcWE/bitCYTpuLGVdfX1mdW5jdGlvbiBQZih0KXt2YXIgbj1DZih0KTtyZXR1cm4gbi5pbnZlcnQ9Q2YoLXQpLG59ZnVuY3Rpb24gemYodCxuKXt2YXIgZT1HYSh0KSxyPVFhKHQpLGk9R2Eobiksbz1RYShuKTtmdW5jdGlvbiBhKHQsbil7dmFyIGE9R2EobiksdT1HYSh0KSphLGY9UWEodCkqYSxjPVFhKG4pLHM9YyplK3UqcjtyZXR1cm5bWGEoZippLXMqbyx1KmUtYypyKSxldShzKmkrZipvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGE9R2EobiksdT1HYSh0KSphLGY9UWEodCkqYSxjPVFhKG4pLHM9YyppLWYqbztyZXR1cm5bWGEoZippK2Mqbyx1KmUrcypyKSxldShzKmUtdSpyKV19LGF9ZnVuY3Rpb24gUmYodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4obj10KG5bMF0qSWEsblsxXSpJYSkpWzBdKj1GYSxuWzFdKj1GYSxufXJldHVybiB0PWtmKHRbMF0qSWEsdFsxXSpJYSx0Lmxlbmd0aD4yP3RbMl0qSWE6MCksbi5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuKG49dC5pbnZlcnQoblswXSpJYSxuWzFdKklhKSlbMF0qPUZhLG5bMV0qPUZhLG59LG59ZnVuY3Rpb24gTGYodCxuLGUscixpLG8pe2lmKGUpe3ZhciBhPUdhKG4pLHU9UWEobiksZj1yKmU7bnVsbD09aT8oaT1uK3IqQmEsbz1uLWYvMik6KGk9RGYoYSxpKSxvPURmKGEsbyksKHI+MD9pPG86aT5vKSYmKGkrPXIqQmEpKTtmb3IodmFyIGMscz1pO3I+MD9zPm86czxvO3MtPWYpYz1NdShbYSwtdSpHYShzKSwtdSpRYShzKV0pLHQucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gRGYodCxuKXsobj1BdShuKSlbMF0tPXQsa3Uobik7dmFyIGU9bnUoLW5bMV0pO3JldHVybigoLW5bMl08MD8tZTplKStCYS1EYSklQmF9ZnVuY3Rpb24gVWYoKXt2YXIgdCxuPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihuLGUpe3QucHVzaChbbixlXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24ucHVzaCh0PVtdKX0sbGluZUVuZDppdSxyZWpvaW46ZnVuY3Rpb24oKXtuLmxlbmd0aD4xJiZuLnB1c2gobi5wb3AoKS5jb25jYXQobi5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW47cmV0dXJuIG49W10sdD1udWxsLGV9fX1mdW5jdGlvbiBxZih0LG4pe3JldHVybiBIYSh0WzBdLW5bMF0pPERhJiZIYSh0WzFdLW5bMV0pPERhfWZ1bmN0aW9uIE9mKHQsbixlLHIpe3RoaXMueD10LHRoaXMuej1uLHRoaXMubz1lLHRoaXMuZT1yLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gWWYodCxuLGUscixpKXt2YXIgbyxhLHU9W10sZj1bXTtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoISgobj10Lmxlbmd0aC0xKTw9MCkpe3ZhciBuLGUscj10WzBdLGE9dFtuXTtpZihxZihyLGEpKXtmb3IoaS5saW5lU3RhcnQoKSxvPTA7bzxuOysrbylpLnBvaW50KChyPXRbb10pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2UgdS5wdXNoKGU9bmV3IE9mKHIsdCxudWxsLCEwKSksZi5wdXNoKGUubz1uZXcgT2YocixudWxsLGUsITEpKSx1LnB1c2goZT1uZXcgT2YoYSx0LG51bGwsITEpKSxmLnB1c2goZS5vPW5ldyBPZihhLG51bGwsZSwhMCkpfX0pLHUubGVuZ3RoKXtmb3IoZi5zb3J0KG4pLEJmKHUpLEJmKGYpLG89MCxhPWYubGVuZ3RoO288YTsrK28pZltvXS5lPWU9IWU7Zm9yKHZhciBjLHMsbD11WzBdOzspe2Zvcih2YXIgaD1sLGQ9ITA7aC52OylpZigoaD1oLm4pPT09bClyZXR1cm47Yz1oLnosaS5saW5lU3RhcnQoKTtkb3tpZihoLnY9aC5vLnY9ITAsaC5lKXtpZihkKWZvcihvPTAsYT1jLmxlbmd0aDtvPGE7KytvKWkucG9pbnQoKHM9Y1tvXSlbMF0sc1sxXSk7ZWxzZSByKGgueCxoLm4ueCwxLGkpO2g9aC5ufWVsc2V7aWYoZClmb3IoYz1oLnAueixvPWMubGVuZ3RoLTE7bz49MDstLW8paS5wb2ludCgocz1jW29dKVswXSxzWzFdKTtlbHNlIHIoaC54LGgucC54LC0xLGkpO2g9aC5wfWM9KGg9aC5vKS56LGQ9IWR9d2hpbGUoIWgudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBCZih0KXtpZihuPXQubGVuZ3RoKXtmb3IodmFyIG4sZSxyPTAsaT10WzBdOysrcjxuOylpLm49ZT10W3JdLGUucD1pLGk9ZTtpLm49ZT10WzBdLGUucD1pfX1FZi5pbnZlcnQ9RWY7dmFyIEZmPVBhKCk7ZnVuY3Rpb24gSWYodCxuKXt2YXIgZT1uWzBdLHI9blsxXSxpPVFhKHIpLG89W1FhKGUpLC1HYShlKSwwXSxhPTAsdT0wO0ZmLnJlc2V0KCksMT09PWk/cj1PYStEYTotMT09PWkmJihyPS1PYS1EYSk7Zm9yKHZhciBmPTAsYz10Lmxlbmd0aDtmPGM7KytmKWlmKGw9KHM9dFtmXSkubGVuZ3RoKWZvcih2YXIgcyxsLGg9c1tsLTFdLGQ9aFswXSxwPWhbMV0vMitZYSx2PVFhKHApLGc9R2EocCkseT0wO3k8bDsrK3ksZD1iLHY9eCxnPXcsaD1fKXt2YXIgXz1zW3ldLGI9X1swXSxtPV9bMV0vMitZYSx4PVFhKG0pLHc9R2EobSksTT1iLWQsQT1NPj0wPzE6LTEsVD1BKk0sTj1UPnFhLFM9dip4O2lmKEZmLmFkZChYYShTKkEqUWEoVCksZyp3K1MqR2EoVCkpKSxhKz1OP00rQSpCYTpNLE5eZD49ZV5iPj1lKXt2YXIgRT1OdShBdShoKSxBdShfKSk7a3UoRSk7dmFyIGs9TnUobyxFKTtrdShrKTt2YXIgQz0oTl5NPj0wPy0xOjEpKmV1KGtbMl0pOyhyPkN8fHI9PT1DJiYoRVswXXx8RVsxXSkpJiYodSs9Tl5NPj0wPzE6LTEpfX1yZXR1cm4oYTwtRGF8fGE8RGEmJkZmPC1EYSleMSZ1fWZ1bmN0aW9uIEhmKHQsbixlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbyxhLHUsZj1uKGkpLGM9VWYoKSxzPW4oYyksbD0hMSxoPXtwb2ludDpkLGxpbmVTdGFydDp2LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoLnBvaW50PXksaC5saW5lU3RhcnQ9XyxoLmxpbmVFbmQ9YixhPVtdLG89W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoLnBvaW50PWQsaC5saW5lU3RhcnQ9dixoLmxpbmVFbmQ9ZyxhPU4oYSk7dmFyIHQ9SWYobyxyKTthLmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksWWYoYSxYZix0LGUsaSkpOnQmJihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGwmJihpLnBvbHlnb25FbmQoKSxsPSExKSxhPW89bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKG4sZSl7dChuLGUpJiZpLnBvaW50KG4sZSl9ZnVuY3Rpb24gcCh0LG4pe2YucG9pbnQodCxuKX1mdW5jdGlvbiB2KCl7aC5wb2ludD1wLGYubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2gucG9pbnQ9ZCxmLmxpbmVFbmQoKX1mdW5jdGlvbiB5KHQsbil7dS5wdXNoKFt0LG5dKSxzLnBvaW50KHQsbil9ZnVuY3Rpb24gXygpe3MubGluZVN0YXJ0KCksdT1bXX1mdW5jdGlvbiBiKCl7eSh1WzBdWzBdLHVbMF1bMV0pLHMubGluZUVuZCgpO3ZhciB0LG4sZSxyLGY9cy5jbGVhbigpLGg9Yy5yZXN1bHQoKSxkPWgubGVuZ3RoO2lmKHUucG9wKCksby5wdXNoKHUpLHU9bnVsbCxkKWlmKDEmZil7aWYoKG49KGU9aFswXSkubGVuZ3RoLTEpPjApe2ZvcihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PG47Kyt0KWkucG9pbnQoKHI9ZVt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmYmJmgucHVzaChoLnBvcCgpLmNvbmNhdChoLnNoaWZ0KCkpKSxhLnB1c2goaC5maWx0ZXIoamYpKX1yZXR1cm4gaH19ZnVuY3Rpb24gamYodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gWGYodCxuKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tT2EtRGE6T2EtdFsxXSktKChuPW4ueClbMF08MD9uWzFdLU9hLURhOk9hLW5bMV0pfXZhciBHZj1IZihmdW5jdGlvbigpe3JldHVybiEwfSxmdW5jdGlvbih0KXt2YXIgbixlPU5hTixyPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxuPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHU9bz4wP3FhOi1xYSxmPUhhKG8tZSk7SGEoZi1xYSk8RGE/KHQucG9pbnQoZSxyPShyK2EpLzI+MD9PYTotT2EpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodSxyKSx0LnBvaW50KG8sciksbj0wKTppIT09dSYmZj49cWEmJihIYShlLWkpPERhJiYoZS09aSpEYSksSGEoby11KTxEYSYmKG8tPXUqRGEpLHI9ZnVuY3Rpb24odCxuLGUscil7dmFyIGksbyxhPVFhKHQtZSk7cmV0dXJuIEhhKGEpPkRhP2phKChRYShuKSoobz1HYShyKSkqUWEoZSktUWEocikqKGk9R2EobikpKlFhKHQpKS8oaSpvKmEpKToobityKS8yfShlLHIsbyxhKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHUsciksbj0wKSx0LnBvaW50KGU9byxyPWEpLGk9dX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGU9cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItbn19fSxmdW5jdGlvbih0LG4sZSxyKXt2YXIgaTtpZihudWxsPT10KWk9ZSpPYSxyLnBvaW50KC1xYSxpKSxyLnBvaW50KDAsaSksci5wb2ludChxYSxpKSxyLnBvaW50KHFhLDApLHIucG9pbnQocWEsLWkpLHIucG9pbnQoMCwtaSksci5wb2ludCgtcWEsLWkpLHIucG9pbnQoLXFhLDApLHIucG9pbnQoLXFhLGkpO2Vsc2UgaWYoSGEodFswXS1uWzBdKT5EYSl7dmFyIG89dFswXTxuWzBdP3FhOi1xYTtpPWUqby8yLHIucG9pbnQoLW8saSksci5wb2ludCgwLGkpLHIucG9pbnQobyxpKX1lbHNlIHIucG9pbnQoblswXSxuWzFdKX0sWy1xYSwtT2FdKTtmdW5jdGlvbiBWZih0KXt2YXIgbj1HYSh0KSxlPTYqSWEscj1uPjAsaT1IYShuKT5EYTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIEdhKHQpKkdhKGUpPm59ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9WzEsMCwwXSxvPU51KEF1KHQpLEF1KGUpKSxhPVR1KG8sbyksdT1vWzBdLGY9YS11KnU7aWYoIWYpcmV0dXJuIXImJnQ7dmFyIGM9biphL2Yscz0tbip1L2YsbD1OdShpLG8pLGg9RXUoaSxjKTtTdShoLEV1KG8scykpO3ZhciBkPWwscD1UdShoLGQpLHY9VHUoZCxkKSxnPXAqcC12KihUdShoLGgpLTEpO2lmKCEoZzwwKSl7dmFyIHk9S2EoZyksXz1FdShkLCgtcC15KS92KTtpZihTdShfLGgpLF89TXUoXyksIXIpcmV0dXJuIF87dmFyIGIsbT10WzBdLHg9ZVswXSx3PXRbMV0sTT1lWzFdO3g8bSYmKGI9bSxtPXgseD1iKTt2YXIgQT14LW0sVD1IYShBLXFhKTxEYTtpZighVCYmTTx3JiYoYj13LHc9TSxNPWIpLFR8fEE8RGE/VD93K00+MF5fWzFdPChIYShfWzBdLW0pPERhP3c6TSk6dzw9X1sxXSYmX1sxXTw9TTpBPnFhXihtPD1fWzBdJiZfWzBdPD14KSl7dmFyIE49RXUoZCwoLXAreSkvdik7cmV0dXJuIFN1KE4saCksW18sTXUoTildfX19ZnVuY3Rpb24gdShuLGUpe3ZhciBpPXI/dDpxYS10LG89MDtyZXR1cm4gbjwtaT9vfD0xOm4+aSYmKG98PTIpLGU8LWk/b3w9NDplPmkmJihvfD04KSxvfXJldHVybiBIZihvLGZ1bmN0aW9uKHQpe3ZhciBuLGUsZixjLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9Zj0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGwsaCl7dmFyIGQscD1bbCxoXSx2PW8obCxoKSxnPXI/dj8wOnUobCxoKTp2P3UobCsobDwwP3FhOi1xYSksaCk6MDtpZighbiYmKGM9Zj12KSYmdC5saW5lU3RhcnQoKSx2IT09ZiYmKCEoZD1hKG4scCkpfHxxZihuLGQpfHxxZihwLGQpKSYmKHBbMF0rPURhLHBbMV0rPURhLHY9byhwWzBdLHBbMV0pKSx2IT09ZilzPTAsdj8odC5saW5lU3RhcnQoKSxkPWEocCxuKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPWEobixwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLG49ZDtlbHNlIGlmKGkmJm4mJnJedil7dmFyIHk7ZyZlfHwhKHk9YShwLG4sITApKXx8KHM9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoeVswXVswXSx5WzBdWzFdKSx0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSkpKX0hdnx8biYmcWYobixwKXx8dC5wb2ludChwWzBdLHBbMV0pLG49cCxmPXYsZT1nfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZiYmdC5saW5lRW5kKCksbj1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBzfChjJiZmKTw8MX19fSxmdW5jdGlvbihuLHIsaSxvKXtMZihvLHQsZSxpLG4scil9LHI/WzAsLXRdOlstcWEsdC1xYV0pfXZhciAkZj0xZTksV2Y9LSRmO2Z1bmN0aW9uIFpmKHQsbixlLHIpe2Z1bmN0aW9uIGkoaSxvKXtyZXR1cm4gdDw9aSYmaTw9ZSYmbjw9byYmbzw9cn1mdW5jdGlvbiBvKGksbyx1LGMpe3ZhciBzPTAsbD0wO2lmKG51bGw9PWl8fChzPWEoaSx1KSkhPT0obD1hKG8sdSkpfHxmKGksbyk8MF51PjApZG97Yy5wb2ludCgwPT09c3x8Mz09PXM/dDplLHM+MT9yOm4pfXdoaWxlKChzPShzK3UrNCklNCkhPT1sKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKHIsaSl7cmV0dXJuIEhhKHJbMF0tdCk8RGE/aT4wPzA6MzpIYShyWzBdLWUpPERhP2k+MD8yOjE6SGEoclsxXS1uKTxEYT9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gdSh0LG4pe3JldHVybiBmKHQueCxuLngpfWZ1bmN0aW9uIGYodCxuKXt2YXIgZT1hKHQsMSkscj1hKG4sMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT9uWzFdLXRbMV06MT09PWU/dFswXS1uWzBdOjI9PT1lP3RbMV0tblsxXTpuWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBmLGMscyxsLGgsZCxwLHYsZyx5LF8sYj1hLG09VWYoKSx4PXtwb2ludDp3LGxpbmVTdGFydDpmdW5jdGlvbigpe3gucG9pbnQ9TSxjJiZjLnB1c2gocz1bXSk7eT0hMCxnPSExLHA9dj1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmJiYoTShsLGgpLGQmJmcmJm0ucmVqb2luKCksZi5wdXNoKG0ucmVzdWx0KCkpKTt4LnBvaW50PXcsZyYmYi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2I9bSxmPVtdLGM9W10sXz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBuPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsZT0wLGk9Yy5sZW5ndGg7ZTxpOysrZSlmb3IodmFyIG8sYSx1PWNbZV0sZj0xLHM9dS5sZW5ndGgsbD11WzBdLGg9bFswXSxkPWxbMV07ZjxzOysrZilvPWgsYT1kLGw9dVtmXSxoPWxbMF0sZD1sWzFdLGE8PXI/ZD5yJiYoaC1vKSooci1hKT4oZC1hKSoodC1vKSYmKytuOmQ8PXImJihoLW8pKihyLWEpPChkLWEpKih0LW8pJiYtLW47cmV0dXJuIG59KCksZT1fJiZuLGk9KGY9TihmKSkubGVuZ3RoOyhlfHxpKSYmKGEucG9seWdvblN0YXJ0KCksZSYmKGEubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksaSYmWWYoZix1LG4sbyxhKSxhLnBvbHlnb25FbmQoKSk7Yj1hLGY9Yz1zPW51bGx9fTtmdW5jdGlvbiB3KHQsbil7aSh0LG4pJiZiLnBvaW50KHQsbil9ZnVuY3Rpb24gTShvLGEpe3ZhciB1PWkobyxhKTtpZihjJiZzLnB1c2goW28sYV0pLHkpbD1vLGg9YSxkPXUseT0hMSx1JiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KG8sYSkpO2Vsc2UgaWYodSYmZyliLnBvaW50KG8sYSk7ZWxzZXt2YXIgZj1bcD1NYXRoLm1heChXZixNYXRoLm1pbigkZixwKSksdj1NYXRoLm1heChXZixNYXRoLm1pbigkZix2KSldLG09W289TWF0aC5tYXgoV2YsTWF0aC5taW4oJGYsbykpLGE9TWF0aC5tYXgoV2YsTWF0aC5taW4oJGYsYSkpXTshZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciBhLHU9dFswXSxmPXRbMV0sYz0wLHM9MSxsPW5bMF0tdSxoPW5bMV0tZjtpZihhPWUtdSxsfHwhKGE+MCkpe2lmKGEvPWwsbDwwKXtpZihhPGMpcmV0dXJuO2E8cyYmKHM9YSl9ZWxzZSBpZihsPjApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1pZihhPWktdSxsfHwhKGE8MCkpe2lmKGEvPWwsbDwwKXtpZihhPnMpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihsPjApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1pZihhPXItZixofHwhKGE+MCkpe2lmKGEvPWgsaDwwKXtpZihhPGMpcmV0dXJuO2E8cyYmKHM9YSl9ZWxzZSBpZihoPjApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1pZihhPW8tZixofHwhKGE8MCkpe2lmKGEvPWgsaDwwKXtpZihhPnMpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihoPjApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1yZXR1cm4gYz4wJiYodFswXT11K2MqbCx0WzFdPWYrYypoKSxzPDEmJihuWzBdPXUrcypsLG5bMV09ZitzKmgpLCEwfX19fX0oZixtLHQsbixlLHIpP3UmJihiLmxpbmVTdGFydCgpLGIucG9pbnQobyxhKSxfPSExKTooZ3x8KGIubGluZVN0YXJ0KCksYi5wb2ludChmWzBdLGZbMV0pKSxiLnBvaW50KG1bMF0sbVsxXSksdXx8Yi5saW5lRW5kKCksXz0hMSl9cD1vLHY9YSxnPXV9cmV0dXJuIHh9fXZhciBRZixKZixLZix0Yz1QYSgpLG5jPXtzcGhlcmU6aXUscG9pbnQ6aXUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7bmMucG9pbnQ9cmMsbmMubGluZUVuZD1lY30sbGluZUVuZDppdSxwb2x5Z29uU3RhcnQ6aXUscG9seWdvbkVuZDppdX07ZnVuY3Rpb24gZWMoKXtuYy5wb2ludD1uYy5saW5lRW5kPWl1fWZ1bmN0aW9uIHJjKHQsbil7UWY9dCo9SWEsSmY9UWEobio9SWEpLEtmPUdhKG4pLG5jLnBvaW50PWljfWZ1bmN0aW9uIGljKHQsbil7dCo9SWE7dmFyIGU9UWEobio9SWEpLHI9R2EobiksaT1IYSh0LVFmKSxvPUdhKGkpLGE9cipRYShpKSx1PUtmKmUtSmYqcipvLGY9SmYqZStLZipyKm87dGMuYWRkKFhhKEthKGEqYSt1KnUpLGYpKSxRZj10LEpmPWUsS2Y9cn1mdW5jdGlvbiBvYyh0KXtyZXR1cm4gdGMucmVzZXQoKSxzdSh0LG5jKSwrdGN9dmFyIGFjPVtudWxsLG51bGxdLHVjPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczphY307ZnVuY3Rpb24gZmModCxuKXtyZXR1cm4gYWNbMF09dCxhY1sxXT1uLG9jKHVjKX12YXIgY2M9e0ZlYXR1cmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbGModC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGxjKGVbcl0uZ2VvbWV0cnksbikpcmV0dXJuITA7cmV0dXJuITF9fSxzYz17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGhjKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGhjKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gZGModC5jb29yZGluYXRlcyxuKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihkYyhlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHBjKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYocGMoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZ2VvbWV0cmllcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGxjKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBsYyh0LG4pe3JldHVybiEoIXR8fCFzYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmc2NbdC50eXBlXSh0LG4pfWZ1bmN0aW9uIGhjKHQsbil7cmV0dXJuIDA9PT1mYyh0LG4pfWZ1bmN0aW9uIGRjKHQsbil7dmFyIGU9ZmModFswXSx0WzFdKTtyZXR1cm4gZmModFswXSxuKStmYyhuLHRbMV0pPD1lK0RhfWZ1bmN0aW9uIHBjKHQsbil7cmV0dXJuISFJZih0Lm1hcCh2YyksZ2MobikpfWZ1bmN0aW9uIHZjKHQpe3JldHVybih0PXQubWFwKGdjKSkucG9wKCksdH1mdW5jdGlvbiBnYyh0KXtyZXR1cm5bdFswXSpJYSx0WzFdKklhXX1mdW5jdGlvbiB5Yyh0LG4sZSl7dmFyIHI9Zyh0LG4tRGEsZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gX2ModCxuLGUpe3ZhciByPWcodCxuLURhLGUpLmNvbmNhdChuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKG4pe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIGJjKCl7dmFyIHQsbixlLHIsaSxvLGEsdSxmLGMscyxsLGg9MTAsZD1oLHA9OTAsdj0zNjAseT0yLjU7ZnVuY3Rpb24gXygpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmIoKX19ZnVuY3Rpb24gYigpe3JldHVybiBnKFZhKHIvcCkqcCxlLHApLm1hcChzKS5jb25jYXQoZyhWYSh1L3YpKnYsYSx2KS5tYXAobCkpLmNvbmNhdChnKFZhKG4vaCkqaCx0LGgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gSGEodCVwKT5EYX0pLm1hcChmKSkuY29uY2F0KGcoVmEoby9kKSpkLGksZCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBIYSh0JXYpPkRhfSkubWFwKGMpKX1yZXR1cm4gXy5saW5lcz1mdW5jdGlvbigpe3JldHVybiBiKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pfSxfLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3MocikuY29uY2F0KGwoYSkuc2xpY2UoMSkscyhlKS5yZXZlcnNlKCkuc2xpY2UoMSksbCh1KS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LF8uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6Xy5leHRlbnRNaW5vcigpfSxfLmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sdT0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSx1PmEmJih0PXUsdT1hLGE9dCksXy5wcmVjaXNpb24oeSkpOltbcix1XSxbZSxhXV19LF8uZXh0ZW50TWlub3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2VbMF1bMF0sdD0rZVsxXVswXSxvPStlWzBdWzFdLGk9K2VbMV1bMV0sbj50JiYoZT1uLG49dCx0PWUpLG8+aSYmKGU9byxvPWksaT1lKSxfLnByZWNpc2lvbih5KSk6W1tuLG9dLFt0LGldXX0sXy5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTpfLnN0ZXBNaW5vcigpfSxfLnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSx2PSt0WzFdLF8pOltwLHZdfSxfLnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdFswXSxkPSt0WzFdLF8pOltoLGRdfSxfLnByZWNpc2lvbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0raCxmPXljKG8saSw5MCksYz1fYyhuLHQseSkscz15Yyh1LGEsOTApLGw9X2MocixlLHkpLF8pOnl9LF8uZXh0ZW50TWFqb3IoW1stMTgwLC05MCtEYV0sWzE4MCw5MC1EYV1dKS5leHRlbnRNaW5vcihbWy0xODAsLTgwLURhXSxbMTgwLDgwK0RhXV0pfWZ1bmN0aW9uIG1jKHQpe3JldHVybiB0fXZhciB4Yyx3YyxNYyxBYyxUYz1QYSgpLE5jPVBhKCksU2M9e3BvaW50Oml1LGxpbmVTdGFydDppdSxsaW5lRW5kOml1LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1NjLmxpbmVTdGFydD1FYyxTYy5saW5lRW5kPVBjfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7U2MubGluZVN0YXJ0PVNjLmxpbmVFbmQ9U2MucG9pbnQ9aXUsVGMuYWRkKEhhKE5jKSksTmMucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9VGMvMjtyZXR1cm4gVGMucmVzZXQoKSx0fX07ZnVuY3Rpb24gRWMoKXtTYy5wb2ludD1rY31mdW5jdGlvbiBrYyh0LG4pe1NjLnBvaW50PUNjLHhjPU1jPXQsd2M9QWM9bn1mdW5jdGlvbiBDYyh0LG4pe05jLmFkZChBYyp0LU1jKm4pLE1jPXQsQWM9bn1mdW5jdGlvbiBQYygpe0NjKHhjLHdjKX12YXIgemM9MS8wLFJjPXpjLExjPS16YyxEYz1MYyxVYz17cG9pbnQ6ZnVuY3Rpb24odCxuKXt0PHpjJiYoemM9dCk7dD5MYyYmKExjPXQpO248UmMmJihSYz1uKTtuPkRjJiYoRGM9bil9LGxpbmVTdGFydDppdSxsaW5lRW5kOml1LHBvbHlnb25TdGFydDppdSxwb2x5Z29uRW5kOml1LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbemMsUmNdLFtMYyxEY11dO3JldHVybiBMYz1EYz0tKFJjPXpjPTEvMCksdH19O3ZhciBxYyxPYyxZYyxCYyxGYz0wLEljPTAsSGM9MCxqYz0wLFhjPTAsR2M9MCxWYz0wLCRjPTAsV2M9MCxaYz17cG9pbnQ6UWMsbGluZVN0YXJ0OkpjLGxpbmVFbmQ6bnMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WmMubGluZVN0YXJ0PWVzLFpjLmxpbmVFbmQ9cnN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtaYy5wb2ludD1RYyxaYy5saW5lU3RhcnQ9SmMsWmMubGluZUVuZD1uc30scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9V2M/W1ZjL1djLCRjL1djXTpHYz9bamMvR2MsWGMvR2NdOkhjP1tGYy9IYyxJYy9IY106W05hTixOYU5dO3JldHVybiBGYz1JYz1IYz1qYz1YYz1HYz1WYz0kYz1XYz0wLHR9fTtmdW5jdGlvbiBRYyh0LG4pe0ZjKz10LEljKz1uLCsrSGN9ZnVuY3Rpb24gSmMoKXtaYy5wb2ludD1LY31mdW5jdGlvbiBLYyh0LG4pe1pjLnBvaW50PXRzLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gdHModCxuKXt2YXIgZT10LVljLHI9bi1CYyxpPUthKGUqZStyKnIpO2pjKz1pKihZYyt0KS8yLFhjKz1pKihCYytuKS8yLEdjKz1pLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gbnMoKXtaYy5wb2ludD1RY31mdW5jdGlvbiBlcygpe1pjLnBvaW50PWlzfWZ1bmN0aW9uIHJzKCl7b3MocWMsT2MpfWZ1bmN0aW9uIGlzKHQsbil7WmMucG9pbnQ9b3MsUWMocWM9WWM9dCxPYz1CYz1uKX1mdW5jdGlvbiBvcyh0LG4pe3ZhciBlPXQtWWMscj1uLUJjLGk9S2EoZSplK3Iqcik7amMrPWkqKFljK3QpLzIsWGMrPWkqKEJjK24pLzIsR2MrPWksVmMrPShpPUJjKnQtWWMqbikqKFljK3QpLCRjKz1pKihCYytuKSxXYys9MyppLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gYXModCl7dGhpcy5fY29udGV4dD10fWFzLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbiksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLG4pLHRoaXMuX2NvbnRleHQuYXJjKHQsbix0aGlzLl9yYWRpdXMsMCxCYSl9fSxyZXN1bHQ6aXV9O3ZhciB1cyxmcyxjcyxzcyxscyxocz1QYSgpLGRzPXtwb2ludDppdSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkcy5wb2ludD1wc30sbGluZUVuZDpmdW5jdGlvbigpe3VzJiZ2cyhmcyxjcyksZHMucG9pbnQ9aXV9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3VzPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dXM9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K2hzO3JldHVybiBocy5yZXNldCgpLHR9fTtmdW5jdGlvbiBwcyh0LG4pe2RzLnBvaW50PXZzLGZzPXNzPXQsY3M9bHM9bn1mdW5jdGlvbiB2cyh0LG4pe3NzLT10LGxzLT1uLGhzLmFkZChLYShzcypzcytscypscykpLHNzPXQsbHM9bn1mdW5jdGlvbiBncygpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB5cyh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBfcyh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9bmV3IGJzO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXTtyZXR1cm4gZS5zdHJlYW09bixlfX1mdW5jdGlvbiBicygpe31mdW5jdGlvbiBtcyh0LG4sZSl7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLHN1KGUsdC5zdHJlYW0oVWMpKSxuKFVjLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiB4cyh0LG4sZSl7cmV0dXJuIG1zKHQsZnVuY3Rpb24oZSl7dmFyIHI9blsxXVswXS1uWzBdWzBdLGk9blsxXVsxXS1uWzBdWzFdLG89TWF0aC5taW4oci8oZVsxXVswXS1lWzBdWzBdKSxpLyhlWzFdWzFdLWVbMF1bMV0pKSxhPStuWzBdWzBdKyhyLW8qKGVbMV1bMF0rZVswXVswXSkpLzIsdT0rblswXVsxXSsoaS1vKihlWzFdWzFdK2VbMF1bMV0pKS8yO3Quc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSx1XSl9LGUpfWZ1bmN0aW9uIHdzKHQsbixlKXtyZXR1cm4geHModCxbWzAsMF0sbl0sZSl9ZnVuY3Rpb24gTXModCxuLGUpe3JldHVybiBtcyh0LGZ1bmN0aW9uKGUpe3ZhciByPStuLGk9ci8oZVsxXVswXS1lWzBdWzBdKSxvPShyLWkqKGVbMV1bMF0rZVswXVswXSkpLzIsYT0taSplWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbbyxhXSl9LGUpfWZ1bmN0aW9uIEFzKHQsbixlKXtyZXR1cm4gbXModCxmdW5jdGlvbihlKXt2YXIgcj0rbixpPXIvKGVbMV1bMV0tZVswXVsxXSksbz0taSplWzBdWzBdLGE9KHItaSooZVsxXVsxXStlWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW28sYV0pfSxlKX1ncy5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6eXMoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLG4pLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixuKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT15cyh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsbix0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LGJzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YnMscG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0LG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIFRzPTE2LE5zPUdhKDMwKklhKTtmdW5jdGlvbiBTcyh0LG4pe3JldHVybituP2Z1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZShyLGksbyxhLHUsZixjLHMsbCxoLGQscCx2LGcpe3ZhciB5PWMtcixfPXMtaSxiPXkqeStfKl87aWYoYj40Km4mJnYtLSl7dmFyIG09YStoLHg9dStkLHc9ZitwLE09S2EobSptK3gqeCt3KncpLEE9ZXUody89TSksVD1IYShIYSh3KS0xKTxEYXx8SGEoby1sKTxEYT8obytsKS8yOlhhKHgsbSksTj10KFQsQSksUz1OWzBdLEU9TlsxXSxrPVMtcixDPUUtaSxQPV8qay15KkM7KFAqUC9iPm58fEhhKCh5KmsrXypDKS9iLS41KT4uM3x8YSpoK3UqZCtmKnA8TnMpJiYoZShyLGksbyxhLHUsZixTLEUsVCxtLz1NLHgvPU0sdyx2LGcpLGcucG9pbnQoUyxFKSxlKFMsRSxULG0seCx3LGMscyxsLGgsZCxwLHYsZykpfX1yZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxvLGEsdSxmLGMscyxsLGgsZCxwLHY9e3BvaW50OmcsbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCksdi5saW5lU3RhcnQ9bX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpLHYubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiBnKGUscil7ZT10KGUsciksbi5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHkoKXtzPU5hTix2LnBvaW50PV8sbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKHIsaSl7dmFyIG89QXUoW3IsaV0pLGE9dChyLGkpO2UocyxsLGMsaCxkLHAscz1hWzBdLGw9YVsxXSxjPXIsaD1vWzBdLGQ9b1sxXSxwPW9bMl0sVHMsbiksbi5wb2ludChzLGwpfWZ1bmN0aW9uIGIoKXt2LnBvaW50PWcsbi5saW5lRW5kKCl9ZnVuY3Rpb24gbSgpe3koKSx2LnBvaW50PXgsdi5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LG4pe18ocj10LG4pLGk9cyxvPWwsYT1oLHU9ZCxmPXAsdi5wb2ludD1ffWZ1bmN0aW9uIHcoKXtlKHMsbCxjLGgsZCxwLGksbyxyLGEsdSxmLFRzLG4pLHYubGluZUVuZD1iLGIoKX1yZXR1cm4gdn19KHQsbik6ZnVuY3Rpb24odCl7cmV0dXJuIF9zKHtwb2ludDpmdW5jdGlvbihuLGUpe249dChuLGUpLHRoaXMuc3RyZWFtLnBvaW50KG5bMF0sblsxXSl9fSl9KHQpfXZhciBFcz1fcyh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0KklhLG4qSWEpfX0pO2Z1bmN0aW9uIGtzKHQsbixlLHIpe3ZhciBpPUdhKHIpLG89UWEociksYT1pKnQsdT1vKnQsZj1pL3QsYz1vL3Qscz0obyplLWkqbikvdCxsPShvKm4raSplKS90O2Z1bmN0aW9uIGgodCxyKXtyZXR1cm5bYSp0LXUqcituLGUtdSp0LWEqcl19cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW2YqdC1jKm4rcyxsLWMqdC1mKm5dfSxofWZ1bmN0aW9uIENzKHQpe3JldHVybiBQcyhmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBQcyh0KXt2YXIgbixlLHIsaSxvLGEsdSxmLGMscyxsPTE1MCxoPTQ4MCxkPTI1MCxwPTAsdj0wLGc9MCx5PTAsXz0wLGI9MCxtPW51bGwseD1HZix3PW51bGwsTT1tYyxBPS41O2Z1bmN0aW9uIFQodCl7cmV0dXJuIGYodFswXSpJYSx0WzFdKklhKX1mdW5jdGlvbiBOKHQpe3JldHVybih0PWYuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSpGYSx0WzFdKkZhXX1mdW5jdGlvbiBTKCl7dmFyIHQ9a3MobCwwLDAsYikuYXBwbHkobnVsbCxuKHAsdikpLHI9KGI/a3M6ZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm5bbit0KnIsZS10KmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLGkpe3JldHVyblsoci1uKS90LChlLWkpL3RdfSxyfSkobCxoLXRbMF0sZC10WzFdLGIpO3JldHVybiBlPWtmKGcseSxfKSx1PVNmKG4sciksZj1TZihlLHUpLGE9U3ModSxBKSxFKCl9ZnVuY3Rpb24gRSgpe3JldHVybiBjPXM9bnVsbCxUfXJldHVybiBULnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYyYmcz09PXQ/YzpjPUVzKGZ1bmN0aW9uKHQpe3JldHVybiBfcyh7cG9pbnQ6ZnVuY3Rpb24obixlKXt2YXIgcj10KG4sZSk7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KGUpKHgoYShNKHM9dCkpKSkpfSxULnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9dCxtPXZvaWQgMCxFKCkpOnh9LFQucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09dCx3PXI9aT1vPW51bGwsRSgpKTpNfSxULmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdD9WZihtPXQqSWEpOihtPW51bGwsR2YpLEUoKSk6bSpGYX0sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPW51bGw9PXQ/KHc9cj1pPW89bnVsbCxtYyk6WmYodz0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sbz0rdFsxXVsxXSksRSgpKTpudWxsPT13P251bGw6W1t3LHJdLFtpLG9dXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxTKCkpOmx9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGQ9K3RbMV0sUygpKTpbaCxkXX0sVC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqSWEsdj10WzFdJTM2MCpJYSxTKCkpOltwKkZhLHYqRmFdfSxULnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpJYSx5PXRbMV0lMzYwKklhLF89dC5sZW5ndGg+Mj90WzJdJTM2MCpJYTowLFMoKSk6W2cqRmEseSpGYSxfKkZhXX0sVC5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpJYSxTKCkpOmIqRmF9LFQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVNzKHUsQT10KnQpLEUoKSk6S2EoQSl9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhzKFQsdCxuKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdzKFQsdCxuKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LG4pe3JldHVybiBNcyhULHQsbil9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFzKFQsdCxuKX0sZnVuY3Rpb24oKXtyZXR1cm4gbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxULmludmVydD1uLmludmVydCYmTixTKCl9fWZ1bmN0aW9uIHpzKHQpe3ZhciBuPTAsZT1xYS8zLHI9UHModCksaT1yKG4sZSk7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Iobj10WzBdKklhLGU9dFsxXSpJYSk6W24qRmEsZSpGYV19LGl9ZnVuY3Rpb24gUnModCxuKXt2YXIgZT1RYSh0KSxyPShlK1FhKG4pKS8yO2lmKEhhKHIpPERhKXJldHVybiBmdW5jdGlvbih0KXt2YXIgbj1HYSh0KTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuW3QqbixRYShlKS9uXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9uLGV1KGUqbildfSxlfSh0KTt2YXIgaT0xK2UqKDIqci1lKSxvPUthKGkpL3I7ZnVuY3Rpb24gYSh0LG4pe3ZhciBlPUthKGktMipyKlFhKG4pKS9yO3JldHVybltlKlFhKHQqPXIpLG8tZSpHYSh0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uO3JldHVybltYYSh0LEhhKGUpKS9yKkphKGUpLGV1KChpLSh0KnQrZSplKSpyKnIpLygyKnIpKV19LGF9ZnVuY3Rpb24gTHMoKXtyZXR1cm4genMoUnMpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9ZnVuY3Rpb24gRHMoKXtyZXR1cm4gTHMoKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX1mdW5jdGlvbiBVcyh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1HYShuKSxpPUdhKGUpLG89dChyKmkpO3JldHVybltvKmkqUWEobiksbypRYShlKV19fWZ1bmN0aW9uIHFzKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPUthKG4qbitlKmUpLGk9dChyKSxvPVFhKGkpLGE9R2EoaSk7cmV0dXJuW1hhKG4qbyxyKmEpLGV1KHImJmUqby9yKV19fXZhciBPcz1VcyhmdW5jdGlvbih0KXtyZXR1cm4gS2EoMi8oMSt0KSl9KTtPcy5pbnZlcnQ9cXMoZnVuY3Rpb24odCl7cmV0dXJuIDIqZXUodC8yKX0pO3ZhciBZcz1VcyhmdW5jdGlvbih0KXtyZXR1cm4odD1udSh0KSkmJnQvUWEodCl9KTtmdW5jdGlvbiBCcyh0LG4pe3JldHVyblt0LFdhKHR1KChPYStuKS8yKSldfWZ1bmN0aW9uIEZzKHQpe3ZhciBuLGUscixpPUNzKHQpLG89aS5jZW50ZXIsYT1pLnNjYWxlLHU9aS50cmFuc2xhdGUsZj1pLmNsaXBFeHRlbnQsYz1udWxsO2Z1bmN0aW9uIHMoKXt2YXIgbz1xYSphKCksdT1pKFJmKGkucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBmKG51bGw9PWM/W1t1WzBdLW8sdVsxXS1vXSxbdVswXStvLHVbMV0rb11dOnQ9PT1Ccz9bW01hdGgubWF4KHVbMF0tbyxjKSxuXSxbTWF0aC5taW4odVswXStvLGUpLHJdXTpbW2MsTWF0aC5tYXgodVsxXS1vLG4pXSxbZSxNYXRoLm1pbih1WzFdK28scildXSl9cmV0dXJuIGkuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCkscygpKTphKCl9LGkudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1KHQpLHMoKSk6dSgpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxzKCkpOm8oKX0saS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2M9bj1lPXI9bnVsbDooYz0rdFswXVswXSxuPSt0WzBdWzFdLGU9K3RbMV1bMF0scj0rdFsxXVsxXSkscygpKTpudWxsPT1jP251bGw6W1tjLG5dLFtlLHJdXX0scygpfWZ1bmN0aW9uIElzKHQpe3JldHVybiB0dSgoT2ErdCkvMil9ZnVuY3Rpb24gSHModCxuKXt2YXIgZT1HYSh0KSxyPXQ9PT1uP1FhKHQpOldhKGUvR2EobikpL1dhKElzKG4pL0lzKHQpKSxpPWUqWmEoSXModCkscikvcjtpZighcilyZXR1cm4gQnM7ZnVuY3Rpb24gbyh0LG4pe2k+MD9uPC1PYStEYSYmKG49LU9hK0RhKTpuPk9hLURhJiYobj1PYS1EYSk7dmFyIGU9aS9aYShJcyhuKSxyKTtyZXR1cm5bZSpRYShyKnQpLGktZSpHYShyKnQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1pLW4sbz1KYShyKSpLYSh0KnQrZSplKTtyZXR1cm5bWGEodCxIYShlKSkvcipKYShlKSwyKmphKFphKGkvbywxL3IpKS1PYV19LG99ZnVuY3Rpb24ganModCxuKXtyZXR1cm5bdCxuXX1mdW5jdGlvbiBYcyh0LG4pe3ZhciBlPUdhKHQpLHI9dD09PW4/UWEodCk6KGUtR2EobikpLyhuLXQpLGk9ZS9yK3Q7aWYoSGEocik8RGEpcmV0dXJuIGpzO2Z1bmN0aW9uIG8odCxuKXt2YXIgZT1pLW4sbz1yKnQ7cmV0dXJuW2UqUWEobyksaS1lKkdhKG8pXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1pLW47cmV0dXJuW1hhKHQsSGEoZSkpL3IqSmEoZSksaS1KYShyKSpLYSh0KnQrZSplKV19LG99WXMuaW52ZXJ0PXFzKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksQnMuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QsMipqYSgkYShuKSktT2FdfSxqcy5pbnZlcnQ9anM7dmFyIEdzPTEuMzQwMjY0LFZzPS0uMDgxMTA2LCRzPTg5M2UtNixXcz0uMDAzNzk2LFpzPUthKDMpLzI7ZnVuY3Rpb24gUXModCxuKXt2YXIgZT1ldShacypRYShuKSkscj1lKmUsaT1yKnIqcjtyZXR1cm5bdCpHYShlKS8oWnMqKEdzKzMqVnMqcitpKig3KiRzKzkqV3MqcikpKSxlKihHcytWcypyK2kqKCRzK1dzKnIpKV19ZnVuY3Rpb24gSnModCxuKXt2YXIgZT1HYShuKSxyPUdhKHQpKmU7cmV0dXJuW2UqUWEodCkvcixRYShuKS9yXX1mdW5jdGlvbiBLcyh0LG4sZSxyKXtyZXR1cm4gMT09PXQmJjE9PT1uJiYwPT09ZSYmMD09PXI/bWM6X3Moe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSp0K2UsbypuK3IpfX0pfWZ1bmN0aW9uIHRsKHQsbil7dmFyIGU9bipuLHI9ZSplO3JldHVyblt0KiguODcwNy0uMTMxOTc5KmUrcioociooLjAwMzk3MSplLS4wMDE1MjkqciktLjAxMzc5MSkpLG4qKDEuMDA3MjI2K2UqKC4wMTUwODUrciooLjAyODg3NCplLS4wNDQ0NzUtLjAwNTkxNipyKSkpXX1mdW5jdGlvbiBubCh0LG4pe3JldHVybltHYShuKSpRYSh0KSxRYShuKV19ZnVuY3Rpb24gZWwodCxuKXt2YXIgZT1HYShuKSxyPTErR2EodCkqZTtyZXR1cm5bZSpRYSh0KS9yLFFhKG4pL3JdfWZ1bmN0aW9uIHJsKHQsbil7cmV0dXJuW1dhKHR1KChPYStuKS8yKSksLXRdfWZ1bmN0aW9uIGlsKHQsbil7cmV0dXJuIHQucGFyZW50PT09bi5wYXJlbnQ/MToyfWZ1bmN0aW9uIG9sKHQsbil7cmV0dXJuIHQrbi54fWZ1bmN0aW9uIGFsKHQsbil7cmV0dXJuIE1hdGgubWF4KHQsbi55KX1mdW5jdGlvbiB1bCh0KXt2YXIgbj0wLGU9dC5jaGlsZHJlbixyPWUmJmUubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KW4rPWVbcl0udmFsdWU7ZWxzZSBuPTE7dC52YWx1ZT1ufWZ1bmN0aW9uIGZsKHQsbil7dmFyIGUscixpLG8sYSx1PW5ldyBobCh0KSxmPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxjPVt1XTtmb3IobnVsbD09biYmKG49Y2wpO2U9Yy5wb3AoKTspaWYoZiYmKGUudmFsdWU9K2UuZGF0YS52YWx1ZSksKGk9bihlLmRhdGEpKSYmKGE9aS5sZW5ndGgpKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhKSxvPWEtMTtvPj0wOy0tbyljLnB1c2gocj1lLmNoaWxkcmVuW29dPW5ldyBobChpW29dKSksci5wYXJlbnQ9ZSxyLmRlcHRoPWUuZGVwdGgrMTtyZXR1cm4gdS5lYWNoQmVmb3JlKGxsKX1mdW5jdGlvbiBjbCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzbCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gbGwodCl7dmFyIG49MDtkb3t0LmhlaWdodD1ufXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytuKX1mdW5jdGlvbiBobCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1Rcy5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGUscj1uLGk9cipyLG89aSppKmksYT0wO2E8MTImJihvPShpPShyLT1lPShyKihHcytWcyppK28qKCRzK1dzKmkpKS1uKS8oR3MrMypWcyppK28qKDcqJHMrOSpXcyppKSkpKnIpKmkqaSwhKEhhKGUpPFVhKSk7KythKTtyZXR1cm5bWnMqdCooR3MrMypWcyppK28qKDcqJHMrOSpXcyppKSkvR2EociksZXUoUWEocikvWnMpXX0sSnMuaW52ZXJ0PXFzKGphKSx0bC5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZSxyPW4saT0yNTtkb3t2YXIgbz1yKnIsYT1vKm87ci09ZT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKiguMDI4ODc0Km8tLjA0NDQ3NS0uMDA1OTE2KmEpKSktbikvKDEuMDA3MjI2K28qKC4wNDUyNTUrYSooLjI1OTg2NipvLS4zMTEzMjUtLjAwNTkxNioxMSphKSkpfXdoaWxlKEhhKGUpPkRhJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhvPXIqcikqKG8qKG8qbypvKiguMDAzOTcxLS4wMDE1MjkqbyktLjAxMzc5MSktLjEzMTk3OSkpLHJdfSxubC5pbnZlcnQ9cXMoZXUpLGVsLmludmVydD1xcyhmdW5jdGlvbih0KXtyZXR1cm4gMipqYSh0KX0pLHJsLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblstbiwyKmphKCRhKHQpKS1PYV19LGhsLnByb3RvdHlwZT1mbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmhsLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKHVsKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvPXRoaXMsYT1bb107ZG97Zm9yKG49YS5yZXZlcnNlKCksYT1bXTtvPW4ucG9wKCk7KWlmKHQobyksZT1vLmNoaWxkcmVuKWZvcihyPTAsaT1lLmxlbmd0aDtyPGk7KytyKWEucHVzaChlW3JdKX13aGlsZShhLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGk9dGhpcyxvPVtpXSxhPVtdO2k9by5wb3AoKTspaWYoYS5wdXNoKGkpLG49aS5jaGlsZHJlbilmb3IoZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlvLnB1c2gobltlXSk7Zm9yKDtpPWEucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxuPXIuY2hpbGRyZW4pZm9yKGU9bi5sZW5ndGgtMTtlPj0wOy0tZSlpLnB1c2gobltlXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24obil7Zm9yKHZhciBlPSt0KG4uZGF0YSl8fDAscj1uLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyllKz1yW2ldLnZhbHVlO24udmFsdWU9ZX0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmbi5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMsZT1mdW5jdGlvbih0LG4pe2lmKHQ9PT1uKXJldHVybiB0O3ZhciBlPXQuYW5jZXN0b3JzKCkscj1uLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1lLnBvcCgpLG49ci5wb3AoKTt0PT09bjspaT10LHQ9ZS5wb3AoKSxuPXIucG9wKCk7cmV0dXJuIGl9KG4sdCkscj1bbl07biE9PWU7KW49bi5wYXJlbnQsci5wdXNoKG4pO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09ZTspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLG49W3RdO3Q9dC5wYXJlbnQ7KW4ucHVzaCh0KTtyZXR1cm4gbn0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3QucHVzaChuKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8dC5wdXNoKG4pfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihlKXtlIT09dCYmbi5wdXNoKHtzb3VyY2U6ZS5wYXJlbnQsdGFyZ2V0OmV9KX0pLG59LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gZmwodGhpcykuZWFjaEJlZm9yZShzbCl9fTt2YXIgZGw9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIHBsKHQpe2Zvcih2YXIgbixlLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9dC5sZW5ndGg7cjspZT1NYXRoLnJhbmRvbSgpKnItLXwwLG49dFtyXSx0W3JdPXRbZV0sdFtlXT1uO3JldHVybiB0fShkbC5jYWxsKHQpKSkubGVuZ3RoLG89W107cjxpOyluPXRbcl0sZSYmeWwoZSxuKT8rK3I6KGU9Ymwobz12bChvLG4pKSxyPTApO3JldHVybiBlfWZ1bmN0aW9uIHZsKHQsbil7dmFyIGUscjtpZihfbChuLHQpKXJldHVybltuXTtmb3IoZT0wO2U8dC5sZW5ndGg7KytlKWlmKGdsKG4sdFtlXSkmJl9sKG1sKHRbZV0sbiksdCkpcmV0dXJuW3RbZV0sbl07Zm9yKGU9MDtlPHQubGVuZ3RoLTE7KytlKWZvcihyPWUrMTtyPHQubGVuZ3RoOysrcilpZihnbChtbCh0W2VdLHRbcl0pLG4pJiZnbChtbCh0W2VdLG4pLHRbcl0pJiZnbChtbCh0W3JdLG4pLHRbZV0pJiZfbCh4bCh0W2VdLHRbcl0sbiksdCkpcmV0dXJuW3RbZV0sdFtyXSxuXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gZ2wodCxuKXt2YXIgZT10LnItbi5yLHI9bi54LXQueCxpPW4ueS10Lnk7cmV0dXJuIGU8MHx8ZSplPHIqcitpKml9ZnVuY3Rpb24geWwodCxuKXt2YXIgZT10LnItbi5yKzFlLTYscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZT4wJiZlKmU+cipyK2kqaX1mdW5jdGlvbiBfbCh0LG4pe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7KytlKWlmKCF5bCh0LG5bZV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGJsKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybnt4OihuPXRbMF0pLngseTpuLnkscjpuLnJ9O2Nhc2UgMjpyZXR1cm4gbWwodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHhsKHRbMF0sdFsxXSx0WzJdKX12YXIgbn1mdW5jdGlvbiBtbCh0LG4pe3ZhciBlPXQueCxyPXQueSxpPXQucixvPW4ueCxhPW4ueSx1PW4ucixmPW8tZSxjPWEtcixzPXUtaSxsPU1hdGguc3FydChmKmYrYypjKTtyZXR1cm57eDooZStvK2YvbCpzKS8yLHk6KHIrYStjL2wqcykvMixyOihsK2krdSkvMn19ZnVuY3Rpb24geGwodCxuLGUpe3ZhciByPXQueCxpPXQueSxvPXQucixhPW4ueCx1PW4ueSxmPW4ucixjPWUueCxzPWUueSxsPWUucixoPXItYSxkPXItYyxwPWktdSx2PWktcyxnPWYtbyx5PWwtbyxfPXIqcitpKmktbypvLGI9Xy1hKmEtdSp1K2YqZixtPV8tYypjLXMqcytsKmwseD1kKnAtaCp2LHc9KHAqbS12KmIpLygyKngpLXIsTT0odipnLXAqeSkveCxBPShkKmItaCptKS8oMip4KS1pLFQ9KGgqeS1kKmcpL3gsTj1NKk0rVCpULTEsUz0yKihvK3cqTStBKlQpLEU9dyp3K0EqQS1vKm8saz0tKE4/KFMrTWF0aC5zcXJ0KFMqUy00Kk4qRSkpLygyKk4pOkUvUyk7cmV0dXJue3g6cit3K00qayx5OmkrQStUKmsscjprfX1mdW5jdGlvbiB3bCh0LG4sZSl7dmFyIHIsaSxvLGEsdT10Lngtbi54LGY9dC55LW4ueSxjPXUqdStmKmY7Yz8oaT1uLnIrZS5yLGkqPWksYT10LnIrZS5yLGk+KGEqPWEpPyhyPShjK2EtaSkvKDIqYyksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxhL2MtcipyKSksZS54PXQueC1yKnUtbypmLGUueT10LnktcipmK28qdSk6KHI9KGMraS1hKS8oMipjKSxvPU1hdGguc3FydChNYXRoLm1heCgwLGkvYy1yKnIpKSxlLng9bi54K3IqdS1vKmYsZS55PW4ueStyKmYrbyp1KSk6KGUueD1uLngrZS5yLGUueT1uLnkpfWZ1bmN0aW9uIE1sKHQsbil7dmFyIGU9dC5yK24uci0xZS02LHI9bi54LXQueCxpPW4ueS10Lnk7cmV0dXJuIGU+MCYmZSplPnIqcitpKml9ZnVuY3Rpb24gQWwodCl7dmFyIG49dC5fLGU9dC5uZXh0Ll8scj1uLnIrZS5yLGk9KG4ueCplLnIrZS54Km4ucikvcixvPShuLnkqZS5yK2UueSpuLnIpL3I7cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gVGwodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIE5sKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIG4sZSxyLGksbyxhLHUsZixjLHMsbDtpZigobj10WzBdKS54PTAsbi55PTAsIShpPjEpKXJldHVybiBuLnI7aWYoZT10WzFdLG4ueD0tZS5yLGUueD1uLnIsZS55PTAsIShpPjIpKXJldHVybiBuLnIrZS5yO3dsKGUsbixyPXRbMl0pLG49bmV3IFRsKG4pLGU9bmV3IFRsKGUpLHI9bmV3IFRsKHIpLG4ubmV4dD1yLnByZXZpb3VzPWUsZS5uZXh0PW4ucHJldmlvdXM9cixyLm5leHQ9ZS5wcmV2aW91cz1uO3Q6Zm9yKHU9Mzt1PGk7Kyt1KXt3bChuLl8sZS5fLHI9dFt1XSkscj1uZXcgVGwociksZj1lLm5leHQsYz1uLnByZXZpb3VzLHM9ZS5fLnIsbD1uLl8ucjtkb3tpZihzPD1sKXtpZihNbChmLl8sci5fKSl7ZT1mLG4ubmV4dD1lLGUucHJldmlvdXM9biwtLXU7Y29udGludWUgdH1zKz1mLl8ucixmPWYubmV4dH1lbHNle2lmKE1sKGMuXyxyLl8pKXsobj1jKS5uZXh0PWUsZS5wcmV2aW91cz1uLC0tdTtjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5wcmV2aW91c319d2hpbGUoZiE9PWMubmV4dCk7Zm9yKHIucHJldmlvdXM9bixyLm5leHQ9ZSxuLm5leHQ9ZS5wcmV2aW91cz1lPXIsbz1BbChuKTsocj1yLm5leHQpIT09ZTspKGE9QWwocikpPG8mJihuPXIsbz1hKTtlPW4ubmV4dH1mb3Iobj1bZS5fXSxyPWU7KHI9ci5uZXh0KSE9PWU7KW4ucHVzaChyLl8pO2ZvcihyPXBsKG4pLHU9MDt1PGk7Kyt1KShuPXRbdV0pLngtPXIueCxuLnktPXIueTtyZXR1cm4gci5yfWZ1bmN0aW9uIFNsKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBFbCgpe3JldHVybiAwfWZ1bmN0aW9uIGtsKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBDbCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIFBsKHQpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVufHwobi5yPU1hdGgubWF4KDAsK3Qobil8fDApKX19ZnVuY3Rpb24gemwodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYocj1lLmNoaWxkcmVuKXt2YXIgcixpLG8sYT1yLmxlbmd0aCx1PXQoZSkqbnx8MDtpZih1KWZvcihpPTA7aTxhOysraSlyW2ldLnIrPXU7aWYobz1ObChyKSx1KWZvcihpPTA7aTxhOysraSlyW2ldLnItPXU7ZS5yPW8rdX19fWZ1bmN0aW9uIFJsKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uLnBhcmVudDtuLnIqPXQsZSYmKG4ueD1lLngrdCpuLngsbi55PWUueSt0Km4ueSl9fWZ1bmN0aW9uIExsKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBEbCh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxmPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3U8ZjspKG89YVt1XSkueTA9ZSxvLnkxPWksby54MD1uLG8ueDE9bis9by52YWx1ZSpjfXZhciBVbD0iJCIscWw9e2RlcHRoOi0xfSxPbD17fTtmdW5jdGlvbiBZbCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBCbCh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBGbCh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiBJbCh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bMF06dC50fWZ1bmN0aW9uIEhsKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/bltuLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gamwodCxuLGUpe3ZhciByPWUvKG4uaS10LmkpO24uYy09cixuLnMrPWUsdC5jKz1yLG4ueis9ZSxuLm0rPWV9ZnVuY3Rpb24gWGwodCxuLGUpe3JldHVybiB0LmEucGFyZW50PT09bi5wYXJlbnQ/dC5hOmV9ZnVuY3Rpb24gR2wodCxuKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9bn1mdW5jdGlvbiBWbCh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxmPWEubGVuZ3RoLGM9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK3U8ZjspKG89YVt1XSkueDA9bixvLngxPXIsby55MD1lLG8ueTE9ZSs9by52YWx1ZSpjfUdsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhsLnByb3RvdHlwZSk7dmFyICRsPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBXbCh0LG4sZSxyLGksbyl7Zm9yKHZhciBhLHUsZixjLHMsbCxoLGQscCx2LGcseT1bXSxfPW4uY2hpbGRyZW4sYj0wLG09MCx4PV8ubGVuZ3RoLHc9bi52YWx1ZTtiPHg7KXtmPWktZSxjPW8tcjtkb3tzPV9bbSsrXS52YWx1ZX13aGlsZSghcyYmbTx4KTtmb3IobD1oPXMsZz1zKnMqKHY9TWF0aC5tYXgoYy9mLGYvYykvKHcqdCkpLHA9TWF0aC5tYXgoaC9nLGcvbCk7bTx4OysrbSl7aWYocys9dT1fW21dLnZhbHVlLHU8bCYmKGw9dSksdT5oJiYoaD11KSxnPXMqcyp2LChkPU1hdGgubWF4KGgvZyxnL2wpKT5wKXtzLT11O2JyZWFrfXA9ZH15LnB1c2goYT17dmFsdWU6cyxkaWNlOmY8YyxjaGlsZHJlbjpfLnNsaWNlKGIsbSl9KSxhLmRpY2U/RGwoYSxlLHIsaSx3P3IrPWMqcy93Om8pOlZsKGEsZSxyLHc/ZSs9ZipzL3c6aSxvKSx3LT1zLGI9bX1yZXR1cm4geX12YXIgWmw9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7V2wobix0LGUscixpLG8pfXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KCRsKTt2YXIgUWw9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09bilmb3IodmFyIGEsdSxmLGMscyxsPS0xLGg9YS5sZW5ndGgsZD10LnZhbHVlOysrbDxoOyl7Zm9yKGY9KHU9YVtsXSkuY2hpbGRyZW4sYz11LnZhbHVlPTAscz1mLmxlbmd0aDtjPHM7KytjKXUudmFsdWUrPWZbY10udmFsdWU7dS5kaWNlP0RsKHUsZSxyLGkscis9KG8tcikqdS52YWx1ZS9kKTpWbCh1LGUscixlKz0oaS1lKSp1LnZhbHVlL2QsbyksZC09dS52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PWE9V2wobix0LGUscixpLG8pLGEucmF0aW89bn1yZXR1cm4gZS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxlfSgkbCk7ZnVuY3Rpb24gSmwodCxuKXtyZXR1cm4gdFswXS1uWzBdfHx0WzFdLW5bMV19ZnVuY3Rpb24gS2wodCl7Zm9yKHZhciBuLGUscixpPXQubGVuZ3RoLG89WzAsMV0sYT0yLHU9Mjt1PGk7Kyt1KXtmb3IoO2E+MSYmKG49dFtvW2EtMl1dLGU9dFtvW2EtMV1dLHI9dFt1XSwoZVswXS1uWzBdKSooclsxXS1uWzFdKS0oZVsxXS1uWzFdKSooclswXS1uWzBdKTw9MCk7KS0tYTtvW2ErK109dX1yZXR1cm4gby5zbGljZSgwLGEpfWZ1bmN0aW9uIHRoKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyIG5oPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSwxPT09YXJndW1lbnRzLmxlbmd0aD8oZT10LHQ9MCk6ZS09dCxmdW5jdGlvbigpe3JldHVybiBuKCkqZSt0fX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh0aCksZWg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3QsZT1udWxsPT1lPzE6K2UsZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1yKW89cixyPW51bGw7ZWxzZSBkb3tyPTIqbigpLTEsbz0yKm4oKS0xLGk9cipyK28qb313aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh0aCkscmg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKCl7dmFyIHQ9ZWguc291cmNlKG4pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIGUuc291cmNlPXQsZX0odGgpLGloPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxyPTA7cjx0OysrcillKz1uKCk7cmV0dXJuIGV9fXJldHVybiBlLnNvdXJjZT10LGV9KHRoKSxvaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7dmFyIGU9aWguc291cmNlKG4pKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKCkvdH19cmV0dXJuIGUuc291cmNlPXQsZX0odGgpLGFoPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1uKCkpL3R9fXJldHVybiBlLnNvdXJjZT10LGV9KHRoKSx1aD1BcnJheS5wcm90b3R5cGUsZmg9dWgubWFwLGNoPXVoLnNsaWNlLHNoPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIGxoKHQpe3ZhciBuPUtpKCksZT1bXSxyPXNoO2Z1bmN0aW9uIGkoaSl7dmFyIG89aSsiIixhPW4uZ2V0KG8pO2lmKCFhKXtpZihyIT09c2gpcmV0dXJuIHI7bi5zZXQobyxhPWUucHVzaChpKSl9cmV0dXJuIHRbKGEtMSkldC5sZW5ndGhdfXJldHVybiB0PW51bGw9PXQ/W106Y2guY2FsbCh0KSxpLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sbj1LaSgpO2Zvcih2YXIgcixvLGE9LTEsdT10Lmxlbmd0aDsrK2E8dTspbi5oYXMobz0ocj10W2FdKSsiIil8fG4uc2V0KG8sZS5wdXNoKHIpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jaC5jYWxsKG4pLGkpOnQuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGxoKCkuZG9tYWluKGUpLnJhbmdlKHQpLnVua25vd24ocil9LGl9ZnVuY3Rpb24gaGgoKXt2YXIgdCxuLGU9bGgoKS51bmtub3duKHZvaWQgMCkscj1lLmRvbWFpbixpPWUucmFuZ2Usbz1bMCwxXSxhPSExLHU9MCxmPTAsYz0uNTtmdW5jdGlvbiBzKCl7dmFyIGU9cigpLmxlbmd0aCxzPW9bMV08b1swXSxsPW9bcy0wXSxoPW9bMS1zXTt0PShoLWwpL01hdGgubWF4KDEsZS11KzIqZiksYSYmKHQ9TWF0aC5mbG9vcih0KSksbCs9KGgtbC10KihlLXUpKSpjLG49dCooMS11KSxhJiYobD1NYXRoLnJvdW5kKGwpLG49TWF0aC5yb3VuZChuKSk7dmFyIGQ9ZyhlKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGwrdCpufSk7cmV0dXJuIGkocz9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIGUudW5rbm93bixlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxzKCkpOnIoKX0sZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1bK3RbMF0sK3RbMV1dLHMoKSk6by5zbGljZSgpfSxlLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG89Wyt0WzBdLCt0WzFdXSxhPSEwLHMoKX0sZS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sZS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISF0LHMoKSk6YX0sZS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxzKCkpOnV9LGUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkscygpKTp1fSxlLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHMoKSk6Zn0sZS5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHMoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGhoKCkuZG9tYWluKHIoKSkucmFuZ2Uobykucm91bmQoYSkucGFkZGluZ0lubmVyKHUpLnBhZGRpbmdPdXRlcihmKS5hbGlnbihjKX0scygpfWZ1bmN0aW9uIGRoKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBwaCh0KXtyZXR1cm4rdH12YXIgdmg9WzAsMV07ZnVuY3Rpb24gZ2godCxuKXtyZXR1cm4obi09dD0rdCk/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtdCkvbn06ZGgobil9ZnVuY3Rpb24geWgodCxuLGUscil7dmFyIGk9dFswXSxvPXRbMV0sYT1uWzBdLHU9blsxXTtyZXR1cm4gbzxpPyhpPWUobyxpKSxhPXIodSxhKSk6KGk9ZShpLG8pLGE9cihhLHUpKSxmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gX2godCxuLGUscil7dmFyIG89TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpLTEsYT1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksZj0tMTtmb3IodFtvXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLG49bi5zbGljZSgpLnJldmVyc2UoKSk7KytmPG87KWFbZl09ZSh0W2ZdLHRbZisxXSksdVtmXT1yKG5bZl0sbltmKzFdKTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9aSh0LG4sMSxvKS0xO3JldHVybiB1W2VdKGFbZV0obikpfX1mdW5jdGlvbiBiaCh0LG4pe3JldHVybiBuLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKX1mdW5jdGlvbiBtaCh0LG4pe3ZhciBlLHIsaSxvPXZoLGE9dmgsdT1tZSxmPSExO2Z1bmN0aW9uIGMoKXtyZXR1cm4gZT1NYXRoLm1pbihvLmxlbmd0aCxhLmxlbmd0aCk+Mj9faDp5aCxyPWk9bnVsbCxzfWZ1bmN0aW9uIHMobil7cmV0dXJuKHJ8fChyPWUobyxhLGY/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9dChuPStuLGU9K2UpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9bj8wOnQ+PWU/MTpyKHQpfX19KHQpOnQsdSkpKSgrbil9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihpfHwoaT1lKGEsbyxnaCxmP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQobj0rbixlPStlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/bjp0Pj0xP2U6cih0KX19fShuKTpuKSkpKCt0KX0scy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZmguY2FsbCh0LHBoKSxjKCkpOm8uc2xpY2UoKX0scy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1jaC5jYWxsKHQpLGMoKSk6YS5zbGljZSgpfSxzLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Y2guY2FsbCh0KSx1PXhlLGMoKX0scy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0hIXQsYygpKTpmfSxzLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsYygpKTp1fSxjKCl9ZnVuY3Rpb24geGgobil7dmFyIGU9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBtKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gZnVuY3Rpb24obixlLHIpe3ZhciBpLG89blswXSxhPW5bbi5sZW5ndGgtMV0sdT13KG8sYSxudWxsPT1lPzEwOmUpO3N3aXRjaCgocj1iYShudWxsPT1yPyIsZiI6cikpLnR5cGUpe2Nhc2UicyI6dmFyIGY9TWF0aC5tYXgoTWF0aC5hYnMobyksTWF0aC5hYnMoYSkpO3JldHVybiBudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1rYSh1LGYpKXx8KHIucHJlY2lzaW9uPWkpLHQuZm9ybWF0UHJlZml4KHIsZik7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9Q2EodSxNYXRoLm1heChNYXRoLmFicyhvKSxNYXRoLmFicyhhKSkpKXx8KHIucHJlY2lzaW9uPWktKCJlIj09PXIudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1FYSh1KSl8fChyLnByZWNpc2lvbj1pLTIqKCIlIj09PXIudHlwZSkpfXJldHVybiB0LmZvcm1hdChyKX0oZSgpLG4scil9LG4ubmljZT1mdW5jdGlvbih0KXtudWxsPT10JiYodD0xMCk7dmFyIHIsaT1lKCksbz0wLGE9aS5sZW5ndGgtMSx1PWlbb10sZj1pW2FdO3JldHVybiBmPHUmJihyPXUsdT1mLGY9cixyPW8sbz1hLGE9ciksKHI9eCh1LGYsdCkpPjA/cj14KHU9TWF0aC5mbG9vcih1L3IpKnIsZj1NYXRoLmNlaWwoZi9yKSpyLHQpOnI8MCYmKHI9eCh1PU1hdGguY2VpbCh1KnIpL3IsZj1NYXRoLmZsb29yKGYqcikvcix0KSkscj4wPyhpW29dPU1hdGguZmxvb3IodS9yKSpyLGlbYV09TWF0aC5jZWlsKGYvcikqcixlKGkpKTpyPDAmJihpW29dPU1hdGguY2VpbCh1KnIpL3IsaVthXT1NYXRoLmZsb29yKGYqcikvcixlKGkpKSxufSxufWZ1bmN0aW9uIHdoKHQsbil7dmFyIGUscj0wLGk9KHQ9dC5zbGljZSgpKS5sZW5ndGgtMSxvPXRbcl0sYT10W2ldO3JldHVybiBhPG8mJihlPXIscj1pLGk9ZSxlPW8sbz1hLGE9ZSksdFtyXT1uLmZsb29yKG8pLHRbaV09bi5jZWlsKGEpLHR9ZnVuY3Rpb24gTWgodCxuKXtyZXR1cm4obj1NYXRoLmxvZyhuL3QpKT9mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZS90KS9ufTpkaChuKX1mdW5jdGlvbiBBaCh0LG4pe3JldHVybiB0PDA/ZnVuY3Rpb24oZSl7cmV0dXJuLU1hdGgucG93KC1uLGUpKk1hdGgucG93KC10LDEtZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhuLGUpKk1hdGgucG93KHQsMS1lKX19ZnVuY3Rpb24gVGgodCl7cmV0dXJuIGlzRmluaXRlKHQpPysoIjFlIit0KTp0PDA/MDp0fWZ1bmN0aW9uIE5oKHQpe3JldHVybiAxMD09PXQ/VGg6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCxuKX19ZnVuY3Rpb24gU2godCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5sb2cobikvdH0pfWZ1bmN0aW9uIEVoKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4tdCgtbil9fWZ1bmN0aW9uIGtoKHQsbil7cmV0dXJuIHQ8MD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX1mdW5jdGlvbiBDaCgpe3ZhciB0PTEsbj1taChmdW5jdGlvbihuLGUpe3JldHVybihlPWtoKGUsdCktKG49a2gobix0KSkpP2Z1bmN0aW9uKHIpe3JldHVybihraChyLHQpLW4pL2V9OmRoKGUpfSxmdW5jdGlvbihuLGUpe3JldHVybiBlPWtoKGUsdCktKG49a2gobix0KSksZnVuY3Rpb24ocil7cmV0dXJuIGtoKG4rZSpyLDEvdCl9fSksZT1uLmRvbWFpbjtyZXR1cm4gbi5leHBvbmVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rbixlKGUoKSkpOnR9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBiaChuLENoKCkuZXhwb25lbnQodCkpfSx4aChuKX12YXIgUGg9bmV3IERhdGUsemg9bmV3IERhdGU7ZnVuY3Rpb24gUmgodCxuLGUscil7ZnVuY3Rpb24gaShuKXtyZXR1cm4gdChuPW5ldyBEYXRlKCtuKSksbn1yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKGUtMSkpLG4oZSwxKSx0KGUpLGV9LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIG49aSh0KSxlPWkuY2VpbCh0KTtyZXR1cm4gdC1uPGUtdD9uOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odD1uZXcgRGF0ZSgrdCksbnVsbD09ZT8xOk1hdGguZmxvb3IoZSkpLHR9LGkucmFuZ2U9ZnVuY3Rpb24oZSxyLG8pe3ZhciBhLHU9W107aWYoZT1pLmNlaWwoZSksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKGU8ciYmbz4wKSlyZXR1cm4gdTtkb3t1LnB1c2goYT1uZXcgRGF0ZSgrZSkpLG4oZSxvKSx0KGUpfXdoaWxlKGE8ZSYmZTxyKTtyZXR1cm4gdX0saS5maWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFJoKGZ1bmN0aW9uKG4pe2lmKG4+PW4pZm9yKDt0KG4pLCFlKG4pOyluLnNldFRpbWUobi0xKX0sZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtuKHQsLTEpLCFlKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtuKHQsMSksIWUodCk7KTt9KX0sZSYmKGkuY291bnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gUGguc2V0VGltZSgrbiksemguc2V0VGltZSgrciksdChQaCksdCh6aCksTWF0aC5mbG9vcihlKFBoLHpoKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKG4pe3JldHVybiByKG4pJXQ9PTB9OmZ1bmN0aW9uKG4pe3JldHVybiBpLmNvdW50KDAsbikldD09MH0pOmk6bnVsbH0pLGl9dmFyIExoPVJoKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi10fSk7TGguZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9SaChmdW5jdGlvbihuKXtuLnNldFRpbWUoTWF0aC5mbG9vcihuL3QpKnQpfSxmdW5jdGlvbihuLGUpe24uc2V0VGltZSgrbitlKnQpfSxmdW5jdGlvbihuLGUpe3JldHVybihlLW4pL3R9KTpMaDpudWxsfTt2YXIgRGg9TGgucmFuZ2UsVWg9NmU0LHFoPTYwNDhlNSxPaD1SaChmdW5jdGlvbih0KXt0LnNldFRpbWUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrMWUzKm4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpLzFlM30sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSksWWg9T2gucmFuZ2UsQmg9UmgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9VaCkqVWgpfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKlVoKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9VaH0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksRmg9QmgucmFuZ2UsSWg9UmgoZnVuY3Rpb24odCl7dmFyIG49dC5nZXRUaW1lem9uZU9mZnNldCgpKlVoJTM2ZTU7bjwwJiYobis9MzZlNSksdC5zZXRUaW1lKDM2ZTUqTWF0aC5mbG9vcigoK3QtbikvMzZlNSkrbil9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0KzM2ZTUqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEhoPUloLnJhbmdlLGpoPVJoKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQtKG4uZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlVoKS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSxYaD1qaC5yYW5nZTtmdW5jdGlvbiBHaCh0KXtyZXR1cm4gUmgoZnVuY3Rpb24obil7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpLShuLmdldERheSgpKzctdCklNyksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpVaCkvcWh9KX12YXIgVmg9R2goMCksJGg9R2goMSksV2g9R2goMiksWmg9R2goMyksUWg9R2goNCksSmg9R2goNSksS2g9R2goNiksdGQ9VmgucmFuZ2UsbmQ9JGgucmFuZ2UsZWQ9V2gucmFuZ2UscmQ9WmgucmFuZ2UsaWQ9UWgucmFuZ2Usb2Q9SmgucmFuZ2UsYWQ9S2gucmFuZ2UsdWQ9UmgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksZmQ9dWQucmFuZ2UsY2Q9UmgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KTtjZC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1JoKGZ1bmN0aW9uKG4pe24uc2V0RnVsbFllYXIoTWF0aC5mbG9vcihuLmdldEZ1bGxZZWFyKCkvdCkqdCksbi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrZSp0KX0pOm51bGx9O3ZhciBzZD1jZC5yYW5nZSxsZD1SaChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipVaCl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvVWh9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pLGhkPWxkLnJhbmdlLGRkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0KzM2ZTUqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pLHBkPWRkLnJhbmdlLHZkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pLGdkPXZkLnJhbmdlO2Z1bmN0aW9uIHlkKHQpe3JldHVybiBSaChmdW5jdGlvbihuKXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCktKG4uZ2V0VVRDRGF5KCkrNy10KSU3KSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL3FofSl9dmFyIF9kPXlkKDApLGJkPXlkKDEpLG1kPXlkKDIpLHhkPXlkKDMpLHdkPXlkKDQpLE1kPXlkKDUpLEFkPXlkKDYpLFRkPV9kLnJhbmdlLE5kPWJkLnJhbmdlLFNkPW1kLnJhbmdlLEVkPXhkLnJhbmdlLGtkPXdkLnJhbmdlLENkPU1kLnJhbmdlLFBkPUFkLnJhbmdlLHpkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pLFJkPXpkLnJhbmdlLExkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSk7TGQuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9SaChmdW5jdGlvbihuKXtuLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRVVENGdWxsWWVhcigpL3QpKnQpLG4uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLGUpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK2UqdCl9KTpudWxsfTt2YXIgRGQ9TGQucmFuZ2U7ZnVuY3Rpb24gVWQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIG4uc2V0RnVsbFllYXIodC55KSxufXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIHFkKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIG49bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gbi5zZXRVVENGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIE9kKHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlkKHQpe3ZhciBuPXQuZGF0ZVRpbWUsZT10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsbz10LmRheXMsYT10LnNob3J0RGF5cyx1PXQubW9udGhzLGY9dC5zaG9ydE1vbnRocyxjPVZkKGkpLHM9JGQoaSksbD1WZChvKSxoPSRkKG8pLGQ9VmQoYSkscD0kZChhKSx2PVZkKHUpLGc9JGQodSkseT1WZChmKSxfPSRkKGYpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGZbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldE1vbnRoKCldfSxjOm51bGwsZDpwcCxlOnBwLGY6YnAsSDp2cCxJOmdwLGo6eXAsTDpfcCxtOm1wLE06eHAscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUTpXcCxzOlpwLFM6d3AsdTpNcCxVOkFwLFY6VHAsdzpOcCxXOlNwLHg6bnVsbCxYOm51bGwseTpFcCxZOmtwLFo6Q3AsIiUiOiRwfSxtPXthOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBmW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6UHAsZTpQcCxmOlVwLEg6enAsSTpScCxqOkxwLEw6RHAsbTpxcCxNOk9wLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LFE6V3AsczpacCxTOllwLHU6QnAsVTpGcCxWOklwLHc6SHAsVzpqcCx4Om51bGwsWDpudWxsLHk6WHAsWTpHcCxaOlZwLCIlIjokcH0seD17YTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1sLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1oW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxuLGUpe3ZhciByPXkuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5tPV9bclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9di5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09Z1tyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQSh0LG4sZSxyKX0sZDppcCxlOmlwLGY6c3AsSDphcCxJOmFwLGo6b3AsTDpjcCxtOnJwLE06dXAscDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9Yy5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LnA9c1tyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxROmhwLHM6ZHAsUzpmcCx1OlpkLFU6UWQsVjpKZCx3OldkLFc6S2QseDpmdW5jdGlvbih0LG4scil7cmV0dXJuIEEodCxlLG4scil9LFg6ZnVuY3Rpb24odCxuLGUpe3JldHVybiBBKHQscixuLGUpfSx5Om5wLFk6dHAsWjplcCwiJSI6bHB9O2Z1bmN0aW9uIHcodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxvLGE9W10sdT0tMSxmPTAsYz10Lmxlbmd0aDtmb3IoZSBpbnN0YW5jZW9mIERhdGV8fChlPW5ldyBEYXRlKCtlKSk7Kyt1PGM7KTM3PT09dC5jaGFyQ29kZUF0KHUpJiYoYS5wdXNoKHQuc2xpY2UoZix1KSksbnVsbCE9KGk9RmRbcj10LmNoYXJBdCgrK3UpXSk/cj10LmNoYXJBdCgrK3UpOmk9ImUiPT09cj8iICI6IjAiLChvPW5bcl0pJiYocj1vKGUsaSkpLGEucHVzaChyKSxmPXUrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGYsdSkpLGEuam9pbigiIil9fWZ1bmN0aW9uIE0odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxvPU9kKDE5MDApO2lmKEEobyx0LGUrPSIiLDApIT1lLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KGk9KHI9cWQoT2Qoby55KSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9iZC5jZWlsKHIpOmJkKHIpLHI9dmQub2Zmc2V0KHIsNyooby5WLTEpKSxvLnk9ci5nZXRVVENGdWxsWWVhcigpLG8ubT1yLmdldFVUQ01vbnRoKCksby5kPXIuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KGk9KHI9bihPZChvLnkpKSkuZ2V0RGF5KCkscj1pPjR8fDA9PT1pPyRoLmNlaWwocik6JGgocikscj1qaC5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldEZ1bGxZZWFyKCksby5tPXIuZ2V0TW9udGgoKSxvLmQ9ci5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxpPSJaImluIG8/cWQoT2Qoby55KSkuZ2V0VVRDRGF5KCk6bihPZChvLnkpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKGkrNSklNzpvLncrNypvLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLHFkKG8pKTpuKG8pfX1mdW5jdGlvbiBBKHQsbixlLHIpe2Zvcih2YXIgaSxvLGE9MCx1PW4ubGVuZ3RoLGY9ZS5sZW5ndGg7YTx1Oyl7aWYocj49ZilyZXR1cm4tMTtpZigzNz09PShpPW4uY2hhckNvZGVBdChhKyspKSl7aWYoaT1uLmNoYXJBdChhKyspLCEobz14W2kgaW4gRmQ/bi5jaGFyQXQoYSsrKTppXSl8fChyPW8odCxlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KGUsYiksYi5YPXcocixiKSxiLmM9dyhuLGIpLG0ueD13KGUsbSksbS5YPXcocixtKSxtLmM9dyhuLG0pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIG49dyh0Kz0iIixiKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1NKHQrPSIiLFVkKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIG49dyh0Kz0iIixtKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1NKHQscWQpO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59fX12YXIgQmQsRmQ9eyItIjoiIixfOiIgIiwwOiIwIn0sSWQ9L15ccypcZCsvLEhkPS9eJS8samQ9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIFhkKHQsbixlKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsbz1pLmxlbmd0aDtyZXR1cm4gcisobzxlP25ldyBBcnJheShlLW8rMSkuam9pbihuKStpOmkpfWZ1bmN0aW9uIEdkKHQpe3JldHVybiB0LnJlcGxhY2UoamQsIlxcJCYiKX1mdW5jdGlvbiBWZCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoR2QpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiAkZCh0KXtmb3IodmFyIG49e30sZT0tMSxyPXQubGVuZ3RoOysrZTxyOyluW3RbZV0udG9Mb3dlckNhc2UoKV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBXZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVj0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0cCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSs0KSk7cmV0dXJuIHI/KHQueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBucCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVwKHQsbixlKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhuLnNsaWNlKGUsZSs2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9wKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzYpKTtyZXR1cm4gcj8odC5MPU1hdGguZmxvb3IoclswXS8xZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxwKHQsbixlKXt2YXIgcj1IZC5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGhwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LlE9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZHAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQuUT0xZTMqK3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcHAodCxuKXtyZXR1cm4gWGQodC5nZXREYXRlKCksbiwyKX1mdW5jdGlvbiB2cCh0LG4pe3JldHVybiBYZCh0LmdldEhvdXJzKCksbiwyKX1mdW5jdGlvbiBncCh0LG4pe3JldHVybiBYZCh0LmdldEhvdXJzKCklMTJ8fDEyLG4sMil9ZnVuY3Rpb24geXAodCxuKXtyZXR1cm4gWGQoMStqaC5jb3VudChjZCh0KSx0KSxuLDMpfWZ1bmN0aW9uIF9wKHQsbil7cmV0dXJuIFhkKHQuZ2V0TWlsbGlzZWNvbmRzKCksbiwzKX1mdW5jdGlvbiBicCh0LG4pe3JldHVybiBfcCh0LG4pKyIwMDAifWZ1bmN0aW9uIG1wKHQsbil7cmV0dXJuIFhkKHQuZ2V0TW9udGgoKSsxLG4sMil9ZnVuY3Rpb24geHAodCxuKXtyZXR1cm4gWGQodC5nZXRNaW51dGVzKCksbiwyKX1mdW5jdGlvbiB3cCh0LG4pe3JldHVybiBYZCh0LmdldFNlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIE1wKHQpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1uPzc6bn1mdW5jdGlvbiBBcCh0LG4pe3JldHVybiBYZChWaC5jb3VudChjZCh0KSx0KSxuLDIpfWZ1bmN0aW9uIFRwKHQsbil7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gdD1lPj00fHwwPT09ZT9RaCh0KTpRaC5jZWlsKHQpLFhkKFFoLmNvdW50KGNkKHQpLHQpKyg0PT09Y2QodCkuZ2V0RGF5KCkpLG4sMil9ZnVuY3Rpb24gTnAodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gU3AodCxuKXtyZXR1cm4gWGQoJGguY291bnQoY2QodCksdCksbiwyKX1mdW5jdGlvbiBFcCh0LG4pe3JldHVybiBYZCh0LmdldEZ1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24ga3AodCxuKXtyZXR1cm4gWGQodC5nZXRGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIENwKHQpe3ZhciBuPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4obj4wPyItIjoobio9LTEsIisiKSkrWGQobi82MHwwLCIwIiwyKStYZChuJTYwLCIwIiwyKX1mdW5jdGlvbiBQcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ0RhdGUoKSxuLDIpfWZ1bmN0aW9uIHpwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDSG91cnMoKSxuLDIpfWZ1bmN0aW9uIFJwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiBMcCh0LG4pe3JldHVybiBYZCgxK3ZkLmNvdW50KExkKHQpLHQpLG4sMyl9ZnVuY3Rpb24gRHAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIFVwKHQsbil7cmV0dXJuIERwKHQsbikrIjAwMCJ9ZnVuY3Rpb24gcXAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENNb250aCgpKzEsbiwyKX1mdW5jdGlvbiBPcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ01pbnV0ZXMoKSxuLDIpfWZ1bmN0aW9uIFlwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDU2Vjb25kcygpLG4sMil9ZnVuY3Rpb24gQnAodCl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PW4/NzpufWZ1bmN0aW9uIEZwKHQsbil7cmV0dXJuIFhkKF9kLmNvdW50KExkKHQpLHQpLG4sMil9ZnVuY3Rpb24gSXAodCxuKXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiB0PWU+PTR8fDA9PT1lP3dkKHQpOndkLmNlaWwodCksWGQod2QuY291bnQoTGQodCksdCkrKDQ9PT1MZCh0KS5nZXRVVENEYXkoKSksbiwyKX1mdW5jdGlvbiBIcCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBqcCh0LG4pe3JldHVybiBYZChiZC5jb3VudChMZCh0KSx0KSxuLDIpfWZ1bmN0aW9uIFhwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsbiwyKX1mdW5jdGlvbiBHcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LG4sNCl9ZnVuY3Rpb24gVnAoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uICRwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFdwKHQpe3JldHVybit0fWZ1bmN0aW9uIFpwKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gUXAobil7cmV0dXJuIEJkPVlkKG4pLHQudGltZUZvcm1hdD1CZC5mb3JtYXQsdC50aW1lUGFyc2U9QmQucGFyc2UsdC51dGNGb3JtYXQ9QmQudXRjRm9ybWF0LHQudXRjUGFyc2U9QmQudXRjUGFyc2UsQmR9UXAoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgSnA9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dC51dGNGb3JtYXQoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBLcD0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBuPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihuKT9udWxsOm59OnQudXRjUGFyc2UoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLHR2PTFlMyxudj02MCp0dixldj02MCpudixydj0yNCpldixpdj03KnJ2LG92PTMwKnJ2LGF2PTM2NSpydjtmdW5jdGlvbiB1dih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gZnYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gY3YodCxuLHIsaSxvLGEsdSxmLGMpe3ZhciBzPW1oKGdoLHZlKSxsPXMuaW52ZXJ0LGg9cy5kb21haW4sZD1jKCIuJUwiKSxwPWMoIjolUyIpLHY9YygiJUk6JU0iKSxnPWMoIiVJICVwIikseT1jKCIlYSAlZCIpLF89YygiJWIgJWQiKSxiPWMoIiVCIiksbT1jKCIlWSIpLHg9W1t1LDEsdHZdLFt1LDUsNSp0dl0sW3UsMTUsMTUqdHZdLFt1LDMwLDMwKnR2XSxbYSwxLG52XSxbYSw1LDUqbnZdLFthLDE1LDE1Km52XSxbYSwzMCwzMCpudl0sW28sMSxldl0sW28sMywzKmV2XSxbbyw2LDYqZXZdLFtvLDEyLDEyKmV2XSxbaSwxLHJ2XSxbaSwyLDIqcnZdLFtyLDEsaXZdLFtuLDEsb3ZdLFtuLDMsMypvdl0sW3QsMSxhdl1dO2Z1bmN0aW9uIE0oZSl7cmV0dXJuKHUoZSk8ZT9kOmEoZSk8ZT9wOm8oZSk8ZT92OmkoZSk8ZT9nOm4oZSk8ZT9yKGUpPGU/eTpfOnQoZSk8ZT9iOm0pKGUpfWZ1bmN0aW9uIEEobixyLGksbyl7aWYobnVsbD09biYmKG49MTApLCJudW1iZXIiPT10eXBlb2Ygbil7dmFyIGE9TWF0aC5hYnMoaS1yKS9uLHU9ZShmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pLnJpZ2h0KHgsYSk7dT09PXgubGVuZ3RoPyhvPXcoci9hdixpL2F2LG4pLG49dCk6dT8obz0odT14W2EveFt1LTFdWzJdPHhbdV1bMl0vYT91LTE6dV0pWzFdLG49dVswXSk6KG89TWF0aC5tYXgodyhyLGksbiksMSksbj1mKX1yZXR1cm4gbnVsbD09bz9uOm4uZXZlcnkobyl9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShsKHQpKX0scy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChmaC5jYWxsKHQsZnYpKTpoKCkubWFwKHV2KX0scy50aWNrcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9aCgpLGk9clswXSxvPXJbci5sZW5ndGgtMV0sYT1vPGk7cmV0dXJuIGEmJihlPWksaT1vLG89ZSksZT0oZT1BKHQsaSxvLG4pKT9lLnJhbmdlKGksbysxKTpbXSxhP2UucmV2ZXJzZSgpOmV9LHMudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1uP006YyhuKX0scy5uaWNlPWZ1bmN0aW9uKHQsbil7dmFyIGU9aCgpO3JldHVybih0PUEodCxlWzBdLGVbZS5sZW5ndGgtMV0sbikpP2god2goZSx0KSk6c30scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKHMsY3YodCxuLHIsaSxvLGEsdSxmLGMpKX0sc31mdW5jdGlvbiBzdih0KXtmb3IodmFyIG49dC5sZW5ndGgvNnwwLGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KWVbcl09IiMiK3Quc2xpY2UoNipyLDYqKytyKTtyZXR1cm4gZX12YXIgbHY9c3YoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpLGh2PXN2KCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKSxkdj1zdigiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2IikscHY9c3YoImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOCIpLHZ2PXN2KCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKSxndj1zdigiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIikseXY9c3YoImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OSIpLF92PXN2KCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKSxidj1zdigiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7ZnVuY3Rpb24gbXYodCl7cmV0dXJuIGxlKHRbdC5sZW5ndGgtMV0pfXZhciB4dj1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoc3YpLHd2PW12KHh2KSxNdj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoc3YpLEF2PW12KE12KSxUdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoc3YpLE52PW12KFR2KSxTdj1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoc3YpLEV2PW12KFN2KSxrdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoc3YpLEN2PW12KGt2KSxQdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoc3YpLHp2PW12KFB2KSxSdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoc3YpLEx2PW12KFJ2KSxEdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoc3YpLFV2PW12KER2KSxxdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoc3YpLE92PW12KHF2KSxZdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoc3YpLEJ2PW12KFl2KSxGdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoc3YpLEl2PW12KEZ2KSxIdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoc3YpLGp2PW12KEh2KSxYdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoc3YpLEd2PW12KFh2KSxWdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoc3YpLCR2PW12KFZ2KSxXdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoc3YpLFp2PW12KFd2KSxRdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoc3YpLEp2PW12KFF2KSxLdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoc3YpLHRnPW12KEt2KSxuZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoc3YpLGVnPW12KG5nKSxyZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoc3YpLGlnPW12KHJnKSxvZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoc3YpLGFnPW12KG9nKSx1Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoc3YpLGZnPW12KHVnKSxjZz1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoc3YpLHNnPW12KGNnKSxsZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoc3YpLGhnPW12KGxnKSxkZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoc3YpLHBnPW12KGRnKSx2Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoc3YpLGdnPW12KHZnKSx5Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoc3YpLF9nPW12KHlnKSxiZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoc3YpLG1nPW12KGJnKSx4Zz1HZShLbigzMDAsLjUsMCksS24oLTI0MCwuNSwxKSksd2c9R2UoS24oLTEwMCwuNzUsLjM1KSxLbig4MCwxLjUsLjgpKSxNZz1HZShLbigyNjAsLjc1LC4zNSksS24oODAsMS41LC44KSksQWc9S24oKTt2YXIgVGc9Ym4oKSxOZz1NYXRoLlBJLzMsU2c9MipNYXRoLlBJLzM7ZnVuY3Rpb24gRWcodCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IoZSpuKSkpXX19dmFyIGtnPUVnKHN2KCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksQ2c9RWcoc3YoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxQZz1FZyhzdigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLHpnPUVnKHN2KCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gUmcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBMZz1NYXRoLmFicyxEZz1NYXRoLmF0YW4yLFVnPU1hdGguY29zLHFnPU1hdGgubWF4LE9nPU1hdGgubWluLFlnPU1hdGguc2luLEJnPU1hdGguc3FydCxGZz0xZS0xMixJZz1NYXRoLlBJLEhnPUlnLzIsamc9MipJZztmdW5jdGlvbiBYZyh0KXtyZXR1cm4gdD49MT9IZzp0PD0tMT8tSGc6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIEdnKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIFZnKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uICRnKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gV2codCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gWmcodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gUWcodCxuLGUscixpLG8sYSl7dmFyIHU9dC1lLGY9bi1yLGM9KGE/bzotbykvQmcodSp1K2YqZikscz1jKmYsbD0tYyp1LGg9dCtzLGQ9bitsLHA9ZStzLHY9citsLGc9KGgrcCkvMix5PShkK3YpLzIsXz1wLWgsYj12LWQsbT1fKl8rYipiLHg9aS1vLHc9aCp2LXAqZCxNPShiPDA/LTE6MSkqQmcocWcoMCx4KngqbS13KncpKSxBPSh3KmItXypNKS9tLFQ9KC13Kl8tYipNKS9tLE49KHcqYitfKk0pL20sUz0oLXcqXytiKk0pL20sRT1BLWcsaz1ULXksQz1OLWcsUD1TLXk7cmV0dXJuIEUqRStrKms+QypDK1AqUCYmKEE9TixUPVMpLHtjeDpBLGN5OlQseDAxOi1zLHkwMTotbCx4MTE6QSooaS94LTEpLHkxMTpUKihpL3gtMSl9fWZ1bmN0aW9uIEpnKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBLZyh0KXtyZXR1cm4gbmV3IEpnKHQpfWZ1bmN0aW9uIHR5KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG55KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGV5KCl7dmFyIHQ9dHksbj1ueSxlPVJnKCEwKSxyPW51bGwsaT1LZyxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgdSxmLGMscz1hLmxlbmd0aCxsPSExO2ZvcihudWxsPT1yJiYobz1pKGM9R2koKSkpLHU9MDt1PD1zOysrdSkhKHU8cyYmZShmPWFbdV0sdSxhKSk9PT1sJiYoKGw9IWwpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGwmJm8ucG9pbnQoK3QoZix1LGEpLCtuKGYsdSxhKSk7aWYoYylyZXR1cm4gbz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKCtuKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6bn0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoISF0KSxhKTplfSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9ciYmKG89aShyKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bz1udWxsOm89aShyPXQpLGEpOnJ9LGF9ZnVuY3Rpb24gcnkoKXt2YXIgdD10eSxuPW51bGwsZT1SZygwKSxyPW55LGk9UmcoITApLG89bnVsbCxhPUtnLHU9bnVsbDtmdW5jdGlvbiBmKGYpe3ZhciBjLHMsbCxoLGQscD1mLmxlbmd0aCx2PSExLGc9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApO2ZvcihudWxsPT1vJiYodT1hKGQ9R2koKSkpLGM9MDtjPD1wOysrYyl7aWYoIShjPHAmJmkoaD1mW2NdLGMsZikpPT09dilpZih2PSF2KXM9Yyx1LmFyZWFTdGFydCgpLHUubGluZVN0YXJ0KCk7ZWxzZXtmb3IodS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSxsPWMtMTtsPj1zOy0tbCl1LnBvaW50KGdbbF0seVtsXSk7dS5saW5lRW5kKCksdS5hcmVhRW5kKCl9diYmKGdbY109K3QoaCxjLGYpLHlbY109K2UoaCxjLGYpLHUucG9pbnQobj8rbihoLGMsZik6Z1tjXSxyPytyKGgsYyxmKTp5W2NdKSl9aWYoZClyZXR1cm4gdT1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBleSgpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gZi54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6UmcoK2UpLG49bnVsbCxmKTp0fSxmLngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoK24pLGYpOnR9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOm59LGYueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxyPW51bGwsZik6ZX0sZi55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTplfSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTpyfSxmLmxpbmVYMD1mLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KGUpfSxmLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxmLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChuKS55KGUpfSxmLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZyghIXQpLGYpOml9LGYuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYodT1hKG8pKSxmKTphfSxmLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz11PW51bGw6dT1hKG89dCksZik6b30sZn1mdW5jdGlvbiBpeSh0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn1mdW5jdGlvbiBveSh0KXtyZXR1cm4gdH1KZy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKX19fTt2YXIgYXk9ZnkoS2cpO2Z1bmN0aW9uIHV5KHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gZnkodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbmV3IHV5KHQobikpfXJldHVybiBuLl9jdXJ2ZT10LG59ZnVuY3Rpb24gY3kodCl7dmFyIG49dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZnkodCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gc3koKXtyZXR1cm4gY3koZXkoKS5jdXJ2ZShheSkpfWZ1bmN0aW9uIGx5KCl7dmFyIHQ9cnkoKS5jdXJ2ZShheSksbj10LmN1cnZlLGU9dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBjeShlKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gY3kocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGN5KGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBjeShvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGZ5KHQpKTpuKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIGh5KHQsbil7cmV0dXJuWyhuPStuKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLG4qTWF0aC5zaW4odCldfXV5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX2N1cnZlLnBvaW50KG4qTWF0aC5zaW4odCksbiotTWF0aC5jb3ModCkpfX07dmFyIGR5PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBweSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gdnkodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGd5KHQpe3ZhciBuPXB5LGU9dnkscj10eSxpPW55LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEsdT1keS5jYWxsKGFyZ3VtZW50cyksZj1uLmFwcGx5KHRoaXMsdSksYz1lLmFwcGx5KHRoaXMsdSk7aWYob3x8KG89YT1HaSgpKSx0KG8sK3IuYXBwbHkodGhpcywodVswXT1mLHUpKSwraS5hcHBseSh0aGlzLHUpLCtyLmFwcGx5KHRoaXMsKHVbMF09Yyx1KSksK2kuYXBwbHkodGhpcyx1KSksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSk6bn0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6cn0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfWZ1bmN0aW9uIHl5KHQsbixlLHIsaSl7dC5tb3ZlVG8obixlKSx0LmJlemllckN1cnZlVG8obj0obityKS8yLGUsbixpLHIsaSl9ZnVuY3Rpb24gX3kodCxuLGUscixpKXt0Lm1vdmVUbyhuLGUpLHQuYmV6aWVyQ3VydmVUbyhuLGU9KGUraSkvMixyLGUscixpKX1mdW5jdGlvbiBieSh0LG4sZSxyLGkpe3ZhciBvPWh5KG4sZSksYT1oeShuLGU9KGUraSkvMiksdT1oeShyLGUpLGY9aHkocixpKTt0Lm1vdmVUbyhvWzBdLG9bMV0pLHQuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sdVswXSx1WzFdLGZbMF0sZlsxXSl9dmFyIG15PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vSWcpO3QubW92ZVRvKGUsMCksdC5hcmMoMCwwLGUsMCxqZyl9fSx4eT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuLzUpLzI7dC5tb3ZlVG8oLTMqZSwtZSksdC5saW5lVG8oLWUsLWUpLHQubGluZVRvKC1lLC0zKmUpLHQubGluZVRvKGUsLTMqZSksdC5saW5lVG8oZSwtZSksdC5saW5lVG8oMyplLC1lKSx0LmxpbmVUbygzKmUsZSksdC5saW5lVG8oZSxlKSx0LmxpbmVUbyhlLDMqZSksdC5saW5lVG8oLWUsMyplKSx0LmxpbmVUbygtZSxlKSx0LmxpbmVUbygtMyplLGUpLHQuY2xvc2VQYXRoKCl9fSx3eT1NYXRoLnNxcnQoMS8zKSxNeT0yKnd5LEF5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vTXkpLHI9ZSp3eTt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsZSksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19LFR5PU1hdGguc2luKElnLzEwKS9NYXRoLnNpbig3KklnLzEwKSxOeT1NYXRoLnNpbihqZy8xMCkqVHksU3k9LU1hdGguY29zKGpnLzEwKSpUeSxFeT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MipuKSxyPU55KmUsaT1TeSplO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsaSk7Zm9yKHZhciBvPTE7bzw1Oysrbyl7dmFyIGE9amcqby81LHU9TWF0aC5jb3MoYSksZj1NYXRoLnNpbihhKTt0LmxpbmVUbyhmKmUsLXUqZSksdC5saW5lVG8odSpyLWYqaSxmKnIrdSppKX10LmNsb3NlUGF0aCgpfX0sa3k9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobikscj0tZS8yO3QucmVjdChyLHIsZSxlKX19LEN5PU1hdGguc3FydCgzKSxQeT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPS1NYXRoLnNxcnQobi8oMypDeSkpO3QubW92ZVRvKDAsMiplKSx0LmxpbmVUbygtQ3kqZSwtZSksdC5saW5lVG8oQ3kqZSwtZSksdC5jbG9zZVBhdGgoKX19LHp5PU1hdGguc3FydCgzKS8yLFJ5PTEvTWF0aC5zcXJ0KDEyKSxMeT0zKihSeS8yKzEpLER5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vTHkpLHI9ZS8yLGk9ZSpSeSxvPXIsYT1lKlJ5K2UsdT0tbyxmPWE7dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhvLGEpLHQubGluZVRvKHUsZiksdC5saW5lVG8oLS41KnItenkqaSx6eSpyKy0uNSppKSx0LmxpbmVUbygtLjUqby16eSphLHp5Km8rLS41KmEpLHQubGluZVRvKC0uNSp1LXp5KmYsenkqdSstLjUqZiksdC5saW5lVG8oLS41KnIrenkqaSwtLjUqaS16eSpyKSx0LmxpbmVUbygtLjUqbyt6eSphLC0uNSphLXp5Km8pLHQubGluZVRvKC0uNSp1K3p5KmYsLS41KmYtenkqdSksdC5jbG9zZVBhdGgoKX19LFV5PVtteSx4eSxBeSxreSxFeSxQeSxEeV07ZnVuY3Rpb24gcXkoKXt9ZnVuY3Rpb24gT3kodCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStuKS82LCh0Ll95MCs0KnQuX3kxK2UpLzYpfWZ1bmN0aW9uIFl5KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBCeSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRnkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEl5KHQsbil7dGhpcy5fYmFzaXM9bmV3IFl5KHQpLHRoaXMuX2JldGE9bn1ZeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk95KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok95KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fSxCeS5wcm90b3R5cGU9e2FyZWFTdGFydDpxeSxhcmVhRW5kOnF5LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1uLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErbikvNik7YnJlYWs7ZGVmYXVsdDpPeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX0sRnkucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIGU9KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixyPSh0aGlzLl95MCs0KnRoaXMuX3kxK24pLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHIpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUscik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpPeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX0sSXkucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LG49dGhpcy5feSxlPXQubGVuZ3RoLTE7aWYoZT4wKWZvcih2YXIgcixpPXRbMF0sbz1uWzBdLGE9dFtlXS1pLHU9bltlXS1vLGY9LTE7KytmPD1lOylyPWYvZSx0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbZl0rKDEtdGhpcy5fYmV0YSkqKGkrciphKSx0aGlzLl9iZXRhKm5bZl0rKDEtdGhpcy5fYmV0YSkqKG8rcip1KSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtuKX19O3ZhciBIeT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIDE9PT1uP25ldyBZeSh0KTpuZXcgSXkodCxuKX1yZXR1cm4gZS5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjg1KTtmdW5jdGlvbiBqeSh0LG4sZSl7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtbiksdC5feTIrdC5fayoodC5feTEtZSksdC5feDIsdC5feTIpfWZ1bmN0aW9uIFh5KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1YeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6ankodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9bjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Omp5KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgR3k9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgWHkodCxuKX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oMCk7ZnVuY3Rpb24gVnkodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fVZ5LnByb3RvdHlwZT17YXJlYVN0YXJ0OnF5LGFyZWFFbmQ6cXksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1uKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PW47YnJlYWs7ZGVmYXVsdDpqeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyICR5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFZ5KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO2Z1bmN0aW9uIFd5KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1XeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpqeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIFp5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFd5KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO2Z1bmN0aW9uIFF5KHQsbixlKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsYT10Ll95MjtpZih0Ll9sMDFfYT5GZyl7dmFyIHU9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsZj0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ocip1LXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2YsaT0oaSp1LXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2Z9aWYodC5fbDIzX2E+Rmcpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHM9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qYyt0Ll94MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL3MsYT0oYSpjK3QuX3kxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvc310Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sYSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gSnkodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1KeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlF5KHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIEt5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgSnkodCxuKTpuZXcgWHkodCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtmdW5jdGlvbiB0Xyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufXRfLnByb3RvdHlwZT17YXJlYVN0YXJ0OnF5LGFyZWFFbmQ6cXksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6UXkodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgbl89ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyB0Xyh0LG4pOm5ldyBWeSh0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO2Z1bmN0aW9uIGVfKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59ZV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlF5KHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIHJfPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgZV8odCxuKTpuZXcgV3kodCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtmdW5jdGlvbiBpXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gb18odCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIGFfKHQsbixlKXt2YXIgcj10Ll94MS10Ll94MCxpPW4tdC5feDEsbz0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxhPShlLXQuX3kxKS8oaXx8cjwwJiYtMCksdT0obyppK2EqcikvKHIraSk7cmV0dXJuKG9fKG8pK29fKGEpKSpNYXRoLm1pbihNYXRoLmFicyhvKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyh1KSl8fDB9ZnVuY3Rpb24gdV8odCxuKXt2YXIgZT10Ll94MS10Ll94MDtyZXR1cm4gZT8oMyoodC5feTEtdC5feTApL2UtbikvMjpufWZ1bmN0aW9uIGZfKHQsbixlKXt2YXIgcj10Ll94MCxpPXQuX3kwLG89dC5feDEsYT10Ll95MSx1PShvLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrdSxpK3UqbixvLXUsYS11KmUsbyxhKX1mdW5jdGlvbiBjXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gc18odCl7dGhpcy5fY29udGV4dD1uZXcgbF8odCl9ZnVuY3Rpb24gbF8odCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGhfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBkXyh0KXt2YXIgbixlLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLG9bMF09MixhWzBdPXRbMF0rMip0WzFdLG49MTtuPHItMTsrK24paVtuXT0xLG9bbl09NCxhW25dPTQqdFtuXSsyKnRbbisxXTtmb3IoaVtyLTFdPTIsb1tyLTFdPTcsYVtyLTFdPTgqdFtyLTFdK3Rbcl0sbj0xO248cjsrK24pZT1pW25dL29bbi0xXSxvW25dLT1lLGFbbl0tPWUqYVtuLTFdO2ZvcihpW3ItMV09YVtyLTFdL29bci0xXSxuPXItMjtuPj0wOy0tbilpW25dPShhW25dLWlbbisxXSkvb1tuXTtmb3Iob1tyLTFdPSh0W3JdK2lbci0xXSkvMixuPTA7bjxyLTE7KytuKW9bbl09Mip0W24rMV0taVtuKzFdO3JldHVybltpLG9dfWZ1bmN0aW9uIHBfKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9bn1mdW5jdGlvbiB2Xyh0LG4pe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgZSxyLGksbz0xLGE9dFtuWzBdXSx1PWEubGVuZ3RoO288aTsrK28pZm9yKHI9YSxhPXRbbltvXV0sZT0wO2U8dTsrK2UpYVtlXVsxXSs9YVtlXVswXT1pc05hTihyW2VdWzFdKT9yW2VdWzBdOnJbZV1bMV19ZnVuY3Rpb24gZ18odCl7Zm9yKHZhciBuPXQubGVuZ3RoLGU9bmV3IEFycmF5KG4pOy0tbj49MDspZVtuXT1uO3JldHVybiBlfWZ1bmN0aW9uIHlfKHQsbil7cmV0dXJuIHRbbl19ZnVuY3Rpb24gX18odCl7dmFyIG49dC5tYXAoYl8pO3JldHVybiBnXyh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXX0pfWZ1bmN0aW9uIGJfKHQpe2Zvcih2YXIgbixlPTAscj0tMSxpPXQubGVuZ3RoOysrcjxpOykobj0rdFtyXVsxXSkmJihlKz1uKTtyZXR1cm4gZX1mdW5jdGlvbiBtXyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geF8odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gd18odCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTV8oKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBBXyh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIFRfKHQsbil7dmFyIGU9bixyPW4uUixpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiBOXyh0LG4pe3ZhciBlPW4scj1uLkwsaT1lLlU7aT9pLkw9PT1lP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gU18odCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIEVfKHQsbixlLHIpe3ZhciBpPVtudWxsLG51bGxdLG89Sl8ucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9dCxpLnJpZ2h0PW4sZSYmQ18oaSx0LG4sZSksciYmQ18oaSxuLHQsciksWl9bdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksWl9bbi5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBrXyh0LG4sZSl7dmFyIHI9W24sZV07cmV0dXJuIHIubGVmdD10LHJ9ZnVuY3Rpb24gQ18odCxuLGUscil7dFswXXx8dFsxXT90LmxlZnQ9PT1lP3RbMV09cjp0WzBdPXI6KHRbMF09cix0LmxlZnQ9bix0LnJpZ2h0PWUpfWZ1bmN0aW9uIFBfKHQsbixlLHIsaSl7dmFyIG8sYT10WzBdLHU9dFsxXSxmPWFbMF0sYz1hWzFdLHM9MCxsPTEsaD11WzBdLWYsZD11WzFdLWM7aWYobz1uLWYsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxzKXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoaD4wKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9aWYobz1yLWYsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5sKXJldHVybjtvPnMmJihzPW8pfWVsc2UgaWYoaD4wKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9aWYobz1lLWMsZHx8IShvPjApKXtpZihvLz1kLGQ8MCl7aWYobzxzKXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoZD4wKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9aWYobz1pLWMsZHx8IShvPDApKXtpZihvLz1kLGQ8MCl7aWYobz5sKXJldHVybjtvPnMmJihzPW8pfWVsc2UgaWYoZD4wKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9cmV0dXJuIShzPjB8fGw8MSl8fChzPjAmJih0WzBdPVtmK3MqaCxjK3MqZF0pLGw8MSYmKHRbMV09W2YrbCpoLGMrbCpkXSksITApfX19fX1mdW5jdGlvbiB6Xyh0LG4sZSxyLGkpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgYSx1LGY9dFswXSxjPXQubGVmdCxzPXQucmlnaHQsbD1jWzBdLGg9Y1sxXSxkPXNbMF0scD1zWzFdLHY9KGwrZCkvMixnPShoK3ApLzI7aWYocD09PWgpe2lmKHY8bnx8dj49cilyZXR1cm47aWYobD5kKXtpZihmKXtpZihmWzFdPj1pKXJldHVybn1lbHNlIGY9W3YsZV07bz1bdixpXX1lbHNle2lmKGYpe2lmKGZbMV08ZSlyZXR1cm59ZWxzZSBmPVt2LGldO289W3YsZV19fWVsc2UgaWYodT1nLShhPShsLWQpLyhwLWgpKSp2LGE8LTF8fGE+MSlpZihsPmQpe2lmKGYpe2lmKGZbMV0+PWkpcmV0dXJufWVsc2UgZj1bKGUtdSkvYSxlXTtvPVsoaS11KS9hLGldfWVsc2V7aWYoZil7aWYoZlsxXTxlKXJldHVybn1lbHNlIGY9WyhpLXUpL2EsaV07bz1bKGUtdSkvYSxlXX1lbHNlIGlmKGg8cCl7aWYoZil7aWYoZlswXT49cilyZXR1cm59ZWxzZSBmPVtuLGEqbit1XTtvPVtyLGEqcit1XX1lbHNle2lmKGYpe2lmKGZbMF08bilyZXR1cm59ZWxzZSBmPVtyLGEqcit1XTtvPVtuLGEqbit1XX1yZXR1cm4gdFswXT1mLHRbMV09bywhMH1mdW5jdGlvbiBSXyh0LG4pe3ZhciBlPXQuc2l0ZSxyPW4ubGVmdCxpPW4ucmlnaHQ7cmV0dXJuIGU9PT1pJiYoaT1yLHI9ZSksaT9NYXRoLmF0YW4yKGlbMV0tclsxXSxpWzBdLXJbMF0pOihlPT09cj8ocj1uWzFdLGk9blswXSk6KHI9blswXSxpPW5bMV0pLE1hdGguYXRhbjIoclswXS1pWzBdLGlbMV0tclsxXSkpfWZ1bmN0aW9uIExfKHQsbil7cmV0dXJuIG5bKyhuLmxlZnQhPT10LnNpdGUpXX1mdW5jdGlvbiBEXyh0LG4pe3JldHVybiBuWysobi5sZWZ0PT09dC5zaXRlKV19aV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6cXksYXJlYUVuZDpxeSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dD0rdCxuPStuLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKSl9fSxjXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6Zl8odGhpcyx0aGlzLl90MCx1Xyh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3ZhciBlPU5hTjtpZihuPStuLCh0PSt0KSE9PXRoaXMuX3gxfHxuIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsZl8odGhpcyx1Xyh0aGlzLGU9YV8odGhpcyx0LG4pKSxlKTticmVhaztkZWZhdWx0OmZfKHRoaXMsdGhpcy5fdDAsZT1hXyh0aGlzLHQsbikpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bix0aGlzLl90MD1lfX19LChzXy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjXy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LG4pe2NfLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsbix0KX0sbF8ucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8obix0LHIsZSxvLGkpfX0saF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aDtpZihlKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxuWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLG5bMF0pLDI9PT1lKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sblsxXSk7ZWxzZSBmb3IodmFyIHI9ZF8odCksaT1kXyhuKSxvPTAsYT0xO2E8ZTsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW29dLGlbMF1bb10sclsxXVtvXSxpWzFdW29dLHRbYV0sblthXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09ZSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX0scF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxuKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pO2Vsc2V7dmFyIGU9dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhlLG4pfX10aGlzLl94PXQsdGhpcy5feT1ufX0sTV8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNXyxpbnNlcnQ6ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk7aWYodCl7aWYobi5QPXQsbi5OPXQuTix0Lk4mJih0Lk4uUD1uKSx0Lk49bix0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1ufWVsc2UgdC5SPW47ZT10fWVsc2UgdGhpcy5fPyh0PVNfKHRoaXMuXyksbi5QPW51bGwsbi5OPXQsdC5QPXQuTD1uLGU9dCk6KG4uUD1uLk49bnVsbCx0aGlzLl89bixlPW51bGwpO2ZvcihuLkw9bi5SPW51bGwsbi5VPWUsbi5DPSEwLHQ9bjtlJiZlLkM7KWU9PT0ocj1lLlUpLkw/KGk9ci5SKSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5SJiYoVF8odGhpcyxlKSxlPSh0PWUpLlUpLGUuQz0hMSxyLkM9ITAsTl8odGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5MJiYoTl8odGhpcyxlKSxlPSh0PWUpLlUpLGUuQz0hMSxyLkM9ITAsVF8odGhpcyxyKSksZT10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBuLGUscixpPXQuVSxvPXQuTCxhPXQuUjtpZihlPW8/YT9TXyhhKTpvOmEsaT9pLkw9PT10P2kuTD1lOmkuUj1lOnRoaXMuXz1lLG8mJmE/KHI9ZS5DLGUuQz10LkMsZS5MPW8sby5VPWUsZSE9PWE/KGk9ZS5VLGUuVT10LlUsdD1lLlIsaS5MPXQsZS5SPWEsYS5VPWUpOihlLlU9aSxpPWUsdD1lLlIpKToocj10LkMsdD1lKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChuPWkuUikuQyYmKG4uQz0hMSxpLkM9ITAsVF8odGhpcyxpKSxuPWkuUiksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5SJiZuLlIuQ3x8KG4uTC5DPSExLG4uQz0hMCxOXyh0aGlzLG4pLG49aS5SKSxuLkM9aS5DLGkuQz1uLlIuQz0hMSxUXyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChuPWkuTCkuQyYmKG4uQz0hMSxpLkM9ITAsTl8odGhpcyxpKSxuPWkuTCksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5MJiZuLkwuQ3x8KG4uUi5DPSExLG4uQz0hMCxUXyh0aGlzLG4pLG49aS5MKSxuLkM9aS5DLGkuQz1uLkwuQz0hMSxOXyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfW4uQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07dmFyIFVfLHFfPVtdO2Z1bmN0aW9uIE9fKCl7QV8odGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFlfKHQpe3ZhciBuPXQuUCxlPXQuTjtpZihuJiZlKXt2YXIgcj1uLnNpdGUsaT10LnNpdGUsbz1lLnNpdGU7aWYociE9PW8pe3ZhciBhPWlbMF0sdT1pWzFdLGY9clswXS1hLGM9clsxXS11LHM9b1swXS1hLGw9b1sxXS11LGg9MiooZipsLWMqcyk7aWYoIShoPj0tdGIpKXt2YXIgZD1mKmYrYypjLHA9cypzK2wqbCx2PShsKmQtYypwKS9oLGc9KGYqcC1zKmQpL2gseT1xXy5wb3AoKXx8bmV3IE9fO3kuYXJjPXQseS5zaXRlPWkseS54PXYrYSx5Lnk9KHkuY3k9Zyt1KStNYXRoLnNxcnQodip2K2cqZyksdC5jaXJjbGU9eTtmb3IodmFyIF89bnVsbCxiPVFfLl87YjspaWYoeS55PGIueXx8eS55PT09Yi55JiZ5Lng8PWIueCl7aWYoIWIuTCl7Xz1iLlA7YnJlYWt9Yj1iLkx9ZWxzZXtpZighYi5SKXtfPWI7YnJlYWt9Yj1iLlJ9UV8uaW5zZXJ0KF8seSksX3x8KFVfPXkpfX19fWZ1bmN0aW9uIEJfKHQpe3ZhciBuPXQuY2lyY2xlO24mJihuLlB8fChVXz1uLk4pLFFfLnJlbW92ZShuKSxxXy5wdXNoKG4pLEFfKG4pLHQuY2lyY2xlPW51bGwpfXZhciBGXz1bXTtmdW5jdGlvbiBJXygpe0FfKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBIXyh0KXt2YXIgbj1GXy5wb3AoKXx8bmV3IElfO3JldHVybiBuLnNpdGU9dCxufWZ1bmN0aW9uIGpfKHQpe0JfKHQpLFdfLnJlbW92ZSh0KSxGXy5wdXNoKHQpLEFfKHQpfWZ1bmN0aW9uIFhfKHQpe3ZhciBuPXQuY2lyY2xlLGU9bi54LHI9bi5jeSxpPVtlLHJdLG89dC5QLGE9dC5OLHU9W3RdO2pfKHQpO2Zvcih2YXIgZj1vO2YuY2lyY2xlJiZNYXRoLmFicyhlLWYuY2lyY2xlLngpPEtfJiZNYXRoLmFicyhyLWYuY2lyY2xlLmN5KTxLXzspbz1mLlAsdS51bnNoaWZ0KGYpLGpfKGYpLGY9bzt1LnVuc2hpZnQoZiksQl8oZik7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKGUtYy5jaXJjbGUueCk8S18mJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPEtfOylhPWMuTix1LnB1c2goYyksal8oYyksYz1hO3UucHVzaChjKSxCXyhjKTt2YXIgcyxsPXUubGVuZ3RoO2ZvcihzPTE7czxsOysrcyljPXVbc10sZj11W3MtMV0sQ18oYy5lZGdlLGYuc2l0ZSxjLnNpdGUsaSk7Zj11WzBdLChjPXVbbC0xXSkuZWRnZT1FXyhmLnNpdGUsYy5zaXRlLG51bGwsaSksWV8oZiksWV8oYyl9ZnVuY3Rpb24gR18odCl7Zm9yKHZhciBuLGUscixpLG89dFswXSxhPXRbMV0sdT1XXy5fO3U7KWlmKChyPVZfKHUsYSktbyk+S18pdT11Lkw7ZWxzZXtpZighKChpPW8tJF8odSxhKSk+S18pKXtyPi1LXz8obj11LlAsZT11KTppPi1LXz8obj11LGU9dS5OKTpuPWU9dTticmVha31pZighdS5SKXtuPXU7YnJlYWt9dT11LlJ9IWZ1bmN0aW9uKHQpe1pfW3QuaW5kZXhdPXtzaXRlOnQsaGFsZmVkZ2VzOltdfX0odCk7dmFyIGY9SF8odCk7aWYoV18uaW5zZXJ0KG4sZiksbnx8ZSl7aWYobj09PWUpcmV0dXJuIEJfKG4pLGU9SF8obi5zaXRlKSxXXy5pbnNlcnQoZixlKSxmLmVkZ2U9ZS5lZGdlPUVfKG4uc2l0ZSxmLnNpdGUpLFlfKG4pLHZvaWQgWV8oZSk7aWYoZSl7Ql8obiksQl8oZSk7dmFyIGM9bi5zaXRlLHM9Y1swXSxsPWNbMV0saD10WzBdLXMsZD10WzFdLWwscD1lLnNpdGUsdj1wWzBdLXMsZz1wWzFdLWwseT0yKihoKmctZCp2KSxfPWgqaCtkKmQsYj12KnYrZypnLG09WyhnKl8tZCpiKS95K3MsKGgqYi12Kl8pL3krbF07Q18oZS5lZGdlLGMscCxtKSxmLmVkZ2U9RV8oYyx0LG51bGwsbSksZS5lZGdlPUVfKHQscCxudWxsLG0pLFlfKG4pLFlfKGUpfWVsc2UgZi5lZGdlPUVfKG4uc2l0ZSxmLnNpdGUpfX1mdW5jdGlvbiBWXyh0LG4pe3ZhciBlPXQuc2l0ZSxyPWVbMF0saT1lWzFdLG89aS1uO2lmKCFvKXJldHVybiByO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciB1PShlPWEuc2l0ZSlbMF0sZj1lWzFdLGM9Zi1uO2lmKCFjKXJldHVybiB1O3ZhciBzPXUtcixsPTEvby0xL2MsaD1zL2M7cmV0dXJuIGw/KC1oK01hdGguc3FydChoKmgtMipsKihzKnMvKC0yKmMpLWYrYy8yK2ktby8yKSkpL2wrcjoocit1KS8yfWZ1bmN0aW9uICRfKHQsbil7dmFyIGU9dC5OO2lmKGUpcmV0dXJuIFZfKGUsbik7dmFyIHI9dC5zaXRlO3JldHVybiByWzFdPT09bj9yWzBdOjEvMH12YXIgV18sWl8sUV8sSl8sS189MWUtNix0Yj0xZS0xMjtmdW5jdGlvbiBuYih0LG4pe3JldHVybiBuWzFdLXRbMV18fG5bMF0tdFswXX1mdW5jdGlvbiBlYih0LG4pe3ZhciBlLHIsaSxvPXQuc29ydChuYikucG9wKCk7Zm9yKEpfPVtdLFpfPW5ldyBBcnJheSh0Lmxlbmd0aCksV189bmV3IE1fLFFfPW5ldyBNXzs7KWlmKGk9VV8sbyYmKCFpfHxvWzFdPGkueXx8b1sxXT09PWkueSYmb1swXTxpLngpKW9bMF09PT1lJiZvWzFdPT09cnx8KEdfKG8pLGU9b1swXSxyPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO1hfKGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxuLGUscixpPTAsbz1aXy5sZW5ndGg7aTxvOysraSlpZigodD1aX1tpXSkmJihyPShuPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgYT1uZXcgQXJyYXkociksdT1uZXcgQXJyYXkocik7Zm9yKGU9MDtlPHI7KytlKWFbZV09ZSx1W2VdPVJfKHQsSl9bbltlXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gdVtuXS11W3RdfSksZT0wO2U8cjsrK2UpdVtlXT1uW2FbZV1dO2ZvcihlPTA7ZTxyOysrZSluW2VdPXVbZV19fSgpLG4pe3ZhciBhPStuWzBdWzBdLHU9K25bMF1bMV0sZj0rblsxXVswXSxjPStuWzFdWzFdOyFmdW5jdGlvbih0LG4sZSxyKXtmb3IodmFyIGksbz1KXy5sZW5ndGg7by0tOyl6XyhpPUpfW29dLHQsbixlLHIpJiZQXyhpLHQsbixlLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT5LX3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT5LXyl8fGRlbGV0ZSBKX1tvXX0oYSx1LGYsYyksZnVuY3Rpb24odCxuLGUscil7dmFyIGksbyxhLHUsZixjLHMsbCxoLGQscCx2LGc9Wl8ubGVuZ3RoLHk9ITA7Zm9yKGk9MDtpPGc7KytpKWlmKG89Wl9baV0pe2ZvcihhPW8uc2l0ZSx1PShmPW8uaGFsZmVkZ2VzKS5sZW5ndGg7dS0tOylKX1tmW3VdXXx8Zi5zcGxpY2UodSwxKTtmb3IodT0wLGM9Zi5sZW5ndGg7dTxjOylwPShkPURfKG8sSl9bZlt1XV0pKVswXSx2PWRbMV0sbD0ocz1MXyhvLEpfW2ZbKyt1JWNdXSkpWzBdLGg9c1sxXSwoTWF0aC5hYnMocC1sKT5LX3x8TWF0aC5hYnModi1oKT5LXykmJihmLnNwbGljZSh1LDAsSl8ucHVzaChrXyhhLGQsTWF0aC5hYnMocC10KTxLXyYmci12PktfP1t0LE1hdGguYWJzKGwtdCk8S18/aDpyXTpNYXRoLmFicyh2LXIpPEtfJiZlLXA+S18/W01hdGguYWJzKGgtcik8S18/bDplLHJdOk1hdGguYWJzKHAtZSk8S18mJnYtbj5LXz9bZSxNYXRoLmFicyhsLWUpPEtfP2g6bl06TWF0aC5hYnModi1uKTxLXyYmcC10PktfP1tNYXRoLmFicyhoLW4pPEtfP2w6dCxuXTpudWxsKSktMSksKytjKTtjJiYoeT0hMSl9aWYoeSl7dmFyIF8sYixtLHg9MS8wO2ZvcihpPTAseT1udWxsO2k8ZzsrK2kpKG89Wl9baV0pJiYobT0oXz0oYT1vLnNpdGUpWzBdLXQpKl8rKGI9YVsxXS1uKSpiKTx4JiYoeD1tLHk9byk7aWYoeSl7dmFyIHc9W3Qsbl0sTT1bdCxyXSxBPVtlLHJdLFQ9W2Usbl07eS5oYWxmZWRnZXMucHVzaChKXy5wdXNoKGtfKGE9eS5zaXRlLHcsTSkpLTEsSl8ucHVzaChrXyhhLE0sQSkpLTEsSl8ucHVzaChrXyhhLEEsVCkpLTEsSl8ucHVzaChrXyhhLFQsdykpLTEpfX1mb3IoaT0wO2k8ZzsrK2kpKG89Wl9baV0pJiYoby5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgWl9baV0pfShhLHUsZixjKX10aGlzLmVkZ2VzPUpfLHRoaXMuY2VsbHM9Wl8sV189UV89Sl89Wl89bnVsbH1mdW5jdGlvbiByYih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gaWIodCxuLGUpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy50cmFuc2Zvcm09ZX1mdW5jdGlvbiBvYih0LG4sZSl7dGhpcy5rPXQsdGhpcy54PW4sdGhpcy55PWV9ZWIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplYixwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKG4pe3ZhciBlPW4uaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gTF8obix0W2VdKX0pO3JldHVybiBlLmRhdGE9bi5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG89KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIGksbyxhLHUsZixjLHM9ZS5zaXRlLGw9LTEsaD1uW2lbby0xXV0sZD1oLmxlZnQ9PT1zP2gucmlnaHQ6aC5sZWZ0OysrbDxvOylhPWQsZD0oaD1uW2lbbF1dKS5sZWZ0PT09cz9oLnJpZ2h0OmgubGVmdCxhJiZkJiZyPGEuaW5kZXgmJnI8ZC5pbmRleCYmKGY9YSxjPWQsKCh1PXMpWzBdLWNbMF0pKihmWzFdLXVbMV0pLSh1WzBdLWZbMF0pKihjWzFdLXVbMV0pPDApJiZ0LnB1c2goW3MuZGF0YSxhLmRhdGEsZC5kYXRhXSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgcixpLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHU9by5jZWxscy5sZW5ndGg7IShpPW8uY2VsbHNbYV0pOylpZigrK2E+PXUpcmV0dXJuIG51bGw7dmFyIGY9dC1pLnNpdGVbMF0sYz1uLWkuc2l0ZVsxXSxzPWYqZitjKmM7ZG97aT1vLmNlbGxzW3I9YV0sYT1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9by5lZGdlc1tlXSx1PXIubGVmdDtpZih1IT09aS5zaXRlJiZ1fHwodT1yLnJpZ2h0KSl7dmFyIGY9dC11WzBdLGM9bi11WzFdLGw9ZipmK2MqYztsPHMmJihzPWwsYT11LmluZGV4KX19KX13aGlsZShudWxsIT09YSk7cmV0dXJuIG8uX2ZvdW5kPXIsbnVsbD09ZXx8czw9ZSplP2kuc2l0ZTpudWxsfX0sb2IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvYixzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgb2IodGhpcy5rKnQsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LG4pe3JldHVybiAwPT09dCYwPT09bj90aGlzOm5ldyBvYih0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqbil9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBhYj1uZXcgb2IoMSwwLDApO2Z1bmN0aW9uIHViKHQpe3JldHVybiB0Ll9fem9vbXx8YWJ9ZnVuY3Rpb24gZmIoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGNiKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gc2IoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gbGIoKXt2YXIgdCxuLGU9dGhpcztyZXR1cm4gZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KHQ9KGU9ZS5vd25lclNWR0VsZW1lbnR8fGUpLndpZHRoLmJhc2VWYWwudmFsdWUsbj1lLmhlaWdodC5iYXNlVmFsLnZhbHVlKToodD1lLmNsaWVudFdpZHRoLG49ZS5jbGllbnRIZWlnaHQpLFtbMCwwXSxbdCxuXV19ZnVuY3Rpb24gaGIoKXtyZXR1cm4gdGhpcy5fX3pvb218fGFifWZ1bmN0aW9uIGRiKCl7cmV0dXJuLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSkvNTAwfWZ1bmN0aW9uIHBiKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHZiKHQsbixlKXt2YXIgcj10LmludmVydFgoblswXVswXSktZVswXVswXSxpPXQuaW52ZXJ0WChuWzFdWzBdKS1lWzFdWzBdLG89dC5pbnZlcnRZKG5bMF1bMV0pLWVbMF1bMV0sYT10LmludmVydFkoblsxXVsxXSktZVsxXVsxXTtyZXR1cm4gdC50cmFuc2xhdGUoaT5yPyhyK2kpLzI6TWF0aC5taW4oMCxyKXx8TWF0aC5tYXgoMCxpKSxhPm8/KG8rYSkvMjpNYXRoLm1pbigwLG8pfHxNYXRoLm1heCgwLGEpKX11Yi5wcm90b3R5cGU9b2IucHJvdG90eXBlLHQudmVyc2lvbj0iNS43LjAiLHQuYmlzZWN0PWksdC5iaXNlY3RSaWdodD1pLHQuYmlzZWN0TGVmdD1vLHQuYXNjZW5kaW5nPW4sdC5iaXNlY3Rvcj1lLHQuY3Jvc3M9ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbyx1LGY9dC5sZW5ndGgsYz1uLmxlbmd0aCxzPW5ldyBBcnJheShmKmMpO2ZvcihudWxsPT1lJiYoZT1hKSxyPW89MDtyPGY7KytyKWZvcih1PXRbcl0saT0wO2k8YzsrK2ksKytvKXNbb109ZSh1LG5baV0pO3JldHVybiBzfSx0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59LHQuZGV2aWF0aW9uPWMsdC5leHRlbnQ9cyx0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PXYsbj1zLGU9TTtmdW5jdGlvbiByKHIpe3ZhciBvLGEsdT1yLmxlbmd0aCxmPW5ldyBBcnJheSh1KTtmb3Iobz0wO288dTsrK28pZltvXT10KHJbb10sbyxyKTt2YXIgYz1uKGYpLHM9Y1swXSxsPWNbMV0saD1lKGYscyxsKTtBcnJheS5pc0FycmF5KGgpfHwoaD13KHMsbCxoKSxoPWcoTWF0aC5jZWlsKHMvaCkqaCxsLGgpKTtmb3IodmFyIGQ9aC5sZW5ndGg7aFswXTw9czspaC5zaGlmdCgpLC0tZDtmb3IoO2hbZC0xXT5sOyloLnBvcCgpLC0tZDt2YXIgcCx2PW5ldyBBcnJheShkKzEpO2ZvcihvPTA7bzw9ZDsrK28pKHA9dltvXT1bXSkueDA9bz4wP2hbby0xXTpzLHAueDE9bzxkP2hbb106bDtmb3Iobz0wO288dTsrK28pczw9KGE9ZltvXSkmJmE8PWwmJnZbaShoLGEsMCxkKV0ucHVzaChyW29dKTtyZXR1cm4gdn1yZXR1cm4gci52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnAobikscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwKFt0WzBdLHRbMV1dKSxyKTpufSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP3AoaC5jYWxsKHQpKTpwKHQpLHIpOmV9LHJ9LHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9ZC5jYWxsKHQsdSkuc29ydChuKSxNYXRoLmNlaWwoKHItZSkvKDIqKEEodCwuNzUpLUEodCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFNjb3R0PWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5jZWlsKChlLW4pLygzLjUqYyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFN0dXJnZXM9TSx0Lm1heD1ULHQubWVhbj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9dC5sZW5ndGgsaT1yLG89LTEsYT0wO2lmKG51bGw9PW4pZm9yKDsrK288cjspaXNOYU4oZT11KHRbb10pKT8tLWk6YSs9ZTtlbHNlIGZvcig7KytvPHI7KWlzTmFOKGU9dShuKHRbb10sbyx0KSkpPy0taTphKz1lO2lmKGkpcmV0dXJuIGEvaX0sdC5tZWRpYW49ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQubGVuZ3RoLG89LTEsYT1bXTtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKHI9dSh0W29dKSl8fGEucHVzaChyKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKHI9dShlKHRbb10sbyx0KSkpfHxhLnB1c2gocik7cmV0dXJuIEEoYS5zb3J0KG4pLC41KX0sdC5tZXJnZT1OLHQubWluPVMsdC5wYWlycz1mdW5jdGlvbih0LG4pe251bGw9PW4mJihuPWEpO2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sbz1uZXcgQXJyYXkocjwwPzA6cik7ZTxyOylvW2VdPW4oaSxpPXRbKytlXSk7cmV0dXJuIG99LHQucGVybXV0ZT1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09dFtuW2VdXTtyZXR1cm4gcn0sdC5xdWFudGlsZT1BLHQucmFuZ2U9Zyx0LnNjYW49ZnVuY3Rpb24odCxlKXtpZihyPXQubGVuZ3RoKXt2YXIgcixpLG89MCxhPTAsdT10W2FdO2ZvcihudWxsPT1lJiYoZT1uKTsrK288cjspKGUoaT10W29dLHUpPDB8fDAhPT1lKHUsdSkpJiYodT1pLGE9byk7cmV0dXJuIDA9PT1lKHUsdSk/YTp2b2lkIDB9fSx0LnNodWZmbGU9ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgcixpLG89KG51bGw9PWU/dC5sZW5ndGg6ZSktKG49bnVsbD09bj8wOituKTtvOylpPU1hdGgucmFuZG9tKCkqby0tfDAscj10W28rbl0sdFtvK25dPXRbaStuXSx0W2krbl09cjtyZXR1cm4gdH0sdC5zdW09ZnVuY3Rpb24odCxuKXt2YXIgZSxyPXQubGVuZ3RoLGk9LTEsbz0wO2lmKG51bGw9PW4pZm9yKDsrK2k8cjspKGU9K3RbaV0pJiYobys9ZSk7ZWxzZSBmb3IoOysraTxyOykoZT0rbih0W2ldLGksdCkpJiYobys9ZSk7cmV0dXJuIG99LHQudGlja3M9bSx0LnRpY2tJbmNyZW1lbnQ9eCx0LnRpY2tTdGVwPXcsdC50cmFuc3Bvc2U9RSx0LnZhcmlhbmNlPWYsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gRShhcmd1bWVudHMpfSx0LmF4aXNUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIEIoeix0KX0sdC5heGlzUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIEIoUix0KX0sdC5heGlzQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBCKEwsdCl9LHQuYXhpc0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIEIoRCx0KX0sdC5icnVzaD1mdW5jdGlvbigpe3JldHVybiBSaSh3aSl9LHQuYnJ1c2hYPWZ1bmN0aW9uKCl7cmV0dXJuIFJpKG1pKX0sdC5icnVzaFk9ZnVuY3Rpb24oKXtyZXR1cm4gUmkoeGkpfSx0LmJydXNoU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuPXQuX19icnVzaDtyZXR1cm4gbj9uLmRpbS5vdXRwdXQobi5zZWxlY3Rpb24pOm51bGx9LHQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD0wLG49bnVsbCxlPW51bGwscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIG8sYSx1LGYsYyxzLGw9aS5sZW5ndGgsaD1bXSxkPWcobCkscD1bXSx2PVtdLHk9di5ncm91cHM9bmV3IEFycmF5KGwpLF89bmV3IEFycmF5KGwqbCk7Zm9yKG89MCxjPS0xOysrYzxsOyl7Zm9yKGE9MCxzPS0xOysrczxsOylhKz1pW2NdW3NdO2gucHVzaChhKSxwLnB1c2goZyhsKSksbys9YX1mb3IobiYmZC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oaFt0XSxoW2VdKX0pLGUmJnAuZm9yRWFjaChmdW5jdGlvbih0LG4pe3Quc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBlKGlbbl1bdF0saVtuXVtyXSl9KX0pLGY9KG89WWkoMCxPaS10KmwpL28pP3Q6T2kvbCxhPTAsYz0tMTsrK2M8bDspe2Zvcih1PWEscz0tMTsrK3M8bDspe3ZhciBiPWRbY10sbT1wW2JdW3NdLHg9aVtiXVttXSx3PWEsTT1hKz14Km87X1ttKmwrYl09e2luZGV4OmIsc3ViaW5kZXg6bSxzdGFydEFuZ2xlOncsZW5kQW5nbGU6TSx2YWx1ZTp4fX15W2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6dSxlbmRBbmdsZTphLHZhbHVlOmhbYl19LGErPWZ9Zm9yKGM9LTE7KytjPGw7KWZvcihzPWMtMTsrK3M8bDspe3ZhciBBPV9bcypsK2NdLFQ9X1tjKmwrc107KEEudmFsdWV8fFQudmFsdWUpJiZ2LnB1c2goQS52YWx1ZTxULnZhbHVlP3tzb3VyY2U6VCx0YXJnZXQ6QX06e3NvdXJjZTpBLHRhcmdldDpUfSl9cmV0dXJuIHI/di5zb3J0KHIpOnZ9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9WWkoMCxuKSxpKTp0fSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKTplfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1udWxsOihuPXQscj1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKX0pLl89dCxpKTpyJiZyLl87dmFyIG59LGl9LHQucmliYm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Vmksbj0kaSxlPVdpLHI9WmksaT1RaSxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBhLHU9QmkuY2FsbChhcmd1bWVudHMpLGY9dC5hcHBseSh0aGlzLHUpLGM9bi5hcHBseSh0aGlzLHUpLHM9K2UuYXBwbHkodGhpcywodVswXT1mLHUpKSxsPXIuYXBwbHkodGhpcyx1KS1xaSxoPWkuYXBwbHkodGhpcyx1KS1xaSxkPXMqTGkobCkscD1zKkRpKGwpLHY9K2UuYXBwbHkodGhpcywodVswXT1jLHUpKSxnPXIuYXBwbHkodGhpcyx1KS1xaSx5PWkuYXBwbHkodGhpcyx1KS1xaTtpZihvfHwobz1hPUdpKCkpLG8ubW92ZVRvKGQscCksby5hcmMoMCwwLHMsbCxoKSxsPT09ZyYmaD09PXl8fChvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLHYqTGkoZyksdipEaShnKSksby5hcmMoMCwwLHYsZyx5KSksby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxkLHApLG8uY2xvc2VQYXRoKCksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmkoK3QpLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkZpKCt0KSxhKTpyfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmkoK3QpLGEpOml9LGEuc291cmNlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOnQsYSk6b30sYX0sdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsbixlLHI9W10saT1bXTtmdW5jdGlvbiBvKGUsaSxhLHUpe2lmKGk+PXIubGVuZ3RoKXJldHVybiBudWxsIT10JiZlLnNvcnQodCksbnVsbCE9bj9uKGUpOmU7Zm9yKHZhciBmLGMscyxsPS0xLGg9ZS5sZW5ndGgsZD1yW2krK10scD1LaSgpLHY9YSgpOysrbDxoOykocz1wLmdldChmPWQoYz1lW2xdKSsiIikpP3MucHVzaChjKTpwLnNldChmLFtjXSk7cmV0dXJuIHAuZWFjaChmdW5jdGlvbih0LG4pe3UodixuLG8odCxpLGEsdSkpfSksdn1yZXR1cm4gZT17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsMCx0byxubyl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsZW8scm8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KGUsbyl7aWYoKytvPnIubGVuZ3RoKXJldHVybiBlO3ZhciBhLHU9aVtvLTFdO3JldHVybiBudWxsIT1uJiZvPj1yLmxlbmd0aD9hPWUuZW50cmllcygpOihhPVtdLGUuZWFjaChmdW5jdGlvbihuLGUpe2EucHVzaCh7a2V5OmUsdmFsdWVzOnQobixvKX0pfSkpLG51bGwhPXU/YS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHUodC5rZXksbi5rZXkpfSk6YX0obyh0LDAsZW8scm8pLDApfSxrZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHIucHVzaCh0KSxlfSxzb3J0S2V5czpmdW5jdGlvbih0KXtyZXR1cm4gaVtyLmxlbmd0aC0xXT10LGV9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24obil7cmV0dXJuIHQ9bixlfSxyb2xsdXA6ZnVuY3Rpb24odCl7cmV0dXJuIG49dCxlfX19LHQuc2V0PWFvLHQubWFwPUtpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2goZSk7cmV0dXJuIG59LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaCh0W2VdKTtyZXR1cm4gbn0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaCh7a2V5OmUsdmFsdWU6dFtlXX0pO3JldHVybiBufSx0LmNvbG9yPXZuLHQucmdiPWJuLHQuaHNsPU1uLHQubGFiPVVuLHQuaGNsPUhuLHQubGNoPWZ1bmN0aW9uKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Jbih0KTpuZXcgam4oZSxuLHQsbnVsbD09cj8xOnIpfSx0LmdyYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IHFuKHQsMCwwLG51bGw9PW4/MTpuKX0sdC5jdWJlaGVsaXg9S24sdC5jb250b3Vycz1nbyx0LmNvbnRvdXJEZW5zaXR5PWZ1bmN0aW9uKCl7dmFyIHQ9Ym8sbj1tbyxlPXhvLHI9OTYwLGk9NTAwLG89MjAsYT0yLHU9MypvLGY9cisyKnU+PmEsYz1pKzIqdT4+YSxzPWNvKDIwKTtmdW5jdGlvbiBsKHIpe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoZipjKSxsPW5ldyBGbG9hdDMyQXJyYXkoZipjKTtyLmZvckVhY2goZnVuY3Rpb24ocixvLHMpe3ZhciBsPSt0KHIsbyxzKSt1Pj5hLGg9K24ocixvLHMpK3U+PmEsZD0rZShyLG8scyk7bD49MCYmbDxmJiZoPj0wJiZoPGMmJihpW2wraCpmXSs9ZCl9KSx5byh7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOml9LHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6bH0sbz4+YSksX28oe3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTpsfSx7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOml9LG8+PmEpLHlvKHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6aX0se3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTpsfSxvPj5hKSxfbyh7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOmx9LHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6aX0sbz4+YSkseW8oe3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTppfSx7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOmx9LG8+PmEpLF9vKHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6bH0se3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTppfSxvPj5hKTt2YXIgZD1zKGkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgcD1UKGkpO2Q9dygwLHAsZCksKGQ9ZygwLE1hdGguZmxvb3IocC9kKSpkLGQpKS5zaGlmdCgpfXJldHVybiBnbygpLnRocmVzaG9sZHMoZCkuc2l6ZShbZixjXSkoaSkubWFwKGgpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqYSksdC5jb29yZGluYXRlcy5mb3JFYWNoKGQpLHR9ZnVuY3Rpb24gZCh0KXt0LmZvckVhY2gocCl9ZnVuY3Rpb24gcCh0KXt0LmZvckVhY2godil9ZnVuY3Rpb24gdih0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixhKS11LHRbMV09dFsxXSpNYXRoLnBvdygyLGEpLXV9ZnVuY3Rpb24geSgpe3JldHVybiBmPXIrMioodT0zKm8pPj5hLGM9aSsyKnU+PmEsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Y28oK24pLGwpOnR9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNvKCt0KSxsKTpufSxsLndlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNvKCt0KSxsKTplfSxsLnNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3IsaV07dmFyIG49TWF0aC5jZWlsKHRbMF0pLGU9TWF0aC5jZWlsKHRbMV0pO2lmKCEobj49MHx8bj49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcj1uLGk9ZSx5KCl9LGwuY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PGE7aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx5KCl9LGwudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/Y28odW8uY2FsbCh0KSk6Y28odCksbCk6c30sbC5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChvKihvKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBvPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSx5KCl9LGx9LHQuZGlzcGF0Y2g9SSx0LmRyYWc9ZnVuY3Rpb24oKXt2YXIgbixlLHIsaSxvPVd0LGE9WnQsdT1RdCxmPUp0LGM9e30scz1JKCJzdGFydCIsImRyYWciLCJlbmQiKSxsPTAsaD0wO2Z1bmN0aW9uIGQodCl7dC5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihmKS5vbigidG91Y2hzdGFydC5kcmFnIix5KS5vbigidG91Y2htb3ZlLmRyYWciLF8pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGIpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoIWkmJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdT1tKCJtb3VzZSIsYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksRnQsdGhpcyxhcmd1bWVudHMpO3UmJihEdCh0LmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIsdiwhMCkub24oIm1vdXNldXAuZHJhZyIsZywhMCksWHQodC5ldmVudC52aWV3KSxIdCgpLHI9ITEsbj10LmV2ZW50LmNsaWVudFgsZT10LmV2ZW50LmNsaWVudFksdSgic3RhcnQiKSl9fWZ1bmN0aW9uIHYoKXtpZihqdCgpLCFyKXt2YXIgaT10LmV2ZW50LmNsaWVudFgtbixvPXQuZXZlbnQuY2xpZW50WS1lO3I9aSppK28qbz5ofWMubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7RHQodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxHdCh0LmV2ZW50LnZpZXcsciksanQoKSxjLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiB5KCl7aWYoby5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmxlbmd0aDtmb3Iobj0wO248dTsrK24pKGU9bShyW25dLmlkZW50aWZpZXIsaSxJdCx0aGlzLGFyZ3VtZW50cykpJiYoSHQoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gXygpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKG49MDtuPGk7KytuKShlPWNbcltuXS5pZGVudGlmaWVyXSkmJihqdCgpLGUoImRyYWciKSl9ZnVuY3Rpb24gYigpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89ci5sZW5ndGg7Zm9yKGkmJmNsZWFyVGltZW91dChpKSxpPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPW51bGx9LDUwMCksbj0wO248bzsrK24pKGU9Y1tyW25dLmlkZW50aWZpZXJdKSYmKEh0KCksZSgiZW5kIikpfWZ1bmN0aW9uIG0obixlLHIsaSxvKXt2YXIgYSxmLGgscD1yKGUsbiksdj1zLmNvcHkoKTtpZihDdChuZXcgJHQoZCwiYmVmb3Jlc3RhcnQiLGEsbixsLHBbMF0scFsxXSwwLDAsdiksZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHQuZXZlbnQuc3ViamVjdD1hPXUuYXBwbHkoaSxvKSkmJihmPWEueC1wWzBdfHwwLGg9YS55LXBbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIHQodSl7dmFyIHMsZz1wO3N3aXRjaCh1KXtjYXNlInN0YXJ0IjpjW25dPXQscz1sKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBjW25dLC0tbDtjYXNlImRyYWciOnA9cihlLG4pLHM9bH1DdChuZXcgJHQoZCx1LGEsbixzLHBbMF0rZixwWzFdK2gscFswXS1nWzBdLHBbMV0tZ1sxXSx2KSx2LmFwcGx5LHYsW3UsaSxvXSl9fXJldHVybiBkLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlZ0KCEhdCksZCk6b30sZC5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWdCh0KSxkKTphfSxkLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWdCh0KSxkKTp1fSxkLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlZ0KCEhdCksZCk6Zn0sZC5vbj1mdW5jdGlvbigpe3ZhciB0PXMub24uYXBwbHkocyxhcmd1bWVudHMpO3JldHVybiB0PT09cz9kOnR9LGQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxkKTpNYXRoLnNxcnQoaCl9LGR9LHQuZHJhZ0Rpc2FibGU9WHQsdC5kcmFnRW5hYmxlPUd0LHQuZHN2Rm9ybWF0PUVvLHQuY3N2UGFyc2U9Q28sdC5jc3ZQYXJzZVJvd3M9UG8sdC5jc3ZGb3JtYXQ9em8sdC5jc3ZGb3JtYXRSb3dzPVJvLHQudHN2UGFyc2U9RG8sdC50c3ZQYXJzZVJvd3M9VW8sdC50c3ZGb3JtYXQ9cW8sdC50c3ZGb3JtYXRSb3dzPU9vLHQuZWFzZUxpbmVhcj1mdW5jdGlvbih0KXtyZXR1cm4rdH0sdC5lYXNlUXVhZD1Ecix0LmVhc2VRdWFkSW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqdH0sdC5lYXNlUXVhZE91dD1mdW5jdGlvbih0KXtyZXR1cm4gdCooMi10KX0sdC5lYXNlUXVhZEluT3V0PURyLHQuZWFzZUN1YmljPVVyLHQuZWFzZUN1YmljSW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqdCp0fSx0LmVhc2VDdWJpY091dD1mdW5jdGlvbih0KXtyZXR1cm4tLXQqdCp0KzF9LHQuZWFzZUN1YmljSW5PdXQ9VXIsdC5lYXNlUG9seT1Zcix0LmVhc2VQb2x5SW49cXIsdC5lYXNlUG9seU91dD1Pcix0LmVhc2VQb2x5SW5PdXQ9WXIsdC5lYXNlU2luPUlyLHQuZWFzZVNpbkluPWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguY29zKHQqRnIpfSx0LmVhc2VTaW5PdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2luKHQqRnIpfSx0LmVhc2VTaW5Jbk91dD1Jcix0LmVhc2VFeHA9SHIsdC5lYXNlRXhwSW49ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9LHQuZWFzZUV4cE91dD1mdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygyLC0xMCp0KX0sdC5lYXNlRXhwSW5PdXQ9SHIsdC5lYXNlQ2lyY2xlPWpyLHQuZWFzZUNpcmNsZUluPWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9LHQuZWFzZUNpcmNsZU91dD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tdCp0KX0sdC5lYXNlQ2lyY2xlSW5PdXQ9anIsdC5lYXNlQm91bmNlPW5pLHQuZWFzZUJvdW5jZUluPWZ1bmN0aW9uKHQpe3JldHVybiAxLW5pKDEtdCl9LHQuZWFzZUJvdW5jZU91dD1uaSx0LmVhc2VCb3VuY2VJbk91dD1mdW5jdGlvbih0KXtyZXR1cm4oKHQqPTIpPD0xPzEtbmkoMS10KTpuaSh0LTEpKzEpLzJ9LHQuZWFzZUJhY2s9aWksdC5lYXNlQmFja0luPWVpLHQuZWFzZUJhY2tPdXQ9cmksdC5lYXNlQmFja0luT3V0PWlpLHQuZWFzZUVsYXN0aWM9dWksdC5lYXNlRWxhc3RpY0luPWFpLHQuZWFzZUVsYXN0aWNPdXQ9dWksdC5lYXNlRWxhc3RpY0luT3V0PWZpLHQuYmxvYj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oWW8pfSx0LmJ1ZmZlcj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oQm8pfSx0LmRzdj1mdW5jdGlvbih0LG4sZSxyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUmJihyPWUsZT12b2lkIDApO3ZhciBpPUVvKHQpO3JldHVybiBJbyhuLGUpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pfSx0LmNzdj1qbyx0LnRzdj1Ybyx0LmltYWdlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiBuKWlbb109bltvXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe2UoaSl9LGkuc3JjPXR9KX0sdC5qc29uPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbihHbyl9LHQudGV4dD1Jbyx0LnhtbD0kbyx0Lmh0bWw9V28sdC5zdmc9Wm8sdC5mb3JjZUNlbnRlcj1mdW5jdGlvbih0LG4pe3ZhciBlO2Z1bmN0aW9uIHIoKXt2YXIgcixpLG89ZS5sZW5ndGgsYT0wLHU9MDtmb3Iocj0wO3I8bzsrK3IpYSs9KGk9ZVtyXSkueCx1Kz1pLnk7Zm9yKGE9YS9vLXQsdT11L28tbixyPTA7cjxvOysrcikoaT1lW3JdKS54LT1hLGkueS09dX1yZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09biYmKG49MCksci5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dH0sci54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSx0LmZvcmNlQ29sbGlkZT1mdW5jdGlvbih0KXt2YXIgbixlLHI9MSxpPTE7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxvLHUsZixjLHMsbCxoPW4ubGVuZ3RoLGQ9MDtkPGk7KytkKWZvcihvPXJhKG4sdWEsZmEpLnZpc2l0QWZ0ZXIoYSksdD0wO3Q8aDsrK3QpdT1uW3RdLHM9ZVt1LmluZGV4XSxsPXMqcyxmPXUueCt1LnZ4LGM9dS55K3Uudnksby52aXNpdChwKTtmdW5jdGlvbiBwKHQsbixlLGksbyl7dmFyIGE9dC5kYXRhLGg9dC5yLGQ9cytoO2lmKCFhKXJldHVybiBuPmYrZHx8aTxmLWR8fGU+YytkfHxvPGMtZDtpZihhLmluZGV4PnUuaW5kZXgpe3ZhciBwPWYtYS54LWEudngsdj1jLWEueS1hLnZ5LGc9cCpwK3YqdjtnPGQqZCYmKDA9PT1wJiYoZys9KHA9Sm8oKSkqcCksMD09PXYmJihnKz0odj1KbygpKSp2KSxnPShkLShnPU1hdGguc3FydChnKSkpL2cqcix1LnZ4Kz0ocCo9ZykqKGQ9KGgqPWgpLyhsK2gpKSx1LnZ5Kz0odio9ZykqZCxhLnZ4LT1wKihkPTEtZCksYS52eS09dipkKX19fWZ1bmN0aW9uIGEodCl7aWYodC5kYXRhKXJldHVybiB0LnI9ZVt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgbj10LnI9MDtuPDQ7KytuKXRbbl0mJnRbbl0ucj50LnImJih0LnI9dFtuXS5yKX1mdW5jdGlvbiB1KCl7aWYobil7dmFyIHIsaSxvPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShvKSxyPTA7cjxvOysrcilpPW5bcl0sZVtpLmluZGV4XT0rdChpLHIsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbyhudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LHUoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG8pOml9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3Qsbyk6cn0sby5yYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRbygrbiksdSgpLG8pOnR9LG99LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYT1jYSx1PWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKGlbdC5zb3VyY2UuaW5kZXhdLGlbdC50YXJnZXQuaW5kZXhdKX0sZj1RbygzMCksYz0xO2Z1bmN0aW9uIHMocil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGM7KytpKWZvcih2YXIgdSxmLHMsbCxoLGQscCx2PTA7djxhOysrdilmPSh1PXRbdl0pLnNvdXJjZSxsPShzPXUudGFyZ2V0KS54K3MudngtZi54LWYudnh8fEpvKCksaD1zLnkrcy52eS1mLnktZi52eXx8Sm8oKSxsKj1kPSgoZD1NYXRoLnNxcnQobCpsK2gqaCkpLWVbdl0pL2QqcipuW3ZdLGgqPWQscy52eC09bCoocD1vW3ZdKSxzLnZ5LT1oKnAsZi52eCs9bCoocD0xLXApLGYudnkrPWgqcH1mdW5jdGlvbiBsKCl7aWYocil7dmFyIHUsZixjPXIubGVuZ3RoLHM9dC5sZW5ndGgsbD1LaShyLGEpO2Zvcih1PTAsaT1uZXcgQXJyYXkoYyk7dTxzOysrdSkoZj10W3VdKS5pbmRleD11LCJvYmplY3QiIT10eXBlb2YgZi5zb3VyY2UmJihmLnNvdXJjZT1zYShsLGYuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBmLnRhcmdldCYmKGYudGFyZ2V0PXNhKGwsZi50YXJnZXQpKSxpW2Yuc291cmNlLmluZGV4XT0oaVtmLnNvdXJjZS5pbmRleF18fDApKzEsaVtmLnRhcmdldC5pbmRleF09KGlbZi50YXJnZXQuaW5kZXhdfHwwKSsxO2Zvcih1PTAsbz1uZXcgQXJyYXkocyk7dTxzOysrdSlmPXRbdV0sb1t1XT1pW2Yuc291cmNlLmluZGV4XS8oaVtmLnNvdXJjZS5pbmRleF0raVtmLnRhcmdldC5pbmRleF0pO249bmV3IEFycmF5KHMpLGgoKSxlPW5ldyBBcnJheShzKSxkKCl9fWZ1bmN0aW9uIGgoKXtpZihyKWZvcih2YXIgZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSluW2VdPSt1KHRbZV0sZSx0KX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rZih0W25dLG4sdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxzLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGwoKX0scy5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGwoKSxzKTp0fSxzLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LHMpOmN9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksaCgpLHMpOnV9LHMuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksZCgpLHMpOmZ9LHN9LHQuZm9yY2VNYW55Qm9keT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGk9UW8oLTMwKSxvPTEsYT0xLzAsdT0uODE7ZnVuY3Rpb24gZihyKXt2YXIgaSxvPXQubGVuZ3RoLGE9cmEodCxsYSxoYSkudmlzaXRBZnRlcihzKTtmb3IoZT1yLGk9MDtpPG87KytpKW49dFtpXSxhLnZpc2l0KGwpfWZ1bmN0aW9uIGMoKXtpZih0KXt2YXIgbixlLG89dC5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49MDtuPG87KytuKWU9dFtuXSxyW2UuaW5kZXhdPStpKGUsbix0KX19ZnVuY3Rpb24gcyh0KXt2YXIgbixlLGksbyxhLHU9MCxmPTA7aWYodC5sZW5ndGgpe2ZvcihpPW89YT0wO2E8NDsrK2EpKG49dFthXSkmJihlPU1hdGguYWJzKG4udmFsdWUpKSYmKHUrPW4udmFsdWUsZis9ZSxpKz1lKm4ueCxvKz1lKm4ueSk7dC54PWkvZix0Lnk9by9mfWVsc2V7KG49dCkueD1uLmRhdGEueCxuLnk9bi5kYXRhLnk7ZG97dSs9cltuLmRhdGEuaW5kZXhdfXdoaWxlKG49bi5uZXh0KX10LnZhbHVlPXV9ZnVuY3Rpb24gbCh0LGksZixjKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgcz10Lngtbi54LGw9dC55LW4ueSxoPWMtaSxkPXMqcytsKmw7aWYoaCpoL3U8ZClyZXR1cm4gZDxhJiYoMD09PXMmJihkKz0ocz1KbygpKSpzKSwwPT09bCYmKGQrPShsPUpvKCkpKmwpLGQ8byYmKGQ9TWF0aC5zcXJ0KG8qZCkpLG4udngrPXMqdC52YWx1ZSplL2Qsbi52eSs9bCp0LnZhbHVlKmUvZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49YSkpeyh0LmRhdGEhPT1ufHx0Lm5leHQpJiYoMD09PXMmJihkKz0ocz1KbygpKSpzKSwwPT09bCYmKGQrPShsPUpvKCkpKmwpLGQ8byYmKGQ9TWF0aC5zcXJ0KG8qZCkpKTtkb3t0LmRhdGEhPT1uJiYoaD1yW3QuZGF0YS5pbmRleF0qZS9kLG4udngrPXMqaCxuLnZ5Kz1sKmgpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIGYuaW5pdGlhbGl6ZT1mdW5jdGlvbihuKXt0PW4sYygpfSxmLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGMoKSxmKTppfSxmLmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQqdCxmKTpNYXRoLnNxcnQobyl9LGYuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LGYpOk1hdGguc3FydChhKX0sZi50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10KnQsZik6TWF0aC5zcXJ0KHUpfSxmfSx0LmZvcmNlUmFkaWFsPWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sYT1RbyguMSk7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGE9MCx1PXIubGVuZ3RoO2E8dTsrK2Epe3ZhciBmPXJbYV0sYz1mLngtbnx8MWUtNixzPWYueS1lfHwxZS02LGw9TWF0aC5zcXJ0KGMqYytzKnMpLGg9KG9bYV0tbCkqaVthXSp0L2w7Zi52eCs9YypoLGYudnkrPXMqaH19ZnVuY3Rpb24gZigpe2lmKHIpe3ZhciBuLGU9ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKW9bbl09K3QocltuXSxuLHIpLGlbbl09aXNOYU4ob1tuXSk/MDorYShyW25dLG4scil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbygrdCkpLG51bGw9PW4mJihuPTApLG51bGw9PWUmJihlPTApLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZigpfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGYoKSx1KTphfSx1LnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlFvKCtuKSxmKCksdSk6dH0sdS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHUpOm59LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCx1KTplfSx1fSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgbixlPTEscj0uMDAxLGk9MS1NYXRoLnBvdyhyLDEvMzAwKSxvPTAsYT0uNix1PUtpKCksZj11cihzKSxjPUkoInRpY2siLCJlbmQiKTtmdW5jdGlvbiBzKCl7bCgpLGMuY2FsbCgidGljayIsbiksZTxyJiYoZi5zdG9wKCksYy5jYWxsKCJlbmQiLG4pKX1mdW5jdGlvbiBsKCl7dmFyIG4scixmPXQubGVuZ3RoO2ZvcihlKz0oby1lKSppLHUuZWFjaChmdW5jdGlvbih0KXt0KGUpfSksbj0wO248ZjsrK24pbnVsbD09KHI9dFtuXSkuZng/ci54Kz1yLnZ4Kj1hOihyLng9ci5meCxyLnZ4PTApLG51bGw9PXIuZnk/ci55Kz1yLnZ5Kj1hOihyLnk9ci5meSxyLnZ5PTApfWZ1bmN0aW9uIGgoKXtmb3IodmFyIG4sZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl7aWYoKG49dFtlXSkuaW5kZXg9ZSxpc05hTihuLngpfHxpc05hTihuLnkpKXt2YXIgaT1kYSpNYXRoLnNxcnQoZSksbz1lKnBhO24ueD1pKk1hdGguY29zKG8pLG4ueT1pKk1hdGguc2luKG8pfShpc05hTihuLnZ4KXx8aXNOYU4obi52eSkpJiYobi52eD1uLnZ5PTApfX1mdW5jdGlvbiBkKG4pe3JldHVybiBuLmluaXRpYWxpemUmJm4uaW5pdGlhbGl6ZSh0KSxufXJldHVybiBudWxsPT10JiYodD1bXSksaCgpLG49e3RpY2s6bCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGYucmVzdGFydChzKSxufSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGYuc3RvcCgpLG59LG5vZGVzOmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaCgpLHUuZWFjaChkKSxuKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxuKTplfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxuKTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtdCxuKToxLWF9LGZvcmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09ZT91LnJlbW92ZSh0KTp1LnNldCh0LGQoZSkpLG4pOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKG4sZSxyKXt2YXIgaSxvLGEsdSxmLGM9MCxzPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsYz0wO2M8czsrK2MpKGE9KGk9bi0odT10W2NdKS54KSppKyhvPWUtdS55KSpvKTxyJiYoZj11LHI9YSk7cmV0dXJuIGZ9LG9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbih0LGUpLG4pOmMub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGk9UW8oLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLG89MCxhPW4ubGVuZ3RoO288YTsrK28pKGk9bltvXSkudngrPShyW29dLWkueCkqZVtvXSp0fWZ1bmN0aW9uIGEoKXtpZihuKXt2YXIgbyxhPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKSxyPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyllW29dPWlzTmFOKHJbb109K3QobltvXSxvLG4pKT8wOitpKG5bb10sbyxuKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVFvKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGEoKSxvKTppfSxvLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRbygrbiksYSgpLG8pOnR9LG99LHQuZm9yY2VZPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpPVFvKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxvPTAsYT1uLmxlbmd0aDtvPGE7KytvKShpPW5bb10pLnZ5Kz0ocltvXS1pLnkpKmVbb10qdH1mdW5jdGlvbiBhKCl7aWYobil7dmFyIG8sYT1uLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkoYSkscj1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pZVtvXT1pc05hTihyW29dPSt0KG5bb10sbyxuKSk/MDoraShuW29dLG8sbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFvKCt0KSxhKCksbyk6aX0sby55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UW8oK24pLGEoKSxvKTp0fSxvfSx0LmZvcm1hdERlZmF1bHRMb2NhbGU9U2EsdC5mb3JtYXRMb2NhbGU9TmEsdC5mb3JtYXRTcGVjaWZpZXI9YmEsdC5wcmVjaXNpb25GaXhlZD1FYSx0LnByZWNpc2lvblByZWZpeD1rYSx0LnByZWNpc2lvblJvdW5kPUNhLHQuZ2VvQXJlYT1mdW5jdGlvbih0KXtyZXR1cm4geXUucmVzZXQoKSxzdSh0LF91KSwyKnl1fSx0Lmdlb0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvLGEsdTtpZihSdT16dT0tKEN1PVB1PTEvMCksT3U9W10sc3UodCxyZiksZT1PdS5sZW5ndGgpe2ZvcihPdS5zb3J0KGRmKSxuPTEsbz1bcj1PdVswXV07bjxlOysrbilwZihyLChpPU91W25dKVswXSl8fHBmKHIsaVsxXSk/KGhmKHJbMF0saVsxXSk+aGYoclswXSxyWzFdKSYmKHJbMV09aVsxXSksaGYoaVswXSxyWzFdKT5oZihyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6by5wdXNoKHI9aSk7Zm9yKGE9LTEvMCxuPTAscj1vW2U9by5sZW5ndGgtMV07bjw9ZTtyPWksKytuKWk9b1tuXSwodT1oZihyWzFdLGlbMF0pKT5hJiYoYT11LEN1PWlbMF0senU9clsxXSl9cmV0dXJuIE91PVl1PW51bGwsQ3U9PT0xLzB8fFB1PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW0N1LFB1XSxbenUsUnVdXX0sdC5nZW9DZW50cm9pZD1mdW5jdGlvbih0KXtCdT1GdT1JdT1IdT1qdT1YdT1HdT1WdT0kdT1XdT1adT0wLHN1KHQsdmYpO3ZhciBuPSR1LGU9V3Uscj1adSxpPW4qbitlKmUrcipyO3JldHVybiBpPFVhJiYobj1YdSxlPUd1LHI9VnUsRnU8RGEmJihuPUl1LGU9SHUscj1qdSksKGk9bipuK2UqZStyKnIpPFVhKT9bTmFOLE5hTl06W1hhKGUsbikqRmEsZXUoci9LYShpKSkqRmFdfSx0Lmdlb0NpcmNsZT1mdW5jdGlvbigpe3ZhciB0LG4sZT1OZihbMCwwXSkscj1OZig5MCksaT1OZig2KSxvPXtwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChlPW4oZSxyKSksZVswXSo9RmEsZVsxXSo9RmF9fTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpJYSxmPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKklhO3JldHVybiB0PVtdLG49a2YoLWFbMF0qSWEsLWFbMV0qSWEsMCkuaW52ZXJ0LExmKG8sdSxmLDEpLGE9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1uPW51bGwsYX1yZXR1cm4gYS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZihbK3RbMF0sK3RbMV1dKSxhKTplfSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5mKCt0KSxhKTpyfSxhLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5mKCt0KSxhKTppfSxhfSx0Lmdlb0NsaXBBbnRpbWVyaWRpYW49R2YsdC5nZW9DbGlwQ2lyY2xlPVZmLHQuZ2VvQ2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LG4sZSxyPTAsaT0wLG89OTYwLGE9NTAwO3JldHVybiBlPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6dD1aZihyLGksbyxhKShuPWUpfSxleHRlbnQ6ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3VbMF1bMF0saT0rdVswXVsxXSxvPSt1WzFdWzBdLGE9K3VbMV1bMV0sdD1uPW51bGwsZSk6W1tyLGldLFtvLGFdXX19fSx0Lmdlb0NsaXBSZWN0YW5nbGU9WmYsdC5nZW9Db250YWlucz1mdW5jdGlvbih0LG4pe3JldHVybih0JiZjYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP2NjW3QudHlwZV06bGMpKHQsbil9LHQuZ2VvRGlzdGFuY2U9ZmMsdC5nZW9HcmF0aWN1bGU9YmMsdC5nZW9HcmF0aWN1bGUxMD1mdW5jdGlvbigpe3JldHVybiBiYygpKCl9LHQuZ2VvSW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxuKXt2YXIgZT10WzBdKklhLHI9dFsxXSpJYSxpPW5bMF0qSWEsbz1uWzFdKklhLGE9R2EociksdT1RYShyKSxmPUdhKG8pLGM9UWEobykscz1hKkdhKGUpLGw9YSpRYShlKSxoPWYqR2EoaSksZD1mKlFhKGkpLHA9MipldShLYShydShvLXIpK2EqZipydShpLWUpKSksdj1RYShwKSxnPXA/ZnVuY3Rpb24odCl7dmFyIG49UWEodCo9cCkvdixlPVFhKHAtdCkvdixyPWUqcytuKmgsaT1lKmwrbipkLG89ZSp1K24qYztyZXR1cm5bWGEoaSxyKSpGYSxYYShvLEthKHIqcitpKmkpKSpGYV19OmZ1bmN0aW9uKCl7cmV0dXJuW2UqRmEscipGYV19O3JldHVybiBnLmRpc3RhbmNlPXAsZ30sdC5nZW9MZW5ndGg9b2MsdC5nZW9QYXRoPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPTQuNTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJnIucG9pbnRSYWRpdXMoK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxzdSh0LGUocikpKSxyLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShTYykpLFNjLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShkcykpLGRzLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gc3UodCxlKFVjKSksVWMucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShaYykpLFpjLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09bj8odD1udWxsLG1jKToodD1uKS5zdHJlYW0sbyk6dH0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/KG49bnVsbCxuZXcgZ3MpOm5ldyBhcyhuPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKGkpLG8pOm59LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooci5wb2ludFJhZGl1cygrdCksK3QpLG8pOml9LG8ucHJvamVjdGlvbih0KS5jb250ZXh0KG4pfSx0Lmdlb0FsYmVycz1Ecyx0Lmdlb0FsYmVyc1VzYT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGksbyxhPURzKCksdT1McygpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksZj1McygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbih0LG4pe289W3Qsbl19fTtmdW5jdGlvbiBzKHQpe3ZhciBuPXRbMF0sYT10WzFdO3JldHVybiBvPW51bGwsZS5wb2ludChuLGEpLG98fChyLnBvaW50KG4sYSksbyl8fChpLnBvaW50KG4sYSksbyl9ZnVuY3Rpb24gbCgpe3JldHVybiB0PW49bnVsbCxzfXJldHVybiBzLmludmVydD1mdW5jdGlvbih0KXt2YXIgbj1hLnNjYWxlKCksZT1hLnRyYW5zbGF0ZSgpLHI9KHRbMF0tZVswXSkvbixpPSh0WzFdLWVbMV0pL247cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND91Omk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/ZjphKS5pbnZlcnQodCl9LHMuc3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiB0JiZuPT09ZT90OihyPVthLnN0cmVhbShuPWUpLHUuc3RyZWFtKGUpLGYuc3RyZWFtKGUpXSxpPXIubGVuZ3RoLHQ9e3BvaW50OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPS0xOysrZTxpOylyW2VdLnBvaW50KHQsbil9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25FbmQoKX19KTt2YXIgcixpfSxzLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCksdS5wcmVjaXNpb24odCksZi5wcmVjaXNpb24odCksbCgpKTphLnByZWNpc2lvbigpfSxzLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLHUuc2NhbGUoLjM1KnQpLGYuc2NhbGUodCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0scy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIG49YS5zY2FsZSgpLG89K3RbMF0scz0rdFsxXTtyZXR1cm4gZT1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbby0uNDU1Km4scy0uMjM4Km5dLFtvKy40NTUqbixzKy4yMzgqbl1dKS5zdHJlYW0oYykscj11LnRyYW5zbGF0ZShbby0uMzA3Km4scysuMjAxKm5dKS5jbGlwRXh0ZW50KFtbby0uNDI1Km4rRGEscysuMTIqbitEYV0sW28tLjIxNCpuLURhLHMrLjIzNCpuLURhXV0pLnN0cmVhbShjKSxpPWYudHJhbnNsYXRlKFtvLS4yMDUqbixzKy4yMTIqbl0pLmNsaXBFeHRlbnQoW1tvLS4yMTQqbitEYSxzKy4xNjYqbitEYV0sW28tLjExNSpuLURhLHMrLjIzNCpuLURhXV0pLnN0cmVhbShjKSxsKCl9LHMuZml0RXh0ZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhzKHMsdCxuKX0scy5maXRTaXplPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdzKHMsdCxuKX0scy5maXRXaWR0aD1mdW5jdGlvbih0LG4pe3JldHVybiBNcyhzLHQsbil9LHMuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFzKHMsdCxuKX0scy5zY2FsZSgxMDcwKX0sdC5nZW9BemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoT3MpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdz1Pcyx0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIENzKFlzKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc9WXMsdC5nZW9Db25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiB6cyhIcykuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX0sdC5nZW9Db25pY0NvbmZvcm1hbFJhdz1Icyx0Lmdlb0NvbmljRXF1YWxBcmVhPUxzLHQuZ2VvQ29uaWNFcXVhbEFyZWFSYXc9UnMsdC5nZW9Db25pY0VxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIHpzKFhzKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSx0Lmdlb0NvbmljRXF1aWRpc3RhbnRSYXc9WHMsdC5nZW9FcXVhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIENzKFFzKS5zY2FsZSgxNzcuMTU4KX0sdC5nZW9FcXVhbEVhcnRoUmF3PVFzLHQuZ2VvRXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIENzKGpzKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0VxdWlyZWN0YW5ndWxhclJhdz1qcyx0Lmdlb0dub21vbmljPWZ1bmN0aW9uKCl7cmV0dXJuIENzKEpzKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSx0Lmdlb0dub21vbmljUmF3PUpzLHQuZ2VvSWRlbnRpdHk9ZnVuY3Rpb24oKXt2YXIgdCxuLGUscixpLG8sYT0xLHU9MCxmPTAsYz0xLHM9MSxsPW1jLGg9bnVsbCxkPW1jO2Z1bmN0aW9uIHAoKXtyZXR1cm4gcj1pPW51bGwsb31yZXR1cm4gbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiByJiZpPT09dD9yOnI9bChkKGk9dCkpfSxwb3N0Y2xpcDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1yLGg9dD1uPWU9bnVsbCxwKCkpOmR9LGNsaXBFeHRlbnQ6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09cj8oaD10PW49ZT1udWxsLG1jKTpaZihoPStyWzBdWzBdLHQ9K3JbMF1bMV0sbj0rclsxXVswXSxlPStyWzFdWzFdKSxwKCkpOm51bGw9PWg/bnVsbDpbW2gsdF0sW24sZV1dfSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcygoYT0rdCkqYyxhKnMsdSxmKSxwKCkpOmF9LHRyYW5zbGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcyhhKmMsYSpzLHU9K3RbMF0sZj0rdFsxXSkscCgpKTpbdSxmXX0scmVmbGVjdFg6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9S3MoYSooYz10Py0xOjEpLGEqcyx1LGYpLHAoKSk6YzwwfSxyZWZsZWN0WTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcyhhKmMsYSoocz10Py0xOjEpLHUsZikscCgpKTpzPDB9LGZpdEV4dGVudDpmdW5jdGlvbih0LG4pe3JldHVybiB4cyhvLHQsbil9LGZpdFNpemU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gd3Mobyx0LG4pfSxmaXRXaWR0aDpmdW5jdGlvbih0LG4pe3JldHVybiBNcyhvLHQsbil9LGZpdEhlaWdodDpmdW5jdGlvbih0LG4pe3JldHVybiBBcyhvLHQsbil9fX0sdC5nZW9Qcm9qZWN0aW9uPUNzLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9UHMsdC5nZW9NZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBGcyhCcykuc2NhbGUoOTYxL0JhKX0sdC5nZW9NZXJjYXRvclJhdz1Ccyx0Lmdlb05hdHVyYWxFYXJ0aDE9ZnVuY3Rpb24oKXtyZXR1cm4gQ3ModGwpLnNjYWxlKDE3NS4yOTUpfSx0Lmdlb05hdHVyYWxFYXJ0aDFSYXc9dGwsdC5nZW9PcnRob2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MobmwpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArRGEpfSx0Lmdlb09ydGhvZ3JhcGhpY1Jhdz1ubCx0Lmdlb1N0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoZWwpLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9LHQuZ2VvU3RlcmVvZ3JhcGhpY1Jhdz1lbCx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUZzKHJsKSxuPXQuY2VudGVyLGU9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oWy10WzFdLHRbMF1dKTpbKHQ9bigpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9ZSgpKVswXSx0WzFdLHRbMl0tOTBdfSxlKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9cmwsdC5nZW9Sb3RhdGlvbj1SZix0Lmdlb1N0cmVhbT1zdSx0Lmdlb1RyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOl9zKHQpfX0sdC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9aWwsbj0xLGU9MSxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIG8sYT0wO2kuZWFjaEFmdGVyKGZ1bmN0aW9uKG4pe3ZhciBlPW4uY2hpbGRyZW47ZT8obi54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShvbCwwKS90Lmxlbmd0aH0oZSksbi55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKGFsLDApfShlKSk6KG4ueD1vP2ErPXQobixvKTowLG4ueT0wLG89bil9KTt2YXIgdT1mdW5jdGlvbih0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bMF07cmV0dXJuIHR9KGkpLGY9ZnVuY3Rpb24odCl7Zm9yKHZhciBuO249dC5jaGlsZHJlbjspdD1uW24ubGVuZ3RoLTFdO3JldHVybiB0fShpKSxjPXUueC10KHUsZikvMixzPWYueCt0KGYsdSkvMjtyZXR1cm4gaS5lYWNoQWZ0ZXIocj9mdW5jdGlvbih0KXt0Lng9KHQueC1pLngpKm4sdC55PShpLnktdC55KSplfTpmdW5jdGlvbih0KXt0Lng9KHQueC1jKS8ocy1jKSpuLHQueT0oMS0oaS55P3QueS9pLnk6MSkpKmV9KX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4saSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLG49K3RbMF0sZT0rdFsxXSxpKTpyP251bGw6W24sZV19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsbj0rdFswXSxlPSt0WzFdLGkpOnI/W24sZV06bnVsbH0saX0sdC5oaWVyYXJjaHk9ZmwsdC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxuPTEsZT0xLHI9RWw7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PW4vMixpLnk9ZS8yLHQ/aS5lYWNoQmVmb3JlKFBsKHQpKS5lYWNoQWZ0ZXIoemwociwuNSkpLmVhY2hCZWZvcmUoUmwoMSkpOmkuZWFjaEJlZm9yZShQbChDbCkpLmVhY2hBZnRlcih6bChFbCwxKSkuZWFjaEFmdGVyKHpsKHIsaS5yL01hdGgubWluKG4sZSkpKS5lYWNoQmVmb3JlKFJsKE1hdGgubWluKG4sZSkvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PShlPW4pP251bGw6U2woZSksaSk6dDt2YXIgZX0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLGU9K3RbMV0saSk6W24sZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmtsKCt0KSxpKTpyfSxpfSx0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gTmwodCksdH0sdC5wYWNrRW5jbG9zZT1wbCx0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTEsbj0xLGU9MCxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIG89aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPWUsaS54MT10LGkueTE9bi9vLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyLmNoaWxkcmVuJiZEbChyLHIueDAsdCooci5kZXB0aCsxKS9uLHIueDEsdCooci5kZXB0aCsyKS9uKTt2YXIgaT1yLngwLG89ci55MCxhPXIueDEtZSx1PXIueTEtZTthPGkmJihpPWE9KGkrYSkvMiksdTxvJiYobz11PShvK3UpLzIpLHIueDA9aSxyLnkwPW8sci54MT1hLHIueTE9dX19KG4sbykpLHImJmkuZWFjaEJlZm9yZShMbCksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsaSk6cn0saS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlWzBdLG49K2VbMV0saSk6W3Qsbl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxpKTplfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9WWwsbj1CbDtmdW5jdGlvbiBlKGUpe3ZhciByLGksbyxhLHUsZixjLHM9ZS5sZW5ndGgsbD1uZXcgQXJyYXkocyksaD17fTtmb3IoaT0wO2k8czsrK2kpcj1lW2ldLHU9bFtpXT1uZXcgaGwociksbnVsbCE9KGY9dChyLGksZSkpJiYoZis9IiIpJiYoaFtjPVVsKyh1LmlkPWYpXT1jIGluIGg/T2w6dSk7Zm9yKGk9MDtpPHM7KytpKWlmKHU9bFtpXSxudWxsIT0oZj1uKGVbaV0saSxlKSkmJihmKz0iIikpe2lmKCEoYT1oW1VsK2ZdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZik7aWYoYT09PU9sKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2YpO2EuY2hpbGRyZW4/YS5jaGlsZHJlbi5wdXNoKHUpOmEuY2hpbGRyZW49W3VdLHUucGFyZW50PWF9ZWxzZXtpZihvKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtvPXV9aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoby5wYXJlbnQ9cWwsby5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLXN9KS5lYWNoQmVmb3JlKGxsKSxvLnBhcmVudD1udWxsLHM+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99cmV0dXJuIGUuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9U2wobiksZSk6dH0sZS5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TbCh0KSxlKTpufSxlfSx0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD1GbCxuPTEsZT0xLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHIsaSxvLGE9bmV3IEdsKHQsMCksdT1bYV07bj11LnBvcCgpOylpZihyPW4uXy5jaGlsZHJlbilmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkobz1yLmxlbmd0aCksaT1vLTE7aT49MDstLWkpdS5wdXNoKGU9bi5jaGlsZHJlbltpXT1uZXcgR2wocltpXSxpKSksZS5wYXJlbnQ9bjtyZXR1cm4oYS5wYXJlbnQ9bmV3IEdsKG51bGwsMCkpLmNoaWxkcmVuPVthXSxhfShpKTtpZihmLmVhY2hBZnRlcihvKSxmLnBhcmVudC5tPS1mLnosZi5lYWNoQmVmb3JlKGEpLHIpaS5lYWNoQmVmb3JlKHUpO2Vsc2V7dmFyIGM9aSxzPWksbD1pO2kuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8Yy54JiYoYz10KSx0Lng+cy54JiYocz10KSx0LmRlcHRoPmwuZGVwdGgmJihsPXQpfSk7dmFyIGg9Yz09PXM/MTp0KGMscykvMixkPWgtYy54LHA9bi8ocy54K2grZCksdj1lLyhsLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCp2fSl9cmV0dXJuIGl9ZnVuY3Rpb24gbyhuKXt2YXIgZT1uLmNoaWxkcmVuLHI9bi5wYXJlbnQuY2hpbGRyZW4saT1uLmk/cltuLmktMV06bnVsbDtpZihlKXshZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9MCxyPTAsaT10LmNoaWxkcmVuLG89aS5sZW5ndGg7LS1vPj0wOykobj1pW29dKS56Kz1lLG4ubSs9ZSxlKz1uLnMrKHIrPW4uYyl9KG4pO3ZhciBvPShlWzBdLnorZVtlLmxlbmd0aC0xXS56KS8yO2k/KG4uej1pLnordChuLl8saS5fKSxuLm09bi56LW8pOm4uej1vfWVsc2UgaSYmKG4uej1pLnordChuLl8saS5fKSk7bi5wYXJlbnQuQT1mdW5jdGlvbihuLGUscil7aWYoZSl7Zm9yKHZhciBpLG89bixhPW4sdT1lLGY9by5wYXJlbnQuY2hpbGRyZW5bMF0sYz1vLm0scz1hLm0sbD11Lm0saD1mLm07dT1IbCh1KSxvPUlsKG8pLHUmJm87KWY9SWwoZiksKGE9SGwoYSkpLmE9biwoaT11LnorbC1vLnotYyt0KHUuXyxvLl8pKT4wJiYoamwoWGwodSxuLHIpLG4saSksYys9aSxzKz1pKSxsKz11Lm0sYys9by5tLGgrPWYubSxzKz1hLm07dSYmIUhsKGEpJiYoYS50PXUsYS5tKz1sLXMpLG8mJiFJbChmKSYmKGYudD1vLGYubSs9Yy1oLHI9bil9cmV0dXJuIHJ9KG4saSxuLnBhcmVudC5BfHxyWzBdKX1mdW5jdGlvbiBhKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiB1KHQpe3QueCo9bix0Lnk9dC5kZXB0aCplfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsbj0rdFswXSxlPSt0WzFdLGkpOnI/bnVsbDpbbixlXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxuPSt0WzBdLGU9K3RbMV0saSk6cj9bbixlXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1abCxuPSExLGU9MSxyPTEsaT1bMF0sbz1FbCxhPUVsLHU9RWwsZj1FbCxjPUVsO2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9ZSx0LnkxPXIsdC5lYWNoQmVmb3JlKGwpLGk9WzBdLG4mJnQuZWFjaEJlZm9yZShMbCksdH1mdW5jdGlvbiBsKG4pe3ZhciBlPWlbbi5kZXB0aF0scj1uLngwK2Uscz1uLnkwK2UsbD1uLngxLWUsaD1uLnkxLWU7bDxyJiYocj1sPShyK2wpLzIpLGg8cyYmKHM9aD0ocytoKS8yKSxuLngwPXIsbi55MD1zLG4ueDE9bCxuLnkxPWgsbi5jaGlsZHJlbiYmKGU9aVtuLmRlcHRoKzFdPW8obikvMixyKz1jKG4pLWUscys9YShuKS1lLChsLT11KG4pLWUpPHImJihyPWw9KHIrbCkvMiksKGgtPWYobiktZSk8cyYmKHM9aD0ocytoKS8yKSx0KG4scixzLGwsaCkpfXJldHVybiBzLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhdCxzKTpufSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxzKTpbZSxyXX0scy50aWxlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVNsKG4pLHMpOnR9LHMucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9zLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6cy5wYWRkaW5nSW5uZXIoKX0scy5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6b30scy5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cy5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnMucGFkZGluZ1RvcCgpfSxzLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6YX0scy5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6dX0scy5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6a2woK3QpLHMpOmZ9LHMucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6Y30sc30sdC50cmVlbWFwQmluYXJ5PWZ1bmN0aW9uKHQsbixlLHIsaSl7dmFyIG8sYSx1PXQuY2hpbGRyZW4sZj11Lmxlbmd0aCxjPW5ldyBBcnJheShmKzEpO2ZvcihjWzBdPWE9bz0wO288ZjsrK28pY1tvKzFdPWErPXVbb10udmFsdWU7IWZ1bmN0aW9uIHQobixlLHIsaSxvLGEsZil7aWYobj49ZS0xKXt2YXIgcz11W25dO3JldHVybiBzLngwPWkscy55MD1vLHMueDE9YSx2b2lkKHMueTE9Zil9Zm9yKHZhciBsPWNbbl0saD1yLzIrbCxkPW4rMSxwPWUtMTtkPHA7KXt2YXIgdj1kK3A+Pj4xO2Nbdl08aD9kPXYrMTpwPXZ9aC1jW2QtMV08Y1tkXS1oJiZuKzE8ZCYmLS1kO3ZhciBnPWNbZF0tbCx5PXItZztpZihhLWk+Zi1vKXt2YXIgXz0oaSp5K2EqZykvcjt0KG4sZCxnLGksbyxfLGYpLHQoZCxlLHksXyxvLGEsZil9ZWxzZXt2YXIgYj0obyp5K2YqZykvcjt0KG4sZCxnLGksbyxhLGIpLHQoZCxlLHksaSxiLGEsZil9fSgwLGYsdC52YWx1ZSxuLGUscixpKX0sdC50cmVlbWFwRGljZT1EbCx0LnRyZWVtYXBTbGljZT1WbCx0LnRyZWVtYXBTbGljZURpY2U9ZnVuY3Rpb24odCxuLGUscixpKXsoMSZ0LmRlcHRoP1ZsOkRsKSh0LG4sZSxyLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1abCx0LnRyZWVtYXBSZXNxdWFyaWZ5PVFsLHQuaW50ZXJwb2xhdGU9bWUsdC5pbnRlcnBvbGF0ZUFycmF5PWRlLHQuaW50ZXJwb2xhdGVCYXNpcz1lZSx0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9cmUsdC5pbnRlcnBvbGF0ZURhdGU9cGUsdC5pbnRlcnBvbGF0ZURpc2NyZXRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGUqbikpKV19fSx0LmludGVycG9sYXRlSHVlPWZ1bmN0aW9uKHQsbil7dmFyIGU9YWUoK3QsK24pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiBuLTM2MCpNYXRoLmZsb29yKG4vMzYwKX19LHQuaW50ZXJwb2xhdGVOdW1iZXI9dmUsdC5pbnRlcnBvbGF0ZU9iamVjdD1nZSx0LmludGVycG9sYXRlUm91bmQ9eGUsdC5pbnRlcnBvbGF0ZVN0cmluZz1iZSx0LmludGVycG9sYXRlVHJhbnNmb3JtQ3NzPUNlLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9UGUsdC5pbnRlcnBvbGF0ZVpvb209cWUsdC5pbnRlcnBvbGF0ZVJnYj1jZSx0LmludGVycG9sYXRlUmdiQmFzaXM9bGUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPWhlLHQuaW50ZXJwb2xhdGVIc2w9WWUsdC5pbnRlcnBvbGF0ZUhzbExvbmc9QmUsdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LG4pe3ZhciBlPWZlKCh0PVVuKHQpKS5sLChuPVVuKG4pKS5sKSxyPWZlKHQuYSxuLmEpLGk9ZmUodC5iLG4uYiksbz1mZSh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQubD1lKG4pLHQuYT1yKG4pLHQuYj1pKG4pLHQub3BhY2l0eT1vKG4pLHQrIiJ9fSx0LmludGVycG9sYXRlSGNsPUllLHQuaW50ZXJwb2xhdGVIY2xMb25nPUhlLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9WGUsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9R2UsdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9MCxyPW4ubGVuZ3RoLTEsaT1uWzBdLG89bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspb1tlXT10KGksaT1uWysrZV0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKHQqPXIpKSk7cmV0dXJuIG9bbl0odC1uKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWVbcl09dChyLyhuLTEpKTtyZXR1cm4gZX0sdC5wYXRoPUdpLHQucG9seWdvbkFyZWE9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9LTEscj10Lmxlbmd0aCxpPXRbci0xXSxvPTA7KytlPHI7KW49aSxpPXRbZV0sbys9blsxXSppWzBdLW5bMF0qaVsxXTtyZXR1cm4gby8yfSx0LnBvbHlnb25DZW50cm9pZD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz0wLGE9MCx1PXRbaS0xXSxmPTA7KytyPGk7KW49dSx1PXRbcl0sZis9ZT1uWzBdKnVbMV0tdVswXSpuWzFdLG8rPShuWzBdK3VbMF0pKmUsYSs9KG5bMV0rdVsxXSkqZTtyZXR1cm5bby8oZio9MyksYS9mXX0sdC5wb2x5Z29uSHVsbD1mdW5jdGlvbih0KXtpZigoZT10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgbixlLHI9bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpO2ZvcihuPTA7bjxlOysrbilyW25dPVsrdFtuXVswXSwrdFtuXVsxXSxuXTtmb3Ioci5zb3J0KEpsKSxuPTA7bjxlOysrbilpW25dPVtyW25dWzBdLC1yW25dWzFdXTt2YXIgbz1LbChyKSxhPUtsKGkpLHU9YVswXT09PW9bMF0sZj1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2ZvcihuPW8ubGVuZ3RoLTE7bj49MDstLW4pYy5wdXNoKHRbcltvW25dXVsyXV0pO2ZvcihuPSt1O248YS5sZW5ndGgtZjsrK24pYy5wdXNoKHRbclthW25dXVsyXV0pO3JldHVybiBjfSx0LnBvbHlnb25Db250YWlucz1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZSxyLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1uWzBdLHU9blsxXSxmPW9bMF0sYz1vWzFdLHM9ITEsbD0wO2w8aTsrK2wpZT0obz10W2xdKVswXSwocj1vWzFdKT51IT1jPnUmJmE8KGYtZSkqKHUtcikvKGMtcikrZSYmKHM9IXMpLGY9ZSxjPXI7cmV0dXJuIHN9LHQucG9seWdvbkxlbmd0aD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1vWzBdLHU9b1sxXSxmPTA7KytyPGk7KW49YSxlPXUsbi09YT0obz10W3JdKVswXSxlLT11PW9bMV0sZis9TWF0aC5zcXJ0KG4qbitlKmUpO3JldHVybiBmfSx0LnF1YWR0cmVlPXJhLHQucmFuZG9tVW5pZm9ybT1uaCx0LnJhbmRvbU5vcm1hbD1laCx0LnJhbmRvbUxvZ05vcm1hbD1yaCx0LnJhbmRvbUJhdGVzPW9oLHQucmFuZG9tSXJ3aW5IYWxsPWloLHQucmFuZG9tRXhwb25lbnRpYWw9YWgsdC5zY2FsZUJhbmQ9aGgsdC5zY2FsZVBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQobil7dmFyIGU9bi5jb3B5O3JldHVybiBuLnBhZGRpbmc9bi5wYWRkaW5nT3V0ZXIsZGVsZXRlIG4ucGFkZGluZ0lubmVyLGRlbGV0ZSBuLnBhZGRpbmdPdXRlcixuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlKCkpfSxufShoaCgpLnBhZGRpbmdJbm5lcigxKSl9LHQuc2NhbGVJZGVudGl0eT1mdW5jdGlvbiB0KCl7dmFyIG49WzAsMV07ZnVuY3Rpb24gZSh0KXtyZXR1cm4rdH1yZXR1cm4gZS5pbnZlcnQ9ZSxlLmRvbWFpbj1lLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWZoLmNhbGwodCxwaCksZSk6bi5zbGljZSgpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKX0seGgoZSl9LHQuc2NhbGVMaW5lYXI9ZnVuY3Rpb24gdCgpe3ZhciBuPW1oKGdoLHZlKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKG4sdCgpKX0seGgobil9LHQuc2NhbGVMb2c9ZnVuY3Rpb24gbigpe3ZhciBlPW1oKE1oLEFoKS5kb21haW4oWzEsMTBdKSxyPWUuZG9tYWluLGk9MTAsbz1TaCgxMCksYT1OaCgxMCk7ZnVuY3Rpb24gdSgpe3JldHVybiBvPVNoKGkpLGE9TmgoaSkscigpWzBdPDAmJihvPUVoKG8pLGE9RWgoYSkpLGV9cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHQpLHUoKSk6cigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuLGU9cigpLHU9ZVswXSxmPWVbZS5sZW5ndGgtMV07KG49Zjx1KSYmKGg9dSx1PWYsZj1oKTt2YXIgYyxzLGwsaD1vKHUpLGQ9byhmKSxwPW51bGw9PXQ/MTA6K3Qsdj1bXTtpZighKGklMSkmJmQtaDxwKXtpZihoPU1hdGgucm91bmQoaCktMSxkPU1hdGgucm91bmQoZCkrMSx1PjApe2Zvcig7aDxkOysraClmb3Iocz0xLGM9YShoKTtzPGk7KytzKWlmKCEoKGw9YypzKTx1KSl7aWYobD5mKWJyZWFrO3YucHVzaChsKX19ZWxzZSBmb3IoO2g8ZDsrK2gpZm9yKHM9aS0xLGM9YShoKTtzPj0xOy0tcylpZighKChsPWMqcyk8dSkpe2lmKGw+ZilicmVhazt2LnB1c2gobCl9fWVsc2Ugdj1tKGgsZCxNYXRoLm1pbihkLWgscCkpLm1hcChhKTtyZXR1cm4gbj92LnJldmVyc2UoKTp2fSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixyKXtpZihudWxsPT1yJiYocj0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpLG49PT0xLzApcmV0dXJuIHI7bnVsbD09biYmKG49MTApO3ZhciB1PU1hdGgubWF4KDEsaSpuL2UudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10L2EoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIG4qaTxpLS41JiYobio9aSksbjw9dT9yKHQpOiIifX0sZS5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIod2gocigpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gYShNYXRoLmZsb29yKG8odCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gYShNYXRoLmNlaWwobyh0KSkpfX0pKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKGUsbigpLmJhc2UoaSkpfSxlfSx0LnNjYWxlT3JkaW5hbD1saCx0LnNjYWxlSW1wbGljaXQ9c2gsdC5zY2FsZVBvdz1DaCx0LnNjYWxlU3FydD1mdW5jdGlvbigpe3JldHVybiBDaCgpLmV4cG9uZW50KC41KX0sdC5zY2FsZVF1YW50aWxlPWZ1bmN0aW9uIHQoKXt2YXIgZT1bXSxyPVtdLG89W107ZnVuY3Rpb24gYSgpe3ZhciB0PTAsbj1NYXRoLm1heCgxLHIubGVuZ3RoKTtmb3Iobz1uZXcgQXJyYXkobi0xKTsrK3Q8bjspb1t0LTFdPUEoZSx0L24pO3JldHVybiB1fWZ1bmN0aW9uIHUodCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiByW2kobyx0KV19cmV0dXJuIHUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPXIuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP29bbi0xXTplWzBdLG48by5sZW5ndGg/b1tuXTplW2UubGVuZ3RoLTFdXX0sdS5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgcixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShyPXRbaV0pfHxpc05hTihyPStyKXx8ZS5wdXNoKHIpO3JldHVybiBlLnNvcnQobiksYSgpfSx1LnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWNoLmNhbGwodCksYSgpKTpyLnNsaWNlKCl9LHUucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2xpY2UoKX0sdS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSkucmFuZ2Uocil9LHV9LHQuc2NhbGVRdWFudGl6ZT1mdW5jdGlvbiB0KCl7dmFyIG49MCxlPTEscj0xLG89Wy41XSxhPVswLDFdO2Z1bmN0aW9uIHUodCl7aWYodDw9dClyZXR1cm4gYVtpKG8sdCwwLHIpXX1mdW5jdGlvbiBmKCl7dmFyIHQ9LTE7Zm9yKG89bmV3IEFycmF5KHIpOysrdDxyOylvW3RdPSgodCsxKSplLSh0LXIpKm4pLyhyKzEpO3JldHVybiB1fXJldHVybiB1LmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxlPSt0WzFdLGYoKSk6W24sZV19LHUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGE9Y2guY2FsbCh0KSkubGVuZ3RoLTEsZigpKTphLnNsaWNlKCl9LHUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBpPWEuaW5kZXhPZih0KTtyZXR1cm4gaTwwP1tOYU4sTmFOXTppPDE/W24sb1swXV06aT49cj9bb1tyLTFdLGVdOltvW2ktMV0sb1tpXV19LHUuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKFtuLGVdKS5yYW5nZShhKX0seGgodSl9LHQuc2NhbGVUaHJlc2hvbGQ9ZnVuY3Rpb24gdCgpe3ZhciBuPVsuNV0sZT1bMCwxXSxyPTE7ZnVuY3Rpb24gbyh0KXtpZih0PD10KXJldHVybiBlW2kobix0LDAscildfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jaC5jYWxsKHQpLHI9TWF0aC5taW4obi5sZW5ndGgsZS5sZW5ndGgtMSksbyk6bi5zbGljZSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNoLmNhbGwodCkscj1NYXRoLm1pbihuLmxlbmd0aCxlLmxlbmd0aC0xKSxvKTplLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPWUuaW5kZXhPZih0KTtyZXR1cm5bbltyLTFdLG5bcl1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKS5yYW5nZShlKX0sb30sdC5zY2FsZVRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gY3YoY2QsdWQsVmgsamgsSWgsQmgsT2gsTGgsdC50aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9LHQuc2NhbGVVdGM9ZnVuY3Rpb24oKXtyZXR1cm4gY3YoTGQsemQsX2QsdmQsZGQsbGQsT2gsTGgsdC51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX0sdC5zY2FsZVNlcXVlbnRpYWw9ZnVuY3Rpb24gdChuKXt2YXIgZT0wLHI9MSxpPTEsbz0hMTtmdW5jdGlvbiBhKHQpe3ZhciByPSh0LWUpKmk7cmV0dXJuIG4obz9NYXRoLm1heCgwLE1hdGgubWluKDEscikpOnIpfXJldHVybiBhLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLGk9ZT09PXI/MDoxLyhyLWUpLGEpOltlLHJdfSxhLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxhKTpvfSxhLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEpOm59LGEuY29weT1mdW5jdGlvbigpe3JldHVybiB0KG4pLmRvbWFpbihbZSxyXSkuY2xhbXAobyl9LHhoKGEpfSx0LnNjYWxlRGl2ZXJnaW5nPWZ1bmN0aW9uIHQobil7dmFyIGU9MCxyPS41LGk9MSxvPTEsYT0xLHU9ITE7ZnVuY3Rpb24gZih0KXt2YXIgZT0uNSsoKHQ9K3QpLXIpKih0PHI/bzphKTtyZXR1cm4gbih1P01hdGgubWF4KDAsTWF0aC5taW4oMSxlKSk6ZSl9cmV0dXJuIGYuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saT0rdFsyXSxvPWU9PT1yPzA6LjUvKHItZSksYT1yPT09aT8wOi41LyhpLXIpLGYpOltlLHIsaV19LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ISF0LGYpOnV9LGYuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZik6bn0sZi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQobikuZG9tYWluKFtlLHIsaV0pLmNsYW1wKHUpfSx4aChmKX0sdC5zY2hlbWVDYXRlZ29yeTEwPWx2LHQuc2NoZW1lQWNjZW50PWh2LHQuc2NoZW1lRGFyazI9ZHYsdC5zY2hlbWVQYWlyZWQ9cHYsdC5zY2hlbWVQYXN0ZWwxPXZ2LHQuc2NoZW1lUGFzdGVsMj1ndix0LnNjaGVtZVNldDE9eXYsdC5zY2hlbWVTZXQyPV92LHQuc2NoZW1lU2V0Mz1idix0LmludGVycG9sYXRlQnJCRz13dix0LnNjaGVtZUJyQkc9eHYsdC5pbnRlcnBvbGF0ZVBSR249QXYsdC5zY2hlbWVQUkduPU12LHQuaW50ZXJwb2xhdGVQaVlHPU52LHQuc2NoZW1lUGlZRz1Udix0LmludGVycG9sYXRlUHVPcj1Fdix0LnNjaGVtZVB1T3I9U3YsdC5pbnRlcnBvbGF0ZVJkQnU9Q3YsdC5zY2hlbWVSZEJ1PWt2LHQuaW50ZXJwb2xhdGVSZEd5PXp2LHQuc2NoZW1lUmRHeT1Qdix0LmludGVycG9sYXRlUmRZbEJ1PUx2LHQuc2NoZW1lUmRZbEJ1PVJ2LHQuaW50ZXJwb2xhdGVSZFlsR249VXYsdC5zY2hlbWVSZFlsR249RHYsdC5pbnRlcnBvbGF0ZVNwZWN0cmFsPU92LHQuc2NoZW1lU3BlY3RyYWw9cXYsdC5pbnRlcnBvbGF0ZUJ1R249QnYsdC5zY2hlbWVCdUduPVl2LHQuaW50ZXJwb2xhdGVCdVB1PUl2LHQuc2NoZW1lQnVQdT1Gdix0LmludGVycG9sYXRlR25CdT1qdix0LnNjaGVtZUduQnU9SHYsdC5pbnRlcnBvbGF0ZU9yUmQ9R3YsdC5zY2hlbWVPclJkPVh2LHQuaW50ZXJwb2xhdGVQdUJ1R249JHYsdC5zY2hlbWVQdUJ1R249VnYsdC5pbnRlcnBvbGF0ZVB1QnU9WnYsdC5zY2hlbWVQdUJ1PVd2LHQuaW50ZXJwb2xhdGVQdVJkPUp2LHQuc2NoZW1lUHVSZD1Rdix0LmludGVycG9sYXRlUmRQdT10Zyx0LnNjaGVtZVJkUHU9S3YsdC5pbnRlcnBvbGF0ZVlsR25CdT1lZyx0LnNjaGVtZVlsR25CdT1uZyx0LmludGVycG9sYXRlWWxHbj1pZyx0LnNjaGVtZVlsR249cmcsdC5pbnRlcnBvbGF0ZVlsT3JCcj1hZyx0LnNjaGVtZVlsT3JCcj1vZyx0LmludGVycG9sYXRlWWxPclJkPWZnLHQuc2NoZW1lWWxPclJkPXVnLHQuaW50ZXJwb2xhdGVCbHVlcz1zZyx0LnNjaGVtZUJsdWVzPWNnLHQuaW50ZXJwb2xhdGVHcmVlbnM9aGcsdC5zY2hlbWVHcmVlbnM9bGcsdC5pbnRlcnBvbGF0ZUdyZXlzPXBnLHQuc2NoZW1lR3JleXM9ZGcsdC5pbnRlcnBvbGF0ZVB1cnBsZXM9Z2csdC5zY2hlbWVQdXJwbGVzPXZnLHQuaW50ZXJwb2xhdGVSZWRzPV9nLHQuc2NoZW1lUmVkcz15Zyx0LmludGVycG9sYXRlT3Jhbmdlcz1tZyx0LnNjaGVtZU9yYW5nZXM9YmcsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ9eGcsdC5pbnRlcnBvbGF0ZVJhaW5ib3c9ZnVuY3Rpb24odCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBuPU1hdGguYWJzKHQtLjUpO3JldHVybiBBZy5oPTM2MCp0LTEwMCxBZy5zPTEuNS0xLjUqbixBZy5sPS44LS45Km4sQWcrIiJ9LHQuaW50ZXJwb2xhdGVXYXJtPXdnLHQuaW50ZXJwb2xhdGVDb29sPU1nLHQuaW50ZXJwb2xhdGVTaW5lYm93PWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PSguNS10KSpNYXRoLlBJLFRnLnI9MjU1KihuPU1hdGguc2luKHQpKSpuLFRnLmc9MjU1KihuPU1hdGguc2luKHQrTmcpKSpuLFRnLmI9MjU1KihuPU1hdGguc2luKHQrU2cpKSpuLFRnKyIifSx0LmludGVycG9sYXRlVmlyaWRpcz1rZyx0LmludGVycG9sYXRlTWFnbWE9Q2csdC5pbnRlcnBvbGF0ZUluZmVybm89UGcsdC5pbnRlcnBvbGF0ZVBsYXNtYT16Zyx0LmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gRHQoVyh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSx0LmNyZWF0b3I9Vyx0LmxvY2FsPXF0LHQubWF0Y2hlcj1ydCx0Lm1vdXNlPUZ0LHQubmFtZXNwYWNlPSQsdC5uYW1lc3BhY2VzPVYsdC5jbGllbnRQb2ludD1CdCx0LnNlbGVjdD1EdCx0LnNlbGVjdEFsbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFJ0KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFJ0KFtudWxsPT10P1tdOnRdLHp0KX0sdC5zZWxlY3Rpb249THQsdC5zZWxlY3Rvcj1RLHQuc2VsZWN0b3JBbGw9Syx0LnN0eWxlPWx0LHQudG91Y2g9SXQsdC50b3VjaGVzPWZ1bmN0aW9uKHQsbil7bnVsbD09biYmKG49WXQoKS50b3VjaGVzKTtmb3IodmFyIGU9MCxyPW4/bi5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtlPHI7KytlKWlbZV09QnQodCxuW2VdKTtyZXR1cm4gaX0sdC53aW5kb3c9c3QsdC5jdXN0b21FdmVudD1DdCx0LmFyYz1mdW5jdGlvbigpe3ZhciB0PUdnLG49VmcsZT1SZygwKSxyPW51bGwsaT0kZyxvPVdnLGE9WmcsdT1udWxsO2Z1bmN0aW9uIGYoKXt2YXIgZixjLHMsbD0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1IZyxwPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUhnLHY9TGcocC1kKSxnPXA+ZDtpZih1fHwodT1mPUdpKCkpLGg8bCYmKGM9aCxoPWwsbD1jKSxoPkZnKWlmKHY+amctRmcpdS5tb3ZlVG8oaCpVZyhkKSxoKllnKGQpKSx1LmFyYygwLDAsaCxkLHAsIWcpLGw+RmcmJih1Lm1vdmVUbyhsKlVnKHApLGwqWWcocCkpLHUuYXJjKDAsMCxsLHAsZCxnKSk7ZWxzZXt2YXIgeSxfLGI9ZCxtPXAseD1kLHc9cCxNPXYsQT12LFQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPVQ+RmcmJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpCZyhsKmwraCpoKSksUz1PZyhMZyhoLWwpLzIsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxFPVMsaz1TO2lmKE4+Rmcpe3ZhciBDPVhnKE4vbCpZZyhUKSksUD1YZyhOL2gqWWcoVCkpOyhNLT0yKkMpPkZnPyh4Kz1DKj1nPzE6LTEsdy09Qyk6KE09MCx4PXc9KGQrcCkvMiksKEEtPTIqUCk+Rmc/KGIrPVAqPWc/MTotMSxtLT1QKTooQT0wLGI9bT0oZCtwKS8yKX12YXIgej1oKlVnKGIpLFI9aCpZZyhiKSxMPWwqVWcodyksRD1sKllnKHcpO2lmKFM+Rmcpe3ZhciBVPWgqVWcobSkscT1oKllnKG0pLE89bCpVZyh4KSxZPWwqWWcoeCk7aWYodjxJZyl7dmFyIEI9TT5GZz9mdW5jdGlvbih0LG4sZSxyLGksbyxhLHUpe3ZhciBmPWUtdCxjPXItbixzPWEtaSxsPXUtbyxoPShzKihuLW8pLWwqKHQtaSkpLyhsKmYtcypjKTtyZXR1cm5bdCtoKmYsbitoKmNdfSh6LFIsTyxZLFUscSxMLEQpOltMLERdLEY9ei1CWzBdLEk9Ui1CWzFdLEg9VS1CWzBdLGo9cS1CWzFdLFg9MS9ZZygoKHM9KEYqSCtJKmopLyhCZyhGKkYrSSpJKSpCZyhIKkgraipqKSkpPjE/MDpzPC0xP0lnOk1hdGguYWNvcyhzKSkvMiksRz1CZyhCWzBdKkJbMF0rQlsxXSpCWzFdKTtFPU9nKFMsKGwtRykvKFgtMSkpLGs9T2coUywoaC1HKS8oWCsxKSl9fUE+Rmc/az5GZz8oeT1RZyhPLFkseixSLGgsayxnKSxfPVFnKFUscSxMLEQsaCxrLGcpLHUubW92ZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksazxTP3UuYXJjKHkuY3gseS5jeSxrLERnKHkueTAxLHkueDAxKSxEZyhfLnkwMSxfLngwMSksIWcpOih1LmFyYyh5LmN4LHkuY3ksayxEZyh5LnkwMSx5LngwMSksRGcoeS55MTEseS54MTEpLCFnKSx1LmFyYygwLDAsaCxEZyh5LmN5K3kueTExLHkuY3greS54MTEpLERnKF8uY3krXy55MTEsXy5jeCtfLngxMSksIWcpLHUuYXJjKF8uY3gsXy5jeSxrLERnKF8ueTExLF8ueDExKSxEZyhfLnkwMSxfLngwMSksIWcpKSk6KHUubW92ZVRvKHosUiksdS5hcmMoMCwwLGgsYixtLCFnKSk6dS5tb3ZlVG8oeixSKSxsPkZnJiZNPkZnP0U+Rmc/KHk9UWcoTCxELFUscSxsLC1FLGcpLF89UWcoeixSLE8sWSxsLC1FLGcpLHUubGluZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksRTxTP3UuYXJjKHkuY3gseS5jeSxFLERnKHkueTAxLHkueDAxKSxEZyhfLnkwMSxfLngwMSksIWcpOih1LmFyYyh5LmN4LHkuY3ksRSxEZyh5LnkwMSx5LngwMSksRGcoeS55MTEseS54MTEpLCFnKSx1LmFyYygwLDAsbCxEZyh5LmN5K3kueTExLHkuY3greS54MTEpLERnKF8uY3krXy55MTEsXy5jeCtfLngxMSksZyksdS5hcmMoXy5jeCxfLmN5LEUsRGcoXy55MTEsXy54MTEpLERnKF8ueTAxLF8ueDAxKSwhZykpKTp1LmFyYygwLDAsbCx3LHgsZyk6dS5saW5lVG8oTCxEKX1lbHNlIHUubW92ZVRvKDAsMCk7aWYodS5jbG9zZVBhdGgoKSxmKXJldHVybiB1PW51bGwsZisiInx8bnVsbH1yZXR1cm4gZi5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBlPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1JZy8yO3JldHVybltVZyhyKSplLFlnKHIpKmVdfSxmLmlubmVyUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoK24pLGYpOnR9LGYub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6bn0sZi5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6ZX0sZi5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOnJ9LGYuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTppfSxmLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOm99LGYucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6YX0sZi5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PXQ/bnVsbDp0LGYpOnV9LGZ9LHQuYXJlYT1yeSx0LmxpbmU9ZXksdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1veSxuPWl5LGU9bnVsbCxyPVJnKDApLGk9UmcoamcpLG89UmcoMCk7ZnVuY3Rpb24gYShhKXt2YXIgdSxmLGMscyxsLGg9YS5sZW5ndGgsZD0wLHA9bmV3IEFycmF5KGgpLHY9bmV3IEFycmF5KGgpLGc9K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9TWF0aC5taW4oamcsTWF0aC5tYXgoLWpnLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSxfPU1hdGgubWluKE1hdGguYWJzKHkpL2gsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9XyooeTwwPy0xOjEpO2Zvcih1PTA7dTxoOysrdSkobD12W3BbdV09dV09K3QoYVt1XSx1LGEpKT4wJiYoZCs9bCk7Zm9yKG51bGwhPW4/cC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odlt0XSx2W2VdKX0pOm51bGwhPWUmJnAuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlKGFbdF0sYVtuXSl9KSx1PTAsYz1kPyh5LWgqYikvZDowO3U8aDsrK3UsZz1zKWY9cFt1XSxzPWcrKChsPXZbZl0pPjA/bCpjOjApK2IsdltmXT17ZGF0YTphW2ZdLGluZGV4OnUsdmFsdWU6bCxzdGFydEFuZ2xlOmcsZW5kQW5nbGU6cyxwYWRBbmdsZTpffTtyZXR1cm4gdn1yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKCtuKSxhKTp0fSxhLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsYSk6bn0sYS5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxhKTpyfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGEpOml9LGEucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6b30sYX0sdC5hcmVhUmFkaWFsPWx5LHQucmFkaWFsQXJlYT1seSx0LmxpbmVSYWRpYWw9c3ksdC5yYWRpYWxMaW5lPXN5LHQucG9pbnRSYWRpYWw9aHksdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBneSh5eSl9LHQubGlua1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIGd5KF95KX0sdC5saW5rUmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9Z3koYnkpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9UmcobXkpLG49UmcoNjQpLGU9bnVsbDtmdW5jdGlvbiByKCl7dmFyIHI7aWYoZXx8KGU9cj1HaSgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGUsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBlPW51bGwscisiInx8bnVsbH1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Umcobikscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLHIpOm59LHIuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6dCxyKTplfSxyfSx0LnN5bWJvbHM9VXksdC5zeW1ib2xDaXJjbGU9bXksdC5zeW1ib2xDcm9zcz14eSx0LnN5bWJvbERpYW1vbmQ9QXksdC5zeW1ib2xTcXVhcmU9a3ksdC5zeW1ib2xTdGFyPUV5LHQuc3ltYm9sVHJpYW5nbGU9UHksdC5zeW1ib2xXeWU9RHksdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnkodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGeSh0KX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWXkodCl9LHQuY3VydmVCdW5kbGU9SHksdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPSR5LHQuY3VydmVDYXJkaW5hbE9wZW49WnksdC5jdXJ2ZUNhcmRpbmFsPUd5LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPW5fLHQuY3VydmVDYXRtdWxsUm9tT3Blbj1yXyx0LmN1cnZlQ2F0bXVsbFJvbT1LeSx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaV8odCl9LHQuY3VydmVMaW5lYXI9S2csdC5jdXJ2ZU1vbm90b25lWD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGNfKHQpfSx0LmN1cnZlTW9ub3RvbmVZPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc18odCl9LHQuY3VydmVOYXR1cmFsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaF8odCl9LHQuY3VydmVTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcF8odCwuNSl9LHQuY3VydmVTdGVwQWZ0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwXyh0LDEpfSx0LmN1cnZlU3RlcEJlZm9yZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHBfKHQsMCl9LHQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgdD1SZyhbXSksbj1nXyxlPXZfLHI9eV87ZnVuY3Rpb24gaShpKXt2YXIgbyxhLHU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj1pLmxlbmd0aCxjPXUubGVuZ3RoLHM9bmV3IEFycmF5KGMpO2ZvcihvPTA7bzxjOysrbyl7Zm9yKHZhciBsLGg9dVtvXSxkPXNbb109bmV3IEFycmF5KGYpLHA9MDtwPGY7KytwKWRbcF09bD1bMCwrcihpW3BdLGgscCxpKV0sbC5kYXRhPWlbcF07ZC5rZXk9aH1mb3Iobz0wLGE9bihzKTtvPGM7KytvKXNbYVtvXV0uaW5kZXg9bztyZXR1cm4gZShzLGEpLHN9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKGR5LmNhbGwobikpLGkpOnR9LGkudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksaSk6cn0saS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P2dfOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoZHkuY2FsbCh0KSksaSk6bn0saS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD92Xzp0LGkpOmV9LGl9LHQuc3RhY2tPZmZzZXRFeHBhbmQ9ZnVuY3Rpb24odCxuKXtpZigocj10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3IoaT1lPTA7ZTxyOysrZSlpKz10W2VdW29dWzFdfHwwO2lmKGkpZm9yKGU9MDtlPHI7KytlKXRbZV1bb11bMV0vPWl9dl8odCxuKX19LHQuc3RhY2tPZmZzZXREaXZlcmdpbmc9ZnVuY3Rpb24odCxuKXtpZigodT10Lmxlbmd0aCk+MSlmb3IodmFyIGUscixpLG8sYSx1LGY9MCxjPXRbblswXV0ubGVuZ3RoO2Y8YzsrK2YpZm9yKG89YT0wLGU9MDtlPHU7KytlKShpPShyPXRbbltlXV1bZl0pWzFdLXJbMF0pPj0wPyhyWzBdPW8sclsxXT1vKz1pKTppPDA/KHJbMV09YSxyWzBdPWErPWkpOnJbMF09b30sdC5zdGFja09mZnNldE5vbmU9dl8sdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnVuY3Rpb24odCxuKXtpZigoZT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHI9MCxpPXRbblswXV0sbz1pLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIGE9MCx1PTA7YTxlOysrYSl1Kz10W2FdW3JdWzFdfHwwO2lbcl1bMV0rPWlbcl1bMF09LXUvMn12Xyh0LG4pfX0sdC5zdGFja09mZnNldFdpZ2dsZT1mdW5jdGlvbih0LG4pe2lmKChpPXQubGVuZ3RoKT4wJiYocj0oZT10W25bMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgZSxyLGksbz0wLGE9MTthPHI7KythKXtmb3IodmFyIHU9MCxmPTAsYz0wO3U8aTsrK3Upe2Zvcih2YXIgcz10W25bdV1dLGw9c1thXVsxXXx8MCxoPShsLShzW2EtMV1bMV18fDApKS8yLGQ9MDtkPHU7KytkKXt2YXIgcD10W25bZF1dO2grPShwW2FdWzFdfHwwKS0ocFthLTFdWzFdfHwwKX1mKz1sLGMrPWgqbH1lW2EtMV1bMV0rPWVbYS0xXVswXT1vLGYmJihvLT1jL2YpfWVbYS0xXVsxXSs9ZVthLTFdWzBdPW8sdl8odCxuKX19LHQuc3RhY2tPcmRlckFzY2VuZGluZz1fXyx0LnN0YWNrT3JkZXJEZXNjZW5kaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBfXyh0KS5yZXZlcnNlKCl9LHQuc3RhY2tPcmRlckluc2lkZU91dD1mdW5jdGlvbih0KXt2YXIgbixlLHI9dC5sZW5ndGgsaT10Lm1hcChiXyksbz1nXyh0KS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGlbbl0taVt0XX0pLGE9MCx1PTAsZj1bXSxjPVtdO2ZvcihuPTA7bjxyOysrbillPW9bbl0sYTx1PyhhKz1pW2VdLGYucHVzaChlKSk6KHUrPWlbZV0sYy5wdXNoKGUpKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGYpfSx0LnN0YWNrT3JkZXJOb25lPWdfLHQuc3RhY2tPcmRlclJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGdfKHQpLnJldmVyc2UoKX0sdC50aW1lSW50ZXJ2YWw9UmgsdC50aW1lTWlsbGlzZWNvbmQ9TGgsdC50aW1lTWlsbGlzZWNvbmRzPURoLHQudXRjTWlsbGlzZWNvbmQ9TGgsdC51dGNNaWxsaXNlY29uZHM9RGgsdC50aW1lU2Vjb25kPU9oLHQudGltZVNlY29uZHM9WWgsdC51dGNTZWNvbmQ9T2gsdC51dGNTZWNvbmRzPVloLHQudGltZU1pbnV0ZT1CaCx0LnRpbWVNaW51dGVzPUZoLHQudGltZUhvdXI9SWgsdC50aW1lSG91cnM9SGgsdC50aW1lRGF5PWpoLHQudGltZURheXM9WGgsdC50aW1lV2Vlaz1WaCx0LnRpbWVXZWVrcz10ZCx0LnRpbWVTdW5kYXk9VmgsdC50aW1lU3VuZGF5cz10ZCx0LnRpbWVNb25kYXk9JGgsdC50aW1lTW9uZGF5cz1uZCx0LnRpbWVUdWVzZGF5PVdoLHQudGltZVR1ZXNkYXlzPWVkLHQudGltZVdlZG5lc2RheT1aaCx0LnRpbWVXZWRuZXNkYXlzPXJkLHQudGltZVRodXJzZGF5PVFoLHQudGltZVRodXJzZGF5cz1pZCx0LnRpbWVGcmlkYXk9SmgsdC50aW1lRnJpZGF5cz1vZCx0LnRpbWVTYXR1cmRheT1LaCx0LnRpbWVTYXR1cmRheXM9YWQsdC50aW1lTW9udGg9dWQsdC50aW1lTW9udGhzPWZkLHQudGltZVllYXI9Y2QsdC50aW1lWWVhcnM9c2QsdC51dGNNaW51dGU9bGQsdC51dGNNaW51dGVzPWhkLHQudXRjSG91cj1kZCx0LnV0Y0hvdXJzPXBkLHQudXRjRGF5PXZkLHQudXRjRGF5cz1nZCx0LnV0Y1dlZWs9X2QsdC51dGNXZWVrcz1UZCx0LnV0Y1N1bmRheT1fZCx0LnV0Y1N1bmRheXM9VGQsdC51dGNNb25kYXk9YmQsdC51dGNNb25kYXlzPU5kLHQudXRjVHVlc2RheT1tZCx0LnV0Y1R1ZXNkYXlzPVNkLHQudXRjV2VkbmVzZGF5PXhkLHQudXRjV2VkbmVzZGF5cz1FZCx0LnV0Y1RodXJzZGF5PXdkLHQudXRjVGh1cnNkYXlzPWtkLHQudXRjRnJpZGF5PU1kLHQudXRjRnJpZGF5cz1DZCx0LnV0Y1NhdHVyZGF5PUFkLHQudXRjU2F0dXJkYXlzPVBkLHQudXRjTW9udGg9emQsdC51dGNNb250aHM9UmQsdC51dGNZZWFyPUxkLHQudXRjWWVhcnM9RGQsdC50aW1lRm9ybWF0RGVmYXVsdExvY2FsZT1RcCx0LnRpbWVGb3JtYXRMb2NhbGU9WWQsdC5pc29Gb3JtYXQ9SnAsdC5pc29QYXJzZT1LcCx0Lm5vdz1pcix0LnRpbWVyPXVyLHQudGltZXJGbHVzaD1mcix0LnRpbWVvdXQ9aHIsdC5pbnRlcnZhbD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bmV3IGFyLGk9bjtyZXR1cm4gbnVsbD09bj8oci5yZXN0YXJ0KHQsbixlKSxyKToobj0rbixlPW51bGw9PWU/aXIoKTorZSxyLnJlc3RhcnQoZnVuY3Rpb24gbyhhKXthKz1pLHIucmVzdGFydChvLGkrPW4sZSksdChhKX0sbixlKSxyKX0sdC50cmFuc2l0aW9uPXpyLHQuYWN0aXZlPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gbj1udWxsPT1uP251bGw6bisiIixpKWlmKChlPWlbcl0pLnN0YXRlPmdyJiZlLm5hbWU9PT1uKXJldHVybiBuZXcgUHIoW1t0XV0sbGksbiwrcik7cmV0dXJuIG51bGx9LHQuaW50ZXJydXB0PU5yLHQudm9yb25vaT1mdW5jdGlvbigpe3ZhciB0PXhfLG49d18sZT1udWxsO2Z1bmN0aW9uIHIocil7cmV0dXJuIG5ldyBlYihyLm1hcChmdW5jdGlvbihlLGkpe3ZhciBvPVtNYXRoLnJvdW5kKHQoZSxpLHIpL0tfKSpLXyxNYXRoLnJvdW5kKG4oZSxpLHIpL0tfKSpLX107cmV0dXJuIG8uaW5kZXg9aSxvLmRhdGE9ZSxvfSksZSl9cmV0dXJuIHIucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkucG9seWdvbnMoKX0sci5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5saW5rcygpfSxyLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS50cmlhbmdsZXMoKX0sci54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246bV8oK24pLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om1fKCt0KSxyKTpufSxyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0scik6ZSYmW1tlWzBdWzBdLGVbMF1bMV1dLFtlWzFdWzBdLGVbMV1bMV1dXX0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0scik6ZSYmW2VbMV1bMF0tZVswXVswXSxlWzFdWzFdLWVbMF1bMV1dfSxyfSx0Lnpvb209ZnVuY3Rpb24oKXt2YXIgbixlLHI9c2IsaT1sYixvPXZiLGE9ZGIsdT1wYixmPVswLDEvMF0sYz1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxzPTI1MCxsPXFlLGg9W10sZD1JKCJzdGFydCIsInpvb20iLCJlbmQiKSxwPTUwMCx2PTE1MCxnPTA7ZnVuY3Rpb24geSh0KXt0LnByb3BlcnR5KCJfX3pvb20iLGhiKS5vbigid2hlZWwuem9vbSIsQSkub24oIm1vdXNlZG93bi56b29tIixUKS5vbigiZGJsY2xpY2suem9vbSIsTikuZmlsdGVyKHUpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLFMpLm9uKCJ0b3VjaG1vdmUuem9vbSIsRSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsaykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIF8odCxuKXtyZXR1cm4obj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sbikpKT09PXQuaz90Om5ldyBvYihuLHQueCx0LnkpfWZ1bmN0aW9uIGIodCxuLGUpe3ZhciByPW5bMF0tZVswXSp0LmssaT1uWzFdLWVbMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IG9iKHQuayxyLGkpfWZ1bmN0aW9uIG0odCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24geCh0LG4sZSl7dC5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLHI9dyh0aGlzLHQpLG89aS5hcHBseSh0aGlzLHQpLGE9ZXx8bShvKSx1PU1hdGgubWF4KG9bMV1bMF0tb1swXVswXSxvWzFdWzFdLW9bMF1bMV0pLGY9dGhpcy5fX3pvb20sYz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsdCk6bixzPWwoZi5pbnZlcnQoYSkuY29uY2F0KHUvZi5rKSxjLmludmVydChhKS5jb25jYXQodS9jLmspKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMT09PXQpdD1jO2Vsc2V7dmFyIG49cyh0KSxlPXUvblsyXTt0PW5ldyBvYihlLGFbMF0tblswXSplLGFbMV0tblsxXSplKX1yLnpvb20obnVsbCx0KX19KX1mdW5jdGlvbiB3KHQsbil7Zm9yKHZhciBlLHI9MCxpPWgubGVuZ3RoO3I8aTsrK3IpaWYoKGU9aFtyXSkudGhhdD09PXQpcmV0dXJuIGU7cmV0dXJuIG5ldyBNKHQsbil9ZnVuY3Rpb24gTSh0LG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1uLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1pLmFwcGx5KHQsbil9ZnVuY3Rpb24gQSgpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD13KHRoaXMsYXJndW1lbnRzKSxuPXRoaXMuX196b29tLGU9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLG4uaypNYXRoLnBvdygyLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGk9RnQodGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09aVswXSYmdC5tb3VzZVswXVsxXT09PWlbMV18fCh0Lm1vdXNlWzFdPW4uaW52ZXJ0KHQubW91c2VbMF09aSkpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKG4uaz09PWUpcmV0dXJuO3QubW91c2U9W2ksbi5pbnZlcnQoaSldLE5yKHRoaXMpLHQuc3RhcnQoKX1jYigpLHQud2hlZWw9c2V0VGltZW91dChmdW5jdGlvbigpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfSx2KSx0Lnpvb20oIm1vdXNlIixvKGIoXyhuLGUpLHQubW91c2VbMF0sdC5tb3VzZVsxXSksdC5leHRlbnQsYykpfX1mdW5jdGlvbiBUKCl7aWYoIWUmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbj13KHRoaXMsYXJndW1lbnRzKSxpPUR0KHQuZXZlbnQudmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbigpe2lmKGNiKCksIW4ubW92ZWQpe3ZhciBlPXQuZXZlbnQuY2xpZW50WC11LHI9dC5ldmVudC5jbGllbnRZLWY7bi5tb3ZlZD1lKmUrcipyPmd9bi56b29tKCJtb3VzZSIsbyhiKG4udGhhdC5fX3pvb20sbi5tb3VzZVswXT1GdChuLnRoYXQpLG4ubW91c2VbMV0pLG4uZXh0ZW50LGMpKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uKCl7aS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxHdCh0LmV2ZW50LnZpZXcsbi5tb3ZlZCksY2IoKSxuLmVuZCgpfSwhMCksYT1GdCh0aGlzKSx1PXQuZXZlbnQuY2xpZW50WCxmPXQuZXZlbnQuY2xpZW50WTtYdCh0LmV2ZW50LnZpZXcpLGZiKCksbi5tb3VzZT1bYSx0aGlzLl9fem9vbS5pbnZlcnQoYSldLE5yKHRoaXMpLG4uc3RhcnQoKX19ZnVuY3Rpb24gTigpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbj10aGlzLl9fem9vbSxlPUZ0KHRoaXMpLGE9bi5pbnZlcnQoZSksdT1uLmsqKHQuZXZlbnQuc2hpZnRLZXk/LjU6MiksZj1vKGIoXyhuLHUpLGUsYSksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyk7Y2IoKSxzPjA/RHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoeCxmLGUpOkR0KHRoaXMpLmNhbGwoeS50cmFuc2Zvcm0sZil9fWZ1bmN0aW9uIFMoKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGUsaSxvLGEsdT13KHRoaXMsYXJndW1lbnRzKSxmPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsYz1mLmxlbmd0aDtmb3IoZmIoKSxpPTA7aTxjOysraSlhPVthPUl0KHRoaXMsZiwobz1mW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQoYSksby5pZGVudGlmaWVyXSx1LnRvdWNoMD91LnRvdWNoMXx8KHUudG91Y2gxPWEpOih1LnRvdWNoMD1hLGU9ITApO2lmKG4mJihuPWNsZWFyVGltZW91dChuKSwhdS50b3VjaDEpKXJldHVybiB1LmVuZCgpLHZvaWQoKGE9RHQodGhpcykub24oImRibGNsaWNrLnpvb20iKSkmJmEuYXBwbHkodGhpcyxhcmd1bWVudHMpKTtlJiYobj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bj1udWxsfSxwKSxOcih0aGlzKSx1LnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7dmFyIGUscixpLGEsdT13KHRoaXMsYXJndW1lbnRzKSxmPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMscz1mLmxlbmd0aDtmb3IoY2IoKSxuJiYobj1jbGVhclRpbWVvdXQobikpLGU9MDtlPHM7KytlKWk9SXQodGhpcyxmLChyPWZbZV0pLmlkZW50aWZpZXIpLHUudG91Y2gwJiZ1LnRvdWNoMFsyXT09PXIuaWRlbnRpZmllcj91LnRvdWNoMFswXT1pOnUudG91Y2gxJiZ1LnRvdWNoMVsyXT09PXIuaWRlbnRpZmllciYmKHUudG91Y2gxWzBdPWkpO2lmKHI9dS50aGF0Ll9fem9vbSx1LnRvdWNoMSl7dmFyIGw9dS50b3VjaDBbMF0saD11LnRvdWNoMFsxXSxkPXUudG91Y2gxWzBdLHA9dS50b3VjaDFbMV0sdj0odj1kWzBdLWxbMF0pKnYrKHY9ZFsxXS1sWzFdKSp2LGc9KGc9cFswXS1oWzBdKSpnKyhnPXBbMV0taFsxXSkqZztyPV8ocixNYXRoLnNxcnQodi9nKSksaT1bKGxbMF0rZFswXSkvMiwobFsxXStkWzFdKS8yXSxhPVsoaFswXStwWzBdKS8yLChoWzFdK3BbMV0pLzJdfWVsc2V7aWYoIXUudG91Y2gwKXJldHVybjtpPXUudG91Y2gwWzBdLGE9dS50b3VjaDBbMV19dS56b29tKCJ0b3VjaCIsbyhiKHIsaSxhKSx1LmV4dGVudCxjKSl9ZnVuY3Rpb24gaygpe3ZhciBuLHIsaT13KHRoaXMsYXJndW1lbnRzKSxvPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsYT1vLmxlbmd0aDtmb3IoZmIoKSxlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1udWxsfSxwKSxuPTA7bjxhOysrbilyPW9bbl0saS50b3VjaDAmJmkudG91Y2gwWzJdPT09ci5pZGVudGlmaWVyP2RlbGV0ZSBpLnRvdWNoMDppLnRvdWNoMSYmaS50b3VjaDFbMl09PT1yLmlkZW50aWZpZXImJmRlbGV0ZSBpLnRvdWNoMTtpLnRvdWNoMSYmIWkudG91Y2gwJiYoaS50b3VjaDA9aS50b3VjaDEsZGVsZXRlIGkudG91Y2gxKSxpLnRvdWNoMD9pLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoaS50b3VjaDBbMF0pOmkuZW5kKCl9cmV0dXJuIHkudHJhbnNmb3JtPWZ1bmN0aW9uKHQsbil7dmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2UucHJvcGVydHkoIl9fem9vbSIsaGIpLHQhPT1lP3godCxuKTplLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKS5lbmQoKX0pfSx5LnNjYWxlQnk9ZnVuY3Rpb24odCxuKXt5LnNjYWxlVG8odCxmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKX0pfSx5LnNjYWxlVG89ZnVuY3Rpb24odCxuKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxyPW0odCksYT1lLmludmVydChyKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm47cmV0dXJuIG8oYihfKGUsdSkscixhKSx0LGMpfSl9LHkudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxuLGUpe3kudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKX0pfSx5LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKHQsbixlKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykscj10aGlzLl9fem9vbSxhPW0odCk7cmV0dXJuIG8oYWIudHJhbnNsYXRlKGFbMF0sYVsxXSkuc2NhbGUoci5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uLCJmdW5jdGlvbiI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSksdCxjKX0pfSxNLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9aC5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1uLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09bi5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1uLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209bix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGguc3BsaWNlKHRoaXMuaW5kZXgsMSksdGhpcy5pbmRleD0tMSx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe0N0KG5ldyBpYih5LHQsdGhpcy50aGF0Ll9fem9vbSksZC5hcHBseSxkLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LHkud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJiKCt0KSx5KTphfSx5LmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJiKCEhdCkseSk6cn0seS50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyYighIXQpLHkpOnV9LHkuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cmIoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLHkpOml9LHkuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K3RbMF0sZlsxXT0rdFsxXSx5KTpbZlswXSxmWzFdXX0seS50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGNbMF1bMF09K3RbMF1bMF0sY1sxXVswXT0rdFsxXVswXSxjWzBdWzFdPSt0WzBdWzFdLGNbMV1bMV09K3RbMV1bMV0seSk6W1tjWzBdWzBdLGNbMF1bMV1dLFtjWzFdWzBdLGNbMV1bMV1dXX0seS5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCx5KTpvfSx5LmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHkpOnN9LHkuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCx5KTpsfSx5Lm9uPWZ1bmN0aW9uKCl7dmFyIHQ9ZC5vbi5hcHBseShkLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1kP3k6dH0seS5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSh0PSt0KSp0LHkpOk1hdGguc3FydChnKX0seX0sdC56b29tVHJhbnNmb3JtPXViLHQuem9vbUlkZW50aXR5PWFiLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWNvbG9yLXNjYWxlL3BhbGV0dGVzLmpzCnZhciBYbzsKKGZ1bmN0aW9uKGEpe2EucGFsZXR0ZXM9e2dvb2dsZVN0YW5kYXJkOiIjZGI0NDM3ICNmZjcwNDMgI2Y0YjQwMCAjMGY5ZDU4ICMwMDc5NmIgIzAwYWNjMSAjNDI4NWY0ICM1YzZiYzAgI2FiNDdiYyIuc3BsaXQoIiAiKSxnb29nbGVDb29sOiIjOWU5ZDI0ICMwZjlkNTggIzAwNzk2YiAjMDBhY2MxICM0Mjg1ZjQgIzVjNmJjMCAjNjA3ZDhiIi5zcGxpdCgiICIpLGdvb2dsZVdhcm06IiM3OTU1NDggI2FiNDdiYyAjZjA2MjkyICNjMjE4NWIgI2RiNDQzNyAjZmY3MDQzICNmNGI0MDAiLnNwbGl0KCIgIiksZ29vZ2xlQ29sb3JCbGluZEFzc2lzdDoiI2ZmNzA0MyAjMDBBQ0MxICNBQjQ3QkMgIzJBNTZDNiAjMGI4MDQzICNGN0NCNEQgI2MwY2EzMyAjNWUzNWIxICNBNTI3MTQiLnNwbGl0KCIgIiksdGVuc29yYm9hcmRDb2xvckJsaW5kQXNzaXN0OiIjZmY3MDQzICMwMDc3YmIgI2NjMzMxMSAjMzNiYmVlICNlZTMzNzcgIzAwOTk4OCAjYmJiYmJiIi5zcGxpdCgiICIpLGNvbG9yQmxpbmRBc3Npc3QxOiIjNDQ3N2FhICM0NGFhYWEgI2FhYWE0NCAjYWE3NzQ0ICNhYTQ0NTUgI2FhNDQ4OCIuc3BsaXQoIiAiKSxjb2xvckJsaW5kQXNzaXN0MjoiIzg4Y2NlZSAjNDRhYTk5ICMxMTc3MzMgIzk5OTkzMyAjZGRjYzc3ICNjYzY2NzcgIzg4MjI1NSAjYWE0NDk5Ii5zcGxpdCgiICIpLApjb2xvckJsaW5kQXNzaXN0MzoiIzMzMjI4OCAjNjY5OWNjICM4OGNjZWUgIzQ0YWE5OSAjMTE3NzMzICM5OTk5MzMgI2RkY2M3NyAjY2M2Njc3ICNhYTQ0NjYgIzg4MjI1NSAjNjYxMTAwICNhYTQ0OTkiLnNwbGl0KCIgIiksY29sb3JCbGluZEFzc2lzdDQ6IiM0NDc3YWEgIzY2Y2NlZSAjMjI4ODMzICNjY2JiNDQgI2VlNjY3NyAjYWEzMzc3ICNiYmJiYmIiLnNwbGl0KCIgIiksY29sb3JCbGluZEFzc2lzdDU6IiNGRjZEQjYgIzkyMDAwMCAjOTI0OTAwICNEQkQxMDAgIzI0RkYyNCAjMDA2RERCICM0OTAwOTIiLnNwbGl0KCIgIiksbWxkYXNoOiIjRTQ3RUFEICNGNDY0MEQgI0ZBQTMwMCAjRjVFNjM2ICMwMEEwNzcgIzAwNzdCOCAjMDBCN0VEIi5zcGxpdCgiICIpfTthLnN0YW5kYXJkPWEucGFsZXR0ZXMudGVuc29yYm9hcmRDb2xvckJsaW5kQXNzaXN0fSkoWG98fChYbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWNvbG9yLXNjYWxlL2NvbG9yU2NhbGUuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoZixnKXtmdW5jdGlvbiBsKCl7ay5zZXREb21haW4oZygpKX1jb25zdCBrPW5ldyBkO2YuYWRkTGlzdGVuZXIobCk7bCgpO3JldHVybiBuPT5rLmdldENvbG9yKG4pfWNsYXNzIGR7Y29uc3RydWN0b3IoZj1hLnN0YW5kYXJkKXt0aGlzLnBhbGV0dGU9Zjt0aGlzLmlkZW50aWZpZXJzPWQzLm1hcCgpfXNldERvbWFpbihmKXt0aGlzLmlkZW50aWZpZXJzPWQzLm1hcCgpO2YuZm9yRWFjaCgoZyxsKT0+e3RoaXMuaWRlbnRpZmllcnMuc2V0KGcsdGhpcy5wYWxldHRlW2wldGhpcy5wYWxldHRlLmxlbmd0aF0pfSl9Z2V0Q29sb3IoZil7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKGYpKXRocm93IEVycm9yKGBTdHJpbmcgJHtmfSB3YXMgbm90IGluIHRoZSBkb21haW4uYCk7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnMuZ2V0KGYpfX1hLkNvbG9yU2NhbGU9ZDthLnJ1bnNDb2xvclNjYWxlPWMoUW8ucnVuc1N0b3JlLCgpPT5Rby5ydW5zU3RvcmUuZ2V0UnVucygpKTsKYS5leHBlcmltZW50c0NvbG9yU2NhbGU9YyhRby5leHBlcmltZW50c1N0b3JlLCgpPT5Rby5leHBlcmltZW50c1N0b3JlLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTpmfSk9PmYpKX0pKFhvfHwoWG89e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1pY29uLWJ1dHRvbi9wYXBlci1pY29uLWJ1dHRvbi5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6IjAifSxiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJJbmt5Rm9jdXNCZWhhdmlvcl0scHJvcGVydGllczp7c3JjOnt0eXBlOlN0cmluZ30saWNvbjp7dHlwZTpTdHJpbmd9LGFsdDp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9hbHRDaGFuZ2VkIn19LF9hbHRDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtkJiZjIT1kfHx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsYSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZGFzaGJvYXJkLWNvbW1vbi90Zi1tdWx0aS1jaGVja2JveC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtbXVsdGktY2hlY2tib3giLHByb3BlcnRpZXM6e25hbWVzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sY29sb3Jpbmc6e3R5cGU6T2JqZWN0LHZhbHVlOntnZXRDb2xvcjooKT0+IiJ9fSxyZWdleDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLHZhbHVlOiIifSxfcmVnZXg6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfbWFrZVJlZ2V4KHJlZ2V4KSJ9LG5hbWVzTWF0Y2hpbmdSZWdleDp7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0sc2VsZWN0aW9uU3RhdGU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+KHt9KX0sb3V0U2VsZWN0ZWQ6e3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0sbWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdDp7dHlwZTpOdW1iZXIsCnZhbHVlOjQwfSxfZGVib3VuY2VkUmVnZXhDaGFuZ2U6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9Xy5kZWJvdW5jZShjPT57dGhpcy5yZWdleD1jfSwxNTAse2xlYWRpbmc6ITF9KTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz10aGlzLiQkKCIjbmFtZXMtcmVnZXgiKS52YWx1ZTsiIj09Yz90aGlzLmFzeW5jKCgpPT57dGhpcy5yZWdleD1jfSwzMCk6YShjKX19fX0sb2JzZXJ2ZXJzOlsiX3NldElzb2xhdG9ySWNvbihzZWxlY3Rpb25TdGF0ZSwgbmFtZXMpIl0sX21ha2VSZWdleDpmdW5jdGlvbihhKXt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoYSl9Y2F0Y2goYyl7cmV0dXJuIG51bGx9fSxfc2V0SXNvbGF0b3JJY29uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25TdGF0ZSxjPV8uZmlsdGVyKF8udmFsdWVzKGEpKS5sZW5ndGg7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2QuaWNvbj0KMT09PWMmJmFbZC5uYW1lXT8icmFkaW8tYnV0dG9uLWNoZWNrZWQiOiJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfSxjb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4OmZ1bmN0aW9uKCl7Y29uc3QgYT10aGlzLl9yZWdleDtyZXR1cm4gYT90aGlzLm5hbWVzLmZpbHRlcihjPT5hLnRlc3QoYykpOnRoaXMubmFtZXN9LGNvbXB1dGVPdXRTZWxlY3RlZDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsZWN0aW9uU3RhdGUsYz10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5sZW5ndGg8PXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdDtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGQ9Pm51bGw9PWFbZF0/YzphW2RdKX0sc3luY2hyb25pemVDb2xvcnM6ZnVuY3Rpb24oKXt0aGlzLl9zZXRJc29sYXRvckljb24oKTt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgicGFwZXItY2hlY2tib3giKS5mb3JFYWNoKGE9Pntjb25zdCBjPXRoaXMuY29sb3JpbmcuZ2V0Q29sb3IoYS5uYW1lKTsKYS51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pO3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKS5mb3JFYWNoKGE9Pntjb25zdCBjPXRoaXMuY29sb3JpbmcuZ2V0Q29sb3IoYS5uYW1lKTthLnN0eWxlLmNvbG9yPWN9KTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy51cGRhdGVTdHlsZXMoKX0pfSxfaXNvbGF0ZU5hbWU6ZnVuY3Rpb24oYSl7dmFyIGM9UG9seW1lci5kb20oYSkubG9jYWxUYXJnZXQubmFtZSxkPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihmKXtkW2ZdPWY9PWN9KTt0aGlzLnNlbGVjdGlvblN0YXRlPWR9LF9jaGVja2JveENoYW5nZTpmdW5jdGlvbihhKXthPQpQb2x5bWVyLmRvbShhKS5sb2NhbFRhcmdldDtjb25zdCBjPV8uY2xvbmUodGhpcy5zZWxlY3Rpb25TdGF0ZSk7Y1thLm5hbWVdPWEuY2hlY2tlZDt0aGlzLnNlbGVjdGlvblN0YXRlPWN9LF9pc0NoZWNrZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuLTEhPXRoaXMub3V0U2VsZWN0ZWQuaW5kZXhPZihhKX0sdG9nZ2xlQWxsOmZ1bmN0aW9uKCl7Y29uc3QgYT10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKGQ9PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMoZCkpLGM9e307dGhpcy5uYW1lcy5mb3JFYWNoKGQ9PntjW2RdPSFhfSk7dGhpcy5zZWxlY3Rpb25TdGF0ZT1jfX0pfSkoVW98fChVbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLXJ1bnMtc2VsZWN0b3IvdGYtd2JyLXN0cmluZy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi13YnItc3RyaW5nIixwcm9wZXJ0aWVzOnt2YWx1ZTpTdHJpbmcsX3BhcnRzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfY29tcHV0ZVBhcnRzKHZhbHVlKSJ9fSxfY29tcHV0ZVBhcnRzKGEpe2NvbnN0IGM9W10sZD0vWy89XywtXS87Zm9yKG51bGw9PWEmJihhPSIiKTs7KXtjb25zdCBmPWEuc2VhcmNoKGQpO2lmKC0xPT09Zil7Yy5wdXNoKGEpO2JyZWFrfWVsc2UgYy5wdXNoKGEuc2xpY2UoMCxmKzEpKSxhPWEuc2xpY2UoZisxKX1yZXR1cm4gY319KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ydW5zLXNlbGVjdG9yL3RmLXJ1bnMtc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtcnVucy1zZWxlY3RvciIscHJvcGVydGllczp7cnVuU2VsZWN0aW9uU3RhdGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZSIsdmFsdWU6VG8uZ2V0T2JqZWN0SW5pdGlhbGl6ZXIoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSl9LHJlZ2V4SW5wdXQ6e3R5cGU6U3RyaW5nLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Il9yZWdleE9ic2VydmVyIn0sc2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LG5vdGlmeTohMH0scnVuczpBcnJheSxkYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2NsaXBwZWREYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0Q2xpcHBlZERhdGFMb2NhdGlvbihkYXRhTG9jYXRpb24sIF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoKSJ9LF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoOnt0eXBlOk51bWJlciwKdmFsdWU6MjUwLHJlYWRPbmx5OiEwfSxjb2xvcmluZzp7dHlwZTpPYmplY3QsdmFsdWU6e2dldENvbG9yOlhvLnJ1bnNDb2xvclNjYWxlfX19LGF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj1Rby5ydW5zU3RvcmUuYWRkTGlzdGVuZXIoKCk9Pnt0aGlzLnNldCgicnVucyIsUW8ucnVuc1N0b3JlLmdldFJ1bnMoKSl9KTt0aGlzLnNldCgicnVucyIsUW8ucnVuc1N0b3JlLmdldFJ1bnMoKSk7dGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1Rby5lbnZpcm9ubWVudFN0b3JlLmFkZExpc3RlbmVyKCgpPT57dGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsUW8uZW52aXJvbm1lbnRTdG9yZS5nZXREYXRhTG9jYXRpb24oKSl9KTt0aGlzLnNldCgiZGF0YUxvY2F0aW9uIixRby5lbnZpcm9ubWVudFN0b3JlLmdldERhdGFMb2NhdGlvbigpKX0sZGV0YWNoZWQoKXtRby5ydW5zU3RvcmUucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9ydW5TdG9yZUxpc3RlbmVyKTtRby5lbnZpcm9ubWVudFN0b3JlLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fZW52U3RvcmVMaXN0ZW5lcil9LApfdG9nZ2xlQWxsOmZ1bmN0aW9uKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9LF9nZXRDbGlwcGVkRGF0YUxvY2F0aW9uOmZ1bmN0aW9uKGEsYyl7aWYodm9pZCAwIT09YSYmIShhLmxlbmd0aD5jKSlyZXR1cm4gYX0sX29wZW5EYXRhTG9jYXRpb25EaWFsb2c6ZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuJCQoIiNkYXRhLWxvY2F0aW9uLWRpYWxvZyIpLm9wZW4oKX0sX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oYSxjKXtyZXR1cm4gYSYmYS5sZW5ndGg+Y30sX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU6VG8uZ2V0T2JqZWN0T2JzZXJ2ZXIoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksX3JlZ2V4T2JzZXJ2ZXI6VG8uZ2V0U3RyaW5nT2JzZXJ2ZXIoInJlZ2V4SW5wdXQiLHtkZWZhdWx0VmFsdWU6IiJ9KX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLXRlbnNvcmJvYXJkL3JlZ2lzdHJ5LmpzCnZhciBZbzsKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtjLk5PVF9MT0FERUQ9Ik5PVF9MT0FERUQiO2MuTE9BREVEPSJMT0FERUQiO2MuRkFJTEVEPSJGQUlMRUQifSkoYS5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlfHwoYS5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlPXt9KSk7YS5kYXNoYm9hcmRSZWdpc3RyeT17fTthLnJlZ2lzdGVyRGFzaGJvYXJkPWZ1bmN0aW9uKGMpe2lmKCFjLnBsdWdpbil0aHJvdyBFcnJvcigiRGFzaGJvYXJkLnBsdWdpbiBtdXN0IGJlIHByZXNlbnQiKTtpZighYy5lbGVtZW50TmFtZSl0aHJvdyBFcnJvcigiRGFzaGJvYXJkLmVsZW1lbnROYW1lIG11c3QgYmUgcHJlc2VudCIpO2lmKGMucGx1Z2luIGluIGEuZGFzaGJvYXJkUmVnaXN0cnkpdGhyb3cgRXJyb3IoYFBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7Yy5wbHVnaW59YCk7Yy50YWJOYW1lfHwoYy50YWJOYW1lPWMucGx1Z2luKTthLmRhc2hib2FyZFJlZ2lzdHJ5W2MucGx1Z2luXT1jfX0pKFlvfHwoWW89Cnt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtdXRpbHMvdXRpbHMuanMKdmFyIFpvOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhkLGYsZyl7cmV0dXJuIDE9PT1kP2Y6Z31hLmFnZ3JlZ2F0ZVRhZ0luZm89ZnVuY3Rpb24oZCxmKXtsZXQgZz12b2lkIDA7Y29uc3QgbD17fTtPYmplY3Qua2V5cyhkKS5mb3JFYWNoKG49Pntjb25zdCBwPWRbbl07dm9pZCAwPT09ZyYmKGc9cC5kaXNwbGF5TmFtZSk7ZyE9PXAuZGlzcGxheU5hbWUmJihnPW51bGwpO3ZvaWQgMD09PWxbcC5kZXNjcmlwdGlvbl0mJihsW3AuZGVzY3JpcHRpb25dPVtdKTtsW3AuZGVzY3JpcHRpb25dLnB1c2gobil9KTtmPW51bGwhPWc/ZzpmO2NvbnN0IGs9KCgpPT57Y29uc3Qgbj1PYmplY3Qua2V5cyhsKTtyZXR1cm4gMD09PW4ubGVuZ3RoPyIiOjE9PT1uLmxlbmd0aD9uWzBdOmAkeyJceDNjcFx4M2VceDNjc3Ryb25nXHgzZU11bHRpcGxlIGRlc2NyaXB0aW9uczpceDNjL3N0cm9uZ1x4M2VceDNjL3BceDNlIn08dWw+JHtuLm1hcChwPT57Y29uc3QgcT1sW3BdLm1hcCh0PT5gPGNvZGU+JHt0LnJlcGxhY2UoLzwvZywiXHgyNmx0OyIpLnJlcGxhY2UoLz4vZywKIlx4MjZndDsiKS5yZXBsYWNlKC8mL2csIlx4MjZhbXA7Iil9PC9jb2RlPmApLHI9MjxxLmxlbmd0aD9xLnNsaWNlKDAscS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIitxW3EubGVuZ3RoLTFdOnEuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke2MocS5sZW5ndGgsInJ1biIsInJ1bnMiKX0gJHtyfTo8L3A+JHtwfTwvbGk+YH0pLmpvaW4oIiIpfTwvdWw+YH0pKCk7cmV0dXJue2Rpc3BsYXlOYW1lOmYsZGVzY3JpcHRpb246a319fSkoWm98fChabz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLXNwaW5uZXIvcGFwZXItc3Bpbm5lci1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX19hY3RpdmVDaGFuZ2VkIn0sYWx0Ont0eXBlOlN0cmluZyx2YWx1ZToibG9hZGluZyIsb2JzZXJ2ZXI6Il9fYWx0Q2hhbmdlZCJ9LF9fY29vbGluZ0Rvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LF9fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXM6ZnVuY3Rpb24oYSxjKXtyZXR1cm5bYXx8Yz8iYWN0aXZlIjoiIixjPyJjb29sZG93biI6IiJdLmpvaW4oIiAiKX0sX19hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dGhpcy5fX3NldEFyaWFIaWRkZW4oIWEpO3RoaXMuX19jb29saW5nRG93bj0hYSYmY30sX19hbHRDaGFuZ2VkOmZ1bmN0aW9uKGEpeyJsb2FkaW5nIj09PWE/dGhpcy5hbHQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YToodGhpcy5fX3NldEFyaWFIaWRkZW4oIiI9PT0KYSksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGEpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGEpe2E/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfSxfX3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fX2Nvb2xpbmdEb3duPXRoaXMuYWN0aXZlPSExfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItc3Bpbm5lci9wYXBlci1zcGlubmVyLWxpdGUuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3JdfSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZGFzaGJvYXJkLWNvbW1vbi9kYXRhLWxvYWRlci1iZWhhdmlvci5qcwooZnVuY3Rpb24oYSl7bGV0IGM7KGZ1bmN0aW9uKGQpe2RbZC5MT0FESU5HPTBdPSJMT0FESU5HIjtkW2QuTE9BREVEPTFdPSJMT0FERUQifSkoY3x8KGM9e30pKTthLkRhdGFMb2FkZXJCZWhhdmlvcj17cHJvcGVydGllczp7YWN0aXZlOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9sb2FkRGF0YUlmQWN0aXZlIn0sbG9hZEtleTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxnZXREYXRhTG9hZE5hbWU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9PmQ9PlN0cmluZyhkKX0sbG9hZERhdGFDYWxsYmFjazpGdW5jdGlvbixyZXF1ZXN0RGF0YTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodGhpcy5nZXREYXRhTG9hZFVybChkKSl9fSxnZXREYXRhTG9hZFVybDpGdW5jdGlvbixkYXRhTG9hZGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCwKdmFsdWU6ITF9LF9kYXRhTG9hZFN0YXRlOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IE1hcH0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5DYW5jZWxsZXJ9LF9sb2FkRGF0YUFzeW5jOnt0eXBlOk51bWJlcix2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX2RhdGFUb0xvYWRDaGFuZ2VkKGlzQXR0YWNoZWQsIGRhdGFUb0xvYWQuKikiXSxvbkxvYWRGaW5pc2goKXt9LHJlbG9hZCgpe3RoaXMuX2RhdGFMb2FkU3RhdGUuY2xlYXIoKTt0aGlzLl9sb2FkRGF0YSgpfSxyZXNldCgpe251bGwhPXRoaXMuX2xvYWREYXRhQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCk7dGhpcy5fY2FuY2VsbGVyJiZ0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7dGhpcy5fZGF0YUxvYWRTdGF0ZSYmdGhpcy5fZGF0YUxvYWRTdGF0ZS5jbGVhcigpO3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbG9hZERhdGEoKX0sCl9kYXRhVG9Mb2FkQ2hhbmdlZCgpe3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbG9hZERhdGEoKX0sY3JlYXRlZCgpe3RoaXMuX2xvYWREYXRhPV8udGhyb3R0bGUodGhpcy5fbG9hZERhdGFJbXBsLDEwMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pfSxkZXRhY2hlZCgpe251bGwhPXRoaXMuX2xvYWREYXRhQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9LF9sb2FkRGF0YUlmQWN0aXZlKCl7dGhpcy5hY3RpdmUmJnRoaXMuX2xvYWREYXRhKCl9LF9sb2FkRGF0YUltcGwoKXt0aGlzLmFjdGl2ZSYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz10aGlzLmFzeW5jKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShkPT57aWYoIWQuY2FuY2VsbGVkKXJldHVybiB0aGlzLl9zZXREYXRhTG9hZGluZyghMCksZD10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGY9Pgp7Zj10aGlzLmdldERhdGFMb2FkTmFtZShmKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMoZil9KS5tYXAoZj0+e2NvbnN0IGc9dGhpcy5nZXREYXRhTG9hZE5hbWUoZik7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQoZyxjLkxPQURJTkcpO3JldHVybiB0aGlzLnJlcXVlc3REYXRhKGYpLnRoZW4odGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGw9PntsLmNhbmNlbGxlZHx8KHRoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGcsYy5MT0FERUQpLHRoaXMubG9hZERhdGFDYWxsYmFjayh0aGlzLGYsbC52YWx1ZSkpO3JldHVybiBnfSkpfSksUHJvbWlzZS5hbGwoZCkudGhlbih0aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoZj0+e2lmKCFmLmNhbmNlbGxlZCl7Y29uc3QgZz1uZXcgU2V0KGYudmFsdWUpO2lmKHRoaXMuZGF0YVRvTG9hZC5zb21lKGw9PmcuaGFzKHRoaXMuZ2V0RGF0YUxvYWROYW1lKGwpKSkpdGhpcy5vbkxvYWRGaW5pc2goKX1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLnNvbWUoZz0+Cmc9PT1jLkxPQURJTkcpfHx0aGlzLl9zZXREYXRhTG9hZGluZyghMSl9KSwoKT0+e30pLnRoZW4odGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh7Y2FuY2VsbGVkOmZ9KT0+e2Z8fCh0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwpfSkpfSkpKX19fSkoVW98fChVbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWltcG9ydHMvcGxvdHRhYmxlLmpzCi8qCiBNSVQKIE1JVAogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIHRoZSBTaWduYXR1cmUgQVBJIHRvIGhlbHAgaW4gY29tcGFyaW5nIHdoZW4gdHdvCiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KCiBNZW1vaXphdGlvbiBpbiBQbG90dGFibGUgaXMgY29tcGxpY2F0ZWQgYnkgbXV0YWJsZSBzY2FsZXMgYW5kIGRhdGFzZXRzLiBXZSBjYW5ub3Qgc2ltcGx5CiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiB3ZSB3cml0ZSBhIHJlY3Vyc2l2ZSBTaWduYXR1cmUgaW50ZXJmYWNlIHRoYXQgaG9sZHMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHdoYXRldmVyCiBzdGF0ZSB0aGUgc2NhbGUvZGF0YSB3YXMgaW4gYXQgdGhlIHRpbWUuIFRoZW4gb24gbWVtb2l6ZWQgZnVuY3Rpb24gaW52b2NhdGlvbiB3ZSBzaWduIHRoZQogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KCiBXZSBtdXN0IGhhbmQtd3JpdGUgYSBzaWduYXR1cmUgZm9yIGVhY2ggY3VzdG9tIGNsYXNzIHdlIHdpc2ggdG8gc3VwcG9ydC4KIE1JVAoKIEBmaWxlb3ZlcnZpZXcgbWFudWFsbHkgYWRkIGQzLXNlbGVjdGlvbi1tdWx0aSB0byBkMyBkZWZhdWx0IGJ1bmRsZS4gTW9zdCBvZiB0aGlzIGNvZGUgaXMKIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2VsZWN0aW9uLW11bHRpL2lzc3Vlcy8xMSBmb3Igd2h5IHdlIGhhdmUgdG8gZG8gdGhpcwogTUlUCiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgYSBjb252ZW5pZW50IHRodW5rIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY29tbW9uIGNhc2UKIG9mIGNyZWF0aW5nIGEgbWVtb2l6ZWQgZnVuY3Rpb24gdGhhdCB0YWtlcyBpdHMgaW5wdXRzIGZyb20gbXV0YWJsZSBjbGFzcyBwcm9wZXJ0aWVzLgogTUlUCiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgYSBmdW5jdGlvbiBtZW1vaXplciB1c2luZyB0aGUgU2lnbmF0dXJlIEFQSS4KIFBsb3R0YWJsZSAzLjcuMCAoaHR0cHM6Ly9naXRodWIuY29tL3BhbGFudGlyL3Bsb3R0YWJsZSkKIENvcHlyaWdodCAyMDE0LTIwMTcgUGFsYW50aXIgVGVjaG5vbG9naWVzCiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9wbG90dGFibGUvYmxvYi9tYXN0ZXIvTElDRU5TRSkKIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgoKIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KIGlzb2JqZWN0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pc29iamVjdD4KCiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiovCihmdW5jdGlvbihhLGMpeyJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHMmJiJvYmplY3QiPT09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1jKHJlcXVpcmUoImQzIikpOiJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImQzIl0sYyk6Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLlBsb3R0YWJsZT1jKHJlcXVpcmUoImQzIikpOmEuUGxvdHRhYmxlPWMoYS5kMyl9KSh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihjKXtmdW5jdGlvbiBkKGcpe2lmKGZbZ10pcmV0dXJuIGZbZ10uZXhwb3J0czt2YXIgbD1mW2ddPXtpOmcsbDohMSxleHBvcnRzOnt9fTtjW2ddLmNhbGwobC5leHBvcnRzLGwsbC5leHBvcnRzLGQpO2wubD0hMDtyZXR1cm4gbC5leHBvcnRzfXZhciBmPXt9O2QubT1jO2QuYz1mO2QuaT1mdW5jdGlvbihnKXtyZXR1cm4gZ307ZC5kPWZ1bmN0aW9uKGcsbCxrKXtkLm8oZyxsKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGcsCmwse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDprfSl9O2Qubj1mdW5jdGlvbihnKXt2YXIgbD1nJiZnLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZ1siZGVmYXVsdCJdfTpmdW5jdGlvbigpe3JldHVybiBnfTtkLmQobCwiYSIsbCk7cmV0dXJuIGx9O2Qubz1mdW5jdGlvbihnLGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZyxsKX07ZC5wPSIiO3JldHVybiBkKGQucz0xNDApfShbZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9Yz1mKDEwNyk7ZC5BcnJheT1jO2M9ZigxMTApO2QuQ29sb3I9YztjPWYoNTUpO2QuRE9NPWM7Yz1mKDU2KTtkLk1hdGg9YztjPWYoMTEzKTtkLk9iamVjdD1jO2M9Zig1Nyk7ZC5SVHJlZT1jO2M9ZigxMTUpO2QuU3RhY2tpbmc9YztjPWYoMzUpO2QuV2luZG93PWM7ZyhmKDEwOCkpO2coZigxMDkpKTtnKGYoMTIpKTsKZyhmKDExMSkpO2coZigxMTIpKTtnKGYoNTgpKTtnKGYoMTE2KSl9LGZ1bmN0aW9uKGMpe2MuZXhwb3J0cz1hfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhGLEQsQil7dmFyIEk9RC5hY2Nlc3NvcjtEPUQuc2NhbGU7aWYobnVsbD09RClyZXR1cm5bXTt2YXIgTz1GLmRhdGEoKTtudWxsIT1CJiYoTz1PLmZpbHRlcihmdW5jdGlvbihQLEgpe3JldHVybiBCKFAsSCxGKX0pKTtPPU8ubWFwKGZ1bmN0aW9uKFAsSCl7cmV0dXJuIEkoUCxILEYpfSk7cmV0dXJuIEQuZXh0ZW50T2ZWYWx1ZXMoTyl9dmFyIGw9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKEYsRCl7ZnVuY3Rpb24gQigpe3RoaXMuY29uc3RydWN0b3I9Rn1mb3IodmFyIEkgaW4gRClELmhhc093blByb3BlcnR5KEkpJiYoRltJXT1EW0ldKTtGLnByb3RvdHlwZT1udWxsPT09RD9PYmplY3QuY3JlYXRlKEQpOihCLnByb3RvdHlwZT1ELnByb3RvdHlwZSxuZXcgQil9LGs9ZigxKSxuPWYoNyk7Yz1mKDQpO3ZhciBwPQpmKDE4KSxxPWYoNikscj1mKDkpLHQ9ZigyMCksdj1mKDApLHk9ZigxMiksej1mKDEwKSx4PWYoNTEpLEM9Zig1Mik7ZC5SZW5kZXJlcj16Lm1ha2VFbnVtKFsic3ZnIiwiY2FudmFzIl0pO2Y9ZnVuY3Rpb24oRil7ZnVuY3Rpb24gRCgpe3ZhciBCPUYuY2FsbCh0aGlzKXx8dGhpcztCLl9kYXRhQ2hhbmdlZD0hMTtCLl9hdHRyRXh0ZW50cz17fTtCLl9hbmltYXRlPSExO0IuX2FuaW1hdG9ycz17fTtCLl9wcm9wZXJ0eUV4dGVudHM9e307Qi5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe0IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH07Qi5fb3ZlcmZsb3dIaWRkZW49ITA7Qi5hZGRDbGFzcygicGxvdCIpO0IuX2RhdGFzZXRUb0RyYXdlcj1uZXcgdi5NYXA7Qi5fYXR0ckJpbmRpbmdzPWsubWFwKCk7Qi5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbihPLFApe3JldHVybiBCLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlKE8sUCl9O0IuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIEIucmVuZGVyKCl9OwpCLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBCLl9vbkRhdGFzZXRVcGRhdGUoKX07Qi5fcHJvcGVydHlCaW5kaW5ncz1rLm1hcCgpO3ZhciBJPShuZXcgbi5FYXNpbmcpLm1heFRvdGFsRHVyYXRpb24oRC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7Qi5hbmltYXRvcih4LkFuaW1hdG9yLk1BSU4sSSk7Qi5hbmltYXRvcih4LkFuaW1hdG9yLlJFU0VULG5ldyBuLk51bGwpO0IuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT12LldpbmRvdy5kZWJvdW5jZShDLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLEIuX3Jlc2V0RW50aXR5U3RvcmUpO3JldHVybiBCfWwoRCxGKTtELmdldFRvdGFsRHJhd1RpbWU9ZnVuY3Rpb24oQixJKXtyZXR1cm4gSS5yZWR1Y2UoZnVuY3Rpb24oTyxQKXtyZXR1cm4gTytQLmFuaW1hdG9yLnRvdGFsVGltZShCLmxlbmd0aCl9LDApfTtELmFwcGx5RHJhd1N0ZXBzPWZ1bmN0aW9uKEIsSSl7cmV0dXJuIEIubWFwKGZ1bmN0aW9uKE8pe3ZhciBQPQpPLmF0dHJUb1Byb2plY3RvcixIPXt9O09iamVjdC5rZXlzKFApLmZvckVhY2goZnVuY3Rpb24oSyl7SFtLXT1mdW5jdGlvbihNLEwpe3JldHVybiBQW0tdKE0sTCxJKX19KTtyZXR1cm57YXR0clRvQXBwbGllZFByb2plY3RvcjpILGFuaW1hdG9yOk8uYW5pbWF0b3J9fSl9O0QucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihCKXtCPXkuY29lcmNlRXh0ZXJuYWxEMyhCKTtGLnByb3RvdHlwZS5hbmNob3IuY2FsbCh0aGlzLEIpO3RoaXMuX2RhdGFDaGFuZ2VkPSEwO3RoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKTt0aGlzLl91cGRhdGVFeHRlbnRzKCk7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciBCPXRoaXM7dGhpcy5faXNTZXR1cHx8KEYucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLG51bGwhPXRoaXMuX2NhbnZhcyYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLAohMCksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oSSl7cmV0dXJuIEIuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldChJKX0pKX07RC5wcm90b3R5cGUuX2FwcGVuZENhbnZhc05vZGU9ZnVuY3Rpb24oKXt2YXIgQj10aGlzLmVsZW1lbnQoKS5zZWxlY3QoIi5wbG90LWNhbnZhcy1jb250YWluZXIiKTtCLmVtcHR5KCkmJihCPXRoaXMuZWxlbWVudCgpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdC1jYW52YXMtY29udGFpbmVyIiwhMCksQi5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fY2FudmFzLm5vZGUoKSkpfTtELnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24oQixJLE8sUCl7Ri5wcm90b3R5cGUuc2V0Qm91bmRzLmNhbGwodGhpcyxCLEksTyxQKTt0aGlzLl9yZXNldEVudGl0eVN0b3JlKCk7bnVsbCE9dGhpcy5fY2FudmFzJiYodGhpcy5fYnVmZmVyQ2FudmFzJiYhdGhpcy5fYnVmZmVyQ2FudmFzVmFsaWQmJih0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLAp0aGlzLl9jYW52YXMuYXR0cigid2lkdGgiKSksdGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoImhlaWdodCIsdGhpcy5fY2FudmFzLmF0dHIoImhlaWdodCIpKSwoTz10aGlzLl9idWZmZXJDYW52YXMubm9kZSgpLmdldENvbnRleHQoIjJkIikpJiZPLmRyYXdJbWFnZSh0aGlzLl9jYW52YXMubm9kZSgpLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzVmFsaWQ9ITApLE89bnVsbCE9d2luZG93LmRldmljZVBpeGVsUmF0aW8/d2luZG93LmRldmljZVBpeGVsUmF0aW86MSx0aGlzLl9jYW52YXMuYXR0cigid2lkdGgiLEIqTyksdGhpcy5fY2FudmFzLmF0dHIoImhlaWdodCIsSSpPKSxQPXRoaXMuX2NhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSkmJihQLnNldFRyYW5zZm9ybShPLDAsMCxPLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzJiZQLmRyYXdJbWFnZSh0aGlzLl9idWZmZXJDYW52YXMubm9kZSgpLDAsMCxCLEkpKX07RC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBCPXRoaXM7CkYucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3JldHVybiBJLm9mZlVwZGF0ZShCLl9yZW5kZXJDYWxsYmFjayl9KTt0aGlzLmRhdGFzZXRzKFtdKX07RC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihCKXtCPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQoQik7InN2ZyI9PT10aGlzLnJlbmRlcmVyKCk/Qi51c2VTVkcodGhpcy5fcmVuZGVyQXJlYSk6Qi51c2VDYW52YXModGhpcy5fY2FudmFzKTtyZXR1cm4gQn07RC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgcS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgci5TVkdEcmF3ZXIoInBhdGgiLCIiKX0sZnVuY3Rpb24oQil7cmV0dXJuIG5ldyBwLkNhbnZhc0RyYXdlcihCLGZ1bmN0aW9uKCl7fSl9KX07RC5wcm90b3R5cGUuX2dldEFuaW1hdG9yPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCk/CnRoaXMuX2FuaW1hdG9yc1tCXXx8bmV3IG4uTnVsbDpuZXcgbi5OdWxsfTtELnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlRXh0ZW50cygpO3RoaXMuX2RhdGFDaGFuZ2VkPSEwO3RoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKTt0aGlzLnJlbmRlckxvd1ByaW9yaXR5KCl9O0QucHJvdG90eXBlLmF0dHI9ZnVuY3Rpb24oQixJLE8pe2lmKG51bGw9PUkpcmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5nZXQoQik7dGhpcy5fYmluZEF0dHIoQixJLE8pO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24oQixJLE8sUCl7dmFyIEg9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoQik7SD1udWxsIT1IP0guc2NhbGU6bnVsbDt0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLnNldChCLHthY2Nlc3NvcjoiZnVuY3Rpb24iPT09dHlwZW9mIEk/STpmdW5jdGlvbigpe3JldHVybiBJfSxzY2FsZTpPLHBvc3RTY2FsZTpQfSk7Cm51bGwhPUgmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KEgsQik7bnVsbCE9TyYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KE8sQik7dGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfTtELnByb3RvdHlwZS5fYmluZEF0dHI9ZnVuY3Rpb24oQixJLE8pe3ZhciBQPXRoaXMuX2F0dHJCaW5kaW5ncy5nZXQoQik7UD1udWxsIT1QP1Auc2NhbGU6bnVsbDt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KEIse2FjY2Vzc29yOiJmdW5jdGlvbiI9PT10eXBlb2YgST9JOmZ1bmN0aW9uKCl7cmV0dXJuIEl9LHNjYWxlOk99KTtudWxsIT1QJiZ0aGlzLl91bmluc3RhbGxTY2FsZUZvcktleShQLEIpO251bGwhPU8mJnRoaXMuX2luc3RhbGxTY2FsZUZvcktleShPLEIpO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKX07RC5wcm90b3R5cGUuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGU9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yfTtELnByb3RvdHlwZS5fZ2V0QXR0clRvUHJvamVjdG9yPQpmdW5jdGlvbigpe251bGw9PXRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3RvciYmKHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcj10aGlzLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3RvcigpKTtyZXR1cm4gdi5PYmplY3QuYXNzaWduKHt9LHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcil9O0QucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciBCPXt9O3RoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKE8sUCl7QltQXT1ELl9zY2FsZWRBY2Nlc3NvcihPKX0pO3ZhciBJPXRoaXMuX3Byb3BlcnR5UHJvamVjdG9ycygpO09iamVjdC5rZXlzKEkpLmZvckVhY2goZnVuY3Rpb24oTyl7bnVsbD09QltPXSYmKEJbT109SVtPXSl9KTtyZXR1cm4gQn07RC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtGLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3RoaXMuX2lzQW5jaG9yZWQmJih0aGlzLl9wYWludCgpLAp0aGlzLl9kYXRhQ2hhbmdlZD0hMSk7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyQ2FsbGJhY2soKX07RC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24oQil7aWYobnVsbD09QilyZXR1cm4gdGhpcy5fYW5pbWF0ZTt0aGlzLl9hbmltYXRlPUI7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe0YucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpO3RoaXMuX3VwZGF0ZUV4dGVudHMoKTtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUuX3NjYWxlcz1mdW5jdGlvbigpe3ZhciBCPVtdO3RoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKEkpe0k9SS5zY2FsZTtudWxsIT1JJiYtMT09PUIuaW5kZXhPZihJKSYmQi5wdXNoKEkpfSk7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKEkpe0k9SS5zY2FsZTtudWxsIT1JJiYtMT09PUIuaW5kZXhPZihJKSYmQi5wdXNoKEkpfSk7CnJldHVybiBCfTtELnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciBCPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpO3RoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oSSl7cmV0dXJuIEkuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihCLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfTtELnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07RC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvckF0dHI9ZnVuY3Rpb24oQil7dmFyIEk9dGhpcztudWxsPT10aGlzLl9hdHRyRXh0ZW50c1tCXSYmKHRoaXMuX2F0dHJFeHRlbnRzW0JdPXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gSS5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBJLl9hdHRyQmluZGluZ3MuZ2V0KEIpfSxmdW5jdGlvbihPLFApe3JldHVybiBudWxsPT1QfHxudWxsPT1QLmFjY2Vzc29yP251bGw6Ty5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIGcoSCwKUCxudWxsKX0pfSkpO3JldHVybiB0aGlzLl9hdHRyRXh0ZW50c1tCXSgpfTtELnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oQil7dmFyIEk9dGhpcztudWxsPT10aGlzLl9wcm9wZXJ0eUV4dGVudHNbQl0mJih0aGlzLl9wcm9wZXJ0eUV4dGVudHNbQl09dC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBJLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIEkuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEIpfSxmdW5jdGlvbigpe3JldHVybiBJLl9maWx0ZXJGb3JQcm9wZXJ0eShCKX0sZnVuY3Rpb24oTyxQLEgpe3JldHVybiBudWxsPT1QfHxudWxsPT1QLmFjY2Vzc29yP251bGw6Ty5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIGcoSyxQLEgpfSl9KSk7cmV0dXJuIHRoaXMuX3Byb3BlcnR5RXh0ZW50c1tCXSgpfTtELnByb3RvdHlwZS5faW5jbHVkZWRWYWx1ZXNGb3JTY2FsZT1mdW5jdGlvbihCLEkpe3ZhciBPPXRoaXM7aWYoIXRoaXMuX2lzQW5jaG9yZWQmJgohSSlyZXR1cm5bXTt2YXIgUD1bXTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihILEspe0guc2NhbGU9PT1CJiYoSD1PLmdldEV4dGVudHNGb3JBdHRyKEspLG51bGwhPUgmJihQPVAuY29uY2F0KGsubWVyZ2UoSCkpKSl9KTt0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oSCxLKXtILnNjYWxlPT09QiYmKEg9Ty5nZXRFeHRlbnRzRm9yUHJvcGVydHkoSyksbnVsbCE9SCYmKFA9UC5jb25jYXQoay5tZXJnZShIKSkpKX0pO3JldHVybiBQfTtELnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihCLEkpe2lmKHZvaWQgMD09PUkpcmV0dXJuIHRoaXMuX2FuaW1hdG9yc1tCXTt0aGlzLl9hbmltYXRvcnNbQl09STtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUucmVuZGVyZXI9ZnVuY3Rpb24oQil7dmFyIEk9dGhpcztpZih2b2lkIDA9PT1CKXJldHVybiBudWxsPT10aGlzLl9jYW52YXM/InN2ZyI6ImNhbnZhcyI7bnVsbD09dGhpcy5fY2FudmFzJiYiY2FudmFzIj09PQpCPyh0aGlzLl9jYW52YXM9ay5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLmNsYXNzZWQoInBsb3QtY2FudmFzIiwhMCksdGhpcy5fYnVmZmVyQ2FudmFzPWsuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSxudWxsIT10aGlzLmVsZW1lbnQoKSYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKE8pe08udXNlQ2FudmFzKEkuX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTpudWxsIT10aGlzLl9jYW52YXMmJiJzdmciPT1CJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2J1ZmZlckNhbnZhcz10aGlzLl9jYW52YXM9bnVsbCx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihPKXtPLnVzZVNWRyhJLl9yZW5kZXJBcmVhKX0pLHRoaXMucmVuZGVyKCkpO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKEIpe3RoaXMuX2FkZERhdGFzZXQoQik7CnRoaXMuX29uRGF0YXNldFVwZGF0ZSgpO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihCKXt0aGlzLl9yZW1vdmVEYXRhc2V0KEIpO3ZhciBJPXRoaXMuX2NyZWF0ZURyYXdlcihCKTt0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuc2V0KEIsSSk7dGhpcy5faXNTZXR1cCYmdGhpcy5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KEIpO0Iub25VcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKEIpe3RoaXMuX3JlbW92ZURhdGFzZXQoQik7dGhpcy5fb25EYXRhc2V0VXBkYXRlKCl9O0QucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKEIpe2lmKC0xPT09dGhpcy5kYXRhc2V0cygpLmluZGV4T2YoQikpcmV0dXJuIHRoaXM7dGhpcy5fcmVtb3ZlRGF0YXNldE5vZGVzKEIpO0Iub2ZmVXBkYXRlKHRoaXMuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrKTt0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZGVsZXRlKEIpOwpyZXR1cm4gdGhpc307RC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihCKXt0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KEIpLnJlbW92ZSgpfTtELnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihCKXt2YXIgST10aGlzLE89W107dGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goZnVuY3Rpb24oUCxIKXtyZXR1cm4gTy5wdXNoKEgpfSk7aWYobnVsbD09QilyZXR1cm4gTztPLmZvckVhY2goZnVuY3Rpb24oUCl7cmV0dXJuIEkuX3JlbW92ZURhdGFzZXQoUCl9KTtCLmZvckVhY2goZnVuY3Rpb24oUCl7cmV0dXJuIEkuX2FkZERhdGFzZXQoUCl9KTt0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKTtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6bmV3IG4uTnVsbH1dfTtELnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PQpmdW5jdGlvbigpe307RC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24oQil7dmFyIEk9dGhpcyxPPVtdO0IuZm9yRWFjaChmdW5jdGlvbihQLEgpe3ZhciBLPUkuX2RhdGFzZXRUb0RyYXdlci5nZXQoUCksTT0wO1AuZGF0YSgpLmZvckVhY2goZnVuY3Rpb24oTCxSKXt2YXIgVT1JLl9waXhlbFBvaW50KEwsUixQKTt2Lk1hdGguaXNOYU4oVS54KXx8di5NYXRoLmlzTmFOKFUueSl8fChPLnB1c2goe2RhdHVtOkwsZ2V0IHBvc2l0aW9uKCl7cmV0dXJuIEkuX3BpeGVsUG9pbnQuY2FsbChJLEwsUixQKX0saW5kZXg6UixkYXRhc2V0OlAsZGF0YXNldEluZGV4OkgsY29tcG9uZW50OkksZHJhd2VyOkssdmFsaWREYXR1bUluZGV4Ok19KSxNKyspfSl9KTtyZXR1cm4gT307RC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgQj1uZXcgdi5NYXA7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oSSl7cmV0dXJuIEIuc2V0KEksCkkuZGF0YSgpKX0pO3JldHVybiBCfTtELnByb3RvdHlwZS5fcGFpbnQ9ZnVuY3Rpb24oKXt2YXIgQj10aGlzO2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I7dmFyIEk9dGhpcy5fZ2VuZXJhdGVEcmF3U3RlcHMoKSxPPXRoaXMuX2dldERhdGFUb0RyYXcoKSxQPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIEIuX2RhdGFzZXRUb0RyYXdlci5nZXQoSyl9KTtpZigiY2FudmFzIj09PXRoaXMucmVuZGVyZXIoKSl7dmFyIEg9dGhpcy5fY2FudmFzLm5vZGUoKTtILmdldENvbnRleHQoIjJkIikuY2xlYXJSZWN0KDAsMCxILmNsaWVudFdpZHRoLEguY2xpZW50SGVpZ2h0KTt0aGlzLl9idWZmZXJDYW52YXNWYWxpZD0hMX10aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihLLE0pe3ZhciBMPUQuYXBwbHlEcmF3U3RlcHMoSSxLKTtQW01dLmRyYXcoTy5nZXQoSyksTCl9KTtIPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIEQuZ2V0VG90YWxEcmF3VGltZShPLmdldChLKSwKSSl9KTtIPXYuTWF0aC5tYXgoSCwwKTt0aGlzLl9hZGRpdGlvbmFsUGFpbnQoSCl9O0QucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24oQil7dmFyIEk9dGhpczt2b2lkIDA9PT1CJiYoQj10aGlzLmRhdGFzZXRzKCkpO2lmKCJjYW52YXMiPT09dGhpcy5yZW5kZXJlcigpKXJldHVybiBrLnNlbGVjdEFsbCgpO3ZhciBPPVtdO0IuZm9yRWFjaChmdW5jdGlvbihQKXtQPUkuX2RhdGFzZXRUb0RyYXdlci5nZXQoUCk7bnVsbCE9UCYmKFA9UC5nZXRWaXN1YWxQcmltaXRpdmVzKCksTy5wdXNoLmFwcGx5KE8sUCkpfSk7cmV0dXJuIGsuc2VsZWN0QWxsKE8pfTtELnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihCKXt2YXIgST10aGlzO3JldHVybiB0aGlzLl9nZXRFbnRpdHlTdG9yZShCKS5lbnRpdGllcygpLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gSS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KE8pfSl9O0QucHJvdG90eXBlLl9nZXRFbnRpdHlTdG9yZT1mdW5jdGlvbihCKXtmdW5jdGlvbiBJKEgpe3JldHVybiBPLl9lbnRpdHlCb3VuZHMoSCl9CnZhciBPPXRoaXM7aWYodm9pZCAwIT09Qil7dmFyIFA9bmV3IHYuRW50aXR5U3RvcmU7UC5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhCKSxJLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpO3JldHVybiBQfXZvaWQgMD09PXRoaXMuX2NhY2hlZEVudGl0eVN0b3JlJiYoUD1uZXcgdi5FbnRpdHlTdG9yZSxQLmFkZEFsbCh0aGlzLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzKHRoaXMuZGF0YXNldHMoKSksSSx0aGlzLl9sb2NhbE9yaWdpbkJvdW5kcygpKSx0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT1QKTtyZXR1cm4gdGhpcy5fY2FjaGVkRW50aXR5U3RvcmV9O0QucHJvdG90eXBlLl9sb2NhbE9yaWdpbkJvdW5kcz1mdW5jdGlvbigpe3JldHVybnt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTp0aGlzLmhlaWdodCgpfX19O0QucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oQil7Qj10aGlzLl9waXhlbFBvaW50KEIuZGF0dW0sCkIuaW5kZXgsQi5kYXRhc2V0KTtyZXR1cm57eDpCLngseTpCLnksd2lkdGg6MCxoZWlnaHQ6MH19O0QucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24oQil7cmV0dXJue2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMoQiksY29tcG9uZW50OkIuY29tcG9uZW50LGRhdGFzZXQ6Qi5kYXRhc2V0LGRhdGFzZXRJbmRleDpCLmRhdGFzZXRJbmRleCxkYXR1bTpCLmRhdHVtLGluZGV4OkIuaW5kZXgscG9zaXRpb246Qi5wb3NpdGlvbixzZWxlY3Rpb246ay5zZWxlY3QoQi5kcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlcygpW0IudmFsaWREYXR1bUluZGV4XSl9fTtELnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoInBsb3RzIG11c3QgaW1wbGVtZW50IGVudGl0aWVzQXQiKTt9O0QucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24oQil7Qj10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3QoQik7CnJldHVybiB2b2lkIDA9PT1CP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoQil9O0QucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24oQixJKXtyZXR1cm4gdGhpcy5lbnRpdGllc0luQm91bmRzKG51bGw9PUk/e3g6Qi50b3BMZWZ0LngseTpCLnRvcExlZnQueSx3aWR0aDpCLmJvdHRvbVJpZ2h0LngtQi50b3BMZWZ0LngsaGVpZ2h0OkIuYm90dG9tUmlnaHQueS1CLnRvcExlZnQueX06e3g6Qi5taW4seTpJLm1pbix3aWR0aDpCLm1heC1CLm1pbixoZWlnaHQ6SS5tYXgtSS5taW59KX07RC5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbihCKXt2YXIgST10aGlzO2lmKEI9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luQm91bmRzKEIpKXJldHVybiBCLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gSS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KE8pfSl9O0QucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPQpmdW5jdGlvbihCKXt2YXIgST10aGlzO2lmKEI9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luWEJvdW5kcyhCKSlyZXR1cm4gQi5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIEkuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShPKX0pfTtELnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbihCKXt2YXIgST10aGlzO2lmKEI9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luWUJvdW5kcyhCKSlyZXR1cm4gQi5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIEkuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShPKX0pfTtELnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24oQil7Qi5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spO0Iub2ZmVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSk7Qi5yZW1vdmVJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfTsKRC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihCKXtCLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKTtCLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSk7Qi5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfTtELnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319O0QuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKEIpe3ZhciBJPUIuc2NhbGUsTz1CLmFjY2Vzc29yLFA9Qi5wb3N0U2NhbGUsSD1udWxsPT1JP086ZnVuY3Rpb24oSyxNLEwpe3JldHVybiBJLnNjYWxlKE8oSyxNLEwpKX07cmV0dXJuIG51bGw9PVA/SDpmdW5jdGlvbihLLE0sTCl7cmV0dXJuIFAoSChLLE0sTCksSyxNLEwpfX07RC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19O0QucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPQpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRlJiZ0aGlzLl9kYXRhQ2hhbmdlZH07cmV0dXJuIER9KGMuQ29tcG9uZW50KTtmLl9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMDtkLlBsb3Q9Zn0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobil7Zm9yKHZhciBwIGluIG4pZC5oYXNPd25Qcm9wZXJ0eShwKXx8KGRbcF09bltwXSl9Yz1mKDEwNSk7ZC5UaWNrR2VuZXJhdG9ycz1jO2coZig1NCkpO2coZigxMDEpKTtnKGYoMTAyKSk7ZyhmKDEwMykpO2coZigxMDQpKTtnKGYoMTA2KSk7dmFyIGw9Zig1NCksaz1mKDExKTtkLmlzVHJhbnNmb3JtYWJsZT1mdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGsuUXVhbnRpdGF0aXZlU2NhbGV8fG4gaW5zdGFuY2VvZiBsLkNhdGVnb3J5fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMSksbD1mKDMwKSxrPWYoMCksbj1mKDEyKTtjPWYoMTApO2QuWEFsaWdubWVudD1jLm1ha2VFbnVtKFsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0pOwpkLllBbGlnbm1lbnQ9Yy5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcCgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExO3RoaXMuX29yaWdpbj17eDowLHk6MH07dGhpcy5feEFsaWdubWVudD0ibGVmdCI7dGhpcy5feUFsaWdubWVudD0idG9wIjt0aGlzLl9pc0FuY2hvcmVkPXRoaXMuX2lzU2V0dXA9ITE7dGhpcy5fY3NzQ2xhc3Nlcz1uZXcgay5TZXQ7dGhpcy5fZGVzdHJveWVkPSExO3RoaXMuX29uQW5jaG9yQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3RoaXMuX29uRGV0YWNoQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3RoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1wLnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocSl7cT1uLmNvZXJjZUV4dGVybmFsRDMocSk7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IEVycm9yKCJDYW4ndCByZXVzZSBkZXN0cm95KCktZWQgQ29tcG9uZW50cyEiKTt0aGlzLmlzUm9vdCgpJiYKKHRoaXMuX3Jvb3RFbGVtZW50PXEsdGhpcy5fcm9vdEVsZW1lbnQuY2xhc3NlZCgicGxvdHRhYmxlIiwhMCkpO251bGwhPXRoaXMuX2VsZW1lbnQ/cS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudC5ub2RlKCkpOih0aGlzLl9lbGVtZW50PXEuYXBwZW5kKCJkaXYiKSx0aGlzLl9zZXR1cCgpKTt0aGlzLl9pc0FuY2hvcmVkPSEwO3RoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHEpe3RoaXMuX2lzQW5jaG9yZWQmJnEodGhpcyk7dGhpcy5fb25BbmNob3JDYWxsYmFja3MuYWRkKHEpfTtwLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24ocSl7dGhpcy5fb25BbmNob3JDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcT10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7cS5fZWxlbWVudC5jbGFzc2VkKHIsCiEwKX0pLHRoaXMuX2Nzc0NsYXNzZXM9bmV3IGsuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfTtwLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbigpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX07cC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD0KZnVuY3Rpb24ocSxyLHQpe2lmKG51bGw9PXF8fG51bGw9PXJ8fG51bGw9PXQpe2lmKG51bGw9PXRoaXMuX2VsZW1lbnQpdGhyb3cgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZihudWxsIT10aGlzLl9yb290RWxlbWVudClxPXt4OjAseTowfSx0PXRoaXMuX3Jvb3RFbGVtZW50Lm5vZGUoKSxyPWsuRE9NLmVsZW1lbnRXaWR0aCh0KSx0PWsuRE9NLmVsZW1lbnRIZWlnaHQodCk7ZWxzZSB0aHJvdyBFcnJvcigibnVsbCBhcmd1bWVudHMgY2Fubm90IGJlIHBhc3NlZCB0byBjb21wdXRlTGF5b3V0KCkgb24gYSBub24tcm9vdCwgdW5hbmNob3JlZCBub2RlIik7fXZhciB2PXRoaXMuX3NpemVGcm9tT2ZmZXIocix0KSx5PXYuaGVpZ2h0O3Y9di53aWR0aDt0aGlzLnNldEJvdW5kcyh2LHkscS54KyhyLXYpKnAuX3hBbGlnblRvUHJvcG9ydGlvblt0aGlzLl94QWxpZ25tZW50XSxxLnkrKHQteSkqcC5feUFsaWduVG9Qcm9wb3J0aW9uW3RoaXMuX3lBbGlnbm1lbnRdKTsKcmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihxLHIsdCx2KXt2b2lkIDA9PT10JiYodD0wKTt2b2lkIDA9PT12JiYodj0wKTt0aGlzLl93aWR0aD1xO3RoaXMuX2hlaWdodD1yO3RoaXMuX29yaWdpbj17eDp0LHk6dn07bnVsbCE9dGhpcy5fZWxlbWVudCYmdGhpcy5fZWxlbWVudC5zdHlsZXMoe2xlZnQ6dCsicHgiLGhlaWdodDpyKyJweCIsdG9wOnYrInB4Iix3aWR0aDpxKyJweCJ9KTtudWxsIT10aGlzLl9yZXNpemVIYW5kbGVyJiZ0aGlzLl9yZXNpemVIYW5kbGVyKHt3aWR0aDpxLGhlaWdodDpyfSl9O3AucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHEscil7dmFyIHQ9dGhpcy5yZXF1ZXN0ZWRTcGFjZShxLHIpO3JldHVybnt3aWR0aDp0aGlzLmZpeGVkV2lkdGgoKT9NYXRoLm1pbihxLHQubWluV2lkdGgpOnEsaGVpZ2h0OnRoaXMuZml4ZWRIZWlnaHQoKT9NYXRoLm1pbihyLHQubWluSGVpZ2h0KTpyfX07cC5wcm90b3R5cGUucmVuZGVyPQpmdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJjA8PXRoaXMud2lkdGgoKSYmMDw9dGhpcy5oZWlnaHQoKSYmbC5yZWdpc3RlclRvUmVuZGVyKHRoaXMpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3RoaXMucmVuZGVyKCl9O3AucHJvdG90eXBlLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZsLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfTtwLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbihxKXt0aGlzLl9yZXNpemVIYW5kbGVyPXE7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJih0aGlzLmlzUm9vdCgpP3RoaXMuX3NjaGVkdWxlQ29tcHV0ZUxheW91dCgpOgp0aGlzLnBhcmVudCgpLnJlZHJhdygpKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7fTtwLnByb3RvdHlwZS5yZW5kZXJUbz1mdW5jdGlvbihxKXt0aGlzLmRldGFjaCgpO2lmKG51bGwhPXEpe3E9InN0cmluZyI9PT10eXBlb2YgcT9nLnNlbGVjdChxKTpxIGluc3RhbmNlb2YgRWxlbWVudD9nLnNlbGVjdChxKTpuLmNvZXJjZUV4dGVybmFsRDMocSk7aWYoIXEubm9kZSgpfHxudWxsPT1xLm5vZGUoKS5ub2RlTmFtZSl0aHJvdyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKCJzdmciPT09cS5ub2RlKCkubm9kZU5hbWUpdGhyb3cgRXJyb3IoIlBsb3R0YWJsZSAzLnggYW5kIGxhdGVyIGNhbiBvbmx5IHJlbmRlclRvIGFuIEhUTUwgY29tcG9uZW50OyBwYXNzIGEgZGl2IGluc3RlYWQhIik7dGhpcy5hbmNob3IocSl9aWYobnVsbD09dGhpcy5fZWxlbWVudCl0aHJvdyBFcnJvcigiSWYgYSBDb21wb25lbnQgaGFzIG5ldmVyIGJlZW4gcmVuZGVyZWQgYmVmb3JlLCB0aGVuIHJlbmRlclRvIG11c3QgYmUgZ2l2ZW4gYSBub2RlIHRvIHJlbmRlciB0bywgb3IgYSBkMy5TZWxlY3Rpb24sIG9yIGEgc2VsZWN0b3Igc3RyaW5nIik7CmwucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyk7bC5mbHVzaCgpfTtwLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHEpe2lmKG51bGw9PXEpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7cT1xLnRvTG93ZXJDYXNlKCk7aWYobnVsbD09cC5feEFsaWduVG9Qcm9wb3J0aW9uW3FdKXRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQ6ICIrcSk7dGhpcy5feEFsaWdubWVudD1xO3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLnlBbGlnbm1lbnQ9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5feUFsaWdubWVudDtxPXEudG9Mb3dlckNhc2UoKTtpZihudWxsPT1wLl95QWxpZ25Ub1Byb3BvcnRpb25bcV0pdGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGFsaWdubWVudDogIitxKTt0aGlzLl95QWxpZ25tZW50PXE7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuaGFzQ2xhc3M9ZnVuY3Rpb24ocSl7cmV0dXJuIG51bGw9PQpxPyExOm51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5oYXMocSk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHEpfTtwLnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbihxKXtudWxsIT1xJiYobnVsbD09dGhpcy5fZWxlbWVudD90aGlzLl9jc3NDbGFzc2VzLmFkZChxKTp0aGlzLl9lbGVtZW50LmNsYXNzZWQocSwhMCkpfTtwLnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbihxKXtudWxsIT1xJiYobnVsbD09dGhpcy5fZWxlbWVudD90aGlzLl9jc3NDbGFzc2VzLmRlbGV0ZShxKTp0aGlzLl9lbGVtZW50LmNsYXNzZWQocSwhMSkpfTtwLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3AucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9O3AucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMucGFyZW50KG51bGwpO3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7dGhpcy5faXNBbmNob3JlZD0KITE7dGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub25EZXRhY2g9ZnVuY3Rpb24ocSl7dGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHEpfTtwLnByb3RvdHlwZS5vZmZEZXRhY2g9ZnVuY3Rpb24ocSl7dGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24ocSl7aWYodm9pZCAwPT09cSlyZXR1cm4gdGhpcy5fcGFyZW50O2lmKG51bGwhPT1xJiYhcS5oYXModGhpcykpdGhyb3cgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3RoaXMuX3BhcmVudD1xO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgcT10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnEsYm90dG9tUmlnaHQ6e3g6cS54K3RoaXMud2lkdGgoKSx5OnEueSt0aGlzLmhlaWdodCgpfX19O3AucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9CiEwO3RoaXMuZGV0YWNoKCl9O3AucHJvdG90eXBlLndpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dpZHRofTtwLnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVpZ2h0fTtwLnByb3RvdHlwZS5vcmlnaW49ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLl9vcmlnaW4ueCx5OnRoaXMuX29yaWdpbi55fX07cC5wcm90b3R5cGUub3JpZ2luVG9Sb290PWZ1bmN0aW9uKCl7Zm9yKHZhciBxPXRoaXMub3JpZ2luKCkscj10aGlzLnBhcmVudCgpO251bGwhPXI7KXt2YXIgdD1yLm9yaWdpbigpO3EueCs9dC54O3EueSs9dC55O3I9ci5wYXJlbnQoKX1yZXR1cm4gcX07cC5wcm90b3R5cGUucm9vdD1mdW5jdGlvbigpe2Zvcih2YXIgcT10aGlzOyFxLmlzUm9vdCgpOylxPXEucGFyZW50KCk7cmV0dXJuIHF9O3AucHJvdG90eXBlLmlzUm9vdD1mdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLnBhcmVudCgpfTtwLnByb3RvdHlwZS5mb3JlZ3JvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvcmVncm91bmRDb250YWluZXJ9OwpwLnByb3RvdHlwZS5jb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9O3AucHJvdG90eXBlLmVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudH07cC5wcm90b3R5cGUucm9vdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290KCkuX3Jvb3RFbGVtZW50fTtwLnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb250YWluZXJ9O3JldHVybiBwfSgpO2MuX3hBbGlnblRvUHJvcG9ydGlvbj17bGVmdDowLGNlbnRlcjouNSxyaWdodDoxfTtjLl95QWxpZ25Ub1Byb3BvcnRpb249e3RvcDowLGNlbnRlcjouNSxib3R0b206MX07ZC5Db21wb25lbnQ9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDU5KSk7ZyhmKDYyKSk7ZyhmKDEzMykpO2coZigyMSkpO2coZig2NCkpO2coZig2NikpfSwKZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihnLGwpe3RoaXMuX3N2Z0RyYXdlckZhY3Rvcnk9Zzt0aGlzLl9jYW52YXNEcmF3ZXJGYWN0b3J5PWx9Zi5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKGcpe251bGwhPXRoaXMuX2N1cnJlbnREcmF3ZXImJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIGw9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO2wuYXR0YWNoVG8oZyk7dGhpcy5fY3VycmVudERyYXdlcj1sfTtmLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24oZyl7bnVsbCE9dGhpcy5fY3VycmVudERyYXdlciYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKTt0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkoZy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9O2YucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfTtmLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtudWxsIT0KdGhpcy5fY3VycmVudERyYXdlciYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKX07Zi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihnLGwpe3RoaXMuX2N1cnJlbnREcmF3ZXIuZHJhdyhnLGwpfTtmLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlcygpfTtmLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoZyl9O3JldHVybiBmfSgpO2QuUHJveHlEcmF3ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDcwKSk7ZyhmKDcxKSl9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKG4pe3ZvaWQgMD09PW4mJihuPTMpO2wobik7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBwLnRvRml4ZWQobil9fQpmdW5jdGlvbiBsKG4pe2lmKDA+bnx8MjA8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRm9ybWF0dGVyIHByZWNpc2lvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjAiKTtpZihuIT09TWF0aC5mbG9vcihuKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRm9ybWF0dGVyIHByZWNpc2lvbiBtdXN0IGJlIGFuIGludGVnZXIiKTt9dmFyIGs9ZigxKTtkLmN1cnJlbmN5PWZ1bmN0aW9uKG4scCxxKXt2b2lkIDA9PT1uJiYobj0yKTt2b2lkIDA9PT1wJiYocD0iJCIpO3ZvaWQgMD09PXEmJihxPSEwKTt2YXIgcj1nKG4pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgdj1yKE1hdGguYWJzKHQpKTsiIiE9PXYmJih2PXE/cCt2OnYrcCwwPnQmJih2PSItIit2KSk7cmV0dXJuIHZ9fTtkLmZpeGVkPWc7ZC5nZW5lcmFsPWZ1bmN0aW9uKG4pe3ZvaWQgMD09PW4mJihuPTMpO2wobik7cmV0dXJuIGZ1bmN0aW9uKHApe2lmKCJudW1iZXIiPT09dHlwZW9mIHApe3ZhciBxPU1hdGgucG93KDEwLG4pO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChwKgpxKS9xKX1yZXR1cm4gU3RyaW5nKHApfX07ZC5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5nKG4pfX07ZC5wZXJjZW50YWdlPWZ1bmN0aW9uKG4pe3ZvaWQgMD09PW4mJihuPTApO3ZhciBwPWcobik7cmV0dXJuIGZ1bmN0aW9uKHEpe3ZhciByPXEudG9TdHJpbmcoKTtyPU1hdGgucG93KDEwLHIubGVuZ3RoLShyLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIHAocGFyc2VJbnQoKDEwMCpxKnIpLnRvU3RyaW5nKCksMTApL3IpKyIlIn19O2Quc2lTdWZmaXg9ZnVuY3Rpb24obil7dm9pZCAwPT09biYmKG49Myk7bChuKTtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGsuZm9ybWF0KCIuIituKyJzIikocCl9fTtkLnNob3J0U2NhbGU9ZnVuY3Rpb24oKXt2YXIgbj0wO3ZvaWQgMD09PW4mJihuPTMpO2wobik7dmFyIHA9ay5mb3JtYXQoIi4iK24rImUiKSxxPWsuZm9ybWF0KCIuIituKyJmIikscj1NYXRoLnBvdygxMCwxOCksdD1NYXRoLnBvdygxMCwKLW4pO3JldHVybiBmdW5jdGlvbih2KXt2YXIgeT1NYXRoLmFicyh2KTtpZigoeTx0fHx5Pj1yKSYmMCE9PXkpcmV0dXJuIHAodik7Zm9yKHZhciB6PS0xO3k+PU1hdGgucG93KDFFMyx6KzIpJiY0Pno7KXorKzt5PS0xPT09ej9xKHYpOnEodi9NYXRoLnBvdygxRTMseisxKSkrIktNQlRRIlt6XTtpZigwPHYmJiIxMDAwIj09PXkuc3Vic3RyKDAsNCl8fDA+diYmIi0xMDAwIj09PXkuc3Vic3RyKDAsNSkpND56Pyh6KysseT1xKHYvTWF0aC5wb3coMUUzLHorMSkpKyJLTUJUUSJbel0pOnk9cCh2KTtyZXR1cm4geX19O2QubXVsdGlUaW1lPWZ1bmN0aW9uKCl7dmFyIG49W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHApe3JldHVybiAwIT09cC5nZXRNaWxsaXNlY29uZHMoKX19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHApe3JldHVybiAwIT09cC5nZXRTZWNvbmRzKCl9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHApe3JldHVybiAwIT09CnAuZ2V0TWludXRlcygpfX0se3NwZWNpZmllcjoiJUkgJXAiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PXAuZ2V0SG91cnMoKX19LHtzcGVjaWZpZXI6IiVhICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT1wLmdldERheSgpJiYxIT09cC5nZXREYXRlKCl9fSx7c3BlY2lmaWVyOiIlYiAlZCIscHJlZGljYXRlOmZ1bmN0aW9uKHApe3JldHVybiAxIT09cC5nZXREYXRlKCl9fSx7c3BlY2lmaWVyOiIlYiIscHJlZGljYXRlOmZ1bmN0aW9uKHApe3JldHVybiAwIT09cC5nZXRNb250aCgpfX1dO3JldHVybiBmdW5jdGlvbihwKXt2YXIgcT1uLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5wcmVkaWNhdGUocCl9KTtyZXR1cm4gay50aW1lRm9ybWF0KDA8cS5sZW5ndGg/cVswXS5zcGVjaWZpZXI6IiVZIikocCl9fTtkLnRpbWU9ZnVuY3Rpb24obil7cmV0dXJuIGsudGltZUZvcm1hdChuKX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEpLGw9ZigwKTsKYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsobixwKXt0aGlzLl9yb290PWcuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpO3RoaXMuX2NsYXNzTmFtZT1wO3RoaXMuX3N2Z0VsZW1lbnROYW1lPW59ay5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihuLHApe3ZhciBxPXRoaXM7dGhpcy5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzKG4pO3ZhciByPTA7cC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gcS5fZHJhd1N0ZXAodCl9LHIpO3IrPXQuYW5pbWF0b3IudG90YWxUaW1lKG4ubGVuZ3RoKX0pfTtrLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7bnVsbD09dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzJiYodGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPXRoaXMuX3NlbGVjdGlvbi5ub2RlcygpKTtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzfTsKay5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxQcmltaXRpdmVzKClbbl19O2sucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9O2sucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKG4pe24ubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX07ay5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fTtrLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX07ay5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXt9O2sucHJvdG90eXBlLl9jcmVhdGVBbmREZXN0cm95RE9NRWxlbWVudHM9ZnVuY3Rpb24obil7bj1uLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gbnVsbCE9cH0pO249dGhpcy5fcm9vdC5zZWxlY3RBbGwodGhpcy5zZWxlY3RvcigpKS5kYXRhKG4pOwp0aGlzLl9zZWxlY3Rpb249bi5lbnRlcigpLmFwcGVuZCh0aGlzLl9zdmdFbGVtZW50TmFtZSkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCk7dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGw7bnVsbCE9dGhpcy5fY2xhc3NOYW1lJiZ0aGlzLl9zZWxlY3Rpb24uY2xhc3NlZCh0aGlzLl9jbGFzc05hbWUsITApO3RoaXMuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXModGhpcy5fc2VsZWN0aW9uKX07ay5wcm90b3R5cGUuX2RyYXdTdGVwPWZ1bmN0aW9uKG4pe3ZhciBwPXRoaXM7WyJmaWxsIiwic3Ryb2tlIl0uZm9yRWFjaChmdW5jdGlvbihxKXtudWxsIT1uLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbcV0mJnAuX3NlbGVjdGlvbi5hdHRyKHEsbi5hdHRyVG9BcHBsaWVkUHJvamVjdG9yW3FdKX0pO24uYW5pbWF0b3IuYW5pbWF0ZSh0aGlzLl9zZWxlY3Rpb24sbi5hdHRyVG9BcHBsaWVkUHJvamVjdG9yKTtudWxsIT10aGlzLl9jbGFzc05hbWUmJnRoaXMuX3NlbGVjdGlvbi5jbGFzc2VkKHRoaXMuX2NsYXNzTmFtZSwKITApfTtyZXR1cm4ga30oKTtkLlNWR0RyYXdlcj1jfSxmdW5jdGlvbihjLGQpe2QubWFrZUVudW09ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVkdWNlKGZ1bmN0aW9uKGcsbCl7Z1tsXT1sO3JldHVybiBnfSx7fSl9fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHAscSl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9cH1mb3IodmFyIHQgaW4gcSlxLmhhc093blByb3BlcnR5KHQpJiYocFt0XT1xW3RdKTtwLnByb3RvdHlwZT1udWxsPT09cT9PYmplY3QuY3JlYXRlKHEpOihyLnByb3RvdHlwZT1xLnByb3RvdHlwZSxuZXcgcil9LGw9ZigxKSxrPWYoMjYpLG49ZigwKTtjPWZ1bmN0aW9uKHApe2Z1bmN0aW9uIHEoKXt2YXIgcj1wLmNhbGwodGhpcyl8fHRoaXM7ci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kZWZhdWx0VGlja3MoKX07ci5fcGFkUHJvcG9ydGlvbj0uMDU7ci5fc25hcHBpbmdEb21haW5FbmFibGVkPQohMDtyLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycz1uZXcgbi5TZXQ7cmV0dXJuIHJ9ZyhxLHApO3EucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXt0aGlzLl9kb21haW5NYXg9dGhpcy5fZG9tYWluTWluPW51bGw7cC5wcm90b3R5cGUuYXV0b0RvbWFpbi5jYWxsKHRoaXMpfTtxLnByb3RvdHlwZS5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuX2RvbWFpbk1pbiYmbnVsbCE9dGhpcy5fZG9tYWluTWF4KXRoaXMuX3NldERvbWFpbihbdGhpcy5fZG9tYWluTWluLHRoaXMuX2RvbWFpbk1heF0pO2Vsc2V7dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7bnVsbCE9dGhpcy5fZG9tYWluTWluPyhyPXJbMV0sdGhpcy5fZG9tYWluTWluPj1yJiYocj10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWluLHRoaXMuX2RvbWFpbk1pbl0pWzFdKSx0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbixyXSkpOgpudWxsIT10aGlzLl9kb21haW5NYXg/KHI9clswXSx0aGlzLl9kb21haW5NYXg8PXImJihyPXRoaXMuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluKFt0aGlzLl9kb21haW5NYXgsdGhpcy5fZG9tYWluTWF4XSlbMF0pLHRoaXMuX3NldERvbWFpbihbcix0aGlzLl9kb21haW5NYXhdKSk6cC5wcm90b3R5cGUuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX19O3EucHJvdG90eXBlLl9nZXRVbmJvdW5kZWRFeHRlbnQ9ZnVuY3Rpb24ocil7dm9pZCAwPT09ciYmKHI9ITEpO3I9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMocik7dmFyIHQ9dGhpcy5fZGVmYXVsdEV4dGVudCgpOzAhPT1yLmxlbmd0aCYmKHI9W24uTWF0aC5taW4ocix0WzBdKSxuLk1hdGgubWF4KHIsdFsxXSldLHQ9dGhpcy5fcGFkRG9tYWluKHIpKTtyZXR1cm4gdH07cS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO251bGwhPXRoaXMuX2RvbWFpbk1pbiYmCihyWzBdPXRoaXMuX2RvbWFpbk1pbik7bnVsbCE9dGhpcy5fZG9tYWluTWF4JiYoclsxXT10aGlzLl9kb21haW5NYXgpO3JldHVybiByfTtxLnByb3RvdHlwZS5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3RoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKTt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCl9O3EucHJvdG90eXBlLnJlbW92ZVBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZGVsZXRlKHIpO3RoaXMuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKX07cS5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihudWxsPT1yKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKDA+cil0aHJvdyBFcnJvcigicGFkUHJvcG9ydGlvbiBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3RoaXMuX3BhZFByb3BvcnRpb249cjt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCk7CnJldHVybiB0aGlzfTtxLnByb3RvdHlwZS5fcGFkRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciB0PXRoaXM7aWYoclswXS52YWx1ZU9mKCk9PT1yWzFdLnZhbHVlT2YoKSlyZXR1cm4gdGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4ocik7aWYoMD09PXRoaXMuX3BhZFByb3BvcnRpb24pcmV0dXJuIHI7dmFyIHY9dGhpcy5fcGFkUHJvcG9ydGlvbi8yLHk9clswXSx6PXJbMV0seD0hMSxDPSExO3RoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmZvckVhY2goZnVuY3Rpb24oRCl7RCh0KS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IudmFsdWVPZigpPT09eS52YWx1ZU9mKCkmJih4PSEwKTtCLnZhbHVlT2YoKT09PXoudmFsdWVPZigpJiYoQz0hMCl9KX0pO3ZhciBGPXRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpO3RoaXMuX2JhY2tpbmdTY2FsZURvbWFpbihyKTtyPXg/eTp0aGlzLmludmVydCh0aGlzLnNjYWxlKHkpLSh0aGlzLnNjYWxlKHopLXRoaXMuc2NhbGUoeSkpKnYpO3Y9Qz8Kejp0aGlzLmludmVydCh0aGlzLnNjYWxlKHopKyh0aGlzLnNjYWxlKHopLXRoaXMuc2NhbGUoeSkpKnYpO3RoaXMuX2JhY2tpbmdTY2FsZURvbWFpbihGKTtyZXR1cm4gdGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkP3RoaXMuX25pY2VEb21haW4oW3Isdl0pOltyLHZdfTtxLnByb3RvdHlwZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9ZnVuY3Rpb24ocil7bnVsbCE9ciYmKHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD1yLHRoaXMuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSl9O3EucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn07cS5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGludmVydCIpO307cS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe251bGwhPXImJih0aGlzLl9kb21haW5NaW49clswXSx0aGlzLl9kb21haW5NYXg9clsxXSk7CnJldHVybiBwLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfTtxLnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5kb21haW4oKVswXTt0aGlzLl9kb21haW5NaW49cjt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCk7cmV0dXJuIHRoaXN9O3EucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtpZihudWxsPT1yKXJldHVybiB0aGlzLmRvbWFpbigpWzFdO3RoaXMuX2RvbWFpbk1heD1yO3RoaXMuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKTtyZXR1cm4gdGhpc307cS5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7cj1sLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbi5NYXRoLmlzVmFsaWROdW1iZXIoK3QpfSkpO3JldHVybiBudWxsPT1yWzBdfHxudWxsPT1yWzFdP1tdOnJ9O3EucHJvdG90eXBlLnpvb209ZnVuY3Rpb24ocix0KXt2YXIgdj10aGlzO3RoaXMuZG9tYWluKHRoaXMucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHYuaW52ZXJ0KGsuem9vbU91dCh5LApyLHQpKX0pKX07cS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciB0PXRoaXM7dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdC5pbnZlcnQodityKX0pKX07cS5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIik7fTtxLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGludmVydGVkVHJhbnNmb3JtYXRpb24iKTt9O3EucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGdldFRyYW5zZm9ybWF0aW9uRXh0ZW50Iik7fTtxLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpOwp9O3EucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHNldFRyYW5zZm9ybWF0aW9uRG9tYWluIik7fTtxLnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHQodil7cmV0dXJuIG4uTWF0aC5pc05hTih2KXx8SW5maW5pdHk9PT12fHwtSW5maW5pdHk9PT12fXQoclswXSl8fHQoclsxXSk/bi5XaW5kb3cud2FybigiV2FybmluZzogUXVhbnRpdGF0aXZlU2NhbGVzIGNhbm5vdCB0YWtlIE5hTiBvciBJbmZpbml0eSBhcyBhIGRvbWFpbiB2YWx1ZS4gSWdub3JpbmcuIik6cC5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMscil9O3EucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIik7fTtxLnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aWNrR2VuZXJhdG9yKHRoaXMpfTsKcS5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX25pY2VEb21haW4iKTt9O3EucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9kZWZhdWx0RXh0ZW50Iik7fTtxLnByb3RvdHlwZS50aWNrR2VuZXJhdG9yPWZ1bmN0aW9uKCl7dmFyIHI9UGxvdHRhYmxlLlNjYWxlcy5UaWNrR2VuZXJhdG9ycy5pbnRlZ2VyVGlja0dlbmVyYXRvcigpO251bGwhPXImJih0aGlzLl90aWNrR2VuZXJhdG9yPXIpfTtyZXR1cm4gcX0oZigxNykuU2NhbGUpO2MuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwO2QuUXVhbnRpdGF0aXZlU2NhbGU9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMSk7ZC5jb2VyY2VFeHRlcm5hbEQzPWZ1bmN0aW9uKGwpe2lmKG51bGw9PWwuYXR0cnMpe2lmKG51bGw9PWwubm9kZXMpe3ZhciBrPVtdO2wuZWFjaChmdW5jdGlvbigpe2sucHVzaCh0aGlzKX0pOwpyZXR1cm4gZy5zZWxlY3RBbGwoayl9cmV0dXJuIGcuc2VsZWN0QWxsKGwubm9kZXMoKSl9cmV0dXJuIGx9fSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoODMpKTtnKGYoODQpKTtnKGYoODUpKX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDQ0KSk7ZyhmKDQ1KSk7ZyhmKDQ2KSk7ZyhmKDE4KSk7ZyhmKDYpKTtnKGYoMzMpKTtnKGYoMzQpKTtnKGYoNDcpKTtnKGYoOSkpO2coZig0OCkpfSxmdW5jdGlvbihjLGQpe2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7dmFyIGc9dGhpczt0aGlzLl9hbmNob3JDYWxsYmFjaz1mdW5jdGlvbihsKXtyZXR1cm4gZy5fYW5jaG9yKGwpfTt0aGlzLl9lbmFibGVkPSEwfWYucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKGcpe3RoaXMuX2Rpc2Nvbm5lY3QoKTsKdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz1nO3RoaXMuX2Nvbm5lY3QoKTtyZXR1cm4gdGhpc307Zi5wcm90b3R5cGUuZGV0YWNoRnJvbT1mdW5jdGlvbigpe3RoaXMuZGV0YWNoKCl9O2YucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX2Rpc2Nvbm5lY3QoKTt0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvPW51bGw7cmV0dXJuIHRoaXN9O2YucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24oZyl7aWYobnVsbD09ZylyZXR1cm4gdGhpcy5fZW5hYmxlZDsodGhpcy5fZW5hYmxlZD1nKT90aGlzLl9jb25uZWN0KCk6dGhpcy5fZGlzY29ubmVjdCgpO3JldHVybiB0aGlzfTtmLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMH07Zi5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX07Zi5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24oZyl7dmFyIGw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTsKcmV0dXJue3g6Zy54LWwueCx5OmcueS1sLnl9fTtmLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIDA8PWcueCYmMDw9Zy55JiZnLng8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSYmZy55PD10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfTtmLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCgpJiZudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiYhdGhpcy5faXNBbmNob3JlZCl0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX07Zi5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpO251bGwhPXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8mJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX07cmV0dXJuIGZ9KCk7CmQuSW50ZXJhY3Rpb249Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihxLHIpe2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXF9Zm9yKHZhciB2IGluIHIpci5oYXNPd25Qcm9wZXJ0eSh2KSYmKHFbdl09clt2XSk7cS5wcm90b3R5cGU9bnVsbD09PXI/T2JqZWN0LmNyZWF0ZShyKToodC5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IHQpfSxsPWYoMyksaz1mKDApLG49Zig1MikscD1mKDIpO2M9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gcigpe3ZhciB0PXEuY2FsbCh0aGlzKXx8dGhpczt0Ll9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExO3QuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITE7dC5fZGVmZXJyZWRSZW5kZXJpbmc9ITE7dC5fYXBwbHlEZWZlcnJlZFJlbmRlcmluZ1RyYW5zZm9ybT1mdW5jdGlvbih2LHkseix4KXt0Ll9pc0FuY2hvcmVkJiYobnVsbCE9dC5fcmVuZGVyQXJlYSYmdC5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLAoidHJhbnNsYXRlKCIrdisiLCAiK3krIikgc2NhbGUoIit6KyIsICIreCsiKSIpLG51bGwhPXQuX2NhbnZhcyYmdC5fY2FudmFzLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit2KyJweCwgIit5KyJweCkgc2NhbGUoIit6KyIsICIreCsiKSIpKX07dC5hZGRDbGFzcygieHktcGxvdCIpO3QuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX07dC5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiB0Ll9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWSgpfTt0Ll9yZW5kZXJDYWxsYmFjaz1mdW5jdGlvbigpe2lmKHQuZGVmZXJyZWRSZW5kZXJpbmcoKSl7dmFyIHY9dC54KCkmJnQueCgpLnNjYWxlLHk9dC55KCkmJnQueSgpLnNjYWxlO3QuX2RlZmVycmVkUmVuZGVyZXIudXBkYXRlRG9tYWlucyh2LHkpfWVsc2UgdC5yZW5kZXIoKX07CnQuX2RlZmVycmVkUmVuZGVyZXI9bmV3IG4uRGVmZXJyZWRSZW5kZXJlcihmdW5jdGlvbigpe3JldHVybiB0LnJlbmRlcigpfSx0Ll9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtKTtyZXR1cm4gdH1nKHIscSk7ci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5kZWZlcnJlZFJlbmRlcmluZygpJiZ0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnJlc2V0VHJhbnNmb3JtcygpO3JldHVybiBxLnByb3RvdHlwZS5yZW5kZXIuY2FsbCh0aGlzKX07ci5wcm90b3R5cGUuZGVmZXJyZWRSZW5kZXJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmd9O3IucHJvdG90eXBlLng9ZnVuY3Rpb24odCx2LHkpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHIuX1hfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkoci5fWF9LRVksdCx2LHkpO3Q9dGhpcy53aWR0aCgpO251bGwhPXYmJm51bGwhPXQmJnYucmFuZ2UoWzAsdF0pOwp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS55PWZ1bmN0aW9uKHQsdix5KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyLl9ZX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHIuX1lfS0VZLHQsdix5KTt0PXRoaXMuaGVpZ2h0KCk7bnVsbCE9diYmbnVsbCE9dCYmKHYgaW5zdGFuY2VvZiBsLkNhdGVnb3J5P3YucmFuZ2UoWzAsdF0pOnYucmFuZ2UoW3QsMF0pKTt0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIngiPT09dCYmdGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieSIpOgoieSI9PT10JiZ0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ4Iik6bnVsbH07ci5wcm90b3R5cGUuX21ha2VGaWx0ZXJCeVByb3BlcnR5PWZ1bmN0aW9uKHQpe3Q9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodCk7aWYobnVsbCE9dCl7dmFyIHY9dC5hY2Nlc3Nvcix5PXQuc2NhbGU7aWYobnVsbCE9eSlyZXR1cm4gZnVuY3Rpb24oeix4LEMpe3ZhciBGPXkucmFuZ2UoKTtyZXR1cm4gay5NYXRoLmluUmFuZ2UoeS5zY2FsZSh2KHoseCxDKSksRlswXSxGWzFdKX19cmV0dXJuIG51bGx9O3IucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbih0LHYpe3EucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMsdCx2KTt0Lm9mZlVwZGF0ZSh2PT09ci5fWF9LRVk/dGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjazp0aGlzLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWUNhbGxiYWNrKX07CnIucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24odCx2KXtxLnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyx0LHYpO3Qub25VcGRhdGUodj09PXIuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayl9O3IucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtxLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy54KCkuc2NhbGUmJnRoaXMueCgpLnNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrKTt0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4/CiJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHQpe2Nhc2UgIngiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITA7dGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTt0aGlzLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWSgpO2JyZWFrO2Nhc2UgInkiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITE7dGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMDt0aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWCgpO2JyZWFrO2Nhc2UgIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJJbnZhbGlkIHNjYWxlIG5hbWUgJyIrdCsiJywgbXVzdCBiZSAneCcsICd5JyBvciAnbm9uZSciKTt9cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24odCx2LHkpe3EucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLAp0LHYseSk7dD0odD10aGlzLngoKSkmJnQuc2NhbGU7bnVsbCE9dCYmdC5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt0PSh0PXRoaXMueSgpKSYmdC5zY2FsZTtudWxsIT10JiYodCBpbnN0YW5jZW9mIGwuQ2F0ZWdvcnk/dC5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSk6dC5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54KCkuc2NhbGU7bnVsbCE9dCYmdC5hdXRvRG9tYWluKCl9O3IucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnkoKS5zY2FsZTtudWxsIT10JiZ0LmF1dG9Eb21haW4oKX07ci5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKTt0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKTtyZXR1cm4gdGhpc307CnIucHJvdG90eXBlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWD1mdW5jdGlvbigpe3RoaXMuX3Byb2plY3RvcnNSZWFkeSgpJiZ0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX07ci5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7dGhpcy5fcHJvamVjdG9yc1JlYWR5KCkmJnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpfTtyLnByb3RvdHlwZS5fcHJvamVjdG9yc1JlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54KCksdj10aGlzLnkoKTtyZXR1cm4gbnVsbCE9dCYmbnVsbCE9dC5hY2Nlc3NvciYmbnVsbCE9diYmbnVsbCE9di5hY2Nlc3Nvcn07ci5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24odCx2LHkpe3ZhciB6PXAuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHg9cC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7CnJldHVybnt4OnoodCx2LHkpLHk6eCh0LHYseSl9fTtyLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoeix4LEMpe3ZhciBGPXAuUGxvdC5fc2NhbGVkQWNjZXNzb3Iodi54KCkpKHoseCxDKTt6PXAuUGxvdC5fc2NhbGVkQWNjZXNzb3Iodi55KCkpKHoseCxDKTtyZXR1cm4gay5NYXRoLmlzVmFsaWROdW1iZXIoRikmJmsuTWF0aC5pc1ZhbGlkTnVtYmVyKHopfXZhciB2PXRoaXMseT1xLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHope3kuc2V0KHoseS5nZXQoeikuZmlsdGVyKGZ1bmN0aW9uKHgsQyl7cmV0dXJuIHQoeCxDLHopfSkpfSk7cmV0dXJuIHl9O3JldHVybiByfShwLlBsb3QpO2MuX1hfS0VZPSJ4IjtjLl9ZX0tFWT0ieSI7ZC5YWVBsb3Q9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMCk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0KITA7dGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMTt0aGlzLl91cGRhdGVJZD0wO3RoaXMuX2NhbGxiYWNrcz1uZXcgZy5DYWxsYmFja1NldDt0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycz1uZXcgZy5TZXR9bC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX07bC5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKGspe3ZhciBuPXRoaXM7dm9pZCAwPT09ayYmKGs9ITEpO3ZhciBwPVtdO3RoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmZvckVhY2goZnVuY3Rpb24ocSl7cT1xKG4sayk7cD1wLmNvbmNhdChxKX0pO3JldHVybiBwfTtsLnByb3RvdHlwZS5fZ2V0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuW119O2wucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKGspe3RoaXMuX2NhbGxiYWNrcy5hZGQoayk7cmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbihrKXt0aGlzLl9jYWxsYmFja3MuZGVsZXRlKGspOwpyZXR1cm4gdGhpc307bC5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKzt0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX07bC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3RoaXMuX2F1dG9Eb21haW5BdXRvbWF0aWNhbGx5PSEwO3RoaXMuX3NldERvbWFpbih0aGlzLl9nZXRFeHRlbnQoKSl9O2wucHJvdG90eXBlLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHkmJnRoaXMuYXV0b0RvbWFpbigpfTtsLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZSIpO307bC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX07bC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKGspe2lmKG51bGw9PWspcmV0dXJuIHRoaXMuX2dldERvbWFpbigpOwp0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMTt0aGlzLl9zZXREb21haW4oayk7cmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERvbWFpbiIpO307bC5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihrKXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oayksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX07bC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfYmFja2luZ0RvbWFpbiIpO307bC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24oayl7aWYobnVsbD09aylyZXR1cm4gdGhpcy5fZ2V0UmFuZ2UoKTsKdGhpcy5fc2V0UmFuZ2Uoayk7cmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0UmFuZ2UiKTt9O2wucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKTt9O2wucHJvdG90eXBlLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24oayl7dGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKGspO3RoaXMuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUucmVtb3ZlSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbihrKXt0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5kZWxldGUoayk7dGhpcy5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpfTtsLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH07CnJldHVybiBsfSgpO2QuU2NhbGU9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcocix0LHYseSl7Zm9yKHZhciB6PXt9LHg9MDt4PHQubGVuZ3RoO3grKyl7dmFyIEM9dFt4XTtyLmhhc093blByb3BlcnR5KEMpJiYoeltDXT1yW0NdKHYseSkpfXJldHVybiB6fWZ1bmN0aW9uIGwocil7cmV0dXJuKG51bGwhPXJbInN0cm9rZS1vcGFjaXR5Il0/cGFyc2VGbG9hdChyWyJzdHJva2Utb3BhY2l0eSJdKToxKSoobnVsbCE9ci5vcGFjaXR5P3BhcnNlRmxvYXQoci5vcGFjaXR5KToxKX1mdW5jdGlvbiBrKHIpe3JldHVybihudWxsIT1yWyJmaWxsLW9wYWNpdHkiXT9wYXJzZUZsb2F0KHJbImZpbGwtb3BhY2l0eSJdKToxKSoobnVsbCE9ci5vcGFjaXR5P3BhcnNlRmxvYXQoci5vcGFjaXR5KToxKX1mdW5jdGlvbiBuKHIpe3JldHVybiBudWxsIT1yWyJzdHJva2Utd2lkdGgiXT9wYXJzZUZsb2F0KHJbInN0cm9rZS13aWR0aCJdKToxfWZ1bmN0aW9uIHAocix0KXtpZih0LnN0cm9rZSl7ci5saW5lV2lkdGg9Cm4odCk7dmFyIHY9cS5jb2xvcih0LnN0cm9rZSk7di5vcGFjaXR5Kj1sKHQpO3Iuc3Ryb2tlU3R5bGU9di50b1N0cmluZygpO3Iuc3Ryb2tlKCl9dC5maWxsJiYodj1xLmNvbG9yKHQuZmlsbCksdi5vcGFjaXR5Kj1rKHQpLHIuZmlsbFN0eWxlPXYudG9TdHJpbmcoKSxyLmZpbGwoKSl9dmFyIHE9ZigxKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LHYpe3RoaXMuX2NvbnRleHQ9dDt0aGlzLl9kcmF3U3RlcD12fXIucHJvdG90eXBlLmdldERyYXdTdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYXdTdGVwfTtyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsdil7dj12W3YubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCk7dGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LHYpO3RoaXMuX2NvbnRleHQucmVzdG9yZSgpfTtyLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119O3IucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9CmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O3IucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe307cmV0dXJuIHJ9KCk7ZC5DYW52YXNEcmF3ZXI9YztkLkNvbnRleHRTdHlsZUF0dHJzPSJmaWxsLW9wYWNpdHkgZmlsbCBvcGFjaXR5IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCBzdHJva2UiLnNwbGl0KCIgIik7ZC5yZXNvbHZlQXR0cmlidXRlc1N1YnNldFdpdGhTdHlsZXM9ZnVuY3Rpb24ocix0LHYseSl7cmV0dXJuIGcocixkLkNvbnRleHRTdHlsZUF0dHJzLmNvbmNhdCh0KSx2LHkpfTtkLnJlc29sdmVBdHRyaWJ1dGVzPWc7ZC5nZXRTdHJva2VXaWR0aD1uO2QucmVuZGVyQXJlYT1mdW5jdGlvbihyLHQsdix5KXtyLnNhdmUoKTtyLmJlZ2luUGF0aCgpO3QuY29udGV4dChyKTt0KHYpO3IubGluZUpvaW49InJvdW5kIjtwKHIseSk7ci5yZXN0b3JlKCl9O2QucmVuZGVyTGluZT1mdW5jdGlvbihyLHQsdix5KXtyLnNhdmUoKTtyLmJlZ2luUGF0aCgpO3QuY29udGV4dChyKTt0KHYpOwpyLmxpbmVKb2luPSJyb3VuZCI7cChyLHkpO3IucmVzdG9yZSgpfTtkLnJlbmRlclBhdGhXaXRoU3R5bGU9cH0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDUwKSk7ZyhmKDI3KSk7ZyhmKDUxKSk7ZyhmKDkzKSk7ZyhmKDUzKSk7ZyhmKDk0KSk7ZyhmKDk1KSk7ZyhmKDk2KSk7ZyhmKDk3KSk7ZyhmKDk4KSk7ZyhmKDk5KSk7ZyhmKDEwMCkpfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoOTIpKTtnKGYoOTEpKTtjPWYoNDkpO2Quc2lnbj1jLnNpZ259LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZigxMzQpKTtnKGYoMTM1KSk7ZyhmKDEzNikpO2coZigxMzcpKX0sZnVuY3Rpb24oYywKZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDEpLGs9Zig1KTtjPWYoNCk7dmFyIG49Zig4KSxwPWYoMCk7Zj1mKDEwKTtkLkF4aXNPcmllbnRhdGlvbj1mLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO2Y9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gcih0LHYpe3ZhciB5PXEuY2FsbCh0aGlzKXx8dGhpczt5Ll9lbmRUaWNrTGVuZ3RoPTU7eS5faW5uZXJUaWNrTGVuZ3RoPTU7eS5fdGlja0xhYmVsUGFkZGluZz0xMDt5Ll9tYXJnaW49MTU7eS5fc2hvd0VuZFRpY2tMYWJlbHM9ITE7eS5fYW5ub3RhdGlvbnNFbmFibGVkPSExO3kuX2Fubm90YXRpb25UaWVyQ291bnQ9CjE7aWYobnVsbD09dHx8bnVsbD09dil0aHJvdyBFcnJvcigiQXhpcyByZXF1aXJlcyBhIHNjYWxlIGFuZCBvcmllbnRhdGlvbiIpO3kuX3NjYWxlPXQ7eS5vcmllbnRhdGlvbih2KTt5Ll9zZXREZWZhdWx0QWxpZ25tZW50KCk7eS5hZGRDbGFzcygiYXhpcyIpO3kuaXNIb3Jpem9udGFsKCk/eS5hZGRDbGFzcygieC1heGlzIik6eS5hZGRDbGFzcygieS1heGlzIik7eS5mb3JtYXR0ZXIobi5pZGVudGl0eSgpKTt5Ll9yZXNjYWxlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4geS5fcmVzY2FsZSgpfTt5Ll9zY2FsZS5vblVwZGF0ZSh5Ll9yZXNjYWxlQ2FsbGJhY2spO3kuX2Fubm90YXRlZFRpY2tzPVtdO3kuX2Fubm90YXRpb25Gb3JtYXR0ZXI9bi5pZGVudGl0eSgpO3JldHVybiB5fWcocixxKTtyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfTsKci5wcm90b3R5cGUudGlja0xhYmVsRGF0YU9uRWxlbWVudD1mdW5jdGlvbih0KXtpZihudWxsIT10KXtmb3IodmFyIHY7bnVsbCE9dCYmdC5jbGFzc0xpc3QmJnZvaWQgMD09PXY7KXQuY2xhc3NMaXN0LmNvbnRhaW5zKHIuVElDS19MQUJFTF9DTEFTUyk/dj10OnQ9dC5wYXJlbnROb2RlO3JldHVybiB2b2lkIDA9PT10P3ZvaWQgMDpsLnNlbGVjdCh0KS5kYXR1bSgpfX07ci5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX07ci5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9O3IucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKCl7dmFyIHQ9MCx2PTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYodj10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciB5PQp0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnIuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORzt2Kz15KnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpfX1lbHNlIHQ9dGhpcy5fY29tcHV0ZVdpZHRoKCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkmJih5PXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqci5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HLHQrPXkqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCkpO3JldHVybnttaW5XaWR0aDp0LG1pbkhlaWdodDp2fX07ci5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKX07ci5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzSG9yaXpvbnRhbCgpfTtyLnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3RoaXMucmVuZGVyKCl9O3IucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9CmZ1bmN0aW9uKHQsdix5KXtxLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyx0LHYseSk7dGhpcy5pc0hvcml6b250YWwoKT90aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTp0aGlzLl9zY2FsZS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHQsdil7dmFyIHk9dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0LHYpO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDp0LGhlaWdodDp5Lm1pbkhlaWdodH06e2hlaWdodDp2LHdpZHRoOnkubWluV2lkdGh9fTtyLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtxLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHIuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCk7dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPQp0aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHIuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApO3RoaXMuX2Jhc2VsaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCk7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNvbnRhaW5lciIsITApO3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIsITApO3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiwhMCk7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiwhMCk7dmFyIHQ9dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIsCiEwKTt0PW5ldyBrLlN2Z0NvbnRleHQodC5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgay5DYWNoZU1lYXN1cmVyKHQpO3RoaXMuX2Fubm90YXRpb25Xcml0ZXI9bmV3IGsuV3JpdGVyKHRoaXMuX2Fubm90YXRpb25NZWFzdXJlcix0KX07ci5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX07ci5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRUaWNrVmFsdWVzKCksdj10aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19NQVJLX0NMQVNTKS5kYXRhKHQpLHk9di5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoci5USUNLX01BUktfQ0xBU1MsITApLm1lcmdlKHYpO3kuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCkpO2wuc2VsZWN0KHkubm9kZXMoKVswXSkuY2xhc3NlZChyLkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpOwpsLnNlbGVjdCh5Lm5vZGVzKClbdC5sZW5ndGgtMV0pLmNsYXNzZWQoci5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKTt2LmV4aXQoKS5yZW1vdmUoKTt0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSk7dGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5hbm5vdGF0ZWRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc307ci5wcm90b3R5cGUuYW5ub3RhdGlvbkZvcm1hdHRlcj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hbm5vdGF0aW9uRm9ybWF0dGVyO3RoaXMuX2Fubm90YXRpb25Gb3JtYXR0ZXI9dDt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5hbm5vdGF0aW9uc0VuYWJsZWQ9CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZH07ci5wcm90b3R5cGUuYW5ub3RhdGlvblRpZXJDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50fTtyLnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChiYSl7c3dpdGNoKEMub3JpZW50YXRpb24oKSl7Y2FzZSAiYm90dG9tIjpjYXNlICJyaWdodCI6cmV0dXJuIHooYmEpO2Nhc2UgInRvcCI6Y2FzZSAibGVmdCI6cmV0dXJuIHooYmEpLUQuZ2V0KGJhKS5oZWlnaHR9fWZ1bmN0aW9uIHYoYmEpe3JldHVybiBQLmhhcyhiYSk/ImhpZGRlbiI6InZpc2libGUifWZ1bmN0aW9uIHkoYmEpe3JldHVybiBDLl9zY2FsZS5zY2FsZShiYSl9ZnVuY3Rpb24geihiYSl7c3dpdGNoKEMub3JpZW50YXRpb24oKSl7Y2FzZSAiYm90dG9tIjpjYXNlICJyaWdodCI6cmV0dXJuIE8uZ2V0KGJhKSpJK0s7Y2FzZSAidG9wIjpjYXNlICJsZWZ0IjpyZXR1cm4gSC0KSy1PLmdldChiYSkqSX19ZnVuY3Rpb24geChiYSxtYSxhYSl7YmE9YmEuc2VsZWN0QWxsKCIuIithYSkuZGF0YShCKTttYT1iYS5lbnRlcigpLmFwcGVuZChtYSkuY2xhc3NlZChhYSwhMCkubWVyZ2UoYmEpO2JhLmV4aXQoKS5yZW1vdmUoKTtyZXR1cm4gbWF9dmFyIEM9dGhpcyxGPXIuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxEPW5ldyBwLk1hcCxCPXRoaXMuX2Fubm90YXRlZFRpY2tzVG9SZW5kZXIoKTtCLmZvckVhY2goZnVuY3Rpb24oYmEpe3ZhciBtYT1DLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZShDLmFubm90YXRpb25Gb3JtYXR0ZXIoKShiYSkpO0Quc2V0KGJhLHt3aWR0aDptYS53aWR0aCsyKkYsaGVpZ2h0Om1hLmhlaWdodCsyKkZ9KX0pO3ZhciBJPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqRixPPXRoaXMuX2Fubm90YXRpb25Ub1RpZXIoRCksUD1uZXcgcC5TZXQsSD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6CnRoaXMud2lkdGgoKSxLPXRoaXMuX2NvcmVTaXplKCksTT1NYXRoLm1pbih0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSxNYXRoLmZsb29yKChILUspL0kpKTtPLmZvckVhY2goZnVuY3Rpb24oYmEsbWEpeygtMT09PWJhfHxiYT49TSkmJlAuYWRkKG1hKX0pO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UgImJvdHRvbSI6Y2FzZSAicmlnaHQiOnZhciBMPTA7YnJlYWs7Y2FzZSAidG9wIjpMPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSAibGVmdCI6TD10aGlzLndpZHRoKCl9dmFyIFI9dGhpcy5pc0hvcml6b250YWwoKTt4KHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIpLCJsaW5lIixyLkFOTk9UQVRJT05fTElORV9DTEFTUykuYXR0cnMoe3gxOlI/eTpMLHgyOlI/eTp6LHkxOlI/TDp5LHkyOlI/ejp5LHZpc2liaWxpdHk6dn0pO3godGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiKSwKImNpcmNsZSIsci5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4OlI/eTpMLGN5OlI/TDp5LHI6M30pO3godGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiksInJlY3QiLHIuQU5OT1RBVElPTl9SRUNUX0NMQVNTKS5hdHRycyh7eDpSP3k6dCx5OlI/dDp5LHdpZHRoOlI/ZnVuY3Rpb24oYmEpe3JldHVybiBELmdldChiYSkud2lkdGh9OmZ1bmN0aW9uKGJhKXtyZXR1cm4gRC5nZXQoYmEpLmhlaWdodH0saGVpZ2h0OlI/ZnVuY3Rpb24oYmEpe3JldHVybiBELmdldChiYSkuaGVpZ2h0fTpmdW5jdGlvbihiYSl7cmV0dXJuIEQuZ2V0KGJhKS53aWR0aH0sdmlzaWJpbGl0eTp2fSk7dmFyIFU9dGhpcy5fYW5ub3RhdGlvbldyaXRlcixZPXRoaXMuYW5ub3RhdGlvbkZvcm1hdHRlcigpO0w9eCh0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiksImciLHIuQU5OT1RBVElPTl9MQUJFTF9DTEFTUyk7Ckwuc2VsZWN0QWxsKCIudGV4dC1jb250YWluZXIiKS5yZW1vdmUoKTtMLmF0dHJzKHt0cmFuc2Zvcm06ZnVuY3Rpb24oYmEpe3ZhciBtYT1SP3koYmEpOnQoYmEpO2JhPVI/dChiYSk6eShiYSk7cmV0dXJuInRyYW5zbGF0ZSgiK21hKyIsIitiYSsiKSJ9LHZpc2liaWxpdHk6dn0pLmVhY2goZnVuY3Rpb24oYmEpe1Uud3JpdGUoWShiYSksUj9ELmdldChiYSkud2lkdGg6RC5nZXQoYmEpLmhlaWdodCxSP0QuZ2V0KGJhKS5oZWlnaHQ6RC5nZXQoYmEpLndpZHRoLHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjpSPzA6OTB9LGwuc2VsZWN0KHRoaXMpLm5vZGUoKSl9KX07ci5wcm90b3R5cGUuX2Fubm90YXRlZFRpY2tzVG9SZW5kZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHY9dGhpcy5fc2NhbGUucmFuZ2UoKTtyZXR1cm4gcC5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oeSl7cmV0dXJuIG51bGw9PXk/ITE6cC5NYXRoLmluUmFuZ2UodC5fc2NhbGUuc2NhbGUoeSksCnZbMF0sdlsxXSl9KSl9O3IucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksdj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4odix0KX07ci5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqci5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfTtyLnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbih0KXt2YXIgdj10aGlzLHk9W1tdXSx6PW5ldyBwLk1hcCx4PXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy53aWR0aCgpOnRoaXMuaGVpZ2h0KCk7dGhpcy5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcigpLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIEY9di5fc2NhbGUuc2NhbGUoQyksCkQ9dC5nZXQoQykud2lkdGg7aWYoMD5GfHxGK0Q+eCl6LnNldChDLC0xKTtlbHNle2Zvcih2YXIgQj1mdW5jdGlvbihPKXtyZXR1cm4geVtPXS5zb21lKGZ1bmN0aW9uKFApe3ZhciBIPXYuX3NjYWxlLnNjYWxlKFApO1A9dC5nZXQoUCkud2lkdGg7cmV0dXJuIEYrRD49SCYmRjw9SCtQfSl9LEk9MDtCKEkpOylJKysseS5sZW5ndGg9PT1JJiZ5LnB1c2goW10pO3lbSV0ucHVzaChDKTt6LnNldChDLEkpfX0pO3JldHVybiB6fTtyLnByb3RvdHlwZS5fcmVtb3ZlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tbGluZSIpLnJlbW92ZSgpO3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1jaXJjbGUiKS5yZW1vdmUoKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tcmVjdCIpLnJlbW92ZSgpO3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1sYWJlbCIpLnJlbW92ZSgpfTsKci5wcm90b3R5cGUuX2dlbmVyYXRlQmFzZWxpbmVBdHRySGFzaD1mdW5jdGlvbigpe3ZhciB0PXt4MTowLHkxOjAseDI6MCx5MjowfTtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UgImJvdHRvbSI6dC54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSAidG9wIjp0LngyPXRoaXMud2lkdGgoKTt0LnkxPXRoaXMuaGVpZ2h0KCk7dC55Mj10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UgImxlZnQiOnQueDE9dGhpcy53aWR0aCgpO3QueDI9dGhpcy53aWR0aCgpO3QueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlICJyaWdodCI6dC55Mj10aGlzLmhlaWdodCgpfXJldHVybiB0fTtyLnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHYoeCl7cmV0dXJuIHkuX3NjYWxlLnNjYWxlKHgpfXZhciB5PXRoaXM7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciB6PXt4MTowLHkxOjAseDI6MCx5MjowfTt0aGlzLmlzSG9yaXpvbnRhbCgpPyh6LngxPQp2LHoueDI9dik6KHoueTE9dix6LnkyPXYpO3Q9dD90aGlzLl9lbmRUaWNrTGVuZ3RoOnRoaXMuX2lubmVyVGlja0xlbmd0aDtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UgImJvdHRvbSI6ei55Mj10O2JyZWFrO2Nhc2UgInRvcCI6ei55MT10aGlzLmhlaWdodCgpO3oueTI9dGhpcy5oZWlnaHQoKS10O2JyZWFrO2Nhc2UgImxlZnQiOnoueDE9dGhpcy53aWR0aCgpO3oueDI9dGhpcy53aWR0aCgpLXQ7YnJlYWs7Y2FzZSAicmlnaHQiOnoueDI9dH1yZXR1cm4gen07ci5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UgImJvdHRvbSI6dGhpcy55QWxpZ25tZW50KCJ0b3AiKTticmVhaztjYXNlICJ0b3AiOnRoaXMueUFsaWdubWVudCgiYm90dG9tIik7YnJlYWs7Y2FzZSAibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UgInJpZ2h0Ijp0aGlzLnhBbGlnbm1lbnQoImxlZnQiKX19OwpyLnByb3RvdHlwZS5pc0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4idG9wIj09PXRoaXMuX29yaWVudGF0aW9ufHwiYm90dG9tIj09PXRoaXMuX29yaWVudGF0aW9ufTtyLnByb3RvdHlwZS5nZXRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY2FsZX07ci5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2Zvcm1hdHRlcjt0aGlzLl9mb3JtYXR0ZXI9dDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RofTtyLnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGh9O3IucHJvdG90eXBlLl9tYXhMYWJlbFRpY2tMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93RW5kVGlja0xhYmVscygpP01hdGgubWF4KHRoaXMuaW5uZXJUaWNrTGVuZ3RoKCksCnRoaXMuZW5kVGlja0xlbmd0aCgpKTp0aGlzLmlubmVyVGlja0xlbmd0aCgpfTtyLnByb3RvdHlwZS50aWNrTGFiZWxQYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc7aWYoMD50KXRocm93IEVycm9yKCJ0aWNrIGxhYmVsIHBhZGRpbmcgbXVzdCBiZSBwb3NpdGl2ZSIpO3RoaXMuX3RpY2tMYWJlbFBhZGRpbmc9dDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5tYXJnaW49ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fbWFyZ2luO2lmKDA+dCl0aHJvdyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3RoaXMuX21hcmdpbj10O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3Q9dC50b0xvd2VyQ2FzZSgpO2lmKCJ0b3AiIT09dCYmImJvdHRvbSIhPT0KdCYmImxlZnQiIT09dCYmInJpZ2h0IiE9PXQpdGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIG9yaWVudGF0aW9uIik7dGhpcy5fb3JpZW50YXRpb249dDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5zaG93RW5kVGlja0xhYmVscz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaG93RW5kVGlja0xhYmVsc307ci5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7bC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0Iil9KX07ci5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrci5USUNLX0xBQkVMX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7bC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0Iil9KX07CnIucHJvdG90eXBlLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrci5USUNLX0xBQkVMX0NMQVNTKTt2LmVtcHR5KCl8fHYuZWFjaChmdW5jdGlvbigpe3AuRE9NLmNsaWVudFJlY3RJbnNpZGUodGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0KXx8bC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfTtyLnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrci5USUNLX01BUktfQ0xBU1MpLHY9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrci5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgeT1sLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpOwpyZXR1cm4iaW5oZXJpdCI9PT15fHwidmlzaWJsZSI9PT15fSkuZGF0YSgpO3QuZWFjaChmdW5jdGlvbih5KXstMT09PXYuaW5kZXhPZih5KSYmbC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfTtyLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtxLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKTt0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHJ9KGMuQ29tcG9uZW50KTtmLkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiO2YuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiO2YuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCI7Zi5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSI7Zi5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCI7Zi5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiO2YuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0KImFubm90YXRpb24tbGFiZWwiO2YuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORz00O2QuQXhpcz1mfSxmdW5jdGlvbihjLGQpe2QuU0hPV19XQVJOSU5HUz0hMDtkLkFERF9USVRMRV9FTEVNRU5UUz0hMH0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMCk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uPXt9O3RoaXMuX2V2ZW50VGFyZ2V0PWRvY3VtZW50O3RoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQ9e307dGhpcy5fY29ubmVjdGVkPSExfWwucHJvdG90eXBlLl9oYXNOb0NhbGxiYWNrcz1mdW5jdGlvbigpe2Zvcih2YXIgaz1PYmplY3Qua2V5cyh0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0KSxuPTA7bjxrLmxlbmd0aDtuKyspaWYoMCE9PXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba1tuXV0uc2l6ZSlyZXR1cm4hMTtyZXR1cm4hMH07bC5wcm90b3R5cGUuX2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgaz10aGlzOwp0aGlzLl9jb25uZWN0ZWR8fChPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2suX2V2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIobixrLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW25dKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9O2wucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIGs9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2suX2V2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIobixrLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW25dKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMSl9O2wucHJvdG90eXBlLl9hZGRDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKGssbil7bnVsbD09dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFtrXSYmCih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W2tdPW5ldyBnLkNhbGxiYWNrU2V0KTt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W2tdLmFkZChuKTt0aGlzLl9jb25uZWN0KCl9O2wucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKGssbil7bnVsbCE9dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFtrXSYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFtrXS5kZWxldGUobik7dGhpcy5fZGlzY29ubmVjdCgpfTtsLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKGspe2Zvcih2YXIgbj1bXSxwPTE7cDxhcmd1bWVudHMubGVuZ3RoO3ArKyluW3AtMV09YXJndW1lbnRzW3BdO3A9dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFtrXTtudWxsIT1wJiZwLmNhbGxDYWxsYmFja3MuYXBwbHkocCxuKX07cmV0dXJuIGx9KCk7ZC5EaXNwYXRjaGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fAooZFtrXT1sW2tdKX1nKGYoODcpKTtnKGYoODgpKTtnKGYoNDApKTtnKGYoODkpKTtnKGYoOTApKTtjPWYoMjYpO2Quem9vbU91dD1jLnpvb21PdXR9LGZ1bmN0aW9uKGMsZCl7ZnVuY3Rpb24gZihxLHIsdCl7cmV0dXJuIHQtKHQtcSkqcn1mdW5jdGlvbiBnKHEscix0KXtyZXR1cm4ocSpyLXQpLyhyLTEpfWZ1bmN0aW9uIGwocSxyLHQsdil7dmFyIHk9MTxyO3Q9eT92OnQ7aWYobnVsbD09dClyZXR1cm4gcjtxPXEuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKTtyZXR1cm4oeT9NYXRoLm1pbjpNYXRoLm1heCkocix0L01hdGguYWJzKHFbMV0tcVswXSkpfWZ1bmN0aW9uIGsocSxyLHQsdix5KXtpZigxPj1yKXJldHVybntjZW50ZXJQb2ludDp0LHpvb21BbW91bnQ6cn07aWYobnVsbD09diYmbnVsbD09eSlyZXR1cm57Y2VudGVyUG9pbnQ6dCx6b29tQW1vdW50OnJ9O3ZhciB6PW4ocSkseD1wKHEpLEM9eD9JbmZpbml0eTotSW5maW5pdHk7eD14Py1JbmZpbml0eTpJbmZpbml0eTt2PW51bGw9PQp2P0M6djt5PW51bGw9PXk/eDp5O3g9cS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO0M9eFswXTt4PXhbMV07eT1xLnNjYWxlVHJhbnNmb3JtYXRpb24oeSk7eD1xLnNjYWxlVHJhbnNmb3JtYXRpb24oeCk7dmFyIEY9Zih4LHIsdCk7dj1xLnNjYWxlVHJhbnNmb3JtYXRpb24odik7cT1xLnNjYWxlVHJhbnNmb3JtYXRpb24oQyk7Qz1mKHEscix0KTtyZXR1cm4gTWF0aC5hYnMoRi1DKT5NYXRoLmFicyh5LXYpPyhyPSh5LXYpLyh4LXEpLDEhPT1yP3tjZW50ZXJQb2ludDpnKHgscix5KSx6b29tQW1vdW50OnJ9OntjZW50ZXJQb2ludDp0LHpvb21BbW91bnQ6cn0pOkY+eSE9ej97Y2VudGVyUG9pbnQ6Zyh4LHIseSksem9vbUFtb3VudDpyfTpDPHYhPXo/e2NlbnRlclBvaW50OmcocSxyLHYpLHpvb21BbW91bnQ6cn06e2NlbnRlclBvaW50OnQsem9vbUFtb3VudDpyfX1mdW5jdGlvbiBuKHEpe3E9cS5yYW5nZSgpO3JldHVybiBxWzFdPHFbMF19ZnVuY3Rpb24gcChxKXtxPXEuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKTsKcmV0dXJuIHFbMV08cVswXX1kLnpvb21PdXQ9ZjtkLmNvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihxLHIsdCx2LHkseix4KXtyPWwocSxyLHYseSk7cmV0dXJuIGsocSxyLHQseix4KX07ZC5jb25zdHJhaW5ab29tRXh0ZW50cz1sO2QuY29uc3RyYWluWm9vbVZhbHVlcz1rO2QuY29uc3RyYWluZWRUcmFuc2xhdGlvbj1mdW5jdGlvbihxLHIsdCx2KXt2YXIgeT1xLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCksej15WzBdLHg9eVsxXTt5PW4ocSk7MDxyIT09eT8odD12LG51bGwhPXQmJih6PXEuc2NhbGVUcmFuc2Zvcm1hdGlvbih4KSxxPXEuc2NhbGVUcmFuc2Zvcm1hdGlvbih0KSxyPSh5P01hdGgubWF4Ok1hdGgubWluKSh6K3IscSkteikpOm51bGwhPXQmJih6PXEuc2NhbGVUcmFuc2Zvcm1hdGlvbih6KSxxPXEuc2NhbGVUcmFuc2Zvcm1hdGlvbih0KSxyPSh5P01hdGgubWluOk1hdGgubWF4KSh6K3IscSkteik7cmV0dXJuIHJ9fSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhJLApPLFApe3ZhciBIPUkuc2NhbGU7aWYoSCBpbnN0YW5jZW9mIHouQ2F0ZWdvcnkpUD1ILnJhbmdlQmFuZCgpO2Vsc2V7dmFyIEs9SS5hY2Nlc3NvcjtJPWsuc2V0KEMuQXJyYXkuZmxhdHRlbihPLm1hcChmdW5jdGlvbihNKXtyZXR1cm4gTS5kYXRhKCkubWFwKGZ1bmN0aW9uKEwsUil7cmV0dXJuIEsoTCxSLE0pfSkuZmlsdGVyKGZ1bmN0aW9uKEwpe3JldHVybiBudWxsIT1MfSkubWFwKGZ1bmN0aW9uKEwpe3JldHVybiBMLnZhbHVlT2YoKX0pfSkpKS52YWx1ZXMoKS5tYXAoZnVuY3Rpb24oTSl7cmV0dXJuK019KTtJLnNvcnQoZnVuY3Rpb24oTSxMKXtyZXR1cm4gTS1MfSk7ST1JLm1hcChmdW5jdGlvbihNKXtyZXR1cm4gSC5zY2FsZShNKX0pO0k9ay5wYWlycyhJKTtQPUMuTWF0aC5taW4oSSxmdW5jdGlvbihNKXtyZXR1cm4gTWF0aC5hYnMoTVsxXS1NWzBdKX0sUCpCLl9TSU5HTEVfQkFSX0RJTUVOU0lPTl9SQVRJTyk7UCo9Qi5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gUH0KdmFyIGw9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKEksTyl7ZnVuY3Rpb24gUCgpe3RoaXMuY29uc3RydWN0b3I9SX1mb3IodmFyIEggaW4gTylPLmhhc093blByb3BlcnR5KEgpJiYoSVtIXT1PW0hdKTtJLnByb3RvdHlwZT1udWxsPT09Tz9PYmplY3QuY3JlYXRlKE8pOihQLnByb3RvdHlwZT1PLnByb3RvdHlwZSxuZXcgUCl9LGs9ZigxKSxuPWYoNSkscD1mKDcpLHE9Zig4KSxyPWYoMTQpLHQ9Zig2KSx2PWYoMzQpLHk9ZigyMCksej1mKDMpLHg9ZigxMSksQz1mKDApO2M9ZigxMCk7dmFyIEY9ZigxOSksRD1mKDIpO2Y9ZigxNik7ZC5CYXJPcmllbnRhdGlvbj1jLm1ha2VFbnVtKFsidmVydGljYWwiLCJob3Jpem9udGFsIl0pO2QuTGFiZWxzUG9zaXRpb249Yy5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIiwib3V0c2lkZSJdKTtkLkJhckFsaWdubWVudD1jLm1ha2VFbnVtKFsic3RhcnQiLCJtaWRkbGUiLCJlbmQiXSk7dmFyIEI9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gTyhQKXt2b2lkIDA9PT0KUCYmKFA9InZlcnRpY2FsIik7dmFyIEg9SS5jYWxsKHRoaXMpfHx0aGlzO0guX2xhYmVsRm9ybWF0dGVyPXEuaWRlbnRpdHkoKTtILl9sYWJlbHNFbmFibGVkPSExO0guX2xhYmVsc1Bvc2l0aW9uPWQuTGFiZWxzUG9zaXRpb24uZW5kO0guX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwO0guX2JhckFsaWdubWVudD0ibWlkZGxlIjtILl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9eS5tZW1vaXplKGcpO0guX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITA7SC5hZGRDbGFzcygiYmFyLXBsb3QiKTtpZigidmVydGljYWwiIT09UCYmImhvcml6b250YWwiIT09UCl0aHJvdyBFcnJvcihQKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIFBsb3RzLkJhciIpO0guX2lzVmVydGljYWw9InZlcnRpY2FsIj09PVA7SC5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBwLk51bGwpO0guYXR0cigiZmlsbCIsKG5ldyB6LkNvbG9yKS5yYW5nZSgpWzBdKTtILmF0dHIoTy5fQkFSX1RISUNLTkVTU19LRVksCmZ1bmN0aW9uKCl7cmV0dXJuIEguX2JhclBpeGVsVGhpY2tuZXNzKCl9KTtILl9sYWJlbENvbmZpZz1uZXcgQy5NYXA7SC5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW0guYmFzZWxpbmVWYWx1ZSgpXX07cmV0dXJuIEh9bChPLEkpO08ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oUCxILEspe0kucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLFAsSCxLKTt0aGlzLl91cGRhdGVFeHRlbnRzKCk7cmV0dXJuIHRoaXN9O08ucHJvdG90eXBlLng9ZnVuY3Rpb24oUCxIKXtpZihudWxsPT1QKXJldHVybiBJLnByb3RvdHlwZS54LmNhbGwodGhpcyk7bnVsbD09SD9JLnByb3RvdHlwZS54LmNhbGwodGhpcyxQKTpJLnByb3RvdHlwZS54LmNhbGwodGhpcyxQLEgpO3RoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKTt0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpO3JldHVybiB0aGlzfTtPLnByb3RvdHlwZS55PWZ1bmN0aW9uKFAsSCl7aWYobnVsbD09ClApcmV0dXJuIEkucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtudWxsPT1IP0kucHJvdG90eXBlLnkuY2FsbCh0aGlzLFApOkkucHJvdG90eXBlLnkuY2FsbCh0aGlzLFAsSCk7dGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKTtyZXR1cm4gdGhpc307Ty5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/dGhpcy55KCk6dGhpcy54KCl9O08ucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/dGhpcy54KCk6dGhpcy55KCl9O08ucHJvdG90eXBlLmJhckVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChPLl9CQVJfRU5EX0tFWSl9O08ucHJvdG90eXBlLmJhckFsaWdubWVudD1mdW5jdGlvbihQKXtpZihudWxsPT1QKXJldHVybiB0aGlzLl9iYXJBbGlnbm1lbnQ7dGhpcy5fYmFyQWxpZ25tZW50PVA7dGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpO3RoaXMucmVuZGVyKCk7CnJldHVybiB0aGlzfTtPLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwifTtPLnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0LlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2LlJlY3RhbmdsZVNWR0RyYXdlcihPLl9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKFApe3JldHVybiBuZXcgci5SZWN0YW5nbGVDYW52YXNEcmF3ZXIoUCl9KX07Ty5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7SS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfTtPLnByb3RvdHlwZS5iYXNlbGluZVZhbHVlPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5fYmFzZWxpbmVWYWx1ZSlyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7CnZhciBQPXRoaXMubGVuZ3RoKCkuc2NhbGU7cmV0dXJuIFA/UCBpbnN0YW5jZW9mIHouVGltZT9uZXcgRGF0ZSgwKTowOjB9O08ucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24oUCl7SS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsUCk7cmV0dXJuIHRoaXN9O08ucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKFApe0kucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxQKTtyZXR1cm4gdGhpc307Ty5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihQKXtJLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxQKX07Ty5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24oUCl7SS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLFApO3JldHVybiB0aGlzfTtPLnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihQKXtpZihudWxsPT1QKXJldHVybiBJLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpO0kucHJvdG90eXBlLmRhdGFzZXRzLmNhbGwodGhpcywKUCk7cmV0dXJuIHRoaXN9O08ucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24oUCl7aWYobnVsbD09UClyZXR1cm4gdGhpcy5fbGFiZWxzRW5hYmxlZDt0aGlzLl9sYWJlbHNFbmFibGVkPVA7dGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O08ucHJvdG90eXBlLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKFApe2lmKG51bGw9PVApcmV0dXJuIHRoaXMuX2xhYmVsRm9ybWF0dGVyO3RoaXMuX2xhYmVsRm9ybWF0dGVyPVA7dGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O08ucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24oUCl7dmFyIEg9SS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsUCksSz10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoTy5fTEFCRUxfQVJFQV9DTEFTUywhMCksCk09bmV3IG4uU3ZnQ29udGV4dChLLm5vZGUoKSksTD1uZXcgbi5DYWNoZU1lYXN1cmVyKE0pO009bmV3IG4uV3JpdGVyKEwsTSk7dGhpcy5fbGFiZWxDb25maWcuc2V0KFAse2xhYmVsQXJlYTpLLG1lYXN1cmVyOkwsd3JpdGVyOk19KTtyZXR1cm4gSH07Ty5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihQKXtJLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxQKTt2YXIgSD10aGlzLl9sYWJlbENvbmZpZy5nZXQoUCk7bnVsbCE9SCYmKEgubGFiZWxBcmVhLnJlbW92ZSgpLHRoaXMuX2xhYmVsQ29uZmlnLmRlbGV0ZShQKSl9O08ucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24oUCl7dmFyIEg9dGhpcztyZXR1cm4gdGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gSyhkYSxsYSxaLEZhKXtyZXR1cm4gSC5fcGl4ZWxQb2ludEJhcihiYShkYSxsYSxaKSxtYSxGYSl9dmFyIE09CkguX2lzVmVydGljYWw/UC54OlAueSxMPUguX2lzVmVydGljYWw/UC55OlAueCxSPUguYm91bmRzKCksVT17bWluOjAsbWF4OlIuYm90dG9tUmlnaHQueC1SLnRvcExlZnQueH0sWT17bWluOjAsbWF4OlIuYm90dG9tUmlnaHQueS1SLnRvcExlZnQueX0sYmE9RC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihILmxlbmd0aCgpKSxtYT1ILmxlbmd0aCgpLnNjYWxlLnNjYWxlKEguYmFzZWxpbmVWYWx1ZSgpKSxhYT1JbmZpbml0eSxjYT1JbmZpbml0eSxmYTtILl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzKCkuZm9yRWFjaChmdW5jdGlvbihkYSl7dmFyIGxhPUguX2VudGl0eUJvdW5kcyhkYSk7aWYoQy5ET00uaW50ZXJzZWN0c0JCb3goVSxZLGxhKSl7dmFyIFo9MCxGYT0wO2lmKCFDLkRPTS5pbnRlcnNlY3RzQkJveChQLngsUC55LGxhLC41KSl7RmE9SyhkYS5kYXR1bSxkYS5pbmRleCxkYS5kYXRhc2V0LGxhKTtaPU1hdGguYWJzKE0tKEguX2lzVmVydGljYWw/RmEueDpGYS55KSk7dmFyIHhhPQpILl9pc1ZlcnRpY2FsP2xhLnk6bGEueDtsYT14YSsoSC5faXNWZXJ0aWNhbD9sYS5oZWlnaHQ6bGEud2lkdGgpO0ZhPUw+PXhhLS41JiZMPD1sYSsuNT8wOk1hdGguYWJzKEwtKEguX2lzVmVydGljYWw/RmEueTpGYS54KSl9aWYoWjxhYXx8Wj09PWFhJiZGYTxjYSlmYT1kYSxhYT1aLGNhPUZhfX0pO2lmKHZvaWQgMCE9PWZhKXJldHVybiBILl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoZmEpfSl9O08ucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKFAueCxQLnkpfTtPLnByb3RvdHlwZS5fZW50aXRpZXNJbnRlcnNlY3Rpbmc9ZnVuY3Rpb24oUCxIKXt2YXIgSz10aGlzLE09W107dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZvckVhY2goZnVuY3Rpb24oTCl7Qy5ET00uaW50ZXJzZWN0c0JCb3goUCxILEsuX2VudGl0eUJvdW5kcyhMKSkmJk0ucHVzaChLLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoTCkpfSk7CnJldHVybiBNfTtPLnByb3RvdHlwZS5fdXBkYXRlTGVuZ3RoU2NhbGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIFA9dGhpcy5sZW5ndGgoKS5zY2FsZTtQIGluc3RhbmNlb2YgeC5RdWFudGl0YXRpdmVTY2FsZSYmKFAuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpLFAuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpKX19O08ucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIFA9dGhpczt0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpO3JldHVybiB0aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoZnVuY3Rpb24oKXtyZXR1cm4gSS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbChQKX0pfTtPLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKFApe3ZhciBIPXRoaXMsSz10aGlzLmxlbmd0aCgpLnNjYWxlLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKTsKSz17eDE6dGhpcy5faXNWZXJ0aWNhbD8wOksseTE6dGhpcy5faXNWZXJ0aWNhbD9LOjAseDI6dGhpcy5faXNWZXJ0aWNhbD90aGlzLndpZHRoKCk6Syx5Mjp0aGlzLl9pc1ZlcnRpY2FsP0s6dGhpcy5oZWlnaHQoKX07dGhpcy5fZ2V0QW5pbWF0b3IoImJhc2VsaW5lIikuYW5pbWF0ZSh0aGlzLl9iYXNlbGluZSxLKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihNKXtyZXR1cm4gSC5fbGFiZWxDb25maWcuZ2V0KE0pLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pO3RoaXMuX2xhYmVsc0VuYWJsZWQmJkMuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gSC5fZHJhd0xhYmVscygpfSxQKX07Ty5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKFApe3ZhciBIPXRoaXMsSz1JLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLFApO2lmKCJ4Ij09PVAmJnRoaXMuX2lzVmVydGljYWwpUD10aGlzLngoKTsKZWxzZXtpZigieSIhPT1QfHx0aGlzLl9pc1ZlcnRpY2FsKXJldHVybiBLO1A9dGhpcy55KCl9aWYoIShQJiZQLnNjYWxlJiZQLnNjYWxlIGluc3RhbmNlb2YgeC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIEs7dmFyIE09UC5zY2FsZSxMPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIEs9Sy5tYXAoZnVuY3Rpb24oUil7cmV0dXJuIGsuZXh0ZW50KFtNLmludmVydChILl9nZXRQb3NpdGlvbkF0dHIoTS5zY2FsZShSWzBdKSxMKSksTS5pbnZlcnQoSC5fZ2V0UG9zaXRpb25BdHRyKE0uc2NhbGUoUlswXSksTCkrTCksTS5pbnZlcnQoSC5fZ2V0UG9zaXRpb25BdHRyKE0uc2NhbGUoUlsxXSksTCkpLE0uaW52ZXJ0KEguX2dldFBvc2l0aW9uQXR0cihNLnNjYWxlKFJbMV0pLEwpK0wpXSl9KX07Ty5wcm90b3R5cGUuX2dldFBvc2l0aW9uQXR0cj1mdW5jdGlvbihQLEgpe3RoaXMuX2lzVmVydGljYWx8fChQLT1ILEgqPS0xKTtzd2l0Y2godGhpcy5fYmFyQWxpZ25tZW50KXtjYXNlICJzdGFydCI6cmV0dXJuIFA7CmNhc2UgImVuZCI6cmV0dXJuIFAtSDtkZWZhdWx0OnJldHVybiBQLUgvMn19O08ucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcyxIPXRoaXMuX2dldERhdGFUb0RyYXcoKSxLPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLE09dGhpcy5kYXRhc2V0cygpLnNvbWUoZnVuY3Rpb24oTCl7cmV0dXJuIEguZ2V0KEwpLnNvbWUoZnVuY3Rpb24oUixVKXtyZXR1cm4gbnVsbD09Uj8hMTpQLl9kcmF3TGFiZWwoUixVLEwsSyl9KX0pO3RoaXMuX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlJiZNJiZ0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihMKXtyZXR1cm4gUC5fbGFiZWxDb25maWcuZ2V0KEwpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pfTtPLnByb3RvdHlwZS5fZHJhd0xhYmVsPWZ1bmN0aW9uKFAsSCxLLE0pe3ZhciBMPXRoaXMuX2xhYmVsQ29uZmlnLmdldChLKSxSPUwubGFiZWxBcmVhLFU9TC5tZWFzdXJlcjtMPUwud3JpdGVyOwp2YXIgWT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGJhPVkoUCxILEspO1k9dGhpcy5sZW5ndGgoKS5zY2FsZTt2YXIgbWE9bnVsbCE9WT9ZLnNjYWxlKGJhKTpiYSxhYT1udWxsIT1ZP1kuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGNhPXt4Ok0ueChQLEgsSykseTpNLnkoUCxILEspfTtZPXt3aWR0aDpNLndpZHRoKFAsSCxLKSxoZWlnaHQ6TS5oZWlnaHQoUCxILEspfTtiYT10aGlzLl9sYWJlbEZvcm1hdHRlcihiYSxQLEgsSyk7VT1VLm1lYXN1cmUoYmEpO3ZhciBmYT10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihjYSxZLFUpO2NhPXRoaXMuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcyhjYSxZLFUsZmEsdGhpcy5faXNWZXJ0aWNhbD9tYTw9YWE6bWE8YWEpO21hPWNhLmNvbnRhaW5lckRpbWVuc2lvbnM7YWE9Y2EubGFiZWxDb250YWluZXJPcmlnaW47Y2E9Y2EuYWxpZ25tZW50O1A9TS5maWxsKFAsSCxLKTtSPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKFIsCmFhLGZhLFApO0wud3JpdGUoYmEsbWEud2lkdGgsbWEuaGVpZ2h0LHt4QWxpZ246Y2EueCx5QWxpZ246Y2EueX0sUi5ub2RlKCkpO3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP1kud2lkdGg8VS53aWR0aDpZLmhlaWdodDxVLmhlaWdodH07Ty5wcm90b3R5cGUuX3Nob3VsZFNob3dMYWJlbE9uQmFyPWZ1bmN0aW9uKFAsSCxLKXtpZih0aGlzLl9sYWJlbHNQb3NpdGlvbj09PWQuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTtQPXRoaXMuX2lzVmVydGljYWw/UC55OlAueDt2YXIgTT10aGlzLl9pc1ZlcnRpY2FsP0guaGVpZ2h0Okgud2lkdGg7SD10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpO0s9dGhpcy5faXNWZXJ0aWNhbD9LLmhlaWdodDpLLndpZHRoO3ZhciBMPVArTTtMPkg/TT1ILVA6MD5QJiYoTT1MKTtyZXR1cm4gSytPLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9TX07Ty5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz0KZnVuY3Rpb24oUCxILEssTSxMKXtmdW5jdGlvbiBSKGxhKXtzd2l0Y2gobGEpe2Nhc2UgInRvcExlZnQiOmFhPVUuX2lzVmVydGljYWw/InRvcCI6ImxlZnQiO2ZhKz1PLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjtkYSs9Ty5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7YnJlYWs7Y2FzZSAiY2VudGVyIjpkYSs9KGJhK21hKS8yO2JyZWFrO2Nhc2UgImJvdHRvbVJpZ2h0IjphYT1VLl9pc1ZlcnRpY2FsPyJib3R0b20iOiJyaWdodCIsZmEtPU8uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLGRhKz1jYS1PLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUi1tYX19dmFyIFU9dGhpcyxZPXRoaXMuX2lzVmVydGljYWw/UC55OlAueCxiYT10aGlzLl9pc1ZlcnRpY2FsP0guaGVpZ2h0Okgud2lkdGgsbWE9dGhpcy5faXNWZXJ0aWNhbD9LLmhlaWdodDpLLndpZHRoLGFhPSJjZW50ZXIiLGNhPWJhLGZhPVksZGE9WTtpZihNKXN3aXRjaCh0aGlzLl9sYWJlbHNQb3NpdGlvbil7Y2FzZSBkLkxhYmVsc1Bvc2l0aW9uLnN0YXJ0Okw/ClIoImJvdHRvbVJpZ2h0Iik6UigidG9wTGVmdCIpO2JyZWFrO2Nhc2UgZC5MYWJlbHNQb3NpdGlvbi5taWRkbGU6UigiY2VudGVyIik7YnJlYWs7Y2FzZSBkLkxhYmVsc1Bvc2l0aW9uLmVuZDpMP1IoInRvcExlZnQiKTpSKCJib3R0b21SaWdodCIpfWVsc2UgTD8oYWE9dGhpcy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIsY2E9YmErTy5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrbWEsZmEtPU8uX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK21hLGRhLT1PLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUittYSk6KGFhPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixjYT1iYStPLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUittYSxkYSs9YmErTy5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIpO3JldHVybntjb250YWluZXJEaW1lbnNpb25zOnt3aWR0aDp0aGlzLl9pc1ZlcnRpY2FsP0gud2lkdGg6Y2EsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/Y2E6SC5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ClAueDpmYSx5OnRoaXMuX2lzVmVydGljYWw/ZmE6UC55fSxsYWJlbE9yaWdpbjp7eDp0aGlzLl9pc1ZlcnRpY2FsP1AueCtILndpZHRoLzItSy53aWR0aC8yOmRhLHk6dGhpcy5faXNWZXJ0aWNhbD9kYTpQLnkrSC5oZWlnaHQvMi1LLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjphYSx5OnRoaXMuX2lzVmVydGljYWw/YWE6ImNlbnRlciJ9fX07Ty5wcm90b3R5cGUuX2NyZWF0ZUxhYmVsQ29udGFpbmVyPWZ1bmN0aW9uKFAsSCxLLE0pe1A9UC5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitILngrIiwgIitILnkrIikiKTtLPyhQLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLEs9MS42KkMuQ29sb3IuY29udHJhc3QoIndoaXRlIixNKTxDLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsTSksUC5jbGFzc2VkKEs/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApKTpQLmNsYXNzZWQoIm9mZi1iYXItbGFiZWwiLCEwKTsKcmV0dXJuIFB9O08ucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciBQPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIEg9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksSz10aGlzLmxlbmd0aCgpLnNjYWxlLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxNPXRoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIjtIW3RoaXMuX2lzVmVydGljYWw/InkiOiJ4Il09ZnVuY3Rpb24oKXtyZXR1cm4gS307SFtNXT1mdW5jdGlvbigpe3JldHVybiAwfTtQLnB1c2goe2F0dHJUb1Byb2plY3RvcjpILGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEYuQW5pbWF0b3IuUkVTRVQpfSl9UC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoRi5BbmltYXRvci5NQUlOKX0pO3JldHVybiBQfTtPLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9CmZ1bmN0aW9uKCl7ZnVuY3Rpb24gUChjYSxmYSxkYSl7cmV0dXJuIE1hdGguYWJzKE0tWShjYSxmYSxkYSkpfXZhciBIPXRoaXMsSz1JLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxNPXRoaXMubGVuZ3RoKCkuc2NhbGUuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLEw9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLFI9dGhpcy5faXNWZXJ0aWNhbD8ieCI6InkiLFU9RC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLFk9RC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmxlbmd0aCgpKSxiYT1LW08uX0JBUl9USElDS05FU1NfS0VZXSxtYT1LLmdhcCxhYT1udWxsPT1tYT9iYTpmdW5jdGlvbihjYSxmYSxkYSl7cmV0dXJuIGJhKGNhLGZhLGRhKS1tYShjYSxmYSxkYSl9O0sud2lkdGg9dGhpcy5faXNWZXJ0aWNhbD9hYTpQO0suaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/UDphYTtLW0xdPWZ1bmN0aW9uKGNhLGZhLGRhKXtjYT0KWShjYSxmYSxkYSk7cmV0dXJuIGNhPk0/TTpjYX07S1tSXT1mdW5jdGlvbihjYSxmYSxkYSl7cmV0dXJuIEguX2dldFBvc2l0aW9uQXR0cihVKGNhLGZhLGRhKSxiYShjYSxmYSxkYSkpfTtyZXR1cm4gS307Ty5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLEg9dGhpcy5wb3NpdGlvbigpLEs9dGhpcy5iYXJFbmQoKTtudWxsIT1IJiZudWxsIT1LPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cihPLl9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihNLEwsUil7dmFyIFU9SC5hY2Nlc3NvcihNLEwsUik7TT1LLmFjY2Vzc29yKE0sTCxSKTtVPUguc2NhbGU/SC5zY2FsZS5zY2FsZShVKTpVO009Sy5zY2FsZT9LLnNjYWxlLnNjYWxlKE0pOk07cmV0dXJuIE1hdGguYWJzKE0tVSl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKE8uX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIFAuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9OwpPLnByb3RvdHlwZS5fYmFyUGl4ZWxUaGlja25lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowOjB9O08ucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKFApe3ZvaWQgMD09PVAmJihQPXRoaXMuZGF0YXNldHMoKSk7cmV0dXJuIHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpP0kucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxQKTpbXX07Ty5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5fcGl4ZWxCb3VuZHMoUC5kYXR1bSxQLmluZGV4LFAuZGF0YXNldCl9O08ucHJvdG90eXBlLl9waXhlbEJvdW5kcz1mdW5jdGlvbihQLEgsSyl7dmFyIE09dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7CnJldHVybnt4Ok0ueChQLEgsSykseTpNLnkoUCxILEspLHdpZHRoOk0ud2lkdGgoUCxILEspLGhlaWdodDpNLmhlaWdodChQLEgsSyl9fTtPLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihQLEgsSyl7dmFyIE09dGhpcy5fcGl4ZWxCb3VuZHMoUCxILEspO1A9KHRoaXMuX2lzVmVydGljYWw/RC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6RC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKFAsSCxLKTtIPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoUCxILE0pfTtPLnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihQLEgsSyl7aWYodGhpcy5faXNWZXJ0aWNhbCl7dmFyIE09Sy54K0sud2lkdGgvMjtQPVA8PUg/Sy55OksueStLLmhlaWdodH1lbHNlIE09UD49SD9LLngrSy53aWR0aDpLLngsUD1LLnkrSy5oZWlnaHQvCjI7cmV0dXJue3g6TSx5OlB9fTtPLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24oUCxIKXtJLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLFAsSCl9O08ucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIFA9dGhpcyxIPW5ldyBDLk1hcCxLPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLE09dGhpcy53aWR0aCgpLEw9dGhpcy5oZWlnaHQoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihSKXt2YXIgVT1SLmRhdGEoKS5tYXAoZnVuY3Rpb24oWSxiYSl7cmV0dXJuIFAuX2lzRGF0dW1PblNjcmVlbihLLE0sTCxZLGJhLFIpP1k6bnVsbH0pO0guc2V0KFIsVSl9KTtyZXR1cm4gSH07Ty5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihQLEgsSyxNLEwsUil7dmFyIFU9UC54KE0sTCxSKSxZPVAueShNLEwsUiksYmE9UC53aWR0aChNLEwsUik7UD1QLmhlaWdodChNLEwsUik7cmV0dXJuIEMuTWF0aC5pc1ZhbGlkTnVtYmVyKFUpJiYKQy5NYXRoLmlzVmFsaWROdW1iZXIoWSkmJkMuTWF0aC5pc1ZhbGlkTnVtYmVyKGJhKSYmQy5NYXRoLmlzVmFsaWROdW1iZXIoUCk/Qy5NYXRoLmJvdW5kc0ludGVyc2VjdHMoVSxZLGJhLFAsSCxLKTohMX07cmV0dXJuIE99KGYuWFlQbG90KTtCLl9CQVJfVEhJQ0tORVNTX1JBVElPPS45NTtCLl9TSU5HTEVfQkFSX0RJTUVOU0lPTl9SQVRJTz0uNDtCLl9CQVJfQVJFQV9DTEFTUz0iYmFyLWFyZWEiO0IuX0JBUl9FTkRfS0VZPSJiYXJFbmQiO0IuX0JBUl9USElDS05FU1NfS0VZPSJ3aWR0aCI7Qi5fTEFCRUxfQVJFQV9DTEFTUz0iYmFyLWxhYmVsLXRleHQtYXJlYSI7Qi5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI9MTA7ZC5CYXI9Qn0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih2LHkpe2Z1bmN0aW9uIHooKXt0aGlzLmNvbnN0cnVjdG9yPXZ9Zm9yKHZhciB4IGluIHkpeS5oYXNPd25Qcm9wZXJ0eSh4KSYmKHZbeF09eVt4XSk7di5wcm90b3R5cGU9Cm51bGw9PT15P09iamVjdC5jcmVhdGUoeSk6KHoucHJvdG90eXBlPXkucHJvdG90eXBlLG5ldyB6KX0sbD1mKDEpLGs9Zig1KSxuPWYoOCkscD1mKDMpLHE9ZigwKTtjPWYoMTApO3ZhciByPWYoMjIpO2QuVGltZUludGVydmFsPWMubWFrZUVudW0oInNlY29uZCBtaW51dGUgaG91ciBkYXkgd2VlayBtb250aCB5ZWFyIi5zcGxpdCgiICIpKTtkLlRpbWVBeGlzT3JpZW50YXRpb249Yy5tYWtlRW51bShbInRvcCIsImJvdHRvbSJdKTtkLlRpZXJMYWJlbFBvc2l0aW9uPWMubWFrZUVudW0oWyJiZXR3ZWVuIiwiY2VudGVyIl0pO2Y9ZnVuY3Rpb24odil7ZnVuY3Rpb24geSh6LHgpe3o9di5jYWxsKHRoaXMseix4KXx8dGhpczt6Ll9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbDt6Ll90aWVyTGFiZWxQb3NpdGlvbnM9W107ei5hZGRDbGFzcygidGltZS1heGlzIik7ei50aWNrTGFiZWxQYWRkaW5nKDUpO3ouYXhpc0NvbmZpZ3VyYXRpb25zKHkuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKTsKei5hbm5vdGF0aW9uRm9ybWF0dGVyKG4udGltZSgiJWEgJWIgJWQsICVZIikpO3JldHVybiB6fWcoeSx2KTt5LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24oeil7aWYobnVsbD09eilyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCF6LmV2ZXJ5KGZ1bmN0aW9uKHgpe3JldHVybiJiZXR3ZWVuIj09PXgudG9Mb3dlckNhc2UoKXx8ImNlbnRlciI9PT14LnRvTG93ZXJDYXNlKCl9KSl0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgcG9zaXRpb24gZm9yIHRpZXIgbGFiZWxzIik7dGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXo7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUubWF4VGltZUludGVydmFsUHJlY2lzaW9uPWZ1bmN0aW9uKHope2lmKG51bGw9PXopcmV0dXJuIHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbjt0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ejt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTt5LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XX07eS5wcm90b3R5cGUuYXhpc0NvbmZpZ3VyYXRpb25zPWZ1bmN0aW9uKHope2lmKG51bGwhPXope3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz16O3RoaXMuX251bVRpZXJzPXEuTWF0aC5tYXgodGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLm1hcChmdW5jdGlvbihGKXtyZXR1cm4gRi5sZW5ndGh9KSwwKTt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9zZXR1cERvbUVsZW1lbnRzKCk7ej10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpO2Zvcih2YXIgeD1bXSxDPTA7Qzx0aGlzLl9udW1UaWVycztDKyspeC5wdXNoKHpbQ118fCJiZXR3ZWVuIik7dGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoeCk7dGhpcy5yZWRyYXcoKX19O3kucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD0KZnVuY3Rpb24oKXt2YXIgej10aGlzLHg9dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmxlbmd0aDt0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihDLEYpe0Y8eCYmQy5ldmVyeShmdW5jdGlvbihEKXtyZXR1cm4gei5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKEQpfSkmJih4PUYpfSk7eD09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihxLldpbmRvdy53YXJuKCJ6b29tZWQgb3V0IHRvbyBmYXI6IGNvdWxkIG5vdCBmaW5kIHN1aXRhYmxlIGludGVydmFsIHRvIGRpc3BsYXkgbGFiZWxzIiksLS14KTtyZXR1cm4geH07eS5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24oeil7aWYoeiYmKCJyaWdodCI9PT16LnRvTG93ZXJDYXNlKCl8fCJsZWZ0Ij09PXoudG9Mb3dlckNhc2UoKSkpdGhyb3cgRXJyb3IoeisiIGlzIG5vdCBhIHN1cHBvcnRlZCBvcmllbnRhdGlvbiBmb3IgVGltZUF4aXMgLSBvbmx5IGhvcml6b250YWwgb3JpZW50YXRpb25zIGFyZSBzdXBwb3J0ZWQiKTsKcmV0dXJuIHYucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyx6KX07eS5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgej10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgeD0wO3g8dGhpcy5fbnVtVGllcnM7eCsrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2goeit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsoImJldHdlZW4iPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW3hdPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gbC5zdW0odGhpcy5fdGllckhlaWdodHMpfTt5LnByb3RvdHlwZS5fZ2V0SW50ZXJ2YWxMZW5ndGg9ZnVuY3Rpb24oeil7dmFyIHg9dGhpcy5fc2NhbGUuZG9tYWluKClbMF07ej1wLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoei5pbnRlcnZhbCkub2Zmc2V0KHgsei5zdGVwKTtyZXR1cm4gej50aGlzLl9zY2FsZS5kb21haW4oKVsxXT90aGlzLndpZHRoKCk6Ck1hdGguYWJzKHRoaXMuX3NjYWxlLnNjYWxlKHopLXRoaXMuX3NjYWxlLnNjYWxlKHgpKX07eS5wcm90b3R5cGUuX21heFdpZHRoRm9ySW50ZXJ2YWw9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuX21lYXN1cmVyLm1lYXN1cmUoei5mb3JtYXR0ZXIoeS5fTE9OR19EQVRFKSkud2lkdGh9O3kucHJvdG90eXBlLl9jaGVja1RpbWVBeGlzVGllckNvbmZpZ3VyYXRpb249ZnVuY3Rpb24oeil7aWYobnVsbCE9dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uKXt2YXIgeD15Ll9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWFt0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb25dLEM9eS5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbei5pbnRlcnZhbF07aWYobnVsbCE9eCYmbnVsbCE9QyYmQzx4KXJldHVybiExfXg9dGhpcy5fbWF4V2lkdGhGb3JJbnRlcnZhbCh6KSsyKnRoaXMudGlja0xhYmVsUGFkZGluZygpO3JldHVybiBNYXRoLm1pbih0aGlzLl9nZXRJbnRlcnZhbExlbmd0aCh6KSwKdGhpcy53aWR0aCgpKT49eH07eS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24oeix4KXt2YXIgQz12LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlci5jYWxsKHRoaXMseix4KTt6PXRoaXMuX3RpZXJIZWlnaHRzLnJlZHVjZShmdW5jdGlvbihGLEQpe3JldHVybiBGK0Q+Qy5oZWlnaHQ/RjpGK0R9KTt4PXRoaXMubWFyZ2luKCkrKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCkqdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKTowKTtDLmhlaWdodD1NYXRoLm1pbihDLmhlaWdodCx6K3gpO3JldHVybiBDfTt5LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9zZXR1cERvbUVsZW1lbnRzKCl9O3kucHJvdG90eXBlLl9zZXR1cERvbUVsZW1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIuIit5LlRJTUVfQVhJU19USUVSX0NMQVNTKS5yZW1vdmUoKTsKdGhpcy5fdGllckxhYmVsQ29udGFpbmVycz1bXTt0aGlzLl90aWVyTWFya0NvbnRhaW5lcnM9W107dGhpcy5fdGllckJhc2VsaW5lcz1bXTt0aGlzLl90aWNrTGFiZWxDb250YWluZXIucmVtb3ZlKCk7dGhpcy5fYmFzZWxpbmUucmVtb3ZlKCk7Zm9yKHZhciB6PTA7ejx0aGlzLl9udW1UaWVyczsrK3ope3ZhciB4PXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5USU1FX0FYSVNfVElFUl9DTEFTUywhMCk7dGhpcy5fdGllckxhYmVsQ29udGFpbmVycy5wdXNoKHguYXBwZW5kKCJnIikuY2xhc3NlZChyLkF4aXMuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApKTt0aGlzLl90aWVyTWFya0NvbnRhaW5lcnMucHVzaCh4LmFwcGVuZCgiZyIpLmNsYXNzZWQoci5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKTt0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2goeC5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX16PW5ldyBrLlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpOwp0aGlzLl9tZWFzdXJlcj1uZXcgay5DYWNoZU1lYXN1cmVyKHopfTt5LnByb3RvdHlwZS5fZ2V0VGlja0ludGVydmFsVmFsdWVzPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLl9zY2FsZS50aWNrSW50ZXJ2YWwoei5pbnRlcnZhbCx6LnN0ZXApfTt5LnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3ZhciB6PXRoaXM7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XS5yZWR1Y2UoZnVuY3Rpb24oeCxDKXtyZXR1cm4geC5jb25jYXQoei5fZ2V0VGlja0ludGVydmFsVmFsdWVzKEMpKX0sW10pfTt5LnByb3RvdHlwZS5fY2xlYW5UaWVycz1mdW5jdGlvbigpe2Zvcih2YXIgej0wO3o8dGhpcy5fdGllckxhYmVsQ29udGFpbmVycy5sZW5ndGg7eisrKXRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbel0uc2VsZWN0QWxsKCIuIityLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3pdLnNlbGVjdEFsbCgiLiIrCnIuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbel0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX07eS5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHope3o9dGhpcy5fc2NhbGUudGlja0ludGVydmFsKHouaW50ZXJ2YWwsei5zdGVwKTt2YXIgeD10aGlzLl9zY2FsZS5kb21haW4oKSxDPXoubWFwKGZ1bmN0aW9uKEYpe3JldHVybiBGLnZhbHVlT2YoKX0pOy0xPT09Qy5pbmRleE9mKHhbMF0udmFsdWVPZigpKSYmei51bnNoaWZ0KHhbMF0pOy0xPT09Qy5pbmRleE9mKHhbMV0udmFsdWVPZigpKSYmei5wdXNoKHhbMV0pO3JldHVybiB6fTt5LnByb3RvdHlwZS5fcmVuZGVyVGllckxhYmVscz1mdW5jdGlvbih6LHgsQyl7dmFyIEY9dGhpcyxEPXRoaXMuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uKHgpLEI9W107ImJldHdlZW4iPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW0NdJiYKMT09PXguc3RlcD9ELm1hcChmdW5jdGlvbihLLE0pe00rMT49RC5sZW5ndGh8fEIucHVzaChuZXcgRGF0ZSgoRFtNKzFdLnZhbHVlT2YoKS1EW01dLnZhbHVlT2YoKSkvMitEW01dLnZhbHVlT2YoKSkpfSk6Qj1EO3o9ei5zZWxlY3RBbGwoIi4iK3IuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKEIsZnVuY3Rpb24oSyl7cmV0dXJuIFN0cmluZyhLLnZhbHVlT2YoKSl9KTt2YXIgST16LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChyLkF4aXMuVElDS19MQUJFTF9DTEFTUywhMCk7SS5hcHBlbmQoInRleHQiKTt2YXIgTz0iY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tDXXx8MT09PXguc3RlcD8wOnRoaXMudGlja0xhYmVsUGFkZGluZygpO3ZhciBQPSJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpP2wuc3VtKHRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsQysxKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6ImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbQ10/CnRoaXMuaGVpZ2h0KCktbC5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxDKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6dGhpcy5oZWlnaHQoKS1sLnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLEMpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTtJPXoubWVyZ2UoSSk7dmFyIEg9SS5zZWxlY3RBbGwoInRleHQiKTswPEguc2l6ZSgpJiZILmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK08rIiwiK1ArIikiKTt6LmV4aXQoKS5yZW1vdmUoKTtJLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSyl7cmV0dXJuInRyYW5zbGF0ZSgiK0YuX3NjYWxlLnNjYWxlKEspKyIsMCkifSk7Qz0iY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tDXXx8MT09PXguc3RlcD8ibWlkZGxlIjoic3RhcnQiO0kuc2VsZWN0QWxsKCJ0ZXh0IikudGV4dCh4LmZvcm1hdHRlcikuc3R5bGUoInRleHQtYW5jaG9yIixDKX07eS5wcm90b3R5cGUuX3JlbmRlclRpY2tNYXJrcz0KZnVuY3Rpb24oeix4KXt6PXRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1t4XS5zZWxlY3RBbGwoIi4iK3IuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEoeik7dmFyIEM9ei5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoci5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2UoeiksRj10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSxEPXRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAseCkucmVkdWNlKGZ1bmN0aW9uKEIsSSl7cmV0dXJuIEIrSX0sMCk7ImJvdHRvbSI9PT10aGlzLm9yaWVudGF0aW9uKCk/KEYueTE9RCxGLnkyPUQrKCJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW3hdP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbeF0pKTooRi55MT10aGlzLmhlaWdodCgpLUQsRi55Mj10aGlzLmhlaWdodCgpLShEKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1t4XT90aGlzLmlubmVyVGlja0xlbmd0aCgpOgp0aGlzLl90aWVySGVpZ2h0c1t4XSkpKTtDLmF0dHJzKEYpOyJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhGLnkxPUQsRi55Mj1EKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1t4XT90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1t4XSkpOihGLnkxPXRoaXMuaGVpZ2h0KCktRCxGLnkyPXRoaXMuaGVpZ2h0KCktKEQrKCJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW3hdP3RoaXMuZW5kVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW3hdKSkpO2wuc2VsZWN0KEMubm9kZXMoKVswXSkuYXR0cnMoRik7bC5zZWxlY3QoQy5ub2RlcygpW0Muc2l6ZSgpLTFdKS5hdHRycyhGKTtsLnNlbGVjdChDLm5vZGVzKClbMF0pLmNsYXNzZWQoci5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApO2wuc2VsZWN0KEMubm9kZXMoKVtDLnNpemUoKS0xXSkuY2xhc3NlZChyLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCk7ei5leGl0KCkucmVtb3ZlKCl9Owp5LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHope3o9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIityLkF4aXMuVElDS19NQVJLX0NMQVNTKS5kYXRhKHopO3ZhciB4PXouZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHIuQXhpcy5USUNLX01BUktfQ0xBU1MsITApLm1lcmdlKHopLEM9dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCk7Qy55Mj0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTp0aGlzLmhlaWdodCgpLXRoaXMudGlja0xhYmVsUGFkZGluZygpO3guYXR0cnMoQyk7ei5leGl0KCkucmVtb3ZlKCl9O3kucHJvdG90eXBlLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIDE+dGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleD9bXTp0aGlzLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXModGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXgtCjFdWzBdKX07eS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgej10aGlzO3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXg9dGhpcy5fZ2V0TW9zdFByZWNpc2VDb25maWd1cmF0aW9uSW5kZXgoKTt2YXIgeD10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleF07dGhpcy5fY2xlYW5UaWVycygpO3guZm9yRWFjaChmdW5jdGlvbihJLE8pe3JldHVybiB6Ll9yZW5kZXJUaWVyTGFiZWxzKHouX3RpZXJMYWJlbENvbnRhaW5lcnNbT10sSSxPKX0pO2Zvcih2YXIgQz14Lm1hcChmdW5jdGlvbihJKXtyZXR1cm4gei5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oSSl9KSxGPTAsRD0wO0Q8TWF0aC5tYXgoeC5sZW5ndGgsMSk7KytEKXt2YXIgQj10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtCLnkxKz0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT9GOi1GO0IueTI9Qi55MTsKdGhpcy5fdGllckJhc2VsaW5lc1tEXS5hdHRycyhCKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKTtGKz10aGlzLl90aWVySGVpZ2h0c1tEXX1GPVtdO0Q9dGhpcy5fc2NhbGUuZG9tYWluKCk7RD10aGlzLl9zY2FsZS5zY2FsZShEWzFdKS10aGlzLl9zY2FsZS5zY2FsZShEWzBdKTsxLjUqdGhpcy5fZ2V0SW50ZXJ2YWxMZW5ndGgoeFswXSk+PUQmJihGPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSk7dGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKEYpO3RoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKEQ9MDtEPHgubGVuZ3RoOysrRCl0aGlzLl9yZW5kZXJUaWNrTWFya3MoQ1tEXSxEKSx0aGlzLl9oaWRlT3ZlcmxhcHBpbmdBbmRDdXRPZmZMYWJlbHMoRCk7dGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpO3JldHVybiB0aGlzfTt5LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGllcnM9CmZ1bmN0aW9uKCl7dmFyIHo9dGhpcyx4PXRoaXMuaGVpZ2h0KCksQz0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIreS5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24oRixEKXtDKz16Ll90aWVySGVpZ2h0c1tEXTtyZXR1cm4gQzw9eD8iaW5oZXJpdCI6ImhpZGRlbiJ9KX07eS5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbih6KXtmdW5jdGlvbiB4KEkpe3JldHVybiBNYXRoLmZsb29yKEYubGVmdCk8PU1hdGguY2VpbChJLmxlZnQpJiZNYXRoLmZsb29yKEYudG9wKTw9TWF0aC5jZWlsKEkudG9wKSYmTWF0aC5mbG9vcihJLnJpZ2h0KTw9TWF0aC5jZWlsKEYubGVmdCtDLndpZHRoKCkpJiZNYXRoLmZsb29yKEkuYm90dG9tKTw9TWF0aC5jZWlsKEYudG9wK0MuaGVpZ2h0KCkpfXZhciBDPXRoaXMsRj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbel0uc2VsZWN0QWxsKCIuIisKci5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIEk9bC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4idmlzaWJsZSI9PT1JfHwiaW5oZXJpdCI9PT1JfSkubm9kZXMoKS5tYXAoZnVuY3Rpb24oSSl7cmV0dXJuIEkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxCO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbel0uc2VsZWN0QWxsKCIuIityLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIEk9bC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4idmlzaWJsZSI9PT1JfHwiaW5oZXJpdCI9PT1JfSkuZWFjaChmdW5jdGlvbihJLE8pe0k9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgUD1sLnNlbGVjdCh0aGlzKSxIPURbT10sSz1EW08rMV07Tz1udWxsIT1CJiZxLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoSSxCKTtIPW51bGwhPUgmJnEuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChJLApIKTtLPW51bGwhPUsmJnEuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChJLEspOyF4KEkpfHxPfHxIfHxLP1Auc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKTooQj1JLFAuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IikpfSl9O3kucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3YucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpO3RoaXMuX21lYXN1cmVyLnJlc2V0KCl9O3JldHVybiB5fShyLkF4aXMpO2YuVElNRV9BWElTX1RJRVJfQ0xBU1M9InRpbWUtYXhpcy10aWVyIjtmLl9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWD0odD17fSx0W2QuVGltZUludGVydmFsLnNlY29uZF09MCx0W2QuVGltZUludGVydmFsLm1pbnV0ZV09MSx0W2QuVGltZUludGVydmFsLmhvdXJdPTIsdFtkLlRpbWVJbnRlcnZhbC5kYXldPTMsdFtkLlRpbWVJbnRlcnZhbC53ZWVrXT00LHRbZC5UaW1lSW50ZXJ2YWwubW9udGhdPTUsdFtkLlRpbWVJbnRlcnZhbC55ZWFyXT0KNix0KTtmLl9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUz1bW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDo1LGZvcm1hdHRlcjpuLnRpbWUoIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bi50aW1lKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTUsCmZvcm1hdHRlcjpuLnRpbWUoIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDozMCxmb3JtYXR0ZXI6bi50aW1lKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bi50aW1lKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlQiAlZSwgJVkiKX1dLApbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuLnRpbWUoIiVJOiVNICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxNSxmb3JtYXR0ZXI6bi50aW1lKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MzAsZm9ybWF0dGVyOm4udGltZSgiJUk6JU0gJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVJICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksCnN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4udGltZSgiJUkgJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLmhvdXIsc3RlcDo2LGZvcm1hdHRlcjpuLnRpbWUoIiVJICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6MTIsZm9ybWF0dGVyOm4udGltZSgiJUkgJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4udGltZSgiJWEgJWUiKX0sCntpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4udGltZSgiJUIgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlZSIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVCICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlQiIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiViIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4udGltZSgiJWIiKX0sCntpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bi50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4udGltZSgiJWIiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuLnRpbWUoIiV5Iil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDo1LGZvcm1hdHRlcjpuLnRpbWUoIiVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoyNSxmb3JtYXR0ZXI6bi50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4udGltZSgiJVkiKX1dLApbe2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoxMDAsZm9ybWF0dGVyOm4udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bi50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAwLGZvcm1hdHRlcjpuLnRpbWUoIiVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoxRTMsZm9ybWF0dGVyOm4udGltZSgiJVkiKX1dXTtmLl9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpO2QuVGltZT1mO3ZhciB0fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGssbil7ZnVuY3Rpb24gcCgpe3RoaXMuY29uc3RydWN0b3I9a31mb3IodmFyIHEgaW4gbiluLmhhc093blByb3BlcnR5KHEpJiYoa1txXT1uW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihwLnByb3RvdHlwZT0Kbi5wcm90b3R5cGUsbmV3IHApfSxsPWYoMTIpO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbigpe3ZhciBwPWsuY2FsbCh0aGlzKXx8dGhpcztwLl9kZXRhY2hDYWxsYmFjaz1mdW5jdGlvbihxKXtyZXR1cm4gcC5yZW1vdmUocSl9O3JldHVybiBwfWcobixrKTtuLnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocCl7dmFyIHE9dGhpcztwPWwuY29lcmNlRXh0ZXJuYWxEMyhwKTtrLnByb3RvdHlwZS5hbmNob3IuY2FsbCh0aGlzLHApO3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuYW5jaG9yKHEuZWxlbWVudCgpKX0pO3JldHVybiB0aGlzfTtuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHApe3JldHVybiBwLnJlbmRlcigpfSk7cmV0dXJuIHRoaXN9O24ucHJvdG90eXBlLmhhcz1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJoYXMoKSBpcyBub3QgaW1wbGVtZW50ZWQgb24gQ29tcG9uZW50Q29udGFpbmVyIik7fTtuLnByb3RvdHlwZS5fYWRvcHRBbmRBbmNob3I9CmZ1bmN0aW9uKHApe3AucGFyZW50KHRoaXMpO3Aub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spO3RoaXMuX2lzQW5jaG9yZWQmJnAuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX07bi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHApe3RoaXMuaGFzKHApJiYocC5vZmZEZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX3JlbW92ZShwKSxwLmRldGFjaCgpLHRoaXMucmVkcmF3KCkpO3JldHVybiB0aGlzfTtuLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKCl7fTtuLnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJfZm9yRWFjaCgpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKTt9O24ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtrLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy5fZm9yRWFjaChmdW5jdGlvbihwKXtyZXR1cm4gcC5kZXN0cm95KCl9KX07bi5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPQpmdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW52YWxpZGF0ZUNhY2hlKCl9KX07cmV0dXJuIG59KGYoNCkuQ29tcG9uZW50KTtkLkNvbXBvbmVudENvbnRhaW5lcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyh5KXtxLmFkZCh5KTtwLmFkZCh5KTtsKCl9ZnVuY3Rpb24gbCgpe3J8fChyPSEwLHYucmVuZGVyKCkpfXZhciBrPWYoMCk7Yz1mKDEwKTt2YXIgbj1mKDM5KSxwPW5ldyBrLlNldCxxPW5ldyBrLlNldCxyPSExLHQ9ITE7ZC5Qb2xpY3k9Yy5tYWtlRW51bShbImltbWVkaWF0ZSIsImFuaW1hdGlvbkZyYW1lIiwidGltZW91dCJdKTt2YXIgdj1uZXcgbi5BbmltYXRpb25GcmFtZTtkLnJlbmRlclBvbGljeT1mdW5jdGlvbigpe3ZhciB5PVBsb3R0YWJsZS5SZW5kZXJDb250cm9sbGVyLlBvbGljeS5pbW1lZGlhdGU7aWYobnVsbCE9eSlzd2l0Y2goeSl7Y2FzZSBkLlBvbGljeS5pbW1lZGlhdGU6dj1uZXcgbi5JbW1lZGlhdGU7YnJlYWs7CmNhc2UgZC5Qb2xpY3kuYW5pbWF0aW9uRnJhbWU6dj1uZXcgbi5BbmltYXRpb25GcmFtZTticmVhaztjYXNlIGQuUG9saWN5LnRpbWVvdXQ6dj1uZXcgbi5UaW1lb3V0O2JyZWFrO2RlZmF1bHQ6ay5XaW5kb3cud2FybigiVW5yZWNvZ25pemVkIHJlbmRlclBvbGljeTogIit5KX19O2QucmVnaXN0ZXJUb1JlbmRlcj1mdW5jdGlvbih5KXt0JiZrLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpO3AuYWRkKHkpO2woKX07ZC5yZWdpc3RlclRvQ29tcHV0ZUxheW91dEFuZFJlbmRlcj1nO2QucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oeSl7Zyh5KX07ZC5mbHVzaD1mdW5jdGlvbigpe2lmKHIpe3EuZm9yRWFjaChmdW5jdGlvbih6KXtyZXR1cm4gei5jb21wdXRlTGF5b3V0KCl9KTtwLmZvckVhY2goZnVuY3Rpb24oeil7cmV0dXJuIHoucmVuZGVyKCl9KTsKdD0hMDt2YXIgeT1uZXcgay5TZXQ7cC5mb3JFYWNoKGZ1bmN0aW9uKHope3RyeXt6LnJlbmRlckltbWVkaWF0ZWx5KCl9Y2F0Y2goeCl7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB4O30sMCkseS5hZGQoeil9fSk7cT1uZXcgay5TZXQ7cD15O3Q9cj0hMX19fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigxKTtkLmNpcmNsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sQ2lyY2xlKS5zaXplKE1hdGguUEkqTWF0aC5wb3coay8yLDIpKX19O2Quc3F1YXJlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiBnLnN5bWJvbCgpLnR5cGUoZy5zeW1ib2xTcXVhcmUpLnNpemUoTWF0aC5wb3coaywyKSl9fTtkLmNyb3NzPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiBnLnN5bWJvbCgpLnR5cGUoZy5zeW1ib2xDcm9zcykuc2l6ZSg1LzkqTWF0aC5wb3coaywyKSl9fTtkLmRpYW1vbmQ9CmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiBnLnN5bWJvbCgpLnR5cGUoZy5zeW1ib2xEaWFtb25kKS5zaXplKE1hdGgudGFuKE1hdGguUEkvNikqTWF0aC5wb3coaywyKS8yKX19O2QudHJpYW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayl7cmV0dXJuIGcuc3ltYm9sKCkudHlwZShnLnN5bWJvbFRyaWFuZ2xlKS5zaXplKE1hdGguc3FydCgzKSpNYXRoLnBvdyhrLzIsMikpfX07ZC5zdGFyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiBnLnN5bWJvbCgpLnR5cGUoZy5zeW1ib2xTdGFyKS5zaXplKC44OTA4MTMwOTE1MjkyODUyKk1hdGgucG93KGsvMiwyKSl9fTt2YXIgbD0zKigxL01hdGguc3FydCgxMikvMisxKTtkLnd5ZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sV3llKS5zaXplKGwqTWF0aC5wb3coay8yLjQsMikpfX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz0KdGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cX1mb3IodmFyIHYgaW4gcilyLmhhc093blByb3BlcnR5KHYpJiYocVt2XT1yW3ZdKTtxLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOih0LnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgdCl9LGw9ZigyNSksaz1mKDApLG49ZigxMikscD1mKDM3KTtjPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHIoKXt2YXIgdD1xLmNhbGwodGhpcyl8fHRoaXM7dC5fZGV0ZWN0aW9uUmFkaXVzPTM7dC5fcmVzaXphYmxlPSExO3QuX21vdmFibGU9ITE7dC5faGFzQ29ybmVycz0hMDt0LmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpO3QuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbC5EcmFnO3QuX3NldFVwQ2FsbGJhY2tzKCk7dC5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHQpO3QuX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDt0Ll9kcmFnQ2FsbGJhY2tzPQpuZXcgay5DYWxsYmFja1NldDt0Ll9kcmFnRW5kQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3JldHVybiB0fWcocixxKTtyLnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KEksTyl7MD09PUImJkkueD09PU8ueCYmSS55PT09Ty55JiZ6LmJveFZpc2libGUoITEpO3ouX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh6LmJvdW5kcygpKX1mdW5jdGlvbiB2KEksTyl7c3dpdGNoKEIpe2Nhc2UgMDpGLng9Ty54O0YueT1PLnk7YnJlYWs7Y2FzZSAxOnguYm90dG9tP0YueT1PLnk6eC50b3AmJihDLnk9Ty55KTt4LnJpZ2h0P0YueD1PLng6eC5sZWZ0JiYoQy54PU8ueCk7YnJlYWs7Y2FzZSAyOkk9Ty54LUQueDt2YXIgUD1PLnktRC55O0MueCs9STtDLnkrPVA7Ri54Kz1JO0YueSs9UDtEPU99ei5fc2V0Qm91bmRzKHt0b3BMZWZ0OkMsYm90dG9tUmlnaHQ6Rn0pO3ouX3hCb3VuZHNNb2RlPT09cC5Qcm9wZXJ0eU1vZGUuVkFMVUUmJm51bGwhPQp6LnhTY2FsZSgpJiZ6Ll9zZXRYRXh0ZW50KFt6LnhTY2FsZSgpLmludmVydChDLngpLHoueFNjYWxlKCkuaW52ZXJ0KEYueCldKTt6Ll95Qm91bmRzTW9kZT09PXAuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT16LnlTY2FsZSgpJiZ6Ll9zZXRZRXh0ZW50KFt6LnlTY2FsZSgpLmludmVydChDLnkpLHoueVNjYWxlKCkuaW52ZXJ0KEYueSldKTt6LnJlbmRlcigpO3ouX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh6LmJvdW5kcygpKX1mdW5jdGlvbiB5KEkpe3g9ei5fZ2V0UmVzaXppbmdFZGdlcyhJKTt2YXIgTz16LmJvdW5kcygpO089Ty50b3BMZWZ0Lng8PUkueCYmSS54PD1PLmJvdHRvbVJpZ2h0LngmJk8udG9wTGVmdC55PD1JLnkmJkkueTw9Ty5ib3R0b21SaWdodC55O3ouYm94VmlzaWJsZSgpJiYoeC50b3B8fHguYm90dG9tfHx4LmxlZnR8fHgucmlnaHQpP0I9MTp6LmJveFZpc2libGUoKSYmei5tb3ZhYmxlKCkmJk8/Qj0yOihCPTAsei5fc2V0Qm91bmRzKHt0b3BMZWZ0OkksCmJvdHRvbVJpZ2h0Okl9KSx6Ll94Qm91bmRzTW9kZT09PXAuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT16LnhTY2FsZSgpJiZ6Ll9zZXRYRXh0ZW50KFt6LnhTY2FsZSgpLmludmVydChJLngpLHoueFNjYWxlKCkuaW52ZXJ0KEkueCldKSx6Ll95Qm91bmRzTW9kZT09PXAuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT16LnlTY2FsZSgpJiZ6Ll9zZXRZRXh0ZW50KFt6LnlTY2FsZSgpLmludmVydChJLnkpLHoueVNjYWxlKCkuaW52ZXJ0KEkueSldKSx6LnJlbmRlcigpKTt6LmJveFZpc2libGUoITApO089ei5ib3VuZHMoKTtDPXt4Ok8udG9wTGVmdC54LHk6Ty50b3BMZWZ0Lnl9O0Y9e3g6Ty5ib3R0b21SaWdodC54LHk6Ty5ib3R0b21SaWdodC55fTtEPUk7ei5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoTyl9dmFyIHo9dGhpcyx4LEMsRixELEI9MDt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoeSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyh2KTsKdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZCh0KTt0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt6Ll9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KHkpO3ouX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHYpO3ouX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKHQpO3ouX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX19O3IucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gdi5fYm94LmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KX12YXIgdj10aGlzO3EucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3RoaXMuX2RldGVjdGlvbkVkZ2VUPXQoKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKTt0aGlzLl9kZXRlY3Rpb25FZGdlQj10KCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCk7dGhpcy5fZGV0ZWN0aW9uRWRnZUw9CnQoKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKTt0aGlzLl9kZXRlY3Rpb25FZGdlUj10KCkuY2xhc3NlZCgiZHJhZy1lZGdlLWxyIiwhMCk7aWYodGhpcy5faGFzQ29ybmVycyl7dmFyIHk9ZnVuY3Rpb24oKXtyZXR1cm4gdi5fYm94LmFwcGVuZCgiY2lyY2xlIikuc3R5bGVzKHtvcGFjaXR5OjAsZmlsbDoicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZUZpbGwifSl9O3RoaXMuX2RldGVjdGlvbkNvcm5lclRMPXkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci10bCIsITApO3RoaXMuX2RldGVjdGlvbkNvcm5lclRSPXkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci10ciIsITApO3RoaXMuX2RldGVjdGlvbkNvcm5lckJMPXkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci1ibCIsITApO3RoaXMuX2RldGVjdGlvbkNvcm5lckJSPXkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci1iciIsITApfX07ci5wcm90b3R5cGUuX2dldFJlc2l6aW5nRWRnZXM9ZnVuY3Rpb24odCl7dmFyIHY9e3RvcDohMSwKYm90dG9tOiExLGxlZnQ6ITEscmlnaHQ6ITF9O2lmKCF0aGlzLnJlc2l6YWJsZSgpKXJldHVybiB2O3ZhciB5PXRoaXMuYm91bmRzKCksej15LnRvcExlZnQueSx4PXkuYm90dG9tUmlnaHQueSxDPXkudG9wTGVmdC54O3k9eS5ib3R0b21SaWdodC54O3ZhciBGPXRoaXMuX2RldGVjdGlvblJhZGl1cztDLUY8PXQueCYmdC54PD15K0YmJih2LnRvcD16LUY8PXQueSYmdC55PD16K0Ysdi5ib3R0b209eC1GPD10LnkmJnQueTw9eCtGKTt6LUY8PXQueSYmdC55PD14K0YmJih2LmxlZnQ9Qy1GPD10LngmJnQueDw9QytGLHYucmlnaHQ9eS1GPD10LngmJnQueDw9eStGKTtyZXR1cm4gdn07ci5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtxLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO2lmKHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgdD10aGlzLmJvdW5kcygpLHY9dC50b3BMZWZ0LnkseT10LmJvdHRvbVJpZ2h0Lnksej10LnRvcExlZnQueDt0PQp0LmJvdHRvbVJpZ2h0Lng7dGhpcy5fZGV0ZWN0aW9uRWRnZVQuYXR0cnMoe3gxOnoseTE6dix4Mjp0LHkyOnYsInN0cm9rZS13aWR0aCI6Mip0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KTt0aGlzLl9kZXRlY3Rpb25FZGdlQi5hdHRycyh7eDE6eix5MTp5LHgyOnQseTI6eSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pO3RoaXMuX2RldGVjdGlvbkVkZ2VMLmF0dHJzKHt4MTp6LHkxOnYseDI6eix5Mjp5LCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSk7dGhpcy5fZGV0ZWN0aW9uRWRnZVIuYXR0cnMoe3gxOnQseTE6dix4Mjp0LHkyOnksInN0cm9rZS13aWR0aCI6Mip0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KTt0aGlzLl9oYXNDb3JuZXJzJiYodGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEwuYXR0cnMoe2N4OnosY3k6dixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lclRSLmF0dHJzKHtjeDp0LGN5OnYscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSwKdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkwuYXR0cnMoe2N4OnosY3k6eSxyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJSLmF0dHJzKHtjeDp0LGN5Onkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSl9cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLmRldGVjdGlvblJhZGl1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXN9O3IucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9yZXNpemFibGU7dGhpcy5fcmVzaXphYmxlPXQ7dGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0KTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24odCl7dCYmdGhpcy5lbmFibGVkKCk/KHRoaXMuYWRkQ2xhc3MoIngtcmVzaXphYmxlIiksdGhpcy5hZGRDbGFzcygieS1yZXNpemFibGUiKSk6KHRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIiksCnRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfTtyLnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmFibGV9O3IucHJvdG90eXBlLl9zZXRNb3ZhYmxlQ2xhc3M9ZnVuY3Rpb24oKXt0aGlzLm1vdmFibGUoKSYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygibW92YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIm1vdmFibGUiKX07ci5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZCh0KX07ci5wcm90b3R5cGUub2ZmRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUodCl9O3IucHJvdG90eXBlLm9uRHJhZz1mdW5jdGlvbih0KXt0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZCh0KTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUub2ZmRHJhZz1mdW5jdGlvbih0KXt0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh0KX07ci5wcm90b3R5cGUub25EcmFnRW5kPQpmdW5jdGlvbih0KXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZCh0KX07ci5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbih0KXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZSh0KX07ci5wcm90b3R5cGUuZHJhZ0ludGVyYWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdJbnRlcmFjdGlvbn07ci5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCgpO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKHQpO3RoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXModGhpcy5yZXNpemFibGUoKSk7dGhpcy5fc2V0TW92YWJsZUNsYXNzKCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3EucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbih2KXtyZXR1cm4gdC5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodil9KTsKdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKHYpe3JldHVybiB0Ll9kcmFnQ2FsbGJhY2tzLmRlbGV0ZSh2KX0pO3RoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbih2KXtyZXR1cm4gdC5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodil9KTt0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX07ci5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRTdGF0ZSgpO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKTtxLnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe3Q9bi5jb2VyY2VFeHRlcm5hbEQzKHQpO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKTtxLnByb3RvdHlwZS5hbmNob3IuY2FsbCh0aGlzLHQpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAsCnk6MH0sYm90dG9tUmlnaHQ6e3g6MCx5OjB9fSl9O3JldHVybiByfShmKDQzKS5TZWxlY3Rpb25Cb3hMYXllcik7ZC5EcmFnQm94TGF5ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihuLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPW59Zm9yKHZhciByIGluIHApcC5oYXNPd25Qcm9wZXJ0eShyKSYmKG5bcl09cFtyXSk7bi5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMTgpO2M9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcCgpe3JldHVybiBuLmNhbGwodGhpcywicGF0aCIsImxpbmUiKXx8dGhpc31nKHAsbik7cC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocSl7cS5zdHlsZSgiZmlsbCIsIm5vbmUiKX07cC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbigpe3JldHVybiBuLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywKMCl9O3JldHVybiBwfShmKDkpLlNWR0RyYXdlcik7ZC5MaW5lU1ZHRHJhd2VyPWM7dmFyIGs9WyJvcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJzdHJva2UiXTtkLm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXA9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAscSxyKXtyPWwucmVzb2x2ZUF0dHJpYnV0ZXMocixrLHFbMF0sMCk7bC5yZW5kZXJMaW5lKHAsbigpLHFbMF0scil9fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihuLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPW59Zm9yKHZhciByIGluIHApcC5oYXNPd25Qcm9wZXJ0eShyKSYmKG5bcl09cFtyXSk7bi5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMTgpO2M9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcChxKXt2b2lkIDA9PT1xJiYocT0iIik7dmFyIHI9Cm4uY2FsbCh0aGlzLCJyZWN0IiwiIil8fHRoaXM7ci5fcm9vdENsYXNzTmFtZT1xO3IuX3Jvb3QuY2xhc3NlZChyLl9yb290Q2xhc3NOYW1lLCEwKTtyZXR1cm4gcn1nKHAsbik7cmV0dXJuIHB9KGYoOSkuU1ZHRHJhd2VyKTtkLlJlY3RhbmdsZVNWR0RyYXdlcj1jO3ZhciBrPVsieCIsInkiLCJ3aWR0aCIsImhlaWdodCJdO2QuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXA9ZnVuY3Rpb24obixwLHEpe24uc2F2ZSgpO3AuZm9yRWFjaChmdW5jdGlvbihyLHQpe251bGwhPXImJihyPWwucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzKHEsayxyLHQpLG4uYmVnaW5QYXRoKCksbi5yZWN0KHIueCxyLnksci53aWR0aCxyLmhlaWdodCksbC5yZW5kZXJQYXRoV2l0aFN0eWxlKG4scikpfSk7bi5yZXN0b3JlKCl9O2M9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcChxKXtyZXR1cm4gbi5jYWxsKHRoaXMscSxkLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwKXx8dGhpc31nKHAsbik7cmV0dXJuIHB9KGwuQ2FudmFzRHJhd2VyKTsKZC5SZWN0YW5nbGVDYW52YXNEcmF3ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobil7ay5TSE9XX1dBUk5JTkdTJiZjb25zb2xlLndhcm4obil9ZnVuY3Rpb24gbChuLHApe2Zvcih2YXIgcT1bXSxyPTI7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylxW3ItMl09YXJndW1lbnRzW3JdO3JldHVybiAwPT09cD8obihxKSwtMSk6d2luZG93LnNldFRpbWVvdXQobixwLHEpfXZhciBrPWYoMjMpO2Qud2Fybj1nO2Quc2V0VGltZW91dD1sO2QuZGVib3VuY2U9ZnVuY3Rpb24obixwLHEpe2Z1bmN0aW9uIHIoKXtwLmFwcGx5KHEsdil9dmFyIHQ9bnVsbCx2PVtdO3JldHVybiBmdW5jdGlvbigpe3Y9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtjbGVhclRpbWVvdXQodCk7dD1sKHIsbil9fTtkLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24obixwLHEpe3ZvaWQgMD09PXEmJihxPSIiKTtnKCJNZXRob2QgIituKyIgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiB2ZXJzaW9uICIrCnArIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3EpfX0sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihnKXt0aGlzLnJ1bGVyPW51bGwhPWcuY3JlYXRlUnVsZXI/Zy5jcmVhdGVSdWxlcigpOmd9Zi5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihnKXt2b2lkIDA9PT1nJiYoZz1mLkhFSUdIVF9URVhUKTtyZXR1cm4gdGhpcy5ydWxlcihnKX07cmV0dXJuIGZ9KCk7Yy5IRUlHSFRfVEVYVD0iYmRwcWwiO2QuQWJzdHJhY3RNZWFzdXJlcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMzIpKTtnKGYoNzQpKTtnKGYoNzUpKTtnKGYoNDEpKTtnKGYoNDIpKTtnKGYoNzYpKTtnKGYoNzcpKTtnKGYoNzgpKTtnKGYoNzkpKTtnKGYoNDMpKTtnKGYoODApKTtnKGYoODEpKTtnKGYoODIpKX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMCk7Yz0KZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGssbil7dm9pZCAwPT09ayYmKGs9W10pO3ZvaWQgMD09PW4mJihuPXt9KTt0aGlzLl91cGRhdGVJZD0wO3RoaXMuX2RhdGE9azt0aGlzLl9tZXRhZGF0YT1uO3RoaXMuX2NhbGxiYWNrcz1uZXcgZy5DYWxsYmFja1NldH1sLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbihrKXt0aGlzLl9jYWxsYmFja3MuYWRkKGspO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24oayl7dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShrKTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUuZGF0YT1mdW5jdGlvbihrKXtpZihudWxsPT1rKXJldHVybiB0aGlzLl9kYXRhO3RoaXMuX2RhdGE9azt0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbihrKXtpZihudWxsPT1rKXJldHVybiB0aGlzLl9tZXRhZGF0YTt0aGlzLl9tZXRhZGF0YT1rO3RoaXMuX2Rpc3BhdGNoVXBkYXRlKCk7CnJldHVybiB0aGlzfTtsLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH07bC5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKzt0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX07cmV0dXJuIGx9KCk7ZC5EYXRhc2V0PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApLGw9ZigzMCk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoKXt9ay5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7bC5mbHVzaCgpfTtyZXR1cm4ga30oKTtkLkltbWVkaWF0ZT1jO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKCl7fWsucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2cuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKGwuZmx1c2gpfTtyZXR1cm4ga30oKTtkLkFuaW1hdGlvbkZyYW1lPWM7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoKXt0aGlzLl90aW1lb3V0TXNlYz1nLkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU30Kay5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChsLmZsdXNoLHRoaXMuX3RpbWVvdXRNc2VjKX07cmV0dXJuIGt9KCk7ZC5UaW1lb3V0PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihuW3JdPXBbcl0pO24ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDEzKSxrPWYoMCk7Yz1mdW5jdGlvbihuKXtmdW5jdGlvbiBwKCl7dmFyIHE9bnVsbCE9PW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3EuX2tleVByZXNzQ2FsbGJhY2tzPXt9O3EuX2tleVJlbGVhc2VDYWxsYmFja3M9e307cS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX07cS5fZG93bmVkS2V5cz1uZXcgay5TZXQ7CnEuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9oYW5kbGVLZXlEb3duRXZlbnQocix0KX07cS5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihyKXtyZXR1cm4gcS5faGFuZGxlS2V5VXBFdmVudChyKX07cmV0dXJuIHF9ZyhwLG4pO3AucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocSl7bi5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMscSk7dGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPWwuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX2tleURpc3BhdGNoZXI9bC5LZXkuZ2V0RGlzcGF0Y2hlcigpO3RoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayk7dGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfTtwLnByb3RvdHlwZS5fdW5hbmNob3I9CmZ1bmN0aW9uKCl7bi5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyk7dGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayk7dGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPW51bGw7dGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayk7dGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKTt0aGlzLl9rZXlEaXNwYXRjaGVyPW51bGx9O3AucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duRXZlbnQ9ZnVuY3Rpb24ocSxyKXt2YXIgdD10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5sYXN0TW91c2VQb3NpdGlvbigpKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudCh0KSYmIXIucmVwZWF0JiYodGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbcV0mJnRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3FdLmNhbGxDYWxsYmFja3MocSksCnRoaXMuX2Rvd25lZEtleXMuYWRkKHEpKX07cC5wcm90b3R5cGUuX2hhbmRsZUtleVVwRXZlbnQ9ZnVuY3Rpb24ocSl7dGhpcy5fZG93bmVkS2V5cy5oYXMocSkmJnRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbcV0mJnRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbcV0uY2FsbENhbGxiYWNrcyhxKTt0aGlzLl9kb3duZWRLZXlzLmRlbGV0ZShxKX07cC5wcm90b3R5cGUub25LZXlQcmVzcz1mdW5jdGlvbihxLHIpe3RoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3FdfHwodGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbcV09bmV3IGsuQ2FsbGJhY2tTZXQpO3RoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3FdLmFkZChyKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocSxyKXt0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXS5kZWxldGUocik7MD09PXRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3FdLnNpemUmJmRlbGV0ZSB0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXTsKcmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9uS2V5UmVsZWFzZT1mdW5jdGlvbihxLHIpe3RoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbcV18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdPW5ldyBrLkNhbGxiYWNrU2V0KTt0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdLmFkZChyKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub2ZmS2V5UmVsZWFzZT1mdW5jdGlvbihxLHIpe3RoaXMuX2tleVJlbGVhc2VDYWxsYmFja3NbcV0uZGVsZXRlKHIpOzA9PT10aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdLnNpemUmJmRlbGV0ZSB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdO3JldHVybiB0aGlzfTtyZXR1cm4gcH0oZigxNSkuSW50ZXJhY3Rpb24pO2QuS2V5PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxuKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBuKW4uaGFzT3duUHJvcGVydHkocSkmJgooa1txXT1uW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihwLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcCl9LGw9ZigwKTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG4ocCl7dm9pZCAwPT09cCYmKHA9W10pO3ZhciBxPWsuY2FsbCh0aGlzKXx8dGhpcztxLl9jb21wb25lbnRzPVtdO3EuYWRkQ2xhc3MoImNvbXBvbmVudC1ncm91cCIpO3AuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gcS5hcHBlbmQocil9KTtyZXR1cm4gcX1nKG4sayk7bi5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocCl7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChwKX07bi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHApe3JldHVybiAwPD10aGlzLl9jb21wb25lbnRzLmluZGV4T2YocCl9O24ucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHAscSl7dmFyIHI9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVxdWVzdGVkU3BhY2UocCwKcSl9KTtyZXR1cm57bWluV2lkdGg6bC5NYXRoLm1heChyLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbldpZHRofSwwKSxtaW5IZWlnaHQ6bC5NYXRoLm1heChyLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbkhlaWdodH0sMCl9fTtuLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHAscSxyKXt2YXIgdD10aGlzO2sucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHAscSxyKTt0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHYpe3YuY29tcHV0ZUxheW91dCh7eDowLHk6MH0sdC53aWR0aCgpLHQuaGVpZ2h0KCkpfSk7cmV0dXJuIHRoaXN9O24ucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHAscSl7cmV0dXJue3dpZHRoOnAsaGVpZ2h0OnF9fTtuLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocCl7cmV0dXJuIHAuZml4ZWRXaWR0aCgpfSl9O24ucHJvdG90eXBlLmZpeGVkSGVpZ2h0PQpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KGZ1bmN0aW9uKHApe3JldHVybiBwLmZpeGVkSGVpZ2h0KCl9KX07bi5wcm90b3R5cGUuY29tcG9uZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLnNsaWNlKCl9O24ucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihwKXtudWxsPT1wfHx0aGlzLmhhcyhwKXx8KHAuZGV0YWNoKCksdGhpcy5fY29tcG9uZW50cy5wdXNoKHApLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHApLHRoaXMucmVkcmF3KCkpO3JldHVybiB0aGlzfTtuLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHApe3A9dGhpcy5fY29tcG9uZW50cy5pbmRleE9mKHApOzA8PXAmJnRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKHAsMSl9O3JldHVybiBufShmKDI5KS5Db21wb25lbnRDb250YWluZXIpO2QuR3JvdXA9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihrLG4pe2Z1bmN0aW9uIHAoKXt0aGlzLmNvbnN0cnVjdG9yPQprfWZvcih2YXIgcSBpbiBuKW4uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW5bcV0pO2sucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHAucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyBwKX07ZigwKTtjPWYoNCk7dmFyIGw7KGZ1bmN0aW9uKGspe2tbay5WQUxVRT0wXT0iVkFMVUUiO2tbay5QSVhFTD0xXT0iUElYRUwifSkobHx8KGw9e30pKTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG4ocCl7dmFyIHE9ay5jYWxsKHRoaXMpfHx0aGlzO3EuX21vZGU9bC5WQUxVRTtpZihwIT09bi5PUklFTlRBVElPTl9WRVJUSUNBTCYmcCE9PW4uT1JJRU5UQVRJT05fSE9SSVpPTlRBTCl0aHJvdyBFcnJvcihwKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cS5fb3JpZW50YXRpb249cDtxLl9vdmVyZmxvd0hpZGRlbj0hMDtxLmFkZENsYXNzKCJndWlkZS1saW5lLWxheWVyIik7cS5faXNWZXJ0aWNhbCgpP3EuYWRkQ2xhc3MoInZlcnRpY2FsIik6CnEuYWRkQ2xhc3MoImhvcml6b250YWwiKTtxLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cS5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpO3EucmVuZGVyKCl9O3JldHVybiBxfWcobixrKTtuLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtrLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9ndWlkZUxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiZ3VpZGUtbGluZSIsITApfTtuLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihwLHEpe3JldHVybnt3aWR0aDpwLGhlaWdodDpxfX07bi5wcm90b3R5cGUuX2lzVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb249PT1uLk9SSUVOVEFUSU9OX1ZFUlRJQ0FMfTtuLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9O24ucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9O24ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9CmZ1bmN0aW9uKHAscSxyKXtrLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxwLHEscik7bnVsbCE9dGhpcy5zY2FsZSgpJiYodGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMuc2NhbGUoKS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTp0aGlzLnNjYWxlKCkucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKTtyZXR1cm4gdGhpc307bi5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtrLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3RoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKTt0aGlzLl9ndWlkZUxpbmUuYXR0cnMoe3gxOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLnBpeGVsUG9zaXRpb24oKTowLHkxOnRoaXMuX2lzVmVydGljYWwoKT8wOnRoaXMucGl4ZWxQb3NpdGlvbigpLHgyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLnBpeGVsUG9zaXRpb24oKTp0aGlzLndpZHRoKCkseTI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMuaGVpZ2h0KCk6CnRoaXMucGl4ZWxQb3NpdGlvbigpfSk7cmV0dXJuIHRoaXN9O24ucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7bnVsbCE9dGhpcy5zY2FsZSgpJiYodGhpcy5fbW9kZT09PWwuVkFMVUUmJm51bGwhPXRoaXMudmFsdWUoKT90aGlzLl9waXhlbFBvc2l0aW9uPXRoaXMuc2NhbGUoKS5zY2FsZSh0aGlzLnZhbHVlKCkpOnRoaXMuX21vZGU9PT1sLlBJWEVMJiZudWxsIT10aGlzLnBpeGVsUG9zaXRpb24oKSYmKHRoaXMuX3ZhbHVlPXRoaXMuc2NhbGUoKS5pbnZlcnQodGhpcy5waXhlbFBvc2l0aW9uKCkpKSl9O24ucHJvdG90eXBlLl9zZXRQaXhlbFBvc2l0aW9uV2l0aG91dENoYW5naW5nTW9kZT1mdW5jdGlvbihwKXt0aGlzLl9waXhlbFBvc2l0aW9uPXA7bnVsbCE9dGhpcy5zY2FsZSgpJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpO3RoaXMucmVuZGVyKCl9O24ucHJvdG90eXBlLnNjYWxlPQpmdW5jdGlvbihwKXtpZihudWxsPT1wKXJldHVybiB0aGlzLl9zY2FsZTt2YXIgcT10aGlzLl9zY2FsZTtudWxsIT1xJiZxLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKTt0aGlzLl9zY2FsZT1wO3RoaXMuX3NjYWxlLm9uVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spO3RoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKTt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbihwKXtpZihudWxsPT1wKXJldHVybiB0aGlzLl92YWx1ZTt0aGlzLl92YWx1ZT1wO3RoaXMuX21vZGU9bC5WQUxVRTt0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307bi5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9ufTtuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpOwpudWxsIT10aGlzLnNjYWxlKCkmJnRoaXMuc2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayl9O3JldHVybiBufShjLkNvbXBvbmVudCk7Yy5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiO2MuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCI7ZC5HdWlkZUxpbmVMYXllcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG4scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bn1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobltyXT1wW3JdKTtuLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigwKTtjPWYoNCk7dmFyIGs7KGZ1bmN0aW9uKG4pe25bbi5WQUxVRT0wXT0iVkFMVUUiO25bbi5QSVhFTD0xXT0iUElYRUwifSkoaz1kLlByb3BlcnR5TW9kZXx8KGQuUHJvcGVydHlNb2RlPQp7fSkpO2M9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcCgpe3ZhciBxPW4uY2FsbCh0aGlzKXx8dGhpcztxLl9ib3hWaXNpYmxlPSExO3EuX2JveEJvdW5kcz17dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6MCx5OjB9fTtxLl94Qm91bmRzTW9kZT1rLlBJWEVMO3EuX3lCb3VuZHNNb2RlPWsuUElYRUw7cS5hZGRDbGFzcygic2VsZWN0aW9uLWJveC1sYXllciIpO3EuX2FkanVzdEJvdW5kc0NhbGxiYWNrPWZ1bmN0aW9uKCl7cS5yZW5kZXIoKX07cS5fb3ZlcmZsb3dIaWRkZW49ITA7cS5feEV4dGVudD1bdm9pZCAwLHZvaWQgMF07cS5feUV4dGVudD1bdm9pZCAwLHZvaWQgMF07cmV0dXJuIHF9ZyhwLG4pO3AucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe24ucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3RoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCk7dGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLAohMCl9O3AucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHEscil7cmV0dXJue3dpZHRoOnEsaGVpZ2h0OnJ9fTtwLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fZ2V0Qm91bmRzKCk7dGhpcy5fc2V0Qm91bmRzKHEpO3RoaXMuX3lCb3VuZHNNb2RlPXRoaXMuX3hCb3VuZHNNb2RlPWsuUElYRUw7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuX3NldEJvdW5kcz1mdW5jdGlvbihxKXt0aGlzLl9ib3hCb3VuZHM9e3RvcExlZnQ6e3g6TWF0aC5taW4ocS50b3BMZWZ0LngscS5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHEudG9wTGVmdC55LHEuYm90dG9tUmlnaHQueSl9LGJvdHRvbVJpZ2h0Ont4Ok1hdGgubWF4KHEudG9wTGVmdC54LHEuYm90dG9tUmlnaHQueCkseTpNYXRoLm1heChxLnRvcExlZnQueSxxLmJvdHRvbVJpZ2h0LnkpfX19O3AucHJvdG90eXBlLl9nZXRCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDp0aGlzLl94Qm91bmRzTW9kZT09PQprLlBJWEVMP3RoaXMuX2JveEJvdW5kcy50b3BMZWZ0Lng6bnVsbD09dGhpcy5feFNjYWxlPzA6TWF0aC5taW4odGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1rLlBJWEVMP3RoaXMuX2JveEJvdW5kcy50b3BMZWZ0Lnk6bnVsbD09dGhpcy5feVNjYWxlPzA6TWF0aC5taW4odGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfSxib3R0b21SaWdodDp7eDp0aGlzLl94Qm91bmRzTW9kZT09PWsuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6bnVsbD09dGhpcy5feFNjYWxlPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT0Kay5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTpudWxsPT10aGlzLl95U2NhbGU/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX07cC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtuLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO2lmKHRoaXMuX2JveFZpc2libGUpe3ZhciBxPXRoaXMuYm91bmRzKCkscj1xLnRvcExlZnQueSx0PXEuYm90dG9tUmlnaHQueSx2PXEudG9wTGVmdC54O3E9cS5ib3R0b21SaWdodC54O2lmKCEobC5NYXRoLmlzVmFsaWROdW1iZXIocikmJmwuTWF0aC5pc1ZhbGlkTnVtYmVyKHQpJiZsLk1hdGguaXNWYWxpZE51bWJlcih2KSYmbC5NYXRoLmlzVmFsaWROdW1iZXIocSkpKXRocm93IEVycm9yKCJib3VuZHMgaGF2ZSBub3QgYmVlbiBwcm9wZXJseSBzZXQiKTt0aGlzLl9ib3hBcmVhLmF0dHJzKHt4OnYsCnk6cix3aWR0aDpxLXYsaGVpZ2h0OnQtcn0pO3RoaXMuY29udGVudCgpLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9ib3gubm9kZSgpKX1lbHNlIHRoaXMuX2JveC5yZW1vdmUoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuYm94VmlzaWJsZT1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9ib3hWaXNpYmxlO3RoaXMuX2JveFZpc2libGU9cTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3AucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9O3AucHJvdG90eXBlLnhTY2FsZT1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl94U2NhbGU7bnVsbCE9dGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKTt0aGlzLl94U2NhbGU9cTt0aGlzLl94Qm91bmRzTW9kZT1rLlZBTFVFO3RoaXMuX3hTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayk7CnRoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl95U2NhbGU7bnVsbCE9dGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKTt0aGlzLl95U2NhbGU9cTt0aGlzLl95Qm91bmRzTW9kZT1rLlZBTFVFO3RoaXMuX3lTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRYRXh0ZW50KCl9O3AucHJvdG90eXBlLl9nZXRYRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3hCb3VuZHNNb2RlPT09ay5WQUxVRT90aGlzLl94RXh0ZW50Om51bGw9PXRoaXMuX3hTY2FsZT9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3hTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueCksCnRoaXMuX3hTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0LngpXX07cC5wcm90b3R5cGUuX3NldFhFeHRlbnQ9ZnVuY3Rpb24ocSl7dGhpcy5feEV4dGVudD1xfTtwLnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFlFeHRlbnQoKX07cC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1rLlZBTFVFP3RoaXMuX3lFeHRlbnQ6bnVsbD09dGhpcy5feVNjYWxlP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC55KSx0aGlzLl95U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC55KV19O3AucHJvdG90eXBlLl9zZXRZRXh0ZW50PWZ1bmN0aW9uKHEpe3RoaXMuX3lFeHRlbnQ9cX07cC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe24ucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTtudWxsIT0KdGhpcy5feFNjYWxlJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayk7bnVsbCE9dGhpcy5feVNjYWxlJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9O3JldHVybiBwfShjLkNvbXBvbmVudCk7ZC5TZWxlY3Rpb25Cb3hMYXllcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihuLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbil9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3JldHVybiBsLmNhbGwodGhpcywicGF0aCIsImFyYyBmaWxsIil8fHRoaXN9ZyhrLGwpO2sucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPQpmdW5jdGlvbihuKXtuLnN0eWxlKCJzdHJva2UiLCJub25lIil9O3JldHVybiBrfShmKDkpLlNWR0RyYXdlcik7ZC5BcmNTVkdEcmF3ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobi5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG4pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXtyZXR1cm4gbC5jYWxsKHRoaXMsInBhdGgiLCJhcmMgb3V0bGluZSIpfHx0aGlzfWcoayxsKTtrLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihuKXtuLnN0eWxlKCJmaWxsIiwibm9uZSIpfTtyZXR1cm4ga30oZig5KS5TVkdEcmF3ZXIpO2QuQXJjT3V0bGluZVNWR0RyYXdlcj1jfSxmdW5jdGlvbihjLApkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihuLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPW59Zm9yKHZhciByIGluIHApcC5oYXNPd25Qcm9wZXJ0eShyKSYmKG5bcl09cFtyXSk7bi5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMTgpO2M9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcCgpe3JldHVybiBuLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31nKHAsbik7cC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocSl7cS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfTtwLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIG4ucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXguY2FsbCh0aGlzLDApfTtyZXR1cm4gcH0oZig5KS5TVkdEcmF3ZXIpO2QuQXJlYVNWR0RyYXdlcj0KYzt2YXIgaz1bImZpbGwiLCJvcGFjaXR5IiwiZmlsbC1vcGFjaXR5Il07ZC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLHEscil7cj1sLnJlc29sdmVBdHRyaWJ1dGVzKHIsayxxWzBdLDApO2wucmVuZGVyQXJlYShwLG4oKSxxWzBdLHIpfX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obCxrKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1sfWZvcih2YXIgcCBpbiBrKWsuaGFzT3duUHJvcGVydHkocCkmJihsW3BdPWtbcF0pO2wucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KG4ucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBuKX07Yz1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7cmV0dXJuIGwuY2FsbCh0aGlzLCJsaW5lIiwiIil8fHRoaXN9ZyhrLGwpO3JldHVybiBrfShmKDkpLlNWR0RyYXdlcik7ZC5TZWdtZW50U1ZHRHJhd2VyPWN9LGZ1bmN0aW9uKGMsCmQsZil7ZnVuY3Rpb24gZyhxLHIsdCx2LHkpe3JldHVybiAwPD10K3kmJnQteTw9cSYmMDw9dit5JiZ2LXk8PXJ9ZnVuY3Rpb24gbChxLHIsdCl7aWYobnVsbD09cSlyZXR1cm4hMTtmb3IodmFyIHY9MDt2PHQubGVuZ3RoO3YrKyl7dmFyIHk9dFt2XTtpZihxW3ldIT1yW3ldKXJldHVybiExfXJldHVybiEwfXZhciBrPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihxLHIpe2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXF9Zm9yKHZhciB2IGluIHIpci5oYXNPd25Qcm9wZXJ0eSh2KSYmKHFbdl09clt2XSk7cS5wcm90b3R5cGU9bnVsbD09PXI/T2JqZWN0LmNyZWF0ZShyKToodC5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IHQpfSxuPWYoODYpLHA9ZigxOCk7Yz1mdW5jdGlvbihxKXtmdW5jdGlvbiByKCl7cmV0dXJuIHEuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9ayhyLHEpO3JldHVybiByfShmKDkpLlNWR0RyYXdlcik7ZC5TeW1ib2xTVkdEcmF3ZXI9CmM7ZC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXA9ZnVuY3Rpb24ocSxyLHQpe3ZhciB2PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKHkseix4KXt2YXIgQz15LmNhbnZhcyxGPUMuY2xpZW50V2lkdGg7Qz1DLmNsaWVudEhlaWdodDtmb3IodmFyIEQ9bmV3IG4uQ2FudmFzQnVmZmVyKDAsMCksQj1yKCksST10KCksTz1udWxsLFA9bnVsbCxIPW51bGwsSz0wO0s8ei5sZW5ndGg7SysrKXt2YXIgTT16W0tdO2lmKG51bGwhPU0pe3ZhciBMPXAucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzKHgsWyJ4IiwieSJdLE0sSyksUj1JKE0sSyxxKTtpZihnKEYsQyxMLngsTC55LFIpKXt2YXIgVT1sKE8sTCxwLkNvbnRleHRTdHlsZUF0dHJzKTtNPUIoTSxLLHYuX2RhdGFzZXQpO1UmJkg9PVImJlA9PU18fChPPXAuZ2V0U3Ryb2tlV2lkdGgoTCksTz1SK08rMSwoTz5ELnNjcmVlbldpZHRofHxPPkQuc2NyZWVuSGVpZ2h0KSYmRC5yZXNpemUoTyxPLCEwKSxELmNsZWFyKCksTz1ELmN0eCxPLmJlZ2luUGF0aCgpLApNKFIpLmNvbnRleHQoTykobnVsbCksTy5jbG9zZVBhdGgoKSxwLnJlbmRlclBhdGhXaXRoU3R5bGUoTyxMKSxQPU0sSD1SLE89TCk7RC5ibGl0Q2VudGVyKHksTC54LEwueSl9fX19fX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiB6P0Q6RCBpbnN0YW5jZW9mIERhdGU/bihELnZhbHVlT2YoKSk6RCBpbnN0YW5jZW9mIHkuU2NhbGU/bChEKTpEIGluc3RhbmNlb2Ygdi5EYXRhc2V0P2soRCk6dChEKT9xKEQpOkFycmF5LmlzQXJyYXkoRCk/cChEKTpuKEQpfWZ1bmN0aW9uIGwoRCl7RD17ZG9tYWluOkQuZG9tYWluKCkscmFuZ2U6RC5yYW5nZSgpLHVwZGF0ZUlkOkQudXBkYXRlSWQoKSxyZWY6bihEKX07cmV0dXJuIHEoRCl9ZnVuY3Rpb24gayhEKXtEPXtyZWY6bihEKSx1cGRhdGVJZDpELnVwZGF0ZUlkKCl9O3JldHVybiBxKEQpfWZ1bmN0aW9uIG4oRCl7cmV0dXJuIG5ldyBDKEQpfWZ1bmN0aW9uIHAoRCl7cmV0dXJuIG5ldyB4KEQubWFwKGZ1bmN0aW9uKEIpe3JldHVybiBnKEIpfSkpfQpmdW5jdGlvbiBxKEQpe3ZhciBCPXt9LEk7Zm9yKEkgaW4gRClELmhhc093blByb3BlcnR5KEkpJiYoQltJXT1nKERbSV0pKTtyZXR1cm4gbmV3IEYoQil9dmFyIHI9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKEQsQil7ZnVuY3Rpb24gSSgpe3RoaXMuY29uc3RydWN0b3I9RH1mb3IodmFyIE8gaW4gQilCLmhhc093blByb3BlcnR5KE8pJiYoRFtPXT1CW09dKTtELnByb3RvdHlwZT1udWxsPT09Qj9PYmplY3QuY3JlYXRlKEIpOihJLnByb3RvdHlwZT1CLnByb3RvdHlwZSxuZXcgSSl9LHQ9ZigxMjgpLHY9ZigzOCkseT1mKDE3KTtkLnNpZ249ZztkLnNpZ25TY2FsZT1sO2Quc2lnbkRhdGFzZXQ9aztkLnNpZ25SZWY9bjtkLnNpZ25BcnJheT1wO2Quc2lnbk9iaj1xO3ZhciB6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gRCgpe31ELnByb3RvdHlwZS5pc0RpZmZlcmVudD1mdW5jdGlvbihCKXtyZXR1cm4gQiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/dGhpcy5pc1NpZ25hdHVyZURpZmZlcmVudChCKToKITB9O3JldHVybiBEfSgpO2QuU2lnbmF0dXJlPXo7dmFyIHg9ZnVuY3Rpb24oRCl7ZnVuY3Rpb24gQihJKXt2YXIgTz1ELmNhbGwodGhpcyl8fHRoaXM7Ty5hcnJheT1JO3JldHVybiBPfXIoQixEKTtCLnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihJKXtpZihJLmFycmF5Lmxlbmd0aCE9PXRoaXMuYXJyYXkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgTz0wO088dGhpcy5hcnJheS5sZW5ndGg7TysrKWlmKHRoaXMuYXJyYXlbT10uaXNEaWZmZXJlbnQoSS5hcnJheVtPXSkpcmV0dXJuITA7cmV0dXJuITF9O3JldHVybiBCfSh6KTtkLkFycmF5U2lnbmF0dXJlPXg7dmFyIEM9ZnVuY3Rpb24oRCl7ZnVuY3Rpb24gQihJKXt2YXIgTz1ELmNhbGwodGhpcyl8fHRoaXM7Ty5yZWY9STtyZXR1cm4gT31yKEIsRCk7Qi5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIHRoaXMucmVmIT09SS5yZWZ9O3JldHVybiBCfSh6KTtkLlJlZmVyZW5jZVNpZ25hdHVyZT0KQzt2YXIgRj1mdW5jdGlvbihEKXtmdW5jdGlvbiBCKEkpe3ZhciBPPUQuY2FsbCh0aGlzKXx8dGhpcztPLm9iaj1JO3JldHVybiBPfXIoQixEKTtCLnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihJKXt2YXIgTz1PYmplY3Qua2V5cyh0aGlzLm9iaiksUD1PYmplY3Qua2V5cyhJLm9iaik7aWYoTy5sZW5ndGghPT1QLmxlbmd0aClyZXR1cm4hMDtmb3IoUD0wO1A8Ty5sZW5ndGg7UCsrKXt2YXIgSD1PW1BdO2lmKCFJLm9iai5oYXNPd25Qcm9wZXJ0eShIKXx8dGhpcy5vYmpbSF0uaXNEaWZmZXJlbnQoSS5vYmpbSF0pKXJldHVybiEwfXJldHVybiExfTtyZXR1cm4gQn0oeik7ZC5PYmplY3RTaWduYXR1cmU9Rn0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih6LHgpe2Z1bmN0aW9uIEMoKXt0aGlzLmNvbnN0cnVjdG9yPXp9Zm9yKHZhciBGIGluIHgpeC5oYXNPd25Qcm9wZXJ0eShGKSYmKHpbRl09eFtGXSk7ei5wcm90b3R5cGU9Cm51bGw9PT14P09iamVjdC5jcmVhdGUoeCk6KEMucHJvdG90eXBlPXgucHJvdG90eXBlLG5ldyBDKX0sbD1mKDEpLGs9ZigzKSxuPWYoMCkscD1mKDE0KSxxPWYoNDYpLHI9Zig2KSx0PWYoMzMpLHY9ZigxOSk7Yz1mKDUzKTt2YXIgeT1mKDIpO2Y9ZnVuY3Rpb24oeil7ZnVuY3Rpb24geCgpe3ZhciBDPXouY2FsbCh0aGlzKXx8dGhpcztDLmFkZENsYXNzKCJhcmVhLXBsb3QiKTtDLnkwKDApO0MuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpO0MuYXR0cigiZmlsbCIsKG5ldyBrLkNvbG9yKS5yYW5nZSgpWzBdKTtDLl9saW5lRHJhd2Vycz1uZXcgbi5NYXA7cmV0dXJuIEN9Zyh4LHopO3gucHJvdG90eXBlLnk9ZnVuY3Rpb24oQyxGKXtpZihudWxsPT1DKXJldHVybiB6LnByb3RvdHlwZS55LmNhbGwodGhpcyk7bnVsbD09Rj96LnByb3RvdHlwZS55LmNhbGwodGhpcyxDKTp6LnByb3RvdHlwZS55LmNhbGwodGhpcyxDLEYpO251bGwhPUYmJihDPXRoaXMueTAoKS5hY2Nlc3NvcixudWxsIT0KQyYmdGhpcy5fYmluZFByb3BlcnR5KHguX1kwX0tFWSxDLEYpLHRoaXMuX3VwZGF0ZVlTY2FsZSgpKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUueTA9ZnVuY3Rpb24oQyl7aWYobnVsbD09QylyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoeC5fWTBfS0VZKTt2YXIgRj10aGlzLnkoKTt0aGlzLl9iaW5kUHJvcGVydHkoeC5fWTBfS0VZLEMsRiYmRi5zY2FsZSk7dGhpcy5fdXBkYXRlWVNjYWxlKCk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3oucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKTt0aGlzLl91cGRhdGVZU2NhbGUoKX07eC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24oQyl7dmFyIEY9dGhpczt0aGlzLl9saW5lRHJhd2Vycy5zZXQoQyxuZXcgcC5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihEKXtyZXR1cm4gbmV3IHAuQ2FudmFzRHJhd2VyKEQsCnQubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBCPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi54KCkpLEk9eS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnkoKSk7cmV0dXJuIEYuX2QzTGluZUZhY3RvcnkoQyxCLEkpfSkpfSkpO3oucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxDKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihDKXt6LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxDKTtDPXRoaXMuX2xpbmVEcmF3ZXJzLmdldChDKTsic3ZnIj09PXRoaXMucmVuZGVyZXIoKT9DLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpDLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpO3JldHVybiBDfTt4LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKEMpe3oucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLEMpO3RoaXMuX2xpbmVEcmF3ZXJzLmdldChDKS5yZW1vdmUoKX07CngucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLEY9dGhpcy5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzKCksRD10aGlzLl9nZXREYXRhVG9EcmF3KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oQil7dmFyIEk9eS5QbG90LmFwcGx5RHJhd1N0ZXBzKEYsQik7Qy5fbGluZURyYXdlcnMuZ2V0KEIpLmRyYXcoRC5nZXQoQiksSSl9KX07eC5wcm90b3R5cGUuX2dlbmVyYXRlTGluZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciBDPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIEY9dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCk7Ri5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoeS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSk7Qy5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6RixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih2LkFuaW1hdG9yLlJFU0VUKX0pfUMucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dlbmVyYXRlTGluZUF0dHJUb1Byb2plY3RvcigpLAphbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih2LkFuaW1hdG9yLk1BSU4pfSk7cmV0dXJuIEN9O3gucHJvdG90eXBlLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtDLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih5LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx5LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSk7cmV0dXJuIEN9O3gucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oQyl7dmFyIEY9dGhpcztyZXR1cm4gbmV3IHIuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHEuQXJlYVNWR0RyYXdlcn0sZnVuY3Rpb24oRCl7cmV0dXJuIG5ldyBwLkNhbnZhc0RyYXdlcihELHEubWFrZUFyZWFDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBCPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi54KCkpLEk9eS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnkoKSksCk89eS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnkwKCkpO3JldHVybiBGLl9jcmVhdGVBcmVhR2VuZXJhdG9yKEIsSSxPLEYuX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoQixJKSxDKX0pKX0pfTt4LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgQz1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBGPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO0YuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKHkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkseS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpKTtDLnB1c2goe2F0dHJUb1Byb2plY3RvcjpGLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHYuQW5pbWF0b3IuUkVTRVQpfSl9Qy5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iodi5BbmltYXRvci5NQUlOKX0pOwpyZXR1cm4gQ307eC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciBDPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpO0M9bi5BcnJheS51bmlxKG4uQXJyYXkuZmxhdHRlbihDKSk7dmFyIEY9MT09PUMubGVuZ3RoP0NbMF06bnVsbDtDPShDPXRoaXMueSgpKSYmQy5zY2FsZTtudWxsIT1DJiYobnVsbCE9dGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXImJihDLnJlbW92ZVBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpLHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPW51bGwpLG51bGwhPUYmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltGXX0sQy5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSkpfTt4LnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249CmZ1bmN0aW9uKCl7cmV0dXJuIHkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MCgpKX07eC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBDPXoucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtDLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3Rvcih5LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx5LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSx5LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpO3JldHVybiBDfTt4LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXM7dm9pZCAwPT09QyYmKEM9dGhpcy5kYXRhc2V0cygpKTtpZigiY2FudmFzIj09PXRoaXMucmVuZGVyZXIoKSlyZXR1cm4gbC5zZWxlY3RBbGwoKTt2YXIgRD16LnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxDKS5ub2RlcygpO0MubWFwKGZ1bmN0aW9uKEIpe3JldHVybiBGLl9saW5lRHJhd2Vycy5nZXQoQil9KS5maWx0ZXIoZnVuY3Rpb24oQil7cmV0dXJuIG51bGwhPQpCfSkuZm9yRWFjaChmdW5jdGlvbihCKXtyZXR1cm4gRC5wdXNoLmFwcGx5KEQsQi5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSk7cmV0dXJuIGwuc2VsZWN0QWxsKEQpfTt4LnByb3RvdHlwZS5fY29uc3RydWN0QXJlYVByb2plY3Rvcj1mdW5jdGlvbihDLEYsRCl7dmFyIEI9dGhpcyxJPXRoaXMuX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoeS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkseS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3JldHVybiBmdW5jdGlvbihPLFAsSCl7cmV0dXJuIEIuX2NyZWF0ZUFyZWFHZW5lcmF0b3IoQyxGLEQsSSxIKShPKX19O3gucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKEMsRil7cmV0dXJuIGZ1bmN0aW9uKEQsQixJKXt2YXIgTz1DKEQsQixJKTtEPUYoRCxCLEkpO3JldHVybiBuLk1hdGguaXNWYWxpZE51bWJlcihPKSYmbi5NYXRoLmlzVmFsaWROdW1iZXIoRCl9fTt4LnByb3RvdHlwZS5fY3JlYXRlQXJlYUdlbmVyYXRvcj0KZnVuY3Rpb24oQyxGLEQsQixJKXt2YXIgTz10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKTtyZXR1cm4gbC5hcmVhKCkueChmdW5jdGlvbihQLEgpe3JldHVybiBDKFAsSCxJKX0pLnkxKGZ1bmN0aW9uKFAsSCl7cmV0dXJuIEYoUCxILEkpfSkueTAoZnVuY3Rpb24oUCxIKXtyZXR1cm4gRChQLEgsSSl9KS5jdXJ2ZShPKS5kZWZpbmVkKGZ1bmN0aW9uKFAsSCl7cmV0dXJuIEIoUCxILEkpfSl9O3JldHVybiB4fShjLkxpbmUpO2YuX1kwX0tFWT0ieTAiO2QuQXJlYT1mfSxmdW5jdGlvbihjLGQpeyhmdW5jdGlvbihmKXtmLk1BSU49Im1haW4iO2YuUkVTRVQ9InJlc2V0In0pKGQuQW5pbWF0b3J8fChkLkFuaW1hdG9yPXt9KSl9LGZ1bmN0aW9uKGMsZCl7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBnKCl7dmFyIGw9dGhpczt0aGlzLnRyYW5zbGF0ZT10aGlzLnNjYWxlPTA7dGhpcy5jYWNoZWREb21haW49W251bGwsbnVsbF07dGhpcy5sYXN0U2VlbkRvbWFpbj1bbnVsbCxudWxsXTt0aGlzLnVwZGF0ZURvbWFpbj0KZnVuY3Rpb24oayl7bC5sYXN0U2VlbkRvbWFpbj1rLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ay5zY2FsZVRyYW5zZm9ybWF0aW9uKGwuY2FjaGVkRG9tYWluWzFdKS1rLnNjYWxlVHJhbnNmb3JtYXRpb24obC5jYWNoZWREb21haW5bMF0pLHA9ay5zY2FsZVRyYW5zZm9ybWF0aW9uKGwubGFzdFNlZW5Eb21haW5bMV0pLWsuc2NhbGVUcmFuc2Zvcm1hdGlvbihsLmxhc3RTZWVuRG9tYWluWzBdKTtsLnNjYWxlPW4vcHx8MTtsLnRyYW5zbGF0ZT1rLnNjYWxlVHJhbnNmb3JtYXRpb24obC5jYWNoZWREb21haW5bMF0pLWsuc2NhbGVUcmFuc2Zvcm1hdGlvbihsLmxhc3RTZWVuRG9tYWluWzBdKSpsLnNjYWxlfHwwfX1nLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuc2NhbGU9MTt0aGlzLnRyYW5zbGF0ZT0wO3RoaXMuY2FjaGVkRG9tYWluPXRoaXMubGFzdFNlZW5Eb21haW59O2cucHJvdG90eXBlLnNldERvbWFpbj1mdW5jdGlvbihsKXt0aGlzLmNhY2hlZERvbWFpbj0KbC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfTtyZXR1cm4gZ30oKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZyhsLGspe3ZhciBuPXRoaXM7dGhpcy5yZW5kZXJDYWxsYmFjaz1sO3RoaXMuYXBwbHlUcmFuc2Zvcm1DYWxsYmFjaz1rO3RoaXMuZG9tYWluVHJhbnNmb3JtWD1uZXcgZjt0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IGY7dGhpcy5yZW5kZXJEZWZlcnJlZD1mdW5jdGlvbigpe24uYXBwbHlUcmFuc2Zvcm0oKTtjbGVhclRpbWVvdXQobi50aW1lb3V0VG9rZW4pO24udGltZW91dFRva2VuPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnJlbmRlckNhbGxiYWNrKCl9LGcuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZKX19Zy5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbihsLGspe2wmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4obCk7ayYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihrKTt0aGlzLnJlbmRlckRlZmVycmVkKCl9O2cucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9CmZ1bmN0aW9uKGwsayl7bCYmdGhpcy5kb21haW5UcmFuc2Zvcm1YLnVwZGF0ZURvbWFpbihsKTtrJiZ0aGlzLmRvbWFpblRyYW5zZm9ybVkudXBkYXRlRG9tYWluKGspO3RoaXMucmVuZGVyRGVmZXJyZWQoKX07Zy5wcm90b3R5cGUucmVzZXRUcmFuc2Zvcm1zPWZ1bmN0aW9uKCl7dGhpcy5kb21haW5UcmFuc2Zvcm1YLnJlc2V0KCk7dGhpcy5kb21haW5UcmFuc2Zvcm1ZLnJlc2V0KCk7dGhpcy5hcHBseVRyYW5zZm9ybSgpfTtnLnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybT1mdW5jdGlvbigpe3RoaXMuYXBwbHlUcmFuc2Zvcm1DYWxsYmFjayh0aGlzLmRvbWFpblRyYW5zZm9ybVgudHJhbnNsYXRlLHRoaXMuZG9tYWluVHJhbnNmb3JtWS50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1YLnNjYWxlLHRoaXMuZG9tYWluVHJhbnNmb3JtWS5zY2FsZSl9O3JldHVybiBnfSgpO2MuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZPTIwMDtkLkRlZmVycmVkUmVuZGVyZXI9Y30sZnVuY3Rpb24oYywKZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oQyxGKXtmdW5jdGlvbiBEKCl7dGhpcy5jb25zdHJ1Y3Rvcj1DfWZvcih2YXIgQiBpbiBGKUYuaGFzT3duUHJvcGVydHkoQikmJihDW0JdPUZbQl0pO0MucHJvdG90eXBlPW51bGw9PT1GP09iamVjdC5jcmVhdGUoRik6KEQucHJvdG90eXBlPUYucHJvdG90eXBlLG5ldyBEKX0sbD1mKDEpLGs9Zig3KSxuPWYoMTQpLHA9Zig2KSxxPWYoMzMpLHI9ZigzKSx0PWYoMTEpLHY9ZigwKTtjPWYoMTApO3ZhciB5PWYoMTkpLHo9ZigyKTtmPWYoMTYpO3ZhciB4PXtsaW5lYXI6bC5jdXJ2ZUxpbmVhcixsaW5lYXJDbG9zZWQ6bC5jdXJ2ZUxpbmVhckNsb3NlZCxzdGVwOmwuY3VydmVTdGVwLHN0ZXBCZWZvcmU6bC5jdXJ2ZVN0ZXBCZWZvcmUsc3RlcEFmdGVyOmwuY3VydmVTdGVwQWZ0ZXIsYmFzaXM6bC5jdXJ2ZUJhc2lzLGJhc2lzT3BlbjpsLmN1cnZlQmFzaXNPcGVuLGJhc2lzQ2xvc2VkOmwuY3VydmVCYXNpc0Nsb3NlZCwKYnVuZGxlOmwuY3VydmVCdW5kbGUsY2FyZGluYWw6bC5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3BlbjpsLmN1cnZlQ2FyZGluYWxPcGVuLGNhcmRpbmFsQ2xvc2VkOmwuY3VydmVDYXJkaW5hbENsb3NlZCxtb25vdG9uZTpsLmN1cnZlTW9ub3RvbmVYfTtkLkN1cnZlTmFtZT1jLm1ha2VFbnVtKCJsaW5lYXIgbGluZWFyQ2xvc2VkIHN0ZXAgc3RlcEJlZm9yZSBzdGVwQWZ0ZXIgYmFzaXMgYmFzaXNPcGVuIGJhc2lzQ2xvc2VkIGJ1bmRsZSBjYXJkaW5hbCBjYXJkaW5hbE9wZW4gY2FyZGluYWxDbG9zZWQgbW9ub3RvbmUiLnNwbGl0KCIgIikpO2Y9ZnVuY3Rpb24oQyl7ZnVuY3Rpb24gRigpe3ZhciBEPUMuY2FsbCh0aGlzKXx8dGhpcztELl9jdXJ2ZT0ibGluZWFyIjtELl9hdXRvcmFuZ2VTbW9vdGg9ITE7RC5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ITA7RC5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkPSExO0QuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9ITE7RC5hZGRDbGFzcygibGluZS1wbG90Iik7CnZhciBCPW5ldyBrLkVhc2luZztCLnN0ZXBEdXJhdGlvbih6LlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pO0IuZWFzaW5nTW9kZSgiZXhwSW5PdXQiKTtCLm1heFRvdGFsRHVyYXRpb24oei5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKTtELmFuaW1hdG9yKHkuQW5pbWF0b3IuTUFJTixCKTtELmF0dHIoInN0cm9rZSIsKG5ldyByLkNvbG9yKS5yYW5nZSgpWzBdKTtELmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpO3JldHVybiBEfWcoRixDKTtGLnByb3RvdHlwZS54PWZ1bmN0aW9uKEQsQixJKXtpZihudWxsPT1EKXJldHVybiBDLnByb3RvdHlwZS54LmNhbGwodGhpcyk7Qy5wcm90b3R5cGUueC5jYWxsKHRoaXMsRCxCLEkpO3RoaXMuX3NldFNjYWxlU25hcHBpbmcoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUueT1mdW5jdGlvbihELEIsSSl7aWYobnVsbD09RClyZXR1cm4gQy5wcm90b3R5cGUueS5jYWxsKHRoaXMpO0MucHJvdG90eXBlLnkuY2FsbCh0aGlzLEQsQiwKSSk7dGhpcy5fc2V0U2NhbGVTbmFwcGluZygpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIEMucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTtDLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlLmNhbGwodGhpcyxEKTt0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmF1dG9yYW5nZVNtb290aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvcmFuZ2VTbW9vdGh9O0YucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7IngiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiB0LlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpOyJ5Ij09PXRoaXMuYXV0b3JhbmdlTW9kZSgpJiYKdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHQuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueSgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSl9O0YucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX2N1cnZlO3RoaXMuX2N1cnZlPUQ7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb3duc2FtcGxpbmdFbmFibGVkfTtGLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbihEKXtpZihudWxsPT1EKXJldHVybiB0aGlzLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZDt0aGlzLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1EO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmNvbGxhcHNlRGVuc2VMaW5lc0VuYWJsZWQ9CmZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZDt0aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ9RDt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKEQpe3ZhciBCPXRoaXM7cmV0dXJuIG5ldyBwLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxLkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKEkpe3JldHVybiBuZXcgbi5DYW52YXNEcmF3ZXIoSSxxLm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXAoZnVuY3Rpb24oKXtyZXR1cm4gQi5fZDNMaW5lRmFjdG9yeShEKX0pKX0pfTtGLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oRCl7dmFyIEI9Qy5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxEKTtpZighdGhpcy5fYXV0b3JhbmdlU21vb3RofHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PQpEfHwieCIhPT10aGlzLmF1dG9yYW5nZU1vZGUoKSYmInkiIT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkpcmV0dXJuIEI7RD10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uUG9pbnRzKCk7dmFyIEk9InkiPT09dGhpcy5hdXRvcmFuZ2VNb2RlKCk/RC5sZWZ0LmNvbmNhdChELnJpZ2h0KS5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIE8ueX0pOkQudG9wLmNvbmNhdChELmJvdHRvbSkubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPLnh9KTtyZXR1cm4gQi5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIGwuZXh0ZW50KGwubWVyZ2UoW08sSV0pKX0pfTtGLnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciBEPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHQuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueCgpLnNjYWxlIGluc3RhbmNlb2YgdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJue2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX07CnZhciBCPXRoaXMueSgpLnNjYWxlLEk9dGhpcy54KCkuc2NhbGUsTz17bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfSxQPUkuc2NhbGUoSS5kb21haW4oKVswXSksSD1JLnNjYWxlKEkuZG9tYWluKClbMV0pLEs9Qi5zY2FsZShCLmRvbWFpbigpWzBdKSxNPUIuc2NhbGUoQi5kb21haW4oKVsxXSk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oTCl7Zm9yKHZhciBSPUwuZGF0YSgpLFUsWSxiYSxtYSxhYSxjYSxmYSxkYT0xO2RhPFIubGVuZ3RoO2RhKyspbWE9Y2F8fEkuc2NhbGUoRC54KCkuYWNjZXNzb3IoUltkYS0xXSxkYS0xLEwpKSxhYT1mYXx8Qi5zY2FsZShELnkoKS5hY2Nlc3NvcihSW2RhLTFdLGRhLTEsTCkpLGNhPUkuc2NhbGUoRC54KCkuYWNjZXNzb3IoUltkYV0sZGEsTCkpLGZhPUIuc2NhbGUoRC55KCkuYWNjZXNzb3IoUltkYV0sZGEsTCkpLG1hPFA9PT1QPD1jYSYmKFU9UC1tYSxZPWNhLW1hLGJhPWZhLWFhLFU9VSpiYS9ZLE8ubGVmdC5wdXNoKHt4OlAsCnk6Qi5pbnZlcnQoYWErVSl9KSksbWE8SD09PUg8PWNhJiYoVT1ILW1hLFk9Y2EtbWEsYmE9ZmEtYWEsVT1VKmJhL1ksTy5yaWdodC5wdXNoKHt4OkgseTpCLmludmVydChhYStVKX0pKSxhYTxNPT09TTw9ZmEmJihZPWNhLW1hLFU9TS1hYSxiYT1mYS1hYSxVPVUqWS9iYSxPLnRvcC5wdXNoKHt4OkkuaW52ZXJ0KG1hK1UpLHk6TX0pKSxhYTxLPT09Szw9ZmEmJihZPWNhLW1hLFU9Sy1hYSxiYT1mYS1hYSxVPVUqWS9iYSxPLmJvdHRvbS5wdXNoKHt4OkkuaW52ZXJ0KG1hK1UpLHk6S30pKX0pO3JldHVybiBPfTtGLnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgRD10aGlzLnkoKS5zY2FsZS5kb21haW4oKSxCPU1hdGgubWF4KERbMF0sRFsxXSk7RD1NYXRoLm1pbihEWzBdLERbMV0pO0I9MD5CJiZCfHwwPEQmJkR8fDA7dmFyIEk9dGhpcy55KCkuc2NhbGUuc2NhbGUoQik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEl9fTtGLnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9CmZ1bmN0aW9uKCl7dmFyIEQ9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgQj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtCLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih6LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKTtELnB1c2goe2F0dHJUb1Byb2plY3RvcjpCLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHkuQW5pbWF0b3IuUkVTRVQpfSl9RC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoeS5BbmltYXRvci5NQUlOKX0pO3JldHVybiBEfTtGLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgRD1DLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKTtPYmplY3Qua2V5cyhEKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe2lmKCJkIiE9PQpCKXt2YXIgST1EW0JdO0RbQl09ZnVuY3Rpb24oTyxQLEgpe3JldHVybiAwPE8ubGVuZ3RoP0koT1swXSxQLEgpOm51bGx9fX0pO3JldHVybiBEfTtGLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEQpe0Q9dGhpcy5lbnRpdHlOZWFyZXN0QnlYVGhlblkoRCk7cmV0dXJuIG51bGwhPUQ/W0RdOltdfTtGLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0QnlYVGhlblk9ZnVuY3Rpb24oRCl7dmFyIEI9SW5maW5pdHksST1JbmZpbml0eSxPLFA9dGhpcy5ib3VuZHMoKTt0aGlzLmVudGl0aWVzKCkuZm9yRWFjaChmdW5jdGlvbihIKXtpZih2Lk1hdGgud2l0aGluKEgucG9zaXRpb24sUCkpe3ZhciBLPU1hdGguYWJzKEQueC1ILnBvc2l0aW9uLngpLE09TWF0aC5hYnMoRC55LUgucG9zaXRpb24ueSk7aWYoSzxCfHxLPT09QiYmTTxJKU89SCxCPUssST1NfX0pO3JldHVybiBPfTtGLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIEQ9Qy5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpOwpELmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih6LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx6LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSk7cmV0dXJuIER9O0YucHJvdG90eXBlLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yPWZ1bmN0aW9uKEQsQil7dmFyIEk9dGhpcztyZXR1cm4gZnVuY3Rpb24oTyxQLEgpe3JldHVybiBJLl9kM0xpbmVGYWN0b3J5KEgsRCxCKShPKX19O0YucHJvdG90eXBlLl9kM0xpbmVGYWN0b3J5PWZ1bmN0aW9uKEQsQixJKXtmdW5jdGlvbiBPKFAsSCxLKXt2YXIgTT1CKFAsSCxLKTtQPUkoUCxILEspO3JldHVybiB2Lk1hdGguaXNWYWxpZE51bWJlcihNKSYmdi5NYXRoLmlzVmFsaWROdW1iZXIoUCl9dm9pZCAwPT09QiYmKEI9ei5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpO3ZvaWQgMD09PUkmJihJPXouUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gbC5saW5lKCkueChmdW5jdGlvbihQLEgpe3JldHVybiBCKFAsCkgsRCl9KS55KGZ1bmN0aW9uKFAsSCl7cmV0dXJuIEkoUCxILEQpfSkuY3VydmUodGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCkpLmRlZmluZWQoZnVuY3Rpb24oUCxIKXtyZXR1cm4gTyhQLEgsRCl9KX07Ri5wcm90b3R5cGUuX2dldEN1cnZlRmFjdG9yeT1mdW5jdGlvbigpe3ZhciBEPXRoaXMuY3VydmUoKTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBEPyhEPXhbRF0sbnVsbD09RD94LmxpbmVhcjpEKTpEfTtGLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciBEPXRoaXMsQj1uZXcgdi5NYXA7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oSSl7dmFyIE89SS5kYXRhKCk7aWYoRC5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWR8fEQuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe3ZhciBQPU8ubWFwKGZ1bmN0aW9uKEgsSyl7cmV0dXJuIEt9KTtELl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmKFA9RC5fZmlsdGVyQ3JvcHBlZFJlbmRlcmluZyhJLFApKTtELl9kb3duc2FtcGxpbmdFbmFibGVkJiYKKFA9RC5fZmlsdGVyRG93bnNhbXBsaW5nKEksUCkpO0QuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZCYmKFA9RC5fZmlsdGVyRGVuc2VMaW5lcyhJLFApKTtCLnNldChJLFtQLm1hcChmdW5jdGlvbihIKXtyZXR1cm4gT1tIXX0pXSl9ZWxzZSBCLnNldChJLFtPXSl9KTtyZXR1cm4gQn07Ri5wcm90b3R5cGUuX2ZpbHRlckNyb3BwZWRSZW5kZXJpbmc9ZnVuY3Rpb24oRCxCKXtmdW5jdGlvbiBJKGJhLG1hKXtyZXR1cm4gdi5NYXRoLmluUmFuZ2UoYmEsMCxPLndpZHRoKCkpJiZ2Lk1hdGguaW5SYW5nZShtYSwwLE8uaGVpZ2h0KCkpfWZvcih2YXIgTz10aGlzLFA9ei5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksSD16LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxLPUQuZGF0YSgpLE09W10sTD0wO0w8Qi5sZW5ndGg7TCsrKXt2YXIgUj1QKEtbQltMXV0sQltMXSxEKSxVPUgoS1tCW0xdXSxCW0xdLEQpO1I9SShSLFUpO2lmKCFSJiZudWxsIT1CW0wtCjFdJiZudWxsIT1LW0JbTC0xXV0pe1U9UChLW0JbTC0xXV0sQltMLTFdLEQpO3ZhciBZPUgoS1tCW0wtMV1dLEJbTC0xXSxEKTtSPVJ8fEkoVSxZKX1SfHxudWxsPT1CW0wrMV18fG51bGw9PUtbQltMKzFdXXx8KFU9UChLW0JbTCsxXV0sQltMKzFdLEQpLFk9SChLW0JbTCsxXV0sQltMKzFdLEQpLFI9Unx8SShVLFkpKTtSJiZNLnB1c2goQltMXSl9cmV0dXJuIE19O0YucHJvdG90eXBlLl9maWx0ZXJEb3duc2FtcGxpbmc9ZnVuY3Rpb24oRCxCKXtmdW5jdGlvbiBJKGZhLGRhKXt2YXIgbGE9UChPW0JbZmFdXSxCW2ZhXSxEKSxaPUgoT1tCW2ZhXV0sQltmYV0sRCksRmE9UChPW0JbZmErMV1dLEJbZmErMV0sRCk7ZmE9SChPW0JbZmErMV1dLEJbZmErMV0sRCk7cmV0dXJuIEluZmluaXR5PT09ZGE/TWF0aC5mbG9vcihsYSk9PT1NYXRoLmZsb29yKEZhKTpNYXRoLmZsb29yKGZhKT09PU1hdGguZmxvb3IoWisoRmEtbGEpKmRhKX1pZigwPT09Qi5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBPPQpELmRhdGEoKSxQPXouUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLEg9ei5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksSz1bQlswXV0sTT0wO008Qi5sZW5ndGgtMTspe3ZhciBMPUJbTV0sUj1QKE9bQltNXV0sQltNXSxEKSxVPUgoT1tCW01dXSxCW01dLEQpLFk9UChPW0JbTSsxXV0sQltNKzFdLEQpLGJhPUgoT1tCW00rMV1dLEJbTSsxXSxEKTtiYT1NYXRoLmZsb29yKFIpPT09TWF0aC5mbG9vcihZKT9JbmZpbml0eTooYmEtVSkvKFktUik7WT1CW01dO1U9SW5maW5pdHk9PT1iYT9VOlI7Uj1ZO2Zvcih2YXIgbWE9VSxhYT0hMDtNPEIubGVuZ3RoLTEmJihhYXx8SShNLGJhKSk7KXtNKys7YWE9ITE7dmFyIGNhPUluZmluaXR5PT09YmE/SChPW0JbTV1dLEJbTV0sRCk6UChPW0JbTV1dLEJbTV0sRCk7Y2E+bWEmJihtYT1jYSxSPUJbTV0pO2NhPFUmJihVPWNhLFk9QltNXSl9YmE9QltNXTtZIT09TCYmSy5wdXNoKFkpO1IhPT1ZJiZSIT09TCYmSy5wdXNoKFIpO2JhIT09CkwmJmJhIT09WSYmYmEhPT1SJiZLLnB1c2goYmEpfXJldHVybiBLfTtGLnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihELEIpe2lmKDA9PT1CLmxlbmd0aClyZXR1cm5bXTt2YXIgST1ELmRhdGEoKSxPPXouUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLFA9ei5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHRoaXMuX2J1Y2tldEJ5WChELEIsZnVuY3Rpb24oSCl7cmV0dXJuIE8oSVtIXSxILEQpfSxmdW5jdGlvbihIKXtyZXR1cm4gUChJW0hdLEgsRCl9KX07Ri5wcm90b3R5cGUuX2J1Y2tldEJ5WD1mdW5jdGlvbihELEIsSSxPKXt2YXIgUD1bXTtEPUQuZGF0YSgpO2Zvcih2YXIgSD1udWxsLEs9MDtLPD1CLmxlbmd0aDsrK0spe3ZhciBNPUJbS107aWYobnVsbCE9RFtNXSl7dmFyIEw9TWF0aC5mbG9vcihJKE0pKSxSPU8oTSk7bnVsbD09SD9IPW5ldyB2LkJ1Y2tldChNLEwsUik6SC5pc0luQnVja2V0KEwpP0guYWRkVG9CdWNrZXQoUiwKTSk6KFAucHVzaC5hcHBseShQLEguZ2V0VW5pcXVlSW5kaWNlcygpKSxIPW5ldyB2LkJ1Y2tldChNLEwsUikpfX1udWxsIT1IJiZQLnB1c2guYXBwbHkoUCxILmdldFVuaXF1ZUluZGljZXMoKSk7cmV0dXJuIFB9O3JldHVybiBGfShmLlhZUGxvdCk7ZC5MaW5lPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDEpLGs9ZigyNiksbj1mKDApLHA9WzAsMV07Yz1mdW5jdGlvbihxKXtmdW5jdGlvbiByKCl7dmFyIHQ9cS5jYWxsKHRoaXMpfHx0aGlzO3QuX3JhbmdlPVswLDFdO3QuX2QzU2NhbGU9bC5zY2FsZUJhbmQoKTt0Ll9kM1NjYWxlLnJhbmdlKHApOwp0Ll9kM1RyYW5zZm9ybWF0aW9uU2NhbGU9bC5zY2FsZUxpbmVhcigpO3QuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4ocCk7dC5faW5uZXJQYWRkaW5nPXIuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZygpO3QuX291dGVyUGFkZGluZz1yLl9jb252ZXJ0VG9QbG90dGFibGVPdXRlclBhZGRpbmcoKTtyZXR1cm4gdH1nKHIscSk7ci5wcm90b3R5cGUuY2xvbmVXaXRob3V0UHJvdmlkZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9KG5ldyByKS5kb21haW4odGhpcy5kb21haW4oKSkucmFuZ2UodGhpcy5yYW5nZSgpKS5pbm5lclBhZGRpbmcodGhpcy5pbm5lclBhZGRpbmcoKSkub3V0ZXJQYWRkaW5nKHRoaXMub3V0ZXJQYWRkaW5nKCkpO3QuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpKTtyZXR1cm4gdH07ci5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uQXJyYXkudW5pcSh0KX07CnIucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfTtyLnByb3RvdHlwZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIHEucHJvdG90eXBlLmRvbWFpbi5jYWxsKHRoaXMsdCl9O3IucHJvdG90eXBlLmludmVydFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQsdj10aGlzO3ZvaWQgMD09PXQmJih0PXRoaXMucmFuZ2UoKSk7dmFyIHk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSx6PXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbih0WzBdKSx4PXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbih0WzFdKTt0PXRoaXMuX2QzU2NhbGUuZG9tYWluKCk7dmFyIEM9dC5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIHYuX2QzU2NhbGUoRikreS8yfSk7ej1sLmJpc2VjdChDLHopO3g9bC5iaXNlY3QoQyx4KTtyZXR1cm4gdC5zbGljZSh6LHgpfTtyLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gcS5wcm90b3R5cGUucmFuZ2UuY2FsbCh0aGlzLAp0KX07ci5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDEvLjctMX07ci5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuLjUvLjd9O3IucHJvdG90eXBlLl9zZXRCYW5kcz1mdW5jdGlvbigpe3ZhciB0PTEtMS8oMSt0aGlzLmlubmVyUGFkZGluZygpKSx2PXRoaXMub3V0ZXJQYWRkaW5nKCkvKDErdGhpcy5pbm5lclBhZGRpbmcoKSk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nSW5uZXIodCk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nT3V0ZXIodil9O3IucHJvdG90eXBlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKX07ci5wcm90b3R5cGUuc3RlcFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2NhbGVCYW5kKHRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkqKDErdGhpcy5pbm5lclBhZGRpbmcoKSkpfTtyLnByb3RvdHlwZS50aWNrcz0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX07ci5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lubmVyUGFkZGluZzt0aGlzLl9pbm5lclBhZGRpbmc9dDt0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUub3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX291dGVyUGFkZGluZzt0aGlzLl9vdXRlclBhZGRpbmc9dDt0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7dD10aGlzLl9kM1NjYWxlKHQpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHQpfTtyLnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHQsdil7dmFyIHk9dGhpczsKdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHkuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQoay56b29tT3V0KHosdCx2KSl9KSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX07ci5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHQpe3ZhciB2PXRoaXM7dGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHYuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQoeSt0KX0pKTt0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfTtyLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUodCl9O3IucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQodCl9OwpyLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiBwfTtyLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCl9O3IucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odCk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX07ci5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX07ci5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9kM1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzU2NhbGUuZG9tYWluKHQpO3RoaXMuX3NldEJhbmRzKCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYW5nZX07CnIucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9yYW5nZT10O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSh0KTt0aGlzLl9zZXRCYW5kcygpfTtyLnByb3RvdHlwZS5fcmVzY2FsZUJhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZSh0KS10aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUoMCkpfTtyZXR1cm4gcn0oZigxNykuU2NhbGUpO2QuQ2F0ZWdvcnk9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoeCl7dHJ5e3ZhciBDPXgubm9kZSgpLmdldEJCb3goKX1jYXRjaChGKXtDPXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fXJldHVybiBDfWZ1bmN0aW9uIGwoeCl7aWYoIm51bWJlciI9PT10eXBlb2YgeClyZXR1cm57bWluOngsbWF4Onh9O2lmKHggaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4geCYmIm1heCJpbiB4KXJldHVybiB4O3Rocm93IEVycm9yKCJpbnB1dCAnIit4KyInIGNhbid0IGJlIHBhcnNlZCBhcyBhbiBSYW5nZSIpOwp9ZnVuY3Rpb24gayh4LEMpe3g9eC5nZXRQcm9wZXJ0eVZhbHVlKEMpO3JldHVybiBwYXJzZUZsb2F0KHgpfHwwfWZ1bmN0aW9uIG4oeCl7aWYobnVsbD09eHx8Im5vbmUiPT09eClyZXR1cm4gbnVsbDt4PXgubWF0Y2goeSk7aWYobnVsbD09eHx8Mj54Lmxlbmd0aClyZXR1cm4gbnVsbDt4PXhbMV0uc3BsaXQoeikubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBwYXJzZUZsb2F0KEMpfSk7cmV0dXJuIDYhPXgubGVuZ3RoP251bGw6eH12YXIgcD1mKDEpLHE9TWF0aDtkLmNvbnRhaW5zPWZ1bmN0aW9uKHgsQyl7Zm9yKDtudWxsIT1DJiZDIT09eDspQz1DLnBhcmVudE5vZGU7cmV0dXJuIEM9PT14fTtkLmVsZW1lbnRCQm94PWc7ZC5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oeCl7cmV0dXJuIHggaW5zdGFuY2VvZiBTVkdFbGVtZW50P2cocC5zZWxlY3QoeCkpOnggaW5zdGFuY2VvZiBIVE1MRWxlbWVudD8oeD14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt4OngubGVmdCx5OngudG9wLHdpZHRoOngud2lkdGgsCmhlaWdodDp4LmhlaWdodH0pOnt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fTtkLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFFMy82MDtkLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsPWZ1bmN0aW9uKHgpe251bGwhPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh4KTpzZXRUaW1lb3V0KHgsZC5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9O2QuZWxlbWVudFdpZHRoPWZ1bmN0aW9uKHgpe3g9eCBpbnN0YW5jZW9mIHAuc2VsZWN0aW9uP3gubm9kZSgpOng7eD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4KTtyZXR1cm4gayh4LCJ3aWR0aCIpK2soeCwicGFkZGluZy1sZWZ0Iikrayh4LCJwYWRkaW5nLXJpZ2h0Iikrayh4LCJib3JkZXItbGVmdC13aWR0aCIpK2soeCwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9O2QuZWxlbWVudEhlaWdodD1mdW5jdGlvbih4KXt4PXggaW5zdGFuY2VvZiBwLnNlbGVjdGlvbj8KeC5ub2RlKCk6eDt4PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpO3JldHVybiBrKHgsImhlaWdodCIpK2soeCwicGFkZGluZy10b3AiKStrKHgsInBhZGRpbmctYm90dG9tIikrayh4LCJib3JkZXItdG9wLXdpZHRoIikrayh4LCJib3JkZXItYm90dG9tLXdpZHRoIil9O3ZhciByPS90cmFuc2xhdGVccypcKFxzKigoPzpbLStdP1swLTldKlwuP1swLTldKykpKD86KD86KD86XHMrLD9ccyopfCg/OixccyopKSgoPzpbLStdP1swLTldKlwuP1swLTldKykpKT9ccypcKS8sdD0vcm90YXRlXHMqXChccyooKD86Wy0rXT9bMC05XSpcLj9bMC05XSspKVxzKlwpLyx2PS9zY2FsZVxzKlwoXHMqKCg/OlstK10/WzAtOV0qXC4/WzAtOV0rKSkoPzooPzooPzpccyssP1xzKil8KD86LFxzKikpKCg/OlstK10/WzAtOV0qXC4/WzAtOV0rKSkpP1xzKlwpLztkLmdldFRyYW5zbGF0ZVZhbHVlcz1mdW5jdGlvbih4KXt4PXIuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtpZihudWxsIT14KXt2YXIgQz0KeFsyXTtyZXR1cm5bK3hbMV0sKyh2b2lkIDA9PT1DPzA6QyldfXJldHVyblswLDBdfTtkLmdldFJvdGF0ZT1mdW5jdGlvbih4KXt4PXQuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtyZXR1cm4gbnVsbCE9eD8reFsxXTowfTtkLmdldFNjYWxlVmFsdWVzPWZ1bmN0aW9uKHgpe3ZhciBDPXYuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtyZXR1cm4gbnVsbCE9Qz8oeD1DWzFdLEM9Q1syXSxbK3gsbnVsbD09Qz8reDorQ10pOlswLDBdfTtkLmNsaWVudFJlY3RzT3ZlcmxhcD1mdW5jdGlvbih4LEMpe3JldHVybiBxLmZsb29yKHgucmlnaHQpPD1xLmNlaWwoQy5sZWZ0KXx8cS5jZWlsKHgubGVmdCk+PXEuZmxvb3IoQy5yaWdodCl8fHEuZmxvb3IoeC5ib3R0b20pPD1xLmNlaWwoQy50b3ApfHxxLmNlaWwoeC50b3ApPj1xLmZsb29yKEMuYm90dG9tKT8hMTohMH07ZC5leHBhbmRSZWN0PWZ1bmN0aW9uKHgsQyl7cmV0dXJue2xlZnQ6eC5sZWZ0LUMsdG9wOngudG9wLUMscmlnaHQ6eC5yaWdodCsKQyxib3R0b206eC5ib3R0b20rQyx3aWR0aDp4LndpZHRoKzIqQyxoZWlnaHQ6eC5oZWlnaHQrMipDfX07ZC5jbGllbnRSZWN0SW5zaWRlPWZ1bmN0aW9uKHgsQyl7cmV0dXJuIHEuZmxvb3IoQy5sZWZ0KTw9cS5jZWlsKHgubGVmdCkmJnEuZmxvb3IoQy50b3ApPD1xLmNlaWwoeC50b3ApJiZxLmZsb29yKHgucmlnaHQpPD1xLmNlaWwoQy5yaWdodCkmJnEuZmxvb3IoeC5ib3R0b20pPD1xLmNlaWwoQy5ib3R0b20pfTtkLmludGVyc2VjdHNCQm94PWZ1bmN0aW9uKHgsQyxGLEQpe3ZvaWQgMD09PUQmJihEPS41KTt4PWwoeCk7Qz1sKEMpO3JldHVybiBGLngrRi53aWR0aD49eC5taW4tRCYmRi54PD14Lm1heCtEJiZGLnkrRi5oZWlnaHQ+PUMubWluLUQmJkYueTw9Qy5tYXgrRH07ZC5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mdW5jdGlvbih4KXtmb3IodmFyIEM9W107eCYmeCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylDLnB1c2goeCkseD14LnBhcmVudEVsZW1lbnQ7cmV0dXJuIEN9OwpkLmdldEVsZW1lbnRUcmFuc2Zvcm09ZnVuY3Rpb24oeCl7eD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4LG51bGwpO3g9eC5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoIi1tb3otdHJhbnNmb3JtIil8fHguZ2V0UHJvcGVydHlWYWx1ZSgiLW1zLXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoIi1vLXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpO3JldHVybiBuKHgpfTt2YXIgeT0vXm1hdHJpeFwoKFteKV0rKVwpJC8sej0vWywgXSsvfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyh0LHYpe3JldHVyblt0WzBdKnZbMF0rdFsyXSp2WzFdLHRbMV0qdlswXSt0WzNdKnZbMV0sdFswXSp2WzJdK3RbMl0qdlszXSx0WzFdKnZbMl0rdFszXSp2WzNdLHRbMF0qdls0XSt0WzJdKnZbNV0rdFs0XSx0WzFdKnZbNF0rdFszXSp2WzVdK3RbNV1dfWZ1bmN0aW9uIGwodCx2KXtyZXR1cm5bdFswXSwKdFsxXSx0WzJdLHRbM10sdFswXSp2WzBdK3RbMl0qdlsxXSt0WzRdLHRbMV0qdlswXSt0WzNdKnZbMV0rdFs1XV19ZnVuY3Rpb24gayh0KXt2YXIgdj10WzBdKnRbM10tdFsxXSp0WzJdO2lmKDA9PT12KXRocm93IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2PTEvdjtyZXR1cm5bdip0WzNdLHYqLXRbMV0sdiotdFsyXSx2KnRbMF0sdiooLXRbM10qdFs0XSt0WzJdKnRbNV0pLHYqKHRbMV0qdFs0XSstdFswXSp0WzVdKV19dmFyIG49ZigxKSxwPWYoNTUpLHE9TWF0aCxyPVsxLDAsMCwxLDAsMF07ZC5pblJhbmdlPWZ1bmN0aW9uKHQsdix5KXtyZXR1cm4gcS5taW4odix5KTw9dCYmdDw9cS5tYXgodix5KX07ZC5jbGFtcD1mdW5jdGlvbih0LHYseSl7cmV0dXJuIHEubWluKHEubWF4KHYsdCkseSl9O2QubWF4PWZ1bmN0aW9uKHQsdix5KXt2YXIgej0iZnVuY3Rpb24iPT09dHlwZW9mIHY/djpudWxsO3Y9bnVsbD09ej92Onk7dD1udWxsPT16P24ubWF4KHQpOm4ubWF4KHQseik7cmV0dXJuIHZvaWQgMCE9PQp0P3Q6dn07ZC5taW49ZnVuY3Rpb24odCx2LHkpe3ZhciB6PSJmdW5jdGlvbiI9PT10eXBlb2Ygdj92Om51bGw7dj1udWxsPT16P3Y6eTt0PW51bGw9PXo/bi5taW4odCk6bi5taW4odCx6KTtyZXR1cm4gdm9pZCAwIT09dD90OnZ9O2QuaXNOYU49ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT10fTtkLmlzVmFsaWROdW1iZXI9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgdCYmMT50LXR9O2QucmFuZ2U9ZnVuY3Rpb24odCx2LHkpe3ZvaWQgMD09PXkmJih5PTEpO2lmKDA9PT15KXRocm93IEVycm9yKCJzdGVwIGNhbm5vdCBiZSAwIik7dj1xLm1heChxLmNlaWwoKHYtdCkveSksMCk7Zm9yKHZhciB6PVtdLHg9MDt4PHY7Kyt4KXpbeF09dCt5Kng7cmV0dXJuIHp9O2QuZGlzdGFuY2VTcXVhcmVkPWZ1bmN0aW9uKHQsdil7cmV0dXJuIHEucG93KHYueS10LnksMikrcS5wb3codi54LXQueCwyKX07ZC5kZWdyZWVzVG9SYWRpYW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0LzM2MCoKcS5QSSoyfTtkLndpdGhpbj1mdW5jdGlvbih0LHYpe3JldHVybiB2LnRvcExlZnQueDw9dC54JiZ2LmJvdHRvbVJpZ2h0Lng+PXQueCYmdi50b3BMZWZ0Lnk8PXQueSYmdi5ib3R0b21SaWdodC55Pj10Lnl9O2QuYm91bmRzSW50ZXJzZWN0cz1mdW5jdGlvbih0LHYseSx6LHgsQyl7cmV0dXJuIHQ8PTAreCYmMDw9dCt5JiZ2PD0wK0MmJjA8PXYren07ZC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3Q9cC5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycyh0KTtmb3IodmFyIHY9cix5PW51bGwsej0wO3o8dC5sZW5ndGg7eisrKXt2YXIgeD10W3pdLEM9cC5nZXRFbGVtZW50VHJhbnNmb3JtKHgpO2lmKG51bGwhPUMpe3ZhciBGPXguY2xpZW50V2lkdGgvMixEPXguY2xpZW50SGVpZ2h0LzI7dj1sKHYsW0YsRF0pO3Y9Zyh2LGsoQykpO3Y9bCh2LFstRiwtRF0pfUM9eC5zY3JvbGxMZWZ0O0Y9eC5zY3JvbGxUb3A7aWYobnVsbD09PXl8fHg9PT15KUMtPXgub2Zmc2V0TGVmdCt4LmNsaWVudExlZnQsCkYtPXgub2Zmc2V0VG9wK3guY2xpZW50VG9wLHk9eC5vZmZzZXRQYXJlbnQ7dj1sKHYsW0MsRl0pfXJldHVybiB2fTtkLm11bHRpcGx5TWF0cml4PWc7ZC5wcmVtdWx0aXBseVRyYW5zbGF0ZT1mdW5jdGlvbih0LHYpe3JldHVyblt2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0rdFswXSx2WzVdK3RbMV1dfTtkLm11bHRpcGx5VHJhbnNsYXRlPWw7ZC5pbnZlcnRNYXRyaXg9aztkLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKHQsdil7cmV0dXJue3g6dFswXSp2LngrdFsyXSp2LnkrdFs0XSx5OnRbMV0qdi54K3RbM10qdi55K3RbNV19fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPW5ldyAoZigxMTQpLlNwbGl0U3RyYXRlZ3lMaW5lYXIpO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHAscSl7dm9pZCAwPT09cCYmKHA9NSk7dm9pZCAwPT09cSYmKHE9Zyk7dGhpcy5tYXhOb2RlQ2hpbGRyZW49cDt0aGlzLnNwbGl0U3RyYXRlZ3k9cTt0aGlzLnJvb3Q9bmV3IGwoITApO3RoaXMuc2l6ZT0wfW4ucHJvdG90eXBlLmdldFJvb3Q9CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdH07bi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnJvb3Q9bmV3IGwoITApO3RoaXMuc2l6ZT0wfTtuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24ocCxxKXtmb3IodmFyIHI9dGhpcy5yb290OyFyLmxlYWY7KXI9ci5zdWJ0cmVlKHApO3A9bC52YWx1ZU5vZGUocCxxKTtyLmluc2VydChwKTtmb3IodGhpcy5zaXplKz0xO3Iub3ZlcmZsb3codGhpcy5tYXhOb2RlQ2hpbGRyZW4pOylyPXIuc3BsaXQodGhpcy5zcGxpdFN0cmF0ZWd5KSxudWxsPT1yLnBhcmVudCYmKHRoaXMucm9vdD1yKX07bi5wcm90b3R5cGUubG9jYXRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHEpe3JldHVybiBxLmNvbnRhaW5zKHApfSl9O24ucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBCb3VuZHMocSxwKX0pfTtuLnByb3RvdHlwZS5pbnRlcnNlY3RYPQpmdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBYKHEscCl9KX07bi5wcm90b3R5cGUuaW50ZXJzZWN0WT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBZKHEscCl9KX07bi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24ocCl7dmFyIHE9W107aWYobnVsbCE9dGhpcy5yb290LmJvdW5kcyYmIXAodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHE7Zm9yKHZhciByPVt0aGlzLnJvb3RdOzA8ci5sZW5ndGg7KWZvcih2YXIgdD1yLnNoaWZ0KCksdj0wO3Y8dC5lbnRyaWVzLmxlbmd0aDt2Kyspe3ZhciB5PXQuZW50cmllc1t2XTtwKHkuYm91bmRzKSYmKHQubGVhZj9xLnB1c2goeS52YWx1ZSk6ci5wdXNoKHkpKX1yZXR1cm4gcX07cmV0dXJuIG59KCk7ZC5SVHJlZT1jO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihwKXt0aGlzLmxlYWY9cDt0aGlzLmJvdW5kcz0KbnVsbDt0aGlzLmVudHJpZXM9W107dGhpcy52YWx1ZT10aGlzLnBhcmVudD1udWxsfW4udmFsdWVOb2RlPWZ1bmN0aW9uKHAscSl7dmFyIHI9bmV3IG4oITApO3IuYm91bmRzPXA7ci52YWx1ZT1xO3JldHVybiByfTtuLnByb3RvdHlwZS5vdmVyZmxvdz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aD5wfTtuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24ocCl7dGhpcy5lbnRyaWVzLnB1c2gocCk7cC5wYXJlbnQ9dGhpcztmb3IodmFyIHE9dGhpcztudWxsIT1xOylxLmJvdW5kcz1rLnVuaW9uQWxsKFtxLmJvdW5kcyxwLmJvdW5kc10pLHE9cS5wYXJlbnR9O24ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihwKXtwPXRoaXMuZW50cmllcy5pbmRleE9mKHApO2lmKDA8PXApZm9yKHRoaXMuZW50cmllcy5zcGxpY2UocCwxKSxwPXRoaXM7bnVsbCE9cDspcC5ib3VuZHM9ay51bmlvbkFsbChwLmVudHJpZXMubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBxLmJvdW5kc30pKSwKcD1wLnBhcmVudDtyZXR1cm4gdGhpc307bi5wcm90b3R5cGUuc3VidHJlZT1mdW5jdGlvbihwKXtmb3IodmFyIHE9bnVsbCxyPTA7cjx0aGlzLmVudHJpZXMubGVuZ3RoO3IrKyl7dmFyIHQ9dGhpcy5lbnRyaWVzW3JdLHY9dC51bmlvbkFyZWFEaWZmZXJlbmNlKHApO2lmKEluZmluaXR5PnZ8fEluZmluaXR5PT09diYmbnVsbCE9cSYmdC5lbnRyaWVzLmxlbmd0aDxxLmVudHJpZXMubGVuZ3RoKXE9dH1yZXR1cm4gcX07bi5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCl7bnVsbCE9dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LnJlbW92ZSh0aGlzKTt2YXIgcT1bbmV3IG4odGhpcy5sZWFmKSxuZXcgbih0aGlzLmxlYWYpXTtwLnNwbGl0KHRoaXMuZW50cmllcyxxKTtwPW51bGwhPXRoaXMucGFyZW50P3RoaXMucGFyZW50Om5ldyBuKCExKTtwLmluc2VydChxWzBdKTtwLmluc2VydChxWzFdKTtyZXR1cm4gcH07bi5wcm90b3R5cGUudW5pb25BcmVhRGlmZmVyZW5jZT1mdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5hYnMoay51bmlvbih0aGlzLmJvdW5kcywKcCkuYXJlYSgpLXRoaXMuYm91bmRzLmFyZWEoKSl9O24ucHJvdG90eXBlLm1heERlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVhZj8xOjErdGhpcy5lbnRyaWVzLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5tYXhEZXB0aCgpfSkucmVkdWNlKGZ1bmN0aW9uKHAscSl7cmV0dXJuIE1hdGgubWF4KHAscSl9KX07cmV0dXJuIG59KCk7ZC5SVHJlZU5vZGU9bDt2YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4ocCxxLHIsdCl7dGhpcy54bD1wO3RoaXMueWw9cTt0aGlzLnhoPXI7dGhpcy55aD10O3RoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsO3RoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1uLnh5d2g9ZnVuY3Rpb24ocCxxLHIsdCl7cmV0dXJuIG5ldyBuKHAscSxwK3IscSt0KX07bi5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBuKHAueCxwLnkscC54K3Aud2lkdGgscC55K3AuaGVpZ2h0KX07bi5ib3VuZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIG4ucG9pbnRQYWlyKHAudG9wTGVmdCwKcC5ib3R0b21SaWdodCl9O24ucG9pbnRQYWlyPWZ1bmN0aW9uKHAscSl7cmV0dXJuIG5ldyBuKE1hdGgubWluKHAueCxxLngpLE1hdGgubWluKHAueSxxLnkpLE1hdGgubWF4KHAueCxxLngpLE1hdGgubWF4KHAueSxxLnkpKX07bi5wb2ludHM9ZnVuY3Rpb24ocCl7aWYoMj5wLmxlbmd0aCl0aHJvdyBFcnJvcigibmVlZCBhdCBsZWFzdCAyIHBvaW50cyB0byBjcmVhdGUgYm91bmRzIik7dmFyIHE9cC5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIueH0pO3A9cC5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIueX0pO3JldHVybiBuZXcgbihxLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1pbihyLHQpfSkscC5yZWR1Y2UoZnVuY3Rpb24ocix0KXtyZXR1cm4gTWF0aC5taW4ocix0KX0pLHEucmVkdWNlKGZ1bmN0aW9uKHIsdCl7cmV0dXJuIE1hdGgubWF4KHIsdCl9KSxwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1heChyLHQpfSkpfTtuLnVuaW9uPWZ1bmN0aW9uKHAsCnEpe3JldHVybiBuZXcgbihNYXRoLm1pbihwLnhsLHEueGwpLE1hdGgubWluKHAueWwscS55bCksTWF0aC5tYXgocC54aCxxLnhoKSxNYXRoLm1heChwLnloLHEueWgpKX07bi51bmlvbkFsbD1mdW5jdGlvbihwKXtwPXAuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBudWxsIT1xfSk7cmV0dXJuIDA9PT1wLmxlbmd0aD9udWxsOnAucmVkdWNlKGZ1bmN0aW9uKHEscil7cmV0dXJuIG4udW5pb24ocSxyKX0pfTtuLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbihwLHEpe3JldHVybiBuLmlzQm91bmRzT3ZlcmxhcFgocCxxKSYmbi5pc0JvdW5kc092ZXJsYXBZKHAscSl9O24uaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbihwLHEpe3JldHVybiEocC54aDxxLnhsKSYmIShwLnhsPnEueGgpfTtuLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24ocCxxKXtyZXR1cm4hKHAueWg8cS55bCkmJiEocC55bD5xLnloKX07bi5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe251bGw9PXRoaXMuYXJlYUNhY2hlZCYmCih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpO3JldHVybiB0aGlzLmFyZWFDYWNoZWR9O24ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnhsPD1wLngmJnRoaXMueGg+PXAueCYmdGhpcy55bDw9cC55JiZ0aGlzLnloPj1wLnl9O3JldHVybiBufSgpO2QuUlRyZWVCb3VuZHM9a30sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpeyJmdW5jdGlvbiI9PT10eXBlb2Ygd2luZG93LlNldD90aGlzLl9lczZTZXQ9bmV3IHdpbmRvdy5TZXQ6dGhpcy5fdmFsdWVzPVtdO3RoaXMuc2l6ZT0wfWYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXtpZihudWxsIT10aGlzLl9lczZTZXQpcmV0dXJuIHRoaXMuX2VzNlNldC5hZGQoZyksdGhpcy5zaXplPXRoaXMuX2VzNlNldC5zaXplLHRoaXM7dGhpcy5oYXMoZyl8fCh0aGlzLl92YWx1ZXMucHVzaChnKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCk7CnJldHVybiB0aGlzfTtmLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZyl7aWYobnVsbCE9dGhpcy5fZXM2U2V0KXJldHVybiBnPXRoaXMuX2VzNlNldC5kZWxldGUoZyksdGhpcy5zaXplPXRoaXMuX2VzNlNldC5zaXplLGc7Zz10aGlzLl92YWx1ZXMuaW5kZXhPZihnKTtyZXR1cm4tMSE9PWc/KHRoaXMuX3ZhbHVlcy5zcGxpY2UoZywxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9O2YucHJvdG90eXBlLmhhcz1mdW5jdGlvbihnKXtyZXR1cm4gbnVsbCE9dGhpcy5fZXM2U2V0P3RoaXMuX2VzNlNldC5oYXMoZyk6LTEhPT10aGlzLl92YWx1ZXMuaW5kZXhPZihnKX07Zi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihnLGwpe3ZhciBrPXRoaXM7bnVsbCE9dGhpcy5fZXM2U2V0P3RoaXMuX2VzNlNldC5mb3JFYWNoKGZ1bmN0aW9uKG4scCl7cmV0dXJuIGcuY2FsbChsLG4scCxrKX0sbCk6dGhpcy5fdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obil7Zy5jYWxsKGwsCm4sbixrKX0pfTtyZXR1cm4gZn0oKTtkLlNldD1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMTMxKSk7ZyhmKDEzMCkpfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGssbil7ZnVuY3Rpb24gcCgpe3RoaXMuY29uc3RydWN0b3I9a31mb3IodmFyIHEgaW4gbiluLmhhc093blByb3BlcnR5KHEpJiYoa1txXT1uW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihwLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcCl9LGw9ZigyMSk7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBuKHAscSl7dmFyIHI9ay5jYWxsKHRoaXMscCxxKXx8dGhpcztyLmNhY2hlPW5ldyBsLkNhY2hlKGZ1bmN0aW9uKHQpe3JldHVybiByLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlKHQpfSk7cmV0dXJuIHJ9ZyhuLGspO24ucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlPQpmdW5jdGlvbihwKXtyZXR1cm4gay5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHApfTtuLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocCl9O24ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfTtyZXR1cm4gbn0oZig2MSkuQ2hhcmFjdGVyTWVhc3VyZXIpO2QuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihuLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbil9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8CnRoaXN9ZyhrLGwpO2sucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBsLnByb3RvdHlwZS5fbWVhc3VyZUxpbmUuY2FsbCh0aGlzLG4pfTtrLnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24obil7dmFyIHA9dGhpcztuPW4uc3BsaXQoIiIpLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gcC5fbWVhc3VyZUNoYXJhY3RlcihxKX0pO3JldHVybntoZWlnaHQ6bi5yZWR1Y2UoZnVuY3Rpb24ocSxyKXtyZXR1cm4gTWF0aC5tYXgocSxyLmhlaWdodCl9LDApLHdpZHRoOm4ucmVkdWNlKGZ1bmN0aW9uKHEscil7cmV0dXJuIHErci53aWR0aH0sMCl9fTtyZXR1cm4ga30oZig2MykuTWVhc3VyZXIpO2QuQ2hhcmFjdGVyTWVhc3VyZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDM2KSk7ZyhmKDYwKSk7ZyhmKDEzMikpO2coZig2MSkpO2coZig2MykpfSwKZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihrLG4pe2Z1bmN0aW9uIHAoKXt0aGlzLmNvbnN0cnVjdG9yPWt9Zm9yKHZhciBxIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShxKSYmKGtbcV09bltxXSk7ay5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKToocC5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHApfSxsPWYoMzYpO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbihwLHEpe3ZvaWQgMD09PXEmJihxPSExKTtwPWsuY2FsbCh0aGlzLHApfHx0aGlzO3AudXNlR3VhcmRzPXE7cmV0dXJuIHB9ZyhuLGspO24ucHJvdG90eXBlLl9hZGRHdWFyZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGwuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtwK2wuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVH07bi5wcm90b3R5cGUuX21lYXN1cmVMaW5lPWZ1bmN0aW9uKHApe3ZhciBxO3ZvaWQgMD09PXEmJihxPSExKTtxPXRoaXMudXNlR3VhcmRzfHwKcXx8L15bXHQgXSQvLnRlc3QocCk7cD1rLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxxP3RoaXMuX2FkZEd1YXJkcyhwKTpwKTtwLndpZHRoLT1xPzIqdGhpcy5nZXRHdWFyZFdpZHRoKCk6MDtyZXR1cm4gcH07bi5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihwKXt2YXIgcT10aGlzO3ZvaWQgMD09PXAmJihwPWwuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCk7aWYoIiI9PT1wLnRyaW0oKSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07cD1wLnRyaW0oKS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVMaW5lKHIpfSk7cmV0dXJue2hlaWdodDpwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiByK3QuaGVpZ2h0fSwwKSx3aWR0aDpwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1heChyLHQud2lkdGgpfSwwKX19O24ucHJvdG90eXBlLmdldEd1YXJkV2lkdGg9ZnVuY3Rpb24oKXtudWxsPT10aGlzLmd1YXJkV2lkdGgmJgoodGhpcy5ndWFyZFdpZHRoPWsucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzKS53aWR0aCk7cmV0dXJuIHRoaXMuZ3VhcmRXaWR0aH07cmV0dXJuIG59KGwuQWJzdHJhY3RNZWFzdXJlcik7ZC5NZWFzdXJlcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMTM4KSk7ZyhmKDY1KSl9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDIxKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe3RoaXMubWF4TGluZXMoSW5maW5pdHkpO3RoaXMudGV4dFRyaW1taW5nKCk7dGhpcy5hbGxvd0JyZWFraW5nV29yZHMoKTt0aGlzLl90b2tlbml6ZXI9bmV3IGcuVG9rZW5pemVyO3RoaXMuX2JyZWFraW5nQ2hhcmFjdGVyPSItIn1sLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbihrKXtpZihudWxsPT1rKXJldHVybiB0aGlzLl9tYXhMaW5lczt0aGlzLl9tYXhMaW5lcz1rO3JldHVybiB0aGlzfTsKbC5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dFRyaW1taW5nPSJlbGxpcHNpcyJ9O2wucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbigpe3RoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz0hMH07bC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihrLG4scCxxKXt2YXIgcj10aGlzO3ZvaWQgMD09PXEmJihxPUluZmluaXR5KTt2YXIgdD17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDprLHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9O3A9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IocS9uLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpwLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6dH07dmFyIHY9ay5zcGxpdCgiXG4iKTtyZXR1cm4gdi5yZWR1Y2UoZnVuY3Rpb24oeSx6LHgpe3JldHVybiByLmJyZWFrTGluZVRvRml0V2lkdGgoeSwKeix4IT09di5sZW5ndGgtMSxuKX0scCkud3JhcHBpbmd9O2wucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24oayxuLHAscSl7dmFyIHI9dGhpcztrLmNhbkZpdFRleHR8fCIiPT09ay53cmFwcGluZy50cnVuY2F0ZWRUZXh0fHwoay53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz0iXG4iKTtrPXRoaXMuX3Rva2VuaXplci50b2tlbml6ZShuKS5yZWR1Y2UoZnVuY3Rpb24odCx2KXtyZXR1cm4gci53cmFwTmV4dFRva2VuKHYsdCxxKX0sayk7bj1nLlN0cmluZ01ldGhvZHMudHJpbUVuZChrLmN1cnJlbnRMaW5lKTtrLndyYXBwaW5nLm5vTGluZXMrPSsoIiIhPT1uKTtrLndyYXBwaW5nLm5vTGluZXM9PT1rLmF2YWlsYWJsZUxpbmVzJiYibm9uZSIhPT10aGlzLl90ZXh0VHJpbW1pbmcmJnA/ay5jYW5GaXRUZXh0PSExOmsud3JhcHBpbmcud3JhcHBlZFRleHQrPW47ay5jdXJyZW50TGluZT0iXG4iO3JldHVybiBrfTtsLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbihrLApuLHApe3ZhciBxPXRoaXMscj10aGlzLl9hbGxvd0JyZWFraW5nV29yZHM/ay5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHQsdil7cmV0dXJuIHYhPT1rLmxlbmd0aC0xP3QrcS5fYnJlYWtpbmdDaGFyYWN0ZXI6dH0pOltrXTtyZXR1cm4gcC5tZWFzdXJlKGspLndpZHRoPD1ufHxyLmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiBwLm1lYXN1cmUodCkud2lkdGg8PW59KX07bC5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24oayxuLHApe2lmKCJub25lIj09PXRoaXMuX3RleHRUcmltbWluZylyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOmt9O3ZhciBxPWsuc3Vic3RyaW5nKDApLnRyaW0oKSxyPXAubWVhc3VyZShxKS53aWR0aCx0PXAubWVhc3VyZSgiLi4uIikud2lkdGgsdj0wPGsubGVuZ3RoJiYiXG4iPT09a1swXT8iXG4iOiIiO2lmKG48PXQpcmV0dXJue3JlbWFpbmluZ1Rva2VuOmssd3JhcHBlZFRva2VuOnYrIi4uLiIuc3Vic3RyKDAsTWF0aC5mbG9vcihuLwoodC8zKSkpfTtmb3IoO3IrdD5uOylxPWcuU3RyaW5nTWV0aG9kcy50cmltRW5kKHEuc3Vic3RyKDAscS5sZW5ndGgtMSkpLHI9cC5tZWFzdXJlKHEpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpnLlN0cmluZ01ldGhvZHMudHJpbUVuZChrLnN1YnN0cmluZyhxLmxlbmd0aCksIi0iKS50cmltKCksd3JhcHBlZFRva2VuOnYrcSsiLi4uIn19O2wucHJvdG90eXBlLndyYXBOZXh0VG9rZW49ZnVuY3Rpb24oayxuLHApe2lmKCFuLmNhbkZpdFRleHR8fG4uYXZhaWxhYmxlTGluZXM9PT1uLndyYXBwaW5nLm5vTGluZXN8fCF0aGlzLmNhbkZpdFRva2VuKGssbi5hdmFpbGFibGVXaWR0aCxwKSlyZXR1cm4gdGhpcy5maW5pc2hXcmFwcGluZyhrLG4scCk7Zm9yKDtrOyl7dmFyIHE9dGhpcy5icmVha1Rva2VuVG9GaXRJbldpZHRoKGssbi5jdXJyZW50TGluZSxuLmF2YWlsYWJsZVdpZHRoLHApO24uY3VycmVudExpbmU9cS5saW5lO2s9cS5yZW1haW5pbmdUb2tlbjtpZihudWxsIT1rKWlmKG4ud3JhcHBpbmcubm9Ccm9rZVdvcmRzKz0KK3EuYnJlYWtXb3JkLCsrbi53cmFwcGluZy5ub0xpbmVzLG4uYXZhaWxhYmxlTGluZXM9PT1uLndyYXBwaW5nLm5vTGluZXMpe3A9dGhpcy5hZGRFbGxpcHNpcyhuLmN1cnJlbnRMaW5lLG4uYXZhaWxhYmxlV2lkdGgscCk7bi53cmFwcGluZy53cmFwcGVkVGV4dCs9cC53cmFwcGVkVG9rZW47bi53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1wLnJlbWFpbmluZ1Rva2VuK2s7bi5jdXJyZW50TGluZT0iXG4iO2JyZWFrfWVsc2Ugbi53cmFwcGluZy53cmFwcGVkVGV4dCs9Zy5TdHJpbmdNZXRob2RzLnRyaW1FbmQobi5jdXJyZW50TGluZSksbi5jdXJyZW50TGluZT0iXG4ifXJldHVybiBufTtsLnByb3RvdHlwZS5maW5pc2hXcmFwcGluZz1mdW5jdGlvbihrLG4scCl7bi5jYW5GaXRUZXh0JiZuLmF2YWlsYWJsZUxpbmVzIT09bi53cmFwcGluZy5ub0xpbmVzJiZ0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJiJub25lIiE9PXRoaXMuX3RleHRUcmltbWluZz8ocD10aGlzLmFkZEVsbGlwc2lzKG4uY3VycmVudExpbmUrCmssbi5hdmFpbGFibGVXaWR0aCxwKSxuLndyYXBwaW5nLndyYXBwZWRUZXh0Kz1wLndyYXBwZWRUb2tlbixuLndyYXBwaW5nLnRydW5jYXRlZFRleHQrPXAucmVtYWluaW5nVG9rZW4sbi53cmFwcGluZy5ub0Jyb2tlV29yZHMrPSsocC5yZW1haW5pbmdUb2tlbi5sZW5ndGg8ay5sZW5ndGgpLG4ud3JhcHBpbmcubm9MaW5lcys9KygwPHAud3JhcHBlZFRva2VuLmxlbmd0aCksbi5jdXJyZW50TGluZT0iIik6bi53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1rO24uY2FuRml0VGV4dD0hMTtyZXR1cm4gbn07bC5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbihrLG4scCxxKXtpZih2b2lkIDA9PT1yKXZhciByPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyO2lmKHEubWVhc3VyZShuK2spLndpZHRoPD1wKXJldHVybnticmVha1dvcmQ6ITEsbGluZTpuK2sscmVtYWluaW5nVG9rZW46bnVsbH07aWYoIiI9PT1rLnRyaW0oKSlyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6biwKcmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOm4scmVtYWluaW5nVG9rZW46a307Zm9yKHZhciB0PTA7dDxrLmxlbmd0aDspaWYocS5tZWFzdXJlKG4ray5zdWJzdHJpbmcoMCx0KzEpK3IpLndpZHRoPD1wKSsrdDtlbHNlIGJyZWFrO3A9IiI7MDx0JiYocD1yKTtyZXR1cm57YnJlYWtXb3JkOjA8dCxsaW5lOm4ray5zdWJzdHJpbmcoMCx0KStwLHJlbWFpbmluZ1Rva2VuOmsuc3Vic3RyaW5nKHQpfX07cmV0dXJuIGx9KCk7ZC5XcmFwcGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXsoZnVuY3Rpb24oZyl7Zm9yKHZhciBsIGluIGcpZC5oYXNPd25Qcm9wZXJ0eShsKXx8KGRbbF09Z1tsXSl9KShmKDEzOSkpfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoNzIpKTtnKGYoNzMpKTtnKGYoMjgpKX0sZnVuY3Rpb24oYywKZCl7ZC52ZXJzaW9uPSIzLjcuMCJ9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKHgsQyl7cmV0dXJuIHguZWFjaChmdW5jdGlvbigpe3ZhciBGPUMuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQ9ei5zZWxlY3QodGhpcyksQjtmb3IoQiBpbiBGKUQuYXR0cihCLEZbQl0pfSl9ZnVuY3Rpb24gbCh4LEMpe2Zvcih2YXIgRiBpbiBDKXguYXR0cihGLENbRl0pO3JldHVybiB4fWZ1bmN0aW9uIGsoeCxDLEYpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRD1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxCPXouc2VsZWN0KHRoaXMpLEk7Zm9yKEkgaW4gRClCLnN0eWxlKEksRFtJXSxGKX0pfWZ1bmN0aW9uIG4oeCxDLEYpe2Zvcih2YXIgRCBpbiBDKXguc3R5bGUoRCxDW0RdLEYpO3JldHVybiB4fWZ1bmN0aW9uIHAoeCxDKXtyZXR1cm4geC5lYWNoKGZ1bmN0aW9uKCl7dmFyIEY9Qy5hcHBseSh0aGlzLGFyZ3VtZW50cyksRD16LnNlbGVjdCh0aGlzKSxCO2ZvcihCIGluIEYpRC5wcm9wZXJ0eShCLApGW0JdKX0pfWZ1bmN0aW9uIHEoeCxDKXtmb3IodmFyIEYgaW4gQyl4LnByb3BlcnR5KEYsQ1tGXSk7cmV0dXJuIHh9ZnVuY3Rpb24gcih4LEMpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRj1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxEPXouc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oeCksQjtmb3IoQiBpbiBGKUQuYXR0cihCLEZbQl0pfSl9ZnVuY3Rpb24gdCh4LEMpe2Zvcih2YXIgRiBpbiBDKXguYXR0cihGLENbRl0pO3JldHVybiB4fWZ1bmN0aW9uIHYoeCxDLEYpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRD1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxCPXouc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oeCksSTtmb3IoSSBpbiBEKUIuc3R5bGUoSSxEW0ldLEYpfSl9ZnVuY3Rpb24geSh4LEMsRil7Zm9yKHZhciBEIGluIEMpeC5zdHlsZShELENbRF0sRik7cmV0dXJuIHh9dmFyIHo9Yz1mKDEpO3ouc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1mdW5jdGlvbih4KXtyZXR1cm4oImZ1bmN0aW9uIj09PQp0eXBlb2YgeD9nOmwpKHRoaXMseCl9O3ouc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9ZnVuY3Rpb24oeCl7cmV0dXJuKCJmdW5jdGlvbiI9PT10eXBlb2YgeD9rOm4pKHRoaXMseCwiIil9O3ouc2VsZWN0aW9uLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKHgpe3JldHVybigiZnVuY3Rpb24iPT09dHlwZW9mIHg/cDpxKSh0aGlzLHgpfTtjLnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPWZ1bmN0aW9uKHgpe3JldHVybigiZnVuY3Rpb24iPT09dHlwZW9mIHg/cjp0KSh0aGlzLHgpfTtjLnRyYW5zaXRpb24ucHJvdG90eXBlLnN0eWxlcz1mdW5jdGlvbih4KXtyZXR1cm4oImZ1bmN0aW9uIj09PXR5cGVvZiB4P3Y6eSkodGhpcyx4LCIiKX19LGZ1bmN0aW9uKGMsZCxmKXtjPWYoMTE3KTt2YXIgZz1mKDEyKTtmPWYoMTApO3ZhciBsPXtsaW5lYXI6Yy5lYXNlTGluZWFyLHF1YWQ6Yy5lYXNlUXVhZCxxdWFkSW46Yy5lYXNlUXVhZEluLHF1YWRPdXQ6Yy5lYXNlUXVhZE91dCwKcXVhZEluT3V0OmMuZWFzZVF1YWRJbk91dCxjdWJpYzpjLmVhc2VDdWJpYyxjdWJpY0luOmMuZWFzZUN1YmljSW4sY3ViaWNPdXQ6Yy5lYXNlQ3ViaWNPdXQsY3ViaWNJbk91dDpjLmVhc2VDdWJpY0luT3V0LHBvbHk6Yy5lYXNlUG9seSxwb2x5SW46Yy5lYXNlUG9seUluLHBvbHlPdXQ6Yy5lYXNlUG9seU91dCxwb2x5SW5PdXQ6Yy5lYXNlUG9seUluT3V0LHNpbjpjLmVhc2VTaW4sc2luSW46Yy5lYXNlU2luSW4sc2luT3V0OmMuZWFzZVNpbk91dCxzaW5Jbk91dDpjLmVhc2VTaW5Jbk91dCxleHA6Yy5lYXNlRXhwLGV4cEluOmMuZWFzZUV4cEluLGV4cE91dDpjLmVhc2VFeHBPdXQsZXhwSW5PdXQ6Yy5lYXNlRXhwSW5PdXQsY2lyY2xlOmMuZWFzZUNpcmNsZSxjaXJjbGVJbjpjLmVhc2VDaXJjbGVJbixjaXJjbGVPdXQ6Yy5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmMuZWFzZUNpcmNsZUluT3V0LGJvdW5jZTpjLmVhc2VCb3VuY2UsYm91bmNlSW46Yy5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmMuZWFzZUJvdW5jZU91dCwKYm91bmNlSW5PdXQ6Yy5lYXNlQm91bmNlSW5PdXQsYmFjazpjLmVhc2VCYWNrLGJhY2tJbjpjLmVhc2VCYWNrSW4sYmFja091dDpjLmVhc2VCYWNrT3V0LGJhY2tJbk91dDpjLmVhc2VCYWNrSW5PdXQsZWxhc3RpYzpjLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpjLmVhc2VFbGFzdGljSW4sZWxhc3RpY091dDpjLmVhc2VFbGFzdGljT3V0LGVsYXN0aWNJbk91dDpjLmVhc2VFbGFzdGljSW5PdXR9O2QuRWFzZU5hbWU9Zi5tYWtlRW51bSgibGluZWFyIHF1YWQgcXVhZEluIHF1YWRPdXQgcXVhZEluT3V0IGN1YmljIGN1YmljSW4gY3ViaWNPdXQgY3ViaWNJbk91dCBwb2x5IHBvbHlJbiBwb2x5T3V0IHBvbHlJbk91dCBzaW4gc2luSW4gc2luT3V0IHNpbkluT3V0IGV4cCBleHBJbiBleHBPdXQgZXhwSW5PdXQgY2lyY2xlIGNpcmNsZUluIGNpcmNsZU91dCBjaXJjbGVJbk91dCBib3VuY2UgYm91bmNlSW4gYm91bmNlT3V0IGJvdW5jZUluT3V0IGJhY2sgYmFja0luIGJhY2tPdXQgYmFja0luT3V0IGVsYXN0aWMgZWxhc3RpY0luIGVsYXN0aWNPdXQgZWxhc3RpY0luT3V0Ii5zcGxpdCgiICIpKTsKZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoKXt0aGlzLl9zdGFydERlbGF5PWsuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTO3RoaXMuX3N0ZXBEdXJhdGlvbj1rLl9ERUZBVUxUX1NURVBfRFVSQVRJT05fTUlMTElTRUNPTkRTO3RoaXMuX3N0ZXBEZWxheT1rLl9ERUZBVUxUX0lURVJBVElWRV9ERUxBWV9NSUxMSVNFQ09ORFM7dGhpcy5fbWF4VG90YWxEdXJhdGlvbj1rLl9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFM7dGhpcy5fZWFzaW5nTW9kZT1rLl9ERUZBVUxUX0VBU0lOR19NT0RFfWsucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbihuKXt2YXIgcD10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KG4pO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStwKk1hdGgubWF4KG4tMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfTtrLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKG4scCl7dmFyIHE9dGhpcztuPWcuY29lcmNlRXh0ZXJuYWxEMyhuKTsKdmFyIHI9bi5zaXplKCksdD10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHIpO3JldHVybiBuLnRyYW5zaXRpb24oKS5lYXNlKHRoaXMuX2dldEVhc2VGYWN0b3J5KCkpLmR1cmF0aW9uKHRoaXMuc3RlcER1cmF0aW9uKCkpLmRlbGF5KGZ1bmN0aW9uKHYseSl7cmV0dXJuIHEuc3RhcnREZWxheSgpK3QqeX0pLmF0dHJzKHApfTtrLnByb3RvdHlwZS5zdGFydERlbGF5PWZ1bmN0aW9uKG4pe2lmKG51bGw9PW4pcmV0dXJuIHRoaXMuX3N0YXJ0RGVsYXk7dGhpcy5fc3RhcnREZWxheT1uO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5zdGVwRHVyYXRpb249ZnVuY3Rpb24obil7aWYobnVsbD09bilyZXR1cm4gTWF0aC5taW4odGhpcy5fc3RlcER1cmF0aW9uLHRoaXMuX21heFRvdGFsRHVyYXRpb24pO3RoaXMuX3N0ZXBEdXJhdGlvbj1uO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RlcERlbGF5fTtrLnByb3RvdHlwZS5tYXhUb3RhbER1cmF0aW9uPQpmdW5jdGlvbihuKXtpZihudWxsPT1uKXJldHVybiB0aGlzLl9tYXhUb3RhbER1cmF0aW9uO3RoaXMuX21heFRvdGFsRHVyYXRpb249bjtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUuZWFzaW5nTW9kZT1mdW5jdGlvbihuKXtpZihudWxsPT1uKXJldHVybiB0aGlzLl9lYXNpbmdNb2RlO3RoaXMuX2Vhc2luZ01vZGU9bjtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUuX2dldEVhc2VGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5lYXNpbmdNb2RlKCk7cmV0dXJuInN0cmluZyI9PT10eXBlb2Ygbj8obj1sW25dLG51bGw9PW4/bC5saW5lYXI6bik6bn07ay5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24obil7dmFyIHA9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtwPU1hdGgubWF4KHAsMCk7bj1wL01hdGgubWF4KG4tMSwxKTtyZXR1cm4gTWF0aC5taW4odGhpcy5zdGVwRGVsYXkoKSxuKX07cmV0dXJuIGt9KCk7Zi5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFM9CjA7Zi5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDA7Zi5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1O2YuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz1JbmZpbml0eTtmLl9ERUZBVUxUX0VBU0lOR19NT0RFPSJleHBPdXQiO2QuRWFzaW5nPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEyKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31sLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH07bC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihrLG4pe2s9Zy5jb2VyY2VFeHRlcm5hbEQzKGspO3JldHVybiBrLmF0dHJzKG4pfTtyZXR1cm4gbH0oKTtkLk51bGw9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihyLHQpe2Z1bmN0aW9uIHYoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9Zm9yKHZhciB5IGluIHQpdC5oYXNPd25Qcm9wZXJ0eSh5KSYmCihyW3ldPXRbeV0pO3IucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHYucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyB2KX0sbD1mKDEpLGs9Zig1KSxuPWYoNCkscD1mKDApLHE9ZigyMik7Yz1mdW5jdGlvbihyKXtmdW5jdGlvbiB0KHYseSl7dm9pZCAwPT09eSYmKHk9ImJvdHRvbSIpO3Y9ci5jYWxsKHRoaXMsdix5KXx8dGhpczt2Ll90aWNrTGFiZWxBbmdsZT0wO3YuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MDt2LmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIik7cmV0dXJuIHZ9Zyh0LHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX3dyYXBwZXIiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdj1uZXcgay5XcmFwcGVyO251bGwhPXRoaXMuX3RpY2tMYWJlbE1heExpbmVzJiZ2Lm1heExpbmVzKHRoaXMuX3RpY2tMYWJlbE1heExpbmVzKTtyZXR1cm4gdn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsCiJfd3JpdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgay5TdmdDb250ZXh0KHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBrLkNhY2hlTWVhc3VyZXIodGhpcy5fdHlwZXNldHRlckNvbnRleHQpfTt0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhdygpfTt0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih2LHkpe3ZhciB6PXRoaXMuaXNIb3Jpem9udGFsKCk/MDp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCkseD10aGlzLmlzSG9yaXpvbnRhbCgpPwp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCk6MDtpZigwPT09dGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoKXJldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfTtpZih0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpKXt2YXIgQz10aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpO3RoaXMuaXNIb3Jpem9udGFsKCk/eCs9Qzp6Kz1DfXY9dGhpcy5fbWVhc3VyZVRpY2tMYWJlbHModix5KTtyZXR1cm57bWluV2lkdGg6di51c2VkV2lkdGgreixtaW5IZWlnaHQ6di51c2VkSGVpZ2h0K3h9fTt0LnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHk9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5IZWlnaHQ6dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0aGlzLndpZHRoKCksCnRoaXMuaGVpZ2h0KCkpLm1pbldpZHRoLHo9dGhpcy5tYXJnaW4oKSt0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpO3JldHVybiBNYXRoLm1pbih5LXosdil9O3QucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG93bnNhbXBsZUluZm8oKS5kb21haW59O3QucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHYseSl7cmV0dXJuIG4uQ29tcG9uZW50LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlci5jYWxsKHRoaXMsdix5KX07dC5wcm90b3R5cGUuZ2V0RG93bnNhbXBsZUluZm89ZnVuY3Rpb24odil7dmFyIHk7dm9pZCAwPT09diYmKHY9dGhpcy5fc2NhbGUpO3ZvaWQgMD09PXkmJih5PXYuaW52ZXJ0UmFuZ2UoKSk7dmFyIHo9TWF0aC5jZWlsKHQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKigwPT09dGhpcy5fdGlja0xhYmVsQW5nbGU/MToxL01hdGguY29zKHRoaXMuX3RpY2tMYWJlbFNoZWFyQW5nbGUvMTgwKk1hdGguUEkpKS8Kdi5zdGVwV2lkdGgoKSk7cmV0dXJue2RvbWFpbjp5LmZpbHRlcihmdW5jdGlvbih4LEMpe3JldHVybiAwPT09QyV6fSksc3RlcFdpZHRoOnoqdi5zdGVwV2lkdGgoKX19O3QucHJvdG90eXBlLnRpY2tMYWJlbEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlO3Rocm93IEVycm9yKCJBbmdsZSB1bmRlZmluZWQgbm90IHN1cHBvcnRlZDsgb25seSAwLCA5MCwgYW5kIC05MCBhcmUgdmFsaWQgdmFsdWVzIik7fTt0LnByb3RvdHlwZS50aWNrTGFiZWxTaGVhckFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFNoZWFyQW5nbGV9O3QucHJvdG90eXBlLnRpY2tMYWJlbE1heFdpZHRoPWZ1bmN0aW9uKHYpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl90aWNrTGFiZWxNYXhXaWR0aDt0aGlzLl90aWNrTGFiZWxNYXhXaWR0aD12O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLnRpY2tMYWJlbE1heExpbmVzPQpmdW5jdGlvbih2KXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdGlja0xhYmVsTWF4TGluZXM7dGhpcy5fdGlja0xhYmVsTWF4TGluZXM9djt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5fdGlja1NwYWNlUmVxdWlyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCl9O3QucHJvdG90eXBlLl9kcmF3VGlja3M9ZnVuY3Rpb24odix5KXt2YXIgej10aGlzO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDp2YXIgeD17bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImNlbnRlciIsYm90dG9tOiJjZW50ZXIifTt2YXIgQz17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AifTticmVhaztjYXNlIDkwOng9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJyaWdodCIsYm90dG9tOiJsZWZ0In07CkM9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZSAtOTA6eD17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6ImxlZnQiLGJvdHRvbToicmlnaHQifSxDPXtsZWZ0OiJib3R0b20iLHJpZ2h0OiJ0b3AiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9fXkuZWFjaChmdW5jdGlvbihGKXt2YXIgRD1sLnNlbGVjdCh0aGlzKSxCPXouaXNIb3Jpem9udGFsKCk/djp6LndpZHRoKCktei5fdGlja1NwYWNlUmVxdWlyZWQoKSxJPXouaXNIb3Jpem9udGFsKCk/ei5oZWlnaHQoKS16Ll90aWNrU3BhY2VSZXF1aXJlZCgpOnYsTz17eEFsaWduOnhbei5vcmllbnRhdGlvbigpXSx5QWxpZ246Q1t6Lm9yaWVudGF0aW9uKCldLHRleHRSb3RhdGlvbjp6LnRpY2tMYWJlbEFuZ2xlKCksdGV4dFNoZWFyOnoudGlja0xhYmVsU2hlYXJBbmdsZSgpfTtpZihudWxsIT16Ll90aWNrTGFiZWxNYXhXaWR0aCl7aWYoImxlZnQiPT09Cnoub3JpZW50YXRpb24oKSYmQj56Ll90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIFA9Qi16Ll90aWNrTGFiZWxNYXhXaWR0aDtQPUQuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitQKyIsIDApIjtELmF0dHIoInRyYW5zZm9ybSIsUCl9Qj1NYXRoLm1pbihCLHouX3RpY2tMYWJlbE1heFdpZHRoKX16Ll93cml0ZXIud3JpdGUoei5mb3JtYXR0ZXIoKShGKSxCLEksTyxELm5vZGUoKSl9KX07dC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHYseSl7dmFyIHo9dGhpcyx4PXRoaXMuX3NjYWxlLmNsb25lV2l0aG91dFByb3ZpZGVycygpLnJhbmdlKFswLHRoaXMuaXNIb3Jpem9udGFsKCk/djp5XSksQz10aGlzLmdldERvd25zYW1wbGVJbmZvKHgpO3g9Qy5kb21haW47Qz1DLnN0ZXBXaWR0aDt2YXIgRj12LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKEY9QywwIT09dGhpcy5fdGlja0xhYmVsQW5nbGUmJihGPXktdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksCkY9TWF0aC5tYXgoRiwwKSk7dmFyIEQ9Qzt0aGlzLmlzSG9yaXpvbnRhbCgpJiYoRD15LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCksMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYoRD12LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLEQ9TWF0aC5tYXgoRCwwKSk7bnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihGPU1hdGgubWluKEYsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt5PXgubWFwKGZ1bmN0aW9uKEIpe3JldHVybiB6Ll93cmFwcGVyLndyYXAoei5mb3JtYXR0ZXIoKShCKSx6Ll9tZWFzdXJlcixGLEQpfSk7dj10aGlzLmlzSG9yaXpvbnRhbCgpJiYwPT09dGhpcy5fdGlja0xhYmVsQW5nbGU/bC5zdW06cC5NYXRoLm1heDt4PXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT9wLk1hdGgubWF4Omwuc3VtO3Y9dih5LGZ1bmN0aW9uKEIpe3JldHVybiB6Ll9tZWFzdXJlci5tZWFzdXJlKEIud3JhcHBlZFRleHQpLndpZHRofSwwKTsKeT14KHksZnVuY3Rpb24oQil7cmV0dXJuIHouX21lYXN1cmVyLm1lYXN1cmUoQi53cmFwcGVkVGV4dCkuaGVpZ2h0fSwwKTswIT09dGhpcy5fdGlja0xhYmVsQW5nbGUmJih5PVt5LHZdLHY9eVswXSx5PXlbMV0pO3JldHVybnt1c2VkV2lkdGg6dix1c2VkSGVpZ2h0Onl9fTt0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB2PXRoaXM7ci5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgeT10aGlzLl9zY2FsZSx6PXRoaXMuZ2V0RG93bnNhbXBsZUluZm8oeSkseD16LmRvbWFpbixDPXo9ei5zdGVwV2lkdGg7dGhpcy5pc0hvcml6b250YWwoKSYmbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihDPU1hdGgubWluKEMsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt4PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3EuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKHgpO3ZhciBGPXguZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHEuQXhpcy5USUNLX0xBQkVMX0NMQVNTLAohMCkubWVyZ2UoeCk7eC5leGl0KCkucmVtb3ZlKCk7Ri5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEQpe3ZhciBCPXkuc2NhbGUoRCktQy8yO0Q9di5pc0hvcml6b250YWwoKT9COjA7Qj12LmlzSG9yaXpvbnRhbCgpPzA6QjtyZXR1cm4idHJhbnNsYXRlKCIrRCsiLCIrQisiKSJ9KTtGLnRleHQoIiIpO3RoaXMuX2RyYXdUaWNrcyh6LEYpO3o9InJpZ2h0Ij09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjA7eD0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjA7dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3orIiwiK3grIikiKTt0aGlzLl9zaG93QWxsVGlja01hcmtzKCk7dGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKTt0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9CmZ1bmN0aW9uKHYseSx6KXtyLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyx2LHkseik7dGhpcy5pc0hvcml6b250YWwoKXx8dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKTt0aGlzLl9tZWFzdXJlci5yZXNldCgpfTtyZXR1cm4gdH0ocS5BeGlzKTtjLl9NSU5JTVVNX1dJRFRIX1BFUl9MQUJFTF9QWD0xNTtkLkNhdGVnb3J5PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocix0KXtmdW5jdGlvbiB2KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfWZvcih2YXIgeSBpbiB0KXQuaGFzT3duUHJvcGVydHkoeSkmJihyW3ldPXRbeV0pO3IucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHYucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyB2KX0sCmw9ZigxKSxrPWYoNSksbj1mKDgpLHA9ZigwKSxxPWYoMjIpO2M9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gdCh2LHkpe3Y9ci5jYWxsKHRoaXMsdix5KXx8dGhpczt2Ll90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIjt2Ll91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMTt2LmZvcm1hdHRlcihuLmdlbmVyYWwoKSk7cmV0dXJuIHZ9Zyh0LHIpO3QucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3IucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciB2PW5ldyBrLlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSxxLkF4aXMuVElDS19MQUJFTF9DTEFTUyk7dGhpcy5fbWVhc3VyZXI9bmV3IGsuQ2FjaGVNZWFzdXJlcih2KTt0aGlzLl93cmFwcGVyPShuZXcgay5XcmFwcGVyKS5tYXhMaW5lcygxKX07dC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3ZhciB2PXRoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uP3RoaXMuX2NvbXB1dGVBcHByb3hpbWF0ZVRleHRXaWR0aCgpOgp0aGlzLl9jb21wdXRlRXhhY3RUZXh0V2lkdGgoKTtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Y6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdil9O3QucHJvdG90eXBlLl9jb21wdXRlRXhhY3RUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLHk9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLm1hcChmdW5jdGlvbih6KXt6PXYuZm9ybWF0dGVyKCkoeik7cmV0dXJuIHYuX21lYXN1cmVyLm1lYXN1cmUoeikud2lkdGh9KTtyZXR1cm4gcC5NYXRoLm1heCh5LDApfTt0LnByb3RvdHlwZS5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcyx5PXRoaXMuX2dldFRpY2tWYWx1ZXMoKSx6PXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoIk0iKS53aWR0aDt5PXkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB2LmZvcm1hdHRlcigpKHgpLmxlbmd0aCoKen0pO3JldHVybiBwLk1hdGgubWF4KHksMCl9O3QucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodDtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Y6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdil9O3QucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5fc2NhbGUseT12LmRvbWFpbigpLHo9eVswXTw9eVsxXT95WzBdOnlbMV0seD15WzBdPj15WzFdP3lbMF06eVsxXTtyZXR1cm4gdi50aWNrcygpLmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQz49eiYmQzw9eH0pfTt0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2lzU2V0dXApe2lmKCF0aGlzLmlzSG9yaXpvbnRhbCgpKXt2YXIgdj0KdGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYodj50aGlzLndpZHRoKCl8fHY8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX07dC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgdj10aGlzO3IucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIHk9e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0sej10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx4PXRoaXMudGlja0xhYmVsUGFkZGluZygpLEM9Im1pZGRsZSIsRj0wLEQ9MCxCPTAsST0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlICJsZWZ0IjpDPSJlbmQiO0Y9LXg7ST14O2JyZWFrO2Nhc2UgImNlbnRlciI6ST16K3g7YnJlYWs7Y2FzZSAicmlnaHQiOkM9InN0YXJ0IixJPUY9eH1lbHNlIHN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSAidG9wIjp5LmR5PQoiLTAuM2VtIjtCPXg7RD0teDticmVhaztjYXNlICJjZW50ZXIiOkI9eit4O2JyZWFrO2Nhc2UgImJvdHRvbSI6eS5keT0iMWVtIixEPUI9eH16PXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UgImJvdHRvbSI6eS54PXoueDE7eS5keT0iMC45NWVtIjtEPXoueTErSTticmVhaztjYXNlICJ0b3AiOnkueD16LngxO3kuZHk9Ii0uMjVlbSI7RD16LnkxLUk7YnJlYWs7Y2FzZSAibGVmdCI6Qz0iZW5kIjtGPXoueDEtQjt5Lnk9ei55MTticmVhaztjYXNlICJyaWdodCI6Qz0ic3RhcnQiLEY9ei54MStCLHkueT16LnkxfUI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpO0I9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrcS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEoQik7Qi5leGl0KCkucmVtb3ZlKCk7Qi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQocS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsCiEwKS5tZXJnZShCKS5zdHlsZSgidGV4dC1hbmNob3IiLEMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLmF0dHJzKHkpLnRleHQoZnVuY3Rpb24oTyl7cmV0dXJuIHYuZm9ybWF0dGVyKCkoTyl9KTt0aGlzLl90aWNrTGFiZWxDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrRisiLCAiK0QrIikiKTt0aGlzLl9zaG93QWxsVGlja01hcmtzKCk7dGhpcy5zaG93RW5kVGlja0xhYmVscygpfHx0aGlzLl9oaWRlRW5kVGlja0xhYmVscygpO3RoaXMuX2hpZGVPdmVyZmxvd2luZ1RpY2tMYWJlbHMoKTt0aGlzLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzKCk7ImNlbnRlciIhPT10aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyYmdGhpcy5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbCgpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbih2KXtpZihudWxsPT12KXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzsKdj12LnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoImxlZnQiIT09diYmImNlbnRlciIhPT12JiYicmlnaHQiIT09dil0aHJvdyBFcnJvcih2KyIgaXMgbm90IGEgdmFsaWQgdGljayBsYWJlbCBwb3NpdGlvbiBmb3IgYSBob3Jpem9udGFsIE51bWVyaWNBeGlzIik7fWVsc2UgaWYoInRvcCIhPT12JiYiY2VudGVyIiE9PXYmJiJib3R0b20iIT09dil0aHJvdyBFcnJvcih2KyIgaXMgbm90IGEgdmFsaWQgdGljayBsYWJlbCBwb3NpdGlvbiBmb3IgYSB2ZXJ0aWNhbCBOdW1lcmljQXhpcyIpO3RoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPXY7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307dC5wcm90b3R5cGUudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249ZnVuY3Rpb24oKXt0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMH07dC5wcm90b3R5cGUuX2hpZGVFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLAp5PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3EuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTtpZigwIT09eS5zaXplKCkpe3ZhciB6PXkubm9kZXMoKVswXTtwLkRPTS5jbGllbnRSZWN0SW5zaWRlKHouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdil8fGwuc2VsZWN0KHopLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIik7eT15Lm5vZGVzKClbeS5zaXplKCktMV07cC5ET00uY2xpZW50UmVjdEluc2lkZSh5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYpfHxsLnNlbGVjdCh5KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfX07dC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHY9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrcS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbigpe3ZhciB4PWwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuImluaGVyaXQiPT09Cnh8fCJ2aXNpYmxlIj09PXh9KSx5PXYubm9kZXMoKS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSx6PTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoeix5KSYmejx5Lmxlbmd0aDspeis9MTt2LmVhY2goZnVuY3Rpb24oeCxDKXt4PWwuc2VsZWN0KHRoaXMpOzAhPT1DJXomJnguc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfTt0LnByb3RvdHlwZS5faGFzT3ZlcmxhcFdpdGhJbnRlcnZhbD1mdW5jdGlvbih2LHkpe3ZhciB6PSJjZW50ZXIiPT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6Myp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt5PXkubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBwLkRPTS5leHBhbmRSZWN0KEMseil9KTtmb3IodmFyIHg9MDt4PHkubGVuZ3RoLXY7eCs9dilpZihwLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoeVt4XSx5W3grdl0pKXJldHVybiExO3JldHVybiEwfTsKdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ci5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyk7dGhpcy5fbWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHR9KHEuQXhpcyk7ZC5OdW1lcmljPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihuW3JdPXBbcl0pO24ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX07Yz1mKDQyKTt2YXIgbD1mKDI1KSxrPWYoMCk7Zj1mdW5jdGlvbihuKXtmdW5jdGlvbiBwKHEpe2Z1bmN0aW9uIHIoKXt4JiYoeD0hMSx6Ll9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeikpfWZ1bmN0aW9uIHQoQyxGKXt4JiYoei5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUoei5faXNWZXJ0aWNhbCgpPwpGLng6Ri55KSx6Ll9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeikpfWZ1bmN0aW9uIHYoQyl7eShDKSYmKHg9ITAsei5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeikpfWZ1bmN0aW9uIHkoQyl7cmV0dXJuIHouX2lzVmVydGljYWwoKSYmei5waXhlbFBvc2l0aW9uKCktei5kZXRlY3Rpb25SYWRpdXMoKTw9Qy54JiZDLng8PXoucGl4ZWxQb3NpdGlvbigpK3ouZGV0ZWN0aW9uUmFkaXVzKCl8fCF6Ll9pc1ZlcnRpY2FsKCkmJnoucGl4ZWxQb3NpdGlvbigpLXouZGV0ZWN0aW9uUmFkaXVzKCk8PUMueSYmQy55PD16LnBpeGVsUG9zaXRpb24oKSt6LmRldGVjdGlvblJhZGl1cygpfXZhciB6PW4uY2FsbCh0aGlzLHEpfHx0aGlzO3ouX2RldGVjdGlvblJhZGl1cz0zO3ouX2VuYWJsZWQ9ITA7ei5hZGRDbGFzcygiZHJhZy1saW5lLWxheWVyIik7ei5hZGRDbGFzcygiZW5hYmxlZCIpO3ouX2RyYWdJbnRlcmFjdGlvbj1uZXcgbC5EcmFnO3ouX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh6KTsKdmFyIHg9ITE7ei5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHYpO3ouX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcodCk7ei5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChyKTt6Ll9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt6Ll9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KHYpO3ouX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHQpO3ouX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKHIpO3ouX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX07ei5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3ouX2RyYWdDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7ei5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtyZXR1cm4gen1nKHAsbik7cC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7bi5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fZGV0ZWN0aW9uRWRnZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCwKc3Ryb2tlOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlU3Ryb2tlIn0pLmNsYXNzZWQoImRyYWctZWRnZSIsITApfTtwLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe24ucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dGhpcy5fZGV0ZWN0aW9uRWRnZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfTsKcC5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9lbmFibGVkOyh0aGlzLl9lbmFibGVkPXEpP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIik7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHEpe3RoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQocSl9O3AucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChxKX07CnAucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcT10aGlzO24ucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gcS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKX0pO3RoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gcS5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocil9KTt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHEuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpfSk7dGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9O3JldHVybiBwfShjLkd1aWRlTGluZUxheWVyKTtkLkRyYWdMaW5lTGF5ZXI9Zn0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoayxuLHApe3ZhciBxPQp7fTtpZih2b2lkIDAhPT1wKWZvcih2YXIgcj0wO3I8cC5sZW5ndGg7cisrKXFbcFtyXV09cFtyLTFdO3JldHVybiBmdW5jdGlvbih0KXt2YXIgdj1rLnNjYWxlKHQpO2lmKCFuKXJldHVybiB2O3ZhciB5O3Q9dm9pZCAwPT09cVt0XT92b2lkIDA6ay5zY2FsZShxW3RdKTt2b2lkIDAhPT10JiYoeT10Kyh2LXQpLzIpO3JldHVybiB5fX12YXIgbD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxuKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBuKW4uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW5bcV0pO2sucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHAucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyBwKX07Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBuKHAscSl7dmFyIHI9ay5jYWxsKHRoaXMpfHx0aGlzO3IuYWRkQ2xhc3MoImdyaWRsaW5lcyIpO3IuX3hTY2FsZT1wO3IuX3lTY2FsZT1xO3IuX3JlbmRlckNhbGxiYWNrPQpmdW5jdGlvbigpe3JldHVybiByLnJlbmRlcigpfTtpZihyLl94U2NhbGUpci5feFNjYWxlLm9uVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKTtpZihyLl95U2NhbGUpci5feVNjYWxlLm9uVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKTtyZXR1cm4gcn1sKG4sayk7bi5wcm90b3R5cGUuYmV0d2Vlblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmV0d2Vlblh9O24ucHJvdG90eXBlLmJldHdlZW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JldHdlZW5ZfTtuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayk7dGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKTtyZXR1cm4gdGhpc307bi5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7CnRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApO3RoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfTtuLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe2sucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dGhpcy5fcmVkcmF3WExpbmVzKCk7dGhpcy5fcmVkcmF3WUxpbmVzKCk7cmV0dXJuIHRoaXN9O24ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocCxxLHIpe2sucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHAscSxyKTtudWxsIT10aGlzLl94U2NhbGUmJnRoaXMuX3hTY2FsZS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTtudWxsIT10aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSk7cmV0dXJuIHRoaXN9OwpuLnByb3RvdHlwZS5fcmVkcmF3WExpbmVzPWZ1bmN0aW9uKCl7aWYodGhpcy5feFNjYWxlKXt2YXIgcD10aGlzLmJldHdlZW5YKCkscT10aGlzLl94U2NhbGUudGlja3MoKS5zbGljZShwPzE6MCk7cT10aGlzLl94TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShxKTtxLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UocSkuYXR0cigieDEiLGcodGhpcy5feFNjYWxlLHAsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MSIsMCkuYXR0cigieDIiLGcodGhpcy5feFNjYWxlLHAsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MiIsdGhpcy5oZWlnaHQoKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHApLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihyKXtyZXR1cm4gMD09PXJ9KTtxLmV4aXQoKS5yZW1vdmUoKX19O24ucHJvdG90eXBlLl9yZWRyYXdZTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl95U2NhbGUpe3ZhciBwPXRoaXMuYmV0d2VlblkoKSwKcT10aGlzLl95U2NhbGUudGlja3MoKS5zbGljZShwPzE6MCk7cT10aGlzLl95TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShxKTtxLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UocSkuYXR0cigieDEiLDApLmF0dHIoInkxIixnKHRoaXMuX3lTY2FsZSxwLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLGcodGhpcy5feVNjYWxlLHAsdGhpcy5feVNjYWxlLnRpY2tzKCkpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscCkuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKHIpe3JldHVybiAwPT09cn0pO3EuZXhpdCgpLnJlbW92ZSgpfX07cmV0dXJuIG59KGYoNCkuQ29tcG9uZW50KTtkLkdyaWRsaW5lcz1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cX1mb3IodmFyIHYgaW4gcilyLmhhc093blByb3BlcnR5KHYpJiYKKHFbdl09clt2XSk7cS5wcm90b3R5cGU9bnVsbD09PXI/T2JqZWN0LmNyZWF0ZShyKToodC5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IHQpfSxsPWYoNSksaz1mKDIzKSxuPWYoOCkscD1mKDApO2M9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gcih0KXt2YXIgdj1xLmNhbGwodGhpcyl8fHRoaXM7di5fdGV4dFBhZGRpbmc9NTtpZihudWxsPT10KXRocm93IEVycm9yKCJJbnRlcnBvbGF0ZWRDb2xvckxlZ2VuZCByZXF1aXJlcyBhIGludGVycG9sYXRlZENvbG9yU2NhbGUiKTt2Ll9zY2FsZT10O3YuX3JlZHJhd0NhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHYucmVkcmF3KCl9O3YuX3NjYWxlLm9uVXBkYXRlKHYuX3JlZHJhd0NhbGxiYWNrKTt2Ll9mb3JtYXR0ZXI9bi5nZW5lcmFsKCk7di5fb3JpZW50YXRpb249Imhvcml6b250YWwiO3YuX2V4cGFuZHM9ITE7di5hZGRDbGFzcygibGVnZW5kIik7di5hZGRDbGFzcygiaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCIpO3JldHVybiB2fWcociwKcSk7ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3EucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfTtyLnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dClyZXR1cm4gdGhpcy5fZm9ybWF0dGVyO3RoaXMuX2Zvcm1hdHRlcj10O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLmV4cGFuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXhwYW5kc307ci5fZW5zdXJlT3JpZW50YXRpb249ZnVuY3Rpb24odCl7dD10LnRvTG93ZXJDYXNlKCk7aWYoImhvcml6b250YWwiPT09dHx8ImxlZnQiPT09dHx8InJpZ2h0Ij09PXQpcmV0dXJuIHQ7dGhyb3cgRXJyb3IoJyInK3QrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyk7fTtyLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT0KdClyZXR1cm4gdGhpcy5fb3JpZW50YXRpb247dGhpcy5fb3JpZW50YXRpb249ci5fZW5zdXJlT3JpZW50YXRpb24odCk7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8dGhpcy5faXNWZXJ0aWNhbCgpfTtyLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8IXRoaXMuX2lzVmVydGljYWwoKX07ci5wcm90b3R5cGUuX2dlbmVyYXRlVGlja3M9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ci5fREVGQVVMVF9OVU1fU1dBVENIRVMpO3ZhciB2PXRoaXMuX3NjYWxlLmRvbWFpbigpO2lmKDE9PT10KXJldHVyblt2WzBdXTtmb3IodmFyIHk9KHZbMV0tdlswXSkvKHQtMSksej1bXSx4PTA7eDx0O3grKyl6LnB1c2godlswXSt5KngpO3JldHVybiB6fTtyLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtxLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTsKdGhpcy5fc3dhdGNoQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN3YXRjaC1jb250YWluZXIiLCEwKTt0aGlzLl9zd2F0Y2hCb3VuZGluZ0JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2gtYm91bmRpbmctYm94IiwhMCk7dGhpcy5fbG93ZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHIuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt0aGlzLl91cHBlckxhYmVsPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoci5MRUdFTkRfTEFCRUxfQ0xBU1MsITApO3ZhciB0PW5ldyBsLlN2Z0NvbnRleHQodGhpcy5jb250ZW50KCkubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgbC5NZWFzdXJlcih0KTt0aGlzLl93cmFwcGVyPW5ldyBsLldyYXBwZXI7dGhpcy5fd3JpdGVyPW5ldyBsLldyaXRlcih0aGlzLl9tZWFzdXJlcix0LHRoaXMuX3dyYXBwZXIpfTtyLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT0KZnVuY3Rpb24oKXt2YXIgdD10aGlzLHY9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCx5PXRoaXMuX3NjYWxlLmRvbWFpbigpLm1hcChmdW5jdGlvbihDKXtyZXR1cm4gdC5fbWVhc3VyZXIubWVhc3VyZSh0Ll9mb3JtYXR0ZXIoQykpLndpZHRofSksej1yLl9ERUZBVUxUX05VTV9TV0FUQ0hFUztpZih0aGlzLl9pc1ZlcnRpY2FsKCkpe3ZhciB4PXAuTWF0aC5tYXgoeSwwKTt5PXYrdit0aGlzLl90ZXh0UGFkZGluZyt4K3RoaXMuX3RleHRQYWRkaW5nO3g9eip2fWVsc2UgeD12K3Yrdix5PXRoaXMuX3RleHRQYWRkaW5nK3lbMF0reip2K3lbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnksbWluSGVpZ2h0Onh9fTtyLnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiJob3Jpem9udGFsIiE9PXRoaXMuX29yaWVudGF0aW9ufTtyLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTsKdmFyIHY9dGhpcy5fc2NhbGUuZG9tYWluKCkseT10aGlzLl9mb3JtYXR0ZXIodlswXSksej10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHkpLndpZHRoLHg9dGhpcy5fZm9ybWF0dGVyKHZbMV0pO3Y9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh4KS53aWR0aDt2YXIgQz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LEY9dGhpcy5fdGV4dFBhZGRpbmcsRD0wLEI9MCxJPTAsTz0wLFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOjB9LEg9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOjB9LEs9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH07aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgTT1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBMPU1hdGgubWF4KHosdik7dmFyIFI9KHRoaXMud2lkdGgoKS1MLTIqdGhpcy5fdGV4dFBhZGRpbmcpLzI7dj1NYXRoLm1heCh0aGlzLndpZHRoKCktUi0yKkYtTCwwKTsKQz0xO3ZhciBVPWZ1bmN0aW9uKGJhLG1hKXtyZXR1cm4gdC5oZWlnaHQoKS0obWErMSl9O0gueUFsaWduPSJ0b3AiO0I9MDtQLnlBbGlnbj0iYm90dG9tIjtPPTA7aWYoImxlZnQiPT09dGhpcy5fb3JpZW50YXRpb24pe3ZhciBZPWZ1bmN0aW9uKCl7cmV0dXJuIEYrTCtGfTtILnhBbGlnbj0icmlnaHQiO0Q9LShSK3YrRik7UC54QWxpZ249InJpZ2h0IjtJPS0oUit2K0YpfWVsc2UgWT1mdW5jdGlvbigpe3JldHVybiBSfSxILnhBbGlnbj0ibGVmdCIsRD1SK3YrRixQLnhBbGlnbj0ibGVmdCIsST1SK3YrRjtLLndpZHRoPXY7Sy5oZWlnaHQ9TSpDfWVsc2UgUj1NYXRoLm1heChGLCh0aGlzLmhlaWdodCgpLUMpLzIpLE09TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktNCpGLXotdiksMCksdj0xLEM9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKlIsMCksWT1mdW5jdGlvbihiYSxtYSl7cmV0dXJuIE1hdGguZmxvb3IoeisyKkYpK21hfSxVPWZ1bmN0aW9uKCl7cmV0dXJuIFJ9LApILnhBbGlnbj0icmlnaHQiLEQ9LUYsUC54QWxpZ249ImxlZnQiLEk9RixLLnk9UixLLndpZHRoPU0qdixLLmhlaWdodD1DO0sueD1ZKG51bGwsMCk7dGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKTt0aGlzLl93cml0ZXIud3JpdGUoeCx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxILHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0QrIiwgIitCKyIpIik7dGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKTt0aGlzLl93cml0ZXIud3JpdGUoeSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxQLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0krIiwgIitPKyIpIik7dGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoSyk7eT10aGlzLl9nZW5lcmF0ZVRpY2tzKE0pO3k9dGhpcy5fc3dhdGNoQ29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zd2F0Y2giKS5kYXRhKHkpOwp4PXkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKTtEPXkubWVyZ2UoeCk7eS5leGl0KCkucmVtb3ZlKCk7RC5hdHRycyh7ZmlsbDpmdW5jdGlvbihiYSl7cmV0dXJuIHQuX3NjYWxlLnNjYWxlKGJhKX0sd2lkdGg6dixoZWlnaHQ6Qyx4OlkseTpVLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pO2suQUREX1RJVExFX0VMRU1FTlRTJiZ4LmFwcGVuZCgidGl0bGUiKS50ZXh0KGZ1bmN0aW9uKGJhKXtyZXR1cm4gdC5fZm9ybWF0dGVyKGJhKX0pO3JldHVybiB0aGlzfTtyZXR1cm4gcn0oZig0KS5Db21wb25lbnQpO2MuX0RFRkFVTFRfTlVNX1NXQVRDSEVTPTExO2MuTEVHRU5EX0xBQkVMX0NMQVNTPSJsZWdlbmQtbGFiZWwiO2QuSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQ9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihrLG4pe2Z1bmN0aW9uIHAoKXt0aGlzLmNvbnN0cnVjdG9yPWt9Zm9yKHZhciBxIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShxKSYmCihrW3FdPW5bcV0pO2sucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHAucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyBwKX0sbD1mKDUpO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbihwLHEpe3ZvaWQgMD09PXAmJihwPSIiKTt2b2lkIDA9PT1xJiYocT0wKTt2YXIgcj1rLmNhbGwodGhpcyl8fHRoaXM7ci5hZGRDbGFzcygibGFiZWwiKTtyLnRleHQocCk7ci5hbmdsZShxKTtyLnhBbGlnbm1lbnQoImNlbnRlciIpLnlBbGlnbm1lbnQoImNlbnRlciIpO3IuX3BhZGRpbmc9MDtyZXR1cm4gcn1nKG4sayk7bi5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLHE9KDA9PT10aGlzLmFuZ2xlKCk/cC53aWR0aDpwLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKTtwPSgwPT09dGhpcy5hbmdsZSgpP3AuaGVpZ2h0OnAud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOnEsCm1pbkhlaWdodDpwfX07bi5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fdGV4dENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKTt2YXIgcD1uZXcgbC5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgbC5DYWNoZU1lYXN1cmVyKHApO3RoaXMuX3dyYXBwZXI9bmV3IGwuV3JhcHBlcjt0aGlzLl93cml0ZXI9bmV3IGwuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHAsdGhpcy5fd3JhcHBlcik7dGhpcy50ZXh0KHRoaXMuX3RleHQpfTtuLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHApe2lmKG51bGw9PXApcmV0dXJuIHRoaXMuX3RleHQ7aWYoInN0cmluZyIhPT10eXBlb2YgcCl0aHJvdyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3RoaXMuX3RleHQ9cDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtuLnByb3RvdHlwZS5hbmdsZT0KZnVuY3Rpb24ocCl7aWYobnVsbD09cClyZXR1cm4gdGhpcy5fYW5nbGU7cCU9MzYwOzE4MDxwP3AtPTM2MDotMTgwPnAmJihwKz0zNjApO2lmKC05MD09PXB8fDA9PT1wfHw5MD09PXApdGhpcy5fYW5nbGU9cDtlbHNlIHRocm93IEVycm9yKHArIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtuLnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHApe2lmKG51bGw9PXApcmV0dXJuIHRoaXMuX3BhZGRpbmc7cD0rcDtpZigwPnApdGhyb3cgRXJyb3IocCsiIGlzIG5vdCBhIHZhbGlkIHBhZGRpbmcgdmFsdWUuIENhbm5vdCBiZSBsZXNzIHRoYW4gMC4iKTt0aGlzLl9wYWRkaW5nPXA7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307bi5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfTtuLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfTtuLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT0KZnVuY3Rpb24oKXtrLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3RoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHA9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxxPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXAuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKTtwPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktcC53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitwKyIsIitxKyIpIik7cD10aGlzLndpZHRoKCktMipwO3E9dGhpcy5oZWlnaHQoKS0yKnE7dmFyIHI9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07dGhpcy5fd3JpdGVyLndyaXRlKHRoaXMuX3RleHQscCxxLHIpO3JldHVybiB0aGlzfTsKbi5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyk7dGhpcy5fbWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIG59KGYoNCkuQ29tcG9uZW50KTtkLkxhYmVsPWM7Zj1mdW5jdGlvbihrKXtmdW5jdGlvbiBuKHAscSl7cD1rLmNhbGwodGhpcyxwLHEpfHx0aGlzO3AuYWRkQ2xhc3Mobi5USVRMRV9MQUJFTF9DTEFTUyk7cmV0dXJuIHB9ZyhuLGspO3JldHVybiBufShjKTtmLlRJVExFX0xBQkVMX0NMQVNTPSJ0aXRsZS1sYWJlbCI7ZC5UaXRsZUxhYmVsPWY7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBuKHAscSl7cD1rLmNhbGwodGhpcyxwLHEpfHx0aGlzO3AuYWRkQ2xhc3Mobi5BWElTX0xBQkVMX0NMQVNTKTtyZXR1cm4gcH1nKG4sayk7cmV0dXJuIG59KGMpO2MuQVhJU19MQUJFTF9DTEFTUz0iYXhpcy1sYWJlbCI7ZC5BeGlzTGFiZWw9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHwKZnVuY3Rpb24oeSx6KXtmdW5jdGlvbiB4KCl7dGhpcy5jb25zdHJ1Y3Rvcj15fWZvcih2YXIgQyBpbiB6KXouaGFzT3duUHJvcGVydHkoQykmJih5W0NdPXpbQ10pO3kucHJvdG90eXBlPW51bGw9PT16P09iamVjdC5jcmVhdGUoeik6KHgucHJvdG90eXBlPXoucHJvdG90eXBlLG5ldyB4KX0sbD1mKDEpLGs9Zig1KSxuPWYoMjMpLHA9Zig4KSxxPWYoMzEpLHI9ZigwKTtjPWYoNCk7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KHoseCxDKXt2b2lkIDA9PT16JiYoej1bXSk7dm9pZCAwPT09eCYmKHg9MCk7dm9pZCAwPT09QyYmKEM9SW5maW5pdHkpO3RoaXMuY29sdW1ucz16O3RoaXMuYm90dG9tUGFkZGluZz14O3RoaXMubWF4V2lkdGg9Q315LnByb3RvdHlwZS5hZGRDb2x1bW49ZnVuY3Rpb24oeil7dmFyIHg9ei53aWR0aCxDPXRoaXMuZ2V0V2lkdGhBdmFpbGFibGUoKTt6LndpZHRoPU1hdGgubWluKEMseCk7dGhpcy5jb2x1bW5zLnB1c2goeil9O3kucHJvdG90eXBlLmdldEJvdW5kcz0KZnVuY3Rpb24oeil7Zm9yKHZhciB4PXRoaXMuY29sdW1uc1t6XSxDPTAsRj0wO0Y8ejtGKyspQys9dGhpcy5jb2x1bW5zW0ZdLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4OkMseTowfSxib3R0b21SaWdodDp7eDpDK3gud2lkdGgseTp4LmhlaWdodH19fTt5LnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gci5NYXRoLm1heCh0aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKHope3JldHVybiB6LmhlaWdodH0pLDApK3RoaXMuYm90dG9tUGFkZGluZ307eS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih6LHgpe3JldHVybiB6K3gud2lkdGh9LDApLHRoaXMubWF4V2lkdGgpfTt5LnByb3RvdHlwZS5nZXRXaWR0aEF2YWlsYWJsZT1mdW5jdGlvbigpe3ZhciB6PXRoaXMuZ2V0V2lkdGgoKTtyZXR1cm4gTWF0aC5tYXgodGhpcy5tYXhXaWR0aC16LDApfTtyZXR1cm4geX0oKSx2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24geSh6LAp4LEMsRil7dm9pZCAwPT09eiYmKHo9SW5maW5pdHkpO3ZvaWQgMD09PXgmJih4PUluZmluaXR5KTt2b2lkIDA9PT1DJiYoQz0wKTt2b2lkIDA9PT1GJiYoRj1bXSk7dGhpcy5tYXhXaWR0aD16O3RoaXMubWF4SGVpZ2h0PXg7dGhpcy5wYWRkaW5nPUM7dGhpcy5yb3dzPUZ9eS5wcm90b3R5cGUuYWRkUm93PWZ1bmN0aW9uKHope3oubWF4V2lkdGg9dGhpcy5tYXhXaWR0aC0yKnRoaXMucGFkZGluZzt0aGlzLnJvd3MucHVzaCh6KX07eS5wcm90b3R5cGUuZ2V0Q29sdW1uQm91bmRzPWZ1bmN0aW9uKHoseCl7dmFyIEM9dGhpcy5nZXRSb3dCb3VuZHMoeik7ej10aGlzLnJvd3Nbel0uZ2V0Qm91bmRzKHgpO3oudG9wTGVmdC54Kz1DLnRvcExlZnQueDt6LmJvdHRvbVJpZ2h0LngrPUMudG9wTGVmdC54O3oudG9wTGVmdC55Kz1DLnRvcExlZnQueTt6LmJvdHRvbVJpZ2h0LnkrPUMudG9wTGVmdC55O3JldHVybiB6fTt5LnByb3RvdHlwZS5nZXRSb3dCb3VuZHM9ZnVuY3Rpb24oeil7Zm9yKHZhciB4PQp0aGlzLnBhZGRpbmcsQz10aGlzLnBhZGRpbmcsRj0wO0Y8ejtGKyspQys9dGhpcy5yb3dzW0ZdLmdldEhlaWdodCgpO3JldHVybnt0b3BMZWZ0Ont4LHk6Q30sYm90dG9tUmlnaHQ6e3g6eCt0aGlzLnJvd3Nbel0uZ2V0V2lkdGgoKSx5OkMrdGhpcy5yb3dzW3pdLmdldEhlaWdodCgpfX19O3kucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHoseCl7cmV0dXJuIHoreC5nZXRIZWlnaHQoKX0sMCkrMip0aGlzLnBhZGRpbmcsdGhpcy5tYXhIZWlnaHQpfTt5LnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihyLk1hdGgubWF4KHRoaXMucm93cy5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHouZ2V0V2lkdGgoKX0pLDApKzIqdGhpcy5wYWRkaW5nLHRoaXMubWF4V2lkdGgpfTtyZXR1cm4geX0oKTtjPWZ1bmN0aW9uKHkpe2Z1bmN0aW9uIHooeCl7dmFyIEM9eS5jYWxsKHRoaXMpfHwKdGhpcztDLl9wYWRkaW5nPTU7Qy5fcm93Qm90dG9tUGFkZGluZz0zO0MuYWRkQ2xhc3MoImxlZ2VuZCIpO0MubWF4RW50cmllc1BlclJvdygxKTtpZihudWxsPT14KXRocm93IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7Qy5fY29sb3JTY2FsZT14O0MuX3JlZHJhd0NhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIEMucmVkcmF3KCl9O0MuX2NvbG9yU2NhbGUub25VcGRhdGUoQy5fcmVkcmF3Q2FsbGJhY2spO0MuX2Zvcm1hdHRlcj1wLmlkZW50aXR5KCk7Qy5tYXhMaW5lc1BlckVudHJ5KDEpO0MueEFsaWdubWVudCgicmlnaHQiKS55QWxpZ25tZW50KCJ0b3AiKTtDLmNvbXBhcmF0b3IoZnVuY3Rpb24oRixEKXt2YXIgQj1DLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkubWFwKGZ1bmN0aW9uKEkpe3JldHVybiBDLl9mb3JtYXR0ZXIoSSl9KTtyZXR1cm4gQi5pbmRleE9mKEYpLUIuaW5kZXhPZihEKX0pO0MuX3N5bWJvbEZhY3RvcnlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiBxLmNpcmNsZSgpfTsKQy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIDF9O3JldHVybiBDfWcoeix5KTt6LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt5LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgeD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHouTEVHRU5EX1JPV19DTEFTUywhMCk7eC5hcHBlbmQoImciKS5jbGFzc2VkKHouTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5hcHBlbmQoInRleHQiKTt4PW5ldyBrLlN2Z0NvbnRleHQoeC5ub2RlKCksbnVsbCxuLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3IGsuQ2FjaGVNZWFzdXJlcih4KTt0aGlzLl93cmFwcGVyPShuZXcgay5XcmFwcGVyKS5tYXhMaW5lcyh0aGlzLm1heExpbmVzUGVyRW50cnkoKSk7dGhpcy5fd3JpdGVyPW5ldyBrLldyaXRlcih0aGlzLl9tZWFzdXJlcix4LHRoaXMuX3dyYXBwZXIpfTt6LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24oeCl7aWYobnVsbD09CngpcmV0dXJuIHRoaXMuX2Zvcm1hdHRlcjt0aGlzLl9mb3JtYXR0ZXI9eDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTt6LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHgpe2lmKG51bGw9PXgpcmV0dXJuIHRoaXMuX21heEVudHJpZXNQZXJSb3c7dGhpcy5fbWF4RW50cmllc1BlclJvdz14O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3oucHJvdG90eXBlLm1heExpbmVzUGVyRW50cnk9ZnVuY3Rpb24oeCl7aWYobnVsbD09eClyZXR1cm4gdGhpcy5fbWF4TGluZXNQZXJFbnRyeTt0aGlzLl9tYXhMaW5lc1BlckVudHJ5PXg7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ei5wcm90b3R5cGUubWF4V2lkdGg9ZnVuY3Rpb24oeCl7aWYobnVsbD09eClyZXR1cm4gdGhpcy5fbWF4V2lkdGg7dGhpcy5fbWF4V2lkdGg9eDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTt6LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHgpe251bGwhPXgmJih0aGlzLl9jb21wYXJhdG9yPQp4LHRoaXMucmVkcmF3KCkpfTt6LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHgpe3JldHVybiBudWxsIT14Pyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT14LHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX07ei5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3kucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9O3oucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHgsQyl7dmFyIEY9dGhpcyxEPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsQj1uZXcgdih4LEMsdGhpcy5fcGFkZGluZyk7eD10aGlzLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkuc29ydChmdW5jdGlvbihPLApQKXtyZXR1cm4gRi5fY29tcGFyYXRvcihGLl9mb3JtYXR0ZXIoTyksRi5fZm9ybWF0dGVyKFApKX0pO3ZhciBJPW5ldyB0O0IuYWRkUm93KEkpO0kuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nO3guZm9yRWFjaChmdW5jdGlvbihPKXtJLmNvbHVtbnMubGVuZ3RoLzI9PT1GLm1heEVudHJpZXNQZXJSb3coKSYmKEk9bmV3IHQsSS5ib3R0b21QYWRkaW5nPUYuX3Jvd0JvdHRvbVBhZGRpbmcsQi5hZGRSb3coSSkpO3ZhciBQPUkuZ2V0V2lkdGhBdmFpbGFibGUoKSxIPUYuX2Zvcm1hdHRlcihPKSxLPUYuX21lYXN1cmVyLm1lYXN1cmUoSCkud2lkdGg7MD5QLUQtSyYmMTxJLmNvbHVtbnMubGVuZ3RoJiYoST1uZXcgdCxJLmJvdHRvbVBhZGRpbmc9Ri5fcm93Qm90dG9tUGFkZGluZyxCLmFkZFJvdyhJKSk7SS5hZGRDb2x1bW4oe3dpZHRoOkQsaGVpZ2h0OkQsZGF0YTp7bmFtZTpPLHR5cGU6InN5bWJvbCJ9fSk7UD1JLmdldFdpZHRoQXZhaWxhYmxlKCk7UD1NYXRoLm1pbihQLApLKTtGLl93cmFwcGVyLm1heExpbmVzKEYubWF4TGluZXNQZXJFbnRyeSgpKTtIPUYuX3dyYXBwZXIud3JhcChILEYuX21lYXN1cmVyLFApLm5vTGluZXMqRDtJLmFkZENvbHVtbih7d2lkdGg6UCxoZWlnaHQ6SCxkYXRhOntuYW1lOk8sdHlwZToidGV4dCJ9fSl9KTtyZXR1cm4gQn07ei5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24oeCxDKXt4PXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoci5NYXRoLm1pbihbdGhpcy5tYXhXaWR0aCgpLHhdLHgpLEMpO3JldHVybnttaW5IZWlnaHQ6eC5nZXRIZWlnaHQoKSxtaW5XaWR0aDp4LmdldFdpZHRoKCl9fTt6LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHgpe3ZhciBDPXRoaXM7aWYoIXRoaXMuX2lzU2V0dXApcmV0dXJuW107dmFyIEY9dGhpcy5fYnVpbGRMZWdlbmRUYWJsZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSk7cmV0dXJuIEYucm93cy5yZWR1Y2UoZnVuY3Rpb24oRCxCLEkpe2lmKDAhPT1ELmxlbmd0aClyZXR1cm4gRDsKdmFyIE89Ri5nZXRSb3dCb3VuZHMoSSk7cmV0dXJuIHIuTWF0aC53aXRoaW4oeCxPKT9CLmNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uKFAsSCxLKXt2YXIgTT1GLmdldENvbHVtbkJvdW5kcyhJLEspO2lmKHIuTWF0aC53aXRoaW4oeCxNKSl7UD1DLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3ouTEVHRU5EX1JPV19DTEFTUykubm9kZXMoKVtJXTtLPWwuc2VsZWN0KFApLnNlbGVjdEFsbCgiLiIrei5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihLLzIpXTt2YXIgTD1sLnNlbGVjdChLKS5zZWxlY3QoIi4iK3ouTEVHRU5EX1NZTUJPTF9DTEFTUyk7TT1yLkRPTS5nZXRUcmFuc2xhdGVWYWx1ZXMobC5zZWxlY3QoUCkpO0w9ci5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKEwpO3JldHVyblt7Ym91bmRzOnIuRE9NLmVsZW1lbnRCQm94KGwuc2VsZWN0KFApKSxkYXR1bTpILmRhdGEubmFtZSxwb3NpdGlvbjp7eDpNWzBdK0xbMF0seTpNWzFdK0xbMV19LHNlbGVjdGlvbjpsLnNlbGVjdChLKSwKY29tcG9uZW50OkN9XX1yZXR1cm4gUH0sRCk6RH0sW10pfTt6LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3kucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIHg9dGhpcy5fYnVpbGRMZWdlbmRUYWJsZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSk7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIEM9dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCJnLiIrei5MRUdFTkRfUk9XX0NMQVNTKS5kYXRhKHgucm93cyksRj1DLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh6LkxFR0VORF9ST1dfQ0xBU1MsITApLm1lcmdlKEMpO0MuZXhpdCgpLnJlbW92ZSgpO0YuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihCLEkpe0I9eC5nZXRSb3dCb3VuZHMoSSk7cmV0dXJuInRyYW5zbGF0ZSgiK0IudG9wTGVmdC54KyIsICIrQi50b3BMZWZ0LnkrIikifSk7dmFyIEQ9dGhpcztGLmVhY2goZnVuY3Rpb24oQixJKXtmb3IodmFyIE89CltdLFA9MDtQPEIuY29sdW1ucy5sZW5ndGg7UCs9MilPLnB1c2goW0IuY29sdW1uc1tQXSxCLmNvbHVtbnNbUCsxXV0pO0I9bC5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrei5MRUdFTkRfRU5UUllfQ0xBU1MpLmRhdGEoTyk7Tz1CLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh6LkxFR0VORF9FTlRSWV9DTEFTUywhMCkubWVyZ2UoQik7Ty5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixmdW5jdGlvbihIKXtIPUhbMF07cmV0dXJuIEQuc3ltYm9sKCkoSC5kYXRhLm5hbWUsSSkoLjYqSC5oZWlnaHQpKG51bGwpfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihIKXtIPUhbMF07cmV0dXJuInRyYW5zbGF0ZSgiKyh4LmdldENvbHVtbkJvdW5kcyhJLHgucm93c1tJXS5jb2x1bW5zLmluZGV4T2YoSCkpLnRvcExlZnQueCtILndpZHRoLzIpKyIsICIrSC5oZWlnaHQvMisiKSJ9KS5hdHRyKCJmaWxsIixmdW5jdGlvbihIKXtyZXR1cm4gRC5fY29sb3JTY2FsZS5zY2FsZShIWzBdLmRhdGEubmFtZSl9KS5hdHRyKCJvcGFjaXR5IiwKZnVuY3Rpb24oSCl7cmV0dXJuIEQuc3ltYm9sT3BhY2l0eSgpKEhbMF0uZGF0YS5uYW1lLEkpfSkuY2xhc3NlZCh6LkxFR0VORF9TWU1CT0xfQ0xBU1MsITApO08uYXBwZW5kKCJnIikuY2xhc3NlZCgidGV4dC1jb250YWluZXIiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEgpe3JldHVybiJ0cmFuc2xhdGUoIit4LmdldENvbHVtbkJvdW5kcyhJLHgucm93c1tJXS5jb2x1bW5zLmluZGV4T2YoSFsxXSkpLnRvcExlZnQueCsiLCAwKSJ9KS5lYWNoKGZ1bmN0aW9uKEgpe3ZhciBLPWwuc2VsZWN0KHRoaXMpO0g9SFsxXTtELl93cml0ZXIud3JpdGUoRC5fZm9ybWF0dGVyKEguZGF0YS5uYW1lKSxILndpZHRoLEQuaGVpZ2h0KCkse3hBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AiLHRleHRSb3RhdGlvbjowfSxLLm5vZGUoKSl9KTtCLmV4aXQoKS5yZW1vdmUoKX0pO3JldHVybiB0aGlzfTt6LnByb3RvdHlwZS5zeW1ib2w9ZnVuY3Rpb24oeCl7aWYobnVsbD09eClyZXR1cm4gdGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yOwp0aGlzLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9eDt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt6LnByb3RvdHlwZS5zeW1ib2xPcGFjaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcn07ei5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfTt6LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfTt6LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLl9tZWFzdXJlci5yZXNldCgpfTtyZXR1cm4gen0oYy5Db21wb25lbnQpO2MuTEVHRU5EX1JPV19DTEFTUz0ibGVnZW5kLXJvdyI7Yy5MRUdFTkRfRU5UUllfQ0xBU1M9ImxlZ2VuZC1lbnRyeSI7Yy5MRUdFTkRfU1lNQk9MX0NMQVNTPSJsZWdlbmQtc3ltYm9sIjtkLkxlZ2VuZD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG4scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9Cm59Zm9yKHZhciByIGluIHApcC5oYXNPd25Qcm9wZXJ0eShyKSYmKG5bcl09cFtyXSk7bi5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMiksaz1mKDApO2M9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcCgpe3JldHVybiBudWxsIT09biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9ZyhwLG4pO3AucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocSl7dmFyIHIsdD1JbmZpbml0eTt0aGlzLmNvbXBvbmVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3Y9di5lbnRpdHlOZWFyZXN0KHEpO2lmKG51bGwhPXYpe3ZhciB5PWsuTWF0aC5kaXN0YW5jZVNxdWFyZWQodi5wb3NpdGlvbixxKTt5PD10JiYodD15LHI9dil9fSk7cmV0dXJuIHJ9O3AucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihxKXtpZihudWxsIT1xJiYhKHEgaW5zdGFuY2VvZiBsLlBsb3QpKXRocm93IEVycm9yKCJQbG90IEdyb3VwIG9ubHkgYWNjZXB0cyBwbG90cyIpOwpuLnByb3RvdHlwZS5hcHBlbmQuY2FsbCh0aGlzLHEpO3JldHVybiB0aGlzfTtyZXR1cm4gcH0oZig0MSkuR3JvdXApO2QuUGxvdEdyb3VwPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihuW3JdPXBbcl0pO24ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDEpLGs9ZigwKTtjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHAocSl7dm9pZCAwPT09cSYmKHE9W10pO3ZhciByPW4uY2FsbCh0aGlzKXx8dGhpcztyLl9yb3dQYWRkaW5nPTA7ci5fY29sdW1uUGFkZGluZz0wO3IuX3Jvd3M9W107ci5fcm93V2VpZ2h0cz1bXTtyLl9jb2x1bW5XZWlnaHRzPVtdO3IuX25Sb3dzPTA7ci5fbkNvbHM9MDtyLl9jYWxjdWxhdGVkTGF5b3V0PQpudWxsO3IuYWRkQ2xhc3MoInRhYmxlIik7cS5mb3JFYWNoKGZ1bmN0aW9uKHQsdil7dC5mb3JFYWNoKGZ1bmN0aW9uKHkseil7bnVsbCE9eSYmci5hZGQoeSx2LHopfSl9KTtyZXR1cm4gcn1nKHAsbik7cC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocSl7Zm9yKHZhciByPTA7cjx0aGlzLl9uUm93cztyKyspZm9yKHZhciB0PTA7dDx0aGlzLl9uQ29sczt0KyspbnVsbCE9dGhpcy5fcm93c1tyXVt0XSYmcSh0aGlzLl9yb3dzW3JdW3RdKX07cC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHEpe2Zvcih2YXIgcj0wO3I8dGhpcy5fblJvd3M7cisrKWZvcih2YXIgdD0wO3Q8dGhpcy5fbkNvbHM7dCsrKWlmKHRoaXMuX3Jvd3Nbcl1bdF09PT1xKXJldHVybiEwO3JldHVybiExfTtwLnByb3RvdHlwZS5jb21wb25lbnRBdD1mdW5jdGlvbihxKXtyZXR1cm4gMD49dGhpcy5fblJvd3N8fDA+cXx8cT49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzWzBdW3FdfTtwLnByb3RvdHlwZS5hZGQ9CmZ1bmN0aW9uKHEscix0KXtpZihudWxsPT1xKXRocm93IEVycm9yKCJDYW5ub3QgYWRkIG51bGwgdG8gYSB0YWJsZSBjZWxsIik7aWYoIXRoaXMuaGFzKHEpKXtpZihudWxsIT0odGhpcy5fcm93c1tyXSYmdGhpcy5fcm93c1tyXVt0XSkpdGhyb3cgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtxLmRldGFjaCgpO3RoaXMuX25Sb3dzPU1hdGgubWF4KHIrMSx0aGlzLl9uUm93cyk7dGhpcy5fbkNvbHM9TWF0aC5tYXgodCsxLHRoaXMuX25Db2xzKTt0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyk7dGhpcy5fcm93c1tyXVt0XT1xO3RoaXMuX2Fkb3B0QW5kQW5jaG9yKHEpO3RoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocSl7Zm9yKHZhciByPTA7cjx0aGlzLl9uUm93cztyKyspZm9yKHZhciB0PTA7dDx0aGlzLl9uQ29sczt0KyspaWYodGhpcy5fcm93c1tyXVt0XT09PXEpe3RoaXMuX3Jvd3Nbcl1bdF09Cm51bGw7cmV0dXJufX07cC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocSxyLHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgdj10aGlzLl9yb3dzLHk9bC50cmFuc3Bvc2UodGhpcy5fcm93cyk7cS09dGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSk7ci09dGhpcy5fcm93UGFkZGluZyoodGhpcy5fblJvd3MtMSk7dj1wLl9jYWxjQ29tcG9uZW50V2VpZ2h0cyh0aGlzLl9yb3dXZWlnaHRzLHYsZnVuY3Rpb24oTCl7cmV0dXJuIG51bGw9PUx8fEwuZml4ZWRIZWlnaHQoKX0pO3k9cC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fY29sdW1uV2VpZ2h0cyx5LGZ1bmN0aW9uKEwpe3JldHVybiBudWxsPT1MfHxMLmZpeGVkV2lkdGgoKX0pO3ZhciB6PXkubWFwKGZ1bmN0aW9uKEwpe3JldHVybiAwPT09TD8uNTpMfSkseD12Lm1hcChmdW5jdGlvbihMKXtyZXR1cm4gMD09PUw/LjU6TH0pO3o9cC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKHoscSk7dmFyIEM9cC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKHgsCnIpLEY9ay5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxEPWsuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cyk7eD0wO2Zvcih2YXIgQixJLE87Oyl7RD1rLkFycmF5LmFkZChELEMpO3o9ay5BcnJheS5hZGQoRix6KTtCPXRoaXMuX2RldGVybWluZUd1YXJhbnRlZXMoeixELHQpO0Y9Qi5ndWFyYW50ZWVkV2lkdGhzO0Q9Qi5ndWFyYW50ZWVkSGVpZ2h0cztJPUIud2FudHNXaWR0aEFyci5zb21lKGZ1bmN0aW9uKEwpe3JldHVybiBMfSk7Tz1CLndhbnRzSGVpZ2h0QXJyLnNvbWUoZnVuY3Rpb24oTCl7cmV0dXJuIEx9KTt2YXIgUD1LLEg9TTt2YXIgSz1xLWwuc3VtKEIuZ3VhcmFudGVlZFdpZHRocyk7dmFyIE09ci1sLnN1bShCLmd1YXJhbnRlZWRIZWlnaHRzKTt6PXZvaWQgMDtJPyh6PUIud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIEw/LjE6MH0pLHo9ay5BcnJheS5hZGQoeix5KSk6ej15O0M9dm9pZCAwO08/KEM9Qi53YW50c0hlaWdodEFyci5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIEw/Ci4xOjB9KSxDPWsuQXJyYXkuYWRkKEMsdikpOkM9djt6PXAuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh6LEspO0M9cC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEMsTSk7eCsrO0g9MDxNJiZNIT09SDtpZighKDA8SyYmSyE9PVB8fEgpKWJyZWFrO2lmKDU8eClicmVha31LPXEtbC5zdW0oQi5ndWFyYW50ZWVkV2lkdGhzKTtNPXItbC5zdW0oQi5ndWFyYW50ZWVkSGVpZ2h0cyk7ej1wLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoeSxLKTtDPXAuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh2LE0pO3JldHVybntjb2xQcm9wb3J0aW9uYWxTcGFjZTp6LHJvd1Byb3BvcnRpb25hbFNwYWNlOkMsZ3VhcmFudGVlZFdpZHRoczpCLmd1YXJhbnRlZWRXaWR0aHMsZ3VhcmFudGVlZEhlaWdodHM6Qi5ndWFyYW50ZWVkSGVpZ2h0cyx3YW50c1dpZHRoOkksd2FudHNIZWlnaHQ6T319O3AucHJvdG90eXBlLl9kZXRlcm1pbmVHdWFyYW50ZWVzPWZ1bmN0aW9uKHEscix0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIHY9CmsuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uQ29scykseT1rLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHo9ay5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSghMSx0aGlzLl9uQ29scykseD1rLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KCExLHRoaXMuX25Sb3dzKTt0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oQyxGKXtDLmZvckVhY2goZnVuY3Rpb24oRCxCKXtEPW51bGwhPUQ/RC5yZXF1ZXN0ZWRTcGFjZShxW0JdLHJbRl0pOnttaW5XaWR0aDowLG1pbkhlaWdodDowfTt2W0JdPU1hdGgubWF4KHZbQl0sdD9NYXRoLm1pbihELm1pbldpZHRoLHFbQl0pOkQubWluV2lkdGgpO3lbRl09TWF0aC5tYXgoeVtGXSx0P01hdGgubWluKEQubWluSGVpZ2h0LHJbRl0pOkQubWluSGVpZ2h0KTt2YXIgST1ELm1pbldpZHRoPnFbQl07eltCXT16W0JdfHxJO0I9RC5taW5IZWlnaHQ+cltGXTt4W0ZdPXhbRl18fEJ9KX0pO3JldHVybntndWFyYW50ZWVkV2lkdGhzOnYsCmd1YXJhbnRlZWRIZWlnaHRzOnksd2FudHNXaWR0aEFycjp6LHdhbnRzSGVpZ2h0QXJyOnh9fTtwLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihxLHIpe3RoaXMuX2NhbGN1bGF0ZWRMYXlvdXQ9dGhpcy5faXRlcmF0ZUxheW91dChxLHIpO3JldHVybnttaW5XaWR0aDpsLnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLG1pbkhlaWdodDpsLnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19O3AucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocSxyLHQpe3ZhciB2PXRoaXM7bi5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscSxyLHQpO3E9bC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKTtyPWwuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpO3Q9dGhpcy5fY2FsY3VsYXRlZExheW91dDtpZihxPnRoaXMud2lkdGgoKXx8CnI+dGhpcy5oZWlnaHQoKSl0PXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApO3ZhciB5PTAsej1rLkFycmF5LmFkZCh0LnJvd1Byb3BvcnRpb25hbFNwYWNlLHQuZ3VhcmFudGVlZEhlaWdodHMpLHg9ay5BcnJheS5hZGQodC5jb2xQcm9wb3J0aW9uYWxTcGFjZSx0Lmd1YXJhbnRlZWRXaWR0aHMpO3RoaXMuX3Jvd3MuZm9yRWFjaChmdW5jdGlvbihDLEYpe3ZhciBEPTA7Qy5mb3JFYWNoKGZ1bmN0aW9uKEIsSSl7bnVsbCE9QiYmQi5jb21wdXRlTGF5b3V0KHt4OkQseX0seFtJXSx6W0ZdKTtEKz14W0ldK3YuX2NvbHVtblBhZGRpbmd9KTt5Kz16W0ZdK3YuX3Jvd1BhZGRpbmd9KTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUucm93UGFkZGluZz1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9yb3dQYWRkaW5nO2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihxKXx8MD5xKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7CnRoaXMuX3Jvd1BhZGRpbmc9cTt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5jb2x1bW5QYWRkaW5nPWZ1bmN0aW9uKHEpe2lmKG51bGwhPXEpe2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihxKXx8MD5xKXRocm93IEVycm9yKCJjb2x1bW5QYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7dGhpcy5fY29sdW1uUGFkZGluZz1xO3RoaXMucmVkcmF3KCl9fTtwLnByb3RvdHlwZS5yb3dXZWlnaHQ9ZnVuY3Rpb24ocSxyKXtpZihudWxsPT1yKXJldHVybiB0aGlzLl9yb3dXZWlnaHRzW3FdO2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihyKXx8MD5yKXRocm93IEVycm9yKCJyb3dXZWlnaHQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTt0aGlzLl9yb3dXZWlnaHRzW3FdPXI7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuY29sdW1uV2VpZ2h0PWZ1bmN0aW9uKHEscil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fY29sdW1uV2VpZ2h0c1txXTsKaWYoIWsuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHwwPnIpdGhyb3cgRXJyb3IoImNvbHVtbldlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3RoaXMuX2NvbHVtbldlaWdodHNbcV09cjt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHE9bC50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHAuX2ZpeGVkU3BhY2UocSxmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09cnx8ci5maXhlZFdpZHRoKCl9KX07cC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gcC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHEpe3JldHVybiBudWxsPT1xfHxxLmZpeGVkSGVpZ2h0KCl9KX07cC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHEscil7Zm9yKHZhciB0PTA7dDxxO3QrKyl7dm9pZCAwPT09dGhpcy5fcm93c1t0XSYmKHRoaXMuX3Jvd3NbdF09W10sCnRoaXMuX3Jvd1dlaWdodHNbdF09bnVsbCk7Zm9yKHZhciB2PTA7djxyO3YrKyl2b2lkIDA9PT10aGlzLl9yb3dzW3RdW3ZdJiYodGhpcy5fcm93c1t0XVt2XT1udWxsKX1mb3Iodj0wO3Y8cjt2Kyspdm9pZCAwPT09dGhpcy5fY29sdW1uV2VpZ2h0c1t2XSYmKHRoaXMuX2NvbHVtbldlaWdodHNbdl09bnVsbCl9O3AuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHEscix0KXtyZXR1cm4gcS5tYXAoZnVuY3Rpb24odix5KXtyZXR1cm4gbnVsbCE9dj92OnJbeV0ubWFwKHQpLnJlZHVjZShmdW5jdGlvbih6LHgpe3JldHVybiB6JiZ4fSwhMCk/MDoxfSl9O3AuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZT1mdW5jdGlvbihxLHIpe3ZhciB0PWwuc3VtKHEpO3JldHVybiAwPT09dD9rLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAscS5sZW5ndGgpOnEubWFwKGZ1bmN0aW9uKHYpe3JldHVybiByKnYvdH0pfTtwLl9maXhlZFNwYWNlPWZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCh2KXtyZXR1cm4gdi5yZWR1Y2UoZnVuY3Rpb24oeSwKeil7cmV0dXJuIHkmJnp9LCEwKX1yZXR1cm4gdChxLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdCh2Lm1hcChyKSl9KSl9O3JldHVybiBwfShmKDI5KS5Db21wb25lbnRDb250YWluZXIpO2QuVGFibGU9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobi5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG4pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXt2YXIgbj1sLmNhbGwodGhpcyl8fHRoaXM7bi5hZGRDbGFzcygieC1kcmFnLWJveC1sYXllciIpO24uX2hhc0Nvcm5lcnM9ITE7cmV0dXJuIG59ZyhrLGwpO2sucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24obixwLHEpe2wucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLApuLHAscSk7dGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKG4pe2wucHJvdG90eXBlLl9zZXRCb3VuZHMuY2FsbCh0aGlzLHt0b3BMZWZ0Ont4Om4udG9wTGVmdC54LHk6MH0sYm90dG9tUmlnaHQ6e3g6bi5ib3R0b21SaWdodC54LHk6dGhpcy5oZWlnaHQoKX19KX07ay5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24obil7biYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygieC1yZXNpemFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpfTtrLnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24obil7aWYobnVsbD09bilyZXR1cm4gbC5wcm90b3R5cGUueVNjYWxlLmNhbGwodGhpcyk7dGhyb3cgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIik7fTtrLnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGwucHJvdG90eXBlLnlFeHRlbnQuY2FsbCh0aGlzKTsKdGhyb3cgRXJyb3IoIlhEcmFnQm94TGF5ZXIgaGFzIG5vIHlFeHRlbnQiKTt9O3JldHVybiBrfShmKDMyKS5EcmFnQm94TGF5ZXIpO2QuWERyYWdCb3hMYXllcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihuLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbil9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3ZhciBuPWwuY2FsbCh0aGlzKXx8dGhpcztuLmFkZENsYXNzKCJ5LWRyYWctYm94LWxheWVyIik7bi5faGFzQ29ybmVycz0hMTtyZXR1cm4gbn1nKGssbCk7ay5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihuLHAscSl7bC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsbixwLApxKTt0aGlzLl9zZXRCb3VuZHModGhpcy5ib3VuZHMoKSk7cmV0dXJuIHRoaXN9O2sucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24obil7bC5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5Om4udG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpuLmJvdHRvbVJpZ2h0Lnl9fSl9O2sucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKG4pe24mJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX07ay5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKG4pe2lmKG51bGw9PW4pcmV0dXJuIGwucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IEVycm9yKCJ4U2NhbGVzIGNhbm5vdCBiZSBzZXQgb24gYW4gWURyYWdCb3hMYXllciIpO307ay5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBsLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7CnRocm93IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iik7fTtyZXR1cm4ga30oZigzMikuRHJhZ0JveExheWVyKTtkLllEcmFnQm94TGF5ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobi5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG4pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXt2YXIgbj1sLmNhbGwodGhpcyl8fHRoaXM7bi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltrLl9LRVlET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHApe3JldHVybiBuLl9wcm9jZXNzS2V5ZG93bihwKX07bi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltrLl9LRVlVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbihwKXtyZXR1cm4gbi5fcHJvY2Vzc0tleXVwKHApfTsKcmV0dXJuIG59ZyhrLGwpO2suZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50W2suX0RJU1BBVENIRVJfS0VZXTtudWxsPT1uJiYobj1uZXcgayxkb2N1bWVudFtrLl9ESVNQQVRDSEVSX0tFWV09bik7cmV0dXJuIG59O2sucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihuKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoay5fS0VZRE9XTl9FVkVOVF9OQU1FLG4ua2V5Q29kZSxuKX07ay5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihuKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoay5fS0VZVVBfRVZFTlRfTkFNRSxuLmtleUNvZGUsbil9O2sucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihuKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGsuX0tFWURPV05fRVZFTlRfTkFNRSxuKX07ay5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihuKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGsuX0tFWURPV05fRVZFTlRfTkFNRSwKbil9O2sucHJvdG90eXBlLm9uS2V5VXA9ZnVuY3Rpb24obil7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChrLl9LRVlVUF9FVkVOVF9OQU1FLG4pfTtrLnByb3RvdHlwZS5vZmZLZXlVcD1mdW5jdGlvbihuKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGsuX0tFWVVQX0VWRU5UX05BTUUsbil9O3JldHVybiBrfShmKDI0KS5EaXNwYXRjaGVyKTtjLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9LZXkiO2MuX0tFWURPV05fRVZFTlRfTkFNRT0ia2V5ZG93biI7Yy5fS0VZVVBfRVZFTlRfTkFNRT0ia2V5dXAiO2QuS2V5PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxuKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBuKW4uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW5bcV0pO2sucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHAucHJvdG90eXBlPQpuLnByb3RvdHlwZSxuZXcgcCl9LGw9ZigwKTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG4ocCl7ZnVuY3Rpb24gcSh0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxuLl9NT1VTRU1PVkVfRVZFTlRfTkFNRSwicGFnZSIpfXZhciByPWsuY2FsbCh0aGlzKXx8dGhpcztyLl9sYXN0TW91c2VQb3NpdGlvbj17eDotMSx5Oi0xfTtyLl90cmFuc2xhdG9yPWwuZ2V0VHJhbnNsYXRvcihwKTtyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW24uX01PVVNFT1ZFUl9FVkVOVF9OQU1FXT1xO3IuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbi5fTU9VU0VNT1ZFX0VWRU5UX05BTUVdPXE7ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltuLl9NT1VTRU9VVF9FVkVOVF9OQU1FXT1xO3IuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbi5fTU9VU0VET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiByLl9tZWFzdXJlQW5kRGlzcGF0Y2gocCx0LG4uX01PVVNFRE9XTl9FVkVOVF9OQU1FKX07CnIuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbi5fTU9VU0VVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxuLl9NT1VTRVVQX0VWRU5UX05BTUUsInBhZ2UiKX07ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltuLl9XSEVFTF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxuLl9XSEVFTF9FVkVOVF9OQU1FKX07ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltuLl9EQkxDTElDS19FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxuLl9EQkxDTElDS19FVkVOVF9OQU1FKX07cmV0dXJuIHJ9ZyhuLGspO24uZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihwKXt2YXIgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpLHI9cVtuLl9ESVNQQVRDSEVSX0tFWV07bnVsbD09ciYmKHI9bmV3IG4ocCkscVtuLl9ESVNQQVRDSEVSX0tFWV09CnIpO3JldHVybiByfTtuLnByb3RvdHlwZS5vbk1vdXNlTW92ZT1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG4uX01PVVNFTU9WRV9FVkVOVF9OQU1FLHApfTtuLnByb3RvdHlwZS5vZmZNb3VzZU1vdmU9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChuLl9NT1VTRU1PVkVfRVZFTlRfTkFNRSxwKX07bi5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChuLl9NT1VTRURPV05fRVZFTlRfTkFNRSxwKX07bi5wcm90b3R5cGUub2ZmTW91c2VEb3duPWZ1bmN0aW9uKHApe3RoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQobi5fTU9VU0VET1dOX0VWRU5UX05BTUUscCl9O24ucHJvdG90eXBlLm9uTW91c2VVcD1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG4uX01PVVNFVVBfRVZFTlRfTkFNRSxwKX07bi5wcm90b3R5cGUub2ZmTW91c2VVcD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG4uX01PVVNFVVBfRVZFTlRfTkFNRSwKcCl9O24ucHJvdG90eXBlLm9uV2hlZWw9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChuLl9XSEVFTF9FVkVOVF9OQU1FLHApO3JldHVybiB0aGlzfTtuLnByb3RvdHlwZS5vZmZXaGVlbD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG4uX1dIRUVMX0VWRU5UX05BTUUscCl9O24ucHJvdG90eXBlLm9uRGJsQ2xpY2s9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChuLl9EQkxDTElDS19FVkVOVF9OQU1FLHApfTtuLnByb3RvdHlwZS5vZmZEYmxDbGljaz1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG4uX0RCTENMSUNLX0VWRU5UX05BTUUscCl9O24ucHJvdG90eXBlLl9tZWFzdXJlQW5kRGlzcGF0Y2g9ZnVuY3Rpb24ocCxxLHIsdCl7dm9pZCAwPT09dCYmKHQ9ImVsZW1lbnQiKTtpZigicGFnZSIhPT10JiYiZWxlbWVudCIhPT10KXRocm93IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK3QrCiInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTtpZigicGFnZSI9PT10fHx0aGlzLmV2ZW50SW5zaWRlKHAscSkpdGhpcy5fbGFzdE1vdXNlUG9zaXRpb249dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24ocS5jbGllbnRYLHEuY2xpZW50WSksdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KHIsdGhpcy5sYXN0TW91c2VQb3NpdGlvbigpLHEpfTtuLnByb3RvdHlwZS5ldmVudEluc2lkZT1mdW5jdGlvbihwLHEpe3JldHVybiBsLlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShwLHEpfTtuLnByb3RvdHlwZS5sYXN0TW91c2VQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXN0TW91c2VQb3NpdGlvbn07cmV0dXJuIG59KGYoMjQpLkRpc3BhdGNoZXIpO2MuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIjtjLl9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIjtjLl9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIjsKYy5fTU9VU0VPVVRfRVZFTlRfTkFNRT0ibW91c2VvdXQiO2MuX01PVVNFRE9XTl9FVkVOVF9OQU1FPSJtb3VzZWRvd24iO2MuX01PVVNFVVBfRVZFTlRfTkFNRT0ibW91c2V1cCI7Yy5fV0hFRUxfRVZFTlRfTkFNRT0id2hlZWwiO2MuX0RCTENMSUNLX0VWRU5UX05BTUU9ImRibGNsaWNrIjtkLk1vdXNlPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxuKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBuKW4uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW5bcV0pO2sucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHAucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyBwKX0sbD1mKDApO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbihwKXt2YXIgcT1rLmNhbGwodGhpcyl8fHRoaXM7cS5fdHJhbnNsYXRvcj1sLmdldFRyYW5zbGF0b3IocCk7cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltuLl9UT1VDSFNUQVJUX0VWRU5UX05BTUVdPQpmdW5jdGlvbihyKXtyZXR1cm4gcS5fbWVhc3VyZUFuZERpc3BhdGNoKHAscixuLl9UT1VDSFNUQVJUX0VWRU5UX05BTUUsInBhZ2UiKX07cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltuLl9UT1VDSE1PVkVfRVZFTlRfTkFNRV09ZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVBbmREaXNwYXRjaChwLHIsbi5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltuLl9UT1VDSEVORF9FVkVOVF9OQU1FXT1mdW5jdGlvbihyKXtyZXR1cm4gcS5fbWVhc3VyZUFuZERpc3BhdGNoKHAscixuLl9UT1VDSEVORF9FVkVOVF9OQU1FLCJwYWdlIil9O3EuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbi5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVBbmREaXNwYXRjaChwLHIsbi5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSwicGFnZSIpfTtyZXR1cm4gcX1nKG4sayk7bi5nZXREaXNwYXRjaGVyPQpmdW5jdGlvbihwKXt2YXIgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpLHI9cVtuLl9ESVNQQVRDSEVSX0tFWV07bnVsbD09ciYmKHI9bmV3IG4ocCkscVtuLl9ESVNQQVRDSEVSX0tFWV09cik7cmV0dXJuIHJ9O24ucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG4uX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxwKX07bi5wcm90b3R5cGUub2ZmVG91Y2hTdGFydD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG4uX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxwKX07bi5wcm90b3R5cGUub25Ub3VjaE1vdmU9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChuLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSxwKX07bi5wcm90b3R5cGUub2ZmVG91Y2hNb3ZlPWZ1bmN0aW9uKHApe3RoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQobi5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUscCl9O24ucHJvdG90eXBlLm9uVG91Y2hFbmQ9CmZ1bmN0aW9uKHApe3RoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQobi5fVE9VQ0hFTkRfRVZFTlRfTkFNRSxwKX07bi5wcm90b3R5cGUub2ZmVG91Y2hFbmQ9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChuLl9UT1VDSEVORF9FVkVOVF9OQU1FLHApfTtuLnByb3RvdHlwZS5vblRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHApe3RoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQobi5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSxwKX07bi5wcm90b3R5cGUub2ZmVG91Y2hDYW5jZWw9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChuLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHApfTtuLnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHAscSxyLHQpe3ZvaWQgMD09PXQmJih0PSJlbGVtZW50Iik7aWYoInBhZ2UiIT09dCYmImVsZW1lbnQiIT09dCl0aHJvdyBFcnJvcigiSW52YWxpZCBzY29wZSAnIit0KyInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTsKaWYoImVsZW1lbnQiIT09dHx8dGhpcy5ldmVudEluc2lkZShwLHEpKXtwPXEuY2hhbmdlZFRvdWNoZXM7dD17fTtmb3IodmFyIHY9W10seT0wO3k8cC5sZW5ndGg7eSsrKXt2YXIgej1wW3ldLHg9ei5pZGVudGlmaWVyO3o9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24oei5jbGllbnRYLHouY2xpZW50WSk7bnVsbCE9eiYmKHRbeF09eix2LnB1c2goeCkpfTA8di5sZW5ndGgmJnRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChyLHYsdCxxKX19O24ucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHAscSl7cmV0dXJuIGwuVHJhbnNsYXRvci5pc0V2ZW50SW5zaWRlKHAscSl9O3JldHVybiBufShmKDI0KS5EaXNwYXRjaGVyKTtjLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCI7Yy5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0IjtjLl9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIjtjLl9UT1VDSEVORF9FVkVOVF9OQU1FPQoidG91Y2hlbmQiO2MuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUU9InRvdWNoY2FuY2VsIjtkLlRvdWNoPWN9LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyxsLGspe3ZvaWQgMD09PWsmJihrPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTt0aGlzLnNjcmVlbldpZHRoPWc7dGhpcy5zY3JlZW5IZWlnaHQ9bDt0aGlzLmRldmljZVBpeGVsUmF0aW89azt0aGlzLnBpeGVsV2lkdGg9ZyprO3RoaXMucGl4ZWxIZWlnaHQ9bCprO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3RoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIik7Zi5zaXplUGl4ZWxzKHRoaXMuY3R4LGcsbCxrKX1mLnNpemVQaXhlbHM9ZnVuY3Rpb24oZyxsLGssbil7dmFyIHA9Zy5jYW52YXM7cC53aWR0aD1sKm47cC5oZWlnaHQ9aypuO3Auc3R5bGUud2lkdGg9bCsicHgiO3Auc3R5bGUuaGVpZ2h0PWsrInB4IjtnLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsCjApO2cuc2NhbGUobixuKX07Zi5wcm90b3R5cGUuYmxpdD1mdW5jdGlvbihnLGwsayl7dm9pZCAwPT09bCYmKGw9MCk7dm9pZCAwPT09ayYmKGs9MCk7Zy5kcmF3SW1hZ2UodGhpcy5jYW52YXMsbCxrLHRoaXMuc2NyZWVuV2lkdGgsdGhpcy5zY3JlZW5IZWlnaHQpfTtmLnByb3RvdHlwZS5ibGl0Q2VudGVyPWZ1bmN0aW9uKGcsbCxrKXt2b2lkIDA9PT1sJiYobD0wKTt2b2lkIDA9PT1rJiYoaz0wKTt0aGlzLmJsaXQoZyxNYXRoLmZsb29yKGwtdGhpcy5zY3JlZW5XaWR0aC8yKSxNYXRoLmZsb29yKGstdGhpcy5zY3JlZW5IZWlnaHQvMikpfTtmLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZyxsLGspe3ZvaWQgMD09PWsmJihrPSExKTt2YXIgbj10aGlzLmRldmljZVBpeGVsUmF0aW87dGhpcy5zY3JlZW5XaWR0aD1nO3RoaXMuc2NyZWVuSGVpZ2h0PWw7dGhpcy5waXhlbFdpZHRoPWcqbjt0aGlzLnBpeGVsSGVpZ2h0PWwqbjtmLnNpemVQaXhlbHModGhpcy5jdHgsZyxsLG4pO2smJgp0aGlzLmN0eC50cmFuc2xhdGUoZy8yLGcvMik7cmV0dXJuIHRoaXN9O2YucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKGcpe3ZhciBsPXRoaXMucGl4ZWxXaWR0aCxrPXRoaXMucGl4ZWxIZWlnaHQsbj10aGlzLmN0eDtuLnNhdmUoKTtuLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7bnVsbD09Zz9uLmNsZWFyUmVjdCgwLDAsbCxrKToobi5maWxsU3R5bGU9ZyxuLmZpbGxSZWN0KDAsMCxsLGspKTtuLnJlc3RvcmUoKTtyZXR1cm4gdGhpc307Zi5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5waXhlbFdpZHRoLHRoaXMucGl4ZWxIZWlnaHQpfTtyZXR1cm4gZn0oKTtkLkNhbnZhc0J1ZmZlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG4scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bn1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYKKG5bcl09cFtyXSk7bi5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMTMpLGs9ZigwKTtjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHAoKXt2YXIgcT1udWxsIT09biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cS5fY2xpY2tlZERvd249ITE7cS5fZG91YmxlQ2xpY2tpbmc9ITE7cS5fb25DbGlja0NhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtxLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3EuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiBxLl9oYW5kbGVDbGlja0Rvd24ocil9O3EuX21vdXNlVXBDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9oYW5kbGVDbGlja1VwKHIsdCl9O3EuX2RibENsaWNrQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5faGFuZGxlRGJsQ2xpY2socix0KX07cS5fdG91Y2hTdGFydENhbGxiYWNrPQpmdW5jdGlvbihyLHQpe3JldHVybiBxLl9oYW5kbGVDbGlja0Rvd24odFtyWzBdXSl9O3EuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9oYW5kbGVDbGlja1VwKHRbclswXV0sdil9O3EuX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gcS5fY2xpY2tlZERvd249ITF9O3JldHVybiBxfWcocCxuKTtwLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHEpe24ucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHEpO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1sLk1vdXNlLmdldERpc3BhdGNoZXIocSk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uRGJsQ2xpY2sodGhpcy5fZGJsQ2xpY2tDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPQpsLlRvdWNoLmdldERpc3BhdGNoZXIocSk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfTtwLnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtuLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbDt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spOwp0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfTtwLnByb3RvdHlwZS5faGFuZGxlQ2xpY2tEb3duPWZ1bmN0aW9uKHEpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChxKSYmKHRoaXMuX2NsaWNrZWREb3duPSEwLHRoaXMuX2NsaWNrZWRQb2ludD1xKX07cC5wcm90b3R5cGUuX2hhbmRsZUNsaWNrVXA9ZnVuY3Rpb24ocSxyKXt2YXIgdD10aGlzLHY9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt0aGlzLl9jbGlja2VkRG93biYmcC5fcG9pbnRzRXF1YWwodix0aGlzLl9jbGlja2VkUG9pbnQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5fZG91YmxlQ2xpY2tpbmd8fHQuX29uQ2xpY2tDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh2LApyKX0sMCk7dGhpcy5fY2xpY2tlZERvd249ITF9O3AucHJvdG90eXBlLl9oYW5kbGVEYmxDbGljaz1mdW5jdGlvbihxLHIpe3ZhciB0PXRoaXM7cT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHEpO3RoaXMuX2RvdWJsZUNsaWNraW5nPSEwO3RoaXMuX29uRG91YmxlQ2xpY2tDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhxLHIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5fZG91YmxlQ2xpY2tpbmc9ITF9LDApfTtwLl9wb2ludHNFcXVhbD1mdW5jdGlvbihxLHIpe3JldHVybiBxLng9PT1yLngmJnEueT09PXIueX07cC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbihxKXt0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmFkZChxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub2ZmQ2xpY2s9ZnVuY3Rpb24ocSl7dGhpcy5fb25DbGlja0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRG91YmxlQ2xpY2s9ZnVuY3Rpb24ocSl7dGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5hZGQocSl9OwpwLnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihxKXt0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShxKTtyZXR1cm4gdGhpc307cmV0dXJuIHB9KGYoMTUpLkludGVyYWN0aW9uKTtkLkNsaWNrPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihuW3JdPXBbcl0pO24ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDEzKSxrPWYoMCk7Yz1mdW5jdGlvbihuKXtmdW5jdGlvbiBwKCl7dmFyIHE9bnVsbCE9PW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3EuX2RyYWdnaW5nPSExO3EuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9ITA7cS5fbW91c2VGaWx0ZXI9cC5fREVGQVVMVF9NT1VTRV9GSUxURVI7CnEuX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtxLl9kcmFnQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3EuX2RyYWdFbmRDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5fc3RhcnREcmFnKHIsdCl9O3EuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiBxLl9kb0RyYWcocil9O3EuX21vdXNlVXBDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9lbmREcmFnKHIsdCl9O3EuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihyLHQsdil7cmV0dXJuIHEuX3N0YXJ0RHJhZyh0W3JbMF1dLHYpfTtxLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9kb0RyYWcodFtyWzBdXSl9O3EuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9lbmREcmFnKHRbclswXV0sdil9O3JldHVybiBxfWcocCxuKTtwLnByb3RvdHlwZS5fYW5jaG9yPQpmdW5jdGlvbihxKXtuLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxxKTt0aGlzLl9tb3VzZURpc3BhdGNoZXI9bC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPWwuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKX07CnAucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe24ucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGw7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9O3AucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49CmZ1bmN0aW9uKHEpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDprLk1hdGguY2xhbXAocS54LDAsdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpKSx5OmsuTWF0aC5jbGFtcChxLnksMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpKX06cX07cC5wcm90b3R5cGUuX3N0YXJ0RHJhZz1mdW5jdGlvbihxLHIpe3IgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYhdGhpcy5fbW91c2VGaWx0ZXIocil8fChxPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UocSksdGhpcy5faXNJbnNpZGVDb21wb25lbnQocSkmJihyLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJhZ2dpbmc9ITAsdGhpcy5fZHJhZ09yaWdpbj1xLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4pKSl9O3AucHJvdG90eXBlLl9kb0RyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ2dpbmcmJgp0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocSkpfTtwLnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihxLHIpe3IgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYwIT09ci5idXR0b258fCF0aGlzLl9kcmFnZ2luZ3x8KHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihxKSkpfTtwLnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKCl7dGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD0hMX07cC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocSl7MCE9PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLl9tb3VzZUZpbHRlcj1xKX07cC5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChxKX07CnAucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShxKX07cmV0dXJuIHB9KGYoMTUpLkludGVyYWN0aW9uKTtjLl9ERUZBVUxUX01PVVNFX0ZJTFRFUj1mdW5jdGlvbihuKXtyZXR1cm4gMD09PW4uYnV0dG9ufTtkLkRyYWc9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih0LHYpe2Z1bmN0aW9uIHkoKXt0aGlzLmNvbnN0cnVjdG9yPQp0fWZvcih2YXIgeiBpbiB2KXYuaGFzT3duUHJvcGVydHkoeikmJih0W3pdPXZbel0pO3QucHJvdG90eXBlPW51bGw9PT12P09iamVjdC5jcmVhdGUodik6KHkucHJvdG90eXBlPXYucHJvdG90eXBlLG5ldyB5KX0sbD1mKDEpLGs9ZigxMyksbj1mKDMpLHA9ZigwKSxxPWYoMjUpO2M9ZigxNSk7dmFyIHI9ZigyNik7Zj1mdW5jdGlvbih0KXtmdW5jdGlvbiB2KHkseil7dmFyIHg9dC5jYWxsKHRoaXMpfHx0aGlzO3guX3doZWVsRmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3guX3doZWVsQ2FsbGJhY2s9ZnVuY3Rpb24oQyxGKXtyZXR1cm4geC5faGFuZGxlV2hlZWxFdmVudChDLEYpfTt4Ll90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oQyxGKXtyZXR1cm4geC5faGFuZGxlVG91Y2hTdGFydChDLEYpfTt4Ll90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihDLEYpe3JldHVybiB4Ll9oYW5kbGVQaW5jaChDLEYpfTt4Ll90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKEMpe3JldHVybiB4Ll9oYW5kbGVUb3VjaEVuZChDKX07CnguX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oQyl7cmV0dXJuIHguX2hhbmRsZVRvdWNoRW5kKEMpfTt4Ll9wYW5FbmRDYWxsYmFja3M9bmV3IHAuQ2FsbGJhY2tTZXQ7eC5fem9vbUVuZENhbGxiYWNrcz1uZXcgcC5DYWxsYmFja1NldDt4Ll9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyBwLkNhbGxiYWNrU2V0O3guX3hTY2FsZXM9bmV3IHAuU2V0O3guX3lTY2FsZXM9bmV3IHAuU2V0O3guX2RyYWdJbnRlcmFjdGlvbj1uZXcgcS5EcmFnO3guX3NldHVwRHJhZ0ludGVyYWN0aW9uKCk7eC5fdG91Y2hJZHM9bC5tYXAoKTt4Ll9taW5Eb21haW5FeHRlbnRzPW5ldyBwLk1hcDt4Ll9tYXhEb21haW5FeHRlbnRzPW5ldyBwLk1hcDt4Ll9taW5Eb21haW5WYWx1ZXM9bmV3IHAuTWFwO3guX21heERvbWFpblZhbHVlcz1uZXcgcC5NYXA7bnVsbCE9eSYmeC5hZGRYU2NhbGUoeSk7bnVsbCE9eiYmeC5hZGRZU2NhbGUoeik7cmV0dXJuIHh9Zyh2LHQpO3YucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufTt2LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbih5KXswIT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuX3doZWVsRmlsdGVyPXkpfTt2LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24oeSl7dmFyIHo9dGhpczt0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3gucGFuKHouX2NvbnN0cmFpbmVkVHJhbnNsYXRpb24oeCx5LngpKX0pO3RoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oeCl7eC5wYW4oei5fY29uc3RyYWluZWRUcmFuc2xhdGlvbih4LHkueSkpfSk7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9O3YucHJvdG90eXBlLnpvb209ZnVuY3Rpb24oeSx6LHgpe3ZhciBDPXRoaXM7dm9pZCAwPT09eCYmKHg9ITApO2lmKG51bGwhPXope3ZhciBGPXoueDt2YXIgRD16Lnk7eCYmKHRoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oQil7Qj1DLl9jb25zdHJhaW5lZFpvb20oQiwKeSxGKTtGPUIuY2VudGVyUG9pbnQ7eT1CLnpvb21BbW91bnR9KSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0I9Qy5fY29uc3RyYWluZWRab29tKEIseSxEKTtEPUIuY2VudGVyUG9pbnQ7eT1CLnpvb21BbW91bnR9KSl9dGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihCKXt2YXIgST1CLnJhbmdlKCk7Qi56b29tKHksbnVsbD09Rj8oSVsxXStJWzBdKS8yOkYpfSk7dGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihCKXt2YXIgST1CLnJhbmdlKCk7Qi56b29tKHksbnVsbD09RD8oSVsxXStJWzBdKS8yOkQpfSk7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCk7cmV0dXJue3pvb21BbW91bnQ6eSxjZW50ZXJWYWx1ZTp7Y2VudGVyWDpGLGNlbnRlclk6RH19fTt2LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHkpe3QucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHkpO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh5KTsKdGhpcy5fbW91c2VEaXNwYXRjaGVyPWsuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9ay5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfTt2LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwodGhpcy5fd2hlZWxDYWxsYmFjayk7CnRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbDt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9O3YucHJvdG90eXBlLl9oYW5kbGVUb3VjaFN0YXJ0PWZ1bmN0aW9uKHkseil7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aCYmMj50aGlzLl90b3VjaElkcy5zaXplKCk7eCsrKXt2YXIgQz15W3hdO3RoaXMuX3RvdWNoSWRzLnNldChDLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh6W0NdKSl9fTsKdi5wcm90b3R5cGUuX2hhbmRsZVBpbmNoPWZ1bmN0aW9uKHkseil7dmFyIHg9dGhpcztpZighKDI+dGhpcy5fdG91Y2hJZHMuc2l6ZSgpKSl7dmFyIEM9dGhpcy5fdG91Y2hJZHMudmFsdWVzKCk7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShDWzBdKSkmJnRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoQ1sxXSkpKXt2YXIgRj12Ll9wb2ludERpc3RhbmNlKENbMF0sQ1sxXSk7aWYoMCE9PUYpe3kuZm9yRWFjaChmdW5jdGlvbihQKXt4Ll90b3VjaElkcy5oYXMoUC50b1N0cmluZygpKSYmeC5fdG91Y2hJZHMuc2V0KFAudG9TdHJpbmcoKSx4Ll90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHpbUF0pKX0pO3k9dGhpcy5fdG91Y2hJZHMudmFsdWVzKCk7dmFyIEQ9di5fcG9pbnREaXN0YW5jZSh5WzBdLHlbMV0pO2lmKDAhPT1EKXt2YXIgQj1GL0QsST15Lm1hcChmdW5jdGlvbihQLApIKXtyZXR1cm57eDooUC54LUNbSF0ueCkvQix5OihQLnktQ1tIXS55KS9CfX0pO0Y9di5jZW50ZXJQb2ludChDWzBdLENbMV0pO0Y9dGhpcy56b29tKEIsRik7eT1GLmNlbnRlclZhbHVlO3ZhciBPPUYuem9vbUFtb3VudDtGPXkuY2VudGVyWDt5PXkuY2VudGVyWTtEPUMubWFwKGZ1bmN0aW9uKFAsSCl7cmV0dXJue3g6SVtIXS54Kk8rUC54LHk6SVtIXS55Kk8rUC55fX0pO3RoaXMucGFuKHt4OkYtKERbMF0ueCtEWzFdLngpLzIseTp5LShEWzBdLnkrRFsxXS55KS8yfSl9fX19fTt2LmNlbnRlclBvaW50PWZ1bmN0aW9uKHkseil7cmV0dXJue3g6KE1hdGgubWluKHkueCx6LngpK01hdGgubWF4KHkueCx6LngpKS8yLHk6KE1hdGgubWF4KHkueSx6LnkpK01hdGgubWluKHkueSx6LnkpKS8yfX07di5fcG9pbnREaXN0YW5jZT1mdW5jdGlvbih5LHope3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coTWF0aC5tYXgoeS54LHoueCktTWF0aC5taW4oeS54LHoueCksMikrTWF0aC5wb3coTWF0aC5tYXgoeS55LAp6LnkpLU1hdGgubWluKHkueSx6LnkpLDIpKX07di5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRW5kPWZ1bmN0aW9uKHkpe3ZhciB6PXRoaXM7eS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3ouX3RvdWNoSWRzLnJlbW92ZSh4LnRvU3RyaW5nKCkpfSk7MDx0aGlzLl90b3VjaElkcy5zaXplKCkmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfTt2LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbih5LHope3RoaXMuX3doZWVsRmlsdGVyKHopJiYoeT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHkpLHRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHkpJiYoei5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuem9vbShNYXRoLnBvdygyLCgwIT09ei5kZWx0YVk/ei5kZWx0YVk6ei5kZWx0YVgpKih6LmRlbHRhTW9kZT92Ll9QSVhFTFNfUEVSX0xJTkU6MSkqLjAwMikseSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCkpKX07di5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT0KZnVuY3Rpb24oeSx6LHgpe3JldHVybiByLmNvbnN0cmFpbmVkWm9vbSh5LHoseCx0aGlzLm1pbkRvbWFpbkV4dGVudCh5KSx0aGlzLm1heERvbWFpbkV4dGVudCh5KSx0aGlzLm1pbkRvbWFpblZhbHVlKHkpLHRoaXMubWF4RG9tYWluVmFsdWUoeSkpfTt2LnByb3RvdHlwZS5fY29uc3RyYWluZWRUcmFuc2xhdGlvbj1mdW5jdGlvbih5LHope3JldHVybiByLmNvbnN0cmFpbmVkVHJhbnNsYXRpb24oeSx6LHRoaXMubWluRG9tYWluVmFsdWUoeSksdGhpcy5tYXhEb21haW5WYWx1ZSh5KSl9O3YucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciB5PXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoKTt2YXIgejt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gej1udWxsfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyhmdW5jdGlvbih4LEMpezI8PXkuX3RvdWNoSWRzLnNpemUoKXx8Cih5LnBhbih7eDoobnVsbD09ej94Lng6ei54KS1DLngseToobnVsbD09ej94Lnk6ei55KS1DLnl9KSx6PUMpfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChmdW5jdGlvbigpe3JldHVybiB5Ll9wYW5FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSl9O3YucHJvdG90eXBlLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzPWZ1bmN0aW9uKHkpe3JldHVybiBudWxsIT10aGlzLm1pbkRvbWFpbkV4dGVudCh5KSYmbnVsbCE9dGhpcy5tYXhEb21haW5FeHRlbnQoeSkmJiEoeSBpbnN0YW5jZW9mIG4uTGluZWFyKSYmISh5IGluc3RhbmNlb2Ygbi5UaW1lKX07di5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbigpe3ZhciB5PVtdO3RoaXMuX3hTY2FsZXMuZm9yRWFjaChmdW5jdGlvbih6KXt5LnB1c2goeil9KTtyZXR1cm4geX07di5wcm90b3R5cGUueVNjYWxlcz1mdW5jdGlvbigpe3ZhciB5PVtdO3RoaXMuX3lTY2FsZXMuZm9yRWFjaChmdW5jdGlvbih6KXt5LnB1c2goeil9KTsKcmV0dXJuIHl9O3YucHJvdG90eXBlLmFkZFhTY2FsZT1mdW5jdGlvbih5KXt0aGlzLl94U2NhbGVzLmFkZCh5KX07di5wcm90b3R5cGUucmVtb3ZlWFNjYWxlPWZ1bmN0aW9uKHkpe3RoaXMuX3hTY2FsZXMuZGVsZXRlKHkpO3RoaXMuX21pbkRvbWFpbkV4dGVudHMuZGVsZXRlKHkpO3RoaXMuX21heERvbWFpbkV4dGVudHMuZGVsZXRlKHkpO3RoaXMuX21pbkRvbWFpblZhbHVlcy5kZWxldGUoeSk7dGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZSh5KTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUuYWRkWVNjYWxlPWZ1bmN0aW9uKHkpe3RoaXMuX3lTY2FsZXMuYWRkKHkpfTt2LnByb3RvdHlwZS5yZW1vdmVZU2NhbGU9ZnVuY3Rpb24oeSl7dGhpcy5feVNjYWxlcy5kZWxldGUoeSk7dGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUoeSk7dGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUoeSk7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZSh5KTt0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHkpOwpyZXR1cm4gdGhpc307di5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLl9taW5Eb21haW5FeHRlbnRzLmdldCh5KX07di5wcm90b3R5cGUubWF4RG9tYWluRXh0ZW50PWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldCh5KX07di5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24oeSx6KXtpZihudWxsPT16KXJldHVybiB0aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHkpO3RoaXMuX21pbkRvbWFpblZhbHVlcy5zZXQoeSx6KTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUubWF4RG9tYWluVmFsdWU9ZnVuY3Rpb24oeSx6KXtpZihudWxsPT16KXJldHVybiB0aGlzLl9tYXhEb21haW5WYWx1ZXMuZ2V0KHkpO3RoaXMuX21heERvbWFpblZhbHVlcy5zZXQoeSx6KTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUuc2V0TWluTWF4RG9tYWluVmFsdWVzVG89ZnVuY3Rpb24oeSl7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZSh5KTsKdGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZSh5KTt2YXIgej15LmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkseD16WzFdO3RoaXMubWluRG9tYWluVmFsdWUoeSx6WzBdKTt0aGlzLm1heERvbWFpblZhbHVlKHkseCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9uUGFuRW5kPWZ1bmN0aW9uKHkpe3RoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQoeSl9O3YucHJvdG90eXBlLm9mZlBhbkVuZD1mdW5jdGlvbih5KXt0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHkpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS5vblpvb21FbmQ9ZnVuY3Rpb24oeSl7dGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQoeSl9O3YucHJvdG90eXBlLm9mZlpvb21FbmQ9ZnVuY3Rpb24oeSl7dGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUoeSk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9uUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbih5KXt0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZCh5KTsKcmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9mZlBhblpvb21VcGRhdGU9ZnVuY3Rpb24oeSl7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5kZWxldGUoeSk7cmV0dXJuIHRoaXN9O3JldHVybiB2fShjLkludGVyYWN0aW9uKTtmLl9QSVhFTFNfUEVSX0xJTkU9MTIwO2QuUGFuWm9vbT1mfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG4scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bn1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobltyXT1wW3JdKTtuLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxMyksaz1mKDApO2M9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcCgpe3ZhciBxPW51bGwhPT1uJiZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztxLl9vdmVyQ29tcG9uZW50PSExO3EuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz0KbmV3IGsuQ2FsbGJhY2tTZXQ7cS5fcG9pbnRlck1vdmVDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5faGFuZGxlTW91c2VFdmVudChyLHQpfTtxLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9oYW5kbGVUb3VjaEV2ZW50KHRbclswXV0sdil9O3JldHVybiBxfWcocCxuKTtwLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHEpe24ucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHEpO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1sLk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9bC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pOwp0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayl9O3AucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe24ucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9O3AucHJvdG90eXBlLl9oYW5kbGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHEscil7cj10aGlzLl9tb3VzZURpc3BhdGNoZXIuZXZlbnRJbnNpZGUodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyxyKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocSxyKX07cC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRXZlbnQ9ZnVuY3Rpb24ocSxyKXtyPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLApyKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocSxyKX07cC5wcm90b3R5cGUuX2hhbmRsZVBvaW50ZXJFdmVudD1mdW5jdGlvbihxLHIpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt2YXIgdD10aGlzLl9pc0luc2lkZUNvbXBvbmVudChxKTt0JiZyPyh0aGlzLl9vdmVyQ29tcG9uZW50fHx0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhxKSx0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHEpKTp0aGlzLl9vdmVyQ29tcG9uZW50JiZ0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHEpO3RoaXMuX292ZXJDb21wb25lbnQ9dCYmcn07cC5wcm90b3R5cGUub25Qb2ludGVyRW50ZXI9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub2ZmUG9pbnRlckVudGVyPWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUocSk7CnJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5vblBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmUG9pbnRlck1vdmU9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vblBvaW50ZXJFeGl0PWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmUG9pbnRlckV4aXQ9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuZGVsZXRlKHEpO3JldHVybiB0aGlzfTtyZXR1cm4gcH0oZigxNSkuSW50ZXJhY3Rpb24pO2QuUG9pbnRlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigyMCk7ZC5tZW1UaHVuaz1mdW5jdGlvbigpe2Zvcih2YXIgbD1bXSxrPTA7azxhcmd1bWVudHMubGVuZ3RoO2srKylsW2tdPWFyZ3VtZW50c1trXTt2YXIgbj1sLnNsaWNlKDAsLTEpLHA9Zy5tZW1vaXplKGxbbC5sZW5ndGgtCjFdKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcT10aGlzLHI9bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwbHkocSl9KTtyZXR1cm4gcC5hcHBseSh2b2lkIDAscil9fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoNDkpO2QubWVtb2l6ZT1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7Zm9yKHZhciB0PVtdLHY9MDt2PGFyZ3VtZW50cy5sZW5ndGg7disrKXRbdl09YXJndW1lbnRzW3ZdO2lmKHEpcmV0dXJuIHA7dj1nLnNpZ25BcnJheSh0KTt2b2lkIDA9PT1ufHxuLmlzRGlmZmVyZW50KHYpPyhyJiZjb25zb2xlLmxvZygiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksbj12LHA9bC5hcHBseSh0aGlzLHQpKTpyJiZjb25zb2xlLmxvZygiY2FjaGUgaGl0ISIpO3JldHVybiBwfXZhciBuPXZvaWQgMCxwLHE9ITEscj0hMTtrLmRvTG9ja2VkPWZ1bmN0aW9uKHQpe2lmKHEpdGhyb3cgRXJyb3IoIkxvY2tpbmcgYW4gYWxyZWFkeSBsb2NrZWQgbWVtb2l6ZSBmdW5jdGlvbiEiKTtxPSEwOwp0PXQuYXBwbHkodGhpcyk7cT0hMTtyZXR1cm4gdH07ay5sb2dQZXJmb3JtYW5jZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMCk7cj10O3JldHVybiB0aGlzfTtyZXR1cm4ga319LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDMpLGs9ZigwKSxuPWYoMjcpLHA9ZigyKTtjPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHIodCl7dm9pZCAwPT09dCYmKHQ9InZlcnRpY2FsIik7dD1xLmNhbGwodGhpcyx0KXx8dGhpczt0Ll9jbHVzdGVyT2Zmc2V0cz1uZXcgay5NYXA7cmV0dXJuIHR9ZyhyLHEpO3IucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj0KZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHoucmFuZ2VCYW5kKCl9dmFyIHY9dGhpcyx5PXEucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLHo9dGhpcy5fbWFrZUlubmVyU2NhbGUoKTt5LndpZHRoPXRoaXMuX2lzVmVydGljYWw/dDp5LndpZHRoO3kuaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/eS5oZWlnaHQ6dDt2YXIgeD15LngsQz15Lnk7eS54PXRoaXMuX2lzVmVydGljYWw/ZnVuY3Rpb24oRixELEIpe3JldHVybiB4KEYsRCxCKSt2Ll9jbHVzdGVyT2Zmc2V0cy5nZXQoQil9OmZ1bmN0aW9uKEYsRCxCKXtyZXR1cm4geChGLEQsQil9O3kueT10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKEYsRCxCKXtyZXR1cm4gQyhGLEQsQil9OmZ1bmN0aW9uKEYsRCxCKXtyZXR1cm4gQyhGLEQsQikrdi5fY2x1c3Rlck9mZnNldHMuZ2V0KEIpfTtyZXR1cm4geX07ci5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PQp0aGlzLHY9dGhpcy5fbWFrZUlubmVyU2NhbGUoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih5LHope3JldHVybiB0Ll9jbHVzdGVyT2Zmc2V0cy5zZXQoeSx2LnNjYWxlKFN0cmluZyh6KSktdi5yYW5nZUJhbmQoKS8yKX0pfTtyLnByb3RvdHlwZS5fbWFrZUlubmVyU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbC5DYXRlZ29yeTt0LmRvbWFpbih0aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHkseil7cmV0dXJuIFN0cmluZyh6KX0pKTt2YXIgdj1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihuLkJhci5fQkFSX1RISUNLTkVTU19LRVkpKTt0LnJhbmdlKFswLHYobnVsbCwwLG51bGwpXSk7cmV0dXJuIHR9O3IucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCk7cmV0dXJuIHEucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyl9O3JldHVybiByfShuLkJhcik7ZC5DbHVzdGVyZWRCYXI9CmN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oQyxGKXtmdW5jdGlvbiBEKCl7dGhpcy5jb25zdHJ1Y3Rvcj1DfWZvcih2YXIgQiBpbiBGKUYuaGFzT3duUHJvcGVydHkoQikmJihDW0JdPUZbQl0pO0MucHJvdG90eXBlPW51bGw9PT1GP09iamVjdC5jcmVhdGUoRik6KEQucHJvdG90eXBlPUYucHJvdG90eXBlLG5ldyBEKX0sbD1mKDEpLGs9Zig1KSxuPWYoNykscD1mKDgpLHE9ZigzKSxyPWYoMCksdD1mKDQ0KSx2PWYoNDUpLHk9Zig2KSx6PWYoMzUpLHg9ZigyKTtjPWZ1bmN0aW9uKEMpe2Z1bmN0aW9uIEYoKXt2YXIgRD1DLmNhbGwodGhpcyl8fHRoaXM7RC5fc3RhcnRBbmdsZT0wO0QuX2VuZEFuZ2xlPTIqTWF0aC5QSTtELl9sYWJlbEZvcm1hdHRlcj1wLmlkZW50aXR5KCk7RC5fbGFiZWxzRW5hYmxlZD0hMTtELmlubmVyUmFkaXVzKDApO0Qub3V0ZXJSYWRpdXMoZnVuY3Rpb24oKXt2YXIgQj1ELl9waWVDZW50ZXIoKTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoRC53aWR0aCgpLQpCLngsQi54KSxNYXRoLm1heChELmhlaWdodCgpLUIueSxCLnkpKX0pO0QuYWRkQ2xhc3MoInBpZS1wbG90Iik7RC5hdHRyKCJmaWxsIixmdW5jdGlvbihCLEkpe3JldHVybiBTdHJpbmcoSSl9LG5ldyBxLkNvbG9yKTtELl9zdHJva2VEcmF3ZXJzPW5ldyByLk1hcDtyZXR1cm4gRH1nKEYsQyk7Ri5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcztDLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24oQil7cmV0dXJuIEIuYXR0YWNoVG8oRC5fcmVuZGVyQXJlYSl9KX07Ri5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihELEIsSSl7Qy5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsRCxCLEkpO0Q9dGhpcy5fcGllQ2VudGVyKCk7dGhpcy5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitELngrIiwiK0QueSsiKSIpO0Q9TWF0aC5taW4oTWF0aC5tYXgodGhpcy53aWR0aCgpLQpELngsRC54KSxNYXRoLm1heCh0aGlzLmhlaWdodCgpLUQueSxELnkpKTtudWxsIT10aGlzLmlubmVyUmFkaXVzKCkuc2NhbGUmJnRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxEXSk7bnVsbCE9dGhpcy5vdXRlclJhZGl1cygpLnNjYWxlJiZ0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUucmFuZ2UoWzAsRF0pO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLEQpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihEKXtpZigxPT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aClyZXR1cm4gci5XaW5kb3cud2FybigiT25seSBvbmUgZGF0YXNldCBpcyBzdXBwb3J0ZWQgaW4gUGllIHBsb3RzIiksdGhpczt0aGlzLl91cGRhdGVQaWVBbmdsZXMoKTt2YXIgQj1uZXcgdi5BcmNPdXRsaW5lU1ZHRHJhd2VyO3RoaXMuX2lzU2V0dXAmJkIuYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSk7CnRoaXMuX3N0cm9rZURyYXdlcnMuc2V0KEQsQik7Qy5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLEQpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLnJlbW92ZURhdGFzZXQuY2FsbCh0aGlzLEQpfTtGLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLEQpO3RoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KEQpLnJlbW92ZSgpfTtGLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihEKXtDLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsRCk7dGhpcy5fc3RhcnRBbmdsZXM9W107dGhpcy5fZW5kQW5nbGVzPVtdO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKEQpe3ZhciBCPXRoaXM7dm9pZCAwPT09RCYmKEQ9dGhpcy5kYXRhc2V0cygpKTt2YXIgST1DLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcywKRCkubm9kZXMoKTtELmZvckVhY2goZnVuY3Rpb24oTyl7Tz1CLl9zdHJva2VEcmF3ZXJzLmdldChPKTtudWxsIT1PJiZJLnB1c2guYXBwbHkoSSxPLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KTtyZXR1cm4gbC5zZWxlY3RBbGwoSSl9O0YucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtDLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7dGhpcy5fdXBkYXRlUGllQW5nbGVzKCk7dGhpcy5yZW5kZXIoKX07Ri5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgeS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgdC5BcmNTVkdEcmF3ZXJ9LGZ1bmN0aW9uKCl7ei53YXJuKCJjYW52YXMgcmVuZGVyZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBQaWUgUGxvdCEiKTtyZXR1cm4gbnVsbH0pfTtGLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihEKXt2YXIgQj10aGlzO3ZvaWQgMD09PUQmJihEPXRoaXMuZGF0YXNldHMoKSk7CnJldHVybiBDLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMsRCkubWFwKGZ1bmN0aW9uKEkpe0kucG9zaXRpb24ueCs9Qi53aWR0aCgpLzI7SS5wb3NpdGlvbi55Kz1CLmhlaWdodCgpLzI7dmFyIE89bC5zZWxlY3QoQi5fc3Ryb2tlRHJhd2Vycy5nZXQoSS5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KEkuaW5kZXgpKTtJLnN0cm9rZVNlbGVjdGlvbj1PO3JldHVybiBJfSl9O0YucHJvdG90eXBlLnNlY3RvclZhbHVlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEYuX1NFQ1RPUl9WQUxVRV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eShGLl9TRUNUT1JfVkFMVUVfS0VZLEQsdm9pZCAwKTt0aGlzLl91cGRhdGVQaWVBbmdsZXMoKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5pbm5lclJhZGl1cz1mdW5jdGlvbihELEIpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEYuX0lOTkVSX1JBRElVU19LRVkpOwp0aGlzLl9iaW5kUHJvcGVydHkoRi5fSU5ORVJfUkFESVVTX0tFWSxELEIpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLm91dGVyUmFkaXVzPWZ1bmN0aW9uKEQsQil7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoRi5fT1VURVJfUkFESVVTX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KEYuX09VVEVSX1JBRElVU19LRVksRCxCKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3N0YXJ0QW5nbGU7dGhpcy5fc3RhcnRBbmdsZT1EO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmVuZEFuZ2xlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX2VuZEFuZ2xlO3RoaXMuX2VuZEFuZ2xlPUQ7dGhpcy5fdXBkYXRlUGllQW5nbGVzKCk7dGhpcy5yZW5kZXIoKTsKcmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24oRCl7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fbGFiZWxzRW5hYmxlZDt0aGlzLl9sYWJlbHNFbmFibGVkPUQ7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24oRCl7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fbGFiZWxGb3JtYXR0ZXI7dGhpcy5fbGFiZWxGb3JtYXR0ZXI9RDt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEQpe3ZhciBCPXRoaXMud2lkdGgoKS8yLEk9dGhpcy5oZWlnaHQoKS8yO0Q9dGhpcy5fc2xpY2VJbmRleEZvclBvaW50KHt4OkQueC1CLHk6RC55LUl9KTtyZXR1cm4gbnVsbD09RD9bXTpbdGhpcy5lbnRpdGllcygpW0RdXX07Ri5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBEPXRoaXMsQj1DLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksCkk9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLE89eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLm91dGVyUmFkaXVzKCkpO0IuZD1mdW5jdGlvbihQLEgsSyl7cmV0dXJuIGwuYXJjKCkuaW5uZXJSYWRpdXMoSShQLEgsSykpLm91dGVyUmFkaXVzKE8oUCxILEspKS5zdGFydEFuZ2xlKEQuX3N0YXJ0QW5nbGVzW0hdKS5lbmRBbmdsZShELl9lbmRBbmdsZXNbSF0pKFAsSCl9O3JldHVybiBCfTtGLnByb3RvdHlwZS5fdXBkYXRlUGllQW5nbGVzPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5zZWN0b3JWYWx1ZSgpJiYwIT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aCl7dmFyIEQ9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLEI9dGhpcy5kYXRhc2V0cygpWzBdLEk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChCKTtJPWwucGllKCkuc29ydChudWxsKS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKS52YWx1ZShmdW5jdGlvbihPLApQKXtyZXR1cm4gRChPLFAsQil9KShJKTt0aGlzLl9zdGFydEFuZ2xlcz1JLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gTy5zdGFydEFuZ2xlfSk7dGhpcy5fZW5kQW5nbGVzPUkubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPLmVuZEFuZ2xlfSl9fTtGLnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLEI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLEk9TWF0aC5zaW4oRCk7RD1NYXRoLmNvcyhEKTt2YXIgTz1NYXRoLnNpbihCKTtCPU1hdGguY29zKEIpO3ZhciBQO2lmKDA8PUkmJjA8PU8paWYoMDw9RCYmMDw9Qil7dmFyIEg9RDt2YXIgSz1QPTA7dmFyIE09T31lbHNlIDA+RCYmMD5CPyhIPTAsUD0tQixLPTAsTT1JKTowPD1EJiYwPkI/KEg9RCxQPS1CLEs9MCxNPUkpOjA+RCYmMDw9QiYmCihLPVA9SD0xLE09TWF0aC5tYXgoSSxPKSk7ZWxzZSAwPD1JJiYwPk8/MDw9RCYmMDw9Qj8oSD1NYXRoLm1heChELEIpLE09Sz1QPTEpOjA+RCYmMD5CPyhIPTAsUD0xLEs9LU8sTT1JKTowPD1EJiYwPkI/KEg9RCxQPTEsSz0tTyxNPTEpOjA+RCYmMDw9QiYmKEg9QixLPVA9MSxNPUkpOjA+SSYmMDw9Tz8wPD1EJiYwPD1CPyhIPTEsUD0wLEs9LUksTT1PKTowPkQmJjA+Qj8oSD0xLFA9TWF0aC5tYXgoLUQsLUIpLE09Sz0xKTowPD1EJiYwPkI/KEg9MSxQPS1CLEs9LUksTT0xKTowPkQmJjA8PUImJihIPTEsUD0tRCxLPTEsTT1PKTowPkkmJjA+TyYmKDA8PUQmJjA8PUI/KEg9QixQPTAsSz0tSSxNPTApOjA+RCYmMD5CPyhIPTAsUD0tRCxLPS1PLE09MCk6MDw9RCYmMD5CPyhQPUg9MSxLPU1hdGgubWF4KEQsLUIpLE09MSk6MD5EJiYwPD1CJiYoSD1CLFA9LUQsSz0xLE09MCkpO3JldHVybnt4OjA9PUsrTT8wOksvKEsrTSkqdGhpcy53aWR0aCgpLHk6MD09SCtQPzA6SC8oSCtQKSp0aGlzLmhlaWdodCgpfX07CkYucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIEQ9Qy5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKTtpZigwPT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aClyZXR1cm4gRDt2YXIgQj14LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSksST10aGlzLmRhdGFzZXRzKClbMF0sTz1ELmdldChJKS5maWx0ZXIoZnVuY3Rpb24oUCxIKXtyZXR1cm4gRi5faXNWYWxpZERhdGEoQihQLEgsSSkpfSk7RC5zZXQoSSxPKTtyZXR1cm4gRH07Ri5faXNWYWxpZERhdGE9ZnVuY3Rpb24oRCl7cmV0dXJuIHIuTWF0aC5pc1ZhbGlkTnVtYmVyKEQpJiYwPD1EfTtGLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihELEIsSSl7dmFyIE89eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpO2lmKCFGLl9pc1ZhbGlkRGF0YShPKEQsQixJKSkpcmV0dXJue3g6TmFOLHk6TmFOfTt2YXIgUD14LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkoRCwKQixJKTtEPXguUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShELEIsSSk7UD0oUCtEKS8yO0Q9bC5waWUoKS5zb3J0KG51bGwpLnZhbHVlKGZ1bmN0aW9uKEgsSyl7SD1PKEgsSyxJKTtyZXR1cm4gRi5faXNWYWxpZERhdGEoSCk/SDowfSkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkoSS5kYXRhKCkpO0I9KERbQl0uc3RhcnRBbmdsZStEW0JdLmVuZEFuZ2xlKS8yO3JldHVybnt4OlAqTWF0aC5zaW4oQikseTotUCpNYXRoLmNvcyhCKX19O0YucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oRCl7dmFyIEI9dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKTt0aGlzLl9sYWJlbHNFbmFibGVkJiZyLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIEIuX2RyYXdMYWJlbHMoKX0sRCk7dmFyIEk9dGhpcy5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHMoKSwKTz10aGlzLl9nZXREYXRhVG9EcmF3KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oUCl7dmFyIEg9eC5QbG90LmFwcGx5RHJhd1N0ZXBzKEksUCk7Qi5fc3Ryb2tlRHJhd2Vycy5nZXQoUCkuZHJhdyhPLmdldChQKSxIKX0pfTtGLnByb3RvdHlwZS5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgbi5OdWxsfV19O0YucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24oRCl7dmFyIEI9TWF0aC5zcXJ0KE1hdGgucG93KEQueCwyKStNYXRoLnBvdyhELnksMikpLEk9TWF0aC5hY29zKC1ELnkvQik7MD5ELngmJihJPTIqTWF0aC5QSS1JKTtmb3IoRD0wO0Q8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO0QrKylpZih0aGlzLl9zdGFydEFuZ2xlc1tEXTxJJiZ0aGlzLl9lbmRBbmdsZXNbRF0+SSl7dmFyIE89RDticmVha31pZih2b2lkIDAhPT0KTyl7RD10aGlzLmRhdGFzZXRzKClbMF07dmFyIFA9RC5kYXRhKClbT107ST10aGlzLmlubmVyUmFkaXVzKCkuYWNjZXNzb3IoUCxPLEQpO0Q9dGhpcy5vdXRlclJhZGl1cygpLmFjY2Vzc29yKFAsTyxEKTtpZihCPkkmJkI8RClyZXR1cm4gT31yZXR1cm4gbnVsbH07Ri5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLEI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksST10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxPPW5ldyBrLlN2Z0NvbnRleHQoSS5ub2RlKCkpLFA9bmV3IGsuQ2FjaGVNZWFzdXJlcihPKSxIPW5ldyBrLldyaXRlcihQLE8pLEs9dGhpcy5kYXRhc2V0cygpWzBdO3RoaXMuX2dldERhdGFUb0RyYXcoKS5nZXQoSykuZm9yRWFjaChmdW5jdGlvbihNLEwpe3ZhciBSPUQuc2VjdG9yVmFsdWUoKS5hY2Nlc3NvcihNLEwsSyk7aWYoci5NYXRoLmlzVmFsaWROdW1iZXIoUikpe1I9RC5fbGFiZWxGb3JtYXR0ZXIoUiwKTSxMLEspO3ZhciBVPVAubWVhc3VyZShSKSxZPShELl9lbmRBbmdsZXNbTF0rRC5fc3RhcnRBbmdsZXNbTF0pLzIsYmE9RC5vdXRlclJhZGl1cygpLmFjY2Vzc29yKE0sTCxLKTtELm91dGVyUmFkaXVzKCkuc2NhbGUmJihiYT1ELm91dGVyUmFkaXVzKCkuc2NhbGUuc2NhbGUoYmEpKTt2YXIgbWE9RC5pbm5lclJhZGl1cygpLmFjY2Vzc29yKE0sTCxLKTtELmlubmVyUmFkaXVzKCkuc2NhbGUmJihtYT1ELmlubmVyUmFkaXVzKCkuc2NhbGUuc2NhbGUobWEpKTttYT0oYmErbWEpLzI7YmE9TWF0aC5zaW4oWSkqbWEtVS53aWR0aC8yO21hPS1NYXRoLmNvcyhZKSptYS1VLmhlaWdodC8yO3ZhciBhYT1be3g6YmEseTptYX0se3g6YmEseTptYStVLmhlaWdodH0se3g6YmErVS53aWR0aCx5Om1hfSx7eDpiYStVLndpZHRoLHk6bWErVS5oZWlnaHR9XTsoWT1hYS5ldmVyeShmdW5jdGlvbihjYSl7cmV0dXJuIE1hdGguYWJzKGNhLngpPD1ELndpZHRoKCkvMiYmTWF0aC5hYnMoY2EueSk8PUQuaGVpZ2h0KCkvCjJ9KSkmJihZPWFhLm1hcChmdW5jdGlvbihjYSl7cmV0dXJuIEQuX3NsaWNlSW5kZXhGb3JQb2ludChjYSl9KS5ldmVyeShmdW5jdGlvbihjYSl7cmV0dXJuIGNhPT09TH0pKTtNPUIuZmlsbChNLEwsSyk7TT0xLjYqci5Db2xvci5jb250cmFzdCgid2hpdGUiLE0pPHIuQ29sb3IuY29udHJhc3QoImJsYWNrIixNKTtiYT1JLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2JhKyIsIittYSsiKSIpO2JhLmNsYXNzZWQoTT8iZGFyay1sYWJlbCI6ImxpZ2h0LWxhYmVsIiwhMCk7YmEuc3R5bGUoInZpc2liaWxpdHkiLFk/ImluaGVyaXQiOiJoaWRkZW4iKTtILndyaXRlKFIsVS53aWR0aCxVLmhlaWdodCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIn0sYmEubm9kZSgpKX19KX07cmV0dXJuIEZ9KHguUGxvdCk7Yy5fSU5ORVJfUkFESVVTX0tFWT0iaW5uZXItcmFkaXVzIjtjLl9PVVRFUl9SQURJVVNfS0VZPSJvdXRlci1yYWRpdXMiO2MuX1NFQ1RPUl9WQUxVRV9LRVk9CiJzZWN0b3ItdmFsdWUiO2QuUGllPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oeix4KXtmdW5jdGlvbiBDKCl7dGhpcy5jb25zdHJ1Y3Rvcj16fWZvcih2YXIgRiBpbiB4KXguaGFzT3duUHJvcGVydHkoRikmJih6W0ZdPXhbRl0pO3oucHJvdG90eXBlPW51bGw9PT14P09iamVjdC5jcmVhdGUoeCk6KEMucHJvdG90eXBlPXgucHJvdG90eXBlLG5ldyBDKX0sbD1mKDEpLGs9Zig1KSxuPWYoNykscD1mKDE0KSxxPWYoNikscj1mKDM0KSx0PWYoMyksdj1mKDApLHk9ZigyKTtjPWZ1bmN0aW9uKHope2Z1bmN0aW9uIHgoKXt2YXIgQz16LmNhbGwodGhpcyl8fHRoaXM7Qy5fbGFiZWxzRW5hYmxlZD0hMTtDLl9sYWJlbD1udWxsO0MuYW5pbWF0b3IoInJlY3RhbmdsZXMiLG5ldyBuLk51bGwpO0MuYWRkQ2xhc3MoInJlY3RhbmdsZS1wbG90Iik7Qy5hdHRyKCJmaWxsIiwobmV3IHQuQ29sb3IpLnJhbmdlKClbMF0pO3JldHVybiBDfWcoeCwKeik7eC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgcS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgci5SZWN0YW5nbGVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKEMpe3JldHVybiBuZXcgcC5SZWN0YW5nbGVDYW52YXNEcmF3ZXIoQyl9KX07eC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcyxGPXoucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLEQ9eS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksQj1GW3guX1gyX0tFWV0sST15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxPPUZbeC5fWTJfS0VZXSxQPXRoaXMueCgpLnNjYWxlLEg9dGhpcy55KCkuc2NhbGU7bnVsbCE9Qj8oRi53aWR0aD1mdW5jdGlvbihLLE0sTCl7cmV0dXJuIE1hdGguYWJzKEIoSyxNLEwpLUQoSyxNLEwpKX0sRi54PWZ1bmN0aW9uKEssTSxMKXtyZXR1cm4gTWF0aC5taW4oQihLLApNLEwpLEQoSyxNLEwpKX0pOihGLndpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIEMuX3JlY3RhbmdsZVdpZHRoKFApfSxGLng9ZnVuY3Rpb24oSyxNLEwpe3JldHVybiBEKEssTSxMKS0uNSpGLndpZHRoKEssTSxMKX0pO251bGwhPU8/KEYuaGVpZ2h0PWZ1bmN0aW9uKEssTSxMKXtyZXR1cm4gTWF0aC5hYnMoTyhLLE0sTCktSShLLE0sTCkpfSxGLnk9ZnVuY3Rpb24oSyxNLEwpe3JldHVybiBNYXRoLm1heChPKEssTSxMKSxJKEssTSxMKSktRi5oZWlnaHQoSyxNLEwpfSk6KEYuaGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIEMuX3JlY3RhbmdsZVdpZHRoKEgpfSxGLnk9ZnVuY3Rpb24oSyxNLEwpe3JldHVybiBJKEssTSxMKS0uNSpGLmhlaWdodChLLE0sTCl9KTtkZWxldGUgRlt4Ll9YMl9LRVldO2RlbGV0ZSBGW3guX1kyX0tFWV07cmV0dXJuIEZ9O3gucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLAphbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcigicmVjdGFuZ2xlcyIpfV19O3gucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eT1mdW5jdGlvbihDKXtyZXR1cm4ieDIiPT09Qz96LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ4Iik6InkyIj09PUM/ei5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieSIpOnoucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsQyl9O3gucHJvdG90eXBlLng9ZnVuY3Rpb24oQyxGLEQpe2lmKG51bGw9PUMpcmV0dXJuIHoucHJvdG90eXBlLnguY2FsbCh0aGlzKTtudWxsPT1GP3oucHJvdG90eXBlLnguY2FsbCh0aGlzLEMpOnoucHJvdG90eXBlLnguY2FsbCh0aGlzLEMsRixEKTtudWxsIT1GJiYoRD0oQz10aGlzLngyKCkpJiZDLmFjY2Vzc29yLG51bGwhPUQmJnRoaXMuX2JpbmRQcm9wZXJ0eSh4Ll9YMl9LRVksRCxGLEMucG9zdFNjYWxlKSk7RiBpbnN0YW5jZW9mIHQuQ2F0ZWdvcnkmJgpGLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLngyPWZ1bmN0aW9uKEMpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHguX1gyX0tFWSk7dmFyIEY9dGhpcy54KCk7dGhpcy5fYmluZFByb3BlcnR5KHguX1gyX0tFWSxDLEYmJkYuc2NhbGUsdm9pZCAwKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS55PWZ1bmN0aW9uKEMsRixEKXtpZihudWxsPT1DKXJldHVybiB6LnByb3RvdHlwZS55LmNhbGwodGhpcyk7bnVsbD09Rj96LnByb3RvdHlwZS55LmNhbGwodGhpcyxDKTp6LnByb3RvdHlwZS55LmNhbGwodGhpcyxDLEYsRCk7bnVsbCE9RiYmKEQ9KEM9dGhpcy55MigpKSYmQy5hY2Nlc3NvcixudWxsIT1EJiZ0aGlzLl9iaW5kUHJvcGVydHkoeC5fWTJfS0VZLEQsRixDLnBvc3RTY2FsZSkpO0YgaW5zdGFuY2VvZiB0LkNhdGVnb3J5JiZGLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCk7CnJldHVybiB0aGlzfTt4LnByb3RvdHlwZS55Mj1mdW5jdGlvbihDKXtpZihudWxsPT1DKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh4Ll9ZMl9LRVkpO3ZhciBGPXRoaXMueSgpO3RoaXMuX2JpbmRQcm9wZXJ0eSh4Ll9ZMl9LRVksQyxGJiZGLnNjYWxlLHZvaWQgMCk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihDKXt2YXIgRj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm4gdGhpcy5lbnRpdGllcygpLmZpbHRlcihmdW5jdGlvbihEKXt2YXIgQj1ELmRhdHVtLEk9RC5pbmRleCxPPUQuZGF0YXNldDtEPUYueChCLEksTyk7dmFyIFA9Ri55KEIsSSxPKSxIPUYud2lkdGgoQixJLE8pO0I9Ri5oZWlnaHQoQixJLE8pO3JldHVybiBEPD1DLngmJkMueDw9RCtIJiZQPD1DLnkmJkMueTw9UCtCfSl9O3gucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuX2VudGl0eUJCb3goQy5kYXR1bSwKQy5pbmRleCxDLmRhdGFzZXQsdGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCkpfTt4LnByb3RvdHlwZS5fZW50aXR5QkJveD1mdW5jdGlvbihDLEYsRCxCKXtyZXR1cm57eDpCLngoQyxGLEQpLHk6Qi55KEMsRixEKSx3aWR0aDpCLndpZHRoKEMsRixEKSxoZWlnaHQ6Qi5oZWlnaHQoQyxGLEQpfX07eC5wcm90b3R5cGUubGFiZWw9ZnVuY3Rpb24oQyl7aWYobnVsbD09QylyZXR1cm4gdGhpcy5fbGFiZWw7dGhpcy5fbGFiZWw9Qzt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKEMpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX2xhYmVsc0VuYWJsZWQ7dGhpcy5fbGFiZWxzRW5hYmxlZD1DO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgQz16LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7bnVsbCE9dGhpcy54MigpJiYKKEMueDI9eS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngyKCkpKTtudWxsIT10aGlzLnkyKCkmJihDLnkyPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSk7cmV0dXJuIEN9O3gucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKEMsRixEKXt2YXIgQj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxJPUIueChDLEYsRCksTz1CLnkoQyxGLEQpLFA9Qi53aWR0aChDLEYsRCk7Qz1CLmhlaWdodChDLEYsRCk7cmV0dXJue3g6SStQLzIseTpPK0MvMn19O3gucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihDKXtpZihDIGluc3RhbmNlb2YgdC5DYXRlZ29yeSlyZXR1cm4gQy5yYW5nZUJhbmQoKTt2YXIgRj1DPT09dGhpcy54KCkuc2NhbGU/dGhpcy54KCkuYWNjZXNzb3I6dGhpcy55KCkuYWNjZXNzb3IsRD1sLnNldCh2LkFycmF5LmZsYXR0ZW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gTy5kYXRhKCkubWFwKGZ1bmN0aW9uKFAsCkgpe3JldHVybiBGKFAsSCxPKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKE8pe3JldHVybitPfSksQj12Lk1hdGgubWluKEQsMCk7RD12Lk1hdGgubWF4KEQsMCk7dmFyIEk9Qy5zY2FsZShCKTtyZXR1cm4oQy5zY2FsZShEKS1JKS9NYXRoLmFicyhELUIpfTt4LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciBDPW5ldyB2Lk1hcCxGPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEQpe3ZhciBCPUQuZGF0YSgpLm1hcChmdW5jdGlvbihJLE8pe3JldHVybiB2Lk1hdGguaXNWYWxpZE51bWJlcihGLngoSSxPLEQpKSYmdi5NYXRoLmlzVmFsaWROdW1iZXIoRi55KEksTyxEKSkmJnYuTWF0aC5pc1ZhbGlkTnVtYmVyKEYud2lkdGgoSSxPLEQpKSYmdi5NYXRoLmlzVmFsaWROdW1iZXIoRi5oZWlnaHQoSSxPLEQpKT9JOm51bGx9KTtDLnNldChELEIpfSk7cmV0dXJuIEN9O3gucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9CmZ1bmN0aW9uKEMpe3ZhciBGPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3RBbGwoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCk7dGhpcy5fbGFiZWxzRW5hYmxlZCYmbnVsbCE9dGhpcy5sYWJlbCgpJiZ2LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIEYuX2RyYXdMYWJlbHMoKX0sQyl9O3gucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcyxGPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihELEIpe3JldHVybiBDLl9kcmF3TGFiZWwoRixELEIpfSl9O3gucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24oQyxGLEQpe3ZhciBCPXRoaXMsST10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxPPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLFA9bmV3IGsuU3ZnQ29udGV4dChPLm5vZGUoKSksSD1uZXcgay5DYWNoZU1lYXN1cmVyKFApLApLPW5ldyBrLldyaXRlcihILFApO1A9dGhpcy54KCkuc2NhbGUucmFuZ2UoKTt2YXIgTT10aGlzLnkoKS5zY2FsZS5yYW5nZSgpLEw9TWF0aC5taW4uYXBwbHkobnVsbCxQKSxSPU1hdGgubWF4LmFwcGx5KG51bGwsUCksVT1NYXRoLm1pbi5hcHBseShudWxsLE0pLFk9TWF0aC5tYXguYXBwbHkobnVsbCxNKTtDLmdldChGKS5mb3JFYWNoKGZ1bmN0aW9uKGJhLG1hKXtpZihudWxsIT1iYSl7dmFyIGFhPSIiK0IubGFiZWwoKShiYSxtYSxGKSxjYT1ILm1lYXN1cmUoYWEpLGZhPUkueChiYSxtYSxGKSxkYT1JLnkoYmEsbWEsRiksbGE9SS53aWR0aChiYSxtYSxGKSxaPUkuaGVpZ2h0KGJhLG1hLEYpO2NhLmhlaWdodDw9WiYmY2Eud2lkdGg8PWxhJiYoWj0oWi1jYS5oZWlnaHQpLzIsZmErPShsYS1jYS53aWR0aCkvMixkYSs9WixsYT17bWluOmZhLG1heDpmYStjYS53aWR0aH0sWj17bWluOmRhLG1heDpkYStjYS5oZWlnaHR9LGxhLm1pbjxMfHxsYS5tYXg+Unx8Wi5taW48VXx8Wi5tYXg+Cll8fEIuX292ZXJsYXlMYWJlbChsYSxaLG1hLEQsQyl8fChiYT1JLmZpbGwoYmEsbWEsRiksYmE9MS42KnYuQ29sb3IuY29udHJhc3QoIndoaXRlIixiYSk8di5Db2xvci5jb250cmFzdCgiYmxhY2siLGJhKSxmYT1PLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ZhKyIsIitkYSsiKSIpLGZhLmNsYXNzZWQoYmE/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApLEsud3JpdGUoYWEsY2Eud2lkdGgsY2EuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxmYS5ub2RlKCkpKSl9fSl9O3gucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24oQyxGLEQsQixJKXtmb3IodmFyIE89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksUD10aGlzLmRhdGFzZXRzKCksSD1CO0g8UC5sZW5ndGg7SCsrKWZvcih2YXIgSz1QW0hdLE09SS5nZXQoSyksTD1IPT09Qj9EKzE6MDtMPE0ubGVuZ3RoO0wrKylpZih2LkRPTS5pbnRlcnNlY3RzQkJveChDLApGLHRoaXMuX2VudGl0eUJCb3goTVtMXSxMLEssTykpKXJldHVybiEwO3JldHVybiExfTtyZXR1cm4geH0oZigxNikuWFlQbG90KTtjLl9YMl9LRVk9IngyIjtjLl9ZMl9LRVk9InkyIjtkLlJlY3RhbmdsZT1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHoseCl7ZnVuY3Rpb24gQygpe3RoaXMuY29uc3RydWN0b3I9en1mb3IodmFyIEYgaW4geCl4Lmhhc093blByb3BlcnR5KEYpJiYoeltGXT14W0ZdKTt6LnByb3RvdHlwZT1udWxsPT09eD9PYmplY3QuY3JlYXRlKHgpOihDLnByb3RvdHlwZT14LnByb3RvdHlwZSxuZXcgQyl9LGw9ZigzMSksaz1mKDYpLG49Zig0OCkscD1mKDcpLHE9ZigxNCkscj1mKDMpLHQ9ZigwKSx2PWYoMTkpLHk9ZigyKTtjPWZ1bmN0aW9uKHope2Z1bmN0aW9uIHgoKXt2YXIgQz16LmNhbGwodGhpcyl8fHRoaXM7Qy5hZGRDbGFzcygic2NhdHRlci1wbG90Iik7dmFyIEY9bmV3IHAuRWFzaW5nO0Yuc3RhcnREZWxheSg1KTsKRi5zdGVwRHVyYXRpb24oMjUwKTtGLm1heFRvdGFsRHVyYXRpb24oeS5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKTtDLmFuaW1hdG9yKHYuQW5pbWF0b3IuTUFJTixGKTtDLmF0dHIoIm9wYWNpdHkiLC42KTtDLmF0dHIoImZpbGwiLChuZXcgci5Db2xvcikucmFuZ2UoKVswXSk7Qy5zaXplKDYpO3ZhciBEPWwuY2lyY2xlKCk7Qy5zeW1ib2woZnVuY3Rpb24oKXtyZXR1cm4gRH0pO3JldHVybiBDfWcoeCx6KTt4LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihDKXt2YXIgRj10aGlzO3JldHVybiB6LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcy5jYWxsKHRoaXMsQykubWFwKGZ1bmN0aW9uKEQpe3ZhciBCPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi5zaXplKCkpKEQuZGF0dW0sRC5pbmRleCxELmRhdGFzZXQpO0QuZGlhbWV0ZXI9QjtyZXR1cm4gRH0pfTt4LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKEMpe3ZhciBGPQp0aGlzO3JldHVybiBuZXcgay5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbi5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKEQpe3JldHVybiBuZXcgcS5DYW52YXNEcmF3ZXIoRCxuLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcChDLGZ1bmN0aW9uKCl7cmV0dXJuIHkuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi5zeW1ib2woKSl9LGZ1bmN0aW9uKCl7cmV0dXJuIHkuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi5zaXplKCkpfSkpfSl9O3gucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oQyxGKXtpZihudWxsPT1DKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh4Ll9TSVpFX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHguX1NJWkVfS0VZLEMsRik7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKEMpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHguX1NZTUJPTF9LRVkpO3RoaXMuX3Byb3BlcnR5QmluZGluZ3Muc2V0KHguX1NZTUJPTF9LRVksCnthY2Nlc3NvcjpDfSk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIEM9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgRj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxEPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSk7Ri5kPWZ1bmN0aW9uKEIsSSxPKXtyZXR1cm4gRChCLEksTykoMCkobnVsbCl9O0MucHVzaCh7YXR0clRvUHJvamVjdG9yOkYsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iodi5BbmltYXRvci5SRVNFVCl9KX1DLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih2LkFuaW1hdG9yLk1BSU4pfSk7cmV0dXJuIEN9O3gucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgQz16LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksCkY9eS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRD15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTtDLng9RjtDLnk9RDtDLnRyYW5zZm9ybT1mdW5jdGlvbihCLEksTyl7cmV0dXJuInRyYW5zbGF0ZSgiK0YoQixJLE8pKyIsIitEKEIsSSxPKSsiKSJ9O0MuZD10aGlzLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3IoKTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcj1mdW5jdGlvbigpe3ZhciBDPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSksRj15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oRCxCLEkpe3JldHVybiBDKEQsQixJKShGKEQsQixJKSkobnVsbCl9fTt4LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKEMpe3JldHVybnt4OkMucG9zaXRpb24ueC1DLmRpYW1ldGVyLzIseTpDLnBvc2l0aW9uLnktQy5kaWFtZXRlci8yLHdpZHRoOkMuZGlhbWV0ZXIsCmhlaWdodDpDLmRpYW1ldGVyfX07eC5wcm90b3R5cGUuX2VudGl0eVZpc2libGVPblBsb3Q9ZnVuY3Rpb24oQyxGKXt2YXIgRD17bWluOkYudG9wTGVmdC54LG1heDpGLmJvdHRvbVJpZ2h0Lnh9O0Y9e21pbjpGLnRvcExlZnQueSxtYXg6Ri5ib3R0b21SaWdodC55fTtDPXRoaXMuX2VudGl0eUJvdW5kcyhDKTtyZXR1cm4gdC5ET00uaW50ZXJzZWN0c0JCb3goRCxGLEMpfTt4LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEMpe3ZhciBGPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLEQ9eS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksQj15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gdGhpcy5lbnRpdGllcygpLmZpbHRlcihmdW5jdGlvbihJKXt2YXIgTz1JLmRhdHVtLFA9SS5pbmRleCxIPUkuZGF0YXNldDtJPUYoTyxQLEgpO3ZhciBLPUQoTyxQLEgpO089QihPLFAsSCk7cmV0dXJuIEktTy8yPD1DLngmJkMueDw9SStPLwoyJiZLLU8vMjw9Qy55JiZDLnk8PUsrTy8yfSl9O3JldHVybiB4fShmKDE2KS5YWVBsb3QpO2MuX1NJWkVfS0VZPSJzaXplIjtjLl9TWU1CT0xfS0VZPSJzeW1ib2wiO2QuU2NhdHRlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHQsdil7ZnVuY3Rpb24geSgpe3RoaXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHogaW4gdil2Lmhhc093blByb3BlcnR5KHopJiYodFt6XT12W3pdKTt0LnByb3RvdHlwZT1udWxsPT09dj9PYmplY3QuY3JlYXRlKHYpOih5LnByb3RvdHlwZT12LnByb3RvdHlwZSxuZXcgeSl9LGw9Zig3KSxrPWYoNiksbj1mKDQ3KSxwPWYoMykscT1mKDM1KSxyPWYoMik7Yz1mdW5jdGlvbih0KXtmdW5jdGlvbiB2KCl7dmFyIHk9dC5jYWxsKHRoaXMpfHx0aGlzO3kuYWRkQ2xhc3MoInNlZ21lbnQtcGxvdCIpO3kuYXR0cigic3Ryb2tlIiwobmV3IHAuQ29sb3IpLnJhbmdlKClbMF0pO3kuYXR0cigic3Ryb2tlLXdpZHRoIiwKIjJweCIpO3JldHVybiB5fWcodix0KTt2LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuLlNlZ21lbnRTVkdEcmF3ZXJ9LGZ1bmN0aW9uKCl7cS53YXJuKCJjYW52YXMgcmVuZGVyZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBTZWdtZW50IFBsb3QhIik7cmV0dXJuIG51bGx9KX07di5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6bmV3IGwuTnVsbH1dfTt2LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24oeSl7cmV0dXJuIngyIj09PXk/dC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieCIpOiJ5MiI9PT15P3QucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsInkiKTp0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLAp5KX07di5wcm90b3R5cGUueD1mdW5jdGlvbih5LHope2lmKG51bGw9PXkpcmV0dXJuIHQucHJvdG90eXBlLnguY2FsbCh0aGlzKTtudWxsPT16P3QucHJvdG90eXBlLnguY2FsbCh0aGlzLHkpOih0LnByb3RvdHlwZS54LmNhbGwodGhpcyx5LHopLHk9KHk9dGhpcy54MigpKSYmeS5hY2Nlc3NvcixudWxsIT15JiZ0aGlzLl9iaW5kUHJvcGVydHkodi5fWDJfS0VZLHkseikpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS54Mj1mdW5jdGlvbih5KXtpZihudWxsPT15KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh2Ll9YMl9LRVkpO3ZhciB6PXRoaXMueCgpO3RoaXMuX2JpbmRQcm9wZXJ0eSh2Ll9YMl9LRVkseSx6JiZ6LnNjYWxlKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS55PWZ1bmN0aW9uKHkseil7aWYobnVsbD09eSlyZXR1cm4gdC5wcm90b3R5cGUueS5jYWxsKHRoaXMpO251bGw9PXo/dC5wcm90b3R5cGUueS5jYWxsKHRoaXMseSk6KHQucHJvdG90eXBlLnkuY2FsbCh0aGlzLAp5LHopLHk9KHk9dGhpcy55MigpKSYmeS5hY2Nlc3NvcixudWxsIT15JiZ0aGlzLl9iaW5kUHJvcGVydHkodi5fWTJfS0VZLHkseikpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS55Mj1mdW5jdGlvbih5KXtpZihudWxsPT15KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh2Ll9ZMl9LRVkpO3ZhciB6PXRoaXMueSgpO3RoaXMuX2JpbmRQcm9wZXJ0eSh2Ll9ZMl9LRVkseSx6JiZ6LnNjYWxlKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHk9dC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3kueDE9ci5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk7eS54Mj1udWxsPT10aGlzLngyKCk/ci5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6ci5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngyKCkpO3kueTE9ci5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7CnkueTI9bnVsbD09dGhpcy55MigpP3IuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpOnIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKTtyZXR1cm4geX07di5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih5KXt5PXRoaXMuZW50aXR5TmVhcmVzdCh5KTtyZXR1cm4gbnVsbCE9eT9beV06W119O3YucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24oeSx6KXtpZihudWxsPT16KXt2YXIgeD17bWluOnkudG9wTGVmdC54LG1heDp5LmJvdHRvbVJpZ2h0Lnh9O3k9e21pbjp5LnRvcExlZnQueSxtYXg6eS5ib3R0b21SaWdodC55fX1lbHNlIHg9eSx5PXo7cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKHgseSl9O3YucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbih5LHope3ZhciB4PXRoaXMsQz1bXSxGPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZW50aXRpZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEQpe3guX2xpbmVJbnRlcnNlY3RzQm94KEQsCnkseixGKSYmQy5wdXNoKEQpfSk7cmV0dXJuIEN9O3YucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c0JveD1mdW5jdGlvbih5LHoseCxDKXt2YXIgRj10aGlzLEQ9Qy54MSh5LmRhdHVtLHkuaW5kZXgseS5kYXRhc2V0KSxCPUMueDIoeS5kYXR1bSx5LmluZGV4LHkuZGF0YXNldCksST1DLnkxKHkuZGF0dW0seS5pbmRleCx5LmRhdGFzZXQpO3k9Qy55Mih5LmRhdHVtLHkuaW5kZXgseS5kYXRhc2V0KTtpZih6Lm1pbjw9RCYmRDw9ei5tYXgmJngubWluPD1JJiZJPD14Lm1heHx8ei5taW48PUImJkI8PXoubWF4JiZ4Lm1pbjw9eSYmeTw9eC5tYXgpcmV0dXJuITA7dmFyIE89e3g6RCx5Okl9LFA9e3g6Qix5fSxIPVt7eDp6Lm1pbix5OngubWlufSx7eDp6Lm1pbix5OngubWF4fSx7eDp6Lm1heCx5OngubWF4fSx7eDp6Lm1heCx5OngubWlufV07cmV0dXJuIDA8SC5maWx0ZXIoZnVuY3Rpb24oSyxNKXtyZXR1cm4gMCE9PU0/Ri5fbGluZUludGVyc2VjdHNTZWdtZW50KE8sUCxLLEhbTS0xXSkmJgpGLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQoSyxIW00tMV0sTyxQKTohMX0pLmxlbmd0aH07di5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzU2VnbWVudD1mdW5jdGlvbih5LHoseCxDKXtmdW5jdGlvbiBGKEQsQixJKXtyZXR1cm4oQi54LUQueCkqKEkueS1CLnkpLShCLnktRC55KSooSS54LUIueCl9cmV0dXJuIDA+Rih5LHoseCkqRih5LHosQyl9O3JldHVybiB2fShmKDE2KS5YWVBsb3QpO2MuX1gyX0tFWT0ieDIiO2MuX1kyX0tFWT0ieTIiO2QuU2VnbWVudD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHIsdCl7ZnVuY3Rpb24gdigpe3RoaXMuY29uc3RydWN0b3I9cn1mb3IodmFyIHkgaW4gdCl0Lmhhc093blByb3BlcnR5KHkpJiYoclt5XT10W3ldKTtyLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOih2LnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgdil9LGw9ZigxKSxrPWYoNyksbj1mKDIwKSxwPWYoMCk7CmM9Zig1MCk7dmFyIHE9ZigyKTtmPWZ1bmN0aW9uKHIpe2Z1bmN0aW9uIHQoKXt2YXIgdj1yLmNhbGwodGhpcyl8fHRoaXM7di5fc3RhY2tpbmdSZXN1bHQ9bi5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiB2LmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHYueCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiB2LnkoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gdi5fc3RhY2tpbmdPcmRlcn0sZnVuY3Rpb24oeSx6LHgsQyl7cmV0dXJuIHAuU3RhY2tpbmcuc3RhY2soeSx6LHgsQyl9KTt2Ll9zdGFja2VkRXh0ZW50PW4ubWVtVGh1bmsodi5fc3RhY2tpbmdSZXN1bHQsZnVuY3Rpb24oKXtyZXR1cm4gdi54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHYuX2ZpbHRlckZvclByb3BlcnR5KCJ5Iil9LGZ1bmN0aW9uKHkseix4KXtyZXR1cm4gcC5TdGFja2luZy5zdGFja2VkRXh0ZW50KHkseix4KX0pO3YuX2Jhc2VsaW5lVmFsdWU9MDt2Ll9zdGFja2luZ09yZGVyPQoiYm90dG9tdXAiO3YuYWRkQ2xhc3MoInN0YWNrZWQtYXJlYS1wbG90Iik7di5hdHRyKCJmaWxsLW9wYWNpdHkiLDEpO3YuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVyblt2Ll9iYXNlbGluZVZhbHVlXX07di5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCghMSk7cmV0dXJuIHZ9Zyh0LHIpO3QucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHYpe3JldHVybiBudWxsPT12P3IucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6dj8ocC5XaW5kb3cud2FybigiV2FybmluZzogU3RhY2tlZCBBcmVhIFBsb3QgZG9lcyBub3Qgc3VwcG9ydCBjcm9wcGVkIHJlbmRlcmluZy4iKSx0aGlzKTpyLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZC5jYWxsKHRoaXMsdil9O3QucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbigpe3JldHVybiBuZXcgay5OdWxsfTt0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTsKdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfTt0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHYseSl7aWYobnVsbD09dilyZXR1cm4gci5wcm90b3R5cGUueC5jYWxsKHRoaXMpO251bGw9PXk/ci5wcm90b3R5cGUueC5jYWxsKHRoaXMsdik6ci5wcm90b3R5cGUueC5jYWxsKHRoaXMsdix5KTt0aGlzLl9jaGVja1NhbWVEb21haW4oKTtyZXR1cm4gdGhpc307dC5wcm90b3R5cGUueT1mdW5jdGlvbih2LHkpe2lmKG51bGw9PXYpcmV0dXJuIHIucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtudWxsPT15P3IucHJvdG90eXBlLnkuY2FsbCh0aGlzLHYpOnIucHJvdG90eXBlLnkuY2FsbCh0aGlzLHYseSk7dGhpcy5fY2hlY2tTYW1lRG9tYWluKCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24odil7aWYobnVsbD09dilyZXR1cm4gdGhpcy5fc3RhY2tpbmdPcmRlcjt0aGlzLl9zdGFja2luZ09yZGVyPQp2O3RoaXMuX29uRGF0YXNldFVwZGF0ZSgpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHIucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQuY2FsbCh0aGlzKX07dC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbigpe3ZhciB2PXRoaXMueSgpLnNjYWxlLnNjYWxlKHRoaXMuX2Jhc2VsaW5lVmFsdWUpO3Y9e3gxOjAseTE6dix4Mjp0aGlzLndpZHRoKCkseTI6dn07dGhpcy5fZ2V0QW5pbWF0b3IoImJhc2VsaW5lIikuYW5pbWF0ZSh0aGlzLl9iYXNlbGluZSx2KX07dC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciB2PXRoaXMueSgpO3Y9diYmdi5zY2FsZTtudWxsIT12JiYodi5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksdi5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfTsKdC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX2NoZWNrU2FtZURvbWFpbigpO3IucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKTtyZXR1cm4gdGhpc307dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHYpe3JldHVybiJ5Ij09PXY/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ci5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyx2KX07dC5wcm90b3R5cGUuX2NoZWNrU2FtZURvbWFpbj1mdW5jdGlvbigpe2lmKHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgdj10aGlzLmRhdGFzZXRzKCkseT10aGlzLngoKS5hY2Nlc3Nvcix6PXYubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBsLnNldChDLmRhdGEoKS5tYXAoZnVuY3Rpb24oRixEKXtyZXR1cm4geShGLEQsQykudG9TdHJpbmcoKX0pKS52YWx1ZXMoKX0pLHg9dC5fZG9tYWluS2V5cyh2LHkpO3ouc29tZShmdW5jdGlvbihDKXtyZXR1cm4gQy5sZW5ndGghPT0KeC5sZW5ndGh9KSYmcC5XaW5kb3cud2FybigidGhlIGRvbWFpbnMgYWNyb3NzIHRoZSBkYXRhc2V0cyBhcmUgbm90IHRoZSBzYW1lLiBQbG90IG1heSBwcm9kdWNlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIil9fTt0Ll9kb21haW5LZXlzPWZ1bmN0aW9uKHYseSl7dmFyIHo9bC5zZXQoKTt2LmZvckVhY2goZnVuY3Rpb24oeCl7eC5kYXRhKCkuZm9yRWFjaChmdW5jdGlvbihDLEYpe3ouYWRkKHkoQyxGLHgpKX0pfSk7cmV0dXJuIHoudmFsdWVzKCl9O3QucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB2KEQsQixJKXtyZXR1cm4gcC5TdGFja2luZy5ub3JtYWxpemVLZXkoQyhELEIsSSkpfXZhciB5PXRoaXMsej1yLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcykseD10aGlzLnkoKS5hY2Nlc3NvcixDPXRoaXMueCgpLmFjY2Vzc29yLEY9dGhpcy5fc3RhY2tpbmdSZXN1bHQoKTt6LmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihxLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSwKZnVuY3Rpb24oRCxCLEkpe3JldHVybiB5LnkoKS5zY2FsZS5zY2FsZSgreChELEIsSSkrRi5nZXQoSSkuZ2V0KHYoRCxCLEkpKS5vZmZzZXQpfSxmdW5jdGlvbihELEIsSSl7cmV0dXJuIHkueSgpLnNjYWxlLnNjYWxlKEYuZ2V0KEkpLmdldCh2KEQsQixJKSkub2Zmc2V0KX0pO3JldHVybiB6fTt0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbih2LHkseil7dmFyIHg9ci5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHYseSx6KSxDPXRoaXMueCgpLmFjY2Vzc29yKHYseSx6KTt2PXRoaXMueSgpLmFjY2Vzc29yKHYseSx6KTt6PXRoaXMueSgpLnNjYWxlLnNjYWxlKCt2K3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KHopLmdldChwLlN0YWNraW5nLm5vcm1hbGl6ZUtleShDKSkub2Zmc2V0KTtyZXR1cm57eDp4LngseTp6fX07cmV0dXJuIHR9KGMuQXJlYSk7ZC5TdGFja2VkQXJlYT1mfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fApmdW5jdGlvbih0LHYpe2Z1bmN0aW9uIHkoKXt0aGlzLmNvbnN0cnVjdG9yPXR9Zm9yKHZhciB6IGluIHYpdi5oYXNPd25Qcm9wZXJ0eSh6KSYmKHRbel09dlt6XSk7dC5wcm90b3R5cGU9bnVsbD09PXY/T2JqZWN0LmNyZWF0ZSh2KTooeS5wcm90b3R5cGU9di5wcm90b3R5cGUsbmV3IHkpfSxsPWYoNSksaz1mKDgpLG49ZigyMCkscD1mKDApLHE9ZigyNykscj1mKDIpO2M9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gdih5KXt2b2lkIDA9PT15JiYoeT0idmVydGljYWwiKTt2YXIgej10LmNhbGwodGhpcyx5KXx8dGhpczt6Ll9leHRyZW1hRm9ybWF0dGVyPWsuaWRlbnRpdHkoKTt6Ll9zdGFja2luZ1Jlc3VsdD1uLm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHouZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gei5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiB6Lmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiB6Ll9zdGFja2luZ09yZGVyfSwKZnVuY3Rpb24oeCxDLEYsRCl7cmV0dXJuIHAuU3RhY2tpbmcuc3RhY2soeCxDLEYsRCl9KTt6Ll9zdGFja2VkRXh0ZW50PW4ubWVtVGh1bmsoei5fc3RhY2tpbmdSZXN1bHQsZnVuY3Rpb24oKXtyZXR1cm4gei5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiB6Ll9maWx0ZXJGb3JQcm9wZXJ0eSh6Ll9pc1ZlcnRpY2FsPyJ5IjoieCIpfSxmdW5jdGlvbih4LEMsRil7cmV0dXJuIHAuU3RhY2tpbmcuc3RhY2tlZEV4dGVudCh4LEMsRil9KTt6LmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iik7ei5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiO3JldHVybiB6fWcodix0KTt2LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHkpe2lmKG51bGw9PXkpcmV0dXJuIHRoaXMuX3N0YWNraW5nT3JkZXI7dGhpcy5fc3RhY2tpbmdPcmRlcj15O3RoaXMuX29uRGF0YXNldFVwZGF0ZSgpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHkpe2lmKDA9PT0KYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fZXh0cmVtYUZvcm1hdHRlcjt0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChxLkJhci5fTEFCRUxfQVJFQV9DTEFTUywhMCk7dmFyIHk9bmV3IGwuU3ZnQ29udGV4dCh0aGlzLl9sYWJlbEFyZWEubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgbC5DYWNoZU1lYXN1cmVyKHkpO3RoaXMuX3dyaXRlcj1uZXcgbC5Xcml0ZXIodGhpcy5fbWVhc3VyZXIseSl9O3YucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geShQLEgpe3ZhciBLPXguX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksTT14LndpZHRoKCksTD14LmhlaWdodCgpO1AuZm9yRWFjaChmdW5jdGlvbihSKXtpZihSLmV4dGVudCE9PQpDKXt2YXIgVT14LmV4dHJlbWFGb3JtYXR0ZXIoKShSLmV4dGVudCksWT14Ll9tZWFzdXJlci5tZWFzdXJlKFUpLGJhPVIuc3RhY2tlZERhdHVtLG1hPWJhLm9yaWdpbmFsRGF0dW0sYWE9YmEub3JpZ2luYWxJbmRleDtiYT1iYS5vcmlnaW5hbERhdGFzZXQ7eC5faXNEYXR1bU9uU2NyZWVuKEssTSxMLG1hLGFhLGJhKSYmKG1hPXIuUGxvdC5fc2NhbGVkQWNjZXNzb3IoeC5hdHRyKHEuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpKG1hLGFhLGJhKSxhYT1ELnNjYWxlKFIuZXh0ZW50KSxSPXguX2dldFBvc2l0aW9uQXR0cihGLnNjYWxlKFIuYXhpc1ZhbHVlKSxtYSkrbWEvMixSPUgoeC5faXNWZXJ0aWNhbD97eDpSLHk6YWF9Ont4OmFhLHk6Un0sWSxtYSksVT16KFUse3RvcExlZnQ6Uixib3R0b21SaWdodDp7eDpSLngrWS53aWR0aCx5OlIueStZLmhlaWdodH19LG1hKSxPLnB1c2goVSkpfX0pfWZ1bmN0aW9uIHooUCxILEspe3ZhciBNPUgudG9wTGVmdCxMPU0ueCxSPU0ueTtNPUguYm90dG9tUmlnaHQueC0KSC50b3BMZWZ0Lng7SD1ILmJvdHRvbVJpZ2h0LnktSC50b3BMZWZ0Lnk7Sz14Ll9pc1ZlcnRpY2FsP00+SzpIPks7S3x8KEw9eC5fbGFiZWxBcmVhLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0wrIiwgIitSKyIpIiksTC5jbGFzc2VkKCJzdGFja2VkLWJhci1sYWJlbCIsITApLHguX3dyaXRlci53cml0ZShQLE0sSCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIn0sTC5ub2RlKCkpKTtyZXR1cm4gS312YXIgeD10aGlzO3QucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyk7dGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBDPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxGPXRoaXMucG9zaXRpb24oKS5zY2FsZSxEPXRoaXMubGVuZ3RoKCkuc2NhbGUsQj1wLlN0YWNraW5nLnN0YWNrZWRFeHRlbnRzKHRoaXMuX3N0YWNraW5nUmVzdWx0KCkpLEk9Qi5taW5pbXVtRXh0ZW50cyxPPVtdO3koQi5tYXhpbXVtRXh0ZW50cywKZnVuY3Rpb24oUCxIKXt2YXIgSz14Ll9pc1ZlcnRpY2FsP0gud2lkdGg6SC5oZWlnaHQ7SD14Ll9pc1ZlcnRpY2FsP0guaGVpZ2h0Okgud2lkdGg7cmV0dXJue3g6eC5faXNWZXJ0aWNhbD9QLngtSy8yOlAueCt2Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnguX2lzVmVydGljYWw/UC55LUg6UC55LUsvMn19KTt5KEksZnVuY3Rpb24oUCxIKXt2YXIgSz14Ll9pc1ZlcnRpY2FsP0gud2lkdGg6SC5oZWlnaHQ7SD14Ll9pc1ZlcnRpY2FsP0guaGVpZ2h0Okgud2lkdGg7cmV0dXJue3g6eC5faXNWZXJ0aWNhbD9QLngtSy8yOlAueC1ILHk6eC5faXNWZXJ0aWNhbD9QLnkrdi5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI6UC55LUsvMn19KTtPLnNvbWUoZnVuY3Rpb24oUCl7cmV0dXJuIFB9KSYmdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfTt2LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KE0sCkwsUil7cmV0dXJuIDA+K1AoTSxMLFIpP0MoTSxMLFIpOngoTSxMLFIpfWZ1bmN0aW9uIHooTSxMLFIpe3JldHVybiBNYXRoLmFicyh4KE0sTCxSKS1DKE0sTCxSKSl9ZnVuY3Rpb24geChNLEwsUil7cmV0dXJuIE8uc2NhbGUoK1AoTSxMLFIpK0suZ2V0KFIpLmdldChGKE0sTCxSKSkub2Zmc2V0KX1mdW5jdGlvbiBDKE0sTCxSKXtyZXR1cm4gTy5zY2FsZShLLmdldChSKS5nZXQoRihNLEwsUikpLm9mZnNldCl9ZnVuY3Rpb24gRihNLEwsUil7cmV0dXJuIHAuU3RhY2tpbmcubm9ybWFsaXplS2V5KEgoTSxMLFIpKX12YXIgRD10aGlzLEI9dC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksST10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIsTz10aGlzLmxlbmd0aCgpLnNjYWxlLFA9dGhpcy5sZW5ndGgoKS5hY2Nlc3NvcixIPXRoaXMucG9zaXRpb24oKS5hY2Nlc3NvcixLPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7Qlt0aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOgoid2lkdGgiXT16O0JbSV09ZnVuY3Rpb24oTSxMLFIpe3JldHVybiBELl9pc1ZlcnRpY2FsP3koTSxMLFIpOnkoTSxMLFIpLXooTSxMLFIpfTtyZXR1cm4gQn07di5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHkpe3JldHVybiB5PT09KHRoaXMuX2lzVmVydGljYWw/InkiOiJ4Iik/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06dC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyx5KX07di5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyk7dGhpcy5fbWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHZ9KHEuQmFyKTtjLl9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUj01O2QuU3RhY2tlZEJhcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG4scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9Cm59Zm9yKHZhciByIGluIHApcC5oYXNPd25Qcm9wZXJ0eShyKSYmKG5bcl09cFtyXSk7bi5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMCk7Yz1mKDI3KTt2YXIgaz1mKDIpO2Y9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcCgpe3ZhciBxPW4uY2FsbCh0aGlzKXx8dGhpcztxLl9jb25uZWN0b3JzRW5hYmxlZD0hMTtxLmFkZENsYXNzKCJ3YXRlcmZhbGwtcGxvdCIpO3JldHVybiBxfWcocCxuKTtwLnByb3RvdHlwZS5jb25uZWN0b3JzRW5hYmxlZD1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9jb25uZWN0b3JzRW5hYmxlZDt0aGlzLl9jb25uZWN0b3JzRW5hYmxlZD1xO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS50b3RhbD1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChwLl9UT1RBTF9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eShwLl9UT1RBTF9LRVksCnEsbnVsbCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocSl7dmFyIHI9dGhpczt0aGlzLl9jb25uZWN0b3JBcmVhLnNlbGVjdEFsbCgibGluZSIpLnJlbW92ZSgpO3RoaXMuX2Nvbm5lY3RvcnNFbmFibGVkJiZsLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2RyYXdDb25uZWN0b3JzKCl9LHEpfTtwLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHEpe3E9bi5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscSk7dGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQocC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApO3JldHVybiBxfTtwLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24ocSl7cmV0dXJuInkiPT09cT9bdGhpcy5fZXh0ZW50XTpuLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLApxKX07cC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcyxyPW4ucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLHQ9dGhpcy55KCkuc2NhbGUsdj1rLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSk7bnVsbD09dGhpcy5hdHRyKCJ5IikmJihyLnk9ZnVuY3Rpb24oeSx6LHgpe3ZhciBDPXEueSgpLmFjY2Vzc29yKHkseix4KTtpZih2KHkseix4KSlyZXR1cm4gTWF0aC5taW4odC5zY2FsZShDKSx0LnNjYWxlKDApKTt5PXEuX3N1YnRvdGFsc1t6XTtpZigwPT09eilyZXR1cm4gMD5DP3Quc2NhbGUoeS1DKTp0LnNjYWxlKHkpO3o9cS5fc3VidG90YWxzW3otMV07cmV0dXJuIHk+ej90LnNjYWxlKHkpOnQuc2NhbGUoeil9KTtudWxsPT10aGlzLmF0dHIoImhlaWdodCIpJiYoci5oZWlnaHQ9ZnVuY3Rpb24oeSx6LHgpe3ZhciBDPXYoeSx6LHgpO3k9cS55KCkuYWNjZXNzb3IoeSx6LHgpO2lmKEMpcmV0dXJuIE1hdGguYWJzKHQuc2NhbGUoeSktCnQuc2NhbGUoMCkpO0M9cS5fc3VidG90YWxzW3pdO2lmKDA9PT16KXJldHVybiBNYXRoLmFicyh0LnNjYWxlKEMpLXQuc2NhbGUoQy15KSk7ej1xLl9zdWJ0b3RhbHNbei0xXTtyZXR1cm4gTWF0aC5hYnModC5zY2FsZShDKS10LnNjYWxlKHopKX0pO3JbImNsYXNzIl09ZnVuY3Rpb24oeSx6LHgpe3ZhciBDPSIiO251bGwhPXEuYXR0cigiY2xhc3MiKSYmKEM9cS5hdHRyKCJjbGFzcyIpLmFjY2Vzc29yKHkseix4KSsiICIpO2lmKHYoeSx6LHgpKXJldHVybiBDK3AuX0JBUl9UT1RBTF9DTEFTUzt5PXEueSgpLmFjY2Vzc29yKHkseix4KTtyZXR1cm4gQysoMDx5P3AuX0JBUl9HUk9XVEhfQ0xBU1M6cC5fQkFSX0RFQ0xJTkVfQ0xBU1MpfTtyZXR1cm4gcn07cC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVN1YnRvdGFscygpO24ucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuX2NhbGN1bGF0ZVN1YnRvdGFsc0FuZEV4dGVudD0KZnVuY3Rpb24ocSl7dmFyIHI9dGhpcyx0PU51bWJlci5NQVhfVkFMVUUsdj1OdW1iZXIuTUlOX1ZBTFVFLHk9MCx6PSExO3EuZGF0YSgpLmZvckVhY2goZnVuY3Rpb24oeCxDKXt2YXIgRj1yLnkoKS5hY2Nlc3Nvcih4LEMscSk7KHg9ci50b3RhbCgpLmFjY2Vzc29yKHgsQyxxKSkmJjAhPT1DfHwoeSs9Rik7ci5fc3VidG90YWxzLnB1c2goeSk7eTx0JiYodD15KTt5PnYmJih2PXkpO3gmJihGPHQmJih0PUYpLEY+diYmKHY9RikpO2lmKCF6JiZ4KXtDPUYteTtmb3IoRj0wO0Y8ci5fc3VidG90YWxzLmxlbmd0aDtGKyspci5fc3VidG90YWxzW0ZdKz1DO3o9ITA7eSs9Qzt0Kz1DO3YrPUN9fSk7dGhpcy5fZXh0ZW50PVt0LHZdfTtwLnByb3RvdHlwZS5fZHJhd0Nvbm5lY3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHE9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCkscj10aGlzLmRhdGFzZXRzKClbMF0sdD0xO3Q8ci5kYXRhKCkubGVuZ3RoO3QrKyl7dmFyIHY9dC0xLHk9ci5kYXRhKClbdF0sCno9ci5kYXRhKClbdl07ej1xLngoeix2LHIpO3ZhciB4PXEueCh5LHQscikrcS53aWR0aCh5LHQsciksQz1xLnkoeSx0LHIpO2lmKDA8dGhpcy5fc3VidG90YWxzW3RdJiZ0aGlzLl9zdWJ0b3RhbHNbdF0+dGhpcy5fc3VidG90YWxzW3ZdfHwwPnRoaXMuX3N1YnRvdGFsc1t0XSYmdGhpcy5fc3VidG90YWxzW3RdPj10aGlzLl9zdWJ0b3RhbHNbdl0pQz1xLnkoeSx0LHIpK3EuaGVpZ2h0KHksdCxyKTt0aGlzLl9jb25uZWN0b3JBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQocC5fQ09OTkVDVE9SX0NMQVNTLCEwKS5hdHRyKCJ4MSIseikuYXR0cigieDIiLHgpLmF0dHIoInkxIixDKS5hdHRyKCJ5MiIsQyl9fTtwLnByb3RvdHlwZS5fdXBkYXRlU3VidG90YWxzPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5kYXRhc2V0cygpOzA8cS5sZW5ndGgmJihxPXFbcS5sZW5ndGgtMV0sdGhpcy5fc3VidG90YWxzPVtdLHRoaXMuX2NhbGN1bGF0ZVN1YnRvdGFsc0FuZEV4dGVudChxKSl9O3JldHVybiBwfShjLkJhcik7CmYuX0JBUl9ERUNMSU5FX0NMQVNTPSJ3YXRlcmZhbGwtZGVjbGluZSI7Zi5fQkFSX0dST1dUSF9DTEFTUz0id2F0ZXJmYWxsLWdyb3d0aCI7Zi5fQkFSX1RPVEFMX0NMQVNTPSJ3YXRlcmZhbGwtdG90YWwiO2YuX0NPTk5FQ1RPUl9DTEFTUz0iY29ubmVjdG9yIjtmLl9DT05ORUNUT1JfQVJFQV9DTEFTUz0iY29ubmVjdG9yLWFyZWEiO2YuX1RPVEFMX0tFWT0idG90YWwiO2QuV2F0ZXJmYWxsPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihuW3JdPXBbcl0pO24ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDEpLGs9ZigwKTtjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHAocSl7dmFyIHI9bi5jYWxsKHRoaXMpfHx0aGlzOwpzd2l0Y2gocSl7Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOm51bGw9PXAuX3Bsb3R0YWJsZUNvbG9yQ2FjaGUmJihwLl9wbG90dGFibGVDb2xvckNhY2hlPXAuX2dldFBsb3R0YWJsZUNvbG9ycygpKTtxPWwuc2NhbGVPcmRpbmFsKCkucmFuZ2UocC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSAiQ2F0ZWdvcnkxMCI6Y2FzZSAiY2F0ZWdvcnkxMCI6Y2FzZSAiMTAiOnE9bC5zY2FsZU9yZGluYWwobC5zY2hlbWVDYXRlZ29yeTEwKTticmVhaztjYXNlICJDYXRlZ29yeTIwIjpjYXNlICJjYXRlZ29yeTIwIjpjYXNlICIyMCI6cT1sLnNjYWxlT3JkaW5hbChsLnNjaGVtZUNhdGVnb3J5MjApO2JyZWFrO2Nhc2UgIkNhdGVnb3J5MjBiIjpjYXNlICJjYXRlZ29yeTIwYiI6Y2FzZSAiMjBiIjpxPWwuc2NhbGVPcmRpbmFsKGwuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UgIkNhdGVnb3J5MjBjIjpjYXNlICJjYXRlZ29yeTIwYyI6Y2FzZSAiMjBjIjpxPWwuc2NhbGVPcmRpbmFsKGwuc2NoZW1lQ2F0ZWdvcnkyMGMpOwpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBDb2xvclNjYWxlIHR5cGUiKTt9ci5fZDNTY2FsZT1xO3JldHVybiByfWcocCxuKTtwLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihxKXtyZXR1cm4gay5BcnJheS51bmlxKHEpfTtwLnByb3RvdHlwZS5fZ2V0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGsuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX07cC5pbnZhbGlkYXRlQ29sb3JDYWNoZT1mdW5jdGlvbigpe3AuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9bnVsbH07cC5fZ2V0UGxvdHRhYmxlQ29sb3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBxPVtdLHI9bC5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSx0PWsuQ29sb3IuY29sb3JUZXN0KHIsIiIpLHY9MCx5PWsuQ29sb3IuY29sb3JUZXN0KHIsInBsb3R0YWJsZS1jb2xvcnMtMCIpO251bGwhPXkmJnY8dGhpcy5fTUFYSU1VTV9DT0xPUlNfRlJPTV9DU1MmJgooeSE9PXR8fHkhPT1xW3EubGVuZ3RoLTFdKTspcS5wdXNoKHkpLHYrKyx5PWsuQ29sb3IuY29sb3JUZXN0KHIsInBsb3R0YWJsZS1jb2xvcnMtIit2KTtyLnJlbW92ZSgpO3JldHVybiBxfTtwLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihxKXt2YXIgcj10aGlzLl9kM1NjYWxlKHEpO3E9dGhpcy5kb21haW4oKS5pbmRleE9mKHEpO3E9TWF0aC5mbG9vcihxL3RoaXMucmFuZ2UoKS5sZW5ndGgpO3JldHVybiBrLkNvbG9yLmxpZ2h0ZW5Db2xvcihyLE1hdGgubG9nKHEqcC5fTE9PUF9MSUdIVEVOX0ZBQ1RPUisxKSl9O3AucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9O3AucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fZDNTY2FsZS5kb21haW4oKTt0aGlzLl9kM1NjYWxlLmRvbWFpbihxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuX2dldFJhbmdlPQpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9O3AucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihxKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHEpfTtyZXR1cm4gcH0oZigxNykuU2NhbGUpO2MuX0xPT1BfTElHSFRFTl9GQUNUT1I9MS42O2MuX01BWElNVU1fQ09MT1JTX0ZST01fQ1NTPTI1NjtkLkNvbG9yPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihuW3JdPXBbcl0pO24ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDEpLGs9ZigwKTtjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHAocSl7dm9pZCAwPT09cSYmKHE9ImxpbmVhciIpO3ZhciByPW4uY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocSl7Y2FzZSAibGluZWFyIjpyLl9jb2xvclNjYWxlPQpsLnNjYWxlTGluZWFyKCk7YnJlYWs7Y2FzZSAibG9nIjpyLl9jb2xvclNjYWxlPWwuc2NhbGVMb2coKTticmVhaztjYXNlICJzcXJ0IjpyLl9jb2xvclNjYWxlPWwuc2NhbGVTcXJ0KCk7YnJlYWs7Y2FzZSAicG93IjpyLl9jb2xvclNjYWxlPWwuc2NhbGVQb3coKX1pZihudWxsPT1yLl9jb2xvclNjYWxlKXRocm93IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIitxKTtyLnJhbmdlKHAuUkVEUyk7cmV0dXJuIHJ9ZyhwLG4pO3AucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHEpe3E9bC5leHRlbnQocSk7cmV0dXJuIG51bGw9PXFbMF18fG51bGw9PXFbMV0/W106cX07cC5wcm90b3R5cGUuX2QzSW50ZXJwb2xhdGVkU2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZS5yYW5nZShbMCwxXSkuaW50ZXJwb2xhdGUodGhpcy5faW50ZXJwb2xhdGVDb2xvcnMoKSl9O3AucHJvdG90eXBlLl9pbnRlcnBvbGF0ZUNvbG9ycz0KZnVuY3Rpb24oKXt2YXIgcT10aGlzLl9jb2xvclJhbmdlO2lmKDI+cS5sZW5ndGgpdGhyb3cgRXJyb3IoIkNvbG9yIHNjYWxlIGFycmF5cyBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIGVsZW1lbnRzLiIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihyKXtyPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyKSk7cio9cS5sZW5ndGgtMTt2YXIgdD1NYXRoLmZsb29yKHIpLHY9ci10O3JldHVybiBsLmludGVycG9sYXRlTGFiKHFbdF0scVtNYXRoLmNlaWwocildKSh2KX19fTtwLnByb3RvdHlwZS5fcmVzZXRTY2FsZT1mdW5jdGlvbigpe3RoaXMuX2QzU2NhbGU9dGhpcy5fZDNJbnRlcnBvbGF0ZWRTY2FsZSgpO3RoaXMuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKTt0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfTtwLnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTswPHEubGVuZ3RoJiZ0aGlzLl9zZXREb21haW4oW2suTWF0aC5taW4ocSwKMCksay5NYXRoLm1heChxLDApXSl9O3AucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLl9kM1NjYWxlKHEpfTtwLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfTtwLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHEpe2lmKG51bGw9PXEpcmV0dXJuIHRoaXMuX2QzU2NhbGUuZG9tYWluKCk7dGhpcy5fZDNTY2FsZS5kb21haW4ocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclJhbmdlfTtwLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocSl7dGhpcy5fY29sb3JSYW5nZT1xO3RoaXMuX3Jlc2V0U2NhbGUoKX07cmV0dXJuIHB9KGYoMTcpLlNjYWxlKTtjLlJFRFM9IiNGRkZGRkYgI0ZGRjZFMSAjRkVGNEMwICNGRUQ5NzYgI0ZFQjI0QyAjRkQ4RDNDICNGQzRFMkEgI0UzMUExQyAjQjEwMDI2Ii5zcGxpdCgiICIpOwpjLkJMVUVTPSIjRkZGRkZGICNDQ0ZGRkYgI0E1RkZGRCAjODVGN0ZCICM2RUQzRUYgIzU1QTdFMCAjNDE3RkQwICMyNTQ1RDMgIzBCMDJFMSIuc3BsaXQoIiAiKTtjLlBPU05FRz0iIzBCMDJFMSAjMjU0NUQzICM0MTdGRDAgIzU1QTdFMCAjNkVEM0VGICM4NUY3RkIgI0E1RkZGRCAjQ0NGRkZGICNGRkZGRkYgI0ZGRjZFMSAjRkVGNEMwICNGRUQ5NzYgI0ZFQjI0QyAjRkQ4RDNDICNGQzRFMkEgI0UzMUExQyAjQjEwMDI2Ii5zcGxpdCgiICIpO2QuSW50ZXJwb2xhdGVkQ29sb3I9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihrLG4pe2Z1bmN0aW9uIHAoKXt0aGlzLmNvbnN0cnVjdG9yPWt9Zm9yKHZhciBxIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShxKSYmKGtbcV09bltxXSk7ay5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKToocC5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHApfSxsPWYoMSk7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBuKCl7dmFyIHA9CmsuY2FsbCh0aGlzKXx8dGhpcztwLl9kM1NjYWxlPWwuc2NhbGVMaW5lYXIoKTtyZXR1cm4gcH1nKG4sayk7bi5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCwxXX07bi5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBwWzBdPT09cFsxXT9bcFswXS0xLHBbMV0rMV06cH07bi5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUocCl9O24ucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuc2NhbGUocCl9O24ucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHApfTtuLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfTtuLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX07bi5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocCl7dGhpcy5kb21haW4ocCl9O24ucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9O24ucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocCl7aWYobnVsbD09cClyZXR1cm4gdGhpcy5fZDNTY2FsZS5kb21haW4oKTt0aGlzLl9kM1NjYWxlLmRvbWFpbihwKTtyZXR1cm4gdGhpc307bi5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX07bi5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHApe3RoaXMuX2QzU2NhbGUucmFuZ2UocCl9O24ucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocCl9O24ucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKCl9OwpuLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihwLHEpe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocCkubmljZShxKS5kb21haW4oKX07cmV0dXJuIG59KGYoMTEpLlF1YW50aXRhdGl2ZVNjYWxlKTtkLkxpbmVhcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHAscSl7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9cH1mb3IodmFyIHQgaW4gcSlxLmhhc093blByb3BlcnR5KHQpJiYocFt0XT1xW3RdKTtwLnByb3RvdHlwZT1udWxsPT09cT9PYmplY3QuY3JlYXRlKHEpOihyLnByb3RvdHlwZT1xLnByb3RvdHlwZSxuZXcgcil9LGw9ZigxKSxrPWYoMCksbj1mKDMpO2M9ZnVuY3Rpb24ocCl7ZnVuY3Rpb24gcShyKXt2b2lkIDA9PT1yJiYocj0xMCk7dmFyIHQ9cC5jYWxsKHRoaXMpfHx0aGlzO3QuX2QzU2NhbGU9bC5zY2FsZUxpbmVhcigpO3QuX2Jhc2U9cjt0Ll9waXZvdD10Ll9iYXNlO3QuX3NldERvbWFpbih0Ll9kZWZhdWx0RXh0ZW50KCkpOwppZigxPj1yKXRocm93IEVycm9yKCJNb2RpZmllZExvZ1NjYWxlOiBUaGUgYmFzZSBtdXN0IGJlIFx4M2UgMSIpO3JldHVybiB0fWcocSxwKTtxLnByb3RvdHlwZS5fYWRqdXN0ZWRMb2c9ZnVuY3Rpb24ocil7dmFyIHQ9MD5yPy0xOjE7cio9dDtyPHRoaXMuX3Bpdm90JiYocis9KHRoaXMuX3Bpdm90LXIpL3RoaXMuX3Bpdm90KTtyPU1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpO3JldHVybiByKnR9O3EucHJvdG90eXBlLl9pbnZlcnRlZEFkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciB0PTA+cj8tMToxO3I9TWF0aC5wb3codGhpcy5fYmFzZSxyKnQpO3I8dGhpcy5fcGl2b3QmJihyPXRoaXMuX3Bpdm90KihyLTEpLyh0aGlzLl9waXZvdC0xKSk7cmV0dXJuIHIqdH07cS5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUodGhpcy5fYWRqdXN0ZWRMb2cocikpfTtxLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2ludmVydGVkQWRqdXN0ZWRMb2codGhpcy5fZDNTY2FsZS5pbnZlcnQocikpfTsKcS5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX07cS5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9O3EucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9O3EucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9O3EucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfTtxLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59O3EucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3AucHJvdG90eXBlLl9zZXREb21haW4uY2FsbCh0aGlzLApbdGhpcy5fYWRqdXN0ZWRMb2coclswXSksdGhpcy5fYWRqdXN0ZWRMb2coclsxXSldKX07cS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtpZihudWxsPT1yKXJldHVybiB0aGlzLl9kM1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzU2NhbGUuZG9tYWluKHIpO3JldHVybiB0aGlzfTtxLnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoRixELEIpe3JldHVybltGLEQsQl0uc29ydChmdW5jdGlvbihJLE8pe3JldHVybiBJLU99KVsxXX12YXIgdD1rLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCksdj1rLk1hdGgubWF4KHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkseT1yKHQsdiwtdGhpcy5fcGl2b3QpLHo9cih0LHYsdGhpcy5fcGl2b3QpO3k9dGhpcy5fbG9nVGlja3MoLXksLXQpLm1hcChmdW5jdGlvbihGKXtyZXR1cm4tRn0pLnJldmVyc2UoKTt6PXRoaXMuX2xvZ1RpY2tzKHosdik7dmFyIHg9TWF0aC5tYXgodCwKLXRoaXMuX3Bpdm90KSxDPU1hdGgubWluKHYsdGhpcy5fcGl2b3QpO3g9bC5zY2FsZUxpbmVhcigpLmRvbWFpbihbeCxDXSkudGlja3ModGhpcy5faG93TWFueVRpY2tzKHgsQykpO3k9eS5jb25jYXQoeCkuY29uY2F0KHopOzE+PXkubGVuZ3RoJiYoeT1sLnNjYWxlTGluZWFyKCkuZG9tYWluKFt0LHZdKS50aWNrcygpKTtyZXR1cm4geX07cS5wcm90b3R5cGUuX2xvZ1RpY2tzPWZ1bmN0aW9uKHIsdCl7dmFyIHY9dGhpcyx5PXRoaXMuX2hvd01hbnlUaWNrcyhyLHQpO2lmKDA9PT15KXJldHVybltdO3ZhciB6PU1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkpLHg9TWF0aC5jZWlsKE1hdGgubG9nKHQpL01hdGgubG9nKHRoaXMuX2Jhc2UpKTt5PWwucmFuZ2UoeCx6LC1NYXRoLmNlaWwoKHgteikveSkpO3o9bC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vcik7dmFyIEM9ay5BcnJheS51bmlxKHopO3k9eS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIEMubWFwKGZ1bmN0aW9uKEQpe3JldHVybiBNYXRoLnBvdyh2Ll9iYXNlLApGLTEpKkR9KX0pO3JldHVybiBrLkFycmF5LmZsYXR0ZW4oeSkuZmlsdGVyKGZ1bmN0aW9uKEYpe3JldHVybiByPD1GJiZGPD10fSkuc29ydChmdW5jdGlvbihGLEQpe3JldHVybiBGLUR9KX07cS5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLHQpe3ZhciB2PXRoaXMuX2FkanVzdGVkTG9nKGsuTWF0aC5taW4odGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSkseT10aGlzLl9hZGp1c3RlZExvZyhrLk1hdGgubWF4KHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpO3JldHVybiBNYXRoLmNlaWwoKHRoaXMuX2FkanVzdGVkTG9nKHQpLXRoaXMuX2FkanVzdGVkTG9nKHIpKS8oeS12KSpuLk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUyl9O3EucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByfTtxLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLHRoaXMuX2Jhc2VdfTtxLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49CmZ1bmN0aW9uKHIpe3JldHVybiByWzBdPT09clsxXT8ocj1yWzBdLDA8cj9bci90aGlzLl9iYXNlLHIqdGhpcy5fYmFzZV06MD09PXI/Wy10aGlzLl9iYXNlLHRoaXMuX2Jhc2VdOltyKnRoaXMuX2Jhc2Usci90aGlzLl9iYXNlXSk6cn07cS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX07cS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9O3EucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKCl9O3JldHVybiBxfShmKDExKS5RdWFudGl0YXRpdmVTY2FsZSk7ZC5Nb2RpZmllZExvZz1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigwKTtkLmludGVydmFsVGlja0dlbmVyYXRvcj1mdW5jdGlvbihsKXtpZigwPj1sKXRocm93IEVycm9yKCJpbnRlcnZhbCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiBmdW5jdGlvbihrKXtrPQprLmRvbWFpbigpO3ZhciBuPU1hdGgubWluKGtbMF0sa1sxXSk7az1NYXRoLm1heChrWzBdLGtbMV0pO3ZhciBwPU1hdGguY2VpbChuL2wpKmw7bj0wPT09biVsP1tdOltuXTt2YXIgcT1nLk1hdGgucmFuZ2UoMCxNYXRoLmZsb29yKChrLXApL2wpKzEpLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gcCtyKmx9KTtyZXR1cm4gbi5jb25jYXQocSkuY29uY2F0KDA9PT1rJWw/W106W2tdKX19O2QuaW50ZWdlclRpY2tHZW5lcmF0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIGs9bC5kZWZhdWx0VGlja3MoKTtyZXR1cm4gay5maWx0ZXIoZnVuY3Rpb24obixwKXtyZXR1cm4gMD09PW4lMXx8MD09PXB8fHA9PT1rLmxlbmd0aC0xfSl9fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihuLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPW59Zm9yKHZhciByIGluIHApcC5oYXNPd25Qcm9wZXJ0eShyKSYmKG5bcl09cFtyXSk7Cm4ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDEpLGs9ZigyOCk7Yz1mdW5jdGlvbihuKXtmdW5jdGlvbiBwKCl7dmFyIHE9bi5jYWxsKHRoaXMpfHx0aGlzO3EuX2QzU2NhbGU9bC5zY2FsZVRpbWUoKTtxLmF1dG9Eb21haW4oKTtyZXR1cm4gcX1nKHAsbik7cC5wcm90b3R5cGUudGlja0ludGVydmFsPWZ1bmN0aW9uKHEscil7dm9pZCAwPT09ciYmKHI9MSk7dmFyIHQ9bC5zY2FsZVRpbWUoKTtwLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHEpLmV2ZXJ5KHIpO3QuZG9tYWluKHRoaXMuZG9tYWluKCkpO3QucmFuZ2UodGhpcy5yYW5nZSgpKTtyZXR1cm4gdC50aWNrcygpfTtwLnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHEpe2lmKHFbMV08cVswXSl0aHJvdyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBuLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcywKcSl9O3AucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuW25ldyBEYXRlKCIxOTcwLTAxLTAxIiksbmV3IERhdGUoIjE5NzAtMDEtMDIiKV19O3AucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihxKXt2YXIgcj1xWzBdLmdldFRpbWUoKSx0PXFbMV0uZ2V0VGltZSgpO3JldHVybiByPT09dD8ocT1uZXcgRGF0ZShyKSxxLnNldERhdGUocS5nZXREYXRlKCktMSksdD1uZXcgRGF0ZSh0KSx0LnNldERhdGUodC5nZXREYXRlKCkrMSksW3EsdF0pOnF9O3AucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLl9kM1NjYWxlKHEpfTtwLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLnNjYWxlKG5ldyBEYXRlKHEpKX07cC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5pbnZlcnQocSkuZ2V0VGltZSgpfTtwLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD0KZnVuY3Rpb24oKXt2YXIgcT10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltxWzBdLnZhbHVlT2YoKSxxWzFdLnZhbHVlT2YoKV19O3AucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5kb21haW4oKTtyZXR1cm5bcVswXS52YWx1ZU9mKCkscVsxXS52YWx1ZU9mKCldfTtwLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihxKXt0aGlzLmRvbWFpbihbbmV3IERhdGUocVswXSksbmV3IERhdGUocVsxXSldKX07cC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX07cC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9kM1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzU2NhbGUuZG9tYWluKHEpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfTsKcC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHEpe3RoaXMuX2QzU2NhbGUucmFuZ2UocSl9O3AucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocSl9O3AucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKCl9O3AucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocSkubmljZSgpLmRvbWFpbigpfTtwLnRpbWVJbnRlcnZhbFRvRDNUaW1lPWZ1bmN0aW9uKHEpe3N3aXRjaChxKXtjYXNlIGsuVGltZUludGVydmFsLnNlY29uZDpyZXR1cm4gbC50aW1lU2Vjb25kO2Nhc2Ugay5UaW1lSW50ZXJ2YWwubWludXRlOnJldHVybiBsLnRpbWVNaW51dGU7Y2FzZSBrLlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBsLnRpbWVIb3VyO2Nhc2Ugay5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBsLnRpbWVEYXk7CmNhc2Ugay5UaW1lSW50ZXJ2YWwud2VlazpyZXR1cm4gbC50aW1lV2VlaztjYXNlIGsuVGltZUludGVydmFsLm1vbnRoOnJldHVybiBsLnRpbWVNb250aDtjYXNlIGsuVGltZUludGVydmFsLnllYXI6cmV0dXJuIGwudGltZVllYXI7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVGltZUludGVydmFsIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdDogIitxKTt9fTtyZXR1cm4gcH0oZigxMSkuUXVhbnRpdGF0aXZlU2NhbGUpO2QuVGltZT1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigxKSxsPUFycmF5O2QuYWRkPWZ1bmN0aW9uKGssbil7aWYoay5sZW5ndGghPT1uLmxlbmd0aCl0aHJvdyBFcnJvcigiYXR0ZW1wdGVkIHRvIGFkZCBhcnJheXMgb2YgdW5lcXVhbCBsZW5ndGgiKTtyZXR1cm4gay5tYXAoZnVuY3Rpb24ocCxxKXtyZXR1cm4ga1txXStuW3FdfSl9O2QudW5pcT1mdW5jdGlvbihrKXt2YXIgbj1nLnNldCgpLHA9W107ay5mb3JFYWNoKGZ1bmN0aW9uKHEpe24uaGFzKFN0cmluZyhxKSl8fAoobi5hZGQoU3RyaW5nKHEpKSxwLnB1c2gocSkpfSk7cmV0dXJuIHB9O2QuZmxhdHRlbj1mdW5jdGlvbihrKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGspfTtkLmNyZWF0ZUZpbGxlZEFycmF5PWZ1bmN0aW9uKGssbil7Zm9yKHZhciBwPVtdLHE9MDtxPG47cSsrKXBbcV09ImZ1bmN0aW9uIj09PXR5cGVvZiBrP2socSk6aztyZXR1cm4gcH19LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyxsLGspe3RoaXMubWF4SW5kZXg9dGhpcy5taW5JbmRleD10aGlzLmV4aXRJbmRleD10aGlzLmVudHJ5SW5kZXg9Zzt0aGlzLmJ1Y2tldFZhbHVlPWw7dGhpcy5tYXhWYWx1ZT10aGlzLm1pblZhbHVlPWt9Zi5wcm90b3R5cGUuaXNJbkJ1Y2tldD1mdW5jdGlvbihnKXtyZXR1cm4gZz09dGhpcy5idWNrZXRWYWx1ZX07Zi5wcm90b3R5cGUuYWRkVG9CdWNrZXQ9ZnVuY3Rpb24oZyxsKXtnPHRoaXMubWluVmFsdWUmJih0aGlzLm1pblZhbHVlPWcsdGhpcy5taW5JbmRleD0KbCk7Zz50aGlzLm1heFZhbHVlJiYodGhpcy5tYXhWYWx1ZT1nLHRoaXMubWF4SW5kZXg9bCk7dGhpcy5leGl0SW5kZXg9bH07Zi5wcm90b3R5cGUuZ2V0VW5pcXVlSW5kaWNlcz1mdW5jdGlvbigpe3ZhciBnPVt0aGlzLmVudHJ5SW5kZXgsdGhpcy5tYXhJbmRleCx0aGlzLm1pbkluZGV4LHRoaXMuZXhpdEluZGV4XTtyZXR1cm4gZy5maWx0ZXIoZnVuY3Rpb24obCxrKXtyZXR1cm4gMD09a3x8bCE9Z1trLTFdfSl9O3JldHVybiBmfSgpO2QuQnVja2V0PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obCxrKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1sfWZvcih2YXIgcCBpbiBrKWsuaGFzT3duUHJvcGVydHkocCkmJihsW3BdPWtbcF0pO2wucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KG4ucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBuKX07Yz1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7cmV0dXJuIG51bGwhPT0KbCYmbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9ZyhrLGwpO2sucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcyxwPVtdLHE9MDtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXBbcV09YXJndW1lbnRzW3FdO3RoaXMuZm9yRWFjaChmdW5jdGlvbihyKXtyLmFwcGx5KG4scCl9KTtyZXR1cm4gdGhpc307cmV0dXJuIGt9KGYoNTgpLlNldCk7ZC5DYWxsYmFja1NldD1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhuKXtmdW5jdGlvbiBwKHQpe3QvPTI1NTtyZXR1cm4uMDM5Mjg+PXQ/dC8xMi45MjprLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfXZhciBxPWwucmdiKG4pO249cChxLnIpO3ZhciByPXAocS5nKTtxPXAocS5iKTtyZXR1cm4uMjEyNipuKy43MTUyKnIrLjA3MjIqcX12YXIgbD1mKDEpLGs9TWF0aDtkLmNvbnRyYXN0PWZ1bmN0aW9uKG4scCl7bj1nKG4pKy4wNTtwPWcocCkrLjA1O3JldHVybiBuPnA/bi9wOnAvbn07ZC5saWdodGVuQ29sb3I9CmZ1bmN0aW9uKG4scCl7cmV0dXJuIGwuY29sb3IobikuYnJpZ2h0ZXIocCkucmdiKCkudG9TdHJpbmcoKX07ZC5jb2xvclRlc3Q9ZnVuY3Rpb24obixwKXtuLmNsYXNzZWQocCwhMCk7dmFyIHE9bi5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpO2lmKCJ0cmFuc3BhcmVudCI9PT1xKXJldHVybiBudWxsO3E9L1woKC4rKVwpLy5leGVjKHEpO2lmKCFxKXJldHVybiBudWxsO3E9cVsxXS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihyKXtyPStyO3ZhciB0PXIudG9TdHJpbmcoMTYpO3JldHVybiAxNj5yPyIwIit0OnR9KTtpZig0PT09cS5sZW5ndGgmJiIwMCI9PT1xWzNdKXJldHVybiBudWxsO3E9IiMiK3Euam9pbigiIik7bi5jbGFzc2VkKHAsITEpO3JldHVybiBxfX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMSksbD1mKDU3KTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaygpe3RoaXMuX2VudGl0aWVzPVtdO3RoaXMuX3J0cmVlPW5ldyBsLlJUcmVlO3RoaXMuX3RyZWU9Zy5xdWFkdHJlZSgpLngoZnVuY3Rpb24obil7cmV0dXJuIE1hdGguZmxvb3Iobi5wb3NpdGlvbi54KX0pLnkoZnVuY3Rpb24obil7cmV0dXJuIE1hdGguZmxvb3Iobi5wb3NpdGlvbi55KX0pfQprLnByb3RvdHlwZS5hZGRBbGw9ZnVuY3Rpb24obixwLHEpeyh2PXRoaXMuX2VudGl0aWVzKS5wdXNoLmFwcGx5KHYsbik7aWYodm9pZCAwIT09cSlmb3IocT1sLlJUcmVlQm91bmRzLmJvdW5kcyhxKSx2PTA7djxuLmxlbmd0aDt2Kyspe3ZhciByPW5bdl0sdD1sLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyhwKHIpKTtsLlJUcmVlQm91bmRzLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhxLHQpJiYodGhpcy5fdHJlZS5hZGQociksdGhpcy5fcnRyZWUuaW5zZXJ0KHQscikpfWVsc2UgZm9yKHRoaXMuX3RyZWUuYWRkQWxsKG4pLHY9MDt2PG4ubGVuZ3RoO3YrKylyPW5bdl0sdD1sLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyhwKHIpKSx0aGlzLl9ydHJlZS5pbnNlcnQodCxyKTt2YXIgdn07ay5wcm90b3R5cGUuZW50aXR5TmVhcmVzdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fdHJlZS5maW5kKG4ueCxuLnkpfTtrLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3QobC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMobikpfTsKay5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3J0cmVlLmludGVyc2VjdFgobC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMobikpfTtrLnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0WShsLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyhuKSl9O2sucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfTtyZXR1cm4ga30oKTtkLkVudGl0eVN0b3JlPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDU2KTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpeyJmdW5jdGlvbiI9PT10eXBlb2Ygd2luZG93Lk1hcD90aGlzLl9lczZNYXA9bmV3IHdpbmRvdy5NYXA6dGhpcy5fa2V5VmFsdWVQYWlycz1bXX1sLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oayxuKXtpZihnLmlzTmFOKGspKXRocm93IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTsKaWYobnVsbCE9dGhpcy5fZXM2TWFwKXJldHVybiB0aGlzLl9lczZNYXAuc2V0KGssbiksdGhpcztmb3IodmFyIHA9MDtwPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO3ArKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW3BdLmtleT09PWspcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnNbcF0udmFsdWU9bix0aGlzO3RoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OmssdmFsdWU6bn0pO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oayl7aWYobnVsbCE9dGhpcy5fZXM2TWFwKXJldHVybiB0aGlzLl9lczZNYXAuZ2V0KGspO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09aylyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZX07bC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGspe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmhhcyhrKTsKZm9yKHZhciBuPTA7bjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtuKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tuXS5rZXk9PT1rKXJldHVybiEwO3JldHVybiExfTtsLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGssbil7dmFyIHA9dGhpcztudWxsIT10aGlzLl9lczZNYXA/dGhpcy5fZXM2TWFwLmZvckVhY2goZnVuY3Rpb24ocSxyKXtyZXR1cm4gay5jYWxsKG4scSxyLHApfSxuKTp0aGlzLl9rZXlWYWx1ZVBhaXJzLmZvckVhY2goZnVuY3Rpb24ocSl7ay5jYWxsKG4scS52YWx1ZSxxLmtleSxwKX0pfTtsLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oayl7aWYobnVsbCE9dGhpcy5fZXM2TWFwKXJldHVybiB0aGlzLl9lczZNYXAuZGVsZXRlKGspO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09aylyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlycy5zcGxpY2UobiwxKSwhMDtyZXR1cm4hMX07CnJldHVybiBsfSgpO2QuTWFwPWN9LGZ1bmN0aW9uKGMsZCl7ZC5hc3NpZ249ZnVuY3Rpb24oKXtmb3IodmFyIGY9W10sZz0wO2c8YXJndW1lbnRzLmxlbmd0aDtnKyspZltnXT1hcmd1bWVudHNbZ107Zz17fTtmb3IodmFyIGw9MDtsPGYubGVuZ3RoO2wrKylmb3IodmFyIGs9ZltsXSxuPTAscD1PYmplY3Qua2V5cyhrKTtuPHAubGVuZ3RoO24rKyl7dmFyIHE9cFtuXTtnW3FdPWtbcV19cmV0dXJuIGd9fSxmdW5jdGlvbihjLGQpe2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsbCl7Zm9yKHZhciBrPU1hdGguY2VpbChnLmxlbmd0aC8yKSxuPTA7bjxrO24rKylsWzBdLmluc2VydChnW25dKTtmb3Iobj1rO248Zy5sZW5ndGg7bisrKWxbMV0uaW5zZXJ0KGdbbl0pfTtyZXR1cm4gZn0oKTtkLlNwbGl0U3RyYXRlZ3lUcml2aWFsPWM7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxsKXtnPQpnLnNsaWNlKCk7Zm9yKHRoaXMuY2hvb3NlRmlyc3RTcGxpdChnLGwpOzA8Zy5sZW5ndGg7KXRoaXMuYWRkTmV4dChnLGwpfTtmLnByb3RvdHlwZS5jaG9vc2VGaXJzdFNwbGl0PWZ1bmN0aW9uKGcsbCl7Zm9yKHZhciBrPTAsbj0wLHA9Zy5sZW5ndGgtMSxxPWcubGVuZ3RoLTEscj0xO3I8Zy5sZW5ndGgtMTtyKyspe3ZhciB0PWdbcl07dC5ib3VuZHMueGw+Z1twXS5ib3VuZHMueGw/cD1yOnQuYm91bmRzLnhoPGdba10uYm91bmRzLnhoJiYoaz1yKTt0LmJvdW5kcy55bD5nW3FdLmJvdW5kcy55bD9xPXI6dC5ib3VuZHMueWg8Z1tuXS5ib3VuZHMueWgmJihuPXIpfW49TWF0aC5hYnMoZ1trXS5ib3VuZHMueGgtZ1twXS5ib3VuZHMueGwpPk1hdGguYWJzKGdbbl0uYm91bmRzLnloLWdbcV0uYm91bmRzLnlsKT9bayxwXTpbbixxXTtrPW5bMF07bj1uWzFdO2s9PT1uJiYoaz0wLG49Zy5sZW5ndGgtMSk7bFswXS5pbnNlcnQoZy5zcGxpY2UoTWF0aC5tYXgoayxuKSwxKVswXSk7bFsxXS5pbnNlcnQoZy5zcGxpY2UoTWF0aC5taW4oaywKbiksMSlbMF0pfTtmLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKGcsbCl7Zm9yKHZhciBrPW51bGwsbj1udWxsLHA9bnVsbCxxPTA7cTxnLmxlbmd0aDtxKyspe3ZhciByPWdbcV0sdD1sWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uoci5ib3VuZHMpO3I9bFsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHIuYm91bmRzKTtpZih0PG58fG51bGw9PWspaz1xLG49dCxwPWxbMF07cjxuJiYoaz1xLG49cixwPWxbMV0pfXAuaW5zZXJ0KGcuc3BsaWNlKGssMSlbMF0pfTtyZXR1cm4gZn0oKTtkLlNwbGl0U3RyYXRlZ3lMaW5lYXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcocCl7cmV0dXJuIFN0cmluZyhwKX12YXIgbD1mKDEpLGs9ZigwKTtjPWYoMTApO2QuSVN0YWNraW5nT3JkZXI9Yy5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgbj1NYXRoO2Quc3RhY2s9ZnVuY3Rpb24ocCxxLHIsdCl7dm9pZCAwPT09dCYmKHQ9ImJvdHRvbXVwIik7dmFyIHY9bC5tYXAoKSx5PQpsLm1hcCgpLHo9bmV3IGsuTWFwOyJ0b3Bkb3duIj09PXQmJihwPXAuc2xpY2UoKSxwLnJldmVyc2UoKSk7cC5mb3JFYWNoKGZ1bmN0aW9uKHgpe3ZhciBDPW5ldyBrLk1hcDt4LmRhdGEoKS5mb3JFYWNoKGZ1bmN0aW9uKEYsRCl7dmFyIEI9ZyhxKEYsRCx4KSksST0rcihGLEQseCksTz0wPD1JP3Y6eTtpZihPLmhhcyhCKSl7dmFyIFA9Ty5nZXQoQik7Ty5zZXQoQixQK0kpfWVsc2UgUD0wLE8uc2V0KEIsSSk7Qy5zZXQoQix7b2Zmc2V0OlAsdmFsdWU6SSxheGlzVmFsdWU6cShGLEQseCksb3JpZ2luYWxEYXR1bTpGLG9yaWdpbmFsRGF0YXNldDp4LG9yaWdpbmFsSW5kZXg6RH0pfSk7ei5zZXQoeCxDKX0pO3JldHVybiB6fTtkLnN0YWNrZWRFeHRlbnRzPWZ1bmN0aW9uKHApe3ZhciBxPW5ldyBrLk1hcCxyPW5ldyBrLk1hcDtwLmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHYseSl7dmFyIHo9ay5NYXRoLm1heChbdi5vZmZzZXQrdi52YWx1ZSx2Lm9mZnNldF0sCnYub2Zmc2V0KSx4PWsuTWF0aC5taW4oW3Yub2Zmc2V0K3YudmFsdWUsdi5vZmZzZXRdLHYub2Zmc2V0KSxDPXYuYXhpc1ZhbHVlO3EuaGFzKHkpP3EuZ2V0KHkpLmV4dGVudDx6JiZxLnNldCh5LHtleHRlbnQ6eixheGlzVmFsdWU6QyxzdGFja2VkRGF0dW06dn0pOnEuc2V0KHkse2V4dGVudDp6LGF4aXNWYWx1ZTpDLHN0YWNrZWREYXR1bTp2fSk7ci5oYXMoeSk/ci5nZXQoeSkuZXh0ZW50PngmJnIuc2V0KHkse2V4dGVudDp4LGF4aXNWYWx1ZTpDLHN0YWNrZWREYXR1bTp2fSk6ci5zZXQoeSx7ZXh0ZW50OngsYXhpc1ZhbHVlOkMsc3RhY2tlZERhdHVtOnZ9KX0pfSk7cmV0dXJue21heGltdW1FeHRlbnRzOnEsbWluaW11bUV4dGVudHM6cn19O2Quc3RhY2tlZEV4dGVudD1mdW5jdGlvbihwLHEscil7dmFyIHQ9W107cC5mb3JFYWNoKGZ1bmN0aW9uKHkseil7ei5kYXRhKCkuZm9yRWFjaChmdW5jdGlvbih4LEMpe2lmKG51bGw9PXJ8fHIoeCxDLHopKXg9eS5nZXQoZyhxKHgsQyx6KSkpLAp0LnB1c2goeC52YWx1ZSt4Lm9mZnNldCl9KX0pO3A9ay5NYXRoLm1heCh0LDApO3ZhciB2PWsuTWF0aC5taW4odCwwKTtyZXR1cm5bbi5taW4odiwwKSxuLm1heCgwLHApXX07ZC5ub3JtYWxpemVLZXk9Z30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMCk7ZC5nZXRUcmFuc2xhdG9yPWZ1bmN0aW9uKGspe2s9ay5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCk7dmFyIG49ay5fX1Bsb3R0YWJsZV9DbGllbnRUcmFuc2xhdG9yO251bGw9PW4mJihuPW5ldyBsKGspLGsuX19QbG90dGFibGVfQ2xpZW50VHJhbnNsYXRvcj1uKTtyZXR1cm4gbn07dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKG4pe3RoaXMuX3Jvb3RFbGVtZW50PW59ay5wcm90b3R5cGUuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKG4scCl7bj17eDpuLHk6cH07cD1nLk1hdGguZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybSh0aGlzLl9yb290RWxlbWVudCk7cmV0dXJuIG51bGw9PXA/bjpnLk1hdGguYXBwbHlUcmFuc2Zvcm0ocCwKbil9O2suaXNFdmVudEluc2lkZT1mdW5jdGlvbihuLHApe3JldHVybiBnLkRPTS5jb250YWlucyhuLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxwLnRhcmdldCl9O3JldHVybiBrfSgpO2QuVHJhbnNsYXRvcj1sfSxmdW5jdGlvbihjLGQsZil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnPWYoMTI0KTtmLmQoZCwiZWFzZUxpbmVhciIsZnVuY3Rpb24oKXtyZXR1cm4gZy5hfSk7dmFyIGw9ZigxMjYpO2YuZChkLCJlYXNlUXVhZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5hfSk7Zi5kKGQsImVhc2VRdWFkSW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYn0pO2YuZChkLCJlYXNlUXVhZE91dCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5jfSk7Zi5kKGQsImVhc2VRdWFkSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pO3ZhciBrPWYoMTIxKTtmLmQoZCwiZWFzZUN1YmljIixmdW5jdGlvbigpe3JldHVybiBrLmF9KTtmLmQoZCwiZWFzZUN1YmljSW4iLApmdW5jdGlvbigpe3JldHVybiBrLmJ9KTtmLmQoZCwiZWFzZUN1YmljT3V0IixmdW5jdGlvbigpe3JldHVybiBrLmN9KTtmLmQoZCwiZWFzZUN1YmljSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGsuYX0pO3ZhciBuPWYoMTI1KTtmLmQoZCwiZWFzZVBvbHkiLGZ1bmN0aW9uKCl7cmV0dXJuIG4uYX0pO2YuZChkLCJlYXNlUG9seUluIixmdW5jdGlvbigpe3JldHVybiBuLmJ9KTtmLmQoZCwiZWFzZVBvbHlPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY30pO2YuZChkLCJlYXNlUG9seUluT3V0IixmdW5jdGlvbigpe3JldHVybiBuLmF9KTt2YXIgcD1mKDEyNyk7Zi5kKGQsImVhc2VTaW4iLGZ1bmN0aW9uKCl7cmV0dXJuIHAuYX0pO2YuZChkLCJlYXNlU2luSW4iLGZ1bmN0aW9uKCl7cmV0dXJuIHAuYn0pO2YuZChkLCJlYXNlU2luT3V0IixmdW5jdGlvbigpe3JldHVybiBwLmN9KTtmLmQoZCwiZWFzZVNpbkluT3V0IixmdW5jdGlvbigpe3JldHVybiBwLmF9KTt2YXIgcT1mKDEyMyk7Zi5kKGQsCiJlYXNlRXhwIixmdW5jdGlvbigpe3JldHVybiBxLmF9KTtmLmQoZCwiZWFzZUV4cEluIixmdW5jdGlvbigpe3JldHVybiBxLmJ9KTtmLmQoZCwiZWFzZUV4cE91dCIsZnVuY3Rpb24oKXtyZXR1cm4gcS5jfSk7Zi5kKGQsImVhc2VFeHBJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gcS5hfSk7dmFyIHI9ZigxMjApO2YuZChkLCJlYXNlQ2lyY2xlIixmdW5jdGlvbigpe3JldHVybiByLmF9KTtmLmQoZCwiZWFzZUNpcmNsZUluIixmdW5jdGlvbigpe3JldHVybiByLmJ9KTtmLmQoZCwiZWFzZUNpcmNsZU91dCIsZnVuY3Rpb24oKXtyZXR1cm4gci5jfSk7Zi5kKGQsImVhc2VDaXJjbGVJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7dmFyIHQ9ZigxMTkpO2YuZChkLCJlYXNlQm91bmNlIixmdW5jdGlvbigpe3JldHVybiB0LmF9KTtmLmQoZCwiZWFzZUJvdW5jZUluIixmdW5jdGlvbigpe3JldHVybiB0LmJ9KTtmLmQoZCwiZWFzZUJvdW5jZU91dCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5hfSk7CmYuZChkLCJlYXNlQm91bmNlSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuY30pO3ZhciB2PWYoMTE4KTtmLmQoZCwiZWFzZUJhY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHYuYX0pO2YuZChkLCJlYXNlQmFja0luIixmdW5jdGlvbigpe3JldHVybiB2LmJ9KTtmLmQoZCwiZWFzZUJhY2tPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHYuY30pO2YuZChkLCJlYXNlQmFja0luT3V0IixmdW5jdGlvbigpe3JldHVybiB2LmF9KTt2YXIgeT1mKDEyMik7Zi5kKGQsImVhc2VFbGFzdGljIixmdW5jdGlvbigpe3JldHVybiB5LmF9KTtmLmQoZCwiZWFzZUVsYXN0aWNJbiIsZnVuY3Rpb24oKXtyZXR1cm4geS5ifSk7Zi5kKGQsImVhc2VFbGFzdGljT3V0IixmdW5jdGlvbigpe3JldHVybiB5LmF9KTtmLmQoZCwiZWFzZUVsYXN0aWNJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4geS5jfSl9LGZ1bmN0aW9uKGMsZCxmKXtmLmQoZCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO2YuZChkLCJjIixmdW5jdGlvbigpe3JldHVybiBsfSk7CmYuZChkLCJhIixmdW5jdGlvbigpe3JldHVybiBrfSk7dmFyIGc9ZnVuY3Rpb24gcShwKXtmdW5jdGlvbiByKHQpe3JldHVybiB0KnQqKChwKzEpKnQtcCl9cD0rcDtyLm92ZXJzaG9vdD1xO3JldHVybiByfSgxLjcwMTU4KSxsPWZ1bmN0aW9uIHIocSl7ZnVuY3Rpb24gdCh2KXtyZXR1cm4tLXYqdiooKHErMSkqditxKSsxfXE9K3E7dC5vdmVyc2hvb3Q9cjtyZXR1cm4gdH0oMS43MDE1OCksaz1mdW5jdGlvbiB0KHIpe2Z1bmN0aW9uIHYoeSl7cmV0dXJuKDE+KHkqPTIpP3kqeSooKHIrMSkqeS1yKTooeS09MikqeSooKHIrMSkqeStyKSsyKS8yfXI9K3I7di5vdmVyc2hvb3Q9dDtyZXR1cm4gdn0oMS43MDE1OCl9LGZ1bmN0aW9uKGMsZCl7ZnVuY3Rpb24gZih6KXtyZXR1cm4oej0reik8Zz95Knoqejp6PGs/eSooei09bCkqeituOno8cT95Kih6LT1wKSp6K3I6eSooei09dCkqeit2fWQuYj1mdW5jdGlvbih6KXtyZXR1cm4gMS1mKDEteil9O2QuYT1mO2QuYz1mdW5jdGlvbih6KXtyZXR1cm4oMT49Cih6Kj0yKT8xLWYoMS16KTpmKHotMSkrMSkvMn07dmFyIGc9NC8xMSxsPTYvMTEsaz04LzExLG49Ljc1LHA9OS8xMSxxPTEwLzExLHI9LjkzNzUsdD0yMS8yMix2PS45ODQzNzUseT0xL2cvZ30sZnVuY3Rpb24oYyxkKXtkLmI9ZnVuY3Rpb24oZil7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZipmKX07ZC5jPWZ1bmN0aW9uKGYpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1mKmYpfTtkLmE9ZnVuY3Rpb24oZil7cmV0dXJuKDE+PShmKj0yKT8xLU1hdGguc3FydCgxLWYqZik6TWF0aC5zcXJ0KDEtKGYtPTIpKmYpKzEpLzJ9fSxmdW5jdGlvbihjLGQpe2QuYj1mdW5jdGlvbihmKXtyZXR1cm4gZipmKmZ9O2QuYz1mdW5jdGlvbihmKXtyZXR1cm4tLWYqZipmKzF9O2QuYT1mdW5jdGlvbihmKXtyZXR1cm4oMT49KGYqPTIpP2YqZipmOihmLT0yKSpmKmYrMikvMn19LGZ1bmN0aW9uKGMsZCxmKXtmLmQoZCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO2YuZChkLCJhIixmdW5jdGlvbigpe3JldHVybiBrfSk7CmYuZChkLCJjIixmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIGc9MipNYXRoLlBJLGw9ZnVuY3Rpb24gdChxLHIpe2Z1bmN0aW9uIHYoeil7cmV0dXJuIHEqTWF0aC5wb3coMiwxMCotLXopKk1hdGguc2luKCh5LXopL3IpfXZhciB5PU1hdGguYXNpbigxLyhxPU1hdGgubWF4KDEscSkpKSooci89Zyk7di5hbXBsaXR1ZGU9ZnVuY3Rpb24oeil7cmV0dXJuIHQoeixyKmcpfTt2LnBlcmlvZD1mdW5jdGlvbih6KXtyZXR1cm4gdChxLHopfTtyZXR1cm4gdn0oMSwuMyksaz1mdW5jdGlvbiB2KHIsdCl7ZnVuY3Rpb24geSh4KXtyZXR1cm4gMS1yKk1hdGgucG93KDIsLTEwKih4PSt4KSkqTWF0aC5zaW4oKHgreikvdCl9dmFyIHo9TWF0aC5hc2luKDEvKHI9TWF0aC5tYXgoMSxyKSkpKih0Lz1nKTt5LmFtcGxpdHVkZT1mdW5jdGlvbih4KXtyZXR1cm4gdih4LHQqZyl9O3kucGVyaW9kPWZ1bmN0aW9uKHgpe3JldHVybiB2KHIseCl9O3JldHVybiB5fSgxLC4zKSxuPWZ1bmN0aW9uIHkodCx2KXtmdW5jdGlvbiB6KEMpe3JldHVybigwPgooQz0yKkMtMSk/dCpNYXRoLnBvdygyLDEwKkMpKk1hdGguc2luKCh4LUMpL3YpOjItdCpNYXRoLnBvdygyLC0xMCpDKSpNYXRoLnNpbigoeCtDKS92KSkvMn12YXIgeD1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHYvPWcpO3ouYW1wbGl0dWRlPWZ1bmN0aW9uKEMpe3JldHVybiB5KEMsdipnKX07ei5wZXJpb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHkodCxDKX07cmV0dXJuIHp9KDEsLjMpfSxmdW5jdGlvbihjLGQpe2QuYj1mdW5jdGlvbihmKXtyZXR1cm4gTWF0aC5wb3coMiwxMCpmLTEwKX07ZC5jPWZ1bmN0aW9uKGYpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmYpfTtkLmE9ZnVuY3Rpb24oZil7cmV0dXJuKDE+PShmKj0yKT9NYXRoLnBvdygyLDEwKmYtMTApOjItTWF0aC5wb3coMiwxMC0xMCpmKSkvMn19LGZ1bmN0aW9uKGMsZCl7ZC5hPWZ1bmN0aW9uKGYpe3JldHVybitmfX0sZnVuY3Rpb24oYyxkLGYpe2YuZChkLCJiIixmdW5jdGlvbigpe3JldHVybiBnfSk7Zi5kKGQsCiJjIixmdW5jdGlvbigpe3JldHVybiBsfSk7Zi5kKGQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KTt2YXIgZz1mdW5jdGlvbiBxKHApe2Z1bmN0aW9uIHIodCl7cmV0dXJuIE1hdGgucG93KHQscCl9cD0rcDtyLmV4cG9uZW50PXE7cmV0dXJuIHJ9KDMpLGw9ZnVuY3Rpb24gcihxKXtmdW5jdGlvbiB0KHYpe3JldHVybiAxLU1hdGgucG93KDEtdixxKX1xPStxO3QuZXhwb25lbnQ9cjtyZXR1cm4gdH0oMyksaz1mdW5jdGlvbiB0KHIpe2Z1bmN0aW9uIHYoeSl7cmV0dXJuKDE+PSh5Kj0yKT9NYXRoLnBvdyh5LHIpOjItTWF0aC5wb3coMi15LHIpKS8yfXI9K3I7di5leHBvbmVudD10O3JldHVybiB2fSgzKX0sZnVuY3Rpb24oYyxkKXtkLmI9ZnVuY3Rpb24oZil7cmV0dXJuIGYqZn07ZC5jPWZ1bmN0aW9uKGYpe3JldHVybiBmKigyLWYpfTtkLmE9ZnVuY3Rpb24oZil7cmV0dXJuKDE+PShmKj0yKT9mKmY6LS1mKigyLWYpKzEpLzJ9fSxmdW5jdGlvbihjLGQpe2QuYj1mdW5jdGlvbihsKXtyZXR1cm4gMS0KTWF0aC5jb3MobCpnKX07ZC5jPWZ1bmN0aW9uKGwpe3JldHVybiBNYXRoLnNpbihsKmcpfTtkLmE9ZnVuY3Rpb24obCl7cmV0dXJuKDEtTWF0aC5jb3MoZipsKSkvMn07dmFyIGY9TWF0aC5QSSxnPWYvMn0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoayl7cmV0dXJuITA9PT1sKGspJiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChrKX12YXIgbD1mKDEyOSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGspe2lmKCExPT09ZyhrKSlyZXR1cm4hMTtrPWsuY29uc3RydWN0b3I7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBrKXJldHVybiExO2s9ay5wcm90b3R5cGU7cmV0dXJuITE9PT1nKGspfHwhMT09PWsuaGFzT3duUHJvcGVydHkoImlzUHJvdG90eXBlT2YiKT8hMTohMH19LGZ1bmN0aW9uKGMpe2MuZXhwb3J0cz1mdW5jdGlvbihkKXtyZXR1cm4gbnVsbCE9ZCYmIm9iamVjdCI9PT10eXBlb2YgZCYmITE9PT1BcnJheS5pc0FycmF5KGQpfX0sZnVuY3Rpb24oYywKZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyxsLGspe3ZvaWQgMD09PWwmJihsPTEwKTt2b2lkIDA9PT1rJiYoaz17fSk7dmFyIG49dGhpczt0aGlzLmN0eD1nO3RoaXMubGluZUhlaWdodD1sO3RoaXMuc3R5bGU9azt0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHApe24uY3R4LmZvbnQ9bi5zdHlsZS5mb250O3JldHVybnt3aWR0aDpuLmN0eC5tZWFzdXJlVGV4dChwKS53aWR0aCxoZWlnaHQ6bi5saW5lSGVpZ2h0fX19O3RoaXMuY3JlYXRlUGVuPWZ1bmN0aW9uKHAscSxyKXtudWxsPT1yJiYocj1uLmN0eCk7ci5zYXZlKCk7ci50cmFuc2xhdGUocS50cmFuc2xhdGVbMF0scS50cmFuc2xhdGVbMV0pO3Iucm90YXRlKHEucm90YXRlKk1hdGguUEkvMTgwKTtyZXR1cm4gbi5jcmVhdGVDYW52YXNQZW4ocil9O3ZvaWQgMD09PXRoaXMuc3R5bGUuZmlsbCYmKHRoaXMuc3R5bGUuZmlsbD0iIzQ0NCIpfWYucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbihnKXt2YXIgbD0KdGhpcztyZXR1cm57ZGVzdHJveTpmdW5jdGlvbigpe2cucmVzdG9yZSgpfSx3cml0ZTpmdW5jdGlvbihrLG4scCxxKXtnLnRleHRBbGlnbj1uO251bGwhPWwuc3R5bGUuZm9udCYmKGcuZm9udD1sLnN0eWxlLmZvbnQpO251bGwhPWwuc3R5bGUuZmlsbCYmKGcuZmlsbFN0eWxlPWwuc3R5bGUuZmlsbCxnLmZpbGxUZXh0KGsscCxxKSk7bnVsbCE9bC5zdHlsZS5zdHJva2UmJihnLnN0cm9rZVN0eWxlPWwuc3R5bGUuZmlsbCxnLnN0cm9rZVRleHQoayxwLHEpKX19fTtyZXR1cm4gZn0oKTtkLkNhbnZhc0NvbnRleHQ9Y30sZnVuY3Rpb24oYyxkKXt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGcoKXt9Zy5hcHBlbmQ9ZnVuY3Rpb24obCxrKXtmb3IodmFyIG49W10scD0yO3A8YXJndW1lbnRzLmxlbmd0aDtwKyspbltwLTJdPWFyZ3VtZW50c1twXTtuPWcuY3JlYXRlLmFwcGx5KGcsW2tdLmNvbmNhdChuKSk7bC5hcHBlbmRDaGlsZChuKTtyZXR1cm4gbn07Zy5jcmVhdGU9ZnVuY3Rpb24obCl7Zm9yKHZhciBrPQpbXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylrW24tMV09YXJndW1lbnRzW25dO249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGcuU1ZHX05TLGwpO2cuYWRkQ2xhc3Nlcy5hcHBseShnLFtuXS5jb25jYXQoaykpO3JldHVybiBufTtnLmFkZENsYXNzZXM9ZnVuY3Rpb24obCl7Zm9yKHZhciBrPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWtbbi0xXT1hcmd1bWVudHNbbl07az1rLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gbnVsbCE9cH0pO251bGwhPWwuY2xhc3NMaXN0P2suZm9yRWFjaChmdW5jdGlvbihwKXtsLmNsYXNzTGlzdC5hZGQocCl9KTpsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGsuam9pbigiICIpKX07Zy5nZXREaW1lbnNpb25zPWZ1bmN0aW9uKGwpe2lmKGwuZ2V0QkJveCl0cnl7dmFyIGs9bC5nZXRCQm94KCk7cmV0dXJue3dpZHRoOmsud2lkdGgsaGVpZ2h0OmsuaGVpZ2h0fX1jYXRjaChuKXt9cmV0dXJue2hlaWdodDowLHdpZHRoOjB9fTtyZXR1cm4gZ30oKTsKZi5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtkLlN2Z1V0aWxzPWY7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGcobCxrLG4pe3ZvaWQgMD09PW4mJihuPSExKTt2YXIgcD10aGlzO3RoaXMuZWxlbWVudD1sO3RoaXMuY2xhc3NOYW1lPWs7dGhpcy5hZGRUaXRsZUVsZW1lbnQ9bjt0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7dmFyIHE9cC5nZXRUZXh0RWxlbWVudHMocC5lbGVtZW50KSxyPXEucGFyZW50RWxlbWVudCx0PXEuY29udGFpbmVyRWxlbWVudCx2PXEudGV4dEVsZW1lbnQ7cmV0dXJuIGZ1bmN0aW9uKHkpe3IuYXBwZW5kQ2hpbGQodCk7di50ZXh0Q29udGVudD15O3k9Zi5nZXREaW1lbnNpb25zKHYpO3IucmVtb3ZlQ2hpbGQodCk7cmV0dXJuIHl9fTt0aGlzLmNyZWF0ZVBlbj1mdW5jdGlvbihxLHIsdCl7bnVsbD09dCYmKHQ9cC5lbGVtZW50KTt0PWYuYXBwZW5kKHQsImciLCJ0ZXh0LWNvbnRhaW5lciIscC5jbGFzc05hbWUpO3AuYWRkVGl0bGVFbGVtZW50JiYKKGYuYXBwZW5kKHQsInRpdGxlIikudGV4dENvbnRlbnQ9cSx0LnNldEF0dHJpYnV0ZSgidGl0bGUiLHEpKTtxPWYuYXBwZW5kKHQsImciLCJ0ZXh0LWFyZWEiKTtxLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrci50cmFuc2xhdGVbMF0rIiwiK3IudHJhbnNsYXRlWzFdKyIpcm90YXRlKCIrKHIucm90YXRlKyIpIikpO3JldHVybiBwLmNyZWF0ZVN2Z0xpbmVQZW4ocSl9fWcucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbihsKXt0aGlzLmFkZFRpdGxlRWxlbWVudD1sfTtnLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKGwpe3JldHVybnt3cml0ZTpmdW5jdGlvbihrLG4scCxxKXt2YXIgcj1mLmFwcGVuZChsLCJ0ZXh0IiwidGV4dC1saW5lIik7ci50ZXh0Q29udGVudD1rO3Iuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsbik7ci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3ArIiwiK3ErIikiKTtyLnNldEF0dHJpYnV0ZSgieSIsCiItMC4yNWVtIil9fX07Zy5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKGwpe2lmKCJ0ZXh0Ij09PWwudGFnTmFtZSl7dmFyIGs9bC5wYXJlbnRFbGVtZW50O251bGw9PWsmJihrPWwucGFyZW50Tm9kZSk7ay5yZW1vdmVDaGlsZChsKTtyZXR1cm57Y29udGFpbmVyRWxlbWVudDpsLHBhcmVudEVsZW1lbnQ6ayx0ZXh0RWxlbWVudDpsfX12YXIgbj1sLnF1ZXJ5U2VsZWN0b3IoInRleHQiKTtpZihudWxsIT1uKXJldHVybiBrPWwucGFyZW50RWxlbWVudCxudWxsPT1rJiYoaz1sLnBhcmVudE5vZGUpLGsucmVtb3ZlQ2hpbGQobCkse2NvbnRhaW5lckVsZW1lbnQ6bCxwYXJlbnRFbGVtZW50OmssdGV4dEVsZW1lbnQ6bn07az1mLmNyZWF0ZSgidGV4dCIsdGhpcy5jbGFzc05hbWUpO3JldHVybntjb250YWluZXJFbGVtZW50OmsscGFyZW50RWxlbWVudDpsLHRleHRFbGVtZW50Omt9fTtyZXR1cm4gZ30oKTtkLlN2Z0NvbnRleHQ9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPQp0aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obixwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihuW3JdPXBbcl0pO24ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDIxKSxrPWYoMzYpO2M9ZnVuY3Rpb24obil7ZnVuY3Rpb24gcChxKXt2YXIgcj1uLmNhbGwodGhpcyxxKXx8dGhpcztyLmRpbUNhY2hlPW5ldyBsLkNhY2hlKGZ1bmN0aW9uKHQpe3JldHVybiByLl9tZWFzdXJlTm90RnJvbUNhY2hlKHQpfSk7cmV0dXJuIHJ9ZyhwLG4pO3AucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHEpe3JldHVybiBuLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxxKX07cC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihxKXt2b2lkIDA9PT1xJiYocT1rLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpOwpyZXR1cm4gdGhpcy5kaW1DYWNoZS5nZXQocSl9O3AucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5kaW1DYWNoZS5jbGVhcigpO24ucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyl9O3JldHVybiBwfShmKDYwKS5DYWNoZUNoYXJhY3Rlck1lYXN1cmVyKTtkLkNhY2hlTWVhc3VyZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoNTkpLGw9Zig2Miksaz1mKDY0KSxuPWYoNjYpO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBwKHEpe3RoaXMuY29udGV4dD1xO3RoaXMubWVhc3VyZXI9bmV3IGwuQ2FjaGVNZWFzdXJlcih0aGlzLmNvbnRleHQpO3RoaXMud3JhcHBlcj1uZXcgay5XcmFwcGVyO3RoaXMud3JpdGVyPW5ldyBuLldyaXRlcih0aGlzLm1lYXN1cmVyLHRoaXMuY29udGV4dCx0aGlzLndyYXBwZXIpfXAuc3ZnPWZ1bmN0aW9uKHEscix0KXtyZXR1cm4gbmV3IHAobmV3IGcuU3ZnQ29udGV4dChxLHIsdCkpfTtwLmNhbnZhcz1mdW5jdGlvbihxLHIsdCl7cmV0dXJuIG5ldyBwKG5ldyBnLkNhbnZhc0NvbnRleHQocSwKcix0KSl9O3AucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEscix0LHYseSl7dGhpcy53cml0ZXIud3JpdGUocSxyLHQsdix5KX07cC5wcm90b3R5cGUuY2xlYXJNZWFzdXJlckNhY2hlPWZ1bmN0aW9uKCl7dGhpcy5tZWFzdXJlci5yZXNldCgpfTtyZXR1cm4gcH0oKTtkLlR5cGVzZXR0ZXI9Y30sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihnKXt0aGlzLmNhY2hlPXt9O3RoaXMuY29tcHV0ZT1nfWYucHJvdG90eXBlLmdldD1mdW5jdGlvbihnKXt0aGlzLmNhY2hlLmhhc093blByb3BlcnR5KGcpfHwodGhpcy5jYWNoZVtnXT10aGlzLmNvbXB1dGUoZykpO3JldHVybiB0aGlzLmNhY2hlW2ddfTtmLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY2FjaGU9e307cmV0dXJuIHRoaXN9O3JldHVybiBmfSgpO2QuQ2FjaGU9Y30sZnVuY3Rpb24oYyxkKXtkLk1ldGhvZHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYuYXJyYXlFcT1mdW5jdGlvbihnLGwpe2lmKG51bGw9PQpnfHxudWxsPT1sKXJldHVybiBnPT09bDtpZihnLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaz0wO2s8Zy5sZW5ndGg7aysrKWlmKGdba10hPT1sW2tdKXJldHVybiExO3JldHVybiEwfTtmLm9iakVxPWZ1bmN0aW9uKGcsbCl7aWYobnVsbD09Z3x8bnVsbD09bClyZXR1cm4gZz09PWw7dmFyIGs9T2JqZWN0LmtleXMoZykuc29ydCgpLG49T2JqZWN0LmtleXMobCkuc29ydCgpLHA9ay5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGdbcl19KSxxPW4ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBsW3JdfSk7cmV0dXJuIGYuYXJyYXlFcShrLG4pJiZmLmFycmF5RXEocCxxKX07Zi5zdHJpY3RFcT1mdW5jdGlvbihnLGwpe3JldHVybiBnPT09bH07Zi5kZWZhdWx0cz1mdW5jdGlvbihnKXtmb3IodmFyIGw9W10saz0xO2s8YXJndW1lbnRzLmxlbmd0aDtrKyspbFtrLTFdPWFyZ3VtZW50c1trXTtpZihudWxsPT1nKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpOwp2YXIgbj1PYmplY3QoZyk7bC5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKG51bGwhPXApZm9yKHZhciBxIGluIHApT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHAscSkmJihuW3FdPXBbcV0pfSk7cmV0dXJuIG59O3JldHVybiBmfSgpfSxmdW5jdGlvbihjLGQpe2QuU3RyaW5nTWV0aG9kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt9Zi5jb21iaW5lV2hpdGVzcGFjZT1mdW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKC9bIFx0XSsvZywiICIpfTtmLmlzTm90RW1wdHlTdHJpbmc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcmJiIiIT09Zy50cmltKCl9O2YudHJpbVN0YXJ0PWZ1bmN0aW9uKGcsbCl7aWYoIWcpcmV0dXJuIGc7Zz1nLnNwbGl0KCIiKTt2YXIgaz1sP2Z1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KGwpLnNvbWUoZi5pc05vdEVtcHR5U3RyaW5nKX06Zi5pc05vdEVtcHR5U3RyaW5nO3JldHVybiBnLnJlZHVjZShmdW5jdGlvbihuLHApe3JldHVybiBrKG4rcCk/Cm4rcDpufSwiIil9O2YudHJpbUVuZD1mdW5jdGlvbihnLGwpe2lmKCFnKXJldHVybiBnO2c9Zy5zcGxpdCgiIik7Zy5yZXZlcnNlKCk7Zz1mLnRyaW1TdGFydChnLmpvaW4oIiIpLGwpLnNwbGl0KCIiKTtnLnJldmVyc2UoKTtyZXR1cm4gZy5qb2luKCIiKX07cmV0dXJuIGZ9KCl9LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPS9cVy87dGhpcy5XaGl0ZXNwYWNlUmVnRXhwPS9ccy99Zi5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24oZyl7dmFyIGw9dGhpcztyZXR1cm4gZy5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKGssbil7cmV0dXJuIGsuc2xpY2UoMCwtMSkuY29uY2F0KGwuc2hvdWxkQ3JlYXRlTmV3VG9rZW4oa1trLmxlbmd0aC0xXSxuKSl9LFsiIl0pfTtmLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbihnLGwpe2lmKCFnKXJldHVybltsXTt2YXIgaz1nW2cubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChrKSYmCnRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KGwpP1tnK2xdOnRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KGspfHx0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChsKT9bZyxsXTp0aGlzLldvcmREaXZpZGVyUmVnRXhwLnRlc3Qoayl8fHRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChsKT9rPT09bD9bZytsXTpbZyxsXTpbZytsXX07cmV0dXJuIGZ9KCk7ZC5Ub2tlbml6ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobi5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG4pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9ZyhrLGwpO2sucHJvdG90eXBlLndyYXA9CmZ1bmN0aW9uKG4scCxxLHIpe2Z1bmN0aW9uIHQoRCl7cmV0dXJuIGwucHJvdG90eXBlLndyYXAuY2FsbCh2LG4scCxELHIpfXZhciB2PXRoaXM7dm9pZCAwPT09ciYmKHI9SW5maW5pdHkpO2lmKDE8bi5zcGxpdCgiXG4iKS5sZW5ndGgpdGhyb3cgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciB5PXQocSk7aWYoMj55Lm5vTGluZXMpcmV0dXJuIHk7Zm9yKHZhciB6PTAseD0wO3g8ay5OT19XUkFQX0lURVJBVElPTlMmJnE+ejsrK3gpe3ZhciBDPShxK3opLzIsRj10KEMpO3RoaXMuYXJlU2FtZVJlc3VsdHMoeSxGKT8ocT1DLHk9Rik6ej1DfXJldHVybiB5fTtrLnByb3RvdHlwZS5hcmVTYW1lUmVzdWx0cz1mdW5jdGlvbihuLHApe3JldHVybiBuLm5vTGluZXM9PT1wLm5vTGluZXMmJm4udHJ1bmNhdGVkVGV4dD09PXAudHJ1bmNhdGVkVGV4dH07cmV0dXJuIGt9KGYoNjUpLldyYXBwZXIpO2MuTk9fV1JBUF9JVEVSQVRJT05TPQo1O2QuU2luZ2xlTGluZVdyYXBwZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMjEpLGw9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhuLHAscSl7dGhpcy5fbWVhc3VyZXI9bjt0aGlzLl9wZW5GYWN0b3J5PXA7dGhpcy5fd3JhcHBlcj1xfWsucHJvdG90eXBlLm1lYXN1cmVyPWZ1bmN0aW9uKG4pe3RoaXMuX21lYXN1cmVyPW47cmV0dXJuIHRoaXN9O2sucHJvdG90eXBlLndyYXBwZXI9ZnVuY3Rpb24obil7dGhpcy5fd3JhcHBlcj1uO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5wZW5GYWN0b3J5PWZ1bmN0aW9uKG4pe3RoaXMuX3BlbkZhY3Rvcnk9bjtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obixwLHEscix0KXt2b2lkIDA9PT1yJiYocj17fSk7cj1nLk1ldGhvZHMuZGVmYXVsdHMoe30sbCxyKTtpZigtMT09PWsuU3VwcG9ydGVkUm90YXRpb24uaW5kZXhPZihyLnRleHRSb3RhdGlvbikpdGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIHJvdGF0aW9uIC0gIisKci50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitrLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKG51bGwhPXIudGV4dFNoZWFyJiYtODA+ci50ZXh0U2hlYXJ8fDgwPHIudGV4dFNoZWFyKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBzaGVhciBhbmdsZSAtICIrci50ZXh0U2hlYXIrIi4gTXVzdCBiZSBiZXR3ZWVuIC04MCBhbmQgODAiKTt2YXIgdj00NTxNYXRoLmFicyhNYXRoLmFicyhyLnRleHRSb3RhdGlvbiktOTApLHk9dj9wOnEsej12P3E6cCx4PXIudGV4dFNoZWFyLEM9eCpNYXRoLlBJLzE4MDt2PXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7dmFyIEY9dipNYXRoLnRhbihDKTt5PXkvTWF0aC5jb3MoQyktTWF0aC5hYnMoRik7dmFyIEQ9eipNYXRoLmNvcyhDKTt6PWcuU3RyaW5nTWV0aG9kcy5jb21iaW5lV2hpdGVzcGFjZShuKTt6PSh0aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcCh6LHRoaXMuX21lYXN1cmVyLAp5LEQpLndyYXBwZWRUZXh0OnopLnNwbGl0KCJcbiIpO0M9ay5YT2Zmc2V0RmFjdG9yW3IueEFsaWduXSp5Kk1hdGguc2luKEMpLWsuWU9mZnNldEZhY3RvcltyLnlBbGlnbl0qKEQtei5sZW5ndGgqdik7eD1yLnRleHRSb3RhdGlvbit4O3N3aXRjaChyLnRleHRSb3RhdGlvbil7Y2FzZSA5MDpwPVtwK0MsMF07YnJlYWs7Y2FzZSAtOTA6cD1bLUMscV07YnJlYWs7Y2FzZSAxODA6cD1bcCxxK0NdO2JyZWFrO2RlZmF1bHQ6cD1bMCwtQ119bj10aGlzLl9wZW5GYWN0b3J5LmNyZWF0ZVBlbihuLHt0cmFuc2xhdGU6cCxyb3RhdGU6eH0sdCk7dGhpcy53cml0ZUxpbmVzKHosbix5LHYsRixyLnhBbGlnbik7bnVsbCE9bi5kZXN0cm95JiZuLmRlc3Ryb3koKX07ay5wcm90b3R5cGUud3JpdGVMaW5lcz1mdW5jdGlvbihuLHAscSxyLHQsdil7bi5mb3JFYWNoKGZ1bmN0aW9uKHkseil7cC53cml0ZSh5LGsuQW5jaG9yQ29udmVydGVyW3ZdLCgwPHQ/KHorMSkqdDp6KnQpK3Eqay5YT2Zmc2V0RmFjdG9yW3ZdLAooeisxKSpyKX0pfTtyZXR1cm4ga30oKTtjLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2MuQW5jaG9yQ29udmVydGVyPXtjZW50ZXI6Im1pZGRsZSIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtjLlhPZmZzZXRGYWN0b3I9e2NlbnRlcjouNSxsZWZ0OjAscmlnaHQ6MX07Yy5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2QuV3JpdGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWYoNjkpO2M9Zig3KTtkLkFuaW1hdG9ycz1jO2M9Zig2Nyk7ZC5BeGVzPWM7Yz1mKDM3KTtkLkNvbXBvbmVudHM9YztjPWYoMjMpO2QuQ29uZmlncz1jO2M9Zig4KTtkLkZvcm1hdHRlcnM9YztjPWYoMzApO2QuUmVuZGVyQ29udHJvbGxlcj1jO2M9ZigzOSk7ZC5SZW5kZXJQb2xpY2llcz1jO2M9ZigzMSk7ZC5TeW1ib2xGYWN0b3JpZXM9YztjPWYoMTMpO2QuRGlzcGF0Y2hlcnM9CmM7Yz1mKDE0KTtkLkRyYXdlcnM9YztjPWYoMjUpO2QuSW50ZXJhY3Rpb25zPWM7Yz1mKDE5KTtkLlBsb3RzPWM7Yz1mKDMpO2QuU2NhbGVzPWM7Yz1mKDApO2QuVXRpbHM9YztnKGYoMjIpKTtjPWYoMjgpO2QuVGltZUludGVydmFsPWMuVGltZUludGVydmFsO2coZig0KSk7ZyhmKDI5KSk7ZyhmKDM4KSk7Yz1mKDY4KTtkLnZlcnNpb249Yy52ZXJzaW9uO2coZigyNCkpO2coZig2KSk7ZyhmKDE1KSk7ZyhmKDQwKSk7ZyhmKDE2KSk7ZyhmKDIpKTtnKGYoMTEpKTtnKGYoMTcpKX1dKX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3Z6LWNoYXJ0LWhlbHBlcnMvcGxvdHRhYmxlLWludGVyYWN0aW9ucy5qcwp2YXIgJG87CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKHApe2NvbnN0IHE9W107Zm9yKDtwJiZwIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KWlmKHEucHVzaChwKSxwLmFzc2lnbmVkU2xvdClwPXAuYXNzaWduZWRTbG90O2Vsc2UgaWYocC5wYXJlbnRFbGVtZW50KXA9cC5wYXJlbnRFbGVtZW50O2Vsc2V7Y29uc3Qgcj1wLnBhcmVudE5vZGU7cD1yIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yLmhvc3Q6ciE9PXA/cjpudWxsfXJldHVybiBxfWZ1bmN0aW9uIGQocCl7dmFyIHE9YyhwKTtwPWY7bGV0IHI9bnVsbDtmb3IoY29uc3QgdiBvZiBxKXtxPVBsb3R0YWJsZS5VdGlscy5ET00uZ2V0RWxlbWVudFRyYW5zZm9ybSh2KTtpZihudWxsIT1xKXt2YXIgdD12LmNsaWVudFdpZHRoLzI7Y29uc3QgeT12LmNsaWVudEhlaWdodC8yO3A9UGxvdHRhYmxlLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocCxbdCx5XSk7cD1QbG90dGFibGUuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChwLFBsb3R0YWJsZS5VdGlscy5NYXRoLmludmVydE1hdHJpeChxKSk7CnA9UGxvdHRhYmxlLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocCxbLXQsLXldKX1xPXYuc2Nyb2xsTGVmdDt0PXYuc2Nyb2xsVG9wO2lmKG51bGw9PT1yfHx2PT09cilxLT12Lm9mZnNldExlZnQrdi5jbGllbnRMZWZ0LHQtPXYub2Zmc2V0VG9wK3YuY2xpZW50VG9wLHI9di5vZmZzZXRQYXJlbnQ7cD1QbG90dGFibGUuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShwLFtxLHRdKX1yZXR1cm4gcH1jb25zdCBmPVsxLDAsMCwxLDAsMF07Y2xhc3MgZyBleHRlbmRzIFBsb3R0YWJsZS5VdGlscy5UcmFuc2xhdG9ye2NvbXB1dGVQb3NpdGlvbihwLHEpe3A9e3g6cCx5OnF9O3E9ZCh0aGlzLl9yb290RWxlbWVudCk7cmV0dXJuIG51bGw9PXE/cDpQbG90dGFibGUuVXRpbHMuTWF0aC5hcHBseVRyYW5zZm9ybShxLHApfX1jbGFzcyBsIGV4dGVuZHMgUGxvdHRhYmxlLkRpc3BhdGNoZXJzLk1vdXNle2NvbnN0cnVjdG9yKHApe3N1cGVyKHApO3RoaXMuX2V2ZW50VGFyZ2V0PXAucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpOwp0aGlzLl90cmFuc2xhdG9yPW5ldyBnKHAucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpKX1zdGF0aWMgZ2V0RGlzcGF0Y2hlcihwKXtjb25zdCBxPXAucm9vdCgpLnJvb3RFbGVtZW50KCk7bGV0IHI9cVtsLl9ESVNQQVRDSEVSX0tFWV07cnx8KHI9bmV3IGwocCkscVtsLl9ESVNQQVRDSEVSX0tFWV09cik7cmV0dXJuIHJ9fWNsYXNzIGsgZXh0ZW5kcyBQbG90dGFibGUuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IocCl7c3VwZXIocCk7dGhpcy5fZXZlbnRUYXJnZXQ9cC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCk7dGhpcy5fdHJhbnNsYXRvcj1uZXcgZyhwLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIocCl7Y29uc3QgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpO2xldCByPXFbay5fRElTUEFUQ0hFUl9LRVldO3J8fChyPW5ldyBrKHApLHFbay5fRElTUEFUQ0hFUl9LRVldPXIpO3JldHVybiByfX1jbGFzcyBuIGV4dGVuZHMgUGxvdHRhYmxlLkludGVyYWN0aW9ucy5Qb2ludGVye19hbmNob3IoKXt0aGlzLl9pc0FuY2hvcmVkPQohMDt0aGlzLl9tb3VzZURpc3BhdGNoZXI9bC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPWsuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayl9fWEuUG9pbnRlckludGVyYWN0aW9uPW59KSgkb3x8KCRvPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdnotY2hhcnQtaGVscGVycy92ei1jaGFydC1oZWxwZXJzLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKCl7bGV0IGw9bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyO2wudGlja0dlbmVyYXRvcigpO2xldCBrPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGwsImJvdHRvbSIpO2suZm9ybWF0dGVyKGEuc3RlcEZvcm1hdHRlcik7cmV0dXJue3NjYWxlOmwsYXhpczprLGFjY2Vzc29yOm49Pm4uc3RlcH19ZnVuY3Rpb24gZCgpe2xldCBsPW5ldyBQbG90dGFibGUuU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmwsYXhpczpuZXcgUGxvdHRhYmxlLkF4ZXMuVGltZShsLCJib3R0b20iKSxhY2Nlc3NvcjprPT5rLndhbGxfdGltZX19ZnVuY3Rpb24gZigpe2xldCBsPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6bCxheGlzOm5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGwsImJvdHRvbSIpLGFjY2Vzc29yOmEucmVsYXRpdmVBY2Nlc3Nvcn19YS5TWU1CT0xTX0xJU1Q9W3tjaGFyYWN0ZXI6Ilx1MjVmYyIsbWV0aG9kOlBsb3R0YWJsZS5TeW1ib2xGYWN0b3JpZXMuc3F1YXJlfSwKe2NoYXJhY3RlcjoiXHUyNWM2IixtZXRob2Q6UGxvdHRhYmxlLlN5bWJvbEZhY3Rvcmllcy5kaWFtb25kfSx7Y2hhcmFjdGVyOiJcdTI1YjIiLG1ldGhvZDpQbG90dGFibGUuU3ltYm9sRmFjdG9yaWVzLnRyaWFuZ2xlfSx7Y2hhcmFjdGVyOiJcdTI2MDUiLG1ldGhvZDpQbG90dGFibGUuU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxYSIsbWV0aG9kOlBsb3R0YWJsZS5TeW1ib2xGYWN0b3JpZXMuY3Jvc3N9XTtsZXQgZzsoZnVuY3Rpb24obCl7bC5TVEVQPSJzdGVwIjtsLlJFTEFUSVZFPSJyZWxhdGl2ZSI7bC5XQUxMX1RJTUU9IndhbGxfdGltZSJ9KShnPWEuWFR5cGV8fChhLlhUeXBlPXt9KSk7YS5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTj00O2EuU1RFUF9GT1JNQVRURVJfUFJFQ0lTSU9OPTQ7YS5ZX0FYSVNfRk9STUFUVEVSX1BSRUNJU0lPTj0zO2EuVE9PTFRJUF9ZX1BJWEVMX09GRlNFVD0yMDthLlRPT0xUSVBfQ0lSQ0xFX1NJWkU9NDthLk5BTl9TWU1CT0xfU0laRT0KNjthLm11bHRpc2NhbGVGb3JtYXR0ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGs9PntsZXQgbj1NYXRoLmFicyhrKTsxRS0xNT5uJiYobj0wKTtyZXR1cm4oMUU0PD1uP2QzLmZvcm1hdCgiLiIrbCsifmUiKTowPG4mJi4wMT5uP2QzLmZvcm1hdCgiLiIrbCsifmUiKTpkMy5mb3JtYXQoIi4iK2wrIn5nIikpKGspfX07YS5jb21wdXRlRG9tYWluPWZ1bmN0aW9uKGwsayl7bD1sLmZpbHRlcihxPT5pc0Zpbml0ZShxKSk7aWYoMD09PWwubGVuZ3RoKXJldHVyblstLjEsMS4xXTtrPyhsPV8uc29ydEJ5KGwpLGs9ZDMucXVhbnRpbGUobCwuMDUpLGw9ZDMucXVhbnRpbGUobCwuOTUpKTooaz1kMy5taW4obCksbD1kMy5tYXgobCkpO2xldCBuLHA9bC1rO249MD09PXA/MS4xKk1hdGguYWJzKGspKzEuMTouMipwO2s9WzA8PWsmJms8cD8tLjEqbDprLW4sbCtuXTtyZXR1cm4gaz1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihrKS5uaWNlKCkuZG9tYWluKCl9O2EuYWNjZXNzb3JpemU9ZnVuY3Rpb24obCl7cmV0dXJuIGs9PgprW2xdfTthLnN0ZXBGb3JtYXR0ZXI9ZDMuZm9ybWF0KGAuJHthLlNURVBfRk9STUFUVEVSX1BSRUNJU0lPTn1+c2ApO2Euc3RlcFg9YzthLnRpbWVGb3JtYXR0ZXI9UGxvdHRhYmxlLkZvcm1hdHRlcnMudGltZSgiJWEgJWIgJWUsICVIOiVNOiVTIik7YS53YWxsWD1kO2EucmVsYXRpdmVBY2Nlc3Nvcj0obCxrLG4pPT57aWYobnVsbCE9bC5yZWxhdGl2ZSlyZXR1cm4gbC5yZWxhdGl2ZTtrPW4uZGF0YSgpO3JldHVybigrbC53YWxsX3RpbWUtKDA8ay5sZW5ndGg/K2tbMF0ud2FsbF90aW1lOjApKS8zNkU1fTthLnJlbGF0aXZlRm9ybWF0dGVyPWw9PntsZXQgaz0iIixuPU1hdGguZmxvb3IobC8yNCk7bC09MjQqbjtuJiYoays9bisiZCAiKTtsZXQgcD1NYXRoLmZsb29yKGwpO2w9NjAqKGwtcCk7aWYocHx8bilrKz1wKyJoICI7bGV0IHE9TWF0aC5mbG9vcihsKTtsPTYwKihsLXEpO2lmKHF8fHB8fG4pays9cSsibSAiO3JldHVybiBrK01hdGguZmxvb3IobCkrInMifTthLnJlbGF0aXZlWD0KZjthLmdldFhDb21wb25lbnRzPWZ1bmN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIGcuU1RFUDpyZXR1cm4gYygpO2Nhc2UgZy5XQUxMX1RJTUU6cmV0dXJuIGQoKTtjYXNlIGcuUkVMQVRJVkU6cmV0dXJuIGYoKTtkZWZhdWx0OnRocm93IEVycm9yKCJpbnZhbGlkIHhUeXBlOiAiK2wpO319fSkoJG98fCgkbz17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3Z6LWNoYXJ0LWhlbHBlcnMvdnotY2hhcnQtdG9vbHRpcC5qcwp2YXIgYXA7CihmdW5jdGlvbihhKXtsZXQgYzsoZnVuY3Rpb24oZil7Zi5BVVRPPSJhdXRvIjtmLkJPVFRPTT0iYm90dG9tIjtmLlJJR0hUPSJyaWdodCJ9KShjPWEuVG9vbHRpcFBvc2l0aW9ufHwoYS5Ub29sdGlwUG9zaXRpb249e30pKTtjb25zdCBkPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX07UG9seW1lcih7aXM6InZ6LWNoYXJ0LXRvb2x0aXAiLF90ZW1wbGF0ZTpudWxsLHByb3BlcnRpZXM6e2NvbnRlbnRDb21wb25lbnROYW1lOlN0cmluZyxwb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6Yy5BVVRPfSxtaW5EaXN0RnJvbUVkZ2U6e3R5cGU6TnVtYmVyLHZhbHVlOjE1fX0scmVhZHkoKXt0aGlzLl90dW5uZWw9dGhpcy5fcmFmPXRoaXMuX3N0eWxlQ2FjaGU9bnVsbH0sYXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCk7dGhpcy5faGlkZU9uQmx1cj0KKCk9Pntkb2N1bWVudC5oaWRkZW4mJnRoaXMuaGlkZSgpfTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdGhpcy5faGlkZU9uQmx1cil9LGRldGFjaGVkKCl7dGhpcy5oaWRlKCk7dGhpcy5fcmVtb3ZlVHVubmVsKHRoaXMuX3R1bm5lbCk7dGhpcy5fdHVubmVsPW51bGw7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfSxjb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fSxoaWRlKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZik7dGhpcy5fc3R5bGVDYWNoZT1udWxsO3RoaXMuX3R1bm5lbC5zdHlsZS5vcGFjaXR5PTB9LHVwZGF0ZUFuZFBvc2l0aW9uKGYpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpO3RoaXMuX3JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9yZXBvc2l0aW9uSW1wbChmKX0pfSwKX3JlcG9zaXRpb25JbXBsKGYpe2NvbnN0IGc9dGhpcy5fdHVubmVsO2Y9Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBsPWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaz13aW5kb3cuaW5uZXJIZWlnaHQsbj1kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLHA9Zi50b3AscT1wK2YuaGVpZ2h0LHI9bC5oZWlnaHQrJG8uVE9PTFRJUF9ZX1BJWEVMX09GRlNFVDtsZXQgdD1udWxsLHY9TWF0aC5tYXgodGhpcy5taW5EaXN0RnJvbUVkZ2UsZi5sZWZ0KSx5PW51bGwsej1wO3RoaXMucG9zaXRpb249PWMuUklHSFQ/dj1mLnJpZ2h0Oih6PXErJG8uVE9PTFRJUF9ZX1BJWEVMX09GRlNFVCxuPHYrbC53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKHY9bnVsbCx5PXRoaXMubWluRGlzdEZyb21FZGdlKSk7dGhpcy5wb3NpdGlvbj09Yy5BVVRPJiYwPGYudG9wLXImJms8Zi50b3ArZi5oZWlnaHQrciYmKHo9bnVsbCx0PWstcCskby5UT09MVElQX1lfUElYRUxfT0ZGU0VUKTtmPXtvcGFjaXR5OjEsCmxlZnQ6dj9gJHt2fXB4YDpudWxsLHJpZ2h0Onk/YCR7eX1weGA6bnVsbCx0b3A6ej9gJHt6fXB4YDpudWxsLGJvdHRvbTp0P2Ake3R9cHhgOm51bGx9O18uaXNFcXVhbCh0aGlzLl9zdHlsZUNhY2hlLGYpfHwoT2JqZWN0LmFzc2lnbihnLnN0eWxlLGYpLHRoaXMuX3N0eWxlQ2FjaGU9Zil9LF9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7Y29uc3QgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY29udGVudENvbXBvbmVudE5hbWUpO09iamVjdC5hc3NpZ24oZi5zdHlsZSxkKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO3JldHVybiBmfSxfcmVtb3ZlVHVubmVsKGYpe2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZil9fSl9KShhcHx8KGFwPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdnotbGluZS1jaGFydC9kcmFnWm9vbUludGVyYWN0aW9uLmpzCnZhciBicDsKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBQbG90dGFibGUuQ29tcG9uZW50cy5TZWxlY3Rpb25Cb3hMYXllcntjb25zdHJ1Y3RvcihkLGYsZyl7c3VwZXIoKTt0aGlzLmVhc2VGbj1kMy5lYXNlQ3ViaWNJbk91dDt0aGlzLl9hbmltYXRpb25UaW1lPTc1MDt0aGlzLnhTY2FsZShkKTt0aGlzLnlTY2FsZShmKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb249bmV3IFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuRHJhZzt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uPW5ldyBQbG90dGFibGUuSW50ZXJhY3Rpb25zLkNsaWNrO3RoaXMuc2V0dXBDYWxsYmFja3MoKTt0aGlzLnVuem9vbU1ldGhvZD1nO3RoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20oKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSgpfSk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpfSl9aW50ZXJhY3Rpb25TdGFydChkKXt0aGlzLm9uU3RhcnQ9CmR9aW50ZXJhY3Rpb25FbmQoZCl7dGhpcy5vbkVuZD1kfWRyYWdJbnRlcmFjdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259c2V0dXBDYWxsYmFja3MoKXtsZXQgZD0hMTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoZj0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pO3RoaXMub25TdGFydCgpfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZygoZixnKT0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Z30pO3RoaXMuYm94VmlzaWJsZSghMCk7ZD0hMH0pO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoKGYsZyk9Pnt0aGlzLmJveFZpc2libGUoITEpO3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Z30pO2lmKGQpdGhpcy56b29tKCk7ZWxzZSB0aGlzLm9uRW5kKCk7ZD0hMX0pO3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24ub25Eb3VibGVDbGljayh0aGlzLnVuem9vbS5iaW5kKHRoaXMpKX1hbmltYXRpb25UaW1lKGQpe2lmKG51bGw9PQpkKXJldHVybiB0aGlzLl9hbmltYXRpb25UaW1lO2lmKDA+ZCl0aHJvdyBFcnJvcigiYW5pbWF0aW9uVGltZSBjYW5ub3QgYmUgbmVnYXRpdmUiKTt0aGlzLl9hbmltYXRpb25UaW1lPWQ7cmV0dXJuIHRoaXN9ZWFzZShkKXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGQpdGhyb3cgRXJyb3IoImVhc2UgZnVuY3Rpb24gbXVzdCBiZSBhIGZ1bmN0aW9uIik7MD09PWQoMCkmJjE9PT1kKDEpfHxQbG90dGFibGUuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKVx4M2RceDNkMCBceDI2XHgyNiBmKDEpXHgzZFx4M2QxLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKTt0aGlzLmVhc2VGbj1kO3JldHVybiB0aGlzfXpvb20oKXtsZXQgZD10aGlzLnhFeHRlbnQoKVswXS52YWx1ZU9mKCksZj10aGlzLnhFeHRlbnQoKVsxXS52YWx1ZU9mKCksZz10aGlzLnlFeHRlbnQoKVsxXS52YWx1ZU9mKCksbD10aGlzLnlFeHRlbnQoKVswXS52YWx1ZU9mKCk7CmQhPT1mJiZnIT09bCYmdGhpcy5pbnRlcnBvbGF0ZVpvb20oZCxmLGcsbCl9dW56b29tKCl7dmFyIGQ9dGhpcy54U2NhbGUoKTtkLl9kb21haW5NaW49bnVsbDtkLl9kb21haW5NYXg9bnVsbDtkPWQuX2dldEV4dGVudCgpO3RoaXMueFNjYWxlKCkuZG9tYWluKGQpO3RoaXMudW56b29tTWV0aG9kKCl9aXNab29taW5nKGQpe3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKCFkKTt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmVuYWJsZWQoIWQpfWludGVycG9sYXRlWm9vbShkLGYsZyxsKXtsZXQgaz10aGlzLnhTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxuPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLHA9dGhpcy55U2NhbGUoKS5kb21haW4oKVswXS52YWx1ZU9mKCkscT10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzFdLnZhbHVlT2YoKSxyPXRoaXMuZWFzZUZuLHQ9KHoseCxDKT0+ZDMuaW50ZXJwb2xhdGVOdW1iZXIoeix4KShyKEMpKTt0aGlzLmlzWm9vbWluZyghMCk7CmxldCB2PURhdGUubm93KCkseT0oKT0+e3ZhciB6PURhdGUubm93KCktdjt6PTA9PT10aGlzLl9hbmltYXRpb25UaW1lPzE6TWF0aC5taW4oMSx6L3RoaXMuX2FuaW1hdGlvblRpbWUpO2xldCB4PXQoayxkLHopLEM9dChuLGYseiksRj10KHAsZyx6KSxEPXQocSxsLHopO3RoaXMueFNjYWxlKCkuZG9tYWluKFt4LENdKTt0aGlzLnlTY2FsZSgpLmRvbWFpbihbRixEXSk7MT56P1Bsb3R0YWJsZS5VdGlscy5ET00ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoeSk6KHRoaXMub25FbmQoKSx0aGlzLmlzWm9vbWluZyghMSkpfTt5KCl9fWEuRHJhZ1pvb21MYXllcj1jfSkoYnB8fChicD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3Z6LWxpbmUtY2hhcnQyL3Bhblpvb21EcmFnTGF5ZXIuanMKdmFyIGNwOwooZnVuY3Rpb24oYSl7bGV0IGM7KGZ1bmN0aW9uKGYpe2ZbZi5OT05FPTBdPSJOT05FIjtmW2YuRFJBR19aT09NSU5HPTFdPSJEUkFHX1pPT01JTkciO2ZbZi5QQU5OSU5HPTJdPSJQQU5OSU5HIn0pKGN8fChjPXt9KSk7Y2xhc3MgZCBleHRlbmRzIFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3Vwe2NvbnN0cnVjdG9yKGYsZyxsKXtzdXBlcigpO3RoaXMuc3RhdGU9Yy5OT05FO3RoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgUGxvdHRhYmxlLlV0aWxzLkNhbGxiYWNrU2V0O3RoaXMucGFuRW5kQ2FsbGJhY2s9bmV3IFBsb3R0YWJsZS5VdGlscy5DYWxsYmFja1NldDt0aGlzLnBhblpvb209bmV3IFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuUGFuWm9vbShmLGcpO3RoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihuPT5kLmlzUGFuS2V5KG4pJiYwPT09bi5idXR0b24pO3RoaXMucGFuWm9vbS53aGVlbEZpbHRlcih0aGlzLmNhblNjcm9sbFpvb20pO3RoaXMuZHJhZ1pvb21MYXllcj1uZXcgYnAuRHJhZ1pvb21MYXllcihmLApnLGwpO3RoaXMuZHJhZ1pvb21MYXllci5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihuPT4hZC5pc1BhbktleShuKSYmMD09PW4uYnV0dG9uKTt0aGlzLmFwcGVuZCh0aGlzLmRyYWdab29tTGF5ZXIpO2NvbnN0IGs9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1QbG90dGFibGUuRGlzcGF0Y2hlcnMuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbChrKTt0aGlzLnBhblpvb20uYXR0YWNoVG8odGhpcyl9KTt0aGlzLm9uRGV0YWNoKCgpPT57dGhpcy5wYW5ab29tLmRldGFjaEZyb20oKTt0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSk7dGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09Yy5OT05FJiYKdGhpcy5zZXRTdGF0ZShjLlBBTk5JTkcpfSk7dGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PWMuUEFOTklORyYmdGhpcy5zZXRTdGF0ZShjLk5PTkUpfSk7dGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09Yy5OT05FJiZ0aGlzLnNldFN0YXRlKGMuRFJBR19aT09NSU5HKX0pO3RoaXMuZHJhZ1pvb21MYXllci5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT1jLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZShjLk5PTkUpfSl9b25XaGVlbChmLGcpe2lmKCF0aGlzLmNhblNjcm9sbFpvb20oZykmJihmPXRoaXMuZWxlbWVudCgpLGYuc2VsZWN0KCIuaGVscCIpLmVtcHR5KCkpKXt2YXIgbD1mLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2wuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKTsKbC5vbigiYW5pbWF0aW9uZW5kIiwoKT0+dm9pZCBsLnJlbW92ZSgpKX19c3RhdGljIGlzUGFuS2V5KGYpe3JldHVybiEhZi5hbHRLZXl8fCEhZi5zaGlmdEtleX1jYW5TY3JvbGxab29tKGYpe3JldHVybiBmLmFsdEtleX1zZXRTdGF0ZShmKXtpZih0aGlzLnN0YXRlIT1mKXt2YXIgZz10aGlzLnN0YXRlO3RoaXMuc3RhdGU9Zjt0aGlzLnJvb3QoKS5yZW1vdmVDbGFzcyh0aGlzLnN0YXRlQ2xhc3NOYW1lKGcpKTt0aGlzLnJvb3QoKS5hZGRDbGFzcyh0aGlzLnN0YXRlQ2xhc3NOYW1lKGYpKTtnPT1jLlBBTk5JTkcmJnRoaXMucGFuRW5kQ2FsbGJhY2suY2FsbENhbGxiYWNrcygpO2Y9PWMuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX19c3RhdGVDbGFzc05hbWUoZil7c3dpdGNoKGYpe2Nhc2UgYy5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIGMuRFJBR19aT09NSU5HOnJldHVybiJkcmFnLXpvb21pbmciO2RlZmF1bHQ6cmV0dXJuIiJ9fW9uUGFuU3RhcnQoZil7dGhpcy5wYW5TdGFydENhbGxiYWNrLmFkZChmKX1vblBhbkVuZChmKXt0aGlzLnBhbkVuZENhbGxiYWNrLmFkZChmKX1vblNjcm9sbFpvb20oZil7dGhpcy5wYW5ab29tLm9uWm9vbUVuZChmKX1vbkRyYWdab29tU3RhcnQoZil7dGhpcy5kcmFnWm9vbUxheWVyLmludGVyYWN0aW9uU3RhcnQoZil9b25EcmFnWm9vbUVuZChmKXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25FbmQoZil9fQphLlBhblpvb21EcmFnTGF5ZXI9ZH0pKGNwfHwoY3A9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92ei1saW5lLWNoYXJ0Mi90Zi1zY2FsZS5qcwooZnVuY3Rpb24oYSl7Y2xhc3MgYyBleHRlbmRzIFBsb3R0YWJsZS5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKGQpe3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW49ZH1pZ25vcmVPdXRsaWVyKGQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGQ/KHRoaXMuX2lnbm9yZU91dGxpZXI9ZCx0aGlzKTp0aGlzLl9pZ25vcmVPdXRsaWVyfV9nZXRBbGxJbmNsdWRlZFZhbHVlcygpe2NvbnN0IGQ9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMoZCl9fWEuVGZTY2FsZT1jfSkoY3B8fChjcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3Z6LWxpbmUtY2hhcnQyL2xpbmVhci1zY2FsZS5qcwooZnVuY3Rpb24oYSl7Y2xhc3MgYyBleHRlbmRzIFBsb3R0YWJsZS5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLl9pZ25vcmVPdXRsaWVyPSExO3RoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbihkKXt0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPWR9X25pY2VEb21haW4oZCxmKXtjb25zdCBbZyxsXT1kLGs9bC1nO2Q9MD09PWs/MS4xKk1hdGguYWJzKGcpKzEuMTprKnRoaXMucGFkUHJvcG9ydGlvbigpO3JldHVybiBzdXBlci5fbmljZURvbWFpbihbMDw9ZyYmZzxrPy0uMSpsOmctZCxsK2RdLGYpfV9nZXRVbmJvdW5kZWRFeHRlbnQoZCl7ZD10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcyhkKTtsZXQgZj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7MCE9PWQubGVuZ3RoJiYoZD1bUGxvdHRhYmxlLlV0aWxzLk1hdGgubWluKGQsZlswXSksUGxvdHRhYmxlLlV0aWxzLk1hdGgubWF4KGQsZlsxXSldLGY9dGhpcy5fbmljZURvbWFpbihkKSk7CnJldHVybiBmfV9nZXRBbGxJbmNsdWRlZFZhbHVlcygpe2NvbnN0IGQ9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMoZCl9ZXh0ZW50T2ZWYWx1ZXMoZCl7dmFyIGY9ZD1kLmZpbHRlcihnPT5QbG90dGFibGUuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKGcpKTtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7Zj1kLnNvcnQoKGssbik9Pmstbik7Y29uc3QgZz1kMy5xdWFudGlsZShmLC4wNSksbD1kMy5xdWFudGlsZShmLC45NSk7Zj1kLmZpbHRlcihrPT5rPj1nJiZrPD1sKX1kPWQzLmV4dGVudChmKTtyZXR1cm4gbnVsbD09ZFswXXx8bnVsbD09ZFsxXT9bXTpkfWlnbm9yZU91dGxpZXIoZCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZD8odGhpcy5faWdub3JlT3V0bGllcj1kLHRoaXMpOnRoaXMuX2lnbm9yZU91dGxpZXJ9fWEuTGluZWFyU2NhbGU9Y30pKGNwfHwoY3A9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92ei1saW5lLWNoYXJ0Mi9sb2ctc2NhbGUuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoZyl7cmV0dXJuIE1hdGgubG9nMTAoZyl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gTWF0aC5wb3coMTAsZyl9YS5NSU5fUE9TSVRJVkVfVkFMVUU9TWF0aC5wb3coMiwtMTA3NCk7Y2xhc3MgZiBleHRlbmRzIGEuVGZTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5fZDNMb2dTY2FsZT1kMy5zY2FsZUxvZygpO3RoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUoZyl7cmV0dXJuIDA+PWc/TmFOOnRoaXMuX2QzTG9nU2NhbGUoZyl9aW52ZXJ0KGcpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydChnKX1zY2FsZVRyYW5zZm9ybWF0aW9uKGcpe3JldHVybiB0aGlzLnNjYWxlKGcpfWludmVydGVkVHJhbnNmb3JtYXRpb24oZyl7cmV0dXJuIHRoaXMuaW52ZXJ0KGcpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9X2dldERvbWFpbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufV9zZXREb21haW4oZyl7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj0KZztjb25zdCBbbCxrXT1nO3N1cGVyLl9zZXREb21haW4oW01hdGgubWF4KGEuTUlOX1BPU0lUSVZFX1ZBTFVFLGwpLGtdKX1fbmljZURvbWFpbihnKXtjb25zdCBbbCxrXT1nO2c9TWF0aC5tYXgoYyhhLk1JTl9QT1NJVElWRV9WQUxVRSksYyhsKSk7Y29uc3Qgbj1jKGspO3ZhciBwPW4tZztwPXA/cCp0aGlzLnBhZFByb3BvcnRpb24oKToxO3JldHVybltkKE1hdGgubWF4KGMoYS5NSU5fUE9TSVRJVkVfVkFMVUUpLGctcCkpLGQobitwKV19X2dldFVuYm91bmRlZEV4dGVudChnKXtnPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKGcpO2xldCBsPXRoaXMuX2RlZmF1bHRFeHRlbnQoKTswIT09Zy5sZW5ndGgmJihnPVtQbG90dGFibGUuVXRpbHMuTWF0aC5taW4oZyxsWzBdKSxQbG90dGFibGUuVXRpbHMuTWF0aC5tYXgoZyxsWzFdKV0sbD10aGlzLl9uaWNlRG9tYWluKGcpKTtyZXR1cm4gbH1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKXtyZXR1cm4gc3VwZXIuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkubWFwKGc9PgowPGc/ZzphLk1JTl9QT1NJVElWRV9WQUxVRSl9X2RlZmF1bHRFeHRlbnQoKXtyZXR1cm5bMSwxMF19X2JhY2tpbmdTY2FsZURvbWFpbihnKXtpZihudWxsPT1nKXJldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzTG9nU2NhbGUuZG9tYWluKGcpO3JldHVybiB0aGlzfV9nZXRSYW5nZSgpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnJhbmdlKCl9X3NldFJhbmdlKGcpe3RoaXMuX2QzTG9nU2NhbGUucmFuZ2UoZyl9ZGVmYXVsdFRpY2tzKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUudGlja3MoKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXMoZyl7bGV0IGw9Zz1nLmZpbHRlcihrPT5QbG90dGFibGUuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKGspJiYwPGspO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtnPWcubWFwKGMpLnNvcnQoKHAscSk9PnAtcSk7Y29uc3Qgaz1kMy5xdWFudGlsZShnLC4wNSksbj1kMy5xdWFudGlsZShnLAouOTUpO2w9Zy5maWx0ZXIocD0+cD49ayYmcDw9bikubWFwKGQpfWc9ZDMuZXh0ZW50KGwpO3JldHVybiBudWxsPT1nWzBdfHxudWxsPT1nWzFdP1tdOmd9fWEuTG9nU2NhbGU9Zn0pKGNwfHwoY3A9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92ei1saW5lLWNoYXJ0Mi9saW5lLWNoYXJ0LmpzCihmdW5jdGlvbihhKXtsZXQgYzsoZnVuY3Rpb24oZyl7Z1tnLlRFWFQ9MF09IlRFWFQiO2dbZy5ET009MV09IkRPTSJ9KShjfHwoYz17fSkpO2xldCBkOyhmdW5jdGlvbihnKXtnLkxPRz0ibG9nIjtnLkxJTkVBUj0ibGluZWFyIn0pKGR8fChkPXt9KSk7Y2xhc3MgZntjb25zdHJ1Y3RvcihnLGwsayxuLHAscSxyLHQsdix5LHope3RoaXMuc2VyaWVzTmFtZXM9W107dGhpcy5uYW1lMmRhdGFzZXRzPXt9O3RoaXMuY29sb3JTY2FsZT1uO3RoaXMudG9vbHRpcD1wO3RoaXMuZGF0YXNldHM9W107dGhpcy5faWdub3JlWU91dGxpZXJzPSExO3RoaXMubGFzdFBvaW50c0RhdGFzZXQ9bmV3IFBsb3R0YWJsZS5EYXRhc2V0O3RoaXMubmFuRGF0YXNldD1uZXcgUGxvdHRhYmxlLkRhdGFzZXQ7dGhpcy55VmFsdWVBY2Nlc3Nvcj1sO3RoaXMuc3ltYm9sRnVuY3Rpb249eTt0aGlzLm9uRGF0YXNldENoYW5nZWQ9dGhpcy5fb25EYXRhc2V0Q2hhbmdlZC5iaW5kKHRoaXMpO3RoaXMuX2RlZmF1bHRYUmFuZ2U9CnQ7dGhpcy5fZGVmYXVsdFlSYW5nZT12O3RoaXMudG9vbHRpcENvbHVtbnM9cTt0aGlzLmJ1aWxkQ2hhcnQoZyxsLGsscix6KX1idWlsZENoYXJ0KGcsbCxrLG4scCl7dGhpcy5kZXN0cm95KCk7Zz1nKCk7dGhpcy54QWNjZXNzb3I9Zy5hY2Nlc3Nvcjt0aGlzLnhTY2FsZT1nLnNjYWxlO3RoaXMueEF4aXM9Zy5heGlzO3RoaXMueEF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoMyk7cCYmdGhpcy54QXhpcy5mb3JtYXR0ZXIocCk7dGhpcy55U2NhbGU9Zi5nZXRZU2NhbGVGcm9tVHlwZShrKTt0aGlzLnlTY2FsZS5zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKCgpPT50aGlzLmdldFZhbHVlc0ZvcllBeGlzRG9tYWluQ29tcHV0ZSgpKTt0aGlzLnlBeGlzPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKHRoaXMueVNjYWxlLCJsZWZ0Iik7cD0kby5tdWx0aXNjYWxlRm9ybWF0dGVyKCRvLllfQVhJU19GT1JNQVRURVJfUFJFQ0lTSU9OKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihwKTsKdGhpcy55QXhpcy51c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbigpO3RoaXMuZmlsbEFyZWE9bjtwPW5ldyBhLlBhblpvb21EcmFnTGF5ZXIodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsKCk9PnRoaXMucmVzZXREb21haW4oKSk7dGhpcy50b29sdGlwSW50ZXJhY3Rpb249dGhpcy5jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24ocCk7dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50PW5ldyBQbG90dGFibGUuQ29tcG9uZW50O249dGhpcy5idWlsZFBsb3QodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsbik7dGhpcy5ncmlkbGluZXM9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7Zz1udWxsO2shPT1kLkxPRyYmKGc9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkd1aWRlTGluZUxheWVyKCJob3Jpem9udGFsIiksZy5zY2FsZSh0aGlzLnlTY2FsZSkudmFsdWUoMCkpO2s9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkd1aWRlTGluZUxheWVyKCJ2ZXJ0aWNhbCIpOwprLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKTt0aGlzLmNlbnRlcj1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JvdXAoW3RoaXMuZ3JpZGxpbmVzLGcsayxuLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudCxwXSk7dGhpcy5jZW50ZXIuYWRkQ2xhc3MoIm1haW4iKTt0aGlzLm91dGVyPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW3RoaXMueUF4aXMsdGhpcy5jZW50ZXJdLFtudWxsLHRoaXMueEF4aXNdXSl9YnVpbGRQbG90KGcsbCxrKXtrJiYodGhpcy5tYXJnaW5BcmVhUGxvdD1uZXcgUGxvdHRhYmxlLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLGcpLHRoaXMubWFyZ2luQXJlYVBsb3QueShrLmhpZ2hlckFjY2Vzc29yLGwpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAoay5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChyLHQsdik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZSh2Lm1ldGFkYXRhKCkubmFtZSkpLAp0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigic3Ryb2tlLXdpZHRoIiwwKSk7dGhpcy5zbW9vdGhlZEFjY2Vzc29yPXI9PnIuc21vb3RoZWQ7az1uZXcgUGxvdHRhYmxlLlBsb3RzLkxpbmU7ay54KHRoaXMueEFjY2Vzc29yLGcpO2sueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLGwpO2suYXR0cigic3Ryb2tlIiwocix0LHYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodi5tZXRhZGF0YSgpLm5hbWUpKTt0aGlzLmxpbmVQbG90PWs7dGhpcy5zZXR1cFRvb2x0aXBzKGspO2xldCBuPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZTtuLngodGhpcy54QWNjZXNzb3IsZyk7bi55KHRoaXMuc21vb3RoZWRBY2Nlc3NvcixsKTtuLmF0dHIoInN0cm9rZSIsKHIsdCx2KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHYubWV0YWRhdGEoKS5uYW1lKSk7dGhpcy5zbW9vdGhMaW5lUGxvdD1uO2lmKHRoaXMuc3ltYm9sRnVuY3Rpb24pe3ZhciBwPQpuZXcgUGxvdHRhYmxlLlBsb3RzLlNjYXR0ZXI7cC54KHRoaXMueEFjY2Vzc29yLGcpO3AueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLGwpO3AuYXR0cigiZmlsbCIsKHIsdCx2KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHYubWV0YWRhdGEoKS5uYW1lKSk7cC5hdHRyKCJvcGFjaXR5IiwxKTtwLnNpemUoMiokby5UT09MVElQX0NJUkNMRV9TSVpFKTtwLnN5bWJvbCgocix0LHYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKHYubWV0YWRhdGEoKS5uYW1lKSk7dGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9cH1wPW5ldyBQbG90dGFibGUuUGxvdHMuU2NhdHRlcjtwLngodGhpcy54QWNjZXNzb3IsZyk7cC55KHRoaXMueVZhbHVlQWNjZXNzb3IsbCk7cC5hdHRyKCJmaWxsIixyPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoci5uYW1lKSk7cC5hdHRyKCJvcGFjaXR5IiwxKTtwLnNpemUoMiokby5UT09MVElQX0NJUkNMRV9TSVpFKTtwLmRhdGFzZXRzKFt0aGlzLmxhc3RQb2ludHNEYXRhc2V0XSk7dGhpcy5zY2F0dGVyUGxvdD0KcDtsZXQgcT1uZXcgUGxvdHRhYmxlLlBsb3RzLlNjYXR0ZXI7cS54KHRoaXMueEFjY2Vzc29yLGcpO3EueShyPT5yLmRpc3BsYXlZLGwpO3EuYXR0cigiZmlsbCIscj0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHIubmFtZSkpO3EuYXR0cigib3BhY2l0eSIsMSk7cS5zaXplKDIqJG8uTkFOX1NZTUJPTF9TSVpFKTtxLmRhdGFzZXRzKFt0aGlzLm5hbkRhdGFzZXRdKTtxLnN5bWJvbChQbG90dGFibGUuU3ltYm9sRmFjdG9yaWVzLnRyaWFuZ2xlKTt0aGlzLm5hbkRpc3BsYXk9cTtnPVtxLHAsbixrXTt0aGlzLm1hcmdpbkFyZWFQbG90JiZnLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCk7dGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmcucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCk7cmV0dXJuIG5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5Hcm91cChnKX1fb25EYXRhc2V0Q2hhbmdlZChnKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJnRoaXMucmVzbW9vdGhEYXRhc2V0KGcpO3RoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCl9aWdub3JlWU91dGxpZXJzKGcpe2chPT0KdGhpcy5faWdub3JlWU91dGxpZXJzJiYodGhpcy5faWdub3JlWU91dGxpZXJzPWcsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLnlTY2FsZS5pZ25vcmVPdXRsaWVyKGcpLHRoaXMucmVzZXRZRG9tYWluKCkpfWdldFZhbHVlc0ZvcllBeGlzRG9tYWluQ29tcHV0ZSgpe2NvbnN0IGc9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKTtyZXR1cm4gXy5mbGF0dGVuRGVlcCh0aGlzLmRhdGFzZXRzLm1hcChsPT5nLm1hcChrPT5sLmRhdGEoKS5tYXAobj0+ayhuLC0xLGwpKSkpKS5maWx0ZXIoaXNGaW5pdGUpfXVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpe2NvbnN0IGc9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCk7dmFyIGw9dGhpcy5kYXRhc2V0cy5tYXAoaz0+e2xldCBuPW51bGwscD1rLmRhdGEoKS5maWx0ZXIocT0+IWlzTmFOKGcocSwtMSxrKSkpOzA8cC5sZW5ndGgmJihuPXBbcC5sZW5ndGgtMV0sbi5uYW1lPWsubWV0YWRhdGEoKS5uYW1lLG4ucmVsYXRpdmU9CiRvLnJlbGF0aXZlQWNjZXNzb3IobiwtMSxrKSk7cmV0dXJuIG59KS5maWx0ZXIoaz0+bnVsbCE9ayk7dGhpcy5sYXN0UG9pbnRzRGF0YXNldC5kYXRhKGwpO3RoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzLm1hcCh0aGlzLmNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2VycykpO2w9Xy5mbGF0dGVuKHRoaXMuZGF0YXNldHMubWFwKGs9PntsZXQgbj1udWxsLHA9ay5kYXRhKCkscT0wO2Zvcig7cTxwLmxlbmd0aCYmbnVsbD09bjspaXNOYU4oZyhwW3FdLC0xLGspKXx8KG49ZyhwW3FdLC0xLGspKSxxKys7bnVsbD09biYmKG49MCk7bGV0IHI9W107Zm9yKHE9MDtxPHAubGVuZ3RoO3ErKylpc05hTihnKHBbcV0sLTEsaykpPyhwW3FdLm5hbWU9ay5tZXRhZGF0YSgpLm5hbWUscFtxXS5kaXNwbGF5WT1uLHBbcV0ucmVsYXRpdmU9JG8ucmVsYXRpdmVBY2Nlc3NvcihwW3FdLC0xLGspLHIucHVzaChwW3FdKSk6Cm49ZyhwW3FdLC0xLGspO3JldHVybiByfSkpO3RoaXMubmFuRGF0YXNldC5kYXRhKGwpfXJlc2V0RG9tYWluKCl7dGhpcy5yZXNldFhEb21haW4oKTt0aGlzLnJlc2V0WURvbWFpbigpfXJlc2V0WERvbWFpbigpe2lmKG51bGwhPXRoaXMuX2RlZmF1bHRYUmFuZ2UpdmFyIGc9dGhpcy5fZGVmYXVsdFhSYW5nZTtlbHNlIGc9dGhpcy54U2NhbGUsZy5fZG9tYWluTWluPW51bGwsZy5fZG9tYWluTWF4PW51bGwsZz1nLl9nZXRFeHRlbnQoKTt0aGlzLnhTY2FsZS5kb21haW4oZyl9cmVzZXRZRG9tYWluKCl7bnVsbCE9dGhpcy5fZGVmYXVsdFlSYW5nZT90aGlzLnlTY2FsZS5kb21haW4odGhpcy5fZGVmYXVsdFlSYW5nZSk6KHRoaXMueVNjYWxlLmF1dG9Eb21haW4oKSx0aGlzLnlTY2FsZS5kb21haW4odGhpcy55U2NhbGUuZG9tYWluKCkpKX1nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKXtjb25zdCBnPVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07dGhpcy5maWxsQXJlYSYmZy5wdXNoKHRoaXMuZmlsbEFyZWEubG93ZXJBY2Nlc3NvciwKdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3Nvcik7cmV0dXJuIGd9Z2V0WUF4aXNBY2Nlc3Nvcigpe3JldHVybiB0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5zbW9vdGhlZEFjY2Vzc29yOnRoaXMueVZhbHVlQWNjZXNzb3J9Y3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGcpe2NvbnN0IGw9bmV3ICRvLlBvaW50ZXJJbnRlcmFjdGlvbixrPSgpPT57bC5lbmFibGVkKCExKTt0aGlzLmhpZGVUb29sdGlwcygpfSxuPSgpPT5sLmVuYWJsZWQoITApO2cub25QYW5TdGFydChrKTtnLm9uRHJhZ1pvb21TdGFydChrKTtnLm9uUGFuRW5kKG4pO2cub25EcmFnWm9vbUVuZChuKTtnLm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpO2wub25Qb2ludGVyTW92ZShwPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249cDt0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KHApfSk7bC5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKTsKcmV0dXJuIGx9dXBkYXRlVG9vbHRpcENvbnRlbnQoZyl7dGhpcy5saW5lUGxvdCYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bGV0IGw9e3g6Zy54LHk6Zy55LGRhdHVtOm51bGwsZGF0YXNldDpudWxsfSxrPXRoaXMuZ3JpZGxpbmVzLmNvbnRlbnQoKS5ub2RlKCkuZ2V0QkJveCgpO3ZhciBuPXRoaXMubGluZVBsb3QuZGF0YXNldHMoKS5tYXAodD0+dGhpcy5maW5kQ2xvc2VzdFBvaW50KGwsdCkpLmZpbHRlcihCb29sZWFuKTtsZXQgcD1QbG90dGFibGUuVXRpbHMuRE9NLmludGVyc2VjdHNCQm94LHE9bi5maWx0ZXIodD0+cCh0LngsdC55LGspfHxpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKHQuZGF0dW0sMCx0LmRhdGFzZXQpKSkscj1xLmZpbHRlcih0PT4haXNOYU4odGhpcy55VmFsdWVBY2Nlc3Nvcih0LmRhdHVtLAowLHQuZGF0YXNldCkpKTswIT09bi5sZW5ndGg/KHRoaXMuc2NhdHRlclBsb3QuYXR0cigiZGlzcGxheSIsIm5vbmUiKSxuPXRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudC5jb250ZW50KCkuc2VsZWN0QWxsKCIucG9pbnQiKS5kYXRhKHIsdD0+dC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSksbi5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgicG9pbnQiLCEwKSxuLmF0dHIoInIiLCRvLlRPT0xUSVBfQ0lSQ0xFX1NJWkUpLmF0dHIoImN4Iix0PT50LngpLmF0dHIoImN5Iix0PT50LnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsdD0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhxLGwsdGhpcy50b29sdGlwQ29sdW1ucykpOnRoaXMuaGlkZVRvb2x0aXBzKCl9KSl9aGlkZVRvb2x0aXBzKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSk7CnRoaXMudG9vbHRpcC5oaWRlKCk7dGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKTt0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyhnKXtnLm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSgpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITEpfSk7Zy5vbkFuY2hvcigoKT0+e3RoaXMudG9vbHRpcEludGVyYWN0aW9uLmF0dGFjaFRvKGcpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITApfSl9ZHJhd1Rvb2x0aXBzKGcsbCxrKXtpZihnLmxlbmd0aCl7dmFyIHtjb2xvclNjYWxlOm59PXRoaXM7az1be3RpdGxlOiIiLHN0YXRpYzohMSxldmFsVHlwZTpjLkRPTSxldmFsdWF0ZSh6KXtkMy5zZWxlY3QodGhpcykuc2VsZWN0KCJzcGFuIikuc3R5bGUoImJhY2tncm91bmQtY29sb3IiLCgpPT5uLnNjYWxlKHouZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKTsKcmV0dXJuIiJ9LGVudGVyKHope2QzLnNlbGVjdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pm4uc2NhbGUoei5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ua107dmFyIHA9ej0+TWF0aC5wb3coei54LWwueCwyKStNYXRoLnBvdyh6LnktbC55LDIpLHE9Xy5taW4oZy5tYXAocCkpLHI9dGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3Nvcjp0aGlzLnlWYWx1ZUFjY2Vzc29yO2c9ImFzY2VuZGluZyI9PT10aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kP18uc29ydEJ5KGcsej0+cih6LmRhdHVtLC0xLHouZGF0YXNldCkpOiJkZXNjZW5kaW5nIj09PXRoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q/Xy5zb3J0QnkoZyx6PT5yKHouZGF0dW0sLTEsei5kYXRhc2V0KSkucmV2ZXJzZSgpOiJuZWFyZXN0Ij09PXRoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q/Xy5zb3J0QnkoZyxwKTpnLnNsaWNlKDApLnJldmVyc2UoKTsKdmFyIHQ9dGhpcyx2PWQzLnNlbGVjdCh0aGlzLnRvb2x0aXAuY29udGVudCgpKS5zZWxlY3QoInRhYmxlIikseT12LnNlbGVjdCgidGhlYWQiKS5zZWxlY3RBbGwoInRoIikuZGF0YShrLHo9PnoudGl0bGUpO3kuZW50ZXIoKS5hcHBlbmQoInRoIikudGV4dCh6PT56LnRpdGxlKS5ub2RlcygpO3kuZXhpdCgpLnJlbW92ZSgpO2c9di5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEoZyx6PT56LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtnLmNsYXNzZWQoImRpc3RhbnQiLHo9Pnt2YXIgeD16LmRhdGFzZXQuZGF0YSgpWzBdLEM9Xy5sYXN0KHouZGF0YXNldC5kYXRhKCkpO3g9dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IoeCwwLHouZGF0YXNldCkpO0M9dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IoQywwLHouZGF0YXNldCkpO3o9dGhpcy5zbW9vdGhpbmdFbmFibGVkP3ouZGF0dW0uc21vb3RoZWQ6dGhpcy55VmFsdWVBY2Nlc3Nvcih6LmRhdHVtLAowLHouZGF0YXNldCk7cmV0dXJuIGwueDx4fHxsLng+Q3x8aXNOYU4oeil9KS5jbGFzc2VkKCJjbG9zZXN0Iix6PT5wKHopPT09cSkuZWFjaChmdW5jdGlvbih6KXt0LmRyYXdUb29sdGlwUm93KHRoaXMsayx6KX0pLm9yZGVyKCk7Zy5leGl0KCkucmVtb3ZlKCk7Zy5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKHope3QuZHJhd1Rvb2x0aXBSb3codGhpcyxrLHopfSkubm9kZXMoKTt0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1lbHNlIHRoaXMudG9vbHRpcC5oaWRlKCl9ZHJhd1Rvb2x0aXBSb3coZyxsLGspe2NvbnN0IG49dGhpcztnPWQzLnNlbGVjdChnKS5zZWxlY3RBbGwoInRkIikuZGF0YShsKTtnLmVhY2goZnVuY3Rpb24ocCl7cC5zdGF0aWN8fG4uZHJhd1Rvb2x0aXBDb2x1bW4uY2FsbChuLHRoaXMscCxrKX0pO2cuZW50ZXIoKS5hcHBlbmQoInRkIikuZWFjaChmdW5jdGlvbihwKXtwLmVudGVyJiZwLmVudGVyLmNhbGwodGhpcywKayk7bi5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKG4sdGhpcyxwLGspfSl9ZHJhd1Rvb2x0aXBDb2x1bW4oZyxsLGspe2NvbnN0IHtzbW9vdGhpbmdFbmFibGVkOm59PXRoaXM7bC5ldmFsVHlwZT09Yy5ET00/bC5ldmFsdWF0ZS5jYWxsKGcsayx7c21vb3RoaW5nRW5hYmxlZDpufSk6ZDMuc2VsZWN0KGcpLnRleHQobC5ldmFsdWF0ZS5jYWxsKGcsayx7c21vb3RoaW5nRW5hYmxlZDpufSkpfWZpbmRDbG9zZXN0UG9pbnQoZyxsKXtjb25zdCBrPWwuZGF0YSgpLm1hcCgocSxyKT0+dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IocSxyLGwpKSk7bGV0IG49Xy5zb3J0ZWRJbmRleChrLGcueCk7aWYoMD09ay5sZW5ndGgpcmV0dXJuIG51bGw7bj09PWsubGVuZ3RoPy0tbjowIT09biYmKG49TWF0aC5hYnMoa1tuLTFdLWcueCk8TWF0aC5hYnMoa1tuXS1nLngpP24tMTpuKTtnPWwuZGF0YSgpW25dO2NvbnN0IHA9dGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3NvcihnLApuLGwpOnRoaXMueVZhbHVlQWNjZXNzb3IoZyxuLGwpO3JldHVybnt4Omtbbl0seTp0aGlzLnlTY2FsZS5zY2FsZShwKSxkYXR1bTpnLGRhdGFzZXQ6bH19cmVzbW9vdGhEYXRhc2V0KGcpe2xldCBsPWcuZGF0YSgpO2NvbnN0IGs9dGhpcy5zbW9vdGhpbmdXZWlnaHQ7bGV0IG49MDxsLmxlbmd0aD8wOk5hTixwPTA7Y29uc3QgcT1sLm1hcCgodCx2KT0+dGhpcy55VmFsdWVBY2Nlc3Nvcih0LHYsZykpLHI9cS5ldmVyeSh0PT50PT1xWzBdKTtsLmZvckVhY2goKHQsdik9Pnt2PXFbdl07cnx8IU51bWJlci5pc0Zpbml0ZSh2KT90LnNtb290aGVkPXY6KG49biprKygxLWspKnYscCsrLHY9MSwxIT09ayYmKHY9MS1NYXRoLnBvdyhrLHApKSx0LnNtb290aGVkPW4vdil9KX1nZXREYXRhc2V0KGcpe3ZvaWQgMD09PXRoaXMubmFtZTJkYXRhc2V0c1tnXSYmKHRoaXMubmFtZTJkYXRhc2V0c1tnXT1uZXcgUGxvdHRhYmxlLkRhdGFzZXQoW10se25hbWU6ZyxtZXRhOm51bGx9KSk7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1tnXX1zdGF0aWMgZ2V0WVNjYWxlRnJvbVR5cGUoZyl7aWYoZz09PQpkLkxPRylyZXR1cm4gbmV3IGEuTG9nU2NhbGU7aWYoZz09PWQuTElORUFSKXJldHVybiBuZXcgYS5MaW5lYXJTY2FsZTt0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIHlTY2FsZSB0eXBlICIrZyk7fXNldFZpc2libGVTZXJpZXMoZyl7dGhpcy5zZXJpZXNOYW1lcz1nPWcuc29ydCgpO2cucmV2ZXJzZSgpO3RoaXMuZGF0YXNldHMuZm9yRWFjaChsPT5sLm9mZlVwZGF0ZSh0aGlzLm9uRGF0YXNldENoYW5nZWQpKTt0aGlzLmRhdGFzZXRzPWcubWFwKGw9PnRoaXMuZ2V0RGF0YXNldChsKSk7dGhpcy5kYXRhc2V0cy5mb3JFYWNoKGw9Pmwub25VcGRhdGUodGhpcy5vbkRhdGFzZXRDaGFuZ2VkKSk7dGhpcy5saW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKTt0aGlzLnNtb290aGluZ0VuYWJsZWQmJnRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cyk7dGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKTsKdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKX1jcmVhdGVTYW1wbGVkRGF0YXNldEZvck1hcmtlcnMoZyl7Y29uc3QgbD1nLmRhdGEoKTtpZigyMD49bC5sZW5ndGgpcmV0dXJuIGc7Y29uc3Qgaz1NYXRoLmNlaWwobC5sZW5ndGgvMjApLG49QXJyYXkoTWF0aC5mbG9vcihsLmxlbmd0aC9rKSk7Zm9yKGxldCBwPTAscT0wO3A8bi5sZW5ndGg7cCsrLHErPWspbltwXT1sW3FdO3JldHVybiBuZXcgUGxvdHRhYmxlLkRhdGFzZXQobixnLm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEoZyxsKXt0aGlzLmdldERhdGFzZXQoZykuZGF0YShsKTt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKX1zZXRTZXJpZXNNZXRhZGF0YShnLGwpe2w9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldERhdGFzZXQoZykubWV0YWRhdGEoKSx7bWV0YTpsfSk7dGhpcy5nZXREYXRhc2V0KGcpLm1ldGFkYXRhKGwpfXNtb290aGluZ1VwZGF0ZShnKXt0aGlzLnNtb290aGluZ1dlaWdodD0KZzt0aGlzLmRhdGFzZXRzLmZvckVhY2gobD0+dGhpcy5yZXNtb290aERhdGFzZXQobCkpO3RoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpO3RoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKTt0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSwKdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCkpO3RoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKX1zZXRUb29sdGlwU29ydGluZ01ldGhvZChnKXt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPWd9cmVuZGVyVG8oZyl7dGhpcy50YXJnZXRTVkc9Zzt0aGlzLm91dGVyLnJlbmRlclRvKGcpO251bGwhPXRoaXMuX2RlZmF1bHRYUmFuZ2UmJnRoaXMucmVzZXRYRG9tYWluKCk7bnVsbCE9dGhpcy5fZGVmYXVsdFlSYW5nZSYmdGhpcy5yZXNldFlEb21haW4oKTt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKX1yZWRyYXcoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKTt0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKTsKdGhpcy5vdXRlci5yZWRyYXcoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5faW52YWxpZGF0ZUxheW91dFJhZik7dGhpcy5faW52YWxpZGF0ZUxheW91dFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpfSl9bWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKXtpZih0aGlzLl9sYXN0RHJhd0JCb3gpe2NvbnN0IHt3aWR0aDpnfT10aGlzLl9sYXN0RHJhd0JCb3gse3dpZHRoOmx9PXRoaXMudGFyZ2V0U1ZHLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTswPT1nJiZnPGwmJnRoaXMub3V0ZXIuaW52YWxpZGF0ZUNhY2hlKCl9dGhpcy5fbGFzdERyYXdCQm94PXRoaXMudGFyZ2V0U1ZHLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1kZXN0cm95KCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlZHJhd1JhZik7CndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKTt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcihnKXtpZih0aGlzLm91dGVyKXRoaXMub3V0ZXIub25BbmNob3IoZyl9fWEuTGluZUNoYXJ0PWZ9KShjcHx8KGNwPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdnotbGluZS1jaGFydDIvdnotbGluZS1jaGFydDIuanMKKGZ1bmN0aW9uKGEpe2NvbnN0IGM9JG8ubXVsdGlzY2FsZUZvcm1hdHRlcigkby5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTiksZD1mPT5pc05hTihmKT8iTmFOIjpjKGYpO2EuREVGQVVMVF9UT09MVElQX0NPTFVNTlM9W3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6Zj0+Zi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJTbW9vdGhlZCIsZXZhbHVhdGUoZixnKXsoe3Ntb290aGluZ0VuYWJsZWQ6Z309Zyk7cmV0dXJuIGQoZz9mLmRhdHVtLnNtb290aGVkOmYuZGF0dW0uc2NhbGFyKX19LHt0aXRsZToiVmFsdWUiLGV2YWx1YXRlOmY9PmQoZi5kYXR1bS5zY2FsYXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOmY9PiRvLnN0ZXBGb3JtYXR0ZXIoZi5kYXR1bS5zdGVwKX0se3RpdGxlOiJUaW1lIixldmFsdWF0ZTpmPT4kby50aW1lRm9ybWF0dGVyKGYuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6Zj0+JG8ucmVsYXRpdmVGb3JtYXR0ZXIoJG8ucmVsYXRpdmVBY2Nlc3NvcihmLmRhdHVtLAotMSxmLmRhdGFzZXQpKX1dO1BvbHltZXIoe2lzOiJ2ei1saW5lLWNoYXJ0MiIscHJvcGVydGllczp7Y29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3IpLnJhbmdlKGQzLnNjaGVtZUNhdGVnb3J5MTApfX0sc3ltYm9sRnVuY3Rpb246T2JqZWN0LHNtb290aGluZ0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6ITF9LHNtb290aGluZ1dlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6LjZ9LHhUeXBlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0seENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDp7dHlwZTpPYmplY3QsdmFsdWU6IiJ9LHhBeGlzRm9ybWF0dGVyOk9iamVjdCx5VmFsdWVBY2Nlc3Nvcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PmY9PmYuc2NhbGFyfSx0b29sdGlwQ29sdW1uczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+YS5ERUZBVUxUX1RPT0xUSVBfQ09MVU1OU30sZmlsbEFyZWE6T2JqZWN0LApkZWZhdWx0WFJhbmdlOkFycmF5LGRlZmF1bHRZUmFuZ2U6QXJyYXkseVNjYWxlVHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImxpbmVhciJ9LGlnbm9yZVlPdXRsaWVyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx0b29sdGlwU29ydGluZ01ldGhvZDp7dHlwZTpTdHJpbmcsdmFsdWU6ImRlZmF1bHQifSx0b29sdGlwUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOmFwLlRvb2x0aXBQb3NpdGlvbi5CT1RUT019LF9jaGFydDpPYmplY3QsX3Zpc2libGVTZXJpZXNDYWNoZTp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LF9zZXJpZXNEYXRhQ2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4oe30pfSxfc2VyaWVzTWV0YWRhdGFDYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ6e3R5cGU6TnVtYmVyLHZhbHVlOm51bGx9fSxvYnNlcnZlcnM6WyJfbWFrZUNoYXJ0KHhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QsIHhUeXBlLCB5VmFsdWVBY2Nlc3NvciwgeVNjYWxlVHlwZSwgdG9vbHRpcENvbHVtbnMsIGNvbG9yU2NhbGUsIGlzQXR0YWNoZWQpIiwKIl9yZWxvYWRGcm9tQ2FjaGUoX2NoYXJ0LCBfdmlzaWJsZVNlcmllc0NhY2hlKSIsIl9zbW9vdGhpbmdDaGFuZ2VkKHNtb290aGluZ0VuYWJsZWQsIHNtb290aGluZ1dlaWdodCwgX2NoYXJ0KSIsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQodG9vbHRpcFNvcnRpbmdNZXRob2QsIF9jaGFydCkiLCJfb3V0bGllcnNDaGFuZ2VkKGlnbm9yZVlPdXRsaWVycywgX2NoYXJ0KSJdLHJlYWR5KCl7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX0sYXR0YWNoZWQoKXtjb25zdCBmPXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksZik7dGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLGYpO3RoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLGYpO3RoaXMuX2xpc3Rlbih3aW5kb3csCiJrZXl1cCIsdGhpcy5fb25LZXlVcC5iaW5kKHRoaXMpLGYpfSxkZXRhY2hlZCgpe3RoaXMuY2FuY2VsQXN5bmModGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkKTt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpO3RoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTpmLGV2ZW50TmFtZTpnLGZ1bmM6bCxvcHRpb246a30pPT57Zi5yZW1vdmVFdmVudExpc3RlbmVyKGcsbCxrKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX0sX2xpc3RlbihmLGcsbCxrPXt9KXt0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9bmV3IFNldCk7dGhpcy5fbGlzdGVuZXJzLmFkZCh7bm9kZTpmLGV2ZW50TmFtZTpnLGZ1bmM6bCxvcHRpb246a30pO2YuYWRkRXZlbnRMaXN0ZW5lcihnLGwsayl9LF9vbktleURvd24oZil7dGhpcy50b2dnbGVDbGFzcygicGFua2V5IixhLlBhblpvb21EcmFnTGF5ZXIuaXNQYW5LZXkoZikpfSxfb25LZXlVcChmKXt0aGlzLnRvZ2dsZUNsYXNzKCJwYW5rZXkiLAphLlBhblpvb21EcmFnTGF5ZXIuaXNQYW5LZXkoZikpfSxfb25Nb3VzZURvd24oKXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX0sX29uTW91c2VVcCgpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfSxzZXRWaXNpYmxlU2VyaWVzOmZ1bmN0aW9uKGYpe18uaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsZil8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9Zil9LHNldFNlcmllc0RhdGE6ZnVuY3Rpb24oZixnKXt0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbZl09Zzt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YShmLGcpfSxzZXRTZXJpZXNNZXRhZGF0YShmLGcpe3RoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbZl09Zzt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0U2VyaWVzTWV0YWRhdGEoZixnKX0scmVzZXREb21haW46ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQucmVzZXREb21haW4oKX0scmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fY2hhcnQmJgp0aGlzLl9jaGFydC5yZWRyYXcoKX0sX21ha2VDaGFydDpmdW5jdGlvbihmLGcsbCxrLG4scCl7Z3x8Zj9nJiYoZj0oKT0+JG8uZ2V0WENvbXBvbmVudHMoZykpOmY9JG8uc3RlcFg7bnVsbCE9PXRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCk7dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbDtpZihmJiZ0aGlzLnlWYWx1ZUFjY2Vzc29yJiZ0aGlzLnRvb2x0aXBDb2x1bW5zKXt2YXIgcT1uZXcgYS5MaW5lQ2hhcnQoZix0aGlzLnlWYWx1ZUFjY2Vzc29yLGsscCx0aGlzLiQudG9vbHRpcCx0aGlzLnRvb2x0aXBDb2x1bW5zLHRoaXMuZmlsbEFyZWEsdGhpcy5kZWZhdWx0WFJhbmdlLHRoaXMuZGVmYXVsdFlSYW5nZSwKdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxyPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnRkaXYpO3EucmVuZGVyVG8ocik7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKTt0aGlzLl9jaGFydD1xO3RoaXMuX2NoYXJ0Lm9uQW5jaG9yKCgpPT50aGlzLmZpcmUoImNoYXJ0LWF0dGFjaGVkIikpfX0sMzUwKX0sX3JlbG9hZEZyb21DYWNoZTpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiYodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZvckVhY2goZj0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEoZix0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbZl18fFtdKX0pLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5maWx0ZXIoZj0+dGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVtmXSkuZm9yRWFjaChmPT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzTWV0YWRhdGEoZix0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW2ZdKX0pLHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlKSl9LApfc21vb3RoaW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiYodGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuX2NoYXJ0LnNtb290aGluZ1VwZGF0ZSh0aGlzLnNtb290aGluZ1dlaWdodCk6dGhpcy5fY2hhcnQuc21vb3RoaW5nRGlzYWJsZSgpKX0sX291dGxpZXJzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5pZ25vcmVZT3V0bGllcnModGhpcy5pZ25vcmVZT3V0bGllcnMpfSxfdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHRoaXMudG9vbHRpcFNvcnRpbmdNZXRob2QpfSxnZXRFeHBvcnRlcigpe3JldHVybiBuZXcgYS5MaW5lQ2hhcnRFeHBvcnRlcih0aGlzLiQuY2hhcnRkaXYpfX0pfSkoY3B8fChjcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3Z6LWxpbmUtY2hhcnQyL3Z6LWxpbmUtY2hhcnQyLmh0bWwuanMKUG9seW1lcih7aXM6InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCJ9KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92ei1saW5lLWNoYXJ0Mi9saW5lLWNoYXJ0LWV4cG9ydGVyLmpzCihmdW5jdGlvbihhKXtsZXQgYzsoZnVuY3Rpb24oZyl7Zy5HUk9VUD0iRyI7Zy5ESVY9IkRJViI7Zy5TVkc9IlNWRyI7Zy5URVhUPSJURVhUIn0pKGN8fChjPXt9KSk7Y2xhc3MgZHtjb25zdHJ1Y3RvcihnKXt0aGlzLnVuaXF1ZUlkPTA7dGhpcy5yb290PWd9ZXhwb3J0QXNTdHJpbmcoKXtjb25zdCBnPXRoaXMuY29udmVydCh0aGlzLnJvb3QpO2lmKCFnKXJldHVybiIiO2NvbnN0IGw9dGhpcy5jcmVhdGVSb290U3ZnKCk7bC5hcHBlbmRDaGlsZChnKTtyZXR1cm4gbC5vdXRlckhUTUx9Y3JlYXRlVW5pcXVlSWQoKXtyZXR1cm5gJHsiY2xpcCJ9XyR7dGhpcy51bmlxdWVJZCsrfWB9Z2V0U2l6ZSgpe3JldHVybiB0aGlzLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y3JlYXRlUm9vdFN2Zygpe2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3ZnIiksbD10aGlzLmdldFNpemUoKTtnLnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7bC53aWR0aH0gJHtsLmhlaWdodH1gKTsKZy5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKTtyZXR1cm4gZ31jb252ZXJ0KGcpe2xldCBsPW51bGw7dmFyIGs9Zy5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO2lmKGcubm9kZVR5cGUhPU5vZGUuRUxFTUVOVF9OT0RFfHxrIT1jLkRJViYmayE9Yy5TVkcpbD1nLmNsb25lTm9kZSgpO2Vsc2V7bD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMuR1JPVVApO3ZhciBuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGcpLHA9cGFyc2VJbnQobi5sZWZ0LDEwKSxxPXBhcnNlSW50KG4udG9wLDEwKTtpZihwfHxxKWs9dGhpcy5jcmVhdGVVbmlxdWVJZCgpLGwuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtwfSwgJHtxfSlgKSxsLnNldEF0dHJpYnV0ZSgiY2xpcC1wYXRoIixgdXJsKCMke2t9KWApLHE9cGFyc2VJbnQobi5oZWlnaHQsMTApLHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicmVjdCIpLHAuc2V0QXR0cmlidXRlKCJ3aWR0aCIsClN0cmluZyhwYXJzZUludChuLndpZHRoLDEwKSkpLHAuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhxKSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIiksbi5pZD1rLG4uYXBwZW5kQ2hpbGQocCksbC5hcHBlbmRDaGlsZChuKX1BcnJheS5mcm9tKGcuY2hpbGROb2RlcykubWFwKHI9PnRoaXMuY29udmVydChyKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2gocj0+bC5hcHBlbmRDaGlsZChyKSk7cmV0dXJuIGwubm9kZU5hbWUudG9VcHBlckNhc2UoKT09Yy5HUk9VUCYmIWwuaGFzQ2hpbGROb2RlcygpfHx0aGlzLnNob3VsZE9taXROb2RlKGcpP251bGw6dGhpcy5zdHJpcENsYXNzKHRoaXMudHJhbnNmZXJTdHlsZShnLGwpKX1zdHJpcENsYXNzKGcpe2cubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZnLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKTtyZXR1cm4gZ310cmFuc2ZlclN0eWxlKGcsbCl7aWYobC5ub2RlVHlwZSE9Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGw7CmNvbnN0IGs9bC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO2c9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZyk7az09Yy5URVhUJiZPYmplY3QuYXNzaWduKGwuc3R5bGUse2ZvbnRGYW1pbHk6Zy5mb250RmFtaWx5LGZvbnRTaXplOmcuZm9udFNpemUsZm9udFdlaWdodDpnLmZvbnRXZWlnaHR9KTtrIT1jLkdST1VQJiYobC5zZXRBdHRyaWJ1dGUoImZpbGwiLGcuZmlsbCksbC5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsZy5zdHJva2UpLGwuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGcuc3Ryb2tlV2lkdGgpKTsiMSIhPWcub3BhY2l0eSYmbC5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLGcub3BhY2l0eSk7cmV0dXJuIGx9c2hvdWxkT21pdE5vZGUoKXtyZXR1cm4hMX19YS5QbG90dGFibGVFeHBvcnRlcj1kO2NsYXNzIGYgZXh0ZW5kcyBke3Nob3VsZE9taXROb2RlKGcpe3JldHVybiBnLm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT9nLmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6CiExfX1hLkxpbmVDaGFydEV4cG9ydGVyPWZ9KShjcHx8KGNwPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLmh0bWwuanMKKGZ1bmN0aW9uKCl7Y29uc3QgYT1bXSxjPWZ1bmN0aW9uKCl7cmV0dXJuIF8udGhyb3R0bGUoZnVuY3Rpb24gZigpe2lmKDAhPWEubGVuZ3RoKXt2YXIgZz1hLnNoaWZ0KCk7Zy5hY3RpdmUmJihnLnJlZHJhdygpLGcuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSExKTt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoMCk7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmKX19LDEwMCl9KCk7UG9seW1lcih7aXM6InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiLHByb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0sZGF0YVNlcmllczpBcnJheSxyZXF1ZXN0TWFuYWdlcjpPYmplY3QsbG9nU2NhbGVBY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvZ1NjYWxlQ2hhbmdlZCJ9LHhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q6T2JqZWN0LHhUeXBlOlN0cmluZyx5VmFsdWVBY2Nlc3NvcjpPYmplY3QsZmlsbEFyZWE6T2JqZWN0LApzbW9vdGhpbmdFbmFibGVkOkJvb2xlYW4sc21vb3RoaW5nV2VpZ2h0Ok51bWJlcix0b29sdGlwQ29sdW1uczpBcnJheSx0b29sdGlwU29ydGluZ01ldGhvZDpTdHJpbmcsdG9vbHRpcFBvc2l0aW9uOlN0cmluZyxpZ25vcmVZT3V0bGllcnM6Qm9vbGVhbixkZWZhdWx0WFJhbmdlOkFycmF5LGRlZmF1bHRZUmFuZ2U6QXJyYXksc3ltYm9sRnVuY3Rpb246T2JqZWN0LGNvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4oe3NjYWxlOlhvLnJ1bnNDb2xvclNjYWxlfSl9LF9yZXNldERvbWFpbk9uTmV4dExvYWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfX0sYmVoYXZpb3JzOltVby5EYXRhTG9hZGVyQmVoYXZpb3JdLG9ic2VydmVyczpbIl9kYXRhU2VyaWVzQ2hhbmdlZChkYXRhU2VyaWVzLiopIiwiX2xvYWRLZXlDaGFuZ2VkKGxvYWRLZXkpIl0sb25Mb2FkRmluaXNoKCl7MDwKdGhpcy5kYXRhVG9Mb2FkLmxlbmd0aCYmdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkJiYodGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSExLHRoaXMuJC5jaGFydC5yZXNldERvbWFpbigpKTt0aGlzLnJlZHJhdygpfSxkZXRhY2hlZCgpe2NhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlZHJhd1JhZil9LGV4cG9ydEFzU3ZnU3RyaW5nKCl7cmV0dXJuIHRoaXMuJC5jaGFydC5nZXRFeHBvcnRlcigpLmV4cG9ydEFzU3RyaW5nKCl9LHJlc2V0RG9tYWluKCl7dGhpcy4kLmNoYXJ0LnJlc2V0RG9tYWluKCl9LHNldFNlcmllc0RhdGEoZCxmKXt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShkLGYpfSxzZXRTZXJpZXNNZXRhZGF0YShkLGYpe3RoaXMuJC5jaGFydC5zZXRTZXJpZXNNZXRhZGF0YShkLGYpfSxyZWRyYXcoKXtjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpO3RoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5hY3RpdmU/CnRoaXMuJC5jaGFydC5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfSxfbG9hZEtleUNoYW5nZWQoKXt0aGlzLnJlc2V0KCk7dGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwfSxfZGF0YVNlcmllc0NoYW5nZWQoKXt0aGlzLiQuY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLmRhdGFTZXJpZXMpfSxfbG9nU2NhbGVDaGFuZ2VkKGQpe3RoaXMuJC5jaGFydC55U2NhbGVUeXBlPWQ/ImxvZyI6ImxpbmVhciI7dGhpcy5yZWRyYXcoKX0sX2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKGEucHVzaCh0aGlzKSxjKCkpfSxfb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLWRpYWxvZy1zY3JvbGxhYmxlL3BhcGVyLWRpYWxvZy1zY3JvbGxhYmxlLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlIixwcm9wZXJ0aWVzOntkaWFsb2dFbGVtZW50Ont0eXBlOk9iamVjdH19LGdldCBzY3JvbGxUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLnNjcm9sbGFibGV9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlVGFyZ2V0KCk7dGhpcy5jbGFzc0xpc3QuYWRkKCJuby1wYWRkaW5nIil9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlVGFyZ2V0KCk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUuYmluZCh0aGlzKSl9LHVwZGF0ZVNjcm9sbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDbGFzcygiaXMtc2Nyb2xsZWQiLDA8dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wKTt0aGlzLnRvZ2dsZUNsYXNzKCJjYW4tc2Nyb2xsIix0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ8dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsSGVpZ2h0KTt0aGlzLnRvZ2dsZUNsYXNzKCJzY3JvbGxlZC10by1ib3R0b20iLAp0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7KHRoaXMuZGlhbG9nRWxlbWVudD10aGlzLmRpYWxvZ0VsZW1lbnR8fHRoaXMucGFyZW50RWxlbWVudCkmJnRoaXMuZGlhbG9nRWxlbWVudC5iZWhhdmlvcnMmJjA8PXRoaXMuZGlhbG9nRWxlbWVudC5iZWhhdmlvcnMuaW5kZXhPZihQb2x5bWVyLlBhcGVyRGlhbG9nQmVoYXZpb3JJbXBsKT8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1tYXJrZG93bi12aWV3L3RmLW1hcmtkb3duLXZpZXcuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtbWFya2Rvd24tdmlldyIscHJvcGVydGllczp7aHRtbDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxhdHRhY2hlZCgpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQubWFya2Rvd24sITApfSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtY2FyZC1oZWFkaW5nL3V0aWwuanMKdmFyIGRwOyhmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQpe2lmKCFkKXJldHVybiBudWxsO2xldCBmPWQubWF0Y2goL14jKFswLTlhLWZdezEsMn0pKFswLTlhLWZdezEsMn0pKFswLTlhLWZdezEsMn0pJC8pO2lmKCFmKXJldHVybiBudWxsO2lmKDQ9PWQubGVuZ3RoKWZvcihkPTE7Mz49ZDtkKyspZltkXSs9ZltkXTtyZXR1cm5bcGFyc2VJbnQoZlsxXSwxNikscGFyc2VJbnQoZlsyXSwxNikscGFyc2VJbnQoZlszXSwxNildfWEuZm9ybWF0RGF0ZT1mdW5jdGlvbihkKXtyZXR1cm4gZD9kLnRvU3RyaW5nKCkucmVwbGFjZSgvR01ULVxkKyBcKChbXildKylcKS8sIiQxIik6IiJ9O2EucGlja1RleHRDb2xvcj1mdW5jdGlvbihkKXtyZXR1cm4oZD1jKGQpKT8xMjU8TWF0aC5yb3VuZCgoMjk5KmRbMF0rNTg3KmRbMV0rMTE0KmRbMl0pLzFFMyk/ImluaGVyaXQiOiIjZWVlIjoiaW5oZXJpdCJ9fSkoZHB8fChkcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWNhcmQtaGVhZGluZy90Zi1jYXJkLWhlYWRpbmcuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtY2FyZC1oZWFkaW5nIixwcm9wZXJ0aWVzOntkaXNwbGF5TmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sdGFnOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxydW46e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGRlc2NyaXB0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxjb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX3J1bkJhY2tncm91bmQ6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9LF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9LF9uYW1lTGFiZWw6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZU5hbWVMYWJlbChkaXNwbGF5TmFtZSwgdGFnKSJ9LF90YWdMYWJlbDp7dHlwZTpTdHJpbmcsCmNvbXB1dGVkOiJfY29tcHV0ZVRhZ0xhYmVsKGRpc3BsYXlOYW1lLCB0YWcpIn19LF91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfSxfY29tcHV0ZVJ1bkJhY2tncm91bmQoYSl7cmV0dXJuIGF8fCJub25lIn0sX2NvbXB1dGVSdW5Db2xvcihhKXtyZXR1cm4gZHAucGlja1RleHRDb2xvcihhKX0sX2NvbXB1dGVOYW1lTGFiZWwoYSxjKXtyZXR1cm4gYXx8Y3x8IiJ9LF9jb21wdXRlVGFnTGFiZWwoYSxjKXtyZXR1cm4gYyYmYyE9PWE/YzoiIn0sX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nKGEpe3RoaXMuJC5kZXNjcmlwdGlvbkRpYWxvZy5wb3NpdGlvblRhcmdldD1hLnRhcmdldDt0aGlzLiQuZGVzY3JpcHRpb25EaWFsb2cudG9nZ2xlKCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZGFzaGJvYXJkLWNvbW1vbi90Zi1kb3dubG9hZGVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWRvd25sb2FkZXIiLHByb3BlcnRpZXM6e19ydW46e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxydW5zOkFycmF5LHRhZzpTdHJpbmcsdXJsRm46RnVuY3Rpb259LF9jc3ZVcmwoYSxjLGQpe3JldHVybiBjP1FvLmFkZFBhcmFtcyhkKGEsYykse2Zvcm1hdDoiY3N2In0pOiIifSxfanNvblVybChhLGMsZCl7cmV0dXJuIGM/ZChhLGMpOiIifSxfY3N2TmFtZShhLGMpe3JldHVybiBjP2BydW4tJHtjfS10YWctJHthfS5jc3ZgOiIifSxfanNvbk5hbWUoYSxjKXtyZXR1cm4gYz9gcnVuLSR7Y30tdGFnLSR7YX0uanNvbmA6IiJ9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtc2NhbGFyLWRhc2hib2FyZC90Zi1zY2FsYXItY2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1zY2FsYXItY2FyZCIscHJvcGVydGllczp7dGFnOlN0cmluZyxkYXRhVG9Mb2FkOkFycmF5LHhUeXBlOlN0cmluZyxhY3RpdmU6Qm9vbGVhbixpZ25vcmVZT3V0bGllcnM6Qm9vbGVhbixyZXF1ZXN0TWFuYWdlcjpPYmplY3Qsc2hvd0Rvd25MaW5rczpCb29sZWFuLHNtb290aGluZ0VuYWJsZWQ6Qm9vbGVhbixzbW9vdGhpbmdXZWlnaHQ6TnVtYmVyLHRhZ01ldGFkYXRhOk9iamVjdCxjb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSx0b29sdGlwU29ydGluZ01ldGhvZDpTdHJpbmcsX2xvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKGEsYyxkKT0+e2Q9ZC5tYXAoZz0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMUUzKmdbMF0pLHN0ZXA6Z1sxXSxzY2FsYXI6Z1syXX0pKTtjb25zdCBmPXRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oYyk7YS5zZXRTZXJpZXNNZXRhZGF0YShmLGMpO2Euc2V0U2VyaWVzRGF0YShmLApkKX19LHJlYWRPbmx5OiEwfSxnZXREYXRhTG9hZFVybDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybih7dGFnOmEscnVuOmN9KT0+UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOmEscnVuOmN9KSl9fSxfZG93bmxvYWRVcmxGbjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihhLGMpPT50aGlzLmdldERhdGFMb2FkVXJsKHt0YWc6YSxydW46Y30pfX0scmVxdWVzdERhdGE6RnVuY3Rpb24sX2dldERhdGFMb2FkTmFtZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBhPT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKGEpfX0sX2V4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfbG9nU2NhbGVBY3RpdmU6Qm9vbGVhbixfdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtjb25zdCBhPQpjcC5ERUZBVUxUX1RPT0xUSVBfQ09MVU1OUy5zbGljZSgpLGM9YS5maW5kSW5kZXgoZD0+Ik5hbWUiPT1kLnRpdGxlKTthLnNwbGljZShjLDEse3RpdGxlOiJOYW1lIixldmFsdWF0ZTpkPT57ZD1kLmRhdGFzZXQubWV0YWRhdGEoKS5tZXRhO3JldHVybiB0aGlzLl9nZXRTZXJpZXNEaXNwbGF5TmFtZUZyb21EYXR1bShkKX19KTtyZXR1cm4gYX19fSxyZWxvYWQoKXt0aGlzLiQkKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIikucmVsb2FkKCl9LHJlZHJhdygpe3RoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWRyYXcoKX0sX3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKTt0aGlzLnJlZHJhdygpfSxfdG9nZ2xlTG9nU2NhbGUoKXt0aGlzLnNldCgiX2xvZ1NjYWxlQWN0aXZlIiwhdGhpcy5fbG9nU2NhbGVBY3RpdmUpfSxfcmVzZXREb21haW4oKXtjb25zdCBhPXRoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKTsKYSYmYS5yZXNldERvbWFpbigpfSxfdXBkYXRlRG93bmxvYWRMaW5rKCl7Y29uc3QgYT10aGlzLiQkKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIikuZXhwb3J0QXNTdmdTdHJpbmcoKTt0aGlzLiQkKCIjc3ZnTGluayIpLmhyZWY9YGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJHtidG9hKGEpfWB9LF9ydW5zRnJvbURhdGEoYSl7cmV0dXJuIGEubWFwKGM9PmMucnVuKX0sX2dldERhdGFTZXJpZXMoKXtyZXR1cm4gdGhpcy5kYXRhVG9Mb2FkLm1hcChhPT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKGEpKX0sX2dldFNlcmllc05hbWVGcm9tRGF0dW0oe3J1bjphLGV4cGVyaW1lbnQ6Yz17bmFtZToiX2RlZmF1bHQifX0pe3JldHVybiBKU09OLnN0cmluZ2lmeShbYy5uYW1lLGFdKX0sX2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKGEpe3JldHVybiBhLnJ1bn0sX2dldENvbG9yU2NhbGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuY29sb3JTY2FsZT90aGlzLmNvbG9yU2NhbGU6CntzY2FsZTphPT57WyxhXT1KU09OLnBhcnNlKGEpO3JldHVybiBYby5ydW5zQ29sb3JTY2FsZShhKX19fX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tcmFuZ2UtYmVoYXZpb3IvaXJvbi1yYW5nZS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvblJhbmdlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oYSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoYSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChhKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oYSl7YT1wYXJzZUZsb2F0KGEpOwppZighdGhpcy5zdGVwKXJldHVybiBhO2E9TWF0aC5yb3VuZCgoYS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gMT50aGlzLnN0ZXA/YS8oMS90aGlzLnN0ZXApK3RoaXMubWluOmEqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7dGhpcy52YWx1ZT10aGlzLm9sZFZhbHVlPWlzTmFOKGEpP3RoaXMub2xkVmFsdWU6YTtyZXR1cm4gdGhpcy52YWx1ZSE9PWF9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCk7dGhpcy5fc2V0UmF0aW8oMTAwKnRoaXMuX2NhbGNSYXRpbyh0aGlzLnZhbHVlKSl9fTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1wcm9ncmVzcy9wYXBlci1wcm9ncmVzcy5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1wcm9ncmVzcyIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25SYW5nZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oYSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsCmEsdGhpcy4kLnByaW1hcnlQcm9ncmVzcyl9LF90cmFuc2Zvcm1Qcm9ncmVzczpmdW5jdGlvbihhLGMpe2Euc3R5bGUudHJhbnNmb3JtPWEuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJzY2FsZVgoIitjLzEwMCsiKSJ9LF9tYWluUmF0aW9DaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuX3RyYW5zZm9ybVByb2dyZXNzKHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MsYSl9LF9wcm9ncmVzc0NoYW5nZWQ6ZnVuY3Rpb24oYSxjLGQsZixnKXthPXRoaXMuX2NsYW1wVmFsdWUoYSk7Yz10aGlzLl9jbGFtcFZhbHVlKGMpO3ZhciBsPTEwMCp0aGlzLl9jYWxjUmF0aW8oYSksaz0xMDAqdGhpcy5fY2FsY1JhdGlvKGMpO3RoaXMuX3NldFNlY29uZGFyeVJhdGlvKGwpO3RoaXMuX3RyYW5zZm9ybVByb2dyZXNzKHRoaXMuJC5zZWNvbmRhcnlQcm9ncmVzcyxsKTt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGspO3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9YTtnP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iik6CnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixjKTt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsZCk7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLGYpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixhPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihhKXtyZXR1cm4gMD09PWF9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItc2xpZGVyL3BhcGVyLXNsaWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1zbGlkZXIiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcixQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yLFBvbHltZXIuUGFwZXJJbmt5Rm9jdXNCZWhhdmlvcixQb2x5bWVyLklyb25SYW5nZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOntzbmFwczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0scGluOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWNvbmRhcnlQcm9ncmVzc0NoYW5nZWQifSxlZGl0YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbW1lZGlhdGVWYWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMCxub3RpZnk6ITB9LG1heE1hcmtlcnM6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxleHBhbmQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH0sCmlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0sCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5pZ25vcmVCYXJUb3VjaCYmUG9seW1lci5HZXN0dXJlcy5zZXRUb3VjaEFjdGlvbih0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGEsYyxkKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsYyk7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLGQpO3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixhKTt0aGlzLl9wb3NpdGlvbktub2IoMTAwKnRoaXMuX2NhbGNSYXRpbyhhKSl9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoInZhbHVlLWNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbW1lZGlhdGVWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nPwp0aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKTt0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGEpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oYSkpKTt0aGlzLl9zZXRSYXRpbygxMDAqdGhpcy5fY2FsY1JhdGlvKHRoaXMuaW1tZWRpYXRlVmFsdWUpKTt0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiO3RoaXMuZHJhZ2dpbmcmJgoodGhpcy5fa25vYnN0YXJ0eD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMudHJhbnNsYXRlM2QoMCwwLDAsdGhpcy4kLnNsaWRlcktub2IpKX0sX2NhbGNLbm9iUG9zaXRpb246ZnVuY3Rpb24oYSl7cmV0dXJuKHRoaXMubWF4LXRoaXMubWluKSphLzEwMCt0aGlzLm1pbn0sX29uVHJhY2s6ZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKTtzd2l0Y2goYS5kZXRhaWwuc3RhdGUpe2Nhc2UgInN0YXJ0Ijp0aGlzLl90cmFja1N0YXJ0KGEpO2JyZWFrO2Nhc2UgInRyYWNrIjp0aGlzLl90cmFja1goYSk7YnJlYWs7Y2FzZSAiZW5kIjp0aGlzLl90cmFja0VuZCgpfX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKTt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dGhpcy5fa25vYnN0YXJ0eD10aGlzLl9zdGFydHg9dGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwO3RoaXMuX21pbng9LXRoaXMuX3N0YXJ0eDt0aGlzLl9tYXh4PQp0aGlzLl93LXRoaXMuX3N0YXJ0eDt0aGlzLiQuc2xpZGVyS25vYi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpO3RoaXMuX3NldERyYWdnaW5nKCEwKX0sX3RyYWNrWDpmdW5jdGlvbihhKXt0aGlzLmRyYWdnaW5nfHx0aGlzLl90cmFja1N0YXJ0KGEpO3RoaXMuX3g9dGhpcy5fc3RhcnR4K01hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxhLmRldGFpbC5keCoodGhpcy5faXNSVEw/LTE6MSkpKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZSh0aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKSk7dGhpcy50cmFuc2xhdGUzZCh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4KyJweCIsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKX0sX3RyYWNrRW5kOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLnNsaWRlcktub2Iuc3R5bGU7dGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTsKdGhpcy5fc2V0RHJhZ2dpbmcoITEpO3RoaXMuX3Jlc2V0S25vYigpO3RoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZTthLnRyYW5zZm9ybT1hLndlYmtpdFRyYW5zZm9ybT0iIjt0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihhKXt0aGlzLl9leHBhbmRLbm9iKCk7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGEpe3RoaXMuX2FsbG93QmFyRXZlbnQoYSkmJnRoaXMuX29uVHJhY2soYSl9LF9iYXJjbGljazpmdW5jdGlvbihhKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIGM9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjPShhLmRldGFpbC54LWMubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihjPTEwMC1jKTt2YXIgZD10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApO3RoaXMuX3Bvc2l0aW9uS25vYihjKTsKZD09PXRoaXMucmF0aW8mJnRoaXMuX3NldFRyYW5zaXRpbmcoITEpO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9KTthLnByZXZlbnREZWZhdWx0KCk7dGhpcy5mb2N1cygpfSxfYmFyZG93bjpmdW5jdGlvbihhKXt0aGlzLl9hbGxvd0JhckV2ZW50KGEpJiYodGhpcy5kZWJvdW5jZSgiZXhwYW5kS25vYiIsdGhpcy5fZXhwYW5kS25vYiw2MCksdGhpcy5fYmFyY2xpY2soYSkpfSxfa25vYlRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oYSl7YS50YXJnZXQ9PT10aGlzLiQuc2xpZGVyS25vYiYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSl9LF91cGRhdGVNYXJrZXJzOmZ1bmN0aW9uKGEsYyxkLGYpe2Z8fHRoaXMuX3NldE1hcmtlcnMoW10pO2M9TWF0aC5yb3VuZCgoZC1jKS90aGlzLnN0ZXApO2M+YSYmKGM9YSk7aWYoMD5jfHwhaXNGaW5pdGUoYykpYz0wO3RoaXMuX3NldE1hcmtlcnMoQXJyYXkoYykpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3Qua2V5cyhhKS5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGFbY119KS5qb2luKCIgIil9LApfZ2V0Q2xhc3NOYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZXJnZUNsYXNzZXMoe2Rpc2FibGVkOnRoaXMuZGlzYWJsZWQscGluOnRoaXMucGluLHNuYXBzOnRoaXMuc25hcHMscmluZzp0aGlzLmltbWVkaWF0ZVZhbHVlPD10aGlzLm1pbixleHBhbmQ6dGhpcy5leHBhbmQsZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZyx0cmFuc2l0aW5nOnRoaXMudHJhbnNpdGluZyxlZGl0YWJsZTp0aGlzLmVkaXRhYmxlfSl9LF9hbGxvd0JhckV2ZW50OmZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLmlnbm9yZUJhclRvdWNofHxhLmRldGFpbC5zb3VyY2VFdmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnR9LGdldCBfaXNSVEwoKXt2b2lkIDA9PT10aGlzLl9faXNSVEwmJih0aGlzLl9faXNSVEw9InJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb24pO3JldHVybiB0aGlzLl9faXNSVEx9LF9sZWZ0S2V5OmZ1bmN0aW9uKGEpe3RoaXMuX2lzUlRMP3RoaXMuX2luY3JlbWVudEtleShhKToKdGhpcy5fZGVjcmVtZW50S2V5KGEpfSxfcmlnaHRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5faXNSVEw/dGhpcy5fZGVjcmVtZW50S2V5KGEpOnRoaXMuX2luY3JlbWVudEtleShhKX0sX2luY3JlbWVudEtleTpmdW5jdGlvbihhKXt0aGlzLmRpc2FibGVkfHwoImVuZCI9PT1hLmRldGFpbC5rZXk/dGhpcy52YWx1ZT10aGlzLm1heDp0aGlzLmluY3JlbWVudCgpLHRoaXMuZmlyZSgiY2hhbmdlIiksYS5wcmV2ZW50RGVmYXVsdCgpKX0sX2RlY3JlbWVudEtleTpmdW5jdGlvbihhKXt0aGlzLmRpc2FibGVkfHwoImhvbWUiPT09YS5kZXRhaWwua2V5P3RoaXMudmFsdWU9dGhpcy5taW46dGhpcy5kZWNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGEucHJldmVudERlZmF1bHQoKSl9LF9jaGFuZ2VWYWx1ZTpmdW5jdGlvbihhKXt0aGlzLnZhbHVlPWEudGFyZ2V0LnZhbHVlO3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2lucHV0S2V5RG93bjpmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSwKX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3RoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuc2xpZGVyS25vYjtyZXR1cm4gUG9seW1lci5QYXBlcklua3lGb2N1c0JlaGF2aW9ySW1wbC5fY3JlYXRlUmlwcGxlLmNhbGwodGhpcyl9LF9mb2N1c2VkQ2hhbmdlZDpmdW5jdGlvbihhKXthJiZ0aGlzLmVuc3VyZVJpcHBsZSgpO3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT1hPyIiOiJub25lIix0aGlzLl9yaXBwbGUuaG9sZERvd249YSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtc2NhbGFyLWRhc2hib2FyZC90Zi1zbW9vdGhpbmctaW5wdXQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtc21vb3RoaW5nLWlucHV0Iixwcm9wZXJ0aWVzOntzdGVwOk51bWJlcixtYXg6TnVtYmVyLG1pbjpOdW1iZXIsd2VpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTouNixub3RpZnk6ITB9LF9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcjp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJDaGFuZ2VkIn0sX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Q2hhbmdlZCJ9fSxfdXBkYXRlV2VpZ2h0Ol8uZGVib3VuY2UoZnVuY3Rpb24oYSl7dGhpcy53ZWlnaHQ9YX0sMjUwKSxfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PXRoaXMuX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyLnRvU3RyaW5nKCk7CnRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfSxfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Q2hhbmdlZDpmdW5jdGlvbigpezA+K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD90aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ9IjAiOjE8K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCYmKHRoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMSIpO3ZhciBhPSt0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ7aXNOYU4oYSl8fHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsYSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtc2NhbGFyLWRhc2hib2FyZC90Zi1zY2FsYXItZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXNjYWxhci1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19zaG93RG93bmxvYWRMaW5rczp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTpUby5nZXRCb29sZWFuSW5pdGlhbGl6ZXIoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSxfc21vb3RoaW5nV2VpZ2h0Ont0eXBlOk51bWJlcixub3RpZnk6ITAsdmFsdWU6VG8uZ2V0TnVtYmVySW5pdGlhbGl6ZXIoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KSxvYnNlcnZlcjoiX3Ntb290aGluZ1dlaWdodE9ic2VydmVyIn0sX3Ntb290aGluZ0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVTbW9vdGhpbmdFbmFibGVkKF9zbW9vdGhpbmdXZWlnaHQpIn0sX2lnbm9yZVlPdXRsaWVyczp7dHlwZTpCb29sZWFuLHZhbHVlOlRvLmdldEJvb2xlYW5Jbml0aWFsaXplcigiX2lnbm9yZVlPdXRsaWVycyIsCntkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSksb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9LF94VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6JG8uWFR5cGUuU1RFUH0sX3NlbGVjdGVkUnVuczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX2dldENhdGVnb3J5SXRlbUtleTp7dHlwZTpGdW5jdGlvbix2YWx1ZTooKT0+YT0+YS50YWd9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5SZXF1ZXN0TWFuYWdlcig1MCl9fSxiZWhhdmlvcnM6W1VvLkFycmF5VXBkYXRlSGVscGVyXSxvYnNlcnZlcnM6WyJfdXBkYXRlQ2F0ZWdvcmllcyhfcnVuVG9UYWdJbmZvLCBfc2VsZWN0ZWRSdW5zLCBfdGFnRmlsdGVyLCBfY2F0ZWdvcmllc0RvbVJlYWR5KSJdLApfc2hvd0Rvd25sb2FkTGlua3NPYnNlcnZlcjpUby5nZXRCb29sZWFuT2JzZXJ2ZXIoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSxfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXI6VG8uZ2V0TnVtYmVyT2JzZXJ2ZXIoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KSxfaWdub3JlWU91dGxpZXJzT2JzZXJ2ZXI6VG8uZ2V0Qm9vbGVhbk9ic2VydmVyKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLF9jb21wdXRlU21vb3RoaW5nRW5hYmxlZChhKXtyZXR1cm4gMDxhfSxfZ2V0Q2F0ZWdvcnlLZXkoYSl7cmV0dXJuIGEubWV0YWRhdGEudHlwZT09Um8uQ2F0ZWdvcnlUeXBlLlNFQVJDSF9SRVNVTFRTPyIiOmEubmFtZX0sX3Nob3VsZE9wZW4oYSl7cmV0dXJuIDI+PWF9LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+Cnt0aGlzLl9yZWxvYWRDaGFydHMoKX0pfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZj0+T2JqZWN0LmtleXMoZikpO2Q9UW8uZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZENoYXJ0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goYT0+e2EucmVsb2FkKCl9KX0sX3VwZGF0ZUNhdGVnb3JpZXMoYSxjLGQpe2E9Xy5tYXBWYWx1ZXMoYSxmPT5PYmplY3Qua2V5cyhmKSk7CmM9Um8uY2F0ZWdvcml6ZVRhZ3MoYSxjLGQpO2MuZm9yRWFjaChmPT57Zi5pdGVtcz1mLml0ZW1zLm1hcChnPT4oe3RhZzpnLnRhZyxzZXJpZXM6Zy5ydW5zLm1hcChsPT4oe3J1bjpsLHRhZzpnLnRhZ30pKX0pKX0pO3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsYyx0aGlzLl9nZXRDYXRlZ29yeUtleSl9LF90YWdNZXRhZGF0YShhLGMsZCl7Y29uc3QgZj1kLnRhZyxnPXt9O2Quc2VyaWVzLmZvckVhY2goKHtydW46bn0pPT57Z1tuXT1jW25dW2ZdfSk7ZD1mLnJlcGxhY2UoL1wvc2NhbGFyX3N1bW1hcnkkLywiIik7bGV0IHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmt9PVpvLmFnZ3JlZ2F0ZVRhZ0luZm8oZyxkKTthLm1ldGFkYXRhLnR5cGU9PVJvLkNhdGVnb3J5VHlwZS5QUkVGSVhfR1JPVVAmJmsuc3RhcnRzV2l0aChhLm5hbWUrIi8iKSYmKGs9ay5zbGljZShhLm5hbWUubGVuZ3RoKzEpKTtyZXR1cm57ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTprfX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZC90Zi1jdXN0b20tc2NhbGFyLWhlbHBlcnMuanMKdmFyIGVwOwooZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihmLGcsbCxrLG4pe3RoaXMucnVuPWY7dGhpcy50YWc9Zzt0aGlzLm5hbWU9bDt0aGlzLnNjYWxhckRhdGE9azt0aGlzLnN5bWJvbD1ufWdldE5hbWUoKXtyZXR1cm4gdGhpcy5uYW1lfXNldERhdGEoZil7dGhpcy5zY2FsYXJEYXRhPWZ9Z2V0RGF0YSgpe3JldHVybiB0aGlzLnNjYWxhckRhdGF9Z2V0UnVuKCl7cmV0dXJuIHRoaXMucnVufWdldFRhZygpe3JldHVybiB0aGlzLnRhZ31nZXRTeW1ib2woKXtyZXR1cm4gdGhpcy5zeW1ib2x9fWEuRGF0YVNlcmllcz1jO2EuZ2VuZXJhdGVEYXRhU2VyaWVzTmFtZT1mdW5jdGlvbihmLGcpe3JldHVybmAke2d9ICgke2Z9KWB9O2NsYXNzIGR7Y29uc3RydWN0b3IoZil7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9Zn1zY2FsZShmKXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUoZikpfXBhcnNlUnVuTmFtZShmKXtyZXR1cm4oZj1mLm1hdGNoKC9cKCguKilcKSQvKSk/CmZbMV06IiJ9fWEuRGF0YVNlcmllc0NvbG9yU2NhbGU9ZH0pKGVwfHwoZXA9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZC90Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXkseFR5cGU6U3RyaW5nLGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLHJlYWRPbmx5OiEwfSx0aXRsZTpTdHJpbmcsbWFyZ2luQ2hhcnRTZXJpZXM6QXJyYXksaWdub3JlWU91dGxpZXJzOkJvb2xlYW4scmVxdWVzdE1hbmFnZXI6T2JqZWN0LHNob3dEb3dubG9hZExpbmtzOkJvb2xlYW4sdGFnTWV0YWRhdGE6T2JqZWN0LHRvb2x0aXBTb3J0aW5nTWV0aG9kOlN0cmluZyxfY29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6bmV3IGVwLkRhdGFTZXJpZXNDb2xvclNjYWxlKHtzY2FsZTpYby5ydW5zQ29sb3JTY2FsZX0pLHJlYWRPbmx5OiEwfSxfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIobWFyZ2luQ2hhcnRTZXJpZXMpIn0sX3RhZ0ZpbHRlckludmFsaWQ6Qm9vbGVhbixfbmFtZVRvRGF0YVNlcmllczp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfc2VyaWVzTmFtZXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNlcmllc05hbWVzKF9uYW1lVG9EYXRhU2VyaWVzLCBydW5zKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2xvZ1NjYWxlQWN0aXZlOkJvb2xlYW4sX2RhdGFVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYT0+e2NvbnN0IGM9dGhpcy5fdGFnRmlsdGVyO3JldHVybiBRby5hZGRQYXJhbXMoUW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKSx7dGFnOmMscnVuOmF9KX19fSxfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfbWF0Y2hlc0xpc3RPcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3RpdGxlRGlzcGxheVN0cmluZzp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVGl0bGVEaXNwbGF5U3RyaW5nKHRpdGxlKSJ9LApfZmlsbEFyZWE6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLHZhbHVlOntsb3dlckFjY2Vzc29yOmE9PmEubG93ZXIsaGlnaGVyQWNjZXNzb3I6YT0+YS51cHBlcn19LF90b29sdGlwQ29sdW1uczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe2NvbnN0IGE9JG8ubXVsdGlzY2FsZUZvcm1hdHRlcigkby5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTiksYz1kPT5pc05hTihkKT8iTmFOIjphKGQpO3JldHVyblt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmQ9PmQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiVmFsdWUiLGV2YWx1YXRlOmQ9PmMoZC5kYXR1bS5zY2FsYXIpfSx7dGl0bGU6Ikxvd2VyIE1hcmdpbiIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLmxvd2VyKX0se3RpdGxlOiJVcHBlciBNYXJnaW4iLGV2YWx1YXRlOmQ9PmMoZC5kYXR1bS51cHBlcil9LHt0aXRsZToiU3RlcCIsZXZhbHVhdGU6ZD0+JG8uc3RlcEZvcm1hdHRlcihkLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLApldmFsdWF0ZTpkPT4kby50aW1lRm9ybWF0dGVyKGQuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZD0+JG8ucmVsYXRpdmVGb3JtYXR0ZXIoJG8ucmVsYXRpdmVBY2Nlc3NvcihkLmRhdHVtLC0xLGQuZGF0YXNldCkpfV19fSxfbWlzc2luZ1RhZ3M6e3R5cGU6QXJyYXksdmFsdWU6W119LF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9zdGVwc01pc21hdGNoOk9iamVjdH0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUNoYXJ0KF9uYW1lVG9EYXRhU2VyaWVzKSIsIl9yZWZyZXNoRGF0YVNlcmllcyhfdGFnRmlsdGVyKSJdLHJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9LHJlZHJhdygpe3RoaXMuJC5sb2FkZXIucmVkcmF3KCl9LF90b2dnbGVFeHBhbmRlZCgpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsCiF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9LF9yZXNldERvbWFpbigpe2NvbnN0IGE9dGhpcy4kLmxvYWRlcjthJiZhLnJlc2V0RG9tYWluKCl9LF9jc3ZVcmwoYSxjKXtpZighYylyZXR1cm4iIjthPXRoaXMuX2Rvd25sb2FkRGF0YVVybChhLGMpO3JldHVybiBRby5hZGRQYXJhbXMoYSx7Zm9ybWF0OiJjc3YifSl9LF9qc29uVXJsKGEsYyl7aWYoIWMpcmV0dXJuIiI7YT10aGlzLl9kb3dubG9hZERhdGFVcmwoYSxjKTtyZXR1cm4gUW8uYWRkUGFyYW1zKGEse2Zvcm1hdDoianNvbiJ9KX0sX2Rvd25sb2FkRGF0YVVybChhLGMpe2E9YVtjXTthPXt0YWc6YS5nZXRUYWcoKSxydW46YS5nZXRSdW4oKX07cmV0dXJuIFFvLmFkZFBhcmFtcyhRby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGEpfSxfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihhKXtyZXR1cm4oYyxkLGYpPT57aWYoZi5yZWdleF92YWxpZCl7dmFyIGc9Xy5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSwKbD1bXTtfLmZvckVhY2goYSxrPT57dmFyIG49ITEscD1mLnRhZ190b19ldmVudHNbay52YWx1ZV07Y29uc3QgcT1mLnRhZ190b19ldmVudHNbay5sb3dlcl0scj1mLnRhZ190b19ldmVudHNbay51cHBlcl07Xy5pc1VuZGVmaW5lZChwKSYmKGwucHVzaChrLnZhbHVlKSxuPSEwKTtfLmlzVW5kZWZpbmVkKHEpJiYobC5wdXNoKGsubG93ZXIpLG49ITApO18uaXNVbmRlZmluZWQocikmJihsLnB1c2goay51cHBlciksbj0hMCk7aWYoIW4pe3ZhciB0PXo9PnpbMV07aWYobj10aGlzLl9maW5kU3RlcE1pc21hdGNoKGsscC5tYXAodCkscS5tYXAodCksci5tYXAodCkpKXRoaXMuc2V0KCJfc3RlcHNNaXNtYXRjaCIsbik7ZWxzZXt2YXIgdj16PT56WzJdO249cC5tYXAoKHoseCk9Pih7d2FsbF90aW1lOm5ldyBEYXRlKDFFMyp6WzBdKSxzdGVwOnQoeiksc2NhbGFyOnYoeiksbG93ZXI6dihxW3hdKSx1cHBlcjp2KHJbeF0pfSkpO3A9ZXAuZ2VuZXJhdGVEYXRhU2VyaWVzTmFtZShkLGsudmFsdWUpOwp2YXIgeT1nW3BdO3k/eS5zZXREYXRhKG4pOihrPXRoaXMuX2NyZWF0ZU5ld0RhdGFTZXJpZXMoZCxrLnZhbHVlLHAsbiksZ1twXT1rKX19fSk7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixnKTtjPV8uZmluZEluZGV4KHRoaXMuX21pc3NpbmdUYWdzLGs9PmsucnVuPT09ZCk7aWYobC5sZW5ndGgmJjMhPWwubGVuZ3RoKXtjb25zdCBrPXtydW46ZCx0YWdzOmx9OzA8PWM/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIsYywxLGspOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixrKX1lbHNlIDA8PWMmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLGMsMSl9ZWxzZSB0aGlzLnNldCgiX3RhZ0ZpbHRlckludmFsaWQiLCEwKX19LF9maW5kU3RlcE1pc21hdGNoKGEsYyxkLGYpe3JldHVybiBfLmlzRXF1YWwoZCxjKSYmXy5pc0VxdWFsKGYsYyk/bnVsbDp7c2VyaWVzT2JqZWN0OmEsdmFsdWVTdGVwczpjLGxvd2VyU3RlcHM6ZCx1cHBlclN0ZXBzOmZ9fSxfY3JlYXRlTmV3RGF0YVNlcmllcyhhLApjLGQsZil7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbYV18PTA7Yz1uZXcgZXAuRGF0YVNlcmllcyhhLGMsZCxmLCRvLlNZTUJPTFNfTElTVFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFthXV0pO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2FdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFthXSsxKSUkby5TWU1CT0xTX0xJU1QubGVuZ3RoO3JldHVybiBjfSxfdXBkYXRlQ2hhcnQoYSl7Xy5mb3JPd24oYSxjPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKGMuZ2V0TmFtZSgpLGMuZ2V0RGF0YSgpKX0pfSxfY29tcHV0ZVNlcmllc05hbWVzKCl7Y29uc3QgYT1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoWyxjXSk9PmEuaGFzKGMucnVuKSkubWFwKChbY10pPT5jKX0sX2RldGVybWluZUNvbG9yKGEsYyl7cmV0dXJuIGEuc2NhbGUoYyl9LApfcmVmcmVzaERhdGFTZXJpZXMoKXt0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLHt9KX0sX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIGE9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbYV0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9LF9kZXRlcm1pbmVTeW1ib2woYSxjKXtyZXR1cm4gYVtjXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9LF9jb21wdXRlVGFnRmlsdGVyKGEpe3JldHVybiBfLmZsYXR0ZW4oYS5tYXAoYz0+W2MudmFsdWUsYy5sb3dlcixjLnVwcGVyXSkpLm1hcChjPT4iKCIrdGhpcy5fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKGMpKyIpIikuam9pbigifCIpfSxfZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKGEpe3JldHVybiBhLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCRceDI2Iil9LF9nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwKIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX0sX2NvbXB1dGVUaXRsZURpc3BsYXlTdHJpbmcoYSl7cmV0dXJuIGF8fCJ1bnRpdGxlZCJ9LF9zZXBhcmF0ZVdpdGhDb21tYXMoYSl7cmV0dXJuIGEuam9pbigiLCAiKX0sX3RvZ2dsZU1pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuKCl7dGhpcy5zZXQoIl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkIiwhdGhpcy5fbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCl9LF9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe2NvbnN0IGE9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7YSYmdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChjPT57Y29uc3QgZD1hLml0ZW1Gb3JFbGVtZW50KGMpO2Muc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxkKX0pfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkL3RmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIixwcm9wZXJ0aWVzOntydW5zOkFycmF5LHhUeXBlOlN0cmluZyxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWFkT25seTohMH0sdGl0bGU6U3RyaW5nLHRhZ1JlZ2V4ZXM6QXJyYXksaWdub3JlWU91dGxpZXJzOkJvb2xlYW4scmVxdWVzdE1hbmFnZXI6T2JqZWN0LHNob3dEb3dubG9hZExpbmtzOkJvb2xlYW4sc21vb3RoaW5nRW5hYmxlZDpCb29sZWFuLHNtb290aGluZ1dlaWdodDpOdW1iZXIsdGFnTWV0YWRhdGE6T2JqZWN0LHRvb2x0aXBTb3J0aW5nTWV0aG9kOlN0cmluZyxfY29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6bmV3IGVwLkRhdGFTZXJpZXNDb2xvclNjYWxlKHtzY2FsZTpYby5ydW5zQ29sb3JTY2FsZX0pLHJlYWRPbmx5OiEwfSxfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIodGFnUmVnZXhlcykifSxfbmFtZVRvRGF0YVNlcmllczp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfc2VyaWVzTmFtZXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNlcmllc05hbWVzKF9uYW1lVG9EYXRhU2VyaWVzLCBydW5zKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2xvZ1NjYWxlQWN0aXZlOkJvb2xlYW4sX2RhdGFVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYT0+e2NvbnN0IGM9dGhpcy5fdGFnRmlsdGVyO3JldHVybiBRby5hZGRQYXJhbXMoUW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKSx7dGFnOmMscnVuOmF9KX19fSxfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfbWF0Y2hlc0xpc3RPcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3RpdGxlRGlzcGxheVN0cmluZzp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVGl0bGVEaXNwbGF5U3RyaW5nKHRpdGxlKSJ9fSwKb2JzZXJ2ZXJzOlsiX3VwZGF0ZUNoYXJ0KF9uYW1lVG9EYXRhU2VyaWVzKSIsIl9yZWZyZXNoRGF0YVNlcmllcyhfdGFnRmlsdGVyKSJdLHJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9LHJlZHJhdygpe3RoaXMuJC5sb2FkZXIucmVkcmF3KCl9LF90b2dnbGVFeHBhbmRlZCgpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX0sX3Jlc2V0RG9tYWluKCl7Y29uc3QgYT10aGlzLiQubG9hZGVyO2EmJmEucmVzZXREb21haW4oKX0sX2NzdlVybChhLGMpe2lmKCFjKXJldHVybiIiO2E9dGhpcy5fZG93bmxvYWREYXRhVXJsKGEsYyk7cmV0dXJuIFFvLmFkZFBhcmFtcyhhLHtmb3JtYXQ6ImNzdiJ9KX0sX2pzb25VcmwoYSxjKXtpZighYylyZXR1cm4iIjthPXRoaXMuX2Rvd25sb2FkRGF0YVVybChhLGMpO3JldHVybiBRby5hZGRQYXJhbXMoYSwKe2Zvcm1hdDoianNvbiJ9KX0sX2Rvd25sb2FkRGF0YVVybChhLGMpe2E9YVtjXTthPXt0YWc6YS5nZXRUYWcoKSxydW46YS5nZXRSdW4oKX07cmV0dXJuIFFvLmFkZFBhcmFtcyhRby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGEpfSxfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpe3JldHVybihhLGMsZCk9PntpZihkLnJlZ2V4X3ZhbGlkKXtjb25zdCBmPV8uY2xvbmUodGhpcy5fbmFtZVRvRGF0YVNlcmllcyk7Xy5mb3JPd24oZC50YWdfdG9fZXZlbnRzLChnLGwpPT57Y29uc3Qgaz1nLm1hcChwPT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxRTMqcFswXSksc3RlcDpwWzFdLHNjYWxhcjpwWzJdfSkpO2c9ZXAuZ2VuZXJhdGVEYXRhU2VyaWVzTmFtZShjLGwpO2NvbnN0IG49ZltnXTtuP24uc2V0RGF0YShrKTooXy5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXT0KMCksbD1uZXcgZXAuRGF0YVNlcmllcyhjLGwsZyxrLCRvLlNZTUJPTFNfTElTVFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXV0pLGZbZ109bCx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXT0odGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbY10rMSklJG8uU1lNQk9MU19MSVNULmxlbmd0aCl9KTt0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLGYpfX19LF91cGRhdGVDaGFydChhKXtPYmplY3QuZW50cmllcyhhKS5mb3JFYWNoKChbYyxkXSk9Pnt0aGlzLiQubG9hZGVyLnNldFNlcmllc0RhdGEoYyxkLmdldERhdGEoKSl9KX0sX2NvbXB1dGVTZWxlY3RlZFJ1bnNTZXQoYSl7Y29uc3QgYz17fTtfLmZvckVhY2goYSxkPT57Y1tkXT0xfSk7cmV0dXJuIGN9LF9jb21wdXRlU2VyaWVzTmFtZXMoKXtjb25zdCBhPW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbLApjXSk9PmEuaGFzKGMucnVuKSkubWFwKChbY10pPT5jKX0sX2RldGVybWluZUNvbG9yKGEsYyl7cmV0dXJuIGEuc2NhbGUoYyl9LF9yZWZyZXNoRGF0YVNlcmllcygpe3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfSxfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKXtyZXR1cm4gYT0+dGhpcy5fbmFtZVRvRGF0YVNlcmllc1thXS5nZXRTeW1ib2woKS5tZXRob2QoKX0sX2RldGVybWluZVN5bWJvbChhLGMpe3JldHVybiBhW2NdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn0sX2NvbXB1dGVUYWdGaWx0ZXIoYSl7cmV0dXJuIDE9PT1hLmxlbmd0aD9hWzBdOmEubWFwKGM9PiIoIitjKyIpIikuam9pbigifCIpfSxfZ2V0VG9nZ2xlTWF0Y2hlc0ljb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfSxfY29tcHV0ZVRpdGxlRGlzcGxheVN0cmluZyhhKXtyZXR1cm4gYXx8CiJ1bnRpdGxlZCJ9LF9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe2NvbnN0IGE9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7YSYmdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChjPT57Y29uc3QgZD1hLml0ZW1Gb3JFbGVtZW50KGMpO2Muc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxkKX0pfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkL3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uUmVxdWVzdE1hbmFnZXIoNTApfSxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFFvLkNhbmNlbGxlcn0sX3NlbGVjdGVkUnVuczpBcnJheSxfc2hvd0Rvd25sb2FkTGlua3M6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6VG8uZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0sX3Ntb290aGluZ0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVTbW9vdGhpbmdFbmFibGVkKF9zbW9vdGhpbmdXZWlnaHQpIn0sX3Ntb290aGluZ1dlaWdodDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLHZhbHVlOlRvLmdldE51bWJlckluaXRpYWxpemVyKCJfc21vb3RoaW5nV2VpZ2h0IiwKe2RlZmF1bHRWYWx1ZTouNn0pLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSxfaWdub3JlWU91dGxpZXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6VG8uZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLG9ic2VydmVyOiJfaWdub3JlWU91dGxpZXJzT2JzZXJ2ZXIifSxfeFR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGVwIn0sX2xheW91dDpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX2xheW91dCkifSxfb3BlbmVkQ2F0ZWdvcmllczp7dHlwZTpPYmplY3R9LF9hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWFkT25seTohMH19LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7Y29uc3QgYT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpLGM9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGQ9Pgp7ZC5jYW5jZWxsZWR8fCh0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsIWQudmFsdWUuY3VzdG9tX3NjYWxhcnMpLHRoaXMuX2RhdGFOb3RGb3VuZHx8dGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGMpfSxfcmVsb2FkQ2hhcnRzKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIikuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfcmV0cmlldmVMYXlvdXRBbmREYXRhKCl7Y29uc3QgYT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvbGF5b3V0IiksYz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoZD0+e2QuY2FuY2VsbGVkfHwodGhpcy5zZXQoIl9sYXlvdXQiLGQudmFsdWUpLHRoaXMuX2RhdGFOb3RGb3VuZHx8dGhpcy5fcmVsb2FkQ2hhcnRzKCkpfSk7CnRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjKX0sX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI6VG8uZ2V0Qm9vbGVhbk9ic2VydmVyKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksX3Ntb290aGluZ1dlaWdodE9ic2VydmVyOlRvLmdldE51bWJlck9ic2VydmVyKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSksX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyOlRvLmdldEJvb2xlYW5PYnNlcnZlcigiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KSxfY29tcHV0ZVNtb290aGluZ0VuYWJsZWQoYSl7cmV0dXJuIDA8YX0sX21ha2VDYXRlZ29yaWVzKGEpe2lmKCFhLmNhdGVnb3J5KXJldHVybltdO2xldCBjPSExO3RoaXMuX29wZW5lZENhdGVnb3JpZXN8fChjPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pO3JldHVybiBhLmNhdGVnb3J5Lm1hcChkPT4Ke2MmJiFkLmNsb3NlZCYmKHRoaXMuX29wZW5lZENhdGVnb3JpZXNbZC50aXRsZV09ITApO3JldHVybntuYW1lOmQudGl0bGUsaXRlbXM6ZC5jaGFydCxtZXRhZGF0YTp7b3BlbmVkOiEhdGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tkLnRpdGxlXX19fSl9LF9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQoYSl7YT1hLnRhcmdldDthLm9wZW5lZD90aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2EuY2F0ZWdvcnkubmFtZV09ITA6ZGVsZXRlIHRoaXMuX29wZW5lZENhdGVnb3JpZXNbYS5jYXRlZ29yeS5uYW1lXX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1pbWFnZS1kYXNoYm9hcmQvdGYtaW1hZ2UtbG9hZGVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWltYWdlLWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLHNhbXBsZTpOdW1iZXIsb2ZTYW1wbGVzOk51bWJlcix0YWdNZXRhZGF0YTpPYmplY3QsX3J1bkNvbG9yOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihydW4pIn0sYWN0dWFsU2l6ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sYnJpZ2h0bmVzc0FkanVzdG1lbnQ6e3R5cGU6TnVtYmVyLHZhbHVlOi41fSxjb250cmFzdFBlcmNlbnRhZ2U6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LHJlcXVlc3RNYW5hZ2VyOk9iamVjdCxfbWV0YWRhdGFDYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uQ2FuY2VsbGVyfSxfaW1hZ2VDYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uQ2FuY2VsbGVyfSxfc3RlcHM6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwfSxfc3RlcEluZGV4Ont0eXBlOk51bWJlciwKbm90aWZ5OiEwfSxfY3VycmVudFN0ZXA6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZUN1cnJlbnRTdGVwKF9zdGVwcywgX3N0ZXBJbmRleCkifSxfaGFzQXRMZWFzdE9uZVN0ZXA6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNBdExlYXN0T25lU3RlcChfc3RlcHMpIn0sX2hhc011bHRpcGxlU3RlcHM6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNNdWx0aXBsZVN0ZXBzKF9zdGVwcykifSxfc3RlcFZhbHVlOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVTdGVwVmFsdWUoX2N1cnJlbnRTdGVwKSJ9LF9jdXJyZW50V2FsbFRpbWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUN1cnJlbnRXYWxsVGltZShfY3VycmVudFN0ZXApIn0sX21heFN0ZXBJbmRleDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlTWF4U3RlcEluZGV4KF9zdGVwcykifSxfc2FtcGxlVGV4dDp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlU2FtcGxlVGV4dChzYW1wbGUpIn0sCl9oYXNNdWx0aXBsZVNhbXBsZXM6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNNdWx0aXBsZVNhbXBsZXMob2ZTYW1wbGVzKSJ9LF9pc0ltYWdlTG9hZGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sb2JzZXJ2ZXJzOlsicmVsb2FkKHJ1biwgdGFnKSIsIl91cGRhdGVJbWFnZVVybChfY3VycmVudFN0ZXAsIGJyaWdodG5lc3NBZGp1c3RtZW50LCBjb250cmFzdFBlcmNlbnRhZ2UpIl0sX2NvbXB1dGVSdW5Db2xvcihhKXtyZXR1cm4gWG8ucnVuc0NvbG9yU2NhbGUoYSl9LF9jb21wdXRlSGFzQXRMZWFzdE9uZVN0ZXAoYSl7cmV0dXJuISFhJiYwPGEubGVuZ3RofSxfY29tcHV0ZUhhc011bHRpcGxlU3RlcHMoYSl7cmV0dXJuISFhJiYxPGEubGVuZ3RofSxfY29tcHV0ZUN1cnJlbnRTdGVwKGEsYyl7cmV0dXJuIGFbY118fG51bGx9LF9jb21wdXRlU3RlcFZhbHVlKGEpe3JldHVybiBhP2Euc3RlcDowfSxfY29tcHV0ZUN1cnJlbnRXYWxsVGltZShhKXtyZXR1cm4gYT8KZHAuZm9ybWF0RGF0ZShhLndhbGxfdGltZSk6IiJ9LF9jb21wdXRlTWF4U3RlcEluZGV4KGEpe3JldHVybiBhLmxlbmd0aC0xfSxfY29tcHV0ZVNhbXBsZVRleHQoYSl7cmV0dXJuYCR7YSsxfWB9LF9jb21wdXRlSGFzTXVsdGlwbGVTYW1wbGVzKGEpe3JldHVybiAxPGF9LF9nZXRBcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5hY3R1YWxTaXplPyJ0cnVlIjoiZmFsc2UifSxhdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwO3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe2lmKHRoaXMuX2F0dGFjaGVkKXt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTt2YXIgYT1Rby5hZGRQYXJhbXMoUW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiKSx7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxjPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGQ9PntkLmNhbmNlbGxlZHx8KGQ9ZC52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpLAp0aGlzLnNldCgiX3N0ZXBzIixkKSx0aGlzLnNldCgiX3N0ZXBJbmRleCIsZC5sZW5ndGgtMSkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYyl9fSxfY3JlYXRlU3RlcERhdHVtKGEpe2xldCBjPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJpbWFnZXMiLCIvaW5kaXZpZHVhbEltYWdlIik7Yz1Rby5hZGRQYXJhbXMoYyx7dHM6YS53YWxsX3RpbWV9KTtjKz0iXHgyNiIrYS5xdWVyeTtyZXR1cm57d2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHQsd2FsbF90aW1lOm5ldyBEYXRlKDFFMyphLndhbGxfdGltZSksc3RlcDphLnN0ZXAsdXJsOmN9fSxfdXBkYXRlSW1hZ2VVcmwoYSxjLGQpe2lmKGEpe3ZhciBmPW5ldyBJbWFnZTt0aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxBbGwoKTtmLm9ubG9hZD1mLm9uZXJyb3I9dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsbGFibGUoZz0+e2cuY2FuY2VsbGVkfHwoZz10aGlzLiQkKCIjbWFpbi1pbWFnZS1jb250YWluZXIiKSwKZy5pbm5lckhUTUw9IiIsUG9seW1lci5kb20oZykuYXBwZW5kQ2hpbGQoZiksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpKX0pLmJpbmQodGhpcyk7Zi5zdHlsZS5maWx0ZXI9YGNvbnRyYXN0KCR7ZH0lKSBgO2Yuc3R5bGUuZmlsdGVyKz1gYnJpZ2h0bmVzcygke2N9KWA7dGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITApO2Yuc3JjPWEudXJsfX0sX2hhbmRsZVRhcCgpe3RoaXMuc2V0KCJhY3R1YWxTaXplIiwhdGhpcy5hY3R1YWxTaXplKX0sX3RvTG9jYWxlU3RyaW5nKGEpe3JldHVybiBhLnRvTG9jYWxlU3RyaW5nKCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaW1hZ2UtZGFzaGJvYXJkL3RmLWltYWdlLWRhc2hib2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbWFnZS1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19zZWxlY3RlZFJ1bnM6QXJyYXksX3J1blRvVGFnSW5mbzpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF9hY3R1YWxTaXplOkJvb2xlYW4sX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxyZWFkT25seTohMH0sX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U6e3R5cGU6TnVtYmVyLHZhbHVlOjEwMCxyZWFkT25seTohMH0sX2JyaWdodG5lc3NBZGp1c3RtZW50Ont0eXBlOk51bWJlcix2YWx1ZToxfSxfY29udHJhc3RQZXJjZW50YWdlOnt0eXBlOk51bWJlcix2YWx1ZToxMDB9LF90YWdGaWx0ZXI6U3RyaW5nLF9icmlnaHRuZXNzSXNEZWZhdWx0Ont0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQnJpZ2h0bmVzc0lzRGVmYXVsdChfYnJpZ2h0bmVzc0FkanVzdG1lbnQpIn0sX2NvbnRyYXN0SXNEZWZhdWx0Ont0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQ29udHJhc3RJc0RlZmF1bHQoX2NvbnRyYXN0UGVyY2VudGFnZSkifSwKX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uUmVxdWVzdE1hbmFnZXJ9fSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRJbWFnZXMoKX0pfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9PntpZighXy5pc0VxdWFsKGMsdGhpcy5fcnVuVG9UYWdJbmZvKSl7dmFyIGQ9Xy5tYXBWYWx1ZXMoYyxmPT5PYmplY3Qua2V5cyhmKSk7ZD1Rby5nZXRUYWdzKGQpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwKMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZEltYWdlcygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfcmVzZXRCcmlnaHRuZXNzKCl7dGhpcy5fYnJpZ2h0bmVzc0FkanVzdG1lbnQ9dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fSxfcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfSxfY29tcHV0ZUJyaWdodG5lc3NJc0RlZmF1bHQoYSl7cmV0dXJuIGE9PT10aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnR9LF9jb21wdXRlQ29udHJhc3RJc0RlZmF1bHQoYSl7cmV0dXJuIGE9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfSwKX21ha2VDYXRlZ29yaWVzKGEsYyxkKXtmdW5jdGlvbiBmKGwpe2NvbnN0IGs9YVtsLnJ1bl1bbC50YWddLnNhbXBsZXM7cmV0dXJuIF8ucmFuZ2UoaykubWFwKG49Pk9iamVjdC5hc3NpZ24oe30sbCx7c2FtcGxlOm4sb2ZTYW1wbGVzOmt9KSl9Y29uc3QgZz1fLm1hcFZhbHVlcyhhLGw9Pk9iamVjdC5rZXlzKGwpKTtyZXR1cm4gUm8uY2F0ZWdvcml6ZVJ1blRhZ0NvbWJpbmF0aW9ucyhnLGMsZCkubWFwKGw9Pk9iamVjdC5hc3NpZ24oe30sbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGYpKX0pKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1hdWRpby1kYXNoYm9hcmQvdGYtYXVkaW8tbG9hZGVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWF1ZGlvLWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLHNhbXBsZTpOdW1iZXIsdG90YWxTYW1wbGVzOk51bWJlcix0YWdNZXRhZGF0YTpPYmplY3QsX3J1bkNvbG9yOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihydW4pIn0scmVxdWVzdE1hbmFnZXI6T2JqZWN0LF9tZXRhZGF0YUNhbmNlbGxlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5DYW5jZWxsZXJ9LF9zdGVwczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LF9zdGVwSW5kZXg6TnVtYmVyLF9oYXNBdExlYXN0T25lU3RlcDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUhhc0F0TGVhc3RPbmVTdGVwKF9zdGVwcykifSxfaGFzTXVsdGlwbGVTdGVwczp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUhhc011bHRpcGxlU3RlcHMoX3N0ZXBzKSJ9LF9jdXJyZW50RGF0dW06e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZUN1cnJlbnREYXR1bShfc3RlcHMsIF9zdGVwSW5kZXgpIn0sCl9tYXhTdGVwSW5kZXg6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZU1heFN0ZXBJbmRleChfc3RlcHMpIn0sX3NhbXBsZVRleHQ6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVNhbXBsZVRleHQoc2FtcGxlKSJ9LF9oYXNNdWx0aXBsZVNhbXBsZXM6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNNdWx0aXBsZVNhbXBsZXModG90YWxTYW1wbGVzKSJ9fSxvYnNlcnZlcnM6WyJyZWxvYWQocnVuLCB0YWcpIl0sX2NvbXB1dGVSdW5Db2xvcihhKXtyZXR1cm4gWG8ucnVuc0NvbG9yU2NhbGUoYSl9LF9jb21wdXRlSGFzQXRMZWFzdE9uZVN0ZXAoYSl7cmV0dXJuISFhJiYwPGEubGVuZ3RofSxfY29tcHV0ZUhhc011bHRpcGxlU3RlcHMoYSl7cmV0dXJuISFhJiYxPGEubGVuZ3RofSxfY29tcHV0ZU1heFN0ZXBJbmRleChhKXtyZXR1cm4gYS5sZW5ndGgtMX0sX2NvbXB1dGVDdXJyZW50RGF0dW0oYSxjKXtyZXR1cm4gYVtjXX0sX2NvbXB1dGVTYW1wbGVUZXh0KGEpe3JldHVybmAke2ErCjF9YH0sX2NvbXB1dGVIYXNNdWx0aXBsZVNhbXBsZXMoYSl7cmV0dXJuIDE8YX0sYXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMDt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXtpZih0aGlzLl9hdHRhY2hlZCl7dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7dmFyIGE9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL2F1ZGlvIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLHNhbXBsZTp0aGlzLnNhbXBsZX0pKSxjPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGQ9PntkLmNhbmNlbGxlZHx8KGQ9ZC52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpLHRoaXMuc2V0KCJfc3RlcHMiLGQpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixkLmxlbmd0aC0xKSl9KTt0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjKX19LF9jcmVhdGVTdGVwRGF0dW0oYSl7dmFyIGM9Cm5ldyBVUkxTZWFyY2hQYXJhbXMoYS5xdWVyeSk7Yy5hcHBlbmQoInRzIixhLndhbGxfdGltZSk7Yz1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYXVkaW8iLCIvaW5kaXZpZHVhbEF1ZGlvIixjKTtyZXR1cm57d2FsbF90aW1lOmRwLmZvcm1hdERhdGUobmV3IERhdGUoMUUzKmEud2FsbF90aW1lKSksc3RlcDphLnN0ZXAsbGFiZWw6YS5sYWJlbCxjb250ZW50VHlwZTphLmNvbnRlbnRUeXBlLHVybDpjfX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1hdWRpby1kYXNoYm9hcmQvdGYtYXVkaW8tZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWF1ZGlvLWRhc2hib2FyZCIscHJvcGVydGllczp7X3NlbGVjdGVkUnVuczpBcnJheSxfcnVuVG9UYWdJbmZvOk9iamVjdCxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlcikifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uUmVxdWVzdE1hbmFnZXJ9fSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9LF9mZXRjaFRhZ3MoKXtjb25zdCBhPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLAp0aGlzLl9ydW5Ub1RhZ0luZm8pKXt2YXIgZD1fLm1hcFZhbHVlcyhjLGY9Pk9iamVjdC5rZXlzKGYpKTtkPVFvLmdldFRhZ3MoZCk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1kLmxlbmd0aCk7dGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLGMpfX0pfSxfcmVsb2FkQXVkaW8oKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtYXVkaW8tbG9hZGVyIikuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfc2hvdWxkT3BlbihhKXtyZXR1cm4gMj49YX0sX21ha2VDYXRlZ29yaWVzKGEsYyxkKXtmdW5jdGlvbiBmKGwpe2NvbnN0IGs9YVtsLnJ1bl1bbC50YWddLnNhbXBsZXM7cmV0dXJuIF8ucmFuZ2UoaykubWFwKG49Pk9iamVjdC5hc3NpZ24oe30sbCx7c2FtcGxlOm4sdG90YWxTYW1wbGVzOmt9KSl9Y29uc3QgZz1fLm1hcFZhbHVlcyhhLGw9Pk9iamVjdC5rZXlzKGwpKTtyZXR1cm4gUm8uY2F0ZWdvcml6ZVJ1blRhZ0NvbWJpbmF0aW9ucyhnLGMsZCkubWFwKGw9Pk9iamVjdC5hc3NpZ24oe30sCmwse2l0ZW1zOltdLmNvbmNhdC5hcHBseShbXSxsLml0ZW1zLm1hcChmKSl9KSl9LF90YWdNZXRhZGF0YShhLGMsZCl7cmV0dXJuIGFbY11bZF19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS9pcm9uLWF1dG9ncm93LXRleHRhcmVhLmh0bWwuanMKUG9seW1lcih7aXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uVmFsaWRhdGFibGVCZWhhdmlvcixQb2x5bWVyLklyb25Db250cm9sU3RhdGVdLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sCm1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LGxhYmVsOnt0eXBlOlN0cmluZ319LGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0In0sZ2V0IHRleHRhcmVhKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sZ2V0IHNlbGVjdGlvbkVuZCgpe3JldHVybiB0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kfSxzZXQgc2VsZWN0aW9uU3RhcnQoYSl7dGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0PWF9LHNldCBzZWxlY3Rpb25FbmQoYSl7dGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvbkVuZD1hfSxhdHRhY2hlZDpmdW5jdGlvbigpe25hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSkvKSYmKHRoaXMuJC50ZXh0YXJlYS5zdHlsZS5tYXJnaW5MZWZ0PSItM3B4Iil9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLnRleHRhcmVhLnZhbGlkaXR5LnZhbGlkOwphJiYodGhpcy5yZXF1aXJlZCYmIiI9PT10aGlzLnZhbHVlP2E9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKGE9UG9seW1lci5Jcm9uVmFsaWRhdGFibGVCZWhhdmlvci52YWxpZGF0ZS5jYWxsKHRoaXMsdGhpcy52YWx1ZSkpKTt0aGlzLmludmFsaWQ9IWE7dGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIik7cmV0dXJuIGF9LF9iaW5kVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMudmFsdWU9YX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnRleHRhcmVhO2MmJihjLnZhbHVlIT09YSYmKGMudmFsdWU9YXx8MD09PWE/YToiIiksdGhpcy5iaW5kVmFsdWU9YSx0aGlzLiQubWlycm9yLmlubmVySFRNTD10aGlzLl92YWx1ZUZvck1pcnJvcigpLHRoaXMuZmlyZSgiYmluZC12YWx1ZS1jaGFuZ2VkIix7dmFsdWU6dGhpcy5iaW5kVmFsdWV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKGEpe3ZhciBjPVBvbHltZXIuZG9tKGEpLnBhdGg7dGhpcy52YWx1ZT1jP2NbMF0udmFsdWU6CmEudGFyZ2V0LnZhbHVlfSxfY29uc3RyYWluOmZ1bmN0aW9uKGEpe2E9YXx8WyIiXTtmb3IoYT0wPHRoaXMubWF4Um93cyYmYS5sZW5ndGg+dGhpcy5tYXhSb3dzP2Euc2xpY2UoMCx0aGlzLm1heFJvd3MpOmEuc2xpY2UoMCk7MDx0aGlzLnJvd3MmJmEubGVuZ3RoPHRoaXMucm93czspYS5wdXNoKCIiKTtyZXR1cm4gYS5qb2luKCJceDNjYnIvXHgzZSIpKyJceDI2IzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRleHRhcmVhO2lmKGEpcmV0dXJuIHRoaXMudG9rZW5zPWEmJmEudmFsdWU/YS52YWx1ZS5yZXBsYWNlKC8mL2dtLCJceDI2YW1wOyIpLnJlcGxhY2UoLyIvZ20sIlx4MjZxdW90OyIpLnJlcGxhY2UoLycvZ20sIlx4MjYjMzk7IikucmVwbGFjZSgvPC9nbSwiXHgyNmx0OyIpLnJlcGxhY2UoLz4vZ20sIlx4MjZndDsiKS5zcGxpdCgiXG4iKTpbIiJdLHRoaXMuX2NvbnN0cmFpbih0aGlzLnRva2Vucyl9LF91cGRhdGVDYWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLiQubWlycm9yLmlubmVySFRNTD0KdGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1pbnB1dC9wYXBlci10ZXh0YXJlYS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci10ZXh0YXJlYSIsYmVoYXZpb3JzOltQb2x5bWVyLlBhcGVySW5wdXRCZWhhdmlvcixQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGEpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1hfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LApzZXQgc2VsZWN0aW9uRW5kKGEpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmQ9YX0sX2FyaWFMYWJlbGxlZEJ5Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IixhKX0sX2FyaWFEZXNjcmliZWRCeUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fZm9jdXNhYmxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGEpfSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQudGV4dGFyZWF9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItdG9hc3QvcGFwZXItdG9hc3QuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT1udWxsO1BvbHltZXIoe2lzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JdLHByb3BlcnRpZXM6e2ZpdEludG86e3R5cGU6T2JqZWN0LHZhbHVlOndpbmRvdyxvYnNlcnZlcjoiX29uRml0SW50b0NoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImJvdHRvbSJ9LGR1cmF0aW9uOnt0eXBlOk51bWJlcix2YWx1ZTozRTN9LHRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LG5vQXV0b0ZvY3VzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9fb25UcmFuc2l0aW9uRW5kIn0sZ2V0IHZpc2libGUoKXtQb2x5bWVyLkJhc2UuX3dhcm4oImB2aXNpYmxlYCBpcyBkZXByZWNhdGVkLCB1c2UgYG9wZW5lZGAgaW5zdGVhZCIpOwpyZXR1cm4gdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIDA8dGhpcy5kdXJhdGlvbiYmSW5maW5pdHkhPT10aGlzLmR1cmF0aW9ufSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXV0b0Nsb3NlPW51bGw7UG9seW1lci5Jcm9uQTExeUFubm91bmNlci5yZXF1ZXN0QXZhaWxhYmlsaXR5KCl9LHNob3c6ZnVuY3Rpb24oYyl7InN0cmluZyI9PXR5cGVvZiBjJiYoYz17dGV4dDpjfSk7Zm9yKHZhciBkIGluIGMpMD09PWQuaW5kZXhPZigiXyIpP1BvbHltZXIuQmFzZS5fd2FybignVGhlIHByb3BlcnR5ICInK2QrJyIgaXMgcHJpdmF0ZSBhbmQgd2FzIG5vdCBzZXQuJyk6ZCBpbiB0aGlzP3RoaXNbZF09Y1tkXTpQb2x5bWVyLkJhc2UuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJytkKyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oYyl7YyYmYy50YXJnZXQ9PT0KdGhpcyYmIm9wYWNpdHkiPT09Yy5wcm9wZXJ0eU5hbWUmJih0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKSl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX2F1dG9DbG9zZSYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fYXV0b0Nsb3NlKSx0aGlzLl9hdXRvQ2xvc2U9bnVsbCk7dGhpcy5vcGVuZWQ/KGEmJmEhPT10aGlzJiZhLmNsb3NlKCksYT10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOmE9PT10aGlzJiYoYT1udWxsKTtQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JJbXBsLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSwKX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LnJlbW92ZSgicGFwZXItdG9hc3Qtb3BlbiIpfSxfb25GaXRJbnRvQ2hhbmdlZDpmdW5jdGlvbihjKXt0aGlzLnBvc2l0aW9uVGFyZ2V0PWN9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLXRvZ2dsZS1idXR0b24vcGFwZXItdG9nZ2xlLWJ1dHRvbi5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJDaGVja2VkRWxlbWVudEJlaGF2aW9yXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLGZ1bmN0aW9uKCl7UG9seW1lci5HZXN0dXJlcy5zZXRUb3VjaEFjdGlvbih0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGEpe2E9YS5kZXRhaWw7InN0YXJ0Ij09PWEuc3RhdGU/dGhpcy5fdHJhY2tTdGFydChhKToidHJhY2siPT09YS5zdGF0ZT90aGlzLl90cmFja01vdmUoYSk6ImVuZCI9PT1hLnN0YXRlJiZ0aGlzLl90cmFja0VuZChhKX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl93aWR0aD10aGlzLiQudG9nZ2xlQmFyLm9mZnNldFdpZHRoLwoyO3RoaXMuX3RyYWNrQ2hlY2tlZD10aGlzLmNoZWNrZWQ7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpfSxfdHJhY2tNb3ZlOmZ1bmN0aW9uKGEpe2E9YS5keDt0aGlzLl94PU1hdGgubWluKHRoaXMuX3dpZHRoLE1hdGgubWF4KDAsdGhpcy5fdHJhY2tDaGVja2VkP3RoaXMuX3dpZHRoK2E6YSkpO3RoaXMudHJhbnNsYXRlM2QodGhpcy5feCsicHgiLDAsMCx0aGlzLiQudG9nZ2xlQnV0dG9uKTt0aGlzLl91c2VyQWN0aXZhdGUodGhpcy5feD50aGlzLl93aWR0aC8yKX0sX3RyYWNrRW5kOmZ1bmN0aW9uKCl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpO3RoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGE9UG9seW1lci5QYXBlclJpcHBsZUJlaGF2aW9yLl9jcmVhdGVSaXBwbGUoKTsKYS5pZD0iaW5rIjthLnNldEF0dHJpYnV0ZSgicmVjZW50ZXJzIiwiIik7YS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiLCJ0b2dnbGUtaW5rIik7cmV0dXJuIGF9fSk7CgooZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT0ib2JqZWN0IiYmdHlwZW9mIG1vZHVsZSE9PSJ1bmRlZmluZWQiKW1vZHVsZS5leHBvcnRzPWYoKTtlbHNlIGlmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKWRlZmluZShbXSxmKTtlbHNle3ZhciBnO2lmKHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIilnPXdpbmRvdztlbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT0idW5kZWZpbmVkIilnPWdsb2JhbDtlbHNlIGlmKHR5cGVvZiBzZWxmIT09InVuZGVmaW5lZCIpZz1zZWxmO2Vsc2UgZz10aGlzO2cuZ3JhcGhsaWI9ZigpfX0pKGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4gZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTsKdmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZjt9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIGxpYj1yZXF1aXJlKCIuL2xpYiIpO21vZHVsZS5leHBvcnRzPXtHcmFwaDpsaWIuR3JhcGgsanNvbjpyZXF1aXJlKCIuL2xpYi9qc29uIiksYWxnOnJlcXVpcmUoIi4vbGliL2FsZyIpLHZlcnNpb246bGliLnZlcnNpb259fSx7Ii4vbGliIjoxNywiLi9saWIvYWxnIjo4LCIuL2xpYi9qc29uIjoxOH1dLAoyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz1jb21wb25lbnRzO2Z1bmN0aW9uIGNvbXBvbmVudHMoZyl7dmFyIHZpc2l0ZWQ9e30sY21wdHM9W10sY21wdDtmdW5jdGlvbiBkZnModil7aWYoXy5oYXModmlzaXRlZCx2KSlyZXR1cm47dmlzaXRlZFt2XT10cnVlO2NtcHQucHVzaCh2KTtfLmVhY2goZy5zdWNjZXNzb3JzKHYpLGRmcyk7Xy5lYWNoKGcucHJlZGVjZXNzb3JzKHYpLGRmcyl9Xy5lYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtjbXB0PVtdO2Rmcyh2KTtpZihjbXB0Lmxlbmd0aCljbXB0cy5wdXNoKGNtcHQpfSk7cmV0dXJuIGNtcHRzfX0seyIuLi9sb2Rhc2giOjE5fV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9ZGZzO2Z1bmN0aW9uIGRmcyhnLHZzLG9yZGVyKXtpZighXy5pc0FycmF5KHZzKSl2cz0KW3ZzXTt2YXIgbmF2aWdhdGlvbj0oZy5pc0RpcmVjdGVkKCk/Zy5zdWNjZXNzb3JzOmcubmVpZ2hib3JzKS5iaW5kKGcpO3ZhciBhY2M9W10sdmlzaXRlZD17fTtfLmVhY2godnMsZnVuY3Rpb24odil7aWYoIWcuaGFzTm9kZSh2KSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIit2KTtkb0RmcyhnLHYsb3JkZXI9PT0icG9zdCIsdmlzaXRlZCxuYXZpZ2F0aW9uLGFjYyl9KTtyZXR1cm4gYWNjfWZ1bmN0aW9uIGRvRGZzKGcsdixwb3N0b3JkZXIsdmlzaXRlZCxuYXZpZ2F0aW9uLGFjYyl7aWYoIV8uaGFzKHZpc2l0ZWQsdikpe3Zpc2l0ZWRbdl09dHJ1ZTtpZighcG9zdG9yZGVyKWFjYy5wdXNoKHYpO18uZWFjaChuYXZpZ2F0aW9uKHYpLGZ1bmN0aW9uKHcpe2RvRGZzKGcsdyxwb3N0b3JkZXIsdmlzaXRlZCxuYXZpZ2F0aW9uLGFjYyl9KTtpZihwb3N0b3JkZXIpYWNjLnB1c2godil9fX0seyIuLi9sb2Rhc2giOjE5fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSwKbW9kdWxlLGV4cG9ydHMpe3ZhciBkaWprc3RyYT1yZXF1aXJlKCIuL2RpamtzdHJhIiksXz1yZXF1aXJlKCIuLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz1kaWprc3RyYUFsbDtmdW5jdGlvbiBkaWprc3RyYUFsbChnLHdlaWdodEZ1bmMsZWRnZUZ1bmMpe3JldHVybiBfLnRyYW5zZm9ybShnLm5vZGVzKCksZnVuY3Rpb24oYWNjLHYpe2FjY1t2XT1kaWprc3RyYShnLHYsd2VpZ2h0RnVuYyxlZGdlRnVuYyl9LHt9KX19LHsiLi4vbG9kYXNoIjoxOSwiLi9kaWprc3RyYSI6NX1dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpLFByaW9yaXR5UXVldWU9cmVxdWlyZSgiLi4vZGF0YS9wcmlvcml0eS1xdWV1ZSIpO21vZHVsZS5leHBvcnRzPWRpamtzdHJhO3ZhciBERUZBVUxUX1dFSUdIVF9GVU5DPV8uY29uc3RhbnQoMSk7ZnVuY3Rpb24gZGlqa3N0cmEoZyxzb3VyY2Usd2VpZ2h0Rm4sZWRnZUZuKXtyZXR1cm4gcnVuRGlqa3N0cmEoZywKU3RyaW5nKHNvdXJjZSksd2VpZ2h0Rm58fERFRkFVTFRfV0VJR0hUX0ZVTkMsZWRnZUZufHxmdW5jdGlvbih2KXtyZXR1cm4gZy5vdXRFZGdlcyh2KX0pfWZ1bmN0aW9uIHJ1bkRpamtzdHJhKGcsc291cmNlLHdlaWdodEZuLGVkZ2VGbil7dmFyIHJlc3VsdHM9e30scHE9bmV3IFByaW9yaXR5UXVldWUsdix2RW50cnk7dmFyIHVwZGF0ZU5laWdoYm9ycz1mdW5jdGlvbihlZGdlKXt2YXIgdz1lZGdlLnYhPT12P2VkZ2UudjplZGdlLncsd0VudHJ5PXJlc3VsdHNbd10sd2VpZ2h0PXdlaWdodEZuKGVkZ2UpLGRpc3RhbmNlPXZFbnRyeS5kaXN0YW5jZSt3ZWlnaHQ7aWYod2VpZ2h0PDApdGhyb3cgbmV3IEVycm9yKCJkaWprc3RyYSBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSBlZGdlIHdlaWdodHMuICIrIkJhZCBlZGdlOiAiK2VkZ2UrIiBXZWlnaHQ6ICIrd2VpZ2h0KTtpZihkaXN0YW5jZTx3RW50cnkuZGlzdGFuY2Upe3dFbnRyeS5kaXN0YW5jZT1kaXN0YW5jZTt3RW50cnkucHJlZGVjZXNzb3I9CnY7cHEuZGVjcmVhc2UodyxkaXN0YW5jZSl9fTtnLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih2KXt2YXIgZGlzdGFuY2U9dj09PXNvdXJjZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXN1bHRzW3ZdPXtkaXN0YW5jZTpkaXN0YW5jZX07cHEuYWRkKHYsZGlzdGFuY2UpfSk7d2hpbGUocHEuc2l6ZSgpPjApe3Y9cHEucmVtb3ZlTWluKCk7dkVudHJ5PXJlc3VsdHNbdl07aWYodkVudHJ5LmRpc3RhbmNlPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKWJyZWFrO2VkZ2VGbih2KS5mb3JFYWNoKHVwZGF0ZU5laWdoYm9ycyl9cmV0dXJuIHJlc3VsdHN9fSx7Ii4uL2RhdGEvcHJpb3JpdHktcXVldWUiOjE1LCIuLi9sb2Rhc2giOjE5fV0sNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksdGFyamFuPXJlcXVpcmUoIi4vdGFyamFuIik7bW9kdWxlLmV4cG9ydHM9ZmluZEN5Y2xlcztmdW5jdGlvbiBmaW5kQ3ljbGVzKGcpe3JldHVybiBfLmZpbHRlcih0YXJqYW4oZyksCmZ1bmN0aW9uKGNtcHQpe3JldHVybiBjbXB0Lmxlbmd0aD4xfHxjbXB0Lmxlbmd0aD09PTEmJmcuaGFzRWRnZShjbXB0WzBdLGNtcHRbMF0pfSl9fSx7Ii4uL2xvZGFzaCI6MTksIi4vdGFyamFuIjoxM31dLDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWZsb3lkV2Fyc2hhbGw7dmFyIERFRkFVTFRfV0VJR0hUX0ZVTkM9Xy5jb25zdGFudCgxKTtmdW5jdGlvbiBmbG95ZFdhcnNoYWxsKGcsd2VpZ2h0Rm4sZWRnZUZuKXtyZXR1cm4gcnVuRmxveWRXYXJzaGFsbChnLHdlaWdodEZufHxERUZBVUxUX1dFSUdIVF9GVU5DLGVkZ2VGbnx8ZnVuY3Rpb24odil7cmV0dXJuIGcub3V0RWRnZXModil9KX1mdW5jdGlvbiBydW5GbG95ZFdhcnNoYWxsKGcsd2VpZ2h0Rm4sZWRnZUZuKXt2YXIgcmVzdWx0cz17fSxub2Rlcz1nLm5vZGVzKCk7bm9kZXMuZm9yRWFjaChmdW5jdGlvbih2KXtyZXN1bHRzW3ZdPQp7fTtyZXN1bHRzW3ZdW3ZdPXtkaXN0YW5jZTowfTtub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHcpe2lmKHYhPT13KXJlc3VsdHNbdl1bd109e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX19KTtlZGdlRm4odikuZm9yRWFjaChmdW5jdGlvbihlZGdlKXt2YXIgdz1lZGdlLnY9PT12P2VkZ2UudzplZGdlLnYsZD13ZWlnaHRGbihlZGdlKTtyZXN1bHRzW3ZdW3ddPXtkaXN0YW5jZTpkLHByZWRlY2Vzc29yOnZ9fSl9KTtub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciByb3dLPXJlc3VsdHNba107bm9kZXMuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcm93ST1yZXN1bHRzW2ldO25vZGVzLmZvckVhY2goZnVuY3Rpb24oail7dmFyIGlrPXJvd0lba107dmFyIGtqPXJvd0tbal07dmFyIGlqPXJvd0lbal07dmFyIGFsdERpc3RhbmNlPWlrLmRpc3RhbmNlK2tqLmRpc3RhbmNlO2lmKGFsdERpc3RhbmNlPGlqLmRpc3RhbmNlKXtpai5kaXN0YW5jZT1hbHREaXN0YW5jZTtpai5wcmVkZWNlc3Nvcj0Ka2oucHJlZGVjZXNzb3J9fSl9KX0pO3JldHVybiByZXN1bHRzfX0seyIuLi9sb2Rhc2giOjE5fV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9e2NvbXBvbmVudHM6cmVxdWlyZSgiLi9jb21wb25lbnRzIiksZGlqa3N0cmE6cmVxdWlyZSgiLi9kaWprc3RyYSIpLGRpamtzdHJhQWxsOnJlcXVpcmUoIi4vZGlqa3N0cmEtYWxsIiksZmluZEN5Y2xlczpyZXF1aXJlKCIuL2ZpbmQtY3ljbGVzIiksZmxveWRXYXJzaGFsbDpyZXF1aXJlKCIuL2Zsb3lkLXdhcnNoYWxsIiksaXNBY3ljbGljOnJlcXVpcmUoIi4vaXMtYWN5Y2xpYyIpLHBvc3RvcmRlcjpyZXF1aXJlKCIuL3Bvc3RvcmRlciIpLHByZW9yZGVyOnJlcXVpcmUoIi4vcHJlb3JkZXIiKSxwcmltOnJlcXVpcmUoIi4vcHJpbSIpLHRhcmphbjpyZXF1aXJlKCIuL3RhcmphbiIpLHRvcHNvcnQ6cmVxdWlyZSgiLi90b3Bzb3J0Iil9fSx7Ii4vY29tcG9uZW50cyI6MiwiLi9kaWprc3RyYSI6NSwKIi4vZGlqa3N0cmEtYWxsIjo0LCIuL2ZpbmQtY3ljbGVzIjo2LCIuL2Zsb3lkLXdhcnNoYWxsIjo3LCIuL2lzLWFjeWNsaWMiOjksIi4vcG9zdG9yZGVyIjoxMCwiLi9wcmVvcmRlciI6MTEsIi4vcHJpbSI6MTIsIi4vdGFyamFuIjoxMywiLi90b3Bzb3J0IjoxNH1dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciB0b3Bzb3J0PXJlcXVpcmUoIi4vdG9wc29ydCIpO21vZHVsZS5leHBvcnRzPWlzQWN5Y2xpYztmdW5jdGlvbiBpc0FjeWNsaWMoZyl7dHJ5e3RvcHNvcnQoZyl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHRvcHNvcnQuQ3ljbGVFeGNlcHRpb24pcmV0dXJuIGZhbHNlO3Rocm93IGU7fXJldHVybiB0cnVlfX0seyIuL3RvcHNvcnQiOjE0fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBkZnM9cmVxdWlyZSgiLi9kZnMiKTttb2R1bGUuZXhwb3J0cz1wb3N0b3JkZXI7ZnVuY3Rpb24gcG9zdG9yZGVyKGcsdnMpe3JldHVybiBkZnMoZywKdnMsInBvc3QiKX19LHsiLi9kZnMiOjN9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIGRmcz1yZXF1aXJlKCIuL2RmcyIpO21vZHVsZS5leHBvcnRzPXByZW9yZGVyO2Z1bmN0aW9uIHByZW9yZGVyKGcsdnMpe3JldHVybiBkZnMoZyx2cywicHJlIil9fSx7Ii4vZGZzIjozfV0sMTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpLEdyYXBoPXJlcXVpcmUoIi4uL2dyYXBoIiksUHJpb3JpdHlRdWV1ZT1yZXF1aXJlKCIuLi9kYXRhL3ByaW9yaXR5LXF1ZXVlIik7bW9kdWxlLmV4cG9ydHM9cHJpbTtmdW5jdGlvbiBwcmltKGcsd2VpZ2h0RnVuYyl7dmFyIHJlc3VsdD1uZXcgR3JhcGgscGFyZW50cz17fSxwcT1uZXcgUHJpb3JpdHlRdWV1ZSx2O2Z1bmN0aW9uIHVwZGF0ZU5laWdoYm9ycyhlZGdlKXt2YXIgdz1lZGdlLnY9PT12P2VkZ2UudzplZGdlLnYscHJpPXBxLnByaW9yaXR5KHcpO2lmKHByaSE9PQp1bmRlZmluZWQpe3ZhciBlZGdlV2VpZ2h0PXdlaWdodEZ1bmMoZWRnZSk7aWYoZWRnZVdlaWdodDxwcmkpe3BhcmVudHNbd109djtwcS5kZWNyZWFzZSh3LGVkZ2VXZWlnaHQpfX19aWYoZy5ub2RlQ291bnQoKT09PTApcmV0dXJuIHJlc3VsdDtfLmVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3BxLmFkZCh2LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7cmVzdWx0LnNldE5vZGUodil9KTtwcS5kZWNyZWFzZShnLm5vZGVzKClbMF0sMCk7dmFyIGluaXQ9ZmFsc2U7d2hpbGUocHEuc2l6ZSgpPjApe3Y9cHEucmVtb3ZlTWluKCk7aWYoXy5oYXMocGFyZW50cyx2KSlyZXN1bHQuc2V0RWRnZSh2LHBhcmVudHNbdl0pO2Vsc2UgaWYoaW5pdCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IGdyYXBoIGlzIG5vdCBjb25uZWN0ZWQ6ICIrZyk7ZWxzZSBpbml0PXRydWU7Zy5ub2RlRWRnZXModikuZm9yRWFjaCh1cGRhdGVOZWlnaGJvcnMpfXJldHVybiByZXN1bHR9fSx7Ii4uL2RhdGEvcHJpb3JpdHktcXVldWUiOjE1LAoiLi4vZ3JhcGgiOjE2LCIuLi9sb2Rhc2giOjE5fV0sMTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPXRhcmphbjtmdW5jdGlvbiB0YXJqYW4oZyl7dmFyIGluZGV4PTAsc3RhY2s9W10sdmlzaXRlZD17fSxyZXN1bHRzPVtdO2Z1bmN0aW9uIGRmcyh2KXt2YXIgZW50cnk9dmlzaXRlZFt2XT17b25TdGFjazp0cnVlLGxvd2xpbms6aW5kZXgsaW5kZXg6aW5kZXgrK307c3RhY2sucHVzaCh2KTtnLnN1Y2Nlc3NvcnModikuZm9yRWFjaChmdW5jdGlvbih3KXtpZighXy5oYXModmlzaXRlZCx3KSl7ZGZzKHcpO2VudHJ5Lmxvd2xpbms9TWF0aC5taW4oZW50cnkubG93bGluayx2aXNpdGVkW3ddLmxvd2xpbmspfWVsc2UgaWYodmlzaXRlZFt3XS5vblN0YWNrKWVudHJ5Lmxvd2xpbms9TWF0aC5taW4oZW50cnkubG93bGluayx2aXNpdGVkW3ddLmluZGV4KX0pO2lmKGVudHJ5Lmxvd2xpbms9PT1lbnRyeS5pbmRleCl7dmFyIGNtcHQ9CltdLHc7ZG97dz1zdGFjay5wb3AoKTt2aXNpdGVkW3ddLm9uU3RhY2s9ZmFsc2U7Y21wdC5wdXNoKHcpfXdoaWxlKHYhPT13KTtyZXN1bHRzLnB1c2goY21wdCl9fWcubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2lmKCFfLmhhcyh2aXNpdGVkLHYpKWRmcyh2KX0pO3JldHVybiByZXN1bHRzfX0seyIuLi9sb2Rhc2giOjE5fV0sMTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPXRvcHNvcnQ7dG9wc29ydC5DeWNsZUV4Y2VwdGlvbj1DeWNsZUV4Y2VwdGlvbjtmdW5jdGlvbiB0b3Bzb3J0KGcpe3ZhciB2aXNpdGVkPXt9LHN0YWNrPXt9LHJlc3VsdHM9W107ZnVuY3Rpb24gdmlzaXQobm9kZSl7aWYoXy5oYXMoc3RhY2ssbm9kZSkpdGhyb3cgbmV3IEN5Y2xlRXhjZXB0aW9uO2lmKCFfLmhhcyh2aXNpdGVkLG5vZGUpKXtzdGFja1tub2RlXT10cnVlO3Zpc2l0ZWRbbm9kZV09dHJ1ZTtfLmVhY2goZy5wcmVkZWNlc3NvcnMobm9kZSksCnZpc2l0KTtkZWxldGUgc3RhY2tbbm9kZV07cmVzdWx0cy5wdXNoKG5vZGUpfX1fLmVhY2goZy5zaW5rcygpLHZpc2l0KTtpZihfLnNpemUodmlzaXRlZCkhPT1nLm5vZGVDb3VudCgpKXRocm93IG5ldyBDeWNsZUV4Y2VwdGlvbjtyZXR1cm4gcmVzdWx0c31mdW5jdGlvbiBDeWNsZUV4Y2VwdGlvbigpe319LHsiLi4vbG9kYXNoIjoxOX1dLDE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz1Qcmlvcml0eVF1ZXVlO2Z1bmN0aW9uIFByaW9yaXR5UXVldWUoKXt0aGlzLl9hcnI9W107dGhpcy5fa2V5SW5kaWNlcz17fX1Qcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLm1hcChmdW5jdGlvbih4KXtyZXR1cm4geC5rZXl9KX07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUuaGFzPQpmdW5jdGlvbihrZXkpe3JldHVybiBfLmhhcyh0aGlzLl9rZXlJbmRpY2VzLGtleSl9O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGtleSl7dmFyIGluZGV4PXRoaXMuX2tleUluZGljZXNba2V5XTtpZihpbmRleCE9PXVuZGVmaW5lZClyZXR1cm4gdGhpcy5fYXJyW2luZGV4XS5wcmlvcml0eX07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihrZXkscHJpb3JpdHkpe3ZhciBrZXlJbmRpY2VzPXRoaXMuX2tleUluZGljZXM7a2V5PVN0cmluZyhrZXkpO2lmKCFfLmhhcyhrZXlJbmRpY2VzLGtleSkpe3ZhciBhcnI9dGhpcy5fYXJyO3ZhciBpbmRleD1hcnIubGVuZ3RoO2tleUluZGljZXNba2V5XT1pbmRleDthcnIucHVzaCh7a2V5OmtleSwKcHJpb3JpdHk6cHJpb3JpdHl9KTt0aGlzLl9kZWNyZWFzZShpbmRleCk7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgbWluPXRoaXMuX2Fyci5wb3AoKTtkZWxldGUgdGhpcy5fa2V5SW5kaWNlc1ttaW4ua2V5XTt0aGlzLl9oZWFwaWZ5KDApO3JldHVybiBtaW4ua2V5fTtQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5kZWNyZWFzZT1mdW5jdGlvbihrZXkscHJpb3JpdHkpe3ZhciBpbmRleD10aGlzLl9rZXlJbmRpY2VzW2tleV07aWYocHJpb3JpdHk+dGhpcy5fYXJyW2luZGV4XS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gIisiS2V5OiAiK2tleSsiIE9sZDogIit0aGlzLl9hcnJbaW5kZXhdLnByaW9yaXR5KyIgTmV3OiAiK3ByaW9yaXR5KTt0aGlzLl9hcnJbaW5kZXhdLnByaW9yaXR5PQpwcmlvcml0eTt0aGlzLl9kZWNyZWFzZShpbmRleCl9O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLl9oZWFwaWZ5PWZ1bmN0aW9uKGkpe3ZhciBhcnI9dGhpcy5fYXJyO3ZhciBsPTIqaSxyPWwrMSxsYXJnZXN0PWk7aWYobDxhcnIubGVuZ3RoKXtsYXJnZXN0PWFycltsXS5wcmlvcml0eTxhcnJbbGFyZ2VzdF0ucHJpb3JpdHk/bDpsYXJnZXN0O2lmKHI8YXJyLmxlbmd0aClsYXJnZXN0PWFycltyXS5wcmlvcml0eTxhcnJbbGFyZ2VzdF0ucHJpb3JpdHk/cjpsYXJnZXN0O2lmKGxhcmdlc3QhPT1pKXt0aGlzLl9zd2FwKGksbGFyZ2VzdCk7dGhpcy5faGVhcGlmeShsYXJnZXN0KX19fTtQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5fZGVjcmVhc2U9ZnVuY3Rpb24oaW5kZXgpe3ZhciBhcnI9dGhpcy5fYXJyO3ZhciBwcmlvcml0eT1hcnJbaW5kZXhdLnByaW9yaXR5O3ZhciBwYXJlbnQ7d2hpbGUoaW5kZXghPT0wKXtwYXJlbnQ9aW5kZXg+PjE7aWYoYXJyW3BhcmVudF0ucHJpb3JpdHk8cHJpb3JpdHkpYnJlYWs7CnRoaXMuX3N3YXAoaW5kZXgscGFyZW50KTtpbmRleD1wYXJlbnR9fTtQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5fc3dhcD1mdW5jdGlvbihpLGope3ZhciBhcnI9dGhpcy5fYXJyO3ZhciBrZXlJbmRpY2VzPXRoaXMuX2tleUluZGljZXM7dmFyIG9yaWdBcnJJPWFycltpXTt2YXIgb3JpZ0Fycko9YXJyW2pdO2FycltpXT1vcmlnQXJySjthcnJbal09b3JpZ0Fyckk7a2V5SW5kaWNlc1tvcmlnQXJySi5rZXldPWk7a2V5SW5kaWNlc1tvcmlnQXJySS5rZXldPWp9fSx7Ii4uL2xvZGFzaCI6MTl9XSwxNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz1HcmFwaDt2YXIgREVGQVVMVF9FREdFX05BTUU9Ilx4MDAiLEdSQVBIX05PREU9Ilx4MDAiLEVER0VfS0VZX0RFTElNPSJcdTAwMDEiO2Z1bmN0aW9uIEdyYXBoKG9wdHMpe3RoaXMuX2lzRGlyZWN0ZWQ9Xy5oYXMob3B0cywiZGlyZWN0ZWQiKT9vcHRzLmRpcmVjdGVkOgp0cnVlO3RoaXMuX2lzTXVsdGlncmFwaD1fLmhhcyhvcHRzLCJtdWx0aWdyYXBoIik/b3B0cy5tdWx0aWdyYXBoOmZhbHNlO3RoaXMuX2lzQ29tcG91bmQ9Xy5oYXMob3B0cywiY29tcG91bmQiKT9vcHRzLmNvbXBvdW5kOmZhbHNlO3RoaXMuX2xhYmVsPXVuZGVmaW5lZDt0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49Xy5jb25zdGFudCh1bmRlZmluZWQpO3RoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1fLmNvbnN0YW50KHVuZGVmaW5lZCk7dGhpcy5fbm9kZXM9e307aWYodGhpcy5faXNDb21wb3VuZCl7dGhpcy5fcGFyZW50PXt9O3RoaXMuX2NoaWxkcmVuPXt9O3RoaXMuX2NoaWxkcmVuW0dSQVBIX05PREVdPXt9fXRoaXMuX2luPXt9O3RoaXMuX3ByZWRzPXt9O3RoaXMuX291dD17fTt0aGlzLl9zdWNzPXt9O3RoaXMuX2VkZ2VPYmpzPXt9O3RoaXMuX2VkZ2VMYWJlbHM9e319R3JhcGgucHJvdG90eXBlLl9ub2RlQ291bnQ9MDtHcmFwaC5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO0dyYXBoLnByb3RvdHlwZS5pc0RpcmVjdGVkPQpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfTtHcmFwaC5wcm90b3R5cGUuaXNNdWx0aWdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH07R3JhcGgucHJvdG90eXBlLmlzQ29tcG91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNDb21wb3VuZH07R3JhcGgucHJvdG90eXBlLnNldEdyYXBoPWZ1bmN0aW9uKGxhYmVsKXt0aGlzLl9sYWJlbD1sYWJlbDtyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLmdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhYmVsfTtHcmFwaC5wcm90b3R5cGUuc2V0RGVmYXVsdE5vZGVMYWJlbD1mdW5jdGlvbihuZXdEZWZhdWx0KXtpZighXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKW5ld0RlZmF1bHQ9Xy5jb25zdGFudChuZXdEZWZhdWx0KTt0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49bmV3RGVmYXVsdDtyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9OwpHcmFwaC5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gXy5rZXlzKHRoaXMuX25vZGVzKX07R3JhcGgucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgc2VsZj10aGlzO3JldHVybiBfLmZpbHRlcih0aGlzLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIF8uaXNFbXB0eShzZWxmLl9pblt2XSl9KX07R3JhcGgucHJvdG90eXBlLnNpbmtzPWZ1bmN0aW9uKCl7dmFyIHNlbGY9dGhpcztyZXR1cm4gXy5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHYpe3JldHVybiBfLmlzRW1wdHkoc2VsZi5fb3V0W3ZdKX0pfTtHcmFwaC5wcm90b3R5cGUuc2V0Tm9kZXM9ZnVuY3Rpb24odnMsdmFsdWUpe3ZhciBhcmdzPWFyZ3VtZW50czt2YXIgc2VsZj10aGlzO18uZWFjaCh2cyxmdW5jdGlvbih2KXtpZihhcmdzLmxlbmd0aD4xKXNlbGYuc2V0Tm9kZSh2LHZhbHVlKTtlbHNlIHNlbGYuc2V0Tm9kZSh2KX0pO3JldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUuc2V0Tm9kZT0KZnVuY3Rpb24odix2YWx1ZSl7aWYoXy5oYXModGhpcy5fbm9kZXMsdikpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl0aGlzLl9ub2Rlc1t2XT12YWx1ZTtyZXR1cm4gdGhpc310aGlzLl9ub2Rlc1t2XT1hcmd1bWVudHMubGVuZ3RoPjE/dmFsdWU6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHYpO2lmKHRoaXMuX2lzQ29tcG91bmQpe3RoaXMuX3BhcmVudFt2XT1HUkFQSF9OT0RFO3RoaXMuX2NoaWxkcmVuW3ZdPXt9O3RoaXMuX2NoaWxkcmVuW0dSQVBIX05PREVdW3ZdPXRydWV9dGhpcy5faW5bdl09e307dGhpcy5fcHJlZHNbdl09e307dGhpcy5fb3V0W3ZdPXt9O3RoaXMuX3N1Y3Nbdl09e307Kyt0aGlzLl9ub2RlQ291bnQ7cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLl9ub2Rlc1t2XX07R3JhcGgucHJvdG90eXBlLmhhc05vZGU9ZnVuY3Rpb24odil7cmV0dXJuIF8uaGFzKHRoaXMuX25vZGVzLHYpfTtHcmFwaC5wcm90b3R5cGUucmVtb3ZlTm9kZT0KZnVuY3Rpb24odil7dmFyIHNlbGY9dGhpcztpZihfLmhhcyh0aGlzLl9ub2Rlcyx2KSl7dmFyIHJlbW92ZUVkZ2U9ZnVuY3Rpb24oZSl7c2VsZi5yZW1vdmVFZGdlKHNlbGYuX2VkZ2VPYmpzW2VdKX07ZGVsZXRlIHRoaXMuX25vZGVzW3ZdO2lmKHRoaXMuX2lzQ29tcG91bmQpe3RoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHYpO2RlbGV0ZSB0aGlzLl9wYXJlbnRbdl07Xy5lYWNoKHRoaXMuY2hpbGRyZW4odiksZnVuY3Rpb24oY2hpbGQpe3NlbGYuc2V0UGFyZW50KGNoaWxkKX0pO2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt2XX1fLmVhY2goXy5rZXlzKHRoaXMuX2luW3ZdKSxyZW1vdmVFZGdlKTtkZWxldGUgdGhpcy5faW5bdl07ZGVsZXRlIHRoaXMuX3ByZWRzW3ZdO18uZWFjaChfLmtleXModGhpcy5fb3V0W3ZdKSxyZW1vdmVFZGdlKTtkZWxldGUgdGhpcy5fb3V0W3ZdO2RlbGV0ZSB0aGlzLl9zdWNzW3ZdOy0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUuc2V0UGFyZW50PQpmdW5jdGlvbih2LHBhcmVudCl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKF8uaXNVbmRlZmluZWQocGFyZW50KSlwYXJlbnQ9R1JBUEhfTk9ERTtlbHNle3BhcmVudCs9IiI7Zm9yKHZhciBhbmNlc3Rvcj1wYXJlbnQ7IV8uaXNVbmRlZmluZWQoYW5jZXN0b3IpO2FuY2VzdG9yPXRoaXMucGFyZW50KGFuY2VzdG9yKSlpZihhbmNlc3Rvcj09PXYpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrcGFyZW50KyIgYXMgcGFyZW50IG9mICIrdisiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKHBhcmVudCl9dGhpcy5zZXROb2RlKHYpO3RoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHYpO3RoaXMuX3BhcmVudFt2XT1wYXJlbnQ7dGhpcy5fY2hpbGRyZW5bcGFyZW50XVt2XT10cnVlO3JldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PQpmdW5jdGlvbih2KXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W3ZdXVt2XX07R3JhcGgucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih2KXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgcGFyZW50PXRoaXMuX3BhcmVudFt2XTtpZihwYXJlbnQhPT1HUkFQSF9OT0RFKXJldHVybiBwYXJlbnR9fTtHcmFwaC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odil7aWYoXy5pc1VuZGVmaW5lZCh2KSl2PUdSQVBIX05PREU7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIGNoaWxkcmVuPXRoaXMuX2NoaWxkcmVuW3ZdO2lmKGNoaWxkcmVuKXJldHVybiBfLmtleXMoY2hpbGRyZW4pfWVsc2UgaWYodj09PUdSQVBIX05PREUpcmV0dXJuIHRoaXMubm9kZXMoKTtlbHNlIGlmKHRoaXMuaGFzTm9kZSh2KSlyZXR1cm5bXX07R3JhcGgucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbih2KXt2YXIgcHJlZHNWPXRoaXMuX3ByZWRzW3ZdO2lmKHByZWRzVilyZXR1cm4gXy5rZXlzKHByZWRzVil9OwpHcmFwaC5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbih2KXt2YXIgc3Vjc1Y9dGhpcy5fc3Vjc1t2XTtpZihzdWNzVilyZXR1cm4gXy5rZXlzKHN1Y3NWKX07R3JhcGgucHJvdG90eXBlLm5laWdoYm9ycz1mdW5jdGlvbih2KXt2YXIgcHJlZHM9dGhpcy5wcmVkZWNlc3NvcnModik7aWYocHJlZHMpcmV0dXJuIF8udW5pb24ocHJlZHMsdGhpcy5zdWNjZXNzb3JzKHYpKX07R3JhcGgucHJvdG90eXBlLmlzTGVhZj1mdW5jdGlvbih2KXt2YXIgbmVpZ2hib3JzO2lmKHRoaXMuaXNEaXJlY3RlZCgpKW5laWdoYm9ycz10aGlzLnN1Y2Nlc3NvcnModik7ZWxzZSBuZWlnaGJvcnM9dGhpcy5uZWlnaGJvcnModik7cmV0dXJuIG5laWdoYm9ycy5sZW5ndGg9PT0wfTtHcmFwaC5wcm90b3R5cGUuZmlsdGVyTm9kZXM9ZnVuY3Rpb24oZmlsdGVyKXt2YXIgY29weT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCwKY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO2NvcHkuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgc2VsZj10aGlzO18uZWFjaCh0aGlzLl9ub2RlcyxmdW5jdGlvbih2YWx1ZSx2KXtpZihmaWx0ZXIodikpY29weS5zZXROb2RlKHYsdmFsdWUpfSk7Xy5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKGUpe2lmKGNvcHkuaGFzTm9kZShlLnYpJiZjb3B5Lmhhc05vZGUoZS53KSljb3B5LnNldEVkZ2UoZSxzZWxmLmVkZ2UoZSkpfSk7dmFyIHBhcmVudHM9e307ZnVuY3Rpb24gZmluZFBhcmVudCh2KXt2YXIgcGFyZW50PXNlbGYucGFyZW50KHYpO2lmKHBhcmVudD09PXVuZGVmaW5lZHx8Y29weS5oYXNOb2RlKHBhcmVudCkpe3BhcmVudHNbdl09cGFyZW50O3JldHVybiBwYXJlbnR9ZWxzZSBpZihwYXJlbnQgaW4gcGFyZW50cylyZXR1cm4gcGFyZW50c1twYXJlbnRdO2Vsc2UgcmV0dXJuIGZpbmRQYXJlbnQocGFyZW50KX1pZih0aGlzLl9pc0NvbXBvdW5kKV8uZWFjaChjb3B5Lm5vZGVzKCksCmZ1bmN0aW9uKHYpe2NvcHkuc2V0UGFyZW50KHYsZmluZFBhcmVudCh2KSl9KTtyZXR1cm4gY29weX07R3JhcGgucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24obmV3RGVmYXVsdCl7aWYoIV8uaXNGdW5jdGlvbihuZXdEZWZhdWx0KSluZXdEZWZhdWx0PV8uY29uc3RhbnQobmV3RGVmYXVsdCk7dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPW5ld0RlZmF1bHQ7cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtHcmFwaC5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gXy52YWx1ZXModGhpcy5fZWRnZU9ianMpfTtHcmFwaC5wcm90b3R5cGUuc2V0UGF0aD1mdW5jdGlvbih2cyx2YWx1ZSl7dmFyIHNlbGY9dGhpcyxhcmdzPWFyZ3VtZW50cztfLnJlZHVjZSh2cyxmdW5jdGlvbih2LHcpe2lmKGFyZ3MubGVuZ3RoPjEpc2VsZi5zZXRFZGdlKHYsdyx2YWx1ZSk7ZWxzZSBzZWxmLnNldEVkZ2UodiwKdyk7cmV0dXJuIHd9KTtyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLnNldEVkZ2U9ZnVuY3Rpb24oKXt2YXIgdix3LG5hbWUsdmFsdWUsdmFsdWVTcGVjaWZpZWQ9ZmFsc2UsYXJnMD1hcmd1bWVudHNbMF07aWYodHlwZW9mIGFyZzA9PT0ib2JqZWN0IiYmYXJnMCE9PW51bGwmJiJ2ImluIGFyZzApe3Y9YXJnMC52O3c9YXJnMC53O25hbWU9YXJnMC5uYW1lO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKXt2YWx1ZT1hcmd1bWVudHNbMV07dmFsdWVTcGVjaWZpZWQ9dHJ1ZX19ZWxzZXt2PWFyZzA7dz1hcmd1bWVudHNbMV07bmFtZT1hcmd1bWVudHNbM107aWYoYXJndW1lbnRzLmxlbmd0aD4yKXt2YWx1ZT1hcmd1bWVudHNbMl07dmFsdWVTcGVjaWZpZWQ9dHJ1ZX19dj0iIit2O3c9IiIrdztpZighXy5pc1VuZGVmaW5lZChuYW1lKSluYW1lPSIiK25hbWU7dmFyIGU9ZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsdix3LG5hbWUpO2lmKF8uaGFzKHRoaXMuX2VkZ2VMYWJlbHMsCmUpKXtpZih2YWx1ZVNwZWNpZmllZCl0aGlzLl9lZGdlTGFiZWxzW2VdPXZhbHVlO3JldHVybiB0aGlzfWlmKCFfLmlzVW5kZWZpbmVkKG5hbWUpJiYhdGhpcy5faXNNdWx0aWdyYXBoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBhIG5hbWVkIGVkZ2Ugd2hlbiBpc011bHRpZ3JhcGggXHgzZCBmYWxzZSIpO3RoaXMuc2V0Tm9kZSh2KTt0aGlzLnNldE5vZGUodyk7dGhpcy5fZWRnZUxhYmVsc1tlXT12YWx1ZVNwZWNpZmllZD92YWx1ZTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odix3LG5hbWUpO3ZhciBlZGdlT2JqPWVkZ2VBcmdzVG9PYmoodGhpcy5faXNEaXJlY3RlZCx2LHcsbmFtZSk7dj1lZGdlT2JqLnY7dz1lZGdlT2JqLnc7T2JqZWN0LmZyZWV6ZShlZGdlT2JqKTt0aGlzLl9lZGdlT2Jqc1tlXT1lZGdlT2JqO2luY3JlbWVudE9ySW5pdEVudHJ5KHRoaXMuX3ByZWRzW3ddLHYpO2luY3JlbWVudE9ySW5pdEVudHJ5KHRoaXMuX3N1Y3Nbdl0sdyk7dGhpcy5faW5bd11bZV09CmVkZ2VPYmo7dGhpcy5fb3V0W3ZdW2VdPWVkZ2VPYmo7dGhpcy5fZWRnZUNvdW50Kys7cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKHYsdyxuYW1lKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPT09MT9lZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6ZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsdix3LG5hbWUpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW2VdfTtHcmFwaC5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbih2LHcsbmFtZSl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD09PTE/ZWRnZU9ialRvSWQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOmVkZ2VBcmdzVG9JZCh0aGlzLl9pc0RpcmVjdGVkLHYsdyxuYW1lKTtyZXR1cm4gXy5oYXModGhpcy5fZWRnZUxhYmVscyxlKX07R3JhcGgucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odix3LG5hbWUpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg9PT0xPwplZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6ZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsdix3LG5hbWUpLGVkZ2U9dGhpcy5fZWRnZU9ianNbZV07aWYoZWRnZSl7dj1lZGdlLnY7dz1lZGdlLnc7ZGVsZXRlIHRoaXMuX2VkZ2VMYWJlbHNbZV07ZGVsZXRlIHRoaXMuX2VkZ2VPYmpzW2VdO2RlY3JlbWVudE9yUmVtb3ZlRW50cnkodGhpcy5fcHJlZHNbd10sdik7ZGVjcmVtZW50T3JSZW1vdmVFbnRyeSh0aGlzLl9zdWNzW3ZdLHcpO2RlbGV0ZSB0aGlzLl9pblt3XVtlXTtkZWxldGUgdGhpcy5fb3V0W3ZdW2VdO3RoaXMuX2VkZ2VDb3VudC0tfXJldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbih2LHUpe3ZhciBpblY9dGhpcy5faW5bdl07aWYoaW5WKXt2YXIgZWRnZXM9Xy52YWx1ZXMoaW5WKTtpZighdSlyZXR1cm4gZWRnZXM7cmV0dXJuIF8uZmlsdGVyKGVkZ2VzLGZ1bmN0aW9uKGVkZ2Upe3JldHVybiBlZGdlLnY9PT0KdX0pfX07R3JhcGgucHJvdG90eXBlLm91dEVkZ2VzPWZ1bmN0aW9uKHYsdyl7dmFyIG91dFY9dGhpcy5fb3V0W3ZdO2lmKG91dFYpe3ZhciBlZGdlcz1fLnZhbHVlcyhvdXRWKTtpZighdylyZXR1cm4gZWRnZXM7cmV0dXJuIF8uZmlsdGVyKGVkZ2VzLGZ1bmN0aW9uKGVkZ2Upe3JldHVybiBlZGdlLnc9PT13fSl9fTtHcmFwaC5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKHYsdyl7dmFyIGluRWRnZXM9dGhpcy5pbkVkZ2VzKHYsdyk7aWYoaW5FZGdlcylyZXR1cm4gaW5FZGdlcy5jb25jYXQodGhpcy5vdXRFZGdlcyh2LHcpKX07ZnVuY3Rpb24gaW5jcmVtZW50T3JJbml0RW50cnkobWFwLGspe2lmKG1hcFtrXSltYXBba10rKztlbHNlIG1hcFtrXT0xfWZ1bmN0aW9uIGRlY3JlbWVudE9yUmVtb3ZlRW50cnkobWFwLGspe2lmKCEtLW1hcFtrXSlkZWxldGUgbWFwW2tdfWZ1bmN0aW9uIGVkZ2VBcmdzVG9JZChpc0RpcmVjdGVkLHZfLHdfLG5hbWUpe3ZhciB2PSIiK3ZfO3ZhciB3PQoiIit3XztpZighaXNEaXJlY3RlZCYmdj53KXt2YXIgdG1wPXY7dj13O3c9dG1wfXJldHVybiB2K0VER0VfS0VZX0RFTElNK3crRURHRV9LRVlfREVMSU0rKF8uaXNVbmRlZmluZWQobmFtZSk/REVGQVVMVF9FREdFX05BTUU6bmFtZSl9ZnVuY3Rpb24gZWRnZUFyZ3NUb09iaihpc0RpcmVjdGVkLHZfLHdfLG5hbWUpe3ZhciB2PSIiK3ZfO3ZhciB3PSIiK3dfO2lmKCFpc0RpcmVjdGVkJiZ2Pncpe3ZhciB0bXA9djt2PXc7dz10bXB9dmFyIGVkZ2VPYmo9e3Y6dix3Ond9O2lmKG5hbWUpZWRnZU9iai5uYW1lPW5hbWU7cmV0dXJuIGVkZ2VPYmp9ZnVuY3Rpb24gZWRnZU9ialRvSWQoaXNEaXJlY3RlZCxlZGdlT2JqKXtyZXR1cm4gZWRnZUFyZ3NUb0lkKGlzRGlyZWN0ZWQsZWRnZU9iai52LGVkZ2VPYmoudyxlZGdlT2JqLm5hbWUpfX0seyIuL2xvZGFzaCI6MTl9XSwxNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9e0dyYXBoOnJlcXVpcmUoIi4vZ3JhcGgiKSwKdmVyc2lvbjpyZXF1aXJlKCIuL3ZlcnNpb24iKX19LHsiLi9ncmFwaCI6MTYsIi4vdmVyc2lvbiI6MjB9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSxHcmFwaD1yZXF1aXJlKCIuL2dyYXBoIik7bW9kdWxlLmV4cG9ydHM9e3dyaXRlOndyaXRlLHJlYWQ6cmVhZH07ZnVuY3Rpb24gd3JpdGUoZyl7dmFyIGpzb249e29wdGlvbnM6e2RpcmVjdGVkOmcuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6Zy5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDpnLmlzQ29tcG91bmQoKX0sbm9kZXM6d3JpdGVOb2RlcyhnKSxlZGdlczp3cml0ZUVkZ2VzKGcpfTtpZighXy5pc1VuZGVmaW5lZChnLmdyYXBoKCkpKWpzb24udmFsdWU9Xy5jbG9uZShnLmdyYXBoKCkpO3JldHVybiBqc29ufWZ1bmN0aW9uIHdyaXRlTm9kZXMoZyl7cmV0dXJuIF8ubWFwKGcubm9kZXMoKSxmdW5jdGlvbih2KXt2YXIgbm9kZVZhbHVlPWcubm9kZSh2KSxwYXJlbnQ9CmcucGFyZW50KHYpLG5vZGU9e3Y6dn07aWYoIV8uaXNVbmRlZmluZWQobm9kZVZhbHVlKSlub2RlLnZhbHVlPW5vZGVWYWx1ZTtpZighXy5pc1VuZGVmaW5lZChwYXJlbnQpKW5vZGUucGFyZW50PXBhcmVudDtyZXR1cm4gbm9kZX0pfWZ1bmN0aW9uIHdyaXRlRWRnZXMoZyl7cmV0dXJuIF8ubWFwKGcuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZVZhbHVlPWcuZWRnZShlKSxlZGdlPXt2OmUudix3OmUud307aWYoIV8uaXNVbmRlZmluZWQoZS5uYW1lKSllZGdlLm5hbWU9ZS5uYW1lO2lmKCFfLmlzVW5kZWZpbmVkKGVkZ2VWYWx1ZSkpZWRnZS52YWx1ZT1lZGdlVmFsdWU7cmV0dXJuIGVkZ2V9KX1mdW5jdGlvbiByZWFkKGpzb24pe3ZhciBnPShuZXcgR3JhcGgoanNvbi5vcHRpb25zKSkuc2V0R3JhcGgoanNvbi52YWx1ZSk7Xy5lYWNoKGpzb24ubm9kZXMsZnVuY3Rpb24oZW50cnkpe2cuc2V0Tm9kZShlbnRyeS52LGVudHJ5LnZhbHVlKTtpZihlbnRyeS5wYXJlbnQpZy5zZXRQYXJlbnQoZW50cnkudiwKZW50cnkucGFyZW50KX0pO18uZWFjaChqc29uLmVkZ2VzLGZ1bmN0aW9uKGVudHJ5KXtnLnNldEVkZ2Uoe3Y6ZW50cnkudix3OmVudHJ5LncsbmFtZTplbnRyeS5uYW1lfSxlbnRyeS52YWx1ZSl9KTtyZXR1cm4gZ319LHsiLi9ncmFwaCI6MTYsIi4vbG9kYXNoIjoxOX1dLDE5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgbG9kYXNoO2lmKHR5cGVvZiByZXF1aXJlPT09ImZ1bmN0aW9uIil0cnl7bG9kYXNoPXJlcXVpcmUoImxvZGFzaCIpfWNhdGNoKGUpe31pZighbG9kYXNoKWxvZGFzaD13aW5kb3cuXzttb2R1bGUuZXhwb3J0cz1sb2Rhc2h9LHsibG9kYXNoIjp1bmRlZmluZWR9XSwyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9IjIuMS41In0se31dfSx7fSxbMV0pKDEpfSk7CihmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpbW9kdWxlLmV4cG9ydHM9ZigpO2Vsc2UgaWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpZGVmaW5lKFtdLGYpO2Vsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKWc9d2luZG93O2Vsc2UgaWYodHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiKWc9Z2xvYmFsO2Vsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5kZWZpbmVkIilnPXNlbGY7ZWxzZSBnPXRoaXM7Zy5kYWdyZT1mKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPQpuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmO312YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz17Z3JhcGhsaWI6cmVxdWlyZSgiLi9saWIvZ3JhcGhsaWIiKSxsYXlvdXQ6cmVxdWlyZSgiLi9saWIvbGF5b3V0IiksZGVidWc6cmVxdWlyZSgiLi9saWIvZGVidWciKSx1dGlsOnt0aW1lOnJlcXVpcmUoIi4vbGliL3V0aWwiKS50aW1lLG5vdGltZTpyZXF1aXJlKCIuL2xpYi91dGlsIikubm90aW1lfSwKdmVyc2lvbjpyZXF1aXJlKCIuL2xpYi92ZXJzaW9uIil9fSx7Ii4vbGliL2RlYnVnIjo2LCIuL2xpYi9ncmFwaGxpYiI6NywiLi9saWIvbGF5b3V0Ijo5LCIuL2xpYi91dGlsIjoyOSwiLi9saWIvdmVyc2lvbiI6MzB9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLGdyZWVkeUZBUz1yZXF1aXJlKCIuL2dyZWVkeS1mYXMiKTttb2R1bGUuZXhwb3J0cz17cnVuOnJ1bix1bmRvOnVuZG99O2Z1bmN0aW9uIHJ1bihnKXt2YXIgZmFzPWcuZ3JhcGgoKS5hY3ljbGljZXI9PT0iZ3JlZWR5Ij9ncmVlZHlGQVMoZyx3ZWlnaHRGbihnKSk6ZGZzRkFTKGcpO18uZm9yRWFjaChmYXMsZnVuY3Rpb24oZSl7dmFyIGxhYmVsPWcuZWRnZShlKTtnLnJlbW92ZUVkZ2UoZSk7bGFiZWwuZm9yd2FyZE5hbWU9ZS5uYW1lO2xhYmVsLnJldmVyc2VkPXRydWU7Zy5zZXRFZGdlKGUudyxlLnYsbGFiZWwsXy51bmlxdWVJZCgicmV2IikpfSk7ZnVuY3Rpb24gd2VpZ2h0Rm4oZyl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBnLmVkZ2UoZSkud2VpZ2h0fX0KfWZ1bmN0aW9uIGRmc0ZBUyhnKXt2YXIgZmFzPVtdLHN0YWNrPXt9LHZpc2l0ZWQ9e307ZnVuY3Rpb24gZGZzKHYpe2lmKF8uaGFzKHZpc2l0ZWQsdikpcmV0dXJuO3Zpc2l0ZWRbdl09dHJ1ZTtzdGFja1t2XT10cnVlO18uZm9yRWFjaChnLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGUpe2lmKF8uaGFzKHN0YWNrLGUudykpZmFzLnB1c2goZSk7ZWxzZSBkZnMoZS53KX0pO2RlbGV0ZSBzdGFja1t2XX1fLmZvckVhY2goZy5ub2RlcygpLGRmcyk7cmV0dXJuIGZhc31mdW5jdGlvbiB1bmRvKGcpe18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGxhYmVsPWcuZWRnZShlKTtpZihsYWJlbC5yZXZlcnNlZCl7Zy5yZW1vdmVFZGdlKGUpO3ZhciBmb3J3YXJkTmFtZT1sYWJlbC5mb3J3YXJkTmFtZTtkZWxldGUgbGFiZWwucmV2ZXJzZWQ7ZGVsZXRlIGxhYmVsLmZvcndhcmROYW1lO2cuc2V0RWRnZShlLncsZS52LGxhYmVsLGZvcndhcmROYW1lKX19KX19LHsiLi9ncmVlZHktZmFzIjo4LAoiLi9sb2Rhc2giOjEwfV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4vdXRpbCIpO21vZHVsZS5leHBvcnRzPWFkZEJvcmRlclNlZ21lbnRzO2Z1bmN0aW9uIGFkZEJvcmRlclNlZ21lbnRzKGcpe2Z1bmN0aW9uIGRmcyh2KXt2YXIgY2hpbGRyZW49Zy5jaGlsZHJlbih2KSxub2RlPWcubm9kZSh2KTtpZihjaGlsZHJlbi5sZW5ndGgpXy5mb3JFYWNoKGNoaWxkcmVuLGRmcyk7aWYoXy5oYXMobm9kZSwibWluUmFuayIpKXtub2RlLmJvcmRlckxlZnQ9W107bm9kZS5ib3JkZXJSaWdodD1bXTtmb3IodmFyIHJhbms9bm9kZS5taW5SYW5rLG1heFJhbms9bm9kZS5tYXhSYW5rKzE7cmFuazxtYXhSYW5rOysrcmFuayl7YWRkQm9yZGVyTm9kZShnLCJib3JkZXJMZWZ0IiwiX2JsIix2LG5vZGUscmFuayk7YWRkQm9yZGVyTm9kZShnLCJib3JkZXJSaWdodCIsIl9iciIsdixub2RlLHJhbmspfX19Xy5mb3JFYWNoKGcuY2hpbGRyZW4oKSwKZGZzKX1mdW5jdGlvbiBhZGRCb3JkZXJOb2RlKGcscHJvcCxwcmVmaXgsc2csc2dOb2RlLHJhbmspe3ZhciBsYWJlbD17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOnJhbmssYm9yZGVyVHlwZTpwcm9wfSxwcmV2PXNnTm9kZVtwcm9wXVtyYW5rLTFdLGN1cnI9dXRpbC5hZGREdW1teU5vZGUoZywiYm9yZGVyIixsYWJlbCxwcmVmaXgpO3NnTm9kZVtwcm9wXVtyYW5rXT1jdXJyO2cuc2V0UGFyZW50KGN1cnIsc2cpO2lmKHByZXYpZy5zZXRFZGdlKHByZXYsY3Vycix7d2VpZ2h0OjF9KX19LHsiLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI5fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz17YWRqdXN0OmFkanVzdCx1bmRvOnVuZG99O2Z1bmN0aW9uIGFkanVzdChnKXt2YXIgcmFua0Rpcj1nLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpO2lmKHJhbmtEaXI9PT0ibHIifHxyYW5rRGlyPT09InJsIilzd2FwV2lkdGhIZWlnaHQoZyl9CmZ1bmN0aW9uIHVuZG8oZyl7dmFyIHJhbmtEaXI9Zy5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTtpZihyYW5rRGlyPT09ImJ0Inx8cmFua0Rpcj09PSJybCIpcmV2ZXJzZVkoZyk7aWYocmFua0Rpcj09PSJsciJ8fHJhbmtEaXI9PT0icmwiKXtzd2FwWFkoZyk7c3dhcFdpZHRoSGVpZ2h0KGcpfX1mdW5jdGlvbiBzd2FwV2lkdGhIZWlnaHQoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtzd2FwV2lkdGhIZWlnaHRPbmUoZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7c3dhcFdpZHRoSGVpZ2h0T25lKGcuZWRnZShlKSl9KX1mdW5jdGlvbiBzd2FwV2lkdGhIZWlnaHRPbmUoYXR0cnMpe3ZhciB3PWF0dHJzLndpZHRoO2F0dHJzLndpZHRoPWF0dHJzLmhlaWdodDthdHRycy5oZWlnaHQ9d31mdW5jdGlvbiByZXZlcnNlWShnKXtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3JldmVyc2VZT25lKGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLApmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSk7Xy5mb3JFYWNoKGVkZ2UucG9pbnRzLHJldmVyc2VZT25lKTtpZihfLmhhcyhlZGdlLCJ5IikpcmV2ZXJzZVlPbmUoZWRnZSl9KX1mdW5jdGlvbiByZXZlcnNlWU9uZShhdHRycyl7YXR0cnMueT0tYXR0cnMueX1mdW5jdGlvbiBzd2FwWFkoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtzd2FwWFlPbmUoZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO18uZm9yRWFjaChlZGdlLnBvaW50cyxzd2FwWFlPbmUpO2lmKF8uaGFzKGVkZ2UsIngiKSlzd2FwWFlPbmUoZWRnZSl9KX1mdW5jdGlvbiBzd2FwWFlPbmUoYXR0cnMpe3ZhciB4PWF0dHJzLng7YXR0cnMueD1hdHRycy55O2F0dHJzLnk9eH19LHsiLi9sb2Rhc2giOjEwfV0sNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9TGlzdDtmdW5jdGlvbiBMaXN0KCl7dmFyIHNlbnRpbmVsPQp7fTtzZW50aW5lbC5fbmV4dD1zZW50aW5lbC5fcHJldj1zZW50aW5lbDt0aGlzLl9zZW50aW5lbD1zZW50aW5lbH1MaXN0LnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsLGVudHJ5PXNlbnRpbmVsLl9wcmV2O2lmKGVudHJ5IT09c2VudGluZWwpe3VubGluayhlbnRyeSk7cmV0dXJuIGVudHJ5fX07TGlzdC5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbihlbnRyeSl7dmFyIHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsO2lmKGVudHJ5Ll9wcmV2JiZlbnRyeS5fbmV4dCl1bmxpbmsoZW50cnkpO2VudHJ5Ll9uZXh0PXNlbnRpbmVsLl9uZXh0O3NlbnRpbmVsLl9uZXh0Ll9wcmV2PWVudHJ5O3NlbnRpbmVsLl9uZXh0PWVudHJ5O2VudHJ5Ll9wcmV2PXNlbnRpbmVsfTtMaXN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBzdHJzPVtdLHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsLGN1cnI9c2VudGluZWwuX3ByZXY7d2hpbGUoY3VyciE9PQpzZW50aW5lbCl7c3Rycy5wdXNoKEpTT04uc3RyaW5naWZ5KGN1cnIsZmlsdGVyT3V0TGlua3MpKTtjdXJyPWN1cnIuX3ByZXZ9cmV0dXJuIlsiK3N0cnMuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIHVubGluayhlbnRyeSl7ZW50cnkuX3ByZXYuX25leHQ9ZW50cnkuX25leHQ7ZW50cnkuX25leHQuX3ByZXY9ZW50cnkuX3ByZXY7ZGVsZXRlIGVudHJ5Ll9uZXh0O2RlbGV0ZSBlbnRyeS5fcHJldn1mdW5jdGlvbiBmaWx0ZXJPdXRMaW5rcyhrLHYpe2lmKGshPT0iX25leHQiJiZrIT09Il9wcmV2IilyZXR1cm4gdn19LHt9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLHV0aWw9cmVxdWlyZSgiLi91dGlsIiksR3JhcGg9cmVxdWlyZSgiLi9ncmFwaGxpYiIpLkdyYXBoO21vZHVsZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOmRlYnVnT3JkZXJpbmd9O2Z1bmN0aW9uIGRlYnVnT3JkZXJpbmcoZyl7dmFyIGxheWVyTWF0cml4PQp1dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7dmFyIGg9KG5ldyBHcmFwaCh7Y29tcG91bmQ6dHJ1ZSxtdWx0aWdyYXBoOnRydWV9KSkuc2V0R3JhcGgoe30pO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7aC5zZXROb2RlKHYse2xhYmVsOnZ9KTtoLnNldFBhcmVudCh2LCJsYXllciIrZy5ub2RlKHYpLnJhbmspfSk7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXtoLnNldEVkZ2UoZS52LGUudyx7fSxlLm5hbWUpfSk7Xy5mb3JFYWNoKGxheWVyTWF0cml4LGZ1bmN0aW9uKGxheWVyLGkpe3ZhciBsYXllclY9ImxheWVyIitpO2guc2V0Tm9kZShsYXllclYse3Jhbms6InNhbWUifSk7Xy5yZWR1Y2UobGF5ZXIsZnVuY3Rpb24odSx2KXtoLnNldEVkZ2UodSx2LHtzdHlsZToiaW52aXMifSk7cmV0dXJuIHZ9KX0pO3JldHVybiBofX0seyIuL2dyYXBobGliIjo3LCIuL2xvZGFzaCI6MTAsIi4vdXRpbCI6Mjl9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgZ3JhcGhsaWI7CmlmKHR5cGVvZiByZXF1aXJlPT09ImZ1bmN0aW9uIil0cnl7Z3JhcGhsaWI9cmVxdWlyZSgiZ3JhcGhsaWIiKX1jYXRjaChlKXt9aWYoIWdyYXBobGliKWdyYXBobGliPXdpbmRvdy5ncmFwaGxpYjttb2R1bGUuZXhwb3J0cz1ncmFwaGxpYn0seyJncmFwaGxpYiI6dW5kZWZpbmVkfV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSxHcmFwaD1yZXF1aXJlKCIuL2dyYXBobGliIikuR3JhcGgsTGlzdD1yZXF1aXJlKCIuL2RhdGEvbGlzdCIpO21vZHVsZS5leHBvcnRzPWdyZWVkeUZBUzt2YXIgREVGQVVMVF9XRUlHSFRfRk49Xy5jb25zdGFudCgxKTtmdW5jdGlvbiBncmVlZHlGQVMoZyx3ZWlnaHRGbil7aWYoZy5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgc3RhdGU9YnVpbGRTdGF0ZShnLHdlaWdodEZufHxERUZBVUxUX1dFSUdIVF9GTik7dmFyIHJlc3VsdHM9ZG9HcmVlZHlGQVMoc3RhdGUuZ3JhcGgsc3RhdGUuYnVja2V0cywKc3RhdGUuemVyb0lkeCk7cmV0dXJuIF8uZmxhdHRlbihfLm1hcChyZXN1bHRzLGZ1bmN0aW9uKGUpe3JldHVybiBnLm91dEVkZ2VzKGUudixlLncpfSksdHJ1ZSl9ZnVuY3Rpb24gZG9HcmVlZHlGQVMoZyxidWNrZXRzLHplcm9JZHgpe3ZhciByZXN1bHRzPVtdLHNvdXJjZXM9YnVja2V0c1tidWNrZXRzLmxlbmd0aC0xXSxzaW5rcz1idWNrZXRzWzBdO3ZhciBlbnRyeTt3aGlsZShnLm5vZGVDb3VudCgpKXt3aGlsZShlbnRyeT1zaW5rcy5kZXF1ZXVlKCkpcmVtb3ZlTm9kZShnLGJ1Y2tldHMsemVyb0lkeCxlbnRyeSk7d2hpbGUoZW50cnk9c291cmNlcy5kZXF1ZXVlKCkpcmVtb3ZlTm9kZShnLGJ1Y2tldHMsemVyb0lkeCxlbnRyeSk7aWYoZy5ub2RlQ291bnQoKSlmb3IodmFyIGk9YnVja2V0cy5sZW5ndGgtMjtpPjA7LS1pKXtlbnRyeT1idWNrZXRzW2ldLmRlcXVldWUoKTtpZihlbnRyeSl7cmVzdWx0cz1yZXN1bHRzLmNvbmNhdChyZW1vdmVOb2RlKGcsYnVja2V0cyx6ZXJvSWR4LAplbnRyeSx0cnVlKSk7YnJlYWt9fX1yZXR1cm4gcmVzdWx0c31mdW5jdGlvbiByZW1vdmVOb2RlKGcsYnVja2V0cyx6ZXJvSWR4LGVudHJ5LGNvbGxlY3RQcmVkZWNlc3NvcnMpe3ZhciByZXN1bHRzPWNvbGxlY3RQcmVkZWNlc3NvcnM/W106dW5kZWZpbmVkO18uZm9yRWFjaChnLmluRWRnZXMoZW50cnkudiksZnVuY3Rpb24oZWRnZSl7dmFyIHdlaWdodD1nLmVkZ2UoZWRnZSksdUVudHJ5PWcubm9kZShlZGdlLnYpO2lmKGNvbGxlY3RQcmVkZWNlc3NvcnMpcmVzdWx0cy5wdXNoKHt2OmVkZ2Uudix3OmVkZ2Uud30pO3VFbnRyeS5vdXQtPXdlaWdodDthc3NpZ25CdWNrZXQoYnVja2V0cyx6ZXJvSWR4LHVFbnRyeSl9KTtfLmZvckVhY2goZy5vdXRFZGdlcyhlbnRyeS52KSxmdW5jdGlvbihlZGdlKXt2YXIgd2VpZ2h0PWcuZWRnZShlZGdlKSx3PWVkZ2Uudyx3RW50cnk9Zy5ub2RlKHcpO3dFbnRyeVsiaW4iXS09d2VpZ2h0O2Fzc2lnbkJ1Y2tldChidWNrZXRzLHplcm9JZHgsd0VudHJ5KX0pOwpnLnJlbW92ZU5vZGUoZW50cnkudik7cmV0dXJuIHJlc3VsdHN9ZnVuY3Rpb24gYnVpbGRTdGF0ZShnLHdlaWdodEZuKXt2YXIgZmFzR3JhcGg9bmV3IEdyYXBoLG1heEluPTAsbWF4T3V0PTA7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtmYXNHcmFwaC5zZXROb2RlKHYse3Y6diwiaW4iOjAsb3V0OjB9KX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHByZXZXZWlnaHQ9ZmFzR3JhcGguZWRnZShlLnYsZS53KXx8MCx3ZWlnaHQ9d2VpZ2h0Rm4oZSksZWRnZVdlaWdodD1wcmV2V2VpZ2h0K3dlaWdodDtmYXNHcmFwaC5zZXRFZGdlKGUudixlLncsZWRnZVdlaWdodCk7bWF4T3V0PU1hdGgubWF4KG1heE91dCxmYXNHcmFwaC5ub2RlKGUudikub3V0Kz13ZWlnaHQpO21heEluPU1hdGgubWF4KG1heEluLGZhc0dyYXBoLm5vZGUoZS53KVsiaW4iXSs9d2VpZ2h0KX0pO3ZhciBidWNrZXRzPV8ucmFuZ2UobWF4T3V0K21heEluKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgTGlzdH0pOwp2YXIgemVyb0lkeD1tYXhJbisxO18uZm9yRWFjaChmYXNHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe2Fzc2lnbkJ1Y2tldChidWNrZXRzLHplcm9JZHgsZmFzR3JhcGgubm9kZSh2KSl9KTtyZXR1cm57Z3JhcGg6ZmFzR3JhcGgsYnVja2V0czpidWNrZXRzLHplcm9JZHg6emVyb0lkeH19ZnVuY3Rpb24gYXNzaWduQnVja2V0KGJ1Y2tldHMsemVyb0lkeCxlbnRyeSl7aWYoIWVudHJ5Lm91dClidWNrZXRzWzBdLmVucXVldWUoZW50cnkpO2Vsc2UgaWYoIWVudHJ5WyJpbiJdKWJ1Y2tldHNbYnVja2V0cy5sZW5ndGgtMV0uZW5xdWV1ZShlbnRyeSk7ZWxzZSBidWNrZXRzW2VudHJ5Lm91dC1lbnRyeVsiaW4iXSt6ZXJvSWR4XS5lbnF1ZXVlKGVudHJ5KX19LHsiLi9kYXRhL2xpc3QiOjUsIi4vZ3JhcGhsaWIiOjcsIi4vbG9kYXNoIjoxMH1dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIiksYWN5Y2xpYz1yZXF1aXJlKCIuL2FjeWNsaWMiKSwKbm9ybWFsaXplPXJlcXVpcmUoIi4vbm9ybWFsaXplIikscmFuaz1yZXF1aXJlKCIuL3JhbmsiKSxub3JtYWxpemVSYW5rcz1yZXF1aXJlKCIuL3V0aWwiKS5ub3JtYWxpemVSYW5rcyxwYXJlbnREdW1teUNoYWlucz1yZXF1aXJlKCIuL3BhcmVudC1kdW1teS1jaGFpbnMiKSxyZW1vdmVFbXB0eVJhbmtzPXJlcXVpcmUoIi4vdXRpbCIpLnJlbW92ZUVtcHR5UmFua3MsbmVzdGluZ0dyYXBoPXJlcXVpcmUoIi4vbmVzdGluZy1ncmFwaCIpLGFkZEJvcmRlclNlZ21lbnRzPXJlcXVpcmUoIi4vYWRkLWJvcmRlci1zZWdtZW50cyIpLGNvb3JkaW5hdGVTeXN0ZW09cmVxdWlyZSgiLi9jb29yZGluYXRlLXN5c3RlbSIpLG9yZGVyPXJlcXVpcmUoIi4vb3JkZXIiKSxwb3NpdGlvbj1yZXF1aXJlKCIuL3Bvc2l0aW9uIiksdXRpbD1yZXF1aXJlKCIuL3V0aWwiKSxHcmFwaD1yZXF1aXJlKCIuL2dyYXBobGliIikuR3JhcGg7bW9kdWxlLmV4cG9ydHM9bGF5b3V0O2Z1bmN0aW9uIGxheW91dChnLG9wdHMpe3ZhciB0aW1lPQpvcHRzJiZvcHRzLmRlYnVnVGltaW5nP3V0aWwudGltZTp1dGlsLm5vdGltZTt0aW1lKCJsYXlvdXQiLGZ1bmN0aW9uKCl7dmFyIGxheW91dEdyYXBoPXRpbWUoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gYnVpbGRMYXlvdXRHcmFwaChnKX0pO3RpbWUoIiAgcnVuTGF5b3V0IixmdW5jdGlvbigpe3J1bkxheW91dChsYXlvdXRHcmFwaCx0aW1lKX0pO3RpbWUoIiAgdXBkYXRlSW5wdXRHcmFwaCIsZnVuY3Rpb24oKXt1cGRhdGVJbnB1dEdyYXBoKGcsbGF5b3V0R3JhcGgpfSl9KX1mdW5jdGlvbiBydW5MYXlvdXQoZyx0aW1lKXt0aW1lKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsZnVuY3Rpb24oKXttYWtlU3BhY2VGb3JFZGdlTGFiZWxzKGcpfSk7dGltZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsZnVuY3Rpb24oKXtyZW1vdmVTZWxmRWRnZXMoZyl9KTt0aW1lKCIgICAgYWN5Y2xpYyIsZnVuY3Rpb24oKXthY3ljbGljLnJ1bihnKX0pO3RpbWUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwKZnVuY3Rpb24oKXtuZXN0aW5nR3JhcGgucnVuKGcpfSk7dGltZSgiICAgIHJhbmsiLGZ1bmN0aW9uKCl7cmFuayh1dGlsLmFzTm9uQ29tcG91bmRHcmFwaChnKSl9KTt0aW1lKCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtpbmplY3RFZGdlTGFiZWxQcm94aWVzKGcpfSk7dGltZSgiICAgIHJlbW92ZUVtcHR5UmFua3MiLGZ1bmN0aW9uKCl7cmVtb3ZlRW1wdHlSYW5rcyhnKX0pO3RpbWUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtuZXN0aW5nR3JhcGguY2xlYW51cChnKX0pO3RpbWUoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtub3JtYWxpemVSYW5rcyhnKX0pO3RpbWUoIiAgICBhc3NpZ25SYW5rTWluTWF4IixmdW5jdGlvbigpe2Fzc2lnblJhbmtNaW5NYXgoZyl9KTt0aW1lKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtyZW1vdmVFZGdlTGFiZWxQcm94aWVzKGcpfSk7dGltZSgiICAgIG5vcm1hbGl6ZS5ydW4iLApmdW5jdGlvbigpe25vcm1hbGl6ZS5ydW4oZyl9KTt0aW1lKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLGZ1bmN0aW9uKCl7cGFyZW50RHVtbXlDaGFpbnMoZyl9KTt0aW1lKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLGZ1bmN0aW9uKCl7YWRkQm9yZGVyU2VnbWVudHMoZyl9KTt0aW1lKCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7b3JkZXIoZyl9KTt0aW1lKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIixmdW5jdGlvbigpe2luc2VydFNlbGZFZGdlcyhnKX0pO3RpbWUoIiAgICBhZGp1c3RDb29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe2Nvb3JkaW5hdGVTeXN0ZW0uYWRqdXN0KGcpfSk7dGltZSgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe3Bvc2l0aW9uKGcpfSk7dGltZSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIixmdW5jdGlvbigpe3Bvc2l0aW9uU2VsZkVkZ2VzKGcpfSk7dGltZSgiICAgIHJlbW92ZUJvcmRlck5vZGVzIixmdW5jdGlvbigpe3JlbW92ZUJvcmRlck5vZGVzKGcpfSk7dGltZSgiICAgIG5vcm1hbGl6ZS51bmRvIiwKZnVuY3Rpb24oKXtub3JtYWxpemUudW5kbyhnKX0pO3RpbWUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsZnVuY3Rpb24oKXtmaXh1cEVkZ2VMYWJlbENvb3JkcyhnKX0pO3RpbWUoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtjb29yZGluYXRlU3lzdGVtLnVuZG8oZyl9KTt0aW1lKCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7dHJhbnNsYXRlR3JhcGgoZyl9KTt0aW1lKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7YXNzaWduTm9kZUludGVyc2VjdHMoZyl9KTt0aW1lKCIgICAgcmV2ZXJzZVBvaW50cyIsZnVuY3Rpb24oKXtyZXZlcnNlUG9pbnRzRm9yUmV2ZXJzZWRFZGdlcyhnKX0pO3RpbWUoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7YWN5Y2xpYy51bmRvKGcpfSl9ZnVuY3Rpb24gdXBkYXRlSW5wdXRHcmFwaChpbnB1dEdyYXBoLGxheW91dEdyYXBoKXtfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBpbnB1dExhYmVsPQppbnB1dEdyYXBoLm5vZGUodiksbGF5b3V0TGFiZWw9bGF5b3V0R3JhcGgubm9kZSh2KTtpZihpbnB1dExhYmVsKXtpbnB1dExhYmVsLng9bGF5b3V0TGFiZWwueDtpbnB1dExhYmVsLnk9bGF5b3V0TGFiZWwueTtpZihsYXlvdXRHcmFwaC5jaGlsZHJlbih2KS5sZW5ndGgpe2lucHV0TGFiZWwud2lkdGg9bGF5b3V0TGFiZWwud2lkdGg7aW5wdXRMYWJlbC5oZWlnaHQ9bGF5b3V0TGFiZWwuaGVpZ2h0fX19KTtfLmZvckVhY2goaW5wdXRHcmFwaC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBpbnB1dExhYmVsPWlucHV0R3JhcGguZWRnZShlKSxsYXlvdXRMYWJlbD1sYXlvdXRHcmFwaC5lZGdlKGUpO2lucHV0TGFiZWwucG9pbnRzPWxheW91dExhYmVsLnBvaW50cztpZihfLmhhcyhsYXlvdXRMYWJlbCwieCIpKXtpbnB1dExhYmVsLng9bGF5b3V0TGFiZWwueDtpbnB1dExhYmVsLnk9bGF5b3V0TGFiZWwueX19KTtpbnB1dEdyYXBoLmdyYXBoKCkud2lkdGg9bGF5b3V0R3JhcGguZ3JhcGgoKS53aWR0aDsKaW5wdXRHcmFwaC5ncmFwaCgpLmhlaWdodD1sYXlvdXRHcmFwaC5ncmFwaCgpLmhlaWdodH12YXIgZ3JhcGhOdW1BdHRycz1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sZ3JhcGhEZWZhdWx0cz17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxncmFwaEF0dHJzPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sbm9kZU51bUF0dHJzPVsid2lkdGgiLCJoZWlnaHQiXSxub2RlRGVmYXVsdHM9e3dpZHRoOjAsaGVpZ2h0OjB9LGVkZ2VOdW1BdHRycz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxlZGdlRGVmYXVsdHM9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxlZGdlQXR0cnM9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIGJ1aWxkTGF5b3V0R3JhcGgoaW5wdXRHcmFwaCl7dmFyIGc9Cm5ldyBHcmFwaCh7bXVsdGlncmFwaDp0cnVlLGNvbXBvdW5kOnRydWV9KSxncmFwaD1jYW5vbmljYWxpemUoaW5wdXRHcmFwaC5ncmFwaCgpKTtnLnNldEdyYXBoKF8ubWVyZ2Uoe30sZ3JhcGhEZWZhdWx0cyxzZWxlY3ROdW1iZXJBdHRycyhncmFwaCxncmFwaE51bUF0dHJzKSxfLnBpY2soZ3JhcGgsZ3JhcGhBdHRycykpKTtfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWNhbm9uaWNhbGl6ZShpbnB1dEdyYXBoLm5vZGUodikpO2cuc2V0Tm9kZSh2LF8uZGVmYXVsdHMoc2VsZWN0TnVtYmVyQXR0cnMobm9kZSxub2RlTnVtQXR0cnMpLG5vZGVEZWZhdWx0cykpO2cuc2V0UGFyZW50KHYsaW5wdXRHcmFwaC5wYXJlbnQodikpfSk7Xy5mb3JFYWNoKGlucHV0R3JhcGguZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1jYW5vbmljYWxpemUoaW5wdXRHcmFwaC5lZGdlKGUpKTtnLnNldEVkZ2UoZSxfLm1lcmdlKHt9LGVkZ2VEZWZhdWx0cyxzZWxlY3ROdW1iZXJBdHRycyhlZGdlLAplZGdlTnVtQXR0cnMpLF8ucGljayhlZGdlLGVkZ2VBdHRycykpKX0pO3JldHVybiBnfWZ1bmN0aW9uIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMoZyl7dmFyIGdyYXBoPWcuZ3JhcGgoKTtncmFwaC5yYW5rc2VwLz0yO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO2VkZ2UubWlubGVuKj0yO2lmKGVkZ2UubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIilpZihncmFwaC5yYW5rZGlyPT09IlRCInx8Z3JhcGgucmFua2Rpcj09PSJCVCIpZWRnZS53aWR0aCs9ZWRnZS5sYWJlbG9mZnNldDtlbHNlIGVkZ2UuaGVpZ2h0Kz1lZGdlLmxhYmVsb2Zmc2V0fSl9ZnVuY3Rpb24gaW5qZWN0RWRnZUxhYmVsUHJveGllcyhnKXtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihlZGdlLndpZHRoJiZlZGdlLmhlaWdodCl7dmFyIHY9Zy5ub2RlKGUudiksdz1nLm5vZGUoZS53KSxsYWJlbD17cmFuazoody5yYW5rLQp2LnJhbmspLzIrdi5yYW5rLGU6ZX07dXRpbC5hZGREdW1teU5vZGUoZywiZWRnZS1wcm94eSIsbGFiZWwsIl9lcCIpfX0pfWZ1bmN0aW9uIGFzc2lnblJhbmtNaW5NYXgoZyl7dmFyIG1heFJhbms9MDtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KTtpZihub2RlLmJvcmRlclRvcCl7bm9kZS5taW5SYW5rPWcubm9kZShub2RlLmJvcmRlclRvcCkucmFuaztub2RlLm1heFJhbms9Zy5ub2RlKG5vZGUuYm9yZGVyQm90dG9tKS5yYW5rO21heFJhbms9Xy5tYXgobWF4UmFuayxub2RlLm1heFJhbmspfX0pO2cuZ3JhcGgoKS5tYXhSYW5rPW1heFJhbmt9ZnVuY3Rpb24gcmVtb3ZlRWRnZUxhYmVsUHJveGllcyhnKXtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KTtpZihub2RlLmR1bW15PT09ImVkZ2UtcHJveHkiKXtnLmVkZ2Uobm9kZS5lKS5sYWJlbFJhbms9bm9kZS5yYW5rO2cucmVtb3ZlTm9kZSh2KX19KX0KZnVuY3Rpb24gdHJhbnNsYXRlR3JhcGgoZyl7dmFyIG1pblg9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heFg9MCxtaW5ZPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxtYXhZPTAsZ3JhcGhMYWJlbD1nLmdyYXBoKCksbWFyZ2luWD1ncmFwaExhYmVsLm1hcmdpbnh8fDAsbWFyZ2luWT1ncmFwaExhYmVsLm1hcmdpbnl8fDA7ZnVuY3Rpb24gZ2V0RXh0cmVtZXMoYXR0cnMpe3ZhciB4PWF0dHJzLngseT1hdHRycy55LHc9YXR0cnMud2lkdGgsaD1hdHRycy5oZWlnaHQ7bWluWD1NYXRoLm1pbihtaW5YLHgtdy8yKTttYXhYPU1hdGgubWF4KG1heFgseCt3LzIpO21pblk9TWF0aC5taW4obWluWSx5LWgvMik7bWF4WT1NYXRoLm1heChtYXhZLHkraC8yKX1fLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe2dldEV4dHJlbWVzKGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihfLmhhcyhlZGdlLCJ4IikpZ2V0RXh0cmVtZXMoZWRnZSl9KTsKbWluWC09bWFyZ2luWDttaW5ZLT1tYXJnaW5ZO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpO25vZGUueC09bWluWDtub2RlLnktPW1pbll9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtfLmZvckVhY2goZWRnZS5wb2ludHMsZnVuY3Rpb24ocCl7cC54LT1taW5YO3AueS09bWluWX0pO2lmKF8uaGFzKGVkZ2UsIngiKSllZGdlLngtPW1pblg7aWYoXy5oYXMoZWRnZSwieSIpKWVkZ2UueS09bWluWX0pO2dyYXBoTGFiZWwud2lkdGg9bWF4WC1taW5YK21hcmdpblg7Z3JhcGhMYWJlbC5oZWlnaHQ9bWF4WS1taW5ZK21hcmdpbll9ZnVuY3Rpb24gYXNzaWduTm9kZUludGVyc2VjdHMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSksbm9kZVY9Zy5ub2RlKGUudiksbm9kZVc9Zy5ub2RlKGUudykscDEscDI7aWYoIWVkZ2UucG9pbnRzKXtlZGdlLnBvaW50cz0KW107cDE9bm9kZVc7cDI9bm9kZVZ9ZWxzZXtwMT1lZGdlLnBvaW50c1swXTtwMj1lZGdlLnBvaW50c1tlZGdlLnBvaW50cy5sZW5ndGgtMV19ZWRnZS5wb2ludHMudW5zaGlmdCh1dGlsLmludGVyc2VjdFJlY3Qobm9kZVYscDEpKTtlZGdlLnBvaW50cy5wdXNoKHV0aWwuaW50ZXJzZWN0UmVjdChub2RlVyxwMikpfSl9ZnVuY3Rpb24gZml4dXBFZGdlTGFiZWxDb29yZHMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSk7aWYoXy5oYXMoZWRnZSwieCIpKXtpZihlZGdlLmxhYmVscG9zPT09ImwifHxlZGdlLmxhYmVscG9zPT09InIiKWVkZ2Uud2lkdGgtPWVkZ2UubGFiZWxvZmZzZXQ7c3dpdGNoKGVkZ2UubGFiZWxwb3Mpe2Nhc2UgImwiOmVkZ2UueC09ZWRnZS53aWR0aC8yK2VkZ2UubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSAiciI6ZWRnZS54Kz1lZGdlLndpZHRoLzIrZWRnZS5sYWJlbG9mZnNldDticmVha319fSl9ZnVuY3Rpb24gcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSwKZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO2lmKGVkZ2UucmV2ZXJzZWQpZWRnZS5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gcmVtb3ZlQm9yZGVyTm9kZXMoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZihnLmNoaWxkcmVuKHYpLmxlbmd0aCl7dmFyIG5vZGU9Zy5ub2RlKHYpLHQ9Zy5ub2RlKG5vZGUuYm9yZGVyVG9wKSxiPWcubm9kZShub2RlLmJvcmRlckJvdHRvbSksbD1nLm5vZGUoXy5sYXN0KG5vZGUuYm9yZGVyTGVmdCkpLHI9Zy5ub2RlKF8ubGFzdChub2RlLmJvcmRlclJpZ2h0KSk7bm9kZS53aWR0aD1NYXRoLmFicyhyLngtbC54KTtub2RlLmhlaWdodD1NYXRoLmFicyhiLnktdC55KTtub2RlLng9bC54K25vZGUud2lkdGgvMjtub2RlLnk9dC55K25vZGUuaGVpZ2h0LzJ9fSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZihnLm5vZGUodikuZHVtbXk9PT0iYm9yZGVyIilnLnJlbW92ZU5vZGUodil9KX1mdW5jdGlvbiByZW1vdmVTZWxmRWRnZXMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSwKZnVuY3Rpb24oZSl7aWYoZS52PT09ZS53KXt2YXIgbm9kZT1nLm5vZGUoZS52KTtpZighbm9kZS5zZWxmRWRnZXMpbm9kZS5zZWxmRWRnZXM9W107bm9kZS5zZWxmRWRnZXMucHVzaCh7ZTplLGxhYmVsOmcuZWRnZShlKX0pO2cucmVtb3ZlRWRnZShlKX19KX1mdW5jdGlvbiBpbnNlcnRTZWxmRWRnZXMoZyl7dmFyIGxheWVycz11dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7Xy5mb3JFYWNoKGxheWVycyxmdW5jdGlvbihsYXllcil7dmFyIG9yZGVyU2hpZnQ9MDtfLmZvckVhY2gobGF5ZXIsZnVuY3Rpb24odixpKXt2YXIgbm9kZT1nLm5vZGUodik7bm9kZS5vcmRlcj1pK29yZGVyU2hpZnQ7Xy5mb3JFYWNoKG5vZGUuc2VsZkVkZ2VzLGZ1bmN0aW9uKHNlbGZFZGdlKXt1dGlsLmFkZER1bW15Tm9kZShnLCJzZWxmZWRnZSIse3dpZHRoOnNlbGZFZGdlLmxhYmVsLndpZHRoLGhlaWdodDpzZWxmRWRnZS5sYWJlbC5oZWlnaHQscmFuazpub2RlLnJhbmssb3JkZXI6aSsgKytvcmRlclNoaWZ0LAplOnNlbGZFZGdlLmUsbGFiZWw6c2VsZkVkZ2UubGFiZWx9LCJfc2UiKX0pO2RlbGV0ZSBub2RlLnNlbGZFZGdlc30pfSl9ZnVuY3Rpb24gcG9zaXRpb25TZWxmRWRnZXMoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXt2YXIgbm9kZT1nLm5vZGUodik7aWYobm9kZS5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBzZWxmTm9kZT1nLm5vZGUobm9kZS5lLnYpLHg9c2VsZk5vZGUueCtzZWxmTm9kZS53aWR0aC8yLHk9c2VsZk5vZGUueSxkeD1ub2RlLngteCxkeT1zZWxmTm9kZS5oZWlnaHQvMjtnLnNldEVkZ2Uobm9kZS5lLG5vZGUubGFiZWwpO2cucmVtb3ZlTm9kZSh2KTtub2RlLmxhYmVsLnBvaW50cz1be3g6eCsyKmR4LzMseTp5LWR5fSx7eDp4KzUqZHgvNix5OnktZHl9LHt4OngrZHgseTp5fSx7eDp4KzUqZHgvNix5OnkrZHl9LHt4OngrMipkeC8zLHk6eStkeX1dO25vZGUubGFiZWwueD1ub2RlLng7bm9kZS5sYWJlbC55PW5vZGUueX19KX1mdW5jdGlvbiBzZWxlY3ROdW1iZXJBdHRycyhvYmosCmF0dHJzKXtyZXR1cm4gXy5tYXBWYWx1ZXMoXy5waWNrKG9iaixhdHRycyksTnVtYmVyKX1mdW5jdGlvbiBjYW5vbmljYWxpemUoYXR0cnMpe3ZhciBuZXdBdHRycz17fTtfLmZvckVhY2goYXR0cnMsZnVuY3Rpb24odixrKXtuZXdBdHRyc1trLnRvTG93ZXJDYXNlKCldPXZ9KTtyZXR1cm4gbmV3QXR0cnN9fSx7Ii4vYWN5Y2xpYyI6MiwiLi9hZGQtYm9yZGVyLXNlZ21lbnRzIjozLCIuL2Nvb3JkaW5hdGUtc3lzdGVtIjo0LCIuL2dyYXBobGliIjo3LCIuL2xvZGFzaCI6MTAsIi4vbmVzdGluZy1ncmFwaCI6MTEsIi4vbm9ybWFsaXplIjoxMiwiLi9vcmRlciI6MTcsIi4vcGFyZW50LWR1bW15LWNoYWlucyI6MjIsIi4vcG9zaXRpb24iOjI0LCIuL3JhbmsiOjI2LCIuL3V0aWwiOjI5fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBsb2Rhc2g7aWYodHlwZW9mIHJlcXVpcmU9PT0iZnVuY3Rpb24iKXRyeXtsb2Rhc2g9cmVxdWlyZSgibG9kYXNoIil9Y2F0Y2goZSl7fWlmKCFsb2Rhc2gpbG9kYXNoPQp3aW5kb3cuXzttb2R1bGUuZXhwb3J0cz1sb2Rhc2h9LHsibG9kYXNoIjp1bmRlZmluZWR9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4vdXRpbCIpO21vZHVsZS5leHBvcnRzPXtydW46cnVuLGNsZWFudXA6Y2xlYW51cH07ZnVuY3Rpb24gcnVuKGcpe3ZhciByb290PXV0aWwuYWRkRHVtbXlOb2RlKGcsInJvb3QiLHt9LCJfcm9vdCIpO3ZhciBkZXB0aHM9dHJlZURlcHRocyhnKTt2YXIgaGVpZ2h0PV8ubWF4KF8udmFsdWVzKGRlcHRocykpLTE7dmFyIG5vZGVTZXA9MipoZWlnaHQrMTtnLmdyYXBoKCkubmVzdGluZ1Jvb3Q9cm9vdDtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe2cuZWRnZShlKS5taW5sZW4qPW5vZGVTZXB9KTt2YXIgd2VpZ2h0PXN1bVdlaWdodHMoZykrMTtfLmZvckVhY2goZy5jaGlsZHJlbigpLGZ1bmN0aW9uKGNoaWxkKXtkZnMoZyxyb290LG5vZGVTZXAsCndlaWdodCxoZWlnaHQsZGVwdGhzLGNoaWxkKX0pO2cuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1ub2RlU2VwfWZ1bmN0aW9uIGRmcyhnLHJvb3Qsbm9kZVNlcCx3ZWlnaHQsaGVpZ2h0LGRlcHRocyx2KXt2YXIgY2hpbGRyZW49Zy5jaGlsZHJlbih2KTtpZighY2hpbGRyZW4ubGVuZ3RoKXtpZih2IT09cm9vdClnLnNldEVkZ2Uocm9vdCx2LHt3ZWlnaHQ6MCxtaW5sZW46bm9kZVNlcH0pO3JldHVybn12YXIgdG9wPXV0aWwuYWRkQm9yZGVyTm9kZShnLCJfYnQiKSxib3R0b209dXRpbC5hZGRCb3JkZXJOb2RlKGcsIl9iYiIpLGxhYmVsPWcubm9kZSh2KTtnLnNldFBhcmVudCh0b3Asdik7bGFiZWwuYm9yZGVyVG9wPXRvcDtnLnNldFBhcmVudChib3R0b20sdik7bGFiZWwuYm9yZGVyQm90dG9tPWJvdHRvbTtfLmZvckVhY2goY2hpbGRyZW4sZnVuY3Rpb24oY2hpbGQpe2RmcyhnLHJvb3Qsbm9kZVNlcCx3ZWlnaHQsaGVpZ2h0LGRlcHRocyxjaGlsZCk7dmFyIGNoaWxkTm9kZT1nLm5vZGUoY2hpbGQpLApjaGlsZFRvcD1jaGlsZE5vZGUuYm9yZGVyVG9wP2NoaWxkTm9kZS5ib3JkZXJUb3A6Y2hpbGQsY2hpbGRCb3R0b209Y2hpbGROb2RlLmJvcmRlckJvdHRvbT9jaGlsZE5vZGUuYm9yZGVyQm90dG9tOmNoaWxkLHRoaXNXZWlnaHQ9Y2hpbGROb2RlLmJvcmRlclRvcD93ZWlnaHQ6Mip3ZWlnaHQsbWlubGVuPWNoaWxkVG9wIT09Y2hpbGRCb3R0b20/MTpoZWlnaHQtZGVwdGhzW3ZdKzE7Zy5zZXRFZGdlKHRvcCxjaGlsZFRvcCx7d2VpZ2h0OnRoaXNXZWlnaHQsbWlubGVuOm1pbmxlbixuZXN0aW5nRWRnZTp0cnVlfSk7Zy5zZXRFZGdlKGNoaWxkQm90dG9tLGJvdHRvbSx7d2VpZ2h0OnRoaXNXZWlnaHQsbWlubGVuOm1pbmxlbixuZXN0aW5nRWRnZTp0cnVlfSl9KTtpZighZy5wYXJlbnQodikpZy5zZXRFZGdlKHJvb3QsdG9wLHt3ZWlnaHQ6MCxtaW5sZW46aGVpZ2h0K2RlcHRoc1t2XX0pfWZ1bmN0aW9uIHRyZWVEZXB0aHMoZyl7dmFyIGRlcHRocz17fTtmdW5jdGlvbiBkZnModixkZXB0aCl7dmFyIGNoaWxkcmVuPQpnLmNoaWxkcmVuKHYpO2lmKGNoaWxkcmVuJiZjaGlsZHJlbi5sZW5ndGgpXy5mb3JFYWNoKGNoaWxkcmVuLGZ1bmN0aW9uKGNoaWxkKXtkZnMoY2hpbGQsZGVwdGgrMSl9KTtkZXB0aHNbdl09ZGVwdGh9Xy5mb3JFYWNoKGcuY2hpbGRyZW4oKSxmdW5jdGlvbih2KXtkZnModiwxKX0pO3JldHVybiBkZXB0aHN9ZnVuY3Rpb24gc3VtV2VpZ2h0cyhnKXtyZXR1cm4gXy5yZWR1Y2UoZy5lZGdlcygpLGZ1bmN0aW9uKGFjYyxlKXtyZXR1cm4gYWNjK2cuZWRnZShlKS53ZWlnaHR9LDApfWZ1bmN0aW9uIGNsZWFudXAoZyl7dmFyIGdyYXBoTGFiZWw9Zy5ncmFwaCgpO2cucmVtb3ZlTm9kZShncmFwaExhYmVsLm5lc3RpbmdSb290KTtkZWxldGUgZ3JhcGhMYWJlbC5uZXN0aW5nUm9vdDtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihlZGdlLm5lc3RpbmdFZGdlKWcucmVtb3ZlRWRnZShlKX0pfX0seyIuL2xvZGFzaCI6MTAsIi4vdXRpbCI6Mjl9XSwKMTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIiksdXRpbD1yZXF1aXJlKCIuL3V0aWwiKTttb2R1bGUuZXhwb3J0cz17cnVuOnJ1bix1bmRvOnVuZG99O2Z1bmN0aW9uIHJ1bihnKXtnLmdyYXBoKCkuZHVtbXlDaGFpbnM9W107Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlZGdlKXtub3JtYWxpemVFZGdlKGcsZWRnZSl9KX1mdW5jdGlvbiBub3JtYWxpemVFZGdlKGcsZSl7dmFyIHY9ZS52LHZSYW5rPWcubm9kZSh2KS5yYW5rLHc9ZS53LHdSYW5rPWcubm9kZSh3KS5yYW5rLG5hbWU9ZS5uYW1lLGVkZ2VMYWJlbD1nLmVkZ2UoZSksbGFiZWxSYW5rPWVkZ2VMYWJlbC5sYWJlbFJhbms7aWYod1Jhbms9PT12UmFuaysxKXJldHVybjtnLnJlbW92ZUVkZ2UoZSk7dmFyIGR1bW15LGF0dHJzLGk7Zm9yKGk9MCwrK3ZSYW5rO3ZSYW5rPHdSYW5rOysraSwrK3ZSYW5rKXtlZGdlTGFiZWwucG9pbnRzPVtdO2F0dHJzPXt3aWR0aDowLApoZWlnaHQ6MCxlZGdlTGFiZWw6ZWRnZUxhYmVsLGVkZ2VPYmo6ZSxyYW5rOnZSYW5rfTtkdW1teT11dGlsLmFkZER1bW15Tm9kZShnLCJlZGdlIixhdHRycywiX2QiKTtpZih2UmFuaz09PWxhYmVsUmFuayl7YXR0cnMud2lkdGg9ZWRnZUxhYmVsLndpZHRoO2F0dHJzLmhlaWdodD1lZGdlTGFiZWwuaGVpZ2h0O2F0dHJzLmR1bW15PSJlZGdlLWxhYmVsIjthdHRycy5sYWJlbHBvcz1lZGdlTGFiZWwubGFiZWxwb3N9Zy5zZXRFZGdlKHYsZHVtbXkse3dlaWdodDplZGdlTGFiZWwud2VpZ2h0fSxuYW1lKTtpZihpPT09MClnLmdyYXBoKCkuZHVtbXlDaGFpbnMucHVzaChkdW1teSk7dj1kdW1teX1nLnNldEVkZ2Uodix3LHt3ZWlnaHQ6ZWRnZUxhYmVsLndlaWdodH0sbmFtZSl9ZnVuY3Rpb24gdW5kbyhnKXtfLmZvckVhY2goZy5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KSxvcmlnTGFiZWw9bm9kZS5lZGdlTGFiZWwsdztnLnNldEVkZ2Uobm9kZS5lZGdlT2JqLApvcmlnTGFiZWwpO3doaWxlKG5vZGUuZHVtbXkpe3c9Zy5zdWNjZXNzb3JzKHYpWzBdO2cucmVtb3ZlTm9kZSh2KTtvcmlnTGFiZWwucG9pbnRzLnB1c2goe3g6bm9kZS54LHk6bm9kZS55fSk7aWYobm9kZS5kdW1teT09PSJlZGdlLWxhYmVsIil7b3JpZ0xhYmVsLng9bm9kZS54O29yaWdMYWJlbC55PW5vZGUueTtvcmlnTGFiZWwud2lkdGg9bm9kZS53aWR0aDtvcmlnTGFiZWwuaGVpZ2h0PW5vZGUuaGVpZ2h0fXY9dztub2RlPWcubm9kZSh2KX19KX19LHsiLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI5fV0sMTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWFkZFN1YmdyYXBoQ29uc3RyYWludHM7ZnVuY3Rpb24gYWRkU3ViZ3JhcGhDb25zdHJhaW50cyhnLGNnLHZzKXt2YXIgcHJldj17fSxyb290UHJldjtfLmZvckVhY2godnMsZnVuY3Rpb24odil7dmFyIGNoaWxkPWcucGFyZW50KHYpLHBhcmVudCwKcHJldkNoaWxkO3doaWxlKGNoaWxkKXtwYXJlbnQ9Zy5wYXJlbnQoY2hpbGQpO2lmKHBhcmVudCl7cHJldkNoaWxkPXByZXZbcGFyZW50XTtwcmV2W3BhcmVudF09Y2hpbGR9ZWxzZXtwcmV2Q2hpbGQ9cm9vdFByZXY7cm9vdFByZXY9Y2hpbGR9aWYocHJldkNoaWxkJiZwcmV2Q2hpbGQhPT1jaGlsZCl7Y2cuc2V0RWRnZShwcmV2Q2hpbGQsY2hpbGQpO3JldHVybn1jaGlsZD1wYXJlbnR9fSl9fSx7Ii4uL2xvZGFzaCI6MTB9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9YmFyeWNlbnRlcjtmdW5jdGlvbiBiYXJ5Y2VudGVyKGcsbW92YWJsZSl7cmV0dXJuIF8ubWFwKG1vdmFibGUsZnVuY3Rpb24odil7dmFyIGluVj1nLmluRWRnZXModik7aWYoIWluVi5sZW5ndGgpcmV0dXJue3Y6dn07ZWxzZXt2YXIgcmVzdWx0PV8ucmVkdWNlKGluVixmdW5jdGlvbihhY2MsZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpLApub2RlVT1nLm5vZGUoZS52KTtyZXR1cm57c3VtOmFjYy5zdW0rZWRnZS53ZWlnaHQqbm9kZVUub3JkZXIsd2VpZ2h0OmFjYy53ZWlnaHQrZWRnZS53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djp2LGJhcnljZW50ZXI6cmVzdWx0LnN1bS9yZXN1bHQud2VpZ2h0LHdlaWdodDpyZXN1bHQud2VpZ2h0fX19KX19LHsiLi4vbG9kYXNoIjoxMH1dLDE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSxHcmFwaD1yZXF1aXJlKCIuLi9ncmFwaGxpYiIpLkdyYXBoO21vZHVsZS5leHBvcnRzPWJ1aWxkTGF5ZXJHcmFwaDtmdW5jdGlvbiBidWlsZExheWVyR3JhcGgoZyxyYW5rLHJlbGF0aW9uc2hpcCl7dmFyIHJvb3Q9Y3JlYXRlUm9vdE5vZGUoZykscmVzdWx0PShuZXcgR3JhcGgoe2NvbXBvdW5kOnRydWV9KSkuc2V0R3JhcGgoe3Jvb3Q6cm9vdH0pLnNldERlZmF1bHROb2RlTGFiZWwoZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KX0pOwpfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KSxwYXJlbnQ9Zy5wYXJlbnQodik7aWYobm9kZS5yYW5rPT09cmFua3x8bm9kZS5taW5SYW5rPD1yYW5rJiZyYW5rPD1ub2RlLm1heFJhbmspe3Jlc3VsdC5zZXROb2RlKHYpO3Jlc3VsdC5zZXRQYXJlbnQodixwYXJlbnR8fHJvb3QpO18uZm9yRWFjaChnW3JlbGF0aW9uc2hpcF0odiksZnVuY3Rpb24oZSl7dmFyIHU9ZS52PT09dj9lLnc6ZS52LGVkZ2U9cmVzdWx0LmVkZ2UodSx2KSx3ZWlnaHQ9IV8uaXNVbmRlZmluZWQoZWRnZSk/ZWRnZS53ZWlnaHQ6MDtyZXN1bHQuc2V0RWRnZSh1LHYse3dlaWdodDpnLmVkZ2UoZSkud2VpZ2h0K3dlaWdodH0pfSk7aWYoXy5oYXMobm9kZSwibWluUmFuayIpKXJlc3VsdC5zZXROb2RlKHYse2JvcmRlckxlZnQ6bm9kZS5ib3JkZXJMZWZ0W3JhbmtdLGJvcmRlclJpZ2h0Om5vZGUuYm9yZGVyUmlnaHRbcmFua119KX19KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNyZWF0ZVJvb3ROb2RlKGcpe3ZhciB2Owp3aGlsZShnLmhhc05vZGUodj1fLnVuaXF1ZUlkKCJfcm9vdCIpKSk7cmV0dXJuIHZ9fSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwfV0sMTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWNyb3NzQ291bnQ7ZnVuY3Rpb24gY3Jvc3NDb3VudChnLGxheWVyaW5nKXt2YXIgY2M9MDtmb3IodmFyIGk9MTtpPGxheWVyaW5nLmxlbmd0aDsrK2kpY2MrPXR3b0xheWVyQ3Jvc3NDb3VudChnLGxheWVyaW5nW2ktMV0sbGF5ZXJpbmdbaV0pO3JldHVybiBjY31mdW5jdGlvbiB0d29MYXllckNyb3NzQ291bnQoZyxub3J0aExheWVyLHNvdXRoTGF5ZXIpe3ZhciBzb3V0aFBvcz1fLnppcE9iamVjdChzb3V0aExheWVyLF8ubWFwKHNvdXRoTGF5ZXIsZnVuY3Rpb24odixpKXtyZXR1cm4gaX0pKTt2YXIgc291dGhFbnRyaWVzPV8uZmxhdHRlbihfLm1hcChub3J0aExheWVyLGZ1bmN0aW9uKHYpe3JldHVybiBfLmNoYWluKGcub3V0RWRnZXModikpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57cG9zOnNvdXRoUG9zW2Uud10sCndlaWdodDpnLmVkZ2UoZSkud2VpZ2h0fX0pLnNvcnRCeSgicG9zIikudmFsdWUoKX0pLHRydWUpO3ZhciBmaXJzdEluZGV4PTE7d2hpbGUoZmlyc3RJbmRleDxzb3V0aExheWVyLmxlbmd0aClmaXJzdEluZGV4PDw9MTt2YXIgdHJlZVNpemU9MipmaXJzdEluZGV4LTE7Zmlyc3RJbmRleC09MTt2YXIgdHJlZT1fLm1hcChuZXcgQXJyYXkodHJlZVNpemUpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KTt2YXIgY2M9MDtfLmZvckVhY2goc291dGhFbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZW50cnkpe3ZhciBpbmRleD1lbnRyeS5wb3MrZmlyc3RJbmRleDt0cmVlW2luZGV4XSs9ZW50cnkud2VpZ2h0O3ZhciB3ZWlnaHRTdW09MDt3aGlsZShpbmRleD4wKXtpZihpbmRleCUyKXdlaWdodFN1bSs9dHJlZVtpbmRleCsxXTtpbmRleD1pbmRleC0xPj4xO3RyZWVbaW5kZXhdKz1lbnRyeS53ZWlnaHR9Y2MrPWVudHJ5LndlaWdodCp3ZWlnaHRTdW19KSk7cmV0dXJuIGNjfX0seyIuLi9sb2Rhc2giOjEwfV0sCjE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSxpbml0T3JkZXI9cmVxdWlyZSgiLi9pbml0LW9yZGVyIiksY3Jvc3NDb3VudD1yZXF1aXJlKCIuL2Nyb3NzLWNvdW50Iiksc29ydFN1YmdyYXBoPXJlcXVpcmUoIi4vc29ydC1zdWJncmFwaCIpLGJ1aWxkTGF5ZXJHcmFwaD1yZXF1aXJlKCIuL2J1aWxkLWxheWVyLWdyYXBoIiksYWRkU3ViZ3JhcGhDb25zdHJhaW50cz1yZXF1aXJlKCIuL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cyIpLEdyYXBoPXJlcXVpcmUoIi4uL2dyYXBobGliIikuR3JhcGgsdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9b3JkZXI7ZnVuY3Rpb24gb3JkZXIoZyl7dmFyIG1heFJhbms9dXRpbC5tYXhSYW5rKGcpLGRvd25MYXllckdyYXBocz1idWlsZExheWVyR3JhcGhzKGcsXy5yYW5nZSgxLG1heFJhbmsrMSksImluRWRnZXMiKSx1cExheWVyR3JhcGhzPWJ1aWxkTGF5ZXJHcmFwaHMoZywKXy5yYW5nZShtYXhSYW5rLTEsLTEsLTEpLCJvdXRFZGdlcyIpO3ZhciBsYXllcmluZz1pbml0T3JkZXIoZyk7YXNzaWduT3JkZXIoZyxsYXllcmluZyk7dmFyIGJlc3RDQz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYmVzdDtmb3IodmFyIGk9MCxsYXN0QmVzdD0wO2xhc3RCZXN0PDQ7KytpLCsrbGFzdEJlc3Qpe3N3ZWVwTGF5ZXJHcmFwaHMoaSUyP2Rvd25MYXllckdyYXBoczp1cExheWVyR3JhcGhzLGklND49Mik7bGF5ZXJpbmc9dXRpbC5idWlsZExheWVyTWF0cml4KGcpO3ZhciBjYz1jcm9zc0NvdW50KGcsbGF5ZXJpbmcpO2lmKGNjPGJlc3RDQyl7bGFzdEJlc3Q9MDtiZXN0PV8uY2xvbmVEZWVwKGxheWVyaW5nKTtiZXN0Q0M9Y2N9fWFzc2lnbk9yZGVyKGcsYmVzdCl9ZnVuY3Rpb24gYnVpbGRMYXllckdyYXBocyhnLHJhbmtzLHJlbGF0aW9uc2hpcCl7cmV0dXJuIF8ubWFwKHJhbmtzLGZ1bmN0aW9uKHJhbmspe3JldHVybiBidWlsZExheWVyR3JhcGgoZyxyYW5rLHJlbGF0aW9uc2hpcCl9KX0KZnVuY3Rpb24gc3dlZXBMYXllckdyYXBocyhsYXllckdyYXBocyxiaWFzUmlnaHQpe3ZhciBjZz1uZXcgR3JhcGg7Xy5mb3JFYWNoKGxheWVyR3JhcGhzLGZ1bmN0aW9uKGxnKXt2YXIgcm9vdD1sZy5ncmFwaCgpLnJvb3Q7dmFyIHNvcnRlZD1zb3J0U3ViZ3JhcGgobGcscm9vdCxjZyxiaWFzUmlnaHQpO18uZm9yRWFjaChzb3J0ZWQudnMsZnVuY3Rpb24odixpKXtsZy5ub2RlKHYpLm9yZGVyPWl9KTthZGRTdWJncmFwaENvbnN0cmFpbnRzKGxnLGNnLHNvcnRlZC52cyl9KX1mdW5jdGlvbiBhc3NpZ25PcmRlcihnLGxheWVyaW5nKXtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe18uZm9yRWFjaChsYXllcixmdW5jdGlvbih2LGkpe2cubm9kZSh2KS5vcmRlcj1pfSl9KX19LHsiLi4vZ3JhcGhsaWIiOjcsIi4uL2xvZGFzaCI6MTAsIi4uL3V0aWwiOjI5LCIuL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cyI6MTMsIi4vYnVpbGQtbGF5ZXItZ3JhcGgiOjE1LCIuL2Nyb3NzLWNvdW50IjoxNiwKIi4vaW5pdC1vcmRlciI6MTgsIi4vc29ydC1zdWJncmFwaCI6MjB9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9aW5pdE9yZGVyO2Z1bmN0aW9uIGluaXRPcmRlcihnKXt2YXIgdmlzaXRlZD17fSxzaW1wbGVOb2Rlcz1fLmZpbHRlcihnLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIWcuY2hpbGRyZW4odikubGVuZ3RofSksbWF4UmFuaz1fLm1heChfLm1hcChzaW1wbGVOb2RlcyxmdW5jdGlvbih2KXtyZXR1cm4gZy5ub2RlKHYpLnJhbmt9KSksbGF5ZXJzPV8ubWFwKF8ucmFuZ2UobWF4UmFuaysxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gZGZzKHYpe2lmKF8uaGFzKHZpc2l0ZWQsdikpcmV0dXJuO3Zpc2l0ZWRbdl09dHJ1ZTt2YXIgbm9kZT1nLm5vZGUodik7bGF5ZXJzW25vZGUucmFua10ucHVzaCh2KTtfLmZvckVhY2goZy5zdWNjZXNzb3JzKHYpLGRmcyl9dmFyIG9yZGVyZWRWcz0KXy5zb3J0Qnkoc2ltcGxlTm9kZXMsZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KS5yYW5rfSk7Xy5mb3JFYWNoKG9yZGVyZWRWcyxkZnMpO3JldHVybiBsYXllcnN9fSx7Ii4uL2xvZGFzaCI6MTB9XSwxOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9cmVzb2x2ZUNvbmZsaWN0cztmdW5jdGlvbiByZXNvbHZlQ29uZmxpY3RzKGVudHJpZXMsY2cpe3ZhciBtYXBwZWRFbnRyaWVzPXt9O18uZm9yRWFjaChlbnRyaWVzLGZ1bmN0aW9uKGVudHJ5LGkpe3ZhciB0bXA9bWFwcGVkRW50cmllc1tlbnRyeS52XT17aW5kZWdyZWU6MCwiaW4iOltdLG91dDpbXSx2czpbZW50cnkudl0saTppfTtpZighXy5pc1VuZGVmaW5lZChlbnRyeS5iYXJ5Y2VudGVyKSl7dG1wLmJhcnljZW50ZXI9ZW50cnkuYmFyeWNlbnRlcjt0bXAud2VpZ2h0PWVudHJ5LndlaWdodH19KTtfLmZvckVhY2goY2cuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZW50cnlWPQptYXBwZWRFbnRyaWVzW2Uudl0sZW50cnlXPW1hcHBlZEVudHJpZXNbZS53XTtpZighXy5pc1VuZGVmaW5lZChlbnRyeVYpJiYhXy5pc1VuZGVmaW5lZChlbnRyeVcpKXtlbnRyeVcuaW5kZWdyZWUrKztlbnRyeVYub3V0LnB1c2gobWFwcGVkRW50cmllc1tlLnddKX19KTt2YXIgc291cmNlU2V0PV8uZmlsdGVyKG1hcHBlZEVudHJpZXMsZnVuY3Rpb24oZW50cnkpe3JldHVybiFlbnRyeS5pbmRlZ3JlZX0pO3JldHVybiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KX1mdW5jdGlvbiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KXt2YXIgZW50cmllcz1bXTtmdW5jdGlvbiBoYW5kbGVJbih2RW50cnkpe3JldHVybiBmdW5jdGlvbih1RW50cnkpe2lmKHVFbnRyeS5tZXJnZWQpcmV0dXJuO2lmKF8uaXNVbmRlZmluZWQodUVudHJ5LmJhcnljZW50ZXIpfHxfLmlzVW5kZWZpbmVkKHZFbnRyeS5iYXJ5Y2VudGVyKXx8dUVudHJ5LmJhcnljZW50ZXI+PXZFbnRyeS5iYXJ5Y2VudGVyKW1lcmdlRW50cmllcyh2RW50cnksCnVFbnRyeSl9fWZ1bmN0aW9uIGhhbmRsZU91dCh2RW50cnkpe3JldHVybiBmdW5jdGlvbih3RW50cnkpe3dFbnRyeVsiaW4iXS5wdXNoKHZFbnRyeSk7aWYoLS13RW50cnkuaW5kZWdyZWU9PT0wKXNvdXJjZVNldC5wdXNoKHdFbnRyeSl9fXdoaWxlKHNvdXJjZVNldC5sZW5ndGgpe3ZhciBlbnRyeT1zb3VyY2VTZXQucG9wKCk7ZW50cmllcy5wdXNoKGVudHJ5KTtfLmZvckVhY2goZW50cnlbImluIl0ucmV2ZXJzZSgpLGhhbmRsZUluKGVudHJ5KSk7Xy5mb3JFYWNoKGVudHJ5Lm91dCxoYW5kbGVPdXQoZW50cnkpKX1yZXR1cm4gXy5jaGFpbihlbnRyaWVzKS5maWx0ZXIoZnVuY3Rpb24oZW50cnkpe3JldHVybiFlbnRyeS5tZXJnZWR9KS5tYXAoZnVuY3Rpb24oZW50cnkpe3JldHVybiBfLnBpY2soZW50cnksWyJ2cyIsImkiLCJiYXJ5Y2VudGVyIiwid2VpZ2h0Il0pfSkudmFsdWUoKX1mdW5jdGlvbiBtZXJnZUVudHJpZXModGFyZ2V0LHNvdXJjZSl7dmFyIHN1bT0wLHdlaWdodD0wOwppZih0YXJnZXQud2VpZ2h0KXtzdW0rPXRhcmdldC5iYXJ5Y2VudGVyKnRhcmdldC53ZWlnaHQ7d2VpZ2h0Kz10YXJnZXQud2VpZ2h0fWlmKHNvdXJjZS53ZWlnaHQpe3N1bSs9c291cmNlLmJhcnljZW50ZXIqc291cmNlLndlaWdodDt3ZWlnaHQrPXNvdXJjZS53ZWlnaHR9dGFyZ2V0LnZzPXNvdXJjZS52cy5jb25jYXQodGFyZ2V0LnZzKTt0YXJnZXQuYmFyeWNlbnRlcj1zdW0vd2VpZ2h0O3RhcmdldC53ZWlnaHQ9d2VpZ2h0O3RhcmdldC5pPU1hdGgubWluKHNvdXJjZS5pLHRhcmdldC5pKTtzb3VyY2UubWVyZ2VkPXRydWV9fSx7Ii4uL2xvZGFzaCI6MTB9XSwyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksYmFyeWNlbnRlcj1yZXF1aXJlKCIuL2JhcnljZW50ZXIiKSxyZXNvbHZlQ29uZmxpY3RzPXJlcXVpcmUoIi4vcmVzb2x2ZS1jb25mbGljdHMiKSxzb3J0PXJlcXVpcmUoIi4vc29ydCIpO21vZHVsZS5leHBvcnRzPQpzb3J0U3ViZ3JhcGg7ZnVuY3Rpb24gc29ydFN1YmdyYXBoKGcsdixjZyxiaWFzUmlnaHQpe3ZhciBtb3ZhYmxlPWcuY2hpbGRyZW4odiksbm9kZT1nLm5vZGUodiksYmw9bm9kZT9ub2RlLmJvcmRlckxlZnQ6dW5kZWZpbmVkLGJyPW5vZGU/bm9kZS5ib3JkZXJSaWdodDp1bmRlZmluZWQsc3ViZ3JhcGhzPXt9O2lmKGJsKW1vdmFibGU9Xy5maWx0ZXIobW92YWJsZSxmdW5jdGlvbih3KXtyZXR1cm4gdyE9PWJsJiZ3IT09YnJ9KTt2YXIgYmFyeWNlbnRlcnM9YmFyeWNlbnRlcihnLG1vdmFibGUpO18uZm9yRWFjaChiYXJ5Y2VudGVycyxmdW5jdGlvbihlbnRyeSl7aWYoZy5jaGlsZHJlbihlbnRyeS52KS5sZW5ndGgpe3ZhciBzdWJncmFwaFJlc3VsdD1zb3J0U3ViZ3JhcGgoZyxlbnRyeS52LGNnLGJpYXNSaWdodCk7c3ViZ3JhcGhzW2VudHJ5LnZdPXN1YmdyYXBoUmVzdWx0O2lmKF8uaGFzKHN1YmdyYXBoUmVzdWx0LCJiYXJ5Y2VudGVyIikpbWVyZ2VCYXJ5Y2VudGVycyhlbnRyeSwKc3ViZ3JhcGhSZXN1bHQpfX0pO3ZhciBlbnRyaWVzPXJlc29sdmVDb25mbGljdHMoYmFyeWNlbnRlcnMsY2cpO2V4cGFuZFN1YmdyYXBocyhlbnRyaWVzLHN1YmdyYXBocyk7dmFyIHJlc3VsdD1zb3J0KGVudHJpZXMsYmlhc1JpZ2h0KTtpZihibCl7cmVzdWx0LnZzPV8uZmxhdHRlbihbYmwscmVzdWx0LnZzLGJyXSx0cnVlKTtpZihnLnByZWRlY2Vzc29ycyhibCkubGVuZ3RoKXt2YXIgYmxQcmVkPWcubm9kZShnLnByZWRlY2Vzc29ycyhibClbMF0pLGJyUHJlZD1nLm5vZGUoZy5wcmVkZWNlc3NvcnMoYnIpWzBdKTtpZighXy5oYXMocmVzdWx0LCJiYXJ5Y2VudGVyIikpe3Jlc3VsdC5iYXJ5Y2VudGVyPTA7cmVzdWx0LndlaWdodD0wfXJlc3VsdC5iYXJ5Y2VudGVyPShyZXN1bHQuYmFyeWNlbnRlcipyZXN1bHQud2VpZ2h0K2JsUHJlZC5vcmRlciticlByZWQub3JkZXIpLyhyZXN1bHQud2VpZ2h0KzIpO3Jlc3VsdC53ZWlnaHQrPTJ9fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gZXhwYW5kU3ViZ3JhcGhzKGVudHJpZXMsCnN1YmdyYXBocyl7Xy5mb3JFYWNoKGVudHJpZXMsZnVuY3Rpb24oZW50cnkpe2VudHJ5LnZzPV8uZmxhdHRlbihlbnRyeS52cy5tYXAoZnVuY3Rpb24odil7aWYoc3ViZ3JhcGhzW3ZdKXJldHVybiBzdWJncmFwaHNbdl0udnM7cmV0dXJuIHZ9KSx0cnVlKX0pfWZ1bmN0aW9uIG1lcmdlQmFyeWNlbnRlcnModGFyZ2V0LG90aGVyKXtpZighXy5pc1VuZGVmaW5lZCh0YXJnZXQuYmFyeWNlbnRlcikpe3RhcmdldC5iYXJ5Y2VudGVyPSh0YXJnZXQuYmFyeWNlbnRlcip0YXJnZXQud2VpZ2h0K290aGVyLmJhcnljZW50ZXIqb3RoZXIud2VpZ2h0KS8odGFyZ2V0LndlaWdodCtvdGhlci53ZWlnaHQpO3RhcmdldC53ZWlnaHQrPW90aGVyLndlaWdodH1lbHNle3RhcmdldC5iYXJ5Y2VudGVyPW90aGVyLmJhcnljZW50ZXI7dGFyZ2V0LndlaWdodD1vdGhlci53ZWlnaHR9fX0seyIuLi9sb2Rhc2giOjEwLCIuL2JhcnljZW50ZXIiOjE0LCIuL3Jlc29sdmUtY29uZmxpY3RzIjoxOSwiLi9zb3J0IjoyMX1dLAoyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9c29ydDtmdW5jdGlvbiBzb3J0KGVudHJpZXMsYmlhc1JpZ2h0KXt2YXIgcGFydHM9dXRpbC5wYXJ0aXRpb24oZW50cmllcyxmdW5jdGlvbihlbnRyeSl7cmV0dXJuIF8uaGFzKGVudHJ5LCJiYXJ5Y2VudGVyIil9KTt2YXIgc29ydGFibGU9cGFydHMubGhzLHVuc29ydGFibGU9Xy5zb3J0QnkocGFydHMucmhzLGZ1bmN0aW9uKGVudHJ5KXtyZXR1cm4tZW50cnkuaX0pLHZzPVtdLHN1bT0wLHdlaWdodD0wLHZzSW5kZXg9MDtzb3J0YWJsZS5zb3J0KGNvbXBhcmVXaXRoQmlhcyghIWJpYXNSaWdodCkpO3ZzSW5kZXg9Y29uc3VtZVVuc29ydGFibGUodnMsdW5zb3J0YWJsZSx2c0luZGV4KTtfLmZvckVhY2goc29ydGFibGUsZnVuY3Rpb24oZW50cnkpe3ZzSW5kZXgrPWVudHJ5LnZzLmxlbmd0aDt2cy5wdXNoKGVudHJ5LnZzKTsKc3VtKz1lbnRyeS5iYXJ5Y2VudGVyKmVudHJ5LndlaWdodDt3ZWlnaHQrPWVudHJ5LndlaWdodDt2c0luZGV4PWNvbnN1bWVVbnNvcnRhYmxlKHZzLHVuc29ydGFibGUsdnNJbmRleCl9KTt2YXIgcmVzdWx0PXt2czpfLmZsYXR0ZW4odnMsdHJ1ZSl9O2lmKHdlaWdodCl7cmVzdWx0LmJhcnljZW50ZXI9c3VtL3dlaWdodDtyZXN1bHQud2VpZ2h0PXdlaWdodH1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvbnN1bWVVbnNvcnRhYmxlKHZzLHVuc29ydGFibGUsaW5kZXgpe3ZhciBsYXN0O3doaWxlKHVuc29ydGFibGUubGVuZ3RoJiYobGFzdD1fLmxhc3QodW5zb3J0YWJsZSkpLmk8PWluZGV4KXt1bnNvcnRhYmxlLnBvcCgpO3ZzLnB1c2gobGFzdC52cyk7aW5kZXgrK31yZXR1cm4gaW5kZXh9ZnVuY3Rpb24gY29tcGFyZVdpdGhCaWFzKGJpYXMpe3JldHVybiBmdW5jdGlvbihlbnRyeVYsZW50cnlXKXtpZihlbnRyeVYuYmFyeWNlbnRlcjxlbnRyeVcuYmFyeWNlbnRlcilyZXR1cm4tMTtlbHNlIGlmKGVudHJ5Vi5iYXJ5Y2VudGVyPgplbnRyeVcuYmFyeWNlbnRlcilyZXR1cm4gMTtyZXR1cm4hYmlhcz9lbnRyeVYuaS1lbnRyeVcuaTplbnRyeVcuaS1lbnRyeVYuaX19fSx7Ii4uL2xvZGFzaCI6MTAsIi4uL3V0aWwiOjI5fV0sMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9cGFyZW50RHVtbXlDaGFpbnM7ZnVuY3Rpb24gcGFyZW50RHVtbXlDaGFpbnMoZyl7dmFyIHBvc3RvcmRlck51bXM9cG9zdG9yZGVyKGcpO18uZm9yRWFjaChnLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpLGVkZ2VPYmo9bm9kZS5lZGdlT2JqLHBhdGhEYXRhPWZpbmRQYXRoKGcscG9zdG9yZGVyTnVtcyxlZGdlT2JqLnYsZWRnZU9iai53KSxwYXRoPXBhdGhEYXRhLnBhdGgsbGNhPXBhdGhEYXRhLmxjYSxwYXRoSWR4PTAscGF0aFY9cGF0aFtwYXRoSWR4XSxhc2NlbmRpbmc9dHJ1ZTt3aGlsZSh2IT09ZWRnZU9iai53KXtub2RlPQpnLm5vZGUodik7aWYoYXNjZW5kaW5nKXt3aGlsZSgocGF0aFY9cGF0aFtwYXRoSWR4XSkhPT1sY2EmJmcubm9kZShwYXRoVikubWF4UmFuazxub2RlLnJhbmspcGF0aElkeCsrO2lmKHBhdGhWPT09bGNhKWFzY2VuZGluZz1mYWxzZX1pZighYXNjZW5kaW5nKXt3aGlsZShwYXRoSWR4PHBhdGgubGVuZ3RoLTEmJmcubm9kZShwYXRoVj1wYXRoW3BhdGhJZHgrMV0pLm1pblJhbms8PW5vZGUucmFuaylwYXRoSWR4Kys7cGF0aFY9cGF0aFtwYXRoSWR4XX1nLnNldFBhcmVudCh2LHBhdGhWKTt2PWcuc3VjY2Vzc29ycyh2KVswXX19KX1mdW5jdGlvbiBmaW5kUGF0aChnLHBvc3RvcmRlck51bXMsdix3KXt2YXIgdlBhdGg9W10sd1BhdGg9W10sbG93PU1hdGgubWluKHBvc3RvcmRlck51bXNbdl0ubG93LHBvc3RvcmRlck51bXNbd10ubG93KSxsaW09TWF0aC5tYXgocG9zdG9yZGVyTnVtc1t2XS5saW0scG9zdG9yZGVyTnVtc1t3XS5saW0pLHBhcmVudCxsY2E7cGFyZW50PXY7ZG97cGFyZW50PQpnLnBhcmVudChwYXJlbnQpO3ZQYXRoLnB1c2gocGFyZW50KX13aGlsZShwYXJlbnQmJihwb3N0b3JkZXJOdW1zW3BhcmVudF0ubG93Pmxvd3x8bGltPnBvc3RvcmRlck51bXNbcGFyZW50XS5saW0pKTtsY2E9cGFyZW50O3BhcmVudD13O3doaWxlKChwYXJlbnQ9Zy5wYXJlbnQocGFyZW50KSkhPT1sY2Epd1BhdGgucHVzaChwYXJlbnQpO3JldHVybntwYXRoOnZQYXRoLmNvbmNhdCh3UGF0aC5yZXZlcnNlKCkpLGxjYTpsY2F9fWZ1bmN0aW9uIHBvc3RvcmRlcihnKXt2YXIgcmVzdWx0PXt9LGxpbT0wO2Z1bmN0aW9uIGRmcyh2KXt2YXIgbG93PWxpbTtfLmZvckVhY2goZy5jaGlsZHJlbih2KSxkZnMpO3Jlc3VsdFt2XT17bG93OmxvdyxsaW06bGltKyt9fV8uZm9yRWFjaChnLmNoaWxkcmVuKCksZGZzKTtyZXR1cm4gcmVzdWx0fX0seyIuL2xvZGFzaCI6MTB9XSwyMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksR3JhcGg9CnJlcXVpcmUoIi4uL2dyYXBobGliIikuR3JhcGgsdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9e3Bvc2l0aW9uWDpwb3NpdGlvblgsZmluZFR5cGUxQ29uZmxpY3RzOmZpbmRUeXBlMUNvbmZsaWN0cyxmaW5kVHlwZTJDb25mbGljdHM6ZmluZFR5cGUyQ29uZmxpY3RzLGFkZENvbmZsaWN0OmFkZENvbmZsaWN0LGhhc0NvbmZsaWN0Omhhc0NvbmZsaWN0LHZlcnRpY2FsQWxpZ25tZW50OnZlcnRpY2FsQWxpZ25tZW50LGhvcml6b250YWxDb21wYWN0aW9uOmhvcml6b250YWxDb21wYWN0aW9uLGFsaWduQ29vcmRpbmF0ZXM6YWxpZ25Db29yZGluYXRlcyxmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudDpmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudCxiYWxhbmNlOmJhbGFuY2V9O2Z1bmN0aW9uIGZpbmRUeXBlMUNvbmZsaWN0cyhnLGxheWVyaW5nKXt2YXIgY29uZmxpY3RzPXt9O2Z1bmN0aW9uIHZpc2l0TGF5ZXIocHJldkxheWVyLGxheWVyKXt2YXIgazA9MCxzY2FuUG9zPQowLHByZXZMYXllckxlbmd0aD1wcmV2TGF5ZXIubGVuZ3RoLGxhc3ROb2RlPV8ubGFzdChsYXllcik7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYsaSl7dmFyIHc9ZmluZE90aGVySW5uZXJTZWdtZW50Tm9kZShnLHYpLGsxPXc/Zy5ub2RlKHcpLm9yZGVyOnByZXZMYXllckxlbmd0aDtpZih3fHx2PT09bGFzdE5vZGUpe18uZm9yRWFjaChsYXllci5zbGljZShzY2FuUG9zLGkrMSksZnVuY3Rpb24oc2Nhbk5vZGUpe18uZm9yRWFjaChnLnByZWRlY2Vzc29ycyhzY2FuTm9kZSksZnVuY3Rpb24odSl7dmFyIHVMYWJlbD1nLm5vZGUodSksdVBvcz11TGFiZWwub3JkZXI7aWYoKHVQb3M8azB8fGsxPHVQb3MpJiYhKHVMYWJlbC5kdW1teSYmZy5ub2RlKHNjYW5Ob2RlKS5kdW1teSkpYWRkQ29uZmxpY3QoY29uZmxpY3RzLHUsc2Nhbk5vZGUpfSl9KTtzY2FuUG9zPWkrMTtrMD1rMX19KTtyZXR1cm4gbGF5ZXJ9Xy5yZWR1Y2UobGF5ZXJpbmcsdmlzaXRMYXllcik7cmV0dXJuIGNvbmZsaWN0c30KZnVuY3Rpb24gZmluZFR5cGUyQ29uZmxpY3RzKGcsbGF5ZXJpbmcpe3ZhciBjb25mbGljdHM9e307ZnVuY3Rpb24gc2Nhbihzb3V0aCxzb3V0aFBvcyxzb3V0aEVuZCxwcmV2Tm9ydGhCb3JkZXIsbmV4dE5vcnRoQm9yZGVyKXt2YXIgdjtfLmZvckVhY2goXy5yYW5nZShzb3V0aFBvcyxzb3V0aEVuZCksZnVuY3Rpb24oaSl7dj1zb3V0aFtpXTtpZihnLm5vZGUodikuZHVtbXkpXy5mb3JFYWNoKGcucHJlZGVjZXNzb3JzKHYpLGZ1bmN0aW9uKHUpe3ZhciB1Tm9kZT1nLm5vZGUodSk7aWYodU5vZGUuZHVtbXkmJih1Tm9kZS5vcmRlcjxwcmV2Tm9ydGhCb3JkZXJ8fHVOb2RlLm9yZGVyPm5leHROb3J0aEJvcmRlcikpYWRkQ29uZmxpY3QoY29uZmxpY3RzLHUsdil9KX0pfWZ1bmN0aW9uIHZpc2l0TGF5ZXIobm9ydGgsc291dGgpe3ZhciBwcmV2Tm9ydGhQb3M9LTEsbmV4dE5vcnRoUG9zLHNvdXRoUG9zPTA7Xy5mb3JFYWNoKHNvdXRoLGZ1bmN0aW9uKHYsc291dGhMb29rYWhlYWQpe2lmKGcubm9kZSh2KS5kdW1teT09PQoiYm9yZGVyIil7dmFyIHByZWRlY2Vzc29ycz1nLnByZWRlY2Vzc29ycyh2KTtpZihwcmVkZWNlc3NvcnMubGVuZ3RoKXtuZXh0Tm9ydGhQb3M9Zy5ub2RlKHByZWRlY2Vzc29yc1swXSkub3JkZXI7c2Nhbihzb3V0aCxzb3V0aFBvcyxzb3V0aExvb2thaGVhZCxwcmV2Tm9ydGhQb3MsbmV4dE5vcnRoUG9zKTtzb3V0aFBvcz1zb3V0aExvb2thaGVhZDtwcmV2Tm9ydGhQb3M9bmV4dE5vcnRoUG9zfX1zY2FuKHNvdXRoLHNvdXRoUG9zLHNvdXRoLmxlbmd0aCxuZXh0Tm9ydGhQb3Msbm9ydGgubGVuZ3RoKX0pO3JldHVybiBzb3V0aH1fLnJlZHVjZShsYXllcmluZyx2aXNpdExheWVyKTtyZXR1cm4gY29uZmxpY3RzfWZ1bmN0aW9uIGZpbmRPdGhlcklubmVyU2VnbWVudE5vZGUoZyx2KXtpZihnLm5vZGUodikuZHVtbXkpcmV0dXJuIF8uZmluZChnLnByZWRlY2Vzc29ycyh2KSxmdW5jdGlvbih1KXtyZXR1cm4gZy5ub2RlKHUpLmR1bW15fSl9ZnVuY3Rpb24gYWRkQ29uZmxpY3QoY29uZmxpY3RzLAp2LHcpe2lmKHY+dyl7dmFyIHRtcD12O3Y9dzt3PXRtcH12YXIgY29uZmxpY3RzVj1jb25mbGljdHNbdl07aWYoIWNvbmZsaWN0c1YpY29uZmxpY3RzW3ZdPWNvbmZsaWN0c1Y9e307Y29uZmxpY3RzVlt3XT10cnVlfWZ1bmN0aW9uIGhhc0NvbmZsaWN0KGNvbmZsaWN0cyx2LHcpe2lmKHY+dyl7dmFyIHRtcD12O3Y9dzt3PXRtcH1yZXR1cm4gXy5oYXMoY29uZmxpY3RzW3ZdLHcpfWZ1bmN0aW9uIHZlcnRpY2FsQWxpZ25tZW50KGcsbGF5ZXJpbmcsY29uZmxpY3RzLG5laWdoYm9yRm4pe3ZhciByb290PXt9LGFsaWduPXt9LHBvcz17fTtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe18uZm9yRWFjaChsYXllcixmdW5jdGlvbih2LG9yZGVyKXtyb290W3ZdPXY7YWxpZ25bdl09djtwb3Nbdl09b3JkZXJ9KX0pO18uZm9yRWFjaChsYXllcmluZyxmdW5jdGlvbihsYXllcil7dmFyIHByZXZJZHg9LTE7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYpe3ZhciB3cz1uZWlnaGJvckZuKHYpOwppZih3cy5sZW5ndGgpe3dzPV8uc29ydEJ5KHdzLGZ1bmN0aW9uKHcpe3JldHVybiBwb3Nbd119KTt2YXIgbXA9KHdzLmxlbmd0aC0xKS8yO2Zvcih2YXIgaT1NYXRoLmZsb29yKG1wKSxpbD1NYXRoLmNlaWwobXApO2k8PWlsOysraSl7dmFyIHc9d3NbaV07aWYoYWxpZ25bdl09PT12JiZwcmV2SWR4PHBvc1t3XSYmIWhhc0NvbmZsaWN0KGNvbmZsaWN0cyx2LHcpKXthbGlnblt3XT12O2FsaWduW3ZdPXJvb3Rbdl09cm9vdFt3XTtwcmV2SWR4PXBvc1t3XX19fX0pfSk7cmV0dXJue3Jvb3Q6cm9vdCxhbGlnbjphbGlnbn19ZnVuY3Rpb24gaG9yaXpvbnRhbENvbXBhY3Rpb24oZyxsYXllcmluZyxyb290LGFsaWduLHJldmVyc2VTZXApe3ZhciB4cz17fSxibG9ja0c9YnVpbGRCbG9ja0dyYXBoKGcsbGF5ZXJpbmcscm9vdCxyZXZlcnNlU2VwKSxib3JkZXJUeXBlPXJldmVyc2VTZXA/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gaXRlcmF0ZShzZXRYc0Z1bmMsbmV4dE5vZGVzRnVuYyl7dmFyIHN0YWNrPQpibG9ja0cubm9kZXMoKTt2YXIgZWxlbT1zdGFjay5wb3AoKTt2YXIgdmlzaXRlZD17fTt3aGlsZShlbGVtKXtpZih2aXNpdGVkW2VsZW1dKXNldFhzRnVuYyhlbGVtKTtlbHNle3Zpc2l0ZWRbZWxlbV09dHJ1ZTtzdGFjay5wdXNoKGVsZW0pO3N0YWNrPXN0YWNrLmNvbmNhdChuZXh0Tm9kZXNGdW5jKGVsZW0pKX1lbGVtPXN0YWNrLnBvcCgpfX1mdW5jdGlvbiBwYXNzMShlbGVtKXt4c1tlbGVtXT1ibG9ja0cuaW5FZGdlcyhlbGVtKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLGUpe3JldHVybiBNYXRoLm1heChhY2MseHNbZS52XStibG9ja0cuZWRnZShlKSl9LDApfWZ1bmN0aW9uIHBhc3MyKGVsZW0pe3ZhciBtaW49YmxvY2tHLm91dEVkZ2VzKGVsZW0pLnJlZHVjZShmdW5jdGlvbihhY2MsZSl7cmV0dXJuIE1hdGgubWluKGFjYyx4c1tlLnddLWJsb2NrRy5lZGdlKGUpKX0sTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgbm9kZT1nLm5vZGUoZWxlbSk7aWYobWluIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiYKbm9kZS5ib3JkZXJUeXBlIT09Ym9yZGVyVHlwZSl4c1tlbGVtXT1NYXRoLm1heCh4c1tlbGVtXSxtaW4pfWl0ZXJhdGUocGFzczEsXy5iaW5kKGJsb2NrRy5wcmVkZWNlc3NvcnMsYmxvY2tHKSk7aXRlcmF0ZShwYXNzMixfLmJpbmQoYmxvY2tHLnN1Y2Nlc3NvcnMsYmxvY2tHKSk7Xy5mb3JFYWNoKGFsaWduLGZ1bmN0aW9uKHYpe3hzW3ZdPXhzW3Jvb3Rbdl1dfSk7cmV0dXJuIHhzfWZ1bmN0aW9uIGJ1aWxkQmxvY2tHcmFwaChnLGxheWVyaW5nLHJvb3QscmV2ZXJzZVNlcCl7dmFyIGJsb2NrR3JhcGg9bmV3IEdyYXBoLGdyYXBoTGFiZWw9Zy5ncmFwaCgpLHNlcEZuPXNlcChncmFwaExhYmVsLm5vZGVzZXAsZ3JhcGhMYWJlbC5lZGdlc2VwLHJldmVyc2VTZXApO18uZm9yRWFjaChsYXllcmluZyxmdW5jdGlvbihsYXllcil7dmFyIHU7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYpe3ZhciB2Um9vdD1yb290W3ZdO2Jsb2NrR3JhcGguc2V0Tm9kZSh2Um9vdCk7aWYodSl7dmFyIHVSb290PQpyb290W3VdLHByZXZNYXg9YmxvY2tHcmFwaC5lZGdlKHVSb290LHZSb290KTtibG9ja0dyYXBoLnNldEVkZ2UodVJvb3QsdlJvb3QsTWF0aC5tYXgoc2VwRm4oZyx2LHUpLHByZXZNYXh8fDApKX11PXZ9KX0pO3JldHVybiBibG9ja0dyYXBofWZ1bmN0aW9uIGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50KGcseHNzKXtyZXR1cm4gXy5taW5CeShfLnZhbHVlcyh4c3MpLGZ1bmN0aW9uKHhzKXt2YXIgbWF4PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTt2YXIgbWluPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtfLmZvckluKHhzLGZ1bmN0aW9uKHgsdil7dmFyIGhhbGZXaWR0aD13aWR0aChnLHYpLzI7bWF4PU1hdGgubWF4KHgraGFsZldpZHRoLG1heCk7bWluPU1hdGgubWluKHgtaGFsZldpZHRoLG1pbil9KTtyZXR1cm4gbWF4LW1pbn0pfWZ1bmN0aW9uIGFsaWduQ29vcmRpbmF0ZXMoeHNzLGFsaWduVG8pe3ZhciBhbGlnblRvVmFscz1fLnZhbHVlcyhhbGlnblRvKSxhbGlnblRvTWluPQpfLm1pbihhbGlnblRvVmFscyksYWxpZ25Ub01heD1fLm1heChhbGlnblRvVmFscyk7Xy5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbih2ZXJ0KXtfLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKGhvcml6KXt2YXIgYWxpZ25tZW50PXZlcnQraG9yaXoseHM9eHNzW2FsaWdubWVudF0sZGVsdGE7aWYoeHM9PT1hbGlnblRvKXJldHVybjt2YXIgeHNWYWxzPV8udmFsdWVzKHhzKTtkZWx0YT1ob3Jpej09PSJsIj9hbGlnblRvTWluLV8ubWluKHhzVmFscyk6YWxpZ25Ub01heC1fLm1heCh4c1ZhbHMpO2lmKGRlbHRhKXhzc1thbGlnbm1lbnRdPV8ubWFwVmFsdWVzKHhzLGZ1bmN0aW9uKHgpe3JldHVybiB4K2RlbHRhfSl9KX0pfWZ1bmN0aW9uIGJhbGFuY2UoeHNzLGFsaWduKXtyZXR1cm4gXy5tYXBWYWx1ZXMoeHNzLnVsLGZ1bmN0aW9uKGlnbm9yZSx2KXtpZihhbGlnbilyZXR1cm4geHNzW2FsaWduLnRvTG93ZXJDYXNlKCldW3ZdO2Vsc2V7dmFyIHhzPV8uc29ydEJ5KF8ubWFwKHhzcywKdikpO3JldHVybih4c1sxXSt4c1syXSkvMn19KX1mdW5jdGlvbiBwb3NpdGlvblgoZyl7dmFyIGxheWVyaW5nPXV0aWwuYnVpbGRMYXllck1hdHJpeChnKSxjb25mbGljdHM9Xy5tZXJnZShmaW5kVHlwZTFDb25mbGljdHMoZyxsYXllcmluZyksZmluZFR5cGUyQ29uZmxpY3RzKGcsbGF5ZXJpbmcpKTt2YXIgeHNzPXt9LGFkanVzdGVkTGF5ZXJpbmc7Xy5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbih2ZXJ0KXthZGp1c3RlZExheWVyaW5nPXZlcnQ9PT0idSI/bGF5ZXJpbmc6Xy52YWx1ZXMobGF5ZXJpbmcpLnJldmVyc2UoKTtfLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKGhvcml6KXtpZihob3Jpej09PSJyIilhZGp1c3RlZExheWVyaW5nPV8ubWFwKGFkanVzdGVkTGF5ZXJpbmcsZnVuY3Rpb24oaW5uZXIpe3JldHVybiBfLnZhbHVlcyhpbm5lcikucmV2ZXJzZSgpfSk7dmFyIG5laWdoYm9yRm49Xy5iaW5kKHZlcnQ9PT0idSI/Zy5wcmVkZWNlc3NvcnM6Zy5zdWNjZXNzb3JzLApnKTt2YXIgYWxpZ249dmVydGljYWxBbGlnbm1lbnQoZyxhZGp1c3RlZExheWVyaW5nLGNvbmZsaWN0cyxuZWlnaGJvckZuKTt2YXIgeHM9aG9yaXpvbnRhbENvbXBhY3Rpb24oZyxhZGp1c3RlZExheWVyaW5nLGFsaWduLnJvb3QsYWxpZ24uYWxpZ24saG9yaXo9PT0iciIpO2lmKGhvcml6PT09InIiKXhzPV8ubWFwVmFsdWVzKHhzLGZ1bmN0aW9uKHgpe3JldHVybi14fSk7eHNzW3ZlcnQraG9yaXpdPXhzfSl9KTt2YXIgc21hbGxlc3RXaWR0aD1maW5kU21hbGxlc3RXaWR0aEFsaWdubWVudChnLHhzcyk7YWxpZ25Db29yZGluYXRlcyh4c3Msc21hbGxlc3RXaWR0aCk7cmV0dXJuIGJhbGFuY2UoeHNzLGcuZ3JhcGgoKS5hbGlnbil9ZnVuY3Rpb24gc2VwKG5vZGVTZXAsZWRnZVNlcCxyZXZlcnNlU2VwKXtyZXR1cm4gZnVuY3Rpb24oZyx2LHcpe3ZhciB2TGFiZWw9Zy5ub2RlKHYpLHdMYWJlbD1nLm5vZGUodyksc3VtPTAsZGVsdGE7c3VtKz12TGFiZWwud2lkdGgvMjtpZihfLmhhcyh2TGFiZWwsCiJsYWJlbHBvcyIpKXN3aXRjaCh2TGFiZWwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSAibCI6ZGVsdGE9LXZMYWJlbC53aWR0aC8yO2JyZWFrO2Nhc2UgInIiOmRlbHRhPXZMYWJlbC53aWR0aC8yO2JyZWFrfWlmKGRlbHRhKXN1bSs9cmV2ZXJzZVNlcD9kZWx0YTotZGVsdGE7ZGVsdGE9MDtzdW0rPSh2TGFiZWwuZHVtbXk/ZWRnZVNlcDpub2RlU2VwKS8yO3N1bSs9KHdMYWJlbC5kdW1teT9lZGdlU2VwOm5vZGVTZXApLzI7c3VtKz13TGFiZWwud2lkdGgvMjtpZihfLmhhcyh3TGFiZWwsImxhYmVscG9zIikpc3dpdGNoKHdMYWJlbC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlICJsIjpkZWx0YT13TGFiZWwud2lkdGgvMjticmVhaztjYXNlICJyIjpkZWx0YT0td0xhYmVsLndpZHRoLzI7YnJlYWt9aWYoZGVsdGEpc3VtKz1yZXZlcnNlU2VwP2RlbHRhOi1kZWx0YTtkZWx0YT0wO3JldHVybiBzdW19fWZ1bmN0aW9uIHdpZHRoKGcsdil7cmV0dXJuIGcubm9kZSh2KS53aWR0aH0KfSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwLCIuLi91dGlsIjoyOX1dLDI0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4uL3V0aWwiKSxwb3NpdGlvblg9cmVxdWlyZSgiLi9iayIpLnBvc2l0aW9uWDttb2R1bGUuZXhwb3J0cz1wb3NpdGlvbjtmdW5jdGlvbiBwb3NpdGlvbihnKXtnPXV0aWwuYXNOb25Db21wb3VuZEdyYXBoKGcpO3Bvc2l0aW9uWShnKTtfLmZvckVhY2gocG9zaXRpb25YKGcpLGZ1bmN0aW9uKHgsdil7Zy5ub2RlKHYpLng9eH0pfWZ1bmN0aW9uIHBvc2l0aW9uWShnKXt2YXIgbGF5ZXJpbmc9dXRpbC5idWlsZExheWVyTWF0cml4KGcpLHJhbmtTZXA9Zy5ncmFwaCgpLnJhbmtzZXAscHJldlk9MDtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe3ZhciBtYXhIZWlnaHQ9Xy5tYXgoXy5tYXAobGF5ZXIsZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KS5oZWlnaHR9KSk7Cl8uZm9yRWFjaChsYXllcixmdW5jdGlvbih2KXtnLm5vZGUodikueT1wcmV2WSttYXhIZWlnaHQvMn0pO3ByZXZZKz1tYXhIZWlnaHQrcmFua1NlcH0pfX0seyIuLi9sb2Rhc2giOjEwLCIuLi91dGlsIjoyOSwiLi9iayI6MjN9XSwyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksR3JhcGg9cmVxdWlyZSgiLi4vZ3JhcGhsaWIiKS5HcmFwaCxzbGFjaz1yZXF1aXJlKCIuL3V0aWwiKS5zbGFjazttb2R1bGUuZXhwb3J0cz1mZWFzaWJsZVRyZWU7ZnVuY3Rpb24gZmVhc2libGVUcmVlKGcpe3ZhciB0PW5ldyBHcmFwaCh7ZGlyZWN0ZWQ6ZmFsc2V9KTt2YXIgc3RhcnQ9Zy5ub2RlcygpWzBdLHNpemU9Zy5ub2RlQ291bnQoKTt0LnNldE5vZGUoc3RhcnQse30pO3ZhciBlZGdlLGRlbHRhO3doaWxlKHRpZ2h0VHJlZSh0LGcpPHNpemUpe2VkZ2U9ZmluZE1pblNsYWNrRWRnZSh0LGcpO2RlbHRhPXQuaGFzTm9kZShlZGdlLnYpPwpzbGFjayhnLGVkZ2UpOi1zbGFjayhnLGVkZ2UpO3NoaWZ0UmFua3ModCxnLGRlbHRhKX1yZXR1cm4gdH1mdW5jdGlvbiB0aWdodFRyZWUodCxnKXtmdW5jdGlvbiBkZnModil7Xy5mb3JFYWNoKGcubm9kZUVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlVj1lLnYsdz12PT09ZWRnZVY/ZS53OmVkZ2VWO2lmKCF0Lmhhc05vZGUodykmJiFzbGFjayhnLGUpKXt0LnNldE5vZGUodyx7fSk7dC5zZXRFZGdlKHYsdyx7fSk7ZGZzKHcpfX0pfV8uZm9yRWFjaCh0Lm5vZGVzKCksZGZzKTtyZXR1cm4gdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBmaW5kTWluU2xhY2tFZGdlKHQsZyl7cmV0dXJuIF8ubWluQnkoZy5lZGdlcygpLGZ1bmN0aW9uKGUpe2lmKHQuaGFzTm9kZShlLnYpIT09dC5oYXNOb2RlKGUudykpcmV0dXJuIHNsYWNrKGcsZSl9KX1mdW5jdGlvbiBzaGlmdFJhbmtzKHQsZyxkZWx0YSl7Xy5mb3JFYWNoKHQubm9kZXMoKSxmdW5jdGlvbih2KXtnLm5vZGUodikucmFuays9ZGVsdGF9KX0KfSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI4fV0sMjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciByYW5rVXRpbD1yZXF1aXJlKCIuL3V0aWwiKSxsb25nZXN0UGF0aD1yYW5rVXRpbC5sb25nZXN0UGF0aCxmZWFzaWJsZVRyZWU9cmVxdWlyZSgiLi9mZWFzaWJsZS10cmVlIiksbmV0d29ya1NpbXBsZXg9cmVxdWlyZSgiLi9uZXR3b3JrLXNpbXBsZXgiKTttb2R1bGUuZXhwb3J0cz1yYW5rO2Z1bmN0aW9uIHJhbmsoZyl7c3dpdGNoKGcuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UgIm5ldHdvcmstc2ltcGxleCI6bmV0d29ya1NpbXBsZXhSYW5rZXIoZyk7YnJlYWs7Y2FzZSAidGlnaHQtdHJlZSI6dGlnaHRUcmVlUmFua2VyKGcpO2JyZWFrO2Nhc2UgImxvbmdlc3QtcGF0aCI6bG9uZ2VzdFBhdGhSYW5rZXIoZyk7YnJlYWs7ZGVmYXVsdDpuZXR3b3JrU2ltcGxleFJhbmtlcihnKX19dmFyIGxvbmdlc3RQYXRoUmFua2VyPWxvbmdlc3RQYXRoOwpmdW5jdGlvbiB0aWdodFRyZWVSYW5rZXIoZyl7bG9uZ2VzdFBhdGgoZyk7ZmVhc2libGVUcmVlKGcpfWZ1bmN0aW9uIG5ldHdvcmtTaW1wbGV4UmFua2VyKGcpe25ldHdvcmtTaW1wbGV4KGcpfX0seyIuL2ZlYXNpYmxlLXRyZWUiOjI1LCIuL25ldHdvcmstc2ltcGxleCI6MjcsIi4vdXRpbCI6Mjh9XSwyNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksZmVhc2libGVUcmVlPXJlcXVpcmUoIi4vZmVhc2libGUtdHJlZSIpLHNsYWNrPXJlcXVpcmUoIi4vdXRpbCIpLnNsYWNrLGluaXRSYW5rPXJlcXVpcmUoIi4vdXRpbCIpLmxvbmdlc3RQYXRoLHByZW9yZGVyPXJlcXVpcmUoIi4uL2dyYXBobGliIikuYWxnLnByZW9yZGVyLHBvc3RvcmRlcj1yZXF1aXJlKCIuLi9ncmFwaGxpYiIpLmFsZy5wb3N0b3JkZXIsc2ltcGxpZnk9cmVxdWlyZSgiLi4vdXRpbCIpLnNpbXBsaWZ5O21vZHVsZS5leHBvcnRzPW5ldHdvcmtTaW1wbGV4OwpuZXR3b3JrU2ltcGxleC5pbml0TG93TGltVmFsdWVzPWluaXRMb3dMaW1WYWx1ZXM7bmV0d29ya1NpbXBsZXguaW5pdEN1dFZhbHVlcz1pbml0Q3V0VmFsdWVzO25ldHdvcmtTaW1wbGV4LmNhbGNDdXRWYWx1ZT1jYWxjQ3V0VmFsdWU7bmV0d29ya1NpbXBsZXgubGVhdmVFZGdlPWxlYXZlRWRnZTtuZXR3b3JrU2ltcGxleC5lbnRlckVkZ2U9ZW50ZXJFZGdlO25ldHdvcmtTaW1wbGV4LmV4Y2hhbmdlRWRnZXM9ZXhjaGFuZ2VFZGdlcztmdW5jdGlvbiBuZXR3b3JrU2ltcGxleChnKXtnPXNpbXBsaWZ5KGcpO2luaXRSYW5rKGcpO3ZhciB0PWZlYXNpYmxlVHJlZShnKTtpbml0TG93TGltVmFsdWVzKHQpO2luaXRDdXRWYWx1ZXModCxnKTt2YXIgZSxmO3doaWxlKGU9bGVhdmVFZGdlKHQpKXtmPWVudGVyRWRnZSh0LGcsZSk7ZXhjaGFuZ2VFZGdlcyh0LGcsZSxmKX19ZnVuY3Rpb24gaW5pdEN1dFZhbHVlcyh0LGcpe3ZhciB2cz1wb3N0b3JkZXIodCx0Lm5vZGVzKCkpO3ZzPXZzLnNsaWNlKDAsCnZzLmxlbmd0aC0xKTtfLmZvckVhY2godnMsZnVuY3Rpb24odil7YXNzaWduQ3V0VmFsdWUodCxnLHYpfSl9ZnVuY3Rpb24gYXNzaWduQ3V0VmFsdWUodCxnLGNoaWxkKXt2YXIgY2hpbGRMYWI9dC5ub2RlKGNoaWxkKSxwYXJlbnQ9Y2hpbGRMYWIucGFyZW50O3QuZWRnZShjaGlsZCxwYXJlbnQpLmN1dHZhbHVlPWNhbGNDdXRWYWx1ZSh0LGcsY2hpbGQpfWZ1bmN0aW9uIGNhbGNDdXRWYWx1ZSh0LGcsY2hpbGQpe3ZhciBjaGlsZExhYj10Lm5vZGUoY2hpbGQpLHBhcmVudD1jaGlsZExhYi5wYXJlbnQsY2hpbGRJc1RhaWw9dHJ1ZSxncmFwaEVkZ2U9Zy5lZGdlKGNoaWxkLHBhcmVudCksY3V0VmFsdWU9MDtpZighZ3JhcGhFZGdlKXtjaGlsZElzVGFpbD1mYWxzZTtncmFwaEVkZ2U9Zy5lZGdlKHBhcmVudCxjaGlsZCl9Y3V0VmFsdWU9Z3JhcGhFZGdlLndlaWdodDtfLmZvckVhY2goZy5ub2RlRWRnZXMoY2hpbGQpLGZ1bmN0aW9uKGUpe3ZhciBpc091dEVkZ2U9ZS52PT09Y2hpbGQsb3RoZXI9CmlzT3V0RWRnZT9lLnc6ZS52O2lmKG90aGVyIT09cGFyZW50KXt2YXIgcG9pbnRzVG9IZWFkPWlzT3V0RWRnZT09PWNoaWxkSXNUYWlsLG90aGVyV2VpZ2h0PWcuZWRnZShlKS53ZWlnaHQ7Y3V0VmFsdWUrPXBvaW50c1RvSGVhZD9vdGhlcldlaWdodDotb3RoZXJXZWlnaHQ7aWYoaXNUcmVlRWRnZSh0LGNoaWxkLG90aGVyKSl7dmFyIG90aGVyQ3V0VmFsdWU9dC5lZGdlKGNoaWxkLG90aGVyKS5jdXR2YWx1ZTtjdXRWYWx1ZSs9cG9pbnRzVG9IZWFkPy1vdGhlckN1dFZhbHVlOm90aGVyQ3V0VmFsdWV9fX0pO3JldHVybiBjdXRWYWx1ZX1mdW5jdGlvbiBpbml0TG93TGltVmFsdWVzKHRyZWUscm9vdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJvb3Q9dHJlZS5ub2RlcygpWzBdO2Rmc0Fzc2lnbkxvd0xpbSh0cmVlLHt9LDEscm9vdCl9ZnVuY3Rpb24gZGZzQXNzaWduTG93TGltKHRyZWUsdmlzaXRlZCxuZXh0TGltLHYscGFyZW50KXt2YXIgbG93PW5leHRMaW0sbGFiZWw9dHJlZS5ub2RlKHYpOwp2aXNpdGVkW3ZdPXRydWU7Xy5mb3JFYWNoKHRyZWUubmVpZ2hib3JzKHYpLGZ1bmN0aW9uKHcpe2lmKCFfLmhhcyh2aXNpdGVkLHcpKW5leHRMaW09ZGZzQXNzaWduTG93TGltKHRyZWUsdmlzaXRlZCxuZXh0TGltLHcsdil9KTtsYWJlbC5sb3c9bG93O2xhYmVsLmxpbT1uZXh0TGltKys7aWYocGFyZW50KWxhYmVsLnBhcmVudD1wYXJlbnQ7ZWxzZSBkZWxldGUgbGFiZWwucGFyZW50O3JldHVybiBuZXh0TGltfWZ1bmN0aW9uIGxlYXZlRWRnZSh0cmVlKXtyZXR1cm4gXy5maW5kKHRyZWUuZWRnZXMoKSxmdW5jdGlvbihlKXtyZXR1cm4gdHJlZS5lZGdlKGUpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBlbnRlckVkZ2UodCxnLGVkZ2Upe3ZhciB2PWVkZ2Uudix3PWVkZ2UudztpZighZy5oYXNFZGdlKHYsdykpe3Y9ZWRnZS53O3c9ZWRnZS52fXZhciB2TGFiZWw9dC5ub2RlKHYpLHdMYWJlbD10Lm5vZGUodyksdGFpbExhYmVsPXZMYWJlbCxmbGlwPWZhbHNlO2lmKHZMYWJlbC5saW0+d0xhYmVsLmxpbSl7dGFpbExhYmVsPQp3TGFiZWw7ZmxpcD10cnVlfXZhciBjYW5kaWRhdGVzPV8uZmlsdGVyKGcuZWRnZXMoKSxmdW5jdGlvbihlZGdlKXtyZXR1cm4gZmxpcD09PWlzRGVzY2VuZGFudCh0LHQubm9kZShlZGdlLnYpLHRhaWxMYWJlbCkmJmZsaXAhPT1pc0Rlc2NlbmRhbnQodCx0Lm5vZGUoZWRnZS53KSx0YWlsTGFiZWwpfSk7cmV0dXJuIF8ubWluQnkoY2FuZGlkYXRlcyxmdW5jdGlvbihlZGdlKXtyZXR1cm4gc2xhY2soZyxlZGdlKX0pfWZ1bmN0aW9uIGV4Y2hhbmdlRWRnZXModCxnLGUsZil7dmFyIHY9ZS52LHc9ZS53O3QucmVtb3ZlRWRnZSh2LHcpO3Quc2V0RWRnZShmLnYsZi53LHt9KTtpbml0TG93TGltVmFsdWVzKHQpO2luaXRDdXRWYWx1ZXModCxnKTt1cGRhdGVSYW5rcyh0LGcpfWZ1bmN0aW9uIHVwZGF0ZVJhbmtzKHQsZyl7dmFyIHJvb3Q9Xy5maW5kKHQubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4hZy5ub2RlKHYpLnBhcmVudH0pLHZzPXByZW9yZGVyKHQscm9vdCk7dnM9dnMuc2xpY2UoMSk7Cl8uZm9yRWFjaCh2cyxmdW5jdGlvbih2KXt2YXIgcGFyZW50PXQubm9kZSh2KS5wYXJlbnQsZWRnZT1nLmVkZ2UodixwYXJlbnQpLGZsaXBwZWQ9ZmFsc2U7aWYoIWVkZ2Upe2VkZ2U9Zy5lZGdlKHBhcmVudCx2KTtmbGlwcGVkPXRydWV9Zy5ub2RlKHYpLnJhbms9Zy5ub2RlKHBhcmVudCkucmFuaysoZmxpcHBlZD9lZGdlLm1pbmxlbjotZWRnZS5taW5sZW4pfSl9ZnVuY3Rpb24gaXNUcmVlRWRnZSh0cmVlLHUsdil7cmV0dXJuIHRyZWUuaGFzRWRnZSh1LHYpfWZ1bmN0aW9uIGlzRGVzY2VuZGFudCh0cmVlLHZMYWJlbCxyb290TGFiZWwpe3JldHVybiByb290TGFiZWwubG93PD12TGFiZWwubGltJiZ2TGFiZWwubGltPD1yb290TGFiZWwubGltfX0seyIuLi9ncmFwaGxpYiI6NywiLi4vbG9kYXNoIjoxMCwiLi4vdXRpbCI6MjksIi4vZmVhc2libGUtdHJlZSI6MjUsIi4vdXRpbCI6Mjh9XSwyODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7Cm1vZHVsZS5leHBvcnRzPXtsb25nZXN0UGF0aDpsb25nZXN0UGF0aCxzbGFjazpzbGFja307ZnVuY3Rpb24gbG9uZ2VzdFBhdGgoZyl7dmFyIHZpc2l0ZWQ9e307ZnVuY3Rpb24gZGZzKHYpe3ZhciBsYWJlbD1nLm5vZGUodik7aWYoXy5oYXModmlzaXRlZCx2KSlyZXR1cm4gbGFiZWwucmFuazt2aXNpdGVkW3ZdPXRydWU7dmFyIHJhbms9Xy5taW5CeShfLm1hcChnLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3JldHVybiBkZnMoZS53KS1nLmVkZ2UoZSkubWlubGVufSkpO2lmKHJhbms9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fHJhbms9PT11bmRlZmluZWR8fHJhbms9PT1udWxsKXJhbms9MDtyZXR1cm4gbGFiZWwucmFuaz1yYW5rfV8uZm9yRWFjaChnLnNvdXJjZXMoKSxkZnMpfWZ1bmN0aW9uIHNsYWNrKGcsZSl7cmV0dXJuIGcubm9kZShlLncpLnJhbmstZy5ub2RlKGUudikucmFuay1nLmVkZ2UoZSkubWlubGVufX0seyIuLi9sb2Rhc2giOjEwfV0sMjk6W2Z1bmN0aW9uKHJlcXVpcmUsCm1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLEdyYXBoPXJlcXVpcmUoIi4vZ3JhcGhsaWIiKS5HcmFwaDttb2R1bGUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOmFkZER1bW15Tm9kZSxzaW1wbGlmeTpzaW1wbGlmeSxhc05vbkNvbXBvdW5kR3JhcGg6YXNOb25Db21wb3VuZEdyYXBoLHN1Y2Nlc3NvcldlaWdodHM6c3VjY2Vzc29yV2VpZ2h0cyxwcmVkZWNlc3NvcldlaWdodHM6cHJlZGVjZXNzb3JXZWlnaHRzLGludGVyc2VjdFJlY3Q6aW50ZXJzZWN0UmVjdCxidWlsZExheWVyTWF0cml4OmJ1aWxkTGF5ZXJNYXRyaXgsbm9ybWFsaXplUmFua3M6bm9ybWFsaXplUmFua3MscmVtb3ZlRW1wdHlSYW5rczpyZW1vdmVFbXB0eVJhbmtzLGFkZEJvcmRlck5vZGU6YWRkQm9yZGVyTm9kZSxtYXhSYW5rOm1heFJhbmsscGFydGl0aW9uOnBhcnRpdGlvbix0aW1lOnRpbWUsbm90aW1lOm5vdGltZX07ZnVuY3Rpb24gYWRkRHVtbXlOb2RlKGcsdHlwZSxhdHRycyxuYW1lKXt2YXIgdjsKZG8gdj1fLnVuaXF1ZUlkKG5hbWUpO3doaWxlKGcuaGFzTm9kZSh2KSk7YXR0cnMuZHVtbXk9dHlwZTtnLnNldE5vZGUodixhdHRycyk7cmV0dXJuIHZ9ZnVuY3Rpb24gc2ltcGxpZnkoZyl7dmFyIHNpbXBsaWZpZWQ9KG5ldyBHcmFwaCkuc2V0R3JhcGgoZy5ncmFwaCgpKTtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3NpbXBsaWZpZWQuc2V0Tm9kZSh2LGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBzaW1wbGVMYWJlbD1zaW1wbGlmaWVkLmVkZ2UoZS52LGUudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0sbGFiZWw9Zy5lZGdlKGUpO3NpbXBsaWZpZWQuc2V0RWRnZShlLnYsZS53LHt3ZWlnaHQ6c2ltcGxlTGFiZWwud2VpZ2h0K2xhYmVsLndlaWdodCxtaW5sZW46TWF0aC5tYXgoc2ltcGxlTGFiZWwubWlubGVuLGxhYmVsLm1pbmxlbil9KX0pO3JldHVybiBzaW1wbGlmaWVkfWZ1bmN0aW9uIGFzTm9uQ29tcG91bmRHcmFwaChnKXt2YXIgc2ltcGxpZmllZD0KKG5ldyBHcmFwaCh7bXVsdGlncmFwaDpnLmlzTXVsdGlncmFwaCgpfSkpLnNldEdyYXBoKGcuZ3JhcGgoKSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZighZy5jaGlsZHJlbih2KS5sZW5ndGgpc2ltcGxpZmllZC5zZXROb2RlKHYsZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7c2ltcGxpZmllZC5zZXRFZGdlKGUsZy5lZGdlKGUpKX0pO3JldHVybiBzaW1wbGlmaWVkfWZ1bmN0aW9uIHN1Y2Nlc3NvcldlaWdodHMoZyl7dmFyIHdlaWdodE1hcD1fLm1hcChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIHN1Y3M9e307Xy5mb3JFYWNoKGcub3V0RWRnZXModiksZnVuY3Rpb24oZSl7c3Vjc1tlLnddPShzdWNzW2Uud118fDApK2cuZWRnZShlKS53ZWlnaHR9KTtyZXR1cm4gc3Vjc30pO3JldHVybiBfLnppcE9iamVjdChnLm5vZGVzKCksd2VpZ2h0TWFwKX1mdW5jdGlvbiBwcmVkZWNlc3NvcldlaWdodHMoZyl7dmFyIHdlaWdodE1hcD1fLm1hcChnLm5vZGVzKCksCmZ1bmN0aW9uKHYpe3ZhciBwcmVkcz17fTtfLmZvckVhY2goZy5pbkVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3ByZWRzW2Uudl09KHByZWRzW2Uudl18fDApK2cuZWRnZShlKS53ZWlnaHR9KTtyZXR1cm4gcHJlZHN9KTtyZXR1cm4gXy56aXBPYmplY3QoZy5ub2RlcygpLHdlaWdodE1hcCl9ZnVuY3Rpb24gaW50ZXJzZWN0UmVjdChyZWN0LHBvaW50KXt2YXIgeD1yZWN0Lng7dmFyIHk9cmVjdC55O3ZhciBkeD1wb2ludC54LXg7dmFyIGR5PXBvaW50LnkteTt2YXIgdz1yZWN0LndpZHRoLzI7dmFyIGg9cmVjdC5oZWlnaHQvMjtpZighZHgmJiFkeSl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciBzeCxzeTtpZihNYXRoLmFicyhkeSkqdz5NYXRoLmFicyhkeCkqaCl7aWYoZHk8MCloPS1oO3N4PWgqZHgvZHk7c3k9aH1lbHNle2lmKGR4PDApdz0tdztzeD13O3N5PXcqZHkvZHh9cmV0dXJue3g6eCsKc3gseTp5K3N5fX1mdW5jdGlvbiBidWlsZExheWVyTWF0cml4KGcpe3ZhciBsYXllcmluZz1fLm1hcChfLnJhbmdlKG1heFJhbmsoZykrMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpLHJhbms9bm9kZS5yYW5rO2lmKCFfLmlzVW5kZWZpbmVkKHJhbmspKWxheWVyaW5nW3JhbmtdW25vZGUub3JkZXJdPXZ9KTtyZXR1cm4gbGF5ZXJpbmd9ZnVuY3Rpb24gbm9ybWFsaXplUmFua3MoZyl7dmFyIG1pbj1fLm1pbkJ5KF8ubWFwKGcubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4gZy5ub2RlKHYpLnJhbmt9KSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXt2YXIgbm9kZT1nLm5vZGUodik7aWYoXy5oYXMobm9kZSwicmFuayIpKW5vZGUucmFuay09bWlufSl9ZnVuY3Rpb24gcmVtb3ZlRW1wdHlSYW5rcyhnKXt2YXIgb2Zmc2V0PV8ubWluQnkoXy5tYXAoZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3JldHVybiBnLm5vZGUodikucmFua30pKTsKdmFyIGxheWVycz1bXTtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciByYW5rPWcubm9kZSh2KS5yYW5rLW9mZnNldDtpZighbGF5ZXJzW3JhbmtdKWxheWVyc1tyYW5rXT1bXTtsYXllcnNbcmFua10ucHVzaCh2KX0pO3ZhciBkZWx0YT0wLG5vZGVSYW5rRmFjdG9yPWcuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtfLmZvckVhY2gobGF5ZXJzLGZ1bmN0aW9uKHZzLGkpe2lmKF8uaXNVbmRlZmluZWQodnMpJiZpJW5vZGVSYW5rRmFjdG9yIT09MCktLWRlbHRhO2Vsc2UgaWYoZGVsdGEpXy5mb3JFYWNoKHZzLGZ1bmN0aW9uKHYpe2cubm9kZSh2KS5yYW5rKz1kZWx0YX0pfSl9ZnVuY3Rpb24gYWRkQm9yZGVyTm9kZShnLHByZWZpeCxyYW5rLG9yZGVyKXt2YXIgbm9kZT17d2lkdGg6MCxoZWlnaHQ6MH07aWYoYXJndW1lbnRzLmxlbmd0aD49NCl7bm9kZS5yYW5rPXJhbms7bm9kZS5vcmRlcj1vcmRlcn1yZXR1cm4gYWRkRHVtbXlOb2RlKGcsImJvcmRlciIsbm9kZSxwcmVmaXgpfQpmdW5jdGlvbiBtYXhSYW5rKGcpe3JldHVybiBfLm1heChfLm1hcChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIHJhbms9Zy5ub2RlKHYpLnJhbms7aWYoIV8uaXNVbmRlZmluZWQocmFuaykpcmV0dXJuIHJhbmt9KSl9ZnVuY3Rpb24gcGFydGl0aW9uKGNvbGxlY3Rpb24sZm4pe3ZhciByZXN1bHQ9e2xoczpbXSxyaHM6W119O18uZm9yRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlKXtpZihmbih2YWx1ZSkpcmVzdWx0Lmxocy5wdXNoKHZhbHVlKTtlbHNlIHJlc3VsdC5yaHMucHVzaCh2YWx1ZSl9KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHRpbWUobmFtZSxmbil7dmFyIHN0YXJ0PV8ubm93KCk7dHJ5e3JldHVybiBmbigpfWZpbmFsbHl7Y29uc29sZS5sb2cobmFtZSsiIHRpbWU6ICIrKF8ubm93KCktc3RhcnQpKyJtcyIpfX1mdW5jdGlvbiBub3RpbWUobmFtZSxmbil7cmV0dXJuIGZuKCl9fSx7Ii4vZ3JhcGhsaWIiOjcsIi4vbG9kYXNoIjoxMH1dLDMwOltmdW5jdGlvbihyZXF1aXJlLAptb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9IjAuOC4yIn0se31dfSx7fSxbMV0pKDEpfSk7Ci8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1jb21tb24vYW5ub3RhdGlvbi5qcwp2YXIgdGY7CihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpeyhmdW5jdGlvbihmKXtmdW5jdGlvbiBnKHIpe3JldHVybihjLnJlbmRlci5Bbm5vdGF0aW9uVHlwZVtyXXx8IiIpLnRvTG93ZXJDYXNlKCl8fG51bGx9ZnVuY3Rpb24gbChyLHQpe3QuYW5ub3RhdGlvblR5cGU9PT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5TVU1NQVJZP2Quc2VsZWN0T3JDcmVhdGVDaGlsZChyLCJ1c2UiKS5hdHRyKCJjbGFzcyIsInN1bW1hcnkiKS5hdHRyKCJ4bGluazpocmVmIiwiI3N1bW1hcnktaWNvbiIpLmF0dHIoImN1cnNvciIsInBvaW50ZXIiKToocj1kLm5vZGUuYnVpbGRTaGFwZShyLHQsZC5DbGFzcy5Bbm5vdGF0aW9uLk5PREUpLGQuc2VsZWN0T3JDcmVhdGVDaGlsZChyLCJ0aXRsZSIpLnRleHQodC5ub2RlLm5hbWUpKX1mdW5jdGlvbiBrKHIsdCl7bGV0IHY9dC5ub2RlLm5hbWUuc3BsaXQoIi8iKTtyZXR1cm4gbihyLHZbdi5sZW5ndGgtMV0sdCxudWxsKX1mdW5jdGlvbiBuKHIsdCwKdix5KXtsZXQgej1kLkNsYXNzLkFubm90YXRpb24uTEFCRUw7eSYmKHorPSIgIit5KTtyPXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLHopLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdi5pc0luPyJlbmQiOiJzdGFydCIpLnRleHQodCk7cmV0dXJuIGEuZ3JhcGguc2NlbmUubm9kZS5lbmZvcmNlTGFiZWxXaWR0aChyLC0xKX1mdW5jdGlvbiBwKHIsdCx2LHkpe3Iub24oIm1vdXNlb3ZlciIsej0+e3kuZmlyZSgiYW5ub3RhdGlvbi1oaWdobGlnaHQiLHtuYW1lOnoubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLHo9Pnt5LmZpcmUoImFubm90YXRpb24tdW5oaWdobGlnaHQiLHtuYW1lOnoubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLHo9PntkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt5LmZpcmUoImFubm90YXRpb24tc2VsZWN0Iix7bmFtZTp6Lm5vZGUubmFtZSxob3N0TmFtZTp0Lm5vZGUubmFtZX0pfSk7CmlmKHYuYW5ub3RhdGlvblR5cGUhPT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5TVU1NQVJZJiZ2LmFubm90YXRpb25UeXBlIT09Yy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuQ09OU1RBTlQpci5vbigiY29udGV4dG1lbnUiLGQuY29udGV4dG1lbnUuZ2V0TWVudSh5LGQubm9kZS5nZXRDb250ZXh0TWVudSh2Lm5vZGUseSkpKX1mdW5jdGlvbiBxKHIsdCx2LHkpe2xldCB6PWMubGF5b3V0LmNvbXB1dGVDWFBvc2l0aW9uT2ZOb2RlU2hhcGUodCk7di5yZW5kZXJOb2RlSW5mbyYmdi5hbm5vdGF0aW9uVHlwZSE9PWMucmVuZGVyLkFubm90YXRpb25UeXBlLkVMTElQU0lTJiZkLm5vZGUuc3R5bGl6ZShyLHYucmVuZGVyTm9kZUluZm8seSxkLkNsYXNzLkFubm90YXRpb24uTk9ERSk7di5hbm5vdGF0aW9uVHlwZT09PWMucmVuZGVyLkFubm90YXRpb25UeXBlLlNVTU1BUlkmJih2LndpZHRoKz0xMCk7ci5zZWxlY3QoInRleHQuIitkLkNsYXNzLkFubm90YXRpb24uTEFCRUwpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IiwKeit2LmR4Kyh2LmlzSW4/LTE6MSkqKHYud2lkdGgvMit2LmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3YuZHkpO3Iuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix6K3YuZHgtMykuYXR0cigieSIsdC55K3YuZHktNik7ZC5wb3NpdGlvbkVsbGlwc2Uoci5zZWxlY3QoIi4iK2QuQ2xhc3MuQW5ub3RhdGlvbi5OT0RFKyIgZWxsaXBzZSIpLHordi5keCx0Lnkrdi5keSx2LndpZHRoLHYuaGVpZ2h0KTtkLnBvc2l0aW9uUmVjdChyLnNlbGVjdCgiLiIrZC5DbGFzcy5Bbm5vdGF0aW9uLk5PREUrIiByZWN0Iikseit2LmR4LHQueSt2LmR5LHYud2lkdGgsdi5oZWlnaHQpO2QucG9zaXRpb25SZWN0KHIuc2VsZWN0KCIuIitkLkNsYXNzLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLHordi5keCx0Lnkrdi5keSx2LndpZHRoLHYuaGVpZ2h0KTtyLnNlbGVjdCgicGF0aC4iK2QuQ2xhc3MuQW5ub3RhdGlvbi5FREdFKS50cmFuc2l0aW9uKCkuYXR0cigiZCIseD0+Cnt4PXgucG9pbnRzLm1hcChDPT4oe3g6Qy5keCt6LHk6Qy5keSt0Lnl9KSk7cmV0dXJuIGQuZWRnZS5pbnRlcnBvbGF0ZSh4KX0pfWYuYnVpbGRHcm91cD1mdW5jdGlvbihyLHQsdix5KXtyPXIuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc30pLmRhdGEodC5saXN0LHo9Pnoubm9kZS5uYW1lKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIix6PT56Lm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbih6KXtsZXQgeD1kMy5zZWxlY3QodGhpcyk7eS5hZGRBbm5vdGF0aW9uR3JvdXAoeix2LHgpO2xldCBDPWQuQ2xhc3MuQW5ub3RhdGlvbi5FREdFLEY9ei5yZW5kZXJNZXRhZWRnZUluZm8mJnoucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO0YmJiFGLm51bVJlZ3VsYXJFZGdlcyYmKEMrPSIgIitkLkNsYXNzLkFubm90YXRpb24uQ09OVFJPTF9FREdFKTtGJiZGLm51bVJlZkVkZ2VzJiYoQys9IiAiK2QuQ2xhc3MuRWRnZS5SRUZfTElORSk7CmQuZWRnZS5hcHBlbmRFZGdlKHgseix5LEMpO3ouYW5ub3RhdGlvblR5cGUhPT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5FTExJUFNJUz8oayh4LHopLGwoeCx6KSk6bih4LHoubm9kZS5uYW1lLHosZC5DbGFzcy5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKHIpLmF0dHIoImNsYXNzIix6PT5kLkNsYXNzLkFubm90YXRpb24uR1JPVVArIiAiK2coei5hbm5vdGF0aW9uVHlwZSkrIiAiK2Qubm9kZS5ub2RlQ2xhc3MoeikpLmVhY2goZnVuY3Rpb24oeil7bGV0IHg9ZDMuc2VsZWN0KHRoaXMpO3EoeCx2LHoseSk7ei5hbm5vdGF0aW9uVHlwZSE9PWMucmVuZGVyLkFubm90YXRpb25UeXBlLkVMTElQU0lTJiZwKHgsdix6LHkpfSk7ci5leGl0KCkuZWFjaChmdW5jdGlvbih6KXtsZXQgeD1kMy5zZWxlY3QodGhpcyk7eS5yZW1vdmVBbm5vdGF0aW9uR3JvdXAoeix2LHgpfSkucmVtb3ZlKCk7cmV0dXJuIHJ9fSkoZC5hbm5vdGF0aW9ufHwoZC5hbm5vdGF0aW9uPXt9KSl9KShjLnNjZW5lfHwKKGMuc2NlbmU9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29tbW9uL2NvbG9ycy5qcwooZnVuY3Rpb24oYSl7YS5DT0xPUlM9W3tuYW1lOiJHb29nbGUgQmx1ZSIsY29sb3I6IiM0MTg0ZjMiLGFjdGl2ZToiIzNhNTNjNSIsZGlzYWJsZWQ6IiNjYWQ4ZmMifSx7bmFtZToiR29vZ2xlIFJlZCIsY29sb3I6IiNkYjQ0MzciLGFjdGl2ZToiIzhmMmEwYyIsZGlzYWJsZWQ6IiNlOGM2YzEifSx7bmFtZToiR29vZ2xlIFllbGxvdyIsY29sb3I6IiNmNGI0MDAiLGFjdGl2ZToiI2RiOTIwMCIsZGlzYWJsZWQ6IiNmN2U4YjAifSx7bmFtZToiR29vZ2xlIEdyZWVuIixjb2xvcjoiIzBmOWQ1OCIsYWN0aXZlOiIjNDg4MDQ2IixkaXNhYmxlZDoiI2MyZTFjYyJ9LHtuYW1lOiJQdXJwbGUiLGNvbG9yOiIjYWE0NmJiIixhY3RpdmU6IiM1YzEzOTgiLGRpc2FibGVkOiIjZDdiY2U2In0se25hbWU6IlRlYWwiLGNvbG9yOiIjMDBhYmMwIixhY3RpdmU6IiM0NzgyOGUiLGRpc2FibGVkOiIjYzJlYWYyIn0se25hbWU6IkRlZXAgT3JhbmdlIixjb2xvcjoiI2ZmNmY0MiIsYWN0aXZlOiIjY2E0YTA2IiwKZGlzYWJsZWQ6IiNmMmNiYmEifSx7bmFtZToiTGltZSIsY29sb3I6IiM5ZDljMjMiLGFjdGl2ZToiIzdmNzcxZCIsZGlzYWJsZWQ6IiNmMWY0YzIifSx7bmFtZToiSW5kaWdvIixjb2xvcjoiIzViNmFiZiIsYWN0aXZlOiIjM2U0N2E5IixkaXNhYmxlZDoiI2M1YzhlOCJ9LHtuYW1lOiJQaW5rIixjb2xvcjoiI2VmNjE5MSIsYWN0aXZlOiIjY2ExYzYwIixkaXNhYmxlZDoiI2U5YjljZSJ9LHtuYW1lOiJEZWVwIFRlYWwiLGNvbG9yOiIjMDA3ODZhIixhY3RpdmU6IiMyYjRmNDMiLGRpc2FibGVkOiIjYmVkZWRhIn0se25hbWU6IkRlZXAgUGluayIsY29sb3I6IiNjMTE3NWEiLGFjdGl2ZToiIzc1MDg0ZiIsZGlzYWJsZWQ6IiNkZThjYWUifSx7bmFtZToiR3JheSIsY29sb3I6IiM5RTlFOUUiLGFjdGl2ZToiIzQyNDI0MiIsZGlzYWJsZWQ6IkY1RjVGNSJ9XS5yZWR1Y2UoKGMsZCk9PntjW2QubmFtZV09ZDtyZXR1cm4gY30se30pO2EuT1BfR1JPVVBfQ09MT1JTPVt7Y29sb3I6Ikdvb2dsZSBSZWQiLApncm91cHM6Imdlbl9sZWdhY3lfb3BzIGxlZ2FjeV9vcHMgbGVnYWN5X2Zsb2dzX2lucHV0IGxlZ2FjeV9pbWFnZV9pbnB1dCBsZWdhY3lfaW5wdXRfZXhhbXBsZV9pbnB1dCBsZWdhY3lfc2VxdWVuY2VfaW5wdXQgbGVnYWN5X3NldGlfaW5wdXRfaW5wdXQiLnNwbGl0KCIgIil9LHtjb2xvcjoiRGVlcCBPcmFuZ2UiLGdyb3VwczpbImNvbnN0YW50X29wcyJdfSx7Y29sb3I6IkluZGlnbyIsZ3JvdXBzOlsic3RhdGVfb3BzIl19LHtjb2xvcjoiUHVycGxlIixncm91cHM6WyJubl9vcHMiLCJubiJdfSx7Y29sb3I6Ikdvb2dsZSBHcmVlbiIsZ3JvdXBzOlsibWF0aF9vcHMiXX0se2NvbG9yOiJMaW1lIixncm91cHM6WyJhcnJheV9vcHMiXX0se2NvbG9yOiJUZWFsIixncm91cHM6WyJjb250cm9sX2Zsb3dfb3BzIiwiZGF0YV9mbG93X29wcyJdfSx7Y29sb3I6IlBpbmsiLGdyb3VwczpbInN1bW1hcnlfb3BzIl19LHtjb2xvcjoiRGVlcCBQaW5rIixncm91cHM6WyJpb19vcHMiXX1dLnJlZHVjZSgoYywKZCk9PntkLmdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uKGYpe2NbZl09ZC5jb2xvcn0pO3JldHVybiBjfSx7fSl9KSh0Znx8KHRmPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29tbW9uL2NvbW1vbi5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtkLk9QX0dSQVBIPSJvcF9ncmFwaCI7ZC5DT05DRVBUVUFMX0dSQVBIPSJjb25jZXB0dWFsX2dyYXBoIjtkLlBST0ZJTEU9InByb2ZpbGUifSkoYy5TZWxlY3Rpb25UeXBlfHwoYy5TZWxlY3Rpb25UeXBlPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoLWNvbW1vbi9jb250ZXh0bWVudS5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXsoZnVuY3Rpb24oZil7ZnVuY3Rpb24gZyhsKXtsZXQgaz0wLG49MDtmb3IoO2wmJjA8PWwub2Zmc2V0TGVmdCYmMDw9bC5vZmZzZXRUb3A7KWsrPWwub2Zmc2V0TGVmdC1sLnNjcm9sbExlZnQsbis9bC5vZmZzZXRUb3AtbC5zY3JvbGxUb3AsbD1sLm9mZnNldFBhcmVudDtyZXR1cm57bGVmdDprLHRvcDpufX1mLmdldE1lbnU9ZnVuY3Rpb24obCxrKXtjb25zdCBuPWwuZ2V0Q29udGV4dE1lbnUoKSxwPWQzLnNlbGVjdChsLmdldENvbnRleHRNZW51KCkpO3JldHVybiBmdW5jdGlvbihxLHIpe2Z1bmN0aW9uIHQoeil7eiYmei5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyhuKXx8KHAuc3R5bGUoImRpc3BsYXkiLCJub25lIiksZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHQse2NhcHR1cmU6ITB9KSl9bGV0IHY9ZDMuZXZlbnQ7Y29uc3QgeT1nKGwpO3Auc3R5bGUoImRpc3BsYXkiLCJibG9jayIpLnN0eWxlKCJsZWZ0IiwKdi5jbGllbnRYLXkubGVmdCsxKyJweCIpLnN0eWxlKCJ0b3AiLHYuY2xpZW50WS15LnRvcCsxKyJweCIpO3YucHJldmVudERlZmF1bHQoKTt2LnN0b3BQcm9wYWdhdGlvbigpO2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0LHtjYXB0dXJlOiEwfSk7cC5odG1sKCIiKTtwLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YShrKS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLHo9Pnt6LmFjdGlvbih0aGlzLHEscik7dCgpfSkuaHRtbChmdW5jdGlvbih6KXtyZXR1cm4gei50aXRsZShxKX0pfX19KShkLmNvbnRleHRtZW51fHwoZC5jb250ZXh0bWVudT17fSkpfSkoYy5zY2VuZXx8KGMuc2NlbmU9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29tbW9uL2VkZ2UuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7KGZ1bmN0aW9uKGYpe2Z1bmN0aW9uIGcoeil7cmV0dXJuIHouditjLkVER0VfS0VZX0RFTElNK3oud31mdW5jdGlvbiBsKHoseCl7eD14LmdldE5vZGVCeU5hbWUoei52KTtpZihudWxsPT14Lm91dHB1dFNoYXBlc3x8Xy5pc0VtcHR5KHgub3V0cHV0U2hhcGVzKSlyZXR1cm4gbnVsbDt6PXgub3V0cHV0U2hhcGVzW3oub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbnVsbD09ej9udWxsOjA9PT16Lmxlbmd0aD8ic2NhbGFyIjp6Lm1hcChDPT4tMT09PUM/Ij8iOkMpLmpvaW4oIlx1MDBkNyIpfWZ1bmN0aW9uIGsoeix4KXtyZXR1cm4geC5lZGdlTGFiZWxGdW5jdGlvbj94LmVkZ2VMYWJlbEZ1bmN0aW9uKHoseCk6MTx6LmJhc2VFZGdlTGlzdC5sZW5ndGg/ei5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6bCh6LmJhc2VFZGdlTGlzdFswXSx4KX1mdW5jdGlvbiBuKHoseCxDKXtjb25zdCBGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhLmdyYXBoLnNjZW5lLlNWR19OQU1FU1BBQ0UsCiJwYXRoIik7Zm9yKGxldCBEPTE7RDx6Lmxlbmd0aDtEKyspaWYoRi5zZXRBdHRyaWJ1dGUoImQiLEMoei5zbGljZSgwLEQpKSksRi5nZXRUb3RhbExlbmd0aCgpPngpcmV0dXJuIEQtMTtyZXR1cm4gei5sZW5ndGgtMX1mdW5jdGlvbiBwKHoseCxDKXt2YXIgRj1kMy5saW5lKCkueChPPT5PLngpLnkoTz0+Ty55KSxEPWQzLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpKS5hdHRyKCJkIixGKHopKSxCPSt4LmF0dHIoIm1hcmtlcldpZHRoIiksST14LmF0dHIoInZpZXdCb3giKS5zcGxpdCgiICIpLm1hcChOdW1iZXIpO0k9SVsyXS1JWzBdO3g9K3guYXR0cigicmVmWCIpO0Q9RC5ub2RlKCk7aWYoQylyZXR1cm4gQio9MS14L0ksQz1ELmdldFBvaW50QXRMZW5ndGgoQiksRj1uKHosQixGKSx6W0YtMV09e3g6Qy54LHk6Qy55fSx6LnNsaWNlKEYtMSk7Qz0xLXgvSTtCPUQuZ2V0VG90YWxMZW5ndGgoKS1CKkM7Qz0KRC5nZXRQb2ludEF0TGVuZ3RoKEIpO0Y9bih6LEIsRik7eltGXT17eDpDLngseTpDLnl9O3JldHVybiB6LnNsaWNlKDAsRisxKX1mdW5jdGlvbiBxKHoseCxDLEYpe0Y9Rnx8ZC5DbGFzcy5FZGdlLkxJTkU7eC5sYWJlbCYmeC5sYWJlbC5zdHJ1Y3R1cmFsJiYoRis9IiAiK2QuQ2xhc3MuRWRnZS5TVFJVQ1RVUkFMKTt4LmxhYmVsJiZ4LmxhYmVsLm1ldGFlZGdlJiZ4LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzJiYoRis9IiAiK2QuQ2xhc3MuRWRnZS5SRUZFUkVOQ0VfRURHRSk7Qy5oYW5kbGVFZGdlU2VsZWN0ZWQmJihGKz0iICIrZC5DbGFzcy5FZGdlLlNFTEVDVEFCTEUpO2xldCBEPSJwYXRoXyIrZyh4KTtpZihDLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbil2YXIgQj1DLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih4LEYpO2Vsc2UgQj0xLG51bGwhPXgubGFiZWwmJm51bGwhPXgubGFiZWwubWV0YWVkZ2UmJihCPXgubGFiZWwubWV0YWVkZ2UudG90YWxTaXplKSwKQj1DLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoQik7Rj16LmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIixEKS5hdHRyKCJjbGFzcyIsRikuc3R5bGUoInN0cm9rZS13aWR0aCIsQisicHgiKTt4LmxhYmVsJiZ4LmxhYmVsLm1ldGFlZGdlJiYoeC5sYWJlbC5tZXRhZWRnZS5udW1SZWZFZGdlcz8oQj1gcmVmZXJlbmNlLWFycm93aGVhZC0ke3koQil9YCxGLnN0eWxlKCJtYXJrZXItc3RhcnQiLGB1cmwoIyR7Qn0pYCkseC5sYWJlbC5zdGFydE1hcmtlcklkPUIpOihCPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHt5KEIpfWAsRi5zdHlsZSgibWFya2VyLWVuZCIsYHVybCgjJHtCfSlgKSx4LmxhYmVsLmVuZE1hcmtlcklkPUIpKTtudWxsIT14LmxhYmVsJiZudWxsIT14LmxhYmVsLm1ldGFlZGdlJiYoeD1rKHgubGFiZWwubWV0YWVkZ2UsQy5yZW5kZXJIaWVyYXJjaHkpLG51bGwhPXgmJnouYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLAoiIyIrRCkuYXR0cigic3RhcnRPZmZzZXQiLCI1MCUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLnRleHQoeCkpfWZ1bmN0aW9uIHIoeix4LEMsRixEKXtGPUMubGFiZWw7bGV0IEI9Ri5hZGpvaW5pbmdNZXRhZWRnZSxJPUYucG9pbnRzOyh7c2hhZG93Um9vdDp6fT16KTtDLmxhYmVsLnN0YXJ0TWFya2VySWQmJihJPXAoSSxkMy5zZWxlY3Qoei5xdWVyeVNlbGVjdG9yKCIjIitDLmxhYmVsLnN0YXJ0TWFya2VySWQpKSwhMCkpO0MubGFiZWwuZW5kTWFya2VySWQmJihJPXAoSSxkMy5zZWxlY3Qoei5xdWVyeVNlbGVjdG9yKCIjIitDLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKTtpZighQilyZXR1cm4gZDMuaW50ZXJwb2xhdGUoRCxmLmludGVycG9sYXRlKEkpKTtsZXQgTz1CLmVkZ2VHcm91cC5ub2RlKCkuZmlyc3RDaGlsZCxQPUYubWV0YWVkZ2UuaW5ib3VuZDtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgSD1PLmdldFBvaW50QXRMZW5ndGgoUD8KTy5nZXRUb3RhbExlbmd0aCgpOjApLm1hdHJpeFRyYW5zZm9ybShPLmdldENUTSgpKS5tYXRyaXhUcmFuc2Zvcm0oeC5nZXRDVE0oKS5pbnZlcnNlKCkpLEs9UD8wOkkubGVuZ3RoLTE7SVtLXS54PUgueDtJW0tdLnk9SC55O3JldHVybiBmLmludGVycG9sYXRlKEkpfX1mdW5jdGlvbiB0KHoseCl7ZDMuc2VsZWN0KHgpLnNlbGVjdCgicGF0aC4iK2QuQ2xhc3MuRWRnZS5MSU5FKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIixmdW5jdGlvbihDLEYsRCl7cmV0dXJuIHIoeix0aGlzLEMsRixEKX0pfWZ1bmN0aW9uIHYoeix4KXt6LmNsYXNzZWQoImZhZGVkIix4LmxhYmVsLmlzRmFkZWRPdXQpO3g9eC5sYWJlbC5tZXRhZWRnZTt6LnNlbGVjdCgicGF0aC4iK2QuQ2xhc3MuRWRnZS5MSU5FKS5jbGFzc2VkKCJjb250cm9sLWRlcCIseCYmIXgubnVtUmVndWxhckVkZ2VzKX1mLk1JTl9FREdFX1dJRFRIPS43NTtmLk1BWF9FREdFX1dJRFRIPTEyO2YuRURHRV9XSURUSF9TSVpFX0JBU0VEX1NDQUxFPQpkMy5zY2FsZVBvdygpLmV4cG9uZW50KC4zKS5kb21haW4oWzEsNUU2XSkucmFuZ2UoW2YuTUlOX0VER0VfV0lEVEgsZi5NQVhfRURHRV9XSURUSF0pLmNsYW1wKCEwKTtsZXQgeT1kMy5zY2FsZVF1YW50aXplKCkuZG9tYWluKFtmLk1JTl9FREdFX1dJRFRILGYuTUFYX0VER0VfV0lEVEhdKS5yYW5nZShbInNtYWxsIiwibWVkaXVtIiwibGFyZ2UiLCJ4bGFyZ2UiXSk7Zi5nZXRFZGdlS2V5PWc7Zi5idWlsZEdyb3VwPWZ1bmN0aW9uKHoseCxDKXtsZXQgRj1bXTtGPV8ucmVkdWNlKHguZWRnZXMoKSwoRCxCKT0+e2xldCBJPXguZWRnZShCKTtELnB1c2goe3Y6Qi52LHc6Qi53LGxhYmVsOkl9KTtyZXR1cm4gRH0sRik7ej1kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoeiwiZyIsZC5DbGFzcy5FZGdlLkNPTlRBSU5FUikuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc30pLmRhdGEoRixnKTt6LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGQuQ2xhc3MuRWRnZS5HUk9VUCkuYXR0cigiZGF0YS1lZGdlIiwKZykuZWFjaChmdW5jdGlvbihEKXtsZXQgQj1kMy5zZWxlY3QodGhpcyk7RC5sYWJlbC5lZGdlR3JvdXA9QjtDLl9lZGdlR3JvdXBJbmRleFtnKEQpXT1CO2lmKEMuaGFuZGxlRWRnZVNlbGVjdGVkKUIub24oImNsaWNrIixJPT57ZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Qy5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOkksZWRnZUdyb3VwOkJ9KX0pO3EoQixELEMpfSkubWVyZ2UoeikuZWFjaChmdW5jdGlvbigpe3QoQyx0aGlzKX0pLmVhY2goZnVuY3Rpb24oRCl7dihkMy5zZWxlY3QodGhpcyksRCxDKX0pO3ouZXhpdCgpLmVhY2goRD0+e2RlbGV0ZSBDLl9lZGdlR3JvdXBJbmRleFtnKEQpXX0pLnJlbW92ZSgpO3JldHVybiB6fTtmLmdldExhYmVsRm9yQmFzZUVkZ2U9bDtmLmdldExhYmVsRm9yRWRnZT1rO2YuYXBwZW5kRWRnZT1xO2YuaW50ZXJwb2xhdGU9ZDMubGluZSgpLmN1cnZlKGQzLmN1cnZlQmFzaXMpLngoej0+ei54KS55KHo9PnoueSl9KShkLmVkZ2V8fChkLmVkZ2U9Cnt9KSl9KShjLnNjZW5lfHwoYy5zY2VuZT17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1jb21tb24vZXh0ZXJucy5qcwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoLWNvbW1vbi9ncmFwaC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpe2Z1bmN0aW9uIGQoSCxLLE0sTCxSKXtyZXR1cm4oTT9NKyIvIjoiIikrKEgrKCJ1bmRlZmluZWQiIT09dHlwZW9mIEwmJiJ1bmRlZmluZWQiIT09dHlwZW9mIFI/IlsiK0wrIi0iK1IrIl0iOiIjIikrSyl9ZnVuY3Rpb24gZihIKXtpZighSClyZXR1cm4gbnVsbDtmb3IobGV0IEs9MDtLPEgubGVuZ3RoO0srKyl7bGV0IHtrZXk6TSx2YWx1ZTpMfT1IW0tdO2lmKCJfb3V0cHV0X3NoYXBlcyI9PT1NKXtpZighTC5saXN0LnNoYXBlKWJyZWFrO2xldCBSPUwubGlzdC5zaGFwZS5tYXAoVT0+VS51bmtub3duX3Jhbms/bnVsbDpudWxsPT1VLmRpbXx8MT09PVUuZGltLmxlbmd0aCYmbnVsbD09VS5kaW1bMF0uc2l6ZT9bXTpVLmRpbS5tYXAoWT0+WS5zaXplKSk7SC5zcGxpY2UoSywxKTtyZXR1cm4gUn19cmV0dXJuIG51bGx9ZnVuY3Rpb24gZyhIKXtpZighSClyZXR1cm4gbnVsbDtmb3IobGV0IEs9MDtLPEgubGVuZ3RoO0srKylpZigiX1hsYUNsdXN0ZXIiPT09CkhbS10ua2V5KXJldHVybiBIW0tdLnZhbHVlLnN8fG51bGw7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbChIKXtsZXQgSz1bXTtfLmVhY2goSCxNPT57bGV0IEw9Il4iPT09TVswXTtMJiYoTT1NLnN1YnN0cmluZygxKSk7bGV0IFI9TSxVPSIwIixZPU0ubWF0Y2goLyguKik6KFx3KzpcZCspJC8pO2lmKFkpUj1ZWzFdLFU9WVsyXTtlbHNlIGlmKFk9TS5tYXRjaCgvKC4qKTooXGQrKSQvKSlSPVlbMV0sVT1ZWzJdOzAhPT1LLmxlbmd0aCYmUj09PUtbSy5sZW5ndGgtMV0ubmFtZXx8Sy5wdXNoKHtuYW1lOlIsb3V0cHV0VGVuc29yS2V5OlUsaXNDb250cm9sRGVwZW5kZW5jeTpMfSl9KTtyZXR1cm4gS31mdW5jdGlvbiBrKEgsSyxNLEwsUixVKXtLIT09TS5uYW1lJiZILmVkZ2VzLnB1c2goe3Y6Syx3Ok0ubmFtZSxvdXRwdXRUZW5zb3JLZXk6TC5vdXRwdXRUZW5zb3JLZXksaXNDb250cm9sRGVwZW5kZW5jeTpMLmlzQ29udHJvbERlcGVuZGVuY3ksaXNSZWZlcmVuY2VFZGdlOiEwPT09Ui5yZWZFZGdlc1tNLm9wKwoiICIrVV19KX1mdW5jdGlvbiBuKEgsSyxNKXtNPU18fHt9O2xldCBMPW5ldyBncmFwaGxpYi5HcmFwaChNKTtMLnNldEdyYXBoKHtuYW1lOkgscmFua2RpcjpNLnJhbmtkaXJ8fCJCVCIsdHlwZTpLfSk7cmV0dXJuIEx9ZnVuY3Rpb24gcChIKXtyZXR1cm4gZnVuY3Rpb24oSyl7Zm9yKGxldCBNPTA7TTxILmxlbmd0aDtNKyspe2xldCBMPW5ldyBSZWdFeHAoSFtNXSk7aWYoInN0cmluZyI9PT10eXBlb2YgSy5vcCYmSy5vcC5tYXRjaChMKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gcShIKXtsZXQgSz1ILnNwbGl0KGMuTkFNRVNQQUNFX0RFTElNKTtyZXR1cm4gSCtjLk5BTUVTUEFDRV9ERUxJTSsiKCIrS1tLLmxlbmd0aC0xXSsiKSJ9ZnVuY3Rpb24gcihILEspe2xldCBNPXt9LEw9e307SC5zb3J0KCk7Zm9yKGxldCBSPTA7UjxILmxlbmd0aC0xOysrUil7bGV0IFU9SFtSXTtfLmVhY2godihVKS5zbGljZSgwLC0xKSxZPT57TFtZXT0hMH0pO2ZvcihsZXQgWT1SKzE7WTxILmxlbmd0aDsrK1kpe2xldCBiYT0KSFtZXTtpZihfLnN0YXJ0c1dpdGgoYmEsVSkpe2lmKGJhLmxlbmd0aD5VLmxlbmd0aCYmYmEuY2hhckF0KFUubGVuZ3RoKT09PWMuTkFNRVNQQUNFX0RFTElNKXtNW1VdPXEoVSk7YnJlYWt9fWVsc2UgYnJlYWt9fV8uZWFjaChLLFI9PntSIGluIEwmJihNW1JdPXEoUikpfSk7cmV0dXJuIE19ZnVuY3Rpb24gdChIKXtsZXQgSz1ILm5vZGVzKCkubWFwKGZ1bmN0aW9uKE0pe3JldHVybiBILm5laWdoYm9ycyhNKS5sZW5ndGh9KTtLLnNvcnQoKTtyZXR1cm4gS31mdW5jdGlvbiB2KEgsSyl7bGV0IE09W10sTD1ILmluZGV4T2YoYy5OQU1FU1BBQ0VfREVMSU0pO2Zvcig7MDw9TDspTS5wdXNoKEguc3Vic3RyaW5nKDAsTCkpLEw9SC5pbmRleE9mKGMuTkFNRVNQQUNFX0RFTElNLEwrMSk7SyYmKEs9S1tIXSkmJk0ucHVzaChLKTtNLnB1c2goSCk7cmV0dXJuIE19Yy5OQU1FU1BBQ0VfREVMSU09Ii8iO2MuUk9PVF9OQU1FPSJfX3Jvb3RfXyI7Yy5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYPQoiX19mdW5jdGlvbl9saWJyYXJ5X18iO2MuTEFSR0VfQVRUUlNfS0VZPSJfdG9vX2xhcmdlX2F0dHJzIjtjLkxJTUlUX0FUVFJfU0laRT0xMDI0O2MuRURHRV9LRVlfREVMSU09Ii0tIjtsZXQgeTsoZnVuY3Rpb24oSCl7SFtILkZVTEw9MF09IkZVTEwiO0hbSC5FTUJFRERFRD0xXT0iRU1CRURERUQiO0hbSC5NRVRBPTJdPSJNRVRBIjtIW0guU0VSSUVTPTNdPSJTRVJJRVMiO0hbSC5DT1JFPTRdPSJDT1JFIjtIW0guU0hBRE9XPTVdPSJTSEFET1ciO0hbSC5CUklER0U9Nl09IkJSSURHRSI7SFtILkVER0U9N109IkVER0UifSkoeT1jLkdyYXBoVHlwZXx8KGMuR3JhcGhUeXBlPXt9KSk7bGV0IHo7KGZ1bmN0aW9uKEgpe0hbSC5NRVRBPTBdPSJNRVRBIjtIW0guT1A9MV09Ik9QIjtIW0guU0VSSUVTPTJdPSJTRVJJRVMiO0hbSC5CUklER0U9M109IkJSSURHRSI7SFtILkVMTElQU0lTPTRdPSJFTExJUFNJUyJ9KSh6PWMuTm9kZVR5cGV8fChjLk5vZGVUeXBlPXt9KSk7bGV0IHg7KGZ1bmN0aW9uKEgpe0hbSC5JTkNMVURFPQowXT0iSU5DTFVERSI7SFtILkVYQ0xVREU9MV09IkVYQ0xVREUiO0hbSC5VTlNQRUNJRklFRD0yXT0iVU5TUEVDSUZJRUQifSkoeD1jLkluY2x1c2lvblR5cGV8fChjLkluY2x1c2lvblR5cGU9e30pKTsoZnVuY3Rpb24oSCl7SFtILkdST1VQPTBdPSJHUk9VUCI7SFtILlVOR1JPVVA9MV09IlVOR1JPVVAifSkoYy5TZXJpZXNHcm91cGluZ1R5cGV8fChjLlNlcmllc0dyb3VwaW5nVHlwZT17fSkpO2NsYXNzIEN7Y29uc3RydWN0b3IoKXt0aGlzLm5vZGVzPXt9O3RoaXMuZWRnZXM9W119fWMuU2xpbUdyYXBoPUM7Y2xhc3MgRntjb25zdHJ1Y3RvcihIKXt0aGlzLnR5cGU9ei5FTExJUFNJUzt0aGlzLmlzR3JvdXBOb2RlPSExO3RoaXMuY2FyZGluYWxpdHk9MTt0aGlzLnN0YXRzPXRoaXMucGFyZW50Tm9kZT1udWxsO3RoaXMuc2V0TnVtTW9yZU5vZGVzKEgpO3RoaXMuaW5jbHVkZT14LlVOU1BFQ0lGSUVEfXNldE51bU1vcmVOb2RlcyhIKXt0aGlzLm51bU1vcmVOb2Rlcz1IO3RoaXMubmFtZT0KIi4uLiAiK0grIiBtb3JlIn19Yy5FbGxpcHNpc05vZGVJbXBsPUY7Y2xhc3MgRHtjb25zdHJ1Y3RvcihIKXt0aGlzLm9wPUgub3A7dGhpcy5uYW1lPUgubmFtZTt0aGlzLmRldmljZT1ILmRldmljZTt0aGlzLmF0dHI9SC5hdHRyO3RoaXMuaW5wdXRzPWwoSC5pbnB1dCk7dGhpcy5vdXRwdXRTaGFwZXM9ZihILmF0dHIpO3RoaXMueGxhQ2x1c3Rlcj1nKEguYXR0cik7dGhpcy5jb21wYXRpYmxlPSExO3RoaXMudHlwZT16Lk9QO3RoaXMuaXNHcm91cE5vZGU9ITE7dGhpcy5jYXJkaW5hbGl0eT0xO3RoaXMuaW5FbWJlZGRpbmdzPVtdO3RoaXMub3V0RW1iZWRkaW5ncz1bXTt0aGlzLnBhcmVudE5vZGU9bnVsbDt0aGlzLmluY2x1ZGU9eC5VTlNQRUNJRklFRDt0aGlzLm93bmluZ1Nlcmllcz1udWxsfX1jLk9wTm9kZUltcGw9RDtjLmNyZWF0ZU1ldGFub2RlPWZ1bmN0aW9uKEgsSz17fSl7cmV0dXJuIG5ldyBJKEgsSyl9O2Muam9pblN0YXRzSW5mb1dpdGhHcmFwaD1mdW5jdGlvbihILEssCk0pe18uZWFjaChILm5vZGVzLEw9PntMLnN0YXRzPW51bGx9KTtfLmVhY2goSy5kZXZfc3RhdHMsTD0+e00mJiFNW0wuZGV2aWNlXXx8Xy5lYWNoKEwubm9kZV9zdGF0cyxSPT57bGV0IFU9Ui5ub2RlX25hbWUgaW4gSC5ub2Rlcz9SLm5vZGVfbmFtZTpxKFIubm9kZV9uYW1lKTtpZihVIGluIEgubm9kZXMpe3ZhciBZPTA7Ui5tZW1vcnkmJl8uZWFjaChSLm1lbW9yeSxtYT0+e21hLnRvdGFsX2J5dGVzJiYoMDxtYS50b3RhbF9ieXRlcz9ZKz1OdW1iZXIobWEudG90YWxfYnl0ZXMpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgIitVKSl9KTt2YXIgYmE9bnVsbDtSLm91dHB1dCYmKGJhPV8ubWFwKFIub3V0cHV0LG1hPT5fLm1hcChtYS50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltLGFhPT5OdW1iZXIoYWEuc2l6ZSkpKSk7SC5ub2Rlc1tVXS5kZXZpY2U9TC5kZXZpY2U7bnVsbD09SC5ub2Rlc1tVXS5zdGF0cyYmKEgubm9kZXNbVV0uc3RhdHM9Cm5ldyBCKGJhKSk7SC5ub2Rlc1tVXS5zdGF0cy5hZGRCeXRlc0FsbG9jYXRpb24oWSk7Ui5hbGxfZW5kX3JlbF9taWNyb3MmJigwPFIuYWxsX2VuZF9yZWxfbWljcm9zP0gubm9kZXNbVV0uc3RhdHMuYWRkRXhlY3V0aW9uVGltZShSLmFsbF9zdGFydF9taWNyb3MsUi5hbGxfc3RhcnRfbWljcm9zK1IuYWxsX2VuZF9yZWxfbWljcm9zKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgcnVudGltZSBmb3IgIitVKSl9fSl9KX07Y2xhc3MgQntjb25zdHJ1Y3RvcihIKXt0aGlzLnRvdGFsQnl0ZXM9MDt0aGlzLm91dHB1dFNpemU9SH1hZGRFeGVjdXRpb25UaW1lKEgsSyl7dGhpcy5zdGFydFRpbWU9bnVsbCE9dGhpcy5zdGFydFRpbWU/TWF0aC5taW4odGhpcy5zdGFydFRpbWUsSCk6SDt0aGlzLmVuZFRpbWU9bnVsbCE9dGhpcy5lbmRUaW1lP01hdGgubWF4KHRoaXMuZW5kVGltZSxLKTpLfWFkZEJ5dGVzQWxsb2NhdGlvbihIKXt0aGlzLnRvdGFsQnl0ZXM9bnVsbCE9dGhpcy50b3RhbEJ5dGVzPwpNYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsSCk6SH1jb21iaW5lKEgpe251bGwhPUgudG90YWxCeXRlcyYmKHRoaXMudG90YWxCeXRlcys9SC50b3RhbEJ5dGVzKTtudWxsIT1ILmdldFRvdGFsTWljcm9zKCkmJnRoaXMuYWRkRXhlY3V0aW9uVGltZShILnN0YXJ0VGltZSxILmVuZFRpbWUpfWdldFRvdGFsTWljcm9zKCl7cmV0dXJuIG51bGw9PXRoaXMuc3RhcnRUaW1lfHxudWxsPT10aGlzLmVuZFRpbWU/bnVsbDp0aGlzLmVuZFRpbWUtdGhpcy5zdGFydFRpbWV9fWMuTm9kZVN0YXRzPUI7Y2xhc3MgSXtjb25zdHJ1Y3RvcihILEs9e30pe3RoaXMubmFtZT1IO3RoaXMudHlwZT16Lk1FVEE7dGhpcy5kZXB0aD0xO3RoaXMuaXNHcm91cE5vZGU9ITA7dGhpcy5jYXJkaW5hbGl0eT0wO3RoaXMubWV0YWdyYXBoPW4oSCx5Lk1FVEEsSyk7dGhpcy5icmlkZ2VncmFwaD1udWxsO3RoaXMub3BIaXN0b2dyYW09e307dGhpcy5kZXZpY2VIaXN0b2dyYW09e307dGhpcy54bGFDbHVzdGVySGlzdG9ncmFtPQp7fTt0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH07dGhpcy5wYXJlbnROb2RlPXRoaXMudGVtcGxhdGVJZD1udWxsO3RoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExO3RoaXMuaW5jbHVkZT14LlVOU1BFQ0lGSUVEO3RoaXMuYXNzb2NpYXRlZEZ1bmN0aW9uPSIifWdldEZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZSh0aGlzLm1ldGFncmFwaC5ub2RlcygpWzBdKX1nZXRSb290T3AoKXtsZXQgSD10aGlzLm5hbWUuc3BsaXQoIi8iKTtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZSh0aGlzLm5hbWUrIi8oIitIW0gubGVuZ3RoLTFdKyIpIil9bGVhdmVzKCl7bGV0IEg9W10sSz1bdGhpc10sTTtmb3IoO0subGVuZ3RoOyl7bGV0IEw9Sy5zaGlmdCgpO0wuaXNHcm91cE5vZGU/KE09TC5tZXRhZ3JhcGgsXy5lYWNoKE0ubm9kZXMoKSxSPT5LLnB1c2goTS5ub2RlKFIpKSkpOkgucHVzaChMLm5hbWUpfXJldHVybiBIfX0KYy5NZXRhbm9kZUltcGw9STtjLmNyZWF0ZU1ldGFlZGdlPWZ1bmN0aW9uKEgsSyl7cmV0dXJuIG5ldyBPKEgsSyl9O2NsYXNzIE97Y29uc3RydWN0b3IoSCxLKXt0aGlzLnY9SDt0aGlzLnc9Szt0aGlzLmJhc2VFZGdlTGlzdD1bXTt0aGlzLmluYm91bmQ9bnVsbDt0aGlzLnRvdGFsU2l6ZT10aGlzLm51bVJlZkVkZ2VzPXRoaXMubnVtQ29udHJvbEVkZ2VzPXRoaXMubnVtUmVndWxhckVkZ2VzPTB9YWRkQmFzZUVkZ2UoSCxLKXt0aGlzLmJhc2VFZGdlTGlzdC5wdXNoKEgpO0guaXNDb250cm9sRGVwZW5kZW5jeT90aGlzLm51bUNvbnRyb2xFZGdlcys9MTp0aGlzLm51bVJlZ3VsYXJFZGdlcys9MTtILmlzUmVmZXJlbmNlRWRnZSYmKHRoaXMubnVtUmVmRWRnZXMrPTEpO3RoaXMudG90YWxTaXplKz1PLmNvbXB1dGVTaXplT2ZFZGdlKEgsSyk7Sy5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoSy5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZShILApLKXtsZXQgTT1LLm5vZGUoSC52KTtpZighTS5vdXRwdXRTaGFwZXMpcmV0dXJuIDE7Sy5oYXNTaGFwZUluZm89ITA7SD1PYmplY3Qua2V5cyhNLm91dHB1dFNoYXBlcykubWFwKEw9Pk0ub3V0cHV0U2hhcGVzW0xdKS5tYXAoTD0+bnVsbD09TD8xOkwucmVkdWNlKChSLFUpPT57LTE9PT1VJiYoVT0xKTtyZXR1cm4gUipVfSwxKSk7cmV0dXJuIF8uc3VtKEgpfX1jLk1ldGFlZGdlSW1wbD1PO2MuY3JlYXRlU2VyaWVzTm9kZT1mdW5jdGlvbihILEssTSxMLFIsVSl7cmV0dXJuIG5ldyBQKEgsSyxNLEwsUixVKX07Yy5nZXRTZXJpZXNOb2RlTmFtZT1kO2NsYXNzIFB7Y29uc3RydWN0b3IoSCxLLE0sTCxSLFUpe3RoaXMubmFtZT1SfHxkKEgsSyxNKTt0aGlzLnR5cGU9ei5TRVJJRVM7dGhpcy5oYXNMb29wPSExO3RoaXMucHJlZml4PUg7dGhpcy5zdWZmaXg9Szt0aGlzLmNsdXN0ZXJJZD1MO3RoaXMuaWRzPVtdO3RoaXMucGFyZW50PU07dGhpcy5pc0dyb3VwTm9kZT0hMDt0aGlzLmNhcmRpbmFsaXR5PQowO3RoaXMubWV0YWdyYXBoPW4oUix5LlNFUklFUyxVKTt0aGlzLnBhcmVudE5vZGU9dGhpcy5icmlkZ2VncmFwaD1udWxsO3RoaXMuZGV2aWNlSGlzdG9ncmFtPXt9O3RoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fTt0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH07dGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITE7dGhpcy5pbmNsdWRlPXguVU5TUEVDSUZJRUR9fWMuRGVmYXVsdEJ1aWxkUGFyYW1zPXtlbmFibGVFbWJlZGRpbmc6ITAsaW5FbWJlZGRpbmdUeXBlczpbIkNvbnN0Il0sb3V0RW1iZWRkaW5nVHlwZXM6WyJeW2EtekEtWl0rU3VtbWFyeSQiXSxyZWZFZGdlczp7IkFzc2lnbiAwIjohMCwiQXNzaWduQWRkIDAiOiEwLCJBc3NpZ25TdWIgMCI6ITAsImFzc2lnbiAwIjohMCwiYXNzaWduX2FkZCAwIjohMCwiYXNzaWduX3N1YiAwIjohMCwiY291bnRfdXBfdG8gMCI6ITAsIlNjYXR0ZXJBZGQgMCI6ITAsIlNjYXR0ZXJTdWIgMCI6ITAsCiJTY2F0dGVyVXBkYXRlIDAiOiEwLCJzY2F0dGVyX2FkZCAwIjohMCwic2NhdHRlcl9zdWIgMCI6ITAsInNjYXR0ZXJfdXBkYXRlIDAiOiEwfX07Yy5idWlsZD1mdW5jdGlvbihILEssTSl7bGV0IEw9e30sUj17fSxVPXt9LFk9cChLLmluRW1iZWRkaW5nVHlwZXMpLGJhPXAoSy5vdXRFbWJlZGRpbmdUeXBlcyksbWE9W10sYWE9SC5ub2RlLGNhPUFycmF5KGFhLmxlbmd0aCk7cmV0dXJuIGEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIk5vcm1hbGl6aW5nIG5hbWVzIiwzMCwoKT0+e2xldCBmYT1BcnJheShhYS5sZW5ndGgpLGRhPTA7Y29uc3QgbGE9RmE9PntsZXQgeGE9bmV3IEQoRmEpO2lmKFkoeGEpKXJldHVybiBtYS5wdXNoKHhhLm5hbWUpLExbeGEubmFtZV09eGE7aWYoYmEoeGEpKXJldHVybiBtYS5wdXNoKHhhLm5hbWUpLFJbeGEubmFtZV09eGEsXy5lYWNoKHhhLmlucHV0cyx5YT0+e3lhPXlhLm5hbWU7VVt5YV09VVt5YV18fFtdO1VbeWFdLnB1c2goeGEpfSkseGE7ZmFbZGFdPQp4YTtjYVtkYV09eGEubmFtZTtkYSsrO3JldHVybiB4YX07Xy5lYWNoKGFhLGxhKTtjb25zdCBaPUZhPT57Y29uc3QgeGE9Yy5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYK0ZhLnNpZ25hdHVyZS5uYW1lO2xhKHtuYW1lOnhhLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSk7aWYoRmEuc2lnbmF0dXJlLmlucHV0X2FyZyl7bGV0IHphPTA7dmFyIHlhPVVhPT57bGEoe25hbWU6eGErYy5OQU1FU1BBQ0VfREVMSU0rVWEubmFtZSxpbnB1dDpbXSxkZXZpY2U6IiIsb3A6ImlucHV0X2FyZyIsYXR0cjpbe2tleToiVCIsdmFsdWU6e3R5cGU6VWEudHlwZX19XX0pLmZ1bmN0aW9uSW5wdXRJbmRleD16YTt6YSsrfTtGYS5zaWduYXR1cmUuaW5wdXRfYXJnLm5hbWU/eWEoRmEuc2lnbmF0dXJlLmlucHV0X2FyZyk6Xy5lYWNoKEZhLnNpZ25hdHVyZS5pbnB1dF9hcmcseWEpfWxldCBCYT0wO2NvbnN0IEdhPXt9O0ZhLnNpZ25hdHVyZS5vdXRwdXRfYXJnJiYoeWE9emE9PntHYVt4YSsKYy5OQU1FU1BBQ0VfREVMSU0remEubmFtZV09QmE7QmErK30sRmEuc2lnbmF0dXJlLm91dHB1dF9hcmcubmFtZT95YShGYS5zaWduYXR1cmUub3V0cHV0X2FyZyk6Xy5lYWNoKEZhLnNpZ25hdHVyZS5vdXRwdXRfYXJnLHlhKSk7Xy5lYWNoKEZhLm5vZGVfZGVmLHphPT57emEubmFtZT14YSsiLyIremEubmFtZTsic3RyaW5nIj09PXR5cGVvZiB6YS5pbnB1dCYmKHphLmlucHV0PVt6YS5pbnB1dF0pO2NvbnN0IFVhPWxhKHphKTtfLmlzTnVtYmVyKEdhW3phLm5hbWVdKSYmKFVhLmZ1bmN0aW9uT3V0cHV0SW5kZXg9R2FbemEubmFtZV0pO18uZWFjaChVYS5pbnB1dHMsWmE9PntaYS5uYW1lPXhhK2MuTkFNRVNQQUNFX0RFTElNK1phLm5hbWV9KX0pfTtILmxpYnJhcnkmJkgubGlicmFyeS5mdW5jdGlvbiYmXy5lYWNoKEgubGlicmFyeS5mdW5jdGlvbixaKTtmYS5zcGxpY2UoZGEpO2NhLnNwbGljZShkYSk7cmV0dXJuIGZhfSxNKS50aGVuKGZhPT5hLmdyYXBoLnV0aWwucnVuQXN5bmNUYXNrKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLAo3MCwoKT0+e2xldCBkYT1yKGNhLG1hKSxsYT1uZXcgQztfLmVhY2goZmEsWj0+e2xldCBGYT1kYVtaLm5hbWVdfHxaLm5hbWU7bGEubm9kZXNbRmFdPVo7Wi5uYW1lIGluIFUmJihaLm91dEVtYmVkZGluZ3M9VVtaLm5hbWVdLF8uZWFjaChaLm91dEVtYmVkZGluZ3MseGE9Pnt4YS5uYW1lPWRhW3hhLm5hbWVdfHx4YS5uYW1lfSkpO1oubmFtZT1GYX0pO18uZWFjaChmYSxaPT57Xy5lYWNoKFouaW5wdXRzLChGYSx4YSk9PntsZXQgeWE9RmEubmFtZTtpZih5YSBpbiBMKXtGYT1MW3lhXTtaLmluRW1iZWRkaW5ncy5wdXNoKEZhKTtmb3IodmFyIEJhIG9mIEZhLmlucHV0cylrKGxhLGRhW0JhLm5hbWVdfHxCYS5uYW1lLFosQmEsSyx4YSl9ZWxzZSBpZih5YSBpbiBSKXtCYT1SW3lhXTtmb3IobGV0IEdhIG9mIEJhLmlucHV0cylrKGxhLGRhW0dhLm5hbWVdfHxHYS5uYW1lLFosRmEsSyx4YSl9ZWxzZSBrKGxhLGRhW3lhXXx8eWEsWixGYSxLLHhhKX0pfSk7Xy5lYWNoKEwsWj0+e1oubmFtZT0KZGFbWi5uYW1lXXx8Wi5uYW1lfSk7cmV0dXJuIGxhfSxNKSl9O2MuY3JlYXRlR3JhcGg9bjtjLmdldFN0cmljdE5hbWU9cTtjLmhhc1NpbWlsYXJEZWdyZWVTZXF1ZW5jZT1mdW5jdGlvbihILEspe0g9dChIKTtLPXQoSyk7Zm9yKGxldCBNPTA7TTxILmxlbmd0aDtNKyspaWYoSFtNXSE9PUtbTV0pcmV0dXJuITE7cmV0dXJuITB9O2MuZ2V0SGllcmFyY2hpY2FsUGF0aD12O2MuZ2V0SW5jbHVkZU5vZGVCdXR0b25TdHJpbmc9ZnVuY3Rpb24oSCl7cmV0dXJuIEg9PT1hLmdyYXBoLkluY2x1c2lvblR5cGUuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn07Yy5nZXRHcm91cFNlcmllc05vZGVCdXR0b25TdHJpbmc9ZnVuY3Rpb24oSCl7cmV0dXJuIEg9PT1hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn07Yy50b2dnbGVOb2RlU2VyaWVzR3JvdXA9CmZ1bmN0aW9uKEgsSyl7SFtLXT1LIGluIEgmJkhbS10hPT1hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5HUk9VUD9hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5HUk9VUDphLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5VTkdST1VQfX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29tbW9uL2hpZXJhcmNoeS5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKHYseSx6LHgpe3k9ej92LmluRWRnZXMoeS5uYW1lKTp2Lm91dEVkZ2VzKHkubmFtZSk7Xy5lYWNoKHksQz0+e0M9di5lZGdlKEMpOyhDLm51bVJlZ3VsYXJFZGdlcz94LnJlZ3VsYXI6eC5jb250cm9sKS5wdXNoKEMpfSl9ZnVuY3Rpb24gZyh2LHkpe2NvbnN0IHo9e307Xy5lYWNoKHkubm9kZXMseD0+e2xldCBDPWMuZ2V0SGllcmFyY2hpY2FsUGF0aCh4Lm5hbWUpLEY9di5yb290O0YuZGVwdGg9TWF0aC5tYXgoQy5sZW5ndGgsRi5kZXB0aCk7elt4Lm9wXXx8KHpbeC5vcF09W10pO3pbeC5vcF0ucHVzaCh4KTtmb3IobGV0IEI9MDtCPEMubGVuZ3RoO0IrKyl7Ri5kZXB0aD1NYXRoLm1heChGLmRlcHRoLEMubGVuZ3RoLUIpO0YuY2FyZGluYWxpdHkrPXguY2FyZGluYWxpdHk7Ri5vcEhpc3RvZ3JhbVt4Lm9wXT0oRi5vcEhpc3RvZ3JhbVt4Lm9wXXx8MCkrMTtudWxsIT14LmRldmljZSYmKEYuZGV2aWNlSGlzdG9ncmFtW3guZGV2aWNlXT0KKEYuZGV2aWNlSGlzdG9ncmFtW3guZGV2aWNlXXx8MCkrMSk7bnVsbCE9eC54bGFDbHVzdGVyJiYoRi54bGFDbHVzdGVySGlzdG9ncmFtW3gueGxhQ2x1c3Rlcl09KEYueGxhQ2x1c3Rlckhpc3RvZ3JhbVt4LnhsYUNsdXN0ZXJdfHwwKSsxKTt4LmNvbXBhdGlibGU/Ri5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KEYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOkYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KEYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzE7Xy5lYWNoKHguaW5FbWJlZGRpbmdzLE89PntPLmNvbXBhdGlibGU/Ri5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KEYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOkYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KEYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fAowKSsxfSk7Xy5lYWNoKHgub3V0RW1iZWRkaW5ncyxPPT57Ty5jb21wYXRpYmxlP0YuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShGLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpGLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShGLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSk7aWYoQj09PUMubGVuZ3RoLTEpYnJlYWs7dmFyIEQ9Q1tCXTtsZXQgST12Lm5vZGUoRCk7SXx8KEk9Yy5jcmVhdGVNZXRhbm9kZShELHYuZ3JhcGhPcHRpb25zKSxJLnBhcmVudE5vZGU9Rix2LnNldE5vZGUoRCxJKSxGLm1ldGFncmFwaC5zZXROb2RlKEQsSSksMD09PUQuaW5kZXhPZihhLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgpJiZGLm5hbWU9PT1hLmdyYXBoLlJPT1RfTkFNRSYmKEQ9RC5zdWJzdHJpbmcoYS5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYLmxlbmd0aCkseltEXXx8Cih6W0RdPVtdKSx2LmxpYnJhcnlGdW5jdGlvbnNbRF09e25vZGU6SSx1c2FnZXM6eltEXX0sSS5hc3NvY2lhdGVkRnVuY3Rpb249RCkpO0Y9SX12LnNldE5vZGUoeC5uYW1lLHgpO3gucGFyZW50Tm9kZT1GO0YubWV0YWdyYXBoLnNldE5vZGUoeC5uYW1lLHgpO18uZWFjaCh4LmluRW1iZWRkaW5ncyxmdW5jdGlvbihCKXt2LnNldE5vZGUoQi5uYW1lLEIpO0IucGFyZW50Tm9kZT14fSk7Xy5lYWNoKHgub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihCKXt2LnNldE5vZGUoQi5uYW1lLEIpO0IucGFyZW50Tm9kZT14fSl9KX1mdW5jdGlvbiBsKHYseSl7bGV0IHo9di5nZXROb2RlTWFwKCkseD1bXSxDPVtdLEY9KEQsQik9PntsZXQgST0wO2Zvcig7RDspQltJKytdPUQubmFtZSxEPUQucGFyZW50Tm9kZTtyZXR1cm4gSS0xfTtfLmVhY2goeS5lZGdlcyxEPT57dmFyIEI9Rih5Lm5vZGVzW0Qudl0seCksST1GKHkubm9kZXNbRC53XSxDKTtpZigtMSE9PUImJi0xIT09SSl7Zm9yKDt4W0JdPT09Q1tJXTspaWYoQi0tLApJLS0sMD5CfHwwPkkpdGhyb3cgRXJyb3IoIk5vIGRpZmZlcmVuY2UgZm91bmQgYmV0d2VlbiBhbmNlc3RvciBwYXRocy4iKTt2YXIgTz16W3hbQisxXV07Qj14W0JdO0k9Q1tJXTt2YXIgUD1PLm1ldGFncmFwaC5lZGdlKEIsSSk7UHx8KFA9Yy5jcmVhdGVNZXRhZWRnZShCLEkpLE8ubWV0YWdyYXBoLnNldEVkZ2UoQixJLFApKTtPLmhhc05vbkNvbnRyb2xFZGdlc3x8RC5pc0NvbnRyb2xEZXBlbmRlbmN5fHwoTy5oYXNOb25Db250cm9sRWRnZXM9ITApO1AuYWRkQmFzZUVkZ2UoRCx2KX19KX1mdW5jdGlvbiBrKHYseSx6LHgsQyxGKXtsZXQgRD12Lm1ldGFncmFwaDtfLmVhY2goRC5ub2RlcygpLEI9PntCPUQubm9kZShCKTtCLnR5cGU9PT1hLmdyYXBoLk5vZGVUeXBlLk1FVEEmJmsoQix5LHoseCxDLEYpfSk7dj1uKEQpO3Y9KEY/cTpwKSh2LEQseS5ncmFwaE9wdGlvbnMpO18uZWFjaCh2LGZ1bmN0aW9uKEIsSSl7bGV0IE89Qi5tZXRhZ3JhcGgubm9kZXMoKTtfLmVhY2goTyxQPT4Ke1A9RC5ub2RlKFApO1Aub3duaW5nU2VyaWVzfHwoUC5vd25pbmdTZXJpZXM9SSl9KTtPLmxlbmd0aDx4JiYhKEIubmFtZSBpbiBDKSYmKENbQi5uYW1lXT1hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5VTkdST1VQKTtCLm5hbWUgaW4gQyYmQ1tCLm5hbWVdPT09YS5ncmFwaC5TZXJpZXNHcm91cGluZ1R5cGUuVU5HUk9VUHx8KHkuc2V0Tm9kZShJLEIpLEQuc2V0Tm9kZShJLEIpLF8uZWFjaChPLFA9PntsZXQgSD1ELm5vZGUoUCk7Qi5tZXRhZ3JhcGguc2V0Tm9kZShQLEgpO0IucGFyZW50Tm9kZT1ILnBhcmVudE5vZGU7Qi5jYXJkaW5hbGl0eSsrO251bGwhPUguZGV2aWNlJiYoQi5kZXZpY2VIaXN0b2dyYW1bSC5kZXZpY2VdPShCLmRldmljZUhpc3RvZ3JhbVtILmRldmljZV18fDApKzEpO251bGwhPUgueGxhQ2x1c3RlciYmKEIueGxhQ2x1c3Rlckhpc3RvZ3JhbVtILnhsYUNsdXN0ZXJdPShCLnhsYUNsdXN0ZXJIaXN0b2dyYW1bSC54bGFDbHVzdGVyXXx8MCkrMSk7SC5jb21wYXRpYmxlPwpCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oQi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6Qi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oQi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMTtfLmVhY2goSC5pbkVtYmVkZGluZ3MsSz0+e0suY29tcGF0aWJsZT9CLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oQi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6Qi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oQi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pO18uZWFjaChILm91dEVtYmVkZGluZ3MsSz0+e0suY29tcGF0aWJsZT9CLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oQi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6Qi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0KKEIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzF9KTtILnBhcmVudE5vZGU9Qjt6W1BdPUk7RC5yZW1vdmVOb2RlKFApfSkpfSl9ZnVuY3Rpb24gbih2KXtyZXR1cm4gXy5yZWR1Y2Uodi5ub2RlcygpLCh5LHopPT57ej12Lm5vZGUoeik7aWYoei50eXBlPT09Yy5Ob2RlVHlwZS5NRVRBKXJldHVybiB5O2xldCB4PXoub3A7eCYmKHlbeF09eVt4XXx8W10seVt4XS5wdXNoKHoubmFtZSkpO3JldHVybiB5fSx7fSl9ZnVuY3Rpb24gcCh2LHkseil7bGV0IHg9e307Xy5lYWNoKHYsZnVuY3Rpb24oQyxGKXtpZighKDE+PUMubGVuZ3RoKSl7dmFyIEQ9e307Xy5lYWNoKEMsZnVuY3Rpb24oQil7dmFyIEk9IioiPT09Qi5jaGFyQXQoQi5sZW5ndGgtMSksTz1CLnNwbGl0KCIvIiksUD1PW08ubGVuZ3RoLTFdO089Ty5zbGljZSgwLE8ubGVuZ3RoLTEpLmpvaW4oIi8iKTt2YXIgSD1QLm1hdGNoKC9eKFxEKilfKFxkKykkLyk7bGV0IEs9IiI7SD8oUD1IWzFdLEg9SFsyXSk6CihQPUk/UC5zdWJzdHIoMCxQLmxlbmd0aC0xKTpQLEg9MCxLPUk/IioiOiIiKTtJPWMuZ2V0U2VyaWVzTm9kZU5hbWUoUCxLLE8pO0RbSV09RFtJXXx8W107Qj1jLmNyZWF0ZVNlcmllc05vZGUoUCxLLE8sK0gsQix6KTtEW0ldLnB1c2goQil9KTtfLmVhY2goRCxmdW5jdGlvbihCKXtpZighKDI+Qi5sZW5ndGgpKXtCLnNvcnQoZnVuY3Rpb24oTyxQKXtyZXR1cm4rTy5jbHVzdGVySWQtK1AuY2x1c3RlcklkfSk7dmFyIEk9W0JbMF1dO2ZvcihsZXQgTz0xO088Qi5sZW5ndGg7TysrKXtsZXQgUD1CW09dO1AuY2x1c3RlcklkPT09SVtJLmxlbmd0aC0xXS5jbHVzdGVySWQrMT9JLnB1c2goUCk6KHIoSSx4LCtGLHkseiksST1bUF0pfXIoSSx4LCtGLHkseil9fSl9fSk7cmV0dXJuIHh9ZnVuY3Rpb24gcSh2LHkseil7bGV0IHg9e307Xy5lYWNoKHYsZnVuY3Rpb24oQyxGKXtpZighKDE+PUMubGVuZ3RoKSl7dmFyIEQ9e30sQj17fTtfLmVhY2goQyxmdW5jdGlvbihPKXtsZXQgUD0iKiI9PT0KTy5jaGFyQXQoTy5sZW5ndGgtMSk7dmFyIEg9Ty5zcGxpdCgiLyIpO2xldCBLPUhbSC5sZW5ndGgtMV07SD1ILnNsaWNlKDAsSC5sZW5ndGgtMSkuam9pbigiLyIpO2NvbnN0IE09LyhcZCspL2c7dmFyIEw7bGV0IFIsVSxZLGJhPTA7Zm9yKDtMPU0uZXhlYyhLKTspKytiYSxSPUsuc2xpY2UoMCxMLmluZGV4KSxVPUxbMF0sTD1LLnNsaWNlKEwuaW5kZXgrTFswXS5sZW5ndGgpLFk9Yy5nZXRTZXJpZXNOb2RlTmFtZShSLEwsSCksRFtZXT1EW1ldLERbWV18fChEW1ldPWMuY3JlYXRlU2VyaWVzTm9kZShSLEwsSCwrVSxPLHopKSxEW1ldLmlkcy5wdXNoKFUpLEJbT109QltPXXx8W10sQltPXS5wdXNoKFtZLFVdKTsxPmJhJiYoUj1QP0suc3Vic3RyKDAsSy5sZW5ndGgtMSk6SyxVPTAsTD1QPyIqIjoiIixZPWMuZ2V0U2VyaWVzTm9kZU5hbWUoUixMLEgpLERbWV09RFtZXSxEW1ldfHwoRFtZXT1jLmNyZWF0ZVNlcmllc05vZGUoUixMLEgsK1UsTyx6KSksRFtZXS5pZHMucHVzaChVKSxCW09dPQpCW09dfHxbXSxCW09dLnB1c2goW1ksVV0pKX0pO3ZhciBJPXt9O18uZWFjaChCLGZ1bmN0aW9uKE8sUCl7Ty5zb3J0KGZ1bmN0aW9uKE0sTCl7cmV0dXJuIERbTFswXV0uaWRzLmxlbmd0aC1EW01bMF1dLmlkcy5sZW5ndGh9KTt2YXIgSD1PWzBdWzBdO089T1swXVsxXTtJW0hdPUlbSF18fFtdO2NvbnN0IEs9UC5zcGxpdCgiLyIpO1A9Yy5jcmVhdGVTZXJpZXNOb2RlKERbSF0ucHJlZml4LERbSF0uc3VmZml4LEsuc2xpY2UoMCxLLmxlbmd0aC0xKS5qb2luKCIvIiksK08sUCx6KTtJW0hdLnB1c2goUCl9KTtfLmVhY2goSSxmdW5jdGlvbihPKXtpZighKDI+Ty5sZW5ndGgpKXtPLnNvcnQoZnVuY3Rpb24oSCxLKXtyZXR1cm4rSC5jbHVzdGVySWQtK0suY2x1c3RlcklkfSk7dmFyIFA9W09bMF1dO2ZvcihsZXQgSD0xO0g8Ty5sZW5ndGg7SCsrKXtsZXQgSz1PW0hdO0suY2x1c3RlcklkPT09UFtQLmxlbmd0aC0xXS5jbHVzdGVySWQrMT9QLnB1c2goSyk6KHIoUCx4LCtGLHkseiksUD0KW0tdKX1yKFAseCwrRix5LHopfX0pfX0pO3JldHVybiB4fWZ1bmN0aW9uIHIodix5LHoseCxDKXtpZigxPHYubGVuZ3RoKXtsZXQgRj1jLmdldFNlcmllc05vZGVOYW1lKHZbMF0ucHJlZml4LHZbMF0uc3VmZml4LHZbMF0ucGFyZW50LHZbMF0uY2x1c3RlcklkLHZbdi5sZW5ndGgtMV0uY2x1c3RlcklkKSxEPWMuY3JlYXRlU2VyaWVzTm9kZSh2WzBdLnByZWZpeCx2WzBdLnN1ZmZpeCx2WzBdLnBhcmVudCx6LEYsQyk7Xy5lYWNoKHYsZnVuY3Rpb24oQil7RC5pZHMucHVzaChCLmNsdXN0ZXJJZCk7RC5tZXRhZ3JhcGguc2V0Tm9kZShCLm5hbWUseC5ub2RlKEIubmFtZSkpfSk7eVtGXT1EfX1jbGFzcyB0e2NvbnN0cnVjdG9yKHYpe3RoaXMuaGFzU2hhcGVJbmZvPSExO3RoaXMubWF4TWV0YUVkZ2VTaXplPTE7dGhpcy5ncmFwaE9wdGlvbnM9dnx8e307dGhpcy5ncmFwaE9wdGlvbnMuY29tcG91bmQ9ITA7dGhpcy5yb290PWMuY3JlYXRlTWV0YW5vZGUoYy5ST09UX05BTUUsdGhpcy5ncmFwaE9wdGlvbnMpOwp0aGlzLmxpYnJhcnlGdW5jdGlvbnM9e307dGhpcy54bGFDbHVzdGVycz10aGlzLmRldmljZXM9dGhpcy50ZW1wbGF0ZXM9bnVsbDt0aGlzLmluZGV4PXt9O3RoaXMuaW5kZXhbYy5ST09UX05BTUVdPXRoaXMucm9vdDt0aGlzLm9yZGVyaW5ncz17fX1nZXROb2RlTWFwKCl7cmV0dXJuIHRoaXMuaW5kZXh9bm9kZSh2KXtyZXR1cm4gdGhpcy5pbmRleFt2XX1zZXROb2RlKHYseSl7dGhpcy5pbmRleFt2XT15fWdldEJyaWRnZWdyYXBoKHYpe3ZhciB5PXRoaXMuaW5kZXhbdl07aWYoIXkpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgaW4gaGllcmFyY2h5OiAiK3YpO2lmKCEoIm1ldGFncmFwaCJpbiB5KSlyZXR1cm4gbnVsbDtpZih5LmJyaWRnZWdyYXBoKXJldHVybiB5LmJyaWRnZWdyYXBoO2xldCB6PXkuYnJpZGdlZ3JhcGg9Yy5jcmVhdGVHcmFwaCgiQlJJREdFR1JBUEgiLGMuR3JhcGhUeXBlLkJSSURHRSx0aGlzLmdyYXBoT3B0aW9ucyk7aWYoISh5LnBhcmVudE5vZGUmJgoibWV0YWdyYXBoImluIHkucGFyZW50Tm9kZSkpcmV0dXJuIHo7dmFyIHg9eS5wYXJlbnROb2RlO3k9eC5tZXRhZ3JhcGg7eD10aGlzLmdldEJyaWRnZWdyYXBoKHgubmFtZSk7Xy5lYWNoKFt5LHhdLEM9PntDLmVkZ2VzKCkuZmlsdGVyKEY9PkYudj09PXZ8fEYudz09PXYpLmZvckVhY2goRj0+e2xldCBEPUYudz09PXYsQj1DLmVkZ2UoRik7Xy5lYWNoKEIuYmFzZUVkZ2VMaXN0LEk9PntsZXQgW08sUF09RD9bSS53LEYudl06W0kudixGLnddO3ZhciBIPXRoaXMuZ2V0Q2hpbGROYW1lKHYsTyk7SD17djpEP1A6SCx3OkQ/SDpQfTtsZXQgSz16LmVkZ2UoSCk7S3x8KEs9Yy5jcmVhdGVNZXRhZWRnZShILnYsSC53KSxLLmluYm91bmQ9RCx6LnNldEVkZ2UoSC52LEgudyxLKSk7Sy5hZGRCYXNlRWRnZShJLHRoaXMpfSl9KX0pO3JldHVybiB6fWdldENoaWxkTmFtZSh2LHkpe2xldCB6PXRoaXMuaW5kZXhbeV07Zm9yKDt6Oyl7aWYoei5wYXJlbnROb2RlJiZ6LnBhcmVudE5vZGUubmFtZT09PQp2KXJldHVybiB6Lm5hbWU7ej16LnBhcmVudE5vZGV9dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGltbWVkaWF0ZSBjaGlsZCBmb3IgZGVzY2VuZGFudDogIit5KTt9Z2V0UHJlZGVjZXNzb3JzKHYpe2xldCB5PXRoaXMuaW5kZXhbdl07aWYoIXkpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3YpO2xldCB6PXRoaXMuZ2V0T25lV2F5RWRnZXMoeSwhMCk7eS5pc0dyb3VwTm9kZXx8Xy5lYWNoKHkuaW5FbWJlZGRpbmdzLHg9PntfLmVhY2goeS5pbnB1dHMsQz0+e2lmKEMubmFtZT09PXgubmFtZSl7bGV0IEY9bmV3IGMuTWV0YWVkZ2VJbXBsKHgubmFtZSx2KTtGLmFkZEJhc2VFZGdlKHtpc0NvbnRyb2xEZXBlbmRlbmN5OkMuaXNDb250cm9sRGVwZW5kZW5jeSxvdXRwdXRUZW5zb3JLZXk6Qy5vdXRwdXRUZW5zb3JLZXksaXNSZWZlcmVuY2VFZGdlOiExLHY6eC5uYW1lLHc6dn0sdGhpcyk7ei5yZWd1bGFyLnB1c2goRil9fSl9KTtyZXR1cm4gen1nZXRTdWNjZXNzb3JzKHYpe2xldCB5PQp0aGlzLmluZGV4W3ZdO2lmKCF5KXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit2KTtsZXQgej10aGlzLmdldE9uZVdheUVkZ2VzKHksITEpO3kuaXNHcm91cE5vZGV8fF8uZWFjaCh5Lm91dEVtYmVkZGluZ3MseD0+e18uZWFjaCh4LmlucHV0cyxDPT57aWYoQy5uYW1lPT09dil7bGV0IEY9bmV3IGMuTWV0YWVkZ2VJbXBsKHYseC5uYW1lKTtGLmFkZEJhc2VFZGdlKHtpc0NvbnRyb2xEZXBlbmRlbmN5OkMuaXNDb250cm9sRGVwZW5kZW5jeSxvdXRwdXRUZW5zb3JLZXk6Qy5vdXRwdXRUZW5zb3JLZXksaXNSZWZlcmVuY2VFZGdlOiExLHYsdzp4Lm5hbWV9LHRoaXMpO3oucmVndWxhci5wdXNoKEYpfX0pfSk7cmV0dXJuIHp9Z2V0T25lV2F5RWRnZXModix5KXtsZXQgej17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdi5wYXJlbnROb2RlfHwhdi5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiB6O3ZhciB4PXYucGFyZW50Tm9kZTtsZXQgQz0KeC5tZXRhZ3JhcGg7eD10aGlzLmdldEJyaWRnZWdyYXBoKHgubmFtZSk7ZihDLHYseSx6KTtmKHgsdix5LHopO3JldHVybiB6fWdldFRvcG9sb2dpY2FsT3JkZXJpbmcodil7dmFyIHk9dGhpcy5pbmRleFt2XTtpZigheSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSB3aXRoIG5hbWU6ICIrdik7aWYoIXkuaXNHcm91cE5vZGUpcmV0dXJuIG51bGw7aWYodiBpbiB0aGlzLm9yZGVyaW5ncylyZXR1cm4gdGhpcy5vcmRlcmluZ3Nbdl07bGV0IHo9e30seD17fSxDPXkubWV0YWdyYXBoO18uZWFjaChDLmVkZ2VzKCksRD0+e0MuZWRnZShEKS5udW1SZWd1bGFyRWRnZXMmJihELnYgaW4genx8KHpbRC52XT1bXSkseltELnZdLnB1c2goRC53KSx4W0Qud109ITApfSk7bGV0IEY9Xy5kaWZmZXJlbmNlKF8ua2V5cyh6KSxfLmtleXMoeCkpO3Y9dGhpcy5vcmRlcmluZ3Nbdl09e307Zm9yKHk9MDtGLmxlbmd0aDspe2xldCBEPUYuc2hpZnQoKTt2W0RdPXkrKztfLmVhY2goeltEXSxCPT4KRi5wdXNoKEIpKTtkZWxldGUgeltEXX1yZXR1cm4gdn1nZXRUZW1wbGF0ZUluZGV4KCl7bGV0IHY9ZDMua2V5cyh0aGlzLnRlbXBsYXRlcykseT1kMy5zY2FsZU9yZGluYWwoKS5kb21haW4odikucmFuZ2UoZDMucmFuZ2UoMCx2Lmxlbmd0aCkpO3JldHVybiB6PT55KHopfX1kLkRlZmF1bHRIaWVyYXJjaHlQYXJhbXM9e3ZlcmlmeVRlbXBsYXRlOiEwLHNlcmllc05vZGVNaW5TaXplOjUsc2VyaWVzTWFwOnt9LHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtkLmJ1aWxkPWZ1bmN0aW9uKHYseSx6KXtsZXQgeD1uZXcgdCh7cmFua2Rpcjp5LnJhbmtEaXJlY3Rpb259KSxDPXt9O3JldHVybiBhLmdyYXBoLnV0aWwucnVuQXN5bmNUYXNrKCJBZGRpbmcgbm9kZXMiLDIwLCgpPT57bGV0IEY9e30sRD17fTtfLmVhY2godi5ub2RlcyxCPT57Qi5kZXZpY2UmJihGW0IuZGV2aWNlXT0hMCk7Qi54bGFDbHVzdGVyJiYoRFtCLnhsYUNsdXN0ZXJdPSEwKX0pOwp4LmRldmljZXM9Xy5rZXlzKEYpO3gueGxhQ2x1c3RlcnM9Xy5rZXlzKEQpO2coeCx2KX0seikudGhlbigoKT0+YS5ncmFwaC51dGlsLnJ1bkFzeW5jVGFzaygiRGV0ZWN0IHNlcmllcyIsMjAsKCk9PnswPHkuc2VyaWVzTm9kZU1pblNpemUmJmsoeC5yb290LHgsQyx5LnNlcmllc05vZGVNaW5TaXplLHkuc2VyaWVzTWFwLHkudXNlR2VuZXJhbGl6ZWRTZXJpZXNQYXR0ZXJucyl9LHopKS50aGVuKCgpPT5hLmdyYXBoLnV0aWwucnVuQXN5bmNUYXNrKCJBZGRpbmcgZWRnZXMiLDMwLCgpPT57bCh4LHYsQyl9LHopKS50aGVuKCgpPT5hLmdyYXBoLnV0aWwucnVuQXN5bmNUYXNrKCJGaW5kaW5nIHNpbWlsYXIgc3ViZ3JhcGhzIiwzMCwoKT0+e3gudGVtcGxhdGVzPWMudGVtcGxhdGUuZGV0ZWN0KHgseS52ZXJpZnlUZW1wbGF0ZSl9LHopKS50aGVuKCgpPT54KX07ZC5qb2luQW5kQWdncmVnYXRlU3RhdHM9ZnVuY3Rpb24odil7bGV0IHk9e30sej17fTtfLmVhY2godi5yb290LmxlYXZlcygpLAp4PT57eD12Lm5vZGUoeCk7bnVsbCE9eC5kZXZpY2UmJih5W3guZGV2aWNlXT0hMCk7bnVsbCE9eC54bGFDbHVzdGVyJiYoelt4LnhsYUNsdXN0ZXJdPSEwKX0pO3YuZGV2aWNlcz1fLmtleXMoeSk7di54bGFDbHVzdGVycz1fLmtleXMoeik7Xy5lYWNoKHYuZ2V0Tm9kZU1hcCgpLHg9Pnt4LmlzR3JvdXBOb2RlJiYoeC5zdGF0cz1uZXcgYy5Ob2RlU3RhdHMobnVsbCkseC5kZXZpY2VIaXN0b2dyYW09e30pfSk7Xy5lYWNoKHYucm9vdC5sZWF2ZXMoKSx4PT57bGV0IEM9eD12Lm5vZGUoeCk7Zm9yKDtudWxsIT1DLnBhcmVudE5vZGU7KXtpZihudWxsIT14LmRldmljZSl7dmFyIEY9Qy5wYXJlbnROb2RlLmRldmljZUhpc3RvZ3JhbTtGW3guZGV2aWNlXT0oRlt4LmRldmljZV18fDApKzF9bnVsbCE9eC54bGFDbHVzdGVyJiYoRj1DLnBhcmVudE5vZGUueGxhQ2x1c3Rlckhpc3RvZ3JhbSxGW3gueGxhQ2x1c3Rlcl09KEZbeC54bGFDbHVzdGVyXXx8MCkrMSk7bnVsbCE9eC5zdGF0cyYmQy5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoeC5zdGF0cyk7CkM9Qy5wYXJlbnROb2RlfX0pfTtkLmdldEluY29tcGF0aWJsZU9wcz1mdW5jdGlvbih2LHkpe2xldCB6PVtdLHg9e307Xy5lYWNoKHYucm9vdC5sZWF2ZXMoKSxDPT57Qz12Lm5vZGUoQyk7aWYoQy50eXBlPT1jLk5vZGVUeXBlLk9QKXtpZighQy5jb21wYXRpYmxlKWlmKEMub3duaW5nU2VyaWVzKWlmKHkmJnkuc2VyaWVzTWFwW0Mub3duaW5nU2VyaWVzXT09PWEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLlVOR1JPVVApei5wdXNoKEMpO2Vsc2V7aWYoIXhbQy5vd25pbmdTZXJpZXNdKXtsZXQgRj12Lm5vZGUoQy5vd25pbmdTZXJpZXMpO0YmJih4W0Mub3duaW5nU2VyaWVzXT1GLHoucHVzaChGKSl9fWVsc2Ugei5wdXNoKEMpO18uZWFjaChDLmluRW1iZWRkaW5ncyxGPT57Ri5jb21wYXRpYmxlfHx6LnB1c2goRil9KTtfLmVhY2goQy5vdXRFbWJlZGRpbmdzLEY9PntGLmNvbXBhdGlibGV8fHoucHVzaChGKX0pfX0pO3JldHVybiB6fX0pKGMuaGllcmFyY2h5fHwoYy5oaWVyYXJjaHk9Cnt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoLWNvbW1vbi9sYXlvdXQuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZih4KXt4Lm5vZGUuaXNHcm91cE5vZGUmJmwoeCk7eC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEE/bih4KTp4Lm5vZGUudHlwZT09PWMuTm9kZVR5cGUuU0VSSUVTJiZwKHgpfWZ1bmN0aW9uIGcoeCl7eC5pbmJveFdpZHRoPTA8eC5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2QuUEFSQU1TLmFubm90YXRpb25zLmluYm94V2lkdGg6MDt4Lm91dGJveFdpZHRoPTA8eC5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD9kLlBBUkFNUy5hbm5vdGF0aW9ucy5vdXRib3hXaWR0aDowO3guY29yZUJveC53aWR0aD14LndpZHRoO3guY29yZUJveC5oZWlnaHQ9eC5oZWlnaHQ7eC53aWR0aD1NYXRoLm1heCh4LmNvcmVCb3gud2lkdGgreC5pbmJveFdpZHRoK3gub3V0Ym94V2lkdGgsMyp4LmRpc3BsYXlOYW1lLmxlbmd0aCl9ZnVuY3Rpb24gbCh4KXtsZXQgQz14LmNvcmVHcmFwaC5ub2RlcygpLm1hcChGPT4KeC5jb3JlR3JhcGgubm9kZShGKSkuY29uY2F0KHguaXNvbGF0ZWRJbkV4dHJhY3QseC5pc29sYXRlZE91dEV4dHJhY3QseC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCk7Xy5lYWNoKEMsRj0+e3N3aXRjaChGLm5vZGUudHlwZSl7Y2FzZSBjLk5vZGVUeXBlLk9QOl8uZXh0ZW5kKEYsZC5QQVJBTVMubm9kZVNpemUub3ApO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5CUklER0U6Xy5leHRlbmQoRixkLlBBUkFNUy5ub2RlU2l6ZS5icmlkZ2UpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5NRVRBOkYuZXhwYW5kZWQ/ZihGKTooXy5leHRlbmQoRixkLlBBUkFNUy5ub2RlU2l6ZS5tZXRhKSxGLmhlaWdodD1kLlBBUkFNUy5ub2RlU2l6ZS5tZXRhLmhlaWdodChGLm5vZGUuY2FyZGluYWxpdHkpKTticmVhaztjYXNlIGMuTm9kZVR5cGUuU0VSSUVTOkYuZXhwYW5kZWQ/KF8uZXh0ZW5kKEYsZC5QQVJBTVMubm9kZVNpemUuc2VyaWVzLmV4cGFuZGVkKSxmKEYpKTpfLmV4dGVuZChGLEYubm9kZS5oYXNOb25Db250cm9sRWRnZXM/CmQuUEFSQU1TLm5vZGVTaXplLnNlcmllcy52ZXJ0aWNhbDpkLlBBUkFNUy5ub2RlU2l6ZS5zZXJpZXMuaG9yaXpvbnRhbCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitGLm5vZGUudHlwZSk7fUYuZXhwYW5kZWR8fGcoRik7cShGKX0pfWZ1bmN0aW9uIGsoeCxDKXtfLmV4dGVuZCh4LmdyYXBoKCkse25vZGVzZXA6Qy5ub2RlU2VwLHJhbmtzZXA6Qy5yYW5rU2VwLGVkZ2VzZXA6Qy5lZGdlU2VwfSk7bGV0IEY9W10sRD1bXTtfLmVhY2goeC5ub2RlcygpLEg9Pnt4Lm5vZGUoSCkubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5CUklER0U/Ri5wdXNoKEgpOkQucHVzaChIKX0pO2lmKCFELmxlbmd0aClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07ZGFncmUubGF5b3V0KHgpO2xldCBCPUluZmluaXR5LEk9SW5maW5pdHksTz0tSW5maW5pdHksUD0tSW5maW5pdHk7Xy5lYWNoKEQsSD0+e0g9eC5ub2RlKEgpO3ZhciBLPS41Kkgud2lkdGgsTT1ILngtCks7Sz1ILngrSztCPU08Qj9NOkI7Tz1LPk8/SzpPO0s9LjUqSC5oZWlnaHQ7TT1ILnktSztIPUgueStLO0k9TTxJP006STtQPUg+UD9IOlB9KTtfLmVhY2goeC5lZGdlcygpLEg9PntIPXguZWRnZShIKTtpZighSC5zdHJ1Y3R1cmFsKXt2YXIgSz14Lm5vZGUoSC5tZXRhZWRnZS52KSxNPXgubm9kZShILm1ldGFlZGdlLncpO2lmKDM9PT1ILnBvaW50cy5sZW5ndGgmJnkoSC5wb2ludHMpKXtpZihudWxsIT1LKXt2YXIgTD1LLmV4cGFuZGVkP0sueDp0KEspO0gucG9pbnRzWzBdLng9TH1udWxsIT1NJiYoTD1NLmV4cGFuZGVkP00ueDp0KE0pLEgucG9pbnRzWzJdLng9TCk7SC5wb2ludHM9W0gucG9pbnRzWzBdLEgucG9pbnRzWzFdXX1MPUgucG9pbnRzW0gucG9pbnRzLmxlbmd0aC0yXTtudWxsIT1NJiYoSC5wb2ludHNbSC5wb2ludHMubGVuZ3RoLTFdPXooTCxNKSk7TT1ILnBvaW50c1sxXTtudWxsIT1LJiYoSC5wb2ludHNbMF09eihNLEspKTtfLmVhY2goSC5wb2ludHMsUj0+e0I9Ui54PApCP1IueDpCO089Ui54Pk8/Ui54Ok87ST1SLnk8ST9SLnk6STtQPVIueT5QP1IueTpQfSl9fSk7Xy5lYWNoKHgubm9kZXMoKSxIPT57SD14Lm5vZGUoSCk7SC54LT1CO0gueS09SX0pO18uZWFjaCh4LmVkZ2VzKCksSD0+e18uZWFjaCh4LmVkZ2UoSCkucG9pbnRzLEs9PntLLngtPUI7Sy55LT1JfSl9KTtyZXR1cm57d2lkdGg6Ty1CLGhlaWdodDpQLUl9fWZ1bmN0aW9uIG4oeCl7bGV0IEM9ZC5QQVJBTVMuc3Vic2NlbmUubWV0YTtfLmV4dGVuZCh4LEMpO18uZXh0ZW5kKHguY29yZUJveCxrKHguY29yZUdyYXBoLGQuUEFSQU1TLmdyYXBoLm1ldGEpKTt2YXIgRj14Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD9fLm1heCh4Lmlzb2xhdGVkSW5FeHRyYWN0LEI9PkIud2lkdGgpLndpZHRoOm51bGw7eC5pbkV4dHJhY3RCb3gud2lkdGg9bnVsbCE9Rj9GOjA7eC5pbkV4dHJhY3RCb3guaGVpZ2h0PV8ucmVkdWNlKHguaXNvbGF0ZWRJbkV4dHJhY3QsKEIsSSxPKT0+e089MDxPP0MuZXh0cmFjdFlPZmZzZXQ6CjA7SS54PTA7SS55PUIrTytJLmhlaWdodC8yO3JldHVybiBCK08rSS5oZWlnaHR9LDApO0Y9eC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP18ubWF4KHguaXNvbGF0ZWRPdXRFeHRyYWN0LEI9PkIud2lkdGgpLndpZHRoOm51bGw7eC5vdXRFeHRyYWN0Qm94LndpZHRoPW51bGwhPUY/RjowO3gub3V0RXh0cmFjdEJveC5oZWlnaHQ9Xy5yZWR1Y2UoeC5pc29sYXRlZE91dEV4dHJhY3QsKEIsSSxPKT0+e089MDxPP0MuZXh0cmFjdFlPZmZzZXQ6MDtJLng9MDtJLnk9QitPK0kuaGVpZ2h0LzI7cmV0dXJuIEIrTytJLmhlaWdodH0sMCk7Rj14LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9fLm1heCh4LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LEI9PkIud2lkdGgpLndpZHRoOm51bGw7eC5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPW51bGwhPUY/RjowO3gubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9Xy5yZWR1Y2UoeC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdCwoQixJLApPKT0+e089MDxPP0MuZXh0cmFjdFlPZmZzZXQ6MDtJLng9MDtJLnk9QitPK0kuaGVpZ2h0LzI7cmV0dXJuIEIrTytJLmhlaWdodH0sMCk7Rj0wOzA8eC5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGgmJkYrKzswPHguaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aCYmRisrOzA8eC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGgmJkYrKzswPHguY29yZUdyYXBoLm5vZGVDb3VudCgpJiZGKys7bGV0IEQ9ZC5QQVJBTVMuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldDtGPTE+PUY/MDpGKkQ7eC5jb3JlQm94LndpZHRoKz1NYXRoLm1heChkLk1JTl9BVVhfV0lEVEgseC5pbkV4dHJhY3RCb3gud2lkdGgreC5vdXRFeHRyYWN0Qm94LndpZHRoKStGK3gubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aCtGO3guY29yZUJveC5oZWlnaHQ9Qy5sYWJlbEhlaWdodCtNYXRoLm1heCh4LmluRXh0cmFjdEJveC5oZWlnaHQseC5jb3JlQm94LmhlaWdodCx4LmxpYnJhcnlGdW5jdGlvbnNCb3guaGVpZ2h0LAp4Lm91dEV4dHJhY3RCb3guaGVpZ2h0KTt4LndpZHRoPXguY29yZUJveC53aWR0aCtDLnBhZGRpbmdMZWZ0K0MucGFkZGluZ1JpZ2h0O3guaGVpZ2h0PXgucGFkZGluZ1RvcCt4LmNvcmVCb3guaGVpZ2h0K3gucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBwKHgpe2xldCBDPXguY29yZUdyYXBoLEY9ZC5QQVJBTVMuc3Vic2NlbmUuc2VyaWVzO18uZXh0ZW5kKHgsRik7Xy5leHRlbmQoeC5jb3JlQm94LGsoeC5jb3JlR3JhcGgsZC5QQVJBTVMuZ3JhcGguc2VyaWVzKSk7Xy5lYWNoKEMubm9kZXMoKSxEPT57Qy5ub2RlKEQpLmV4Y2x1ZGVkPSExfSk7eC53aWR0aD14LmNvcmVCb3gud2lkdGgrRi5wYWRkaW5nTGVmdCtGLnBhZGRpbmdSaWdodDt4LmhlaWdodD14LmNvcmVCb3guaGVpZ2h0K0YucGFkZGluZ1RvcCtGLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gcSh4KXtpZigheC5leHBhbmRlZCl7dmFyIEM9eC5pbkFubm90YXRpb25zLmxpc3QsRj14Lm91dEFubm90YXRpb25zLmxpc3Q7Xy5lYWNoKEMsCks9PnIoSykpO18uZWFjaChGLEs9PnIoSykpO3ZhciBEPWQuUEFSQU1TLmFubm90YXRpb25zLEI9Xy5yZWR1Y2UoQywoSyxNLEwpPT57TD0wPEw/RC55T2Zmc2V0OjA7TS5keD0tKHguY29yZUJveC53aWR0aCtNLndpZHRoKS8yLUQueE9mZnNldDtNLmR5PUsrTCtNLmhlaWdodC8yO3JldHVybiBLK0wrTS5oZWlnaHR9LDApO18uZWFjaChDLEs9PntLLmR5LT1CLzI7Sy5sYWJlbE9mZnNldD1ELmxhYmVsT2Zmc2V0fSk7dmFyIEk9Xy5yZWR1Y2UoRiwoSyxNLEwpPT57TD0wPEw/RC55T2Zmc2V0OjA7TS5keD0oeC5jb3JlQm94LndpZHRoK00ud2lkdGgpLzIrRC54T2Zmc2V0O00uZHk9SytMK00uaGVpZ2h0LzI7cmV0dXJuIEsrTCtNLmhlaWdodH0sMCk7Xy5lYWNoKEYsSz0+e0suZHktPUkvMjtLLmxhYmVsT2Zmc2V0PUQubGFiZWxPZmZzZXR9KTt2YXIgTz1NYXRoLm1pbih4LmhlaWdodC8yLXgucmFkaXVzLEIvMik7Tz0wPk8/MDpPO3ZhciBQPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLApDLmxlbmd0aC0xXSkucmFuZ2UoWy1PLE9dKTtfLmVhY2goQywoSyxNKT0+e0sucG9pbnRzPVt7ZHg6Sy5keCtLLndpZHRoLzIsZHk6Sy5keX0se2R4Oi14LmNvcmVCb3gud2lkdGgvMixkeToxPEMubGVuZ3RoP1AoTSk6MH1dfSk7Tz1NYXRoLm1pbih4LmhlaWdodC8yLXgucmFkaXVzLEkvMik7Tz0wPk8/MDpPO3ZhciBIPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLEYubGVuZ3RoLTFdKS5yYW5nZShbLU8sT10pO18uZWFjaChGLChLLE0pPT57Sy5wb2ludHM9W3tkeDp4LmNvcmVCb3gud2lkdGgvMixkeToxPEYubGVuZ3RoP0goTSk6MH0se2R4OksuZHgtSy53aWR0aC8yLGR5OksuZHl9XX0pO3guaGVpZ2h0PU1hdGgubWF4KHguaGVpZ2h0LEIsSSl9fWZ1bmN0aW9uIHIoeCl7c3dpdGNoKHguYW5ub3RhdGlvblR5cGUpe2Nhc2UgYy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuQ09OU1RBTlQ6Xy5leHRlbmQoeCxkLlBBUkFNUy5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGMucmVuZGVyLkFubm90YXRpb25UeXBlLlNIT1JUQ1VUOmlmKHgubm9kZS50eXBlPT09CmMuTm9kZVR5cGUuT1ApXy5leHRlbmQoeCxkLlBBUkFNUy5zaG9ydGN1dFNpemUub3ApO2Vsc2UgaWYoeC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEpXy5leHRlbmQoeCxkLlBBUkFNUy5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZih4Lm5vZGUudHlwZT09PWMuTm9kZVR5cGUuU0VSSUVTKV8uZXh0ZW5kKHgsZC5QQVJBTVMuc2hvcnRjdXRTaXplLnNlcmllcyk7ZWxzZSB0aHJvdyBFcnJvcigiSW52YWxpZCBub2RlIHR5cGU6ICIreC5ub2RlLnR5cGUpO2JyZWFrO2Nhc2UgYy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuU1VNTUFSWTpfLmV4dGVuZCh4LGQuUEFSQU1TLmNvbnN0YW50LnNpemUpfX1mdW5jdGlvbiB0KHgpe3JldHVybiB4LmV4cGFuZGVkP3gueDp4LngteC53aWR0aC8yKyh4LmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg/eC5pbmJveFdpZHRoOjApK3guY29yZUJveC53aWR0aC8yfWZ1bmN0aW9uIHYoeCxDKXtyZXR1cm4gMTgwKk1hdGguYXRhbigoQy55LXgueSkvKEMueC0KeC54KSkvTWF0aC5QSX1mdW5jdGlvbiB5KHgpe2xldCBDPXYoeFswXSx4WzFdKTtmb3IobGV0IEY9MTtGPHgubGVuZ3RoLTE7RisrKXtsZXQgRD12KHhbRl0seFtGKzFdKTtpZigxPE1hdGguYWJzKEQtQykpcmV0dXJuITE7Qz1EfXJldHVybiEwfWZ1bmN0aW9uIHooeCxDKXtsZXQgRj1DLmV4cGFuZGVkP0MueDp0KEMpLEQ9Qy55O3ZhciBCPXgueC1GO3g9eC55LUQ7bGV0IEk9Qy5leHBhbmRlZD9DLndpZHRoOkMuY29yZUJveC53aWR0aCxPPUMuZXhwYW5kZWQ/Qy5oZWlnaHQ6Qy5jb3JlQm94LmhlaWdodDtNYXRoLmFicyh4KSpJLzI+TWF0aC5hYnMoQikqTy8yPygwPngmJihPPS1PKSxDPTA9PT14PzA6Ty8yKkIveCxCPU8vMik6KDA+QiYmKEk9LUkpLEM9SS8yLEI9MD09PUI/MDpJLzIqeC9CKTtyZXR1cm57eDpGK0MseTpEK0J9fWQuUEFSQU1TPXthbmltYXRpb246e2R1cmF0aW9uOjI1MH0sZ3JhcGg6e21ldGE6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0sc2VyaWVzOntub2RlU2VwOjUsCnJhbmtTZXA6MjUsZWRnZVNlcDo1fSxwYWRkaW5nOntwYWRkaW5nVG9wOjQwLHBhZGRpbmdMZWZ0OjIwfX0sc3Vic2NlbmU6e21ldGE6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MjAsZXh0cmFjdFhPZmZzZXQ6MTUsZXh0cmFjdFlPZmZzZXQ6MjB9LHNlcmllczp7cGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHBhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxsYWJlbEhlaWdodDoxMH19LG5vZGVTaXplOnttZXRhOntyYWRpdXM6NSx3aWR0aDo2MCxtYXhMYWJlbFdpZHRoOjUyLGhlaWdodDpkMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbMSwyMDBdKS5yYW5nZShbMTUsNjBdKS5jbGFtcCghMCksZXhwYW5kQnV0dG9uUmFkaXVzOjN9LG9wOnt3aWR0aDoxNSxoZWlnaHQ6NixyYWRpdXM6MyxsYWJlbE9mZnNldDotOCxtYXhMYWJlbFdpZHRoOjMwfSxzZXJpZXM6e2V4cGFuZGVkOntyYWRpdXM6MTAsCmxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDoxMjB9LGNvbnN0YW50OntzaXplOnt3aWR0aDo0LGhlaWdodDo0fX0sc2VyaWVzOnttYXhTdGFja0NvdW50OjMscGFyYWxsZWxTdGFja09mZnNldFJhdGlvOi4yLHRvd2VyU3RhY2tPZmZzZXRSYXRpbzouNX0sbWluaW1hcDp7c2l6ZToxNTB9fTtkLk1JTl9BVVhfV0lEVEg9CjE0MDtkLmxheW91dFNjZW5lPWY7ZC5jb21wdXRlQ1hQb3NpdGlvbk9mTm9kZVNoYXBlPXR9KShjLmxheW91dHx8KGMubGF5b3V0PXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoLWNvbW1vbi9sb2FkZXIuanMKdmFyIGZwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihhLGMsZCxmKXtyZXR1cm4gbmV3IChkfHwoZD1Qcm9taXNlKSkoZnVuY3Rpb24oZyxsKXtmdW5jdGlvbiBrKHEpe3RyeXtwKGYubmV4dChxKSl9Y2F0Y2gocil7bChyKX19ZnVuY3Rpb24gbihxKXt0cnl7cChmWyJ0aHJvdyJdKHEpKX1jYXRjaChyKXtsKHIpfX1mdW5jdGlvbiBwKHEpe3EuZG9uZT9nKHEudmFsdWUpOihuZXcgZChmdW5jdGlvbihyKXtyKHEudmFsdWUpfSkpLnRoZW4oayxuKX1wKChmPWYuYXBwbHkoYSxjfHxbXSkpLm5leHQoKSl9KX07CihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2QuZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaD1mdW5jdGlvbihmLGcsbCxrPW5ldyBjLm9wLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlcixuPWMuaGllcmFyY2h5LkRlZmF1bHRIaWVyYXJjaHlQYXJhbXMpe2NvbnN0IHA9Yy51dGlsLmdldFN1YnRhc2tUcmFja2VyKGYsMjAsIkdyYXBoIikscT1jLnV0aWwuZ2V0U3VidGFza1RyYWNrZXIoZiw1MCwiTmFtZXNwYWNlIGhpZXJhcmNoeSIpO3JldHVybiBjLnBhcnNlci5mZXRjaEFuZFBhcnNlR3JhcGhEYXRhKGcsbCxjLnV0aWwuZ2V0U3VidGFza1RyYWNrZXIoZiwzMCwiRGF0YSIpKS50aGVuKGZ1bmN0aW9uKHIpe2lmKCFyLm5vZGUpdGhyb3cgRXJyb3IoIlRoZSBncmFwaCBpcyBlbXB0eS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gVGVuc29yRmxvdyBjb3VsZCBub3QgdHJhY2UgYW55IGdyYXBoLiBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzE5NjEgZm9yIG1vcmUgaW5mb3JtYXRpb24uIik7CnJldHVybiBjLmJ1aWxkKHIsYy5EZWZhdWx0QnVpbGRQYXJhbXMscCl9LCgpPT57dGhyb3cgRXJyb3IoIk1hbGZvcm1lZCBHcmFwaERlZi4gVGhpcyBjYW4gc29tZXRpbWVzIGJlIGNhdXNlZCBieSBhIGJhZCBuZXR3b3JrIGNvbm5lY3Rpb24gb3IgZGlmZmljdWx0eSByZWNvbmNpbGluZyBtdWx0aXBsZSBHcmFwaERlZnM7IGZvciB0aGUgbGF0dGVyIGNhc2UsIHBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTkyOS4iKTt9KS50aGVuKHI9PmZwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjLm9wLmNoZWNrT3BzRm9yQ29tcGF0aWJpbGl0eShyLGspO2NvbnN0IHQ9eWllbGQgYy5oaWVyYXJjaHkuYnVpbGQocixuLHEpO3JldHVybntncmFwaDpyLGdyYXBoSGllcmFyY2h5OnR9fSkpLmNhdGNoKHI9PntmLnJlcG9ydEVycm9yKGBHcmFwaCB2aXN1YWxpemF0aW9uIGZhaWxlZC5cblxuJHtyfWAscik7dGhyb3cgcjsKfSl9fSkoYy5sb2FkZXJ8fChjLmxvYWRlcj17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1jb21tb24vbm9kZS5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXsoZnVuY3Rpb24oZil7ZnVuY3Rpb24gZyhhYSxjYSxmYSl7aWYoY2Eubm9kZS5pc0dyb3VwTm9kZSl7aWYoY2EuZXhwYW5kZWQpcmV0dXJuIGQuYnVpbGRHcm91cChhYSxjYSxmYSxkLkNsYXNzLlN1YnNjZW5lLkdST1VQKTtkLnNlbGVjdENoaWxkKGFhLCJnIixkLkNsYXNzLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBsKGFhLGNhKXtsZXQgZmE9Y2EueC1jYS53aWR0aC8yK2NhLnBhZGRpbmdMZWZ0O2NhPWNhLnktY2EuaGVpZ2h0LzIrY2EucGFkZGluZ1RvcDthYT1kLnNlbGVjdENoaWxkKGFhLCJnIixkLkNsYXNzLlN1YnNjZW5lLkdST1VQKTtkLnRyYW5zbGF0ZShhYSxmYSxjYSl9ZnVuY3Rpb24gayhhYSxjYSxmYSl7YWE9ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGFhLCJnIixkLkNsYXNzLk5vZGUuQlVUVE9OX0NPTlRBSU5FUik7ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGFhLCJjaXJjbGUiLApkLkNsYXNzLk5vZGUuQlVUVE9OX0NJUkNMRSk7ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGFhLCJwYXRoIixkLkNsYXNzLk5vZGUuRVhQQU5EX0JVVFRPTikuYXR0cigiZCIsIk0wLC0yLjIgVjIuMiBNLTIuMiwwIEgyLjIiKTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoYWEsInBhdGgiLGQuQ2xhc3MuTm9kZS5DT0xMQVBTRV9CVVRUT04pLmF0dHIoImQiLCJNLTIuMiwwIEgyLjIiKTthYS5vbigiY2xpY2siLGRhPT57ZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ZmEuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpkYS5ub2RlLm5hbWV9KX0pO2QucG9zaXRpb25CdXR0b24oYWEsY2EpfWZ1bmN0aW9uIG4oYWEsY2EsZmEsZGEpe2lmKGRhKWFhLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO2Vsc2V7dmFyIGxhPWQuY29udGV4dG1lbnUuZ2V0TWVudShmYSxwKGNhLm5vZGUsZmEpKTthYS5vbigiZGJsY2xpY2siLFo9PntmYS5maXJlKCJub2RlLXRvZ2dsZS1leHBhbmQiLHtuYW1lOloubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdmVyIiwKWj0+e2ZhLmlzTm9kZUV4cGFuZGVkKFopfHxmYS5maXJlKCJub2RlLWhpZ2hsaWdodCIse25hbWU6Wi5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsWj0+e2ZhLmlzTm9kZUV4cGFuZGVkKFopfHxmYS5maXJlKCJub2RlLXVuaGlnaGxpZ2h0Iix7bmFtZTpaLm5vZGUubmFtZX0pfSkub24oImNsaWNrIixaPT57ZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ZmEuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOloubm9kZS5uYW1lfSl9KS5vbigiY29udGV4dG1lbnUiLChaLEZhKT0+e2ZhLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpaLm5vZGUubmFtZX0pO2xhLmNhbGwoWixGYSl9KX19ZnVuY3Rpb24gcChhYSxjYSl7bGV0IGZhPVt7dGl0bGU6KCk9PmMuZ2V0SW5jbHVkZU5vZGVCdXR0b25TdHJpbmcoYWEuaW5jbHVkZSksYWN0aW9uOigpPT57Y2EuZmlyZSgibm9kZS10b2dnbGUtZXh0cmFjdCIse25hbWU6YWEubmFtZX0pfX1dO2NhLm5vZGVDb250ZXh0TWVudUl0ZW1zJiYoZmE9CmZhLmNvbmNhdChjYS5ub2RlQ29udGV4dE1lbnVJdGVtcykpO3EoYWEpJiZmYS5wdXNoKHt0aXRsZTooKT0+dihhYSksYWN0aW9uOigpPT57Y2EuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnIoYWEpfSl9fSk7cmV0dXJuIGZhfWZ1bmN0aW9uIHEoYWEpe3JldHVybiBudWxsIT09cihhYSl9ZnVuY3Rpb24gcihhYSl7cmV0dXJuIGFhP2FhLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz9hYS5uYW1lOmFhLnR5cGU9PT1jLk5vZGVUeXBlLk9QP2FhLm93bmluZ1NlcmllczpudWxsOm51bGx9ZnVuY3Rpb24gdChhYSl7bGV0IGNhPW51bGw7aWYoIWFhKXJldHVybiBudWxsO2FhLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz9jYT1hYTphYS5wYXJlbnROb2RlJiZhYS5wYXJlbnROb2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUyYmKGNhPWFhLnBhcmVudE5vZGUpO3JldHVybiBjYX1mdW5jdGlvbiB2KGFhKXtyZXR1cm4gYS5ncmFwaC5nZXRHcm91cFNlcmllc05vZGVCdXR0b25TdHJpbmcobnVsbCE9PQp0KGFhKT9hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5HUk9VUDphLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5VTkdST1VQKX1mdW5jdGlvbiB5KGFhLGNhLGZhKXt2YXIgZGE9Y2EuZGlzcGxheU5hbWU7bGV0IGxhPWNhLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQSYmIWNhLmV4cGFuZGVkO2FhPWQuc2VsZWN0T3JDcmVhdGVDaGlsZChhYSwidGV4dCIsZC5DbGFzcy5Ob2RlLkxBQkVMKTtsZXQgWj1hYS5ub2RlKCk7Wi5wYXJlbnROb2RlLmFwcGVuZENoaWxkKFopO2FhLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xhJiYoZGEubGVuZ3RoPmZhLm1heE1ldGFub2RlTGFiZWxMZW5ndGgmJihkYT1kYS5zdWJzdHIoMCxmYS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoLTIpKyIuLi4iKSxmYT14KGZhKSxhYS5hdHRyKCJmb250LXNpemUiLGZhKGRhLmxlbmd0aCkrInB4IikpO2RhPWFhLnRleHQoZGEpO3ooZGEsY2Eubm9kZS50eXBlLGNhKTsKcmV0dXJuIGFhfWZ1bmN0aW9uIHooYWEsY2EsZmEpe2xldCBkYT1hYS5ub2RlKCk7dmFyIGxhPWRhLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO2xldCBaPWRhLnRleHRDb250ZW50LEZhPW51bGw7c3dpdGNoKGNhKXtjYXNlIGMuTm9kZVR5cGUuTUVUQTpmYSYmIWZhLmV4cGFuZGVkJiYoRmE9Yy5sYXlvdXQuUEFSQU1TLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLk9QOkZhPWMubGF5b3V0LlBBUkFNUy5ub2RlU2l6ZS5vcC5tYXhMYWJlbFdpZHRoO2JyZWFrO2Nhc2UgLTE6RmE9Yy5sYXlvdXQuUEFSQU1TLmFubm90YXRpb25zLm1heExhYmVsV2lkdGh9aWYoIShudWxsPT09RmF8fGxhPD1GYSkpe2ZvcihsYT0xO2RhLmdldFN1YlN0cmluZ0xlbmd0aCgwLGxhKTxGYTspbGErKztjYT1kYS50ZXh0Q29udGVudC5zdWJzdHIoMCxsYSk7ZG8gY2E9Y2Euc3Vic3RyKDAsY2EubGVuZ3RoLTEpLGRhLnRleHRDb250ZW50PWNhKyIuLi4iLGxhPWRhLmdldENvbXB1dGVkVGV4dExlbmd0aCgpOwp3aGlsZShsYT5GYSYmMDxjYS5sZW5ndGgpO3JldHVybiBhYS5hcHBlbmQoInRpdGxlIikudGV4dChaKX19ZnVuY3Rpb24geChhYSl7YmF8fChiYT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbYWEubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxhYS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoXSkucmFuZ2UoW2FhLm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSxhYS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpO3JldHVybiBiYX1mdW5jdGlvbiBDKGFhLGNhLGZhLGRhKXtkLnNlbGVjdENoaWxkKGFhLCJ0ZXh0IixkLkNsYXNzLk5vZGUuTEFCRUwpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixjYSkuYXR0cigieSIsZmErZGEpfWZ1bmN0aW9uIEYoYWEsY2EsZmEpe2FhPWQuc2VsZWN0T3JDcmVhdGVDaGlsZChhYSwiZyIsZmEpO3N3aXRjaChjYS5ub2RlLnR5cGUpe2Nhc2UgYy5Ob2RlVHlwZS5PUDpjYT1jYS5ub2RlO2lmKF8uaXNOdW1iZXIoY2EuZnVuY3Rpb25JbnB1dEluZGV4KXx8Cl8uaXNOdW1iZXIoY2EuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2Quc2VsZWN0T3JDcmVhdGVDaGlsZChhYSwicG9seWdvbiIsZC5DbGFzcy5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGFhLCJlbGxpcHNlIixkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKTticmVhaztjYXNlIGMuTm9kZVR5cGUuU0VSSUVTOmZhPSJhbm5vdGF0aW9uIjtjYS5jb3JlR3JhcGgmJihmYT1jYS5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz8idmVydGljYWwiOiJob3Jpem9udGFsIik7bGV0IGRhPVtkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUXTtjYS5pc0ZhZGVkT3V0JiZkYS5wdXNoKCJmYWRlZC1lbGxpcHNlIik7ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGFhLCJ1c2UiLGRhKS5hdHRyKCJ4bGluazpocmVmIiwiI29wLXNlcmllcy0iK2ZhKyItc3RhbXAiKTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoYWEsInJlY3QiLGQuQ2xhc3MuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4IiwKY2EucmFkaXVzKS5hdHRyKCJyeSIsY2EucmFkaXVzKTticmVhaztjYXNlIGMuTm9kZVR5cGUuQlJJREdFOmQuc2VsZWN0T3JDcmVhdGVDaGlsZChhYSwicmVjdCIsZC5DbGFzcy5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLGNhLnJhZGl1cykuYXR0cigicnkiLGNhLnJhZGl1cyk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGFhLCJyZWN0IixkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKS5hdHRyKCJyeCIsY2EucmFkaXVzKS5hdHRyKCJyeSIsY2EucmFkaXVzKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK2NhLm5vZGUudHlwZSk7fXJldHVybiBhYX1mdW5jdGlvbiBEKGFhKXtzd2l0Y2goYWEubm9kZS50eXBlKXtjYXNlIGMuTm9kZVR5cGUuT1A6cmV0dXJuIGQuQ2xhc3MuT1BOT0RFO2Nhc2UgYy5Ob2RlVHlwZS5NRVRBOnJldHVybiBkLkNsYXNzLk1FVEFOT0RFO2Nhc2UgYy5Ob2RlVHlwZS5TRVJJRVM6cmV0dXJuIGQuQ2xhc3MuU0VSSUVTTk9ERTsKY2FzZSBjLk5vZGVUeXBlLkJSSURHRTpyZXR1cm4gZC5DbGFzcy5CUklER0VOT0RFO2Nhc2UgYy5Ob2RlVHlwZS5FTExJUFNJUzpyZXR1cm4gZC5DbGFzcy5FTExJUFNJU05PREV9dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrYWEubm9kZS50eXBlKTt9ZnVuY3Rpb24gQihhYSxjYSl7dmFyIGZhPWQuc2VsZWN0Q2hpbGQoYWEsImciLGQuQ2xhc3MuTm9kZS5TSEFQRSk7bGV0IGRhPWMubGF5b3V0LmNvbXB1dGVDWFBvc2l0aW9uT2ZOb2RlU2hhcGUoY2EpO3N3aXRjaChjYS5ub2RlLnR5cGUpe2Nhc2UgYy5Ob2RlVHlwZS5PUDp7Y29uc3QgbGE9Y2Eubm9kZTtfLmlzTnVtYmVyKGxhLmZ1bmN0aW9uSW5wdXRJbmRleCl8fF8uaXNOdW1iZXIobGEuZnVuY3Rpb25PdXRwdXRJbmRleCk/KGZhPWQuc2VsZWN0Q2hpbGQoZmEsInBvbHlnb24iKSxkLnBvc2l0aW9uVHJpYW5nbGUoZmEsY2EueCxjYS55LGNhLmNvcmVCb3gud2lkdGgsY2EuY29yZUJveC5oZWlnaHQpKTooZmE9CmQuc2VsZWN0Q2hpbGQoZmEsImVsbGlwc2UiKSxkLnBvc2l0aW9uRWxsaXBzZShmYSxkYSxjYS55LGNhLmNvcmVCb3gud2lkdGgsY2EuY29yZUJveC5oZWlnaHQpKTtDKGFhLGRhLGNhLnksY2EubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UgYy5Ob2RlVHlwZS5NRVRBOmZhPWZhLnNlbGVjdEFsbCgicmVjdCIpO2NhLmV4cGFuZGVkPyhkLnBvc2l0aW9uUmVjdChmYSxjYS54LGNhLnksY2Eud2lkdGgsY2EuaGVpZ2h0KSxsKGFhLGNhKSxDKGFhLGRhLGNhLnksLWNhLmhlaWdodC8yK2NhLmxhYmVsSGVpZ2h0LzIpKTooZC5wb3NpdGlvblJlY3QoZmEsZGEsY2EueSxjYS5jb3JlQm94LndpZHRoLGNhLmNvcmVCb3guaGVpZ2h0KSxDKGFhLGRhLGNhLnksMCkpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5TRVJJRVM6ZmE9ZC5zZWxlY3RDaGlsZChmYSwidXNlIik7Y2EuZXhwYW5kZWQ/KGQucG9zaXRpb25SZWN0KGZhLGNhLngsY2EueSxjYS53aWR0aCxjYS5oZWlnaHQpLGwoYWEsY2EpLEMoYWEsZGEsCmNhLnksLWNhLmhlaWdodC8yK2NhLmxhYmVsSGVpZ2h0LzIpKTooZC5wb3NpdGlvblJlY3QoZmEsZGEsY2EueSxjYS5jb3JlQm94LndpZHRoLGNhLmNvcmVCb3guaGVpZ2h0KSxDKGFhLGRhLGNhLnksY2EubGFiZWxPZmZzZXQpKTticmVhaztjYXNlIGMuTm9kZVR5cGUuQlJJREdFOmFhPWQuc2VsZWN0Q2hpbGQoZmEsInJlY3QiKTtkLnBvc2l0aW9uUmVjdChhYSxjYS54LGNhLnksY2Eud2lkdGgsY2EuaGVpZ2h0KTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK2NhLm5vZGUudHlwZSk7fX1mdW5jdGlvbiBJKGFhLGNhLGZhKXtsZXQgZGE9YS5ncmFwaC51dGlsLmVzY2FwZVF1ZXJ5U2VsZWN0b3IoYWEpO2lmKCFmYSlyZXR1cm5gdXJsKCMke2RhfSlgO2ZhPWQzLnNlbGVjdChmYSk7bGV0IGxhPWZhLnNlbGVjdCgiZGVmcyNfZ3JhcGgtZ3JhZGllbnRzIik7bGEuZW1wdHkoKSYmKGxhPWZhLmFwcGVuZCgiZGVmcyIpLmF0dHIoImlkIiwiX2dyYXBoLWdyYWRpZW50cyIpKTsKbGV0IFo9bGEuc2VsZWN0KCJsaW5lYXJHcmFkaWVudCMiK2RhKTtpZihaLmVtcHR5KCkpe1o9bGEuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixhYSk7Wi5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgRmE9MDtfLmVhY2goY2EseGE9PntsZXQgeWE9eGEuY29sb3I7Wi5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLEZhKS5hdHRyKCJzdG9wLWNvbG9yIix5YSk7Wi5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLEZhK3hhLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLHlhKTtGYSs9eGEucHJvcG9ydGlvbn0pfX1mdW5jdGlvbiBPKGFhLGNhLGZhLGRhLGxhKXtsZXQgWj1jLnJlbmRlci5NZXRhbm9kZUNvbG9ycztzd2l0Y2goY2Epe2Nhc2UgbWEuU1RSVUNUVVJFOnJldHVybiBmYS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEE/KGNhPWZhLm5vZGUudGVtcGxhdGVJZCxudWxsPT09Y2E/Wi5VTktOT1dOOlouU1RSVUNUVVJFX1BBTEVUVEUoYWEoY2EpLApkYSkpOmZhLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuU0VSSUVTP2RhP1ouRVhQQU5ERURfQ09MT1I6IndoaXRlIjpmYS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLkJSSURHRT9mYS5zdHJ1Y3R1cmFsPyIjZjBlIjpmYS5ub2RlLmluYm91bmQ/IiMwZWYiOiIjZmUwIjpfLmlzTnVtYmVyKGZhLm5vZGUuZnVuY3Rpb25JbnB1dEluZGV4KT8iIzc5NTU0OCI6Xy5pc051bWJlcihmYS5ub2RlLmZ1bmN0aW9uT3V0cHV0SW5kZXgpPyIjMDA5Njg4Ijoid2hpdGUiO2Nhc2UgbWEuREVWSUNFOnJldHVybiBudWxsPT1mYS5kZXZpY2VDb2xvcnM/Wi5VTktOT1dOOmRhP1ouRVhQQU5ERURfQ09MT1I6SSgiZGV2aWNlLSIrZmEubm9kZS5uYW1lLGZhLmRldmljZUNvbG9ycyxsYSk7Y2FzZSBtYS5YTEFfQ0xVU1RFUjpyZXR1cm4gbnVsbD09ZmEueGxhQ2x1c3RlckNvbG9ycz9aLlVOS05PV046ZGE/Wi5FWFBBTkRFRF9DT0xPUjpJKCJ4bGEtIitmYS5ub2RlLm5hbWUsZmEueGxhQ2x1c3RlckNvbG9ycywKbGEpO2Nhc2UgbWEuQ09NUFVURV9USU1FOnJldHVybiBkYT9aLkVYUEFOREVEX0NPTE9SOmZhLmNvbXB1dGVUaW1lQ29sb3J8fFouVU5LTk9XTjtjYXNlIG1hLk1FTU9SWTpyZXR1cm4gZGE/Wi5FWFBBTkRFRF9DT0xPUjpmYS5tZW1vcnlDb2xvcnx8Wi5VTktOT1dOO2Nhc2UgbWEuT1BfQ09NUEFUSUJJTElUWTpyZXR1cm4gbnVsbD09ZmEuY29tcGF0aWJpbGl0eUNvbG9ycz9aLlVOS05PV046ZGE/Wi5FWFBBTkRFRF9DT0xPUjpJKCJvcC1jb21wYXQtIitmYS5ub2RlLm5hbWUsZmEuY29tcGF0aWJpbGl0eUNvbG9ycyxsYSk7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iik7fX1mdW5jdGlvbiBQKGFhLGNhLGZhLGRhKXtkYT1kYXx8ZC5DbGFzcy5Ob2RlLlNIQVBFO2xldCBsYT1mYS5pc05vZGVTZWxlY3RlZChjYS5ub2RlLm5hbWUpLFo9Y2EuaXNJbkV4dHJhY3R8fGNhLmlzT3V0RXh0cmFjdHx8Y2EuaXNMaWJyYXJ5RnVuY3Rpb24sRmE9CmNhLmV4cGFuZGVkJiZkYSE9PWQuQ2xhc3MuQW5ub3RhdGlvbi5OT0RFLHhhPWNhLmlzRmFkZWRPdXQ7YWEuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGZhLmlzTm9kZUhpZ2hsaWdodGVkKGNhLm5vZGUubmFtZSkpO2FhLmNsYXNzZWQoInNlbGVjdGVkIixsYSk7YWEuY2xhc3NlZCgiZXh0cmFjdCIsWik7YWEuY2xhc3NlZCgiZXhwYW5kZWQiLEZhKTthYS5jbGFzc2VkKCJmYWRlZCIseGEpO2FhPWFhLnNlbGVjdCgiLiIrZGErIiAuIitkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKTtjYT1PKGZhLnRlbXBsYXRlSW5kZXgsbWFbZmEuY29sb3JCeS50b1VwcGVyQ2FzZSgpXSxjYSxGYSxmYS5nZXRHcmFwaFN2Z1Jvb3QoKSk7YWEuc3R5bGUoImZpbGwiLGNhKTthYS5zdHlsZSgic3Ryb2tlIixsYT9udWxsOkgoY2EpKX1mdW5jdGlvbiBIKGFhKXtyZXR1cm4idXJsIj09PWFhLnN1YnN0cmluZygwLDMpP2MucmVuZGVyLk1ldGFub2RlQ29sb3JzLkdSQURJRU5UX09VVExJTkU6ZDMucmdiKGFhKS5kYXJrZXIoKS50b1N0cmluZygpfQpmdW5jdGlvbiBLKGFhLGNhKXtsZXQgZmE9W107YWE9Y2EuZ2V0Tm9kZUJ5TmFtZShhYSk7aWYoYWEgaW5zdGFuY2VvZiBhLmdyYXBoLk9wTm9kZUltcGwpcmV0dXJuW2FhXS5jb25jYXQoYWEuaW5FbWJlZGRpbmdzKTthYT1hYS5tZXRhZ3JhcGgubm9kZXMoKTtfLmVhY2goYWEsZnVuY3Rpb24oZGEpe2ZhPWZhLmNvbmNhdChLKGRhLGNhKSl9KTtyZXR1cm4gZmF9ZnVuY3Rpb24gTShhYSxjYSxmYSxkYSl7aWYoZGFbZmEubmFtZV0pcmV0dXJuIGRhO2RhW2ZhLm5hbWVdPSEwO3ZhciBsYT1mYS5pbnB1dHM7bGV0IFo9WShjYSxmYSk7ZDMuc2VsZWN0KGFhKS5zZWxlY3QoYC5ub2RlW2RhdGEtbmFtZT0iJHtaLm5hbWV9Il1gKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCEwKTtsZXQgRmE9e307Xy5lYWNoKGxhLGZ1bmN0aW9uKEJhKXtCYT1jYS5nZXROb2RlQnlOYW1lKEJhLm5hbWUpO2lmKHZvaWQgMCE9PUJhKXtCYSBpbnN0YW5jZW9mIGMuTWV0YW5vZGVJbXBsJiYoQmE9YS5ncmFwaC5nZXRTdHJpY3ROYW1lKEJhLm5hbWUpLApCYT1jYS5nZXROb2RlQnlOYW1lKEJhKSk7dmFyIEdhPVkoY2EsQmEpLHphPUZhW0dhLm5hbWVdO3phP3phLm9wTm9kZXMucHVzaChCYSk6RmFbR2EubmFtZV09e3Zpc2libGVQYXJlbnQ6R2Esb3BOb2RlczpbQmFdfX19KTtsZXQgeGE9e30seWE9W1pdO3hhW1oubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2ZhPVo7Zm9yKGxhPTE7ZmEubmFtZSE9PWEuZ3JhcGguUk9PVF9OQU1FO2xhKyspZmE9ZmEucGFyZW50Tm9kZSx4YVtmYS5uYW1lXT17dHJhY2VkOiExLGluZGV4OmxhLGNvbm5lY3Rpb25FbmRwb2ludHM6W119LHlhW2xhXT1mYTtfLmZvck93bihGYSxmdW5jdGlvbihCYSl7bGV0IEdhPUJhLnZpc2libGVQYXJlbnQ7Xy5lYWNoKEJhLm9wTm9kZXMsZnVuY3Rpb24oemEpe2RhPU0oYWEsY2EsemEsZGEpfSk7R2EubmFtZSE9PVoubmFtZSYmTChhYSxHYSx4YSx5YSl9KTtyZXR1cm4gZGF9ZnVuY3Rpb24gTChhYSxjYSxmYSxkYSl7dmFyIGxhPQpjYSxaPWNhO2ZvcihjYT1bXTshZmFbbGEubmFtZV07KVoubmFtZSE9PWxhLm5hbWUmJmNhLnB1c2goW1osbGFdKSxaPWxhLGxhPWxhLnBhcmVudE5vZGU7ZmE9ZmFbbGEubmFtZV0uaW5kZXg7bGV0IEZhPWRhW01hdGgubWF4KGZhLTEsMCldLm5hbWU7Wj1sYT1aLm5hbWU7Y29uc3QgeGE9ZDMuc2VsZWN0KGFhKTt4YS5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7Wn0tLSR7RmF9Il1gKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApO18uZWFjaChjYSxmdW5jdGlvbih5YSl7eGEuc2VsZWN0QWxsKGBbZGF0YS1lZGdlPSIke3lhWzBdLm5hbWV9LS0ke0ZhfWArYH5+JHt5YVsxXS5uYW1lfX5+T1VUIl1gKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApfSk7Zm9yKGFhPTE7YWE8ZmE7YWErKyl4YS5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7bGF9fn4ke2RhW2FhXS5uYW1lfWArYH5+SU4tLSR7ZGFbYWEtMV0ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwKITApfWZ1bmN0aW9uIFIoYWEsY2Epe2xldCBmYT17fTtfLmVhY2goY2EsZnVuY3Rpb24oZGEpe2RhPWFhLmdldE5vZGVCeU5hbWUoZGEpO2RhPVkoYWEsZGEpO2ZhW2RhLm5hbWVdPWRhfSk7cmV0dXJuIGZhfWZ1bmN0aW9uIFUoYWEsY2Epe18uZm9yT3duKGNhLGZ1bmN0aW9uKGZhKXtmb3IoO2ZhLm5hbWUhPT1hLmdyYXBoLlJPT1RfTkFNRTspe2NvbnN0IGRhPWQzLnNlbGVjdChhYSkuc2VsZWN0KGAubm9kZVtkYXRhLW5hbWU9IiR7ZmEubmFtZX0iXWApOyFkYS5ub2RlcygpLmxlbmd0aHx8ZGEuY2xhc3NlZCgiaW5wdXQtaGlnaGxpZ2h0Iil8fGRhLmNsYXNzZWQoInNlbGVjdGVkIil8fGRhLmNsYXNzZWQoIm9wIil8fGRhLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApO2ZhPWZhLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gWShhYSxjYSl7bGV0IGZhPSExLGRhPWNhO2Zvcig7IWZhOylpZihjYT1kYSxkYT1jYS5wYXJlbnROb2RlLHZvaWQgMD09PWRhKWZhPSEwO2Vsc2V7bGV0IGxhPQphYS5nZXRSZW5kZXJOb2RlQnlOYW1lKGRhLm5hbWUpO2xhJiYobGEuZXhwYW5kZWR8fGRhIGluc3RhbmNlb2YgYy5PcE5vZGVJbXBsKSYmKGZhPSEwKX1yZXR1cm4gY2F9Zi5idWlsZEdyb3VwPWZ1bmN0aW9uKGFhLGNhLGZhKXthYT1kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoYWEsImciLGQuQ2xhc3MuTm9kZS5DT05UQUlORVIpLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KS5kYXRhKGNhLGRhPT5kYS5ub2RlLm5hbWUrIjoiK2RhLm5vZGUudHlwZSk7YWEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLGRhPT5kYS5ub2RlLm5hbWUpLmVhY2goZnVuY3Rpb24oZGEpe2xldCBsYT1kMy5zZWxlY3QodGhpcyk7ZmEuYWRkTm9kZUdyb3VwKGRhLm5vZGUubmFtZSxsYSl9KS5tZXJnZShhYSkuYXR0cigiY2xhc3MiLGRhPT5kLkNsYXNzLk5vZGUuR1JPVVArIiAiK0QoZGEpKS5lYWNoKGZ1bmN0aW9uKGRhKXtsZXQgbGE9ZDMuc2VsZWN0KHRoaXMpOwp2YXIgWj1kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQobGEsImciLGQuQ2xhc3MuQW5ub3RhdGlvbi5JTkJPWCk7ZC5hbm5vdGF0aW9uLmJ1aWxkR3JvdXAoWixkYS5pbkFubm90YXRpb25zLGRhLGZhKTtaPWQuc2VsZWN0T3JDcmVhdGVDaGlsZChsYSwiZyIsZC5DbGFzcy5Bbm5vdGF0aW9uLk9VVEJPWCk7ZC5hbm5vdGF0aW9uLmJ1aWxkR3JvdXAoWixkYS5vdXRBbm5vdGF0aW9ucyxkYSxmYSk7Wj1GKGxhLGRhLGQuQ2xhc3MuTm9kZS5TSEFQRSk7ZGEubm9kZS5pc0dyb3VwTm9kZSYmayhaLGRhLGZhKTtuKFosZGEsZmEpO2cobGEsZGEsZmEpO1o9eShsYSxkYSxmYSk7bihaLGRhLGZhLGRhLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQSk7UChsYSxkYSxmYSk7QihsYSxkYSl9KTthYS5leGl0KCkuZWFjaChmdW5jdGlvbihkYSl7ZmEucmVtb3ZlTm9kZUdyb3VwKGRhLm5vZGUubmFtZSk7bGV0IGxhPWQzLnNlbGVjdCh0aGlzKTswPGRhLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGgmJmxhLnNlbGVjdCgiLiIrCmQuQ2xhc3MuQW5ub3RhdGlvbi5JTkJPWCkuc2VsZWN0QWxsKCIuIitkLkNsYXNzLkFubm90YXRpb24uR1JPVVApLmVhY2goWj0+e2ZhLnJlbW92ZUFubm90YXRpb25Hcm91cChaLGRhKX0pOzA8ZGEub3V0QW5ub3RhdGlvbnMubGlzdC5sZW5ndGgmJmxhLnNlbGVjdCgiLiIrZC5DbGFzcy5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIitkLkNsYXNzLkFubm90YXRpb24uR1JPVVApLmVhY2goWj0+e2ZhLnJlbW92ZUFubm90YXRpb25Hcm91cChaLGRhKX0pfSkucmVtb3ZlKCk7cmV0dXJuIGFhfTtmLmdldENvbnRleHRNZW51PXA7Zi5jYW5CZUluU2VyaWVzPXE7Zi5nZXRTZXJpZXNOYW1lPXI7Zi5nZXRHcm91cFNldHRpbmdMYWJlbD12O2YuZW5mb3JjZUxhYmVsV2lkdGg9ejtsZXQgYmE9bnVsbDtmLmJ1aWxkU2hhcGU9RjtmLm5vZGVDbGFzcz1EO2xldCBtYTsoZnVuY3Rpb24oYWEpe2FhW2FhLlNUUlVDVFVSRT0wXT0iU1RSVUNUVVJFIjthYVthYS5ERVZJQ0U9MV09IkRFVklDRSI7CmFhW2FhLlhMQV9DTFVTVEVSPTJdPSJYTEFfQ0xVU1RFUiI7YWFbYWEuQ09NUFVURV9USU1FPTNdPSJDT01QVVRFX1RJTUUiO2FhW2FhLk1FTU9SWT00XT0iTUVNT1JZIjthYVthYS5PUF9DT01QQVRJQklMSVRZPTVdPSJPUF9DT01QQVRJQklMSVRZIn0pKG1hPWYuQ29sb3JCeXx8KGYuQ29sb3JCeT17fSkpO2YucmVtb3ZlR3JhZGllbnREZWZpbml0aW9ucz1mdW5jdGlvbihhYSl7ZDMuc2VsZWN0KGFhKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfTtmLmdldEZpbGxGb3JOb2RlPU87Zi5zdHlsaXplPVA7Zi5nZXRTdHJva2VGb3JGaWxsPUg7Zi51cGRhdGVJbnB1dFRyYWNlPWZ1bmN0aW9uKGFhLGNhLGZhLGRhKXtjb25zdCBsYT1kMy5zZWxlY3QoYWEpO2xhLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpOwpsYS5zZWxlY3RBbGwoIi5pbnB1dC1wYXJlbnQiKS5jbGFzc2VkKCJpbnB1dC1wYXJlbnQiLCExKTtsYS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSk7bGEuc2VsZWN0QWxsKCIuaW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoIm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpO2lmKGNhJiZkYSYmZmEpe2ZhPUsoZmEsY2EpO3ZhciBaPXt9O18uZWFjaChmYSxmdW5jdGlvbihGYSl7Wj1NKGFhLGNhLEZhLFopfSk7ZmE9T2JqZWN0LmtleXMoWik7ZmE9UihjYSxmYSk7VShhYSxmYSk7bGEuc2VsZWN0QWxsKCJnLm5vZGU6bm90KC5zZWxlY3RlZCk6bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtcGFyZW50KTpub3QoLmlucHV0LWNoaWxkcmVuKSIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsCiEwKS5lYWNoKGZ1bmN0aW9uKEZhKXtsYS5zZWxlY3RBbGwoYFtkYXRhLW5hbWU9IiR7RmEubm9kZS5uYW1lfSJdYCkuY2xhc3NlZCgibm9uLWlucHV0IiwhMCl9KTtsYS5zZWxlY3RBbGwoImcuZWRnZTpub3QoLmlucHV0LWVkZ2UtaGlnaGxpZ2h0KSIpLmNsYXNzZWQoIm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIsITApfX07Zi5nZXRWaXNpYmxlUGFyZW50PVl9KShkLm5vZGV8fChkLm5vZGU9e30pKX0pKGMuc2NlbmV8fChjLnNjZW5lPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoLWNvbW1vbi9vcC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtjbGFzcyBme2lzTm90VHB1T3AoZyl7cmV0dXJuLTEhPWcudG9Mb3dlckNhc2UoKS5zZWFyY2goImNwdToiKXx8LTEhPWcudG9Mb3dlckNhc2UoKS5zZWFyY2goImdwdToiKT8hMDotMT09Zy50b0xvd2VyQ2FzZSgpLnNlYXJjaCgidHB1Iil9b3BWYWxpZChnKXtyZXR1cm4gMD09Zy5uYW1lLnNlYXJjaChjLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgpfHwhZy5vcHx8Zy5kZXZpY2UmJnRoaXMuaXNOb3RUcHVPcChnLmRldmljZSl8fGcuZGV2aWNlJiYtMSE9Zy5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIik/ITA6Xy5pbmNsdWRlcyhmLldISVRFTElTVCxnLm9wKX19Zi5XSElURUxJU1Q9IkFicyBBY29zIEFjb3NoIEFkZCBBZGROIEFkanVzdENvbnRyYXN0djIgQWRqdXN0SHVlIEFkanVzdFNhdHVyYXRpb24gQWxsIEFuZ2xlIEFueSBBcHByb3hpbWF0ZUVxdWFsIEFyZ01heCBBcmdNaW4gQXNpbiBBc2luaCBBc3NlcnQgQXNzaWduQWRkVmFyaWFibGVPcCBBc3NpZ25TdWJWYXJpYWJsZU9wIEFzc2lnblZhcmlhYmxlT3AgQXRhbiBBdGFuMiBBdGFuaCBBdmdQb29sIEF2Z1Bvb2wzRCBBdmdQb29sM0RHcmFkIEF2Z1Bvb2xHcmFkIEJhdGNoTWF0TXVsIEJhdGNoVG9TcGFjZSBCYXRjaFRvU3BhY2VORCBCaWFzQWRkIEJpYXNBZGRHcmFkIEJpYXNBZGRWMSBCaXRjYXN0IEJpdHdpc2VBbmQgQml0d2lzZU9yIEJpdHdpc2VYb3IgQnJvYWRjYXN0QXJncyBCcm9hZGNhc3RHcmFkaWVudEFyZ3MgQnVja2V0aXplIENhc3QgQ2VpbCBDaGVja051bWVyaWNzIENob2xlc2t5IENsaXBCeVZhbHVlIENvbXBsZXggQ29tcGxleEFicyBDb25jYXQgQ29uY2F0T2Zmc2V0IENvbmNhdFYyIENvbmogQ29uanVnYXRlVHJhbnNwb3NlIENvbnN0IENvbnRyb2xUcmlnZ2VyIENvbnYyRCBDb252MkRCYWNrcHJvcEZpbHRlciBDb252MkRCYWNrcHJvcElucHV0IENvbnYzRCBDb252M0RCYWNrcHJvcEZpbHRlclYyIENvbnYzREJhY2twcm9wSW5wdXRWMiBDb3MgQ29zaCBDcm9zcyBDcm9zc1JlcGxpY2FTdW0gQ3VtcHJvZCBDdW1zdW0gRGVwdGhUb1NwYWNlIERlcHRod2lzZUNvbnYyZE5hdGl2ZSBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0IERpYWcgRGlhZ1BhcnQgRGlnYW1tYSBEaXYgRHluYW1pY1N0aXRjaCBFbHUgRWx1R3JhZCBFbXB0eSBFcXVhbCBFcmYgRXJmYyBFeHAgRXhwYW5kRGltcyBFeHBtMSBFeHRyYWN0SW1hZ2VQYXRjaGVzIEZGVCBGRlQyRCBGRlQzRCBGYWtlUXVhbnRXaXRoTWluTWF4QXJncyBGYWtlUXVhbnRXaXRoTWluTWF4QXJnc0dyYWRpZW50IEZha2VRdWFudFdpdGhNaW5NYXhWYXJzIEZha2VRdWFudFdpdGhNaW5NYXhWYXJzR3JhZGllbnQgRmlsbCBGbG9vciBGbG9vckRpdiBGbG9vck1vZCBGdXNlZEJhdGNoTm9ybSBGdXNlZEJhdGNoTm9ybUdyYWQgRnVzZWRCYXRjaE5vcm1HcmFkVjIgRnVzZWRCYXRjaE5vcm1WMiBHYXRoZXIgR2F0aGVyTmQgR2F0aGVyVjIgR2V0SXRlbSBHcmVhdGVyIEdyZWF0ZXJFcXVhbCBIU1ZUb1JHQiBJRkZUIElGRlQyRCBJRkZUM0QgSVJGRlQgSVJGRlQyRCBJUkZGVDNEIElkZW50aXR5IElkZW50aXR5TiBJZiBJbWFnIEluZmVlZERlcXVldWUgSW5mZWVkRGVxdWV1ZVR1cGxlIElucGxhY2VBZGQgSW5wbGFjZVVwZGF0ZSBJbnYgSW52ZXJ0IEludmVydFBlcm11dGF0aW9uIElzRmluaXRlIElzSW5mIElzTmFuIEwyTG9zcyBMUk4gTFJOR3JhZCBMZWZ0U2hpZnQgTGVzcyBMZXNzRXF1YWwgTGdhbW1hIExpblNwYWNlIExpc3REaWZmIExvZyBMb2cxcCBMb2dTb2Z0bWF4IExvZ2ljYWxBbmQgTG9naWNhbE5vdCBMb2dpY2FsT3IgTWF0TXVsIE1hdHJpeEJhbmRQYXJ0IE1hdHJpeERpYWcgTWF0cml4RGlhZ1BhcnQgTWF0cml4U2V0RGlhZyBNYXRyaXhUcmlhbmd1bGFyU29sdmUgTWF4IE1heFBvb2wgTWF4UG9vbDNEIE1heFBvb2wzREdyYWQgTWF4UG9vbDNER3JhZEdyYWQgTWF4UG9vbEdyYWQgTWF4UG9vbEdyYWRHcmFkIE1heFBvb2xHcmFkR3JhZFYyIE1heFBvb2xHcmFkVjIgTWF4UG9vbFYyIE1heGltdW0gTWVhbiBNaW4gTWluaW11bSBNaXJyb3JQYWQgTW9kIE11bCBNdWx0aW5vbWlhbCBOZWcgTm9PcCBOb25NYXhTdXBwcmVzc2lvblY0IE5vdEVxdWFsIE9uZUhvdCBPbmVzTGlrZSBPdXRmZWVkRW5xdWV1ZSBPdXRmZWVkRW5xdWV1ZVR1cGxlIFBhY2sgUGFkIFBhZFYyIFBhcmFsbGVsRHluYW1pY1N0aXRjaCBQbGFjZWhvbGRlcldpdGhEZWZhdWx0IFBvdyBQcmV2ZW50R3JhZGllbnQgUHJvZCBRciBRdWFudGl6ZUFuZERlcXVhbnRpemVWMiBRdWFudGl6ZUFuZERlcXVhbnRpemVWMyBSRkZUIFJGRlQyRCBSRkZUM0QgUkdCVG9IU1YgUmFuZG9tU2h1ZmZsZSBSYW5kb21TdGFuZGFyZE5vcm1hbCBSYW5kb21Vbmlmb3JtIFJhbmRvbVVuaWZvcm1JbnQgUmFuZ2UgUmFuayBSZWFkVmFyaWFibGVPcCBSZWFsIFJlYWxEaXYgUmVjaXByb2NhbCBSZWNpcHJvY2FsR3JhZCBSZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMgUmVsdSBSZWx1NiBSZWx1NkdyYWQgUmVsdUdyYWQgUmVzaGFwZSBSZXNpemVCaWxpbmVhciBSZXNpemVCaWxpbmVhckdyYWQgUmVzb3VyY2VBcHBseUFkYU1heCBSZXNvdXJjZUFwcGx5QWRhZGVsdGEgUmVzb3VyY2VBcHBseUFkYWdyYWQgUmVzb3VyY2VBcHBseUFkYWdyYWREQSBSZXNvdXJjZUFwcGx5QWRhbSBSZXNvdXJjZUFwcGx5QWRkU2lnbiBSZXNvdXJjZUFwcGx5Q2VudGVyZWRSTVNQcm9wIFJlc291cmNlQXBwbHlGdHJsIFJlc291cmNlQXBwbHlGdHJsVjIgUmVzb3VyY2VBcHBseUdyYWRpZW50RGVzY2VudCBSZXNvdXJjZUFwcGx5TW9tZW50dW0gUmVzb3VyY2VBcHBseVBvd2VyU2lnbiBSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIFJlc291cmNlQXBwbHlQcm94aW1hbEdyYWRpZW50RGVzY2VudCBSZXNvdXJjZUFwcGx5Uk1TUHJvcCBSZXNvdXJjZUdhdGhlciBSZXNvdXJjZVNjYXR0ZXJBZGQgUmVzb3VyY2VTY2F0dGVyRGl2IFJlc291cmNlU2NhdHRlck1heCBSZXNvdXJjZVNjYXR0ZXJNaW4gUmVzb3VyY2VTY2F0dGVyTXVsIFJlc291cmNlU2NhdHRlck5kQWRkIFJlc291cmNlU2NhdHRlck5kVXBkYXRlIFJlc291cmNlU2NhdHRlclN1YiBSZXNvdXJjZVNjYXR0ZXJVcGRhdGUgUmVzb3VyY2VTdHJpZGVkU2xpY2VBc3NpZ24gUmV2ZXJzZSBSZXZlcnNlU2VxdWVuY2UgUmV2ZXJzZVYyIFJpZ2h0U2hpZnQgUmludCBSb3VuZCBSc3FydCBSc3FydEdyYWQgU2NhdHRlck5kIFNlbGVjdCBTZWx1IFNlbHVHcmFkIFNlbmRUUFVFbWJlZGRpbmdHcmFkaWVudHMgU2hhcGUgU2hhcGVOIFNpZ21vaWQgU2lnbW9pZEdyYWQgU2lnbiBTaW4gU2luaCBTaXplIFNsaWNlIFNuYXBzaG90IFNvZnRtYXggU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMgU29mdHBsdXMgU29mdHBsdXNHcmFkIFNvZnRzaWduIFNvZnRzaWduR3JhZCBTcGFjZVRvQmF0Y2ggU3BhY2VUb0JhdGNoTkQgU3BhY2VUb0RlcHRoIFNwYXJzZU1hdE11bCBTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyBTcGFyc2VUb0RlbnNlIFNwbGl0IFNwbGl0ViBTcXJ0IFNxcnRHcmFkIFNxdWFyZSBTcXVhcmVkRGlmZmVyZW5jZSBTcXVlZXplIFN0YWNrQ2xvc2VWMiBTdGFja1BvcFYyIFN0YWNrUHVzaFYyIFN0YWNrVjIgU3RhdGVsZXNzSWYgU3RhdGVsZXNzUmFuZG9tTm9ybWFsIFN0YXRlbGVzc1JhbmRvbVVuaWZvcm0gU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIFN0YXRlbGVzc1doaWxlIFN0b3BHcmFkaWVudCBTdHJpZGVkU2xpY2UgU3RyaWRlZFNsaWNlR3JhZCBTdWIgU3VtIFN5bWJvbGljR3JhZGllbnQgVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMgVGFuIFRhbmggVGFuaEdyYWQgVGVuc29yQXJyYXlDbG9zZVYzIFRlbnNvckFycmF5Q29uY2F0VjMgVGVuc29yQXJyYXlHYXRoZXJWMyBUZW5zb3JBcnJheUdyYWRWMyBUZW5zb3JBcnJheVJlYWRWMyBUZW5zb3JBcnJheVNjYXR0ZXJWMyBUZW5zb3JBcnJheVNpemVWMyBUZW5zb3JBcnJheVNwbGl0VjMgVGVuc29yQXJyYXlWMyBUZW5zb3JBcnJheVdyaXRlVjMgVGlsZSBUb3BLVjIgVHJhbnNwb3NlIFRydW5jYXRlRGl2IFRydW5jYXRlTW9kIFRydW5jYXRlZE5vcm1hbCBVbnBhY2sgVW5zb3J0ZWRTZWdtZW50TWF4IFVuc29ydGVkU2VnbWVudE1pbiBVbnNvcnRlZFNlZ21lbnRQcm9kIFVuc29ydGVkU2VnbWVudFN1bSBWYXJJc0luaXRpYWxpemVkT3AgVmFyaWFibGVTaGFwZSBXaGlsZSBYbGFEeW5hbWljVXBkYXRlU2xpY2UgWGxhSG9zdENvbXB1dGUgWGxhSWYgWGxhUmVjdiBYbGFSZWR1Y2VXaW5kb3cgWGxhU2VuZCBYbGFTb3J0IFhsYVdoaWxlIFplcm9zTGlrZSBFbnRlciBFeGl0IExvb3BDb25kIE1lcmdlIE5leHRJdGVyYXRpb24gU3dpdGNoIF9BcmcgX1BhcmFsbGVsQ29uY2F0VXBkYXRlIF9SZXR2YWwgX1RQVUNvbXBpbGUgX1RQVUV4ZWN1dGUgVFBVQ29tcGlsYXRpb25SZXN1bHQgVFBVUmVwbGljYXRlZElucHV0IFRQVVJlcGxpY2F0ZWRPdXRwdXQgVFBVUmVwbGljYXRlTWV0YWRhdGEgTWVyZ2VWMkNoZWNrcG9pbnRzIFJlc3RvcmVWMiBTYXZlVjIgQWJvcnQgQXNzZXJ0IEFzc2lnbiBQbGFjZWhvbGRlciBQbGFjZWhvbGRlclYyIFNoYXJkZWRGaWxlbmFtZSBTdHJpbmdKb2luIFZhcmlhYmxlIFZhcmlhYmxlVjIgVmFySGFuZGxlT3AgQXVkaW9TdW1tYXJ5IEF1ZGlvU3VtbWFyeVYyIERlYnVnTnVtZXJpY1N1bW1hcnkgSGlzdG9ncmFtU3VtbWFyeSBJbWFnZVN1bW1hcnkgTWVyZ2VTdW1tYXJ5IFNjYWxhclN1bW1hcnkgU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSIuc3BsaXQoIiAiKTsKZC5UcHVDb21wYXRpYmlsaXR5UHJvdmlkZXI9ZjtkLmNoZWNrT3BzRm9yQ29tcGF0aWJpbGl0eT1mdW5jdGlvbihnLGwpe2lmKG51bGw9PT1sKXRocm93IEVycm9yKCJDb21wYXRpYmlsaXR5IHByb3ZpZGVyIHJlcXVpcmVkLCBidXQgZ290OiAiK2wpO18uZWFjaChnLm5vZGVzLGs9PntrLmNvbXBhdGlibGU9bC5vcFZhbGlkKGspO18uZWFjaChrLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPWwub3BWYWxpZChuKX0pO18uZWFjaChrLm91dEVtYmVkZGluZ3Msbj0+e24uY29tcGF0aWJsZT1sLm9wVmFsaWQobil9KX0pfX0pKGMub3B8fChjLm9wPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoLWNvbW1vbi9wYXJzZXIuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZih0KXtpZigidHJ1ZSI9PT10KXJldHVybiEwO2lmKCJmYWxzZSI9PT10KXJldHVybiExO2lmKCciJz09PXRbMF0pcmV0dXJuIHQuc3Vic3RyaW5nKDEsdC5sZW5ndGgtMSk7bGV0IHY9cGFyc2VGbG9hdCh0KTtyZXR1cm4gaXNOYU4odik/dDp2fWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBQcm9taXNlKCh2LHkpPT57ZmV0Y2godCkudGhlbih6PT57ei5vaz96LmFycmF5QnVmZmVyKCkudGhlbih2LHkpOnoudGV4dCgpLnRoZW4oeSx5KX0pfSl9ZnVuY3Rpb24gbCh0LHYseT0xRTYsej0iXG4iKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeCxDKXtmdW5jdGlvbiBGKEQsQixJKXt2YXIgTz1JPj10LmJ5dGVMZW5ndGg7Qj1CLnNwbGl0KHopO0JbMF09RCtCWzBdO2NvbnN0IFA9Tz8iIjpCLnBvcCgpO2ZvcihsZXQgSCBvZiBCKXRyeXt2KEgpfWNhdGNoKEspe0MoSyk7cmV0dXJufU8/eCghMCk6CihEPW5ldyBCbG9iKFt0LnNsaWNlKEksSSt5KV0pLE89bmV3IEZpbGVSZWFkZXIsTy5vbmxvYWQ9ZnVuY3Rpb24oSCl7RihQLEgudGFyZ2V0LnJlc3VsdCxJK3kpfSxPLnJlYWRBc1RleHQoRCkpfUYoIiIsIiIsMCl9KX1mdW5jdGlvbiBrKHQpe3JldHVybiBwKHQscSl9ZnVuY3Rpb24gbih0KXtyZXR1cm4gcCh0LHIpLnRoZW4odj0+di5zdGVwX3N0YXRzKX1mdW5jdGlvbiBwKHQsdil7ZnVuY3Rpb24geShCKXtsZXQgST1CLmluZGV4T2YoIjoiKSxPPUIuc3Vic3RyaW5nKDAsSSkudHJpbSgpO0I9ZihCLnN1YnN0cmluZyhJKzIpLnRyaW0oKSk7cmV0dXJue25hbWU6Tyx2YWx1ZTpCfX1mdW5jdGlvbiB6KEIsSSxPLFApe2xldCBIPUJbSV07bnVsbD09SD9CW0ldPVAuam9pbigiLiIpaW4gdj9bT106TzpBcnJheS5pc0FycmF5KEgpP0gucHVzaChPKTpCW0ldPVtILE9dfWxldCB4PXt9LEM9W10sRj1bXSxEPXg7cmV0dXJuIGwodCxmdW5jdGlvbihCKXtpZihCKXN3aXRjaChCPUIudHJpbSgpLApCW0IubGVuZ3RoLTFdKXtjYXNlICJ7IjpCPUIuc3Vic3RyaW5nKDAsQi5sZW5ndGgtMikudHJpbSgpO2xldCBJPXt9O0MucHVzaChEKTtGLnB1c2goQik7eihELEIsSSxGKTtEPUk7YnJlYWs7Y2FzZSAifSI6RD1DLnBvcCgpO0YucG9wKCk7YnJlYWs7ZGVmYXVsdDpCPXkoQikseihELEIubmFtZSxCLnZhbHVlLEYuY29uY2F0KEIubmFtZSkpfX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geH0pfWQuZmV0Y2hQYlR4dD1nO2QuZmV0Y2hBbmRQYXJzZU1ldGFkYXRhPWZ1bmN0aW9uKHQsdil7cmV0dXJuIGEuZ3JhcGgudXRpbC5ydW5UYXNrKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+bnVsbD09dD9Qcm9taXNlLnJlc29sdmUobnVsbCk6Zyh0KSx2KS50aGVuKHk9PmEuZ3JhcGgudXRpbC5ydW5Bc3luY1Byb21pc2VUYXNrKCJQYXJzaW5nIG1ldGFkYXRhLnBidHh0Iiw2MCwoKT0+bnVsbCE9eT9uKHkpOlByb21pc2UucmVzb2x2ZShudWxsKSx2KSl9O2QuZmV0Y2hBbmRQYXJzZUdyYXBoRGF0YT0KZnVuY3Rpb24odCx2LHkpe3JldHVybiBhLmdyYXBoLnV0aWwucnVuQXN5bmNQcm9taXNlVGFzaygiUmVhZGluZyBncmFwaCBwYnR4dCIsNDAsKCk9PnY/bmV3IFByb21pc2UoZnVuY3Rpb24oeix4KXtsZXQgQz1uZXcgRmlsZVJlYWRlcjtDLm9ubG9hZD0oKT0+eihDLnJlc3VsdCk7Qy5vbmVycm9yPSgpPT54KEMuZXJyb3IpO0MucmVhZEFzQXJyYXlCdWZmZXIodil9KTpnKHQpLHkpLnRoZW4oej0+YS5ncmFwaC51dGlsLnJ1bkFzeW5jUHJvbWlzZVRhc2soIlBhcnNpbmcgZ3JhcGgucGJ0eHQiLDYwLCgpPT5rKHopLHkpKX07ZC5zdHJlYW1QYXJzZT1sO2NvbnN0IHE9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsCiJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5mdW5jIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuaSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5zaGFwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlLmRpbSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnRlbnNvciI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnR5cGUiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUuc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLnRlbnNvci5zdHJpbmdfdmFsIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLnRlbnNvci50ZW5zb3Jfc2hhcGUuZGltIjohMCwKImxpYnJhcnkuZnVuY3Rpb24uc2lnbmF0dXJlLmlucHV0X2FyZyI6ITAsImxpYnJhcnkuZnVuY3Rpb24uc2lnbmF0dXJlLm91dHB1dF9hcmciOiEwLCJsaWJyYXJ5LnZlcnNpb25zIjohMCxub2RlOiEwLCJub2RlLmlucHV0IjohMCwibm9kZS5hdHRyIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuYiI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmYiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mdW5jIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuaSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnMiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnRlbnNvciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnR5cGUiOiEwLCJub2RlLmF0dHIudmFsdWUuc2hhcGUuZGltIjohMCwibm9kZS5hdHRyLnZhbHVlLnRlbnNvci5zdHJpbmdfdmFsIjohMCwibm9kZS5hdHRyLnZhbHVlLnRlbnNvci50ZW5zb3Jfc2hhcGUuZGltIjohMH0sCnI9eyJzdGVwX3N0YXRzLmRldl9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dCI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMubWVtb3J5IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5vdXRwdXQudGVuc29yX2Rlc2NyaXB0aW9uLnNoYXBlLmRpbSI6ITB9O2QucGFyc2VHcmFwaFBiVHh0PWs7ZC5wYXJzZVN0YXRzUGJUeHQ9bn0pKGMucGFyc2VyfHwoYy5wYXJzZXI9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29tbW9uL3Byb3RvLmpzCgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29tbW9uL3JlbmRlci5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKEwsUixVLFksYmEpe1I9bmV3IEkoUixVLFksYmEsITApO0wuaW5Bbm5vdGF0aW9ucy5wdXNoKFIpfWZ1bmN0aW9uIGcoTCxSLFUsWSxiYSl7Uj1uZXcgSShSLFUsWSxiYSwhMSk7TC5vdXRBbm5vdGF0aW9ucy5wdXNoKFIpfWZ1bmN0aW9uIGwoTCxSKXtfLmVhY2goTC5ub2RlcygpLFU9PntVPUwubm9kZShVKTtVLmV4cGFuZGVkPTE8UjtpZigwPFIpc3dpdGNoKFUubm9kZS50eXBlKXtjYXNlIGMuTm9kZVR5cGUuTUVUQTpjYXNlIGMuTm9kZVR5cGUuU0VSSUVTOmsoVSxSLTEpfX0pfWZ1bmN0aW9uIGsoTCxSKXtMLmNvcmVHcmFwaCYmbChMLmNvcmVHcmFwaCxSKX1mdW5jdGlvbiBuKEwsUixVKXtsZXQgWT1MLm5vZGUoUiksYmE9TC5ub2RlKFUpLG1hPUwuZWRnZShSLFUpO2lmKFkubm9kZS5pbmNsdWRlIT09Yy5JbmNsdXNpb25UeXBlLklOQ0xVREUmJmJhLm5vZGUuaW5jbHVkZSE9PWMuSW5jbHVzaW9uVHlwZS5JTkNMVURFfHwKWS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuRVhDTFVERXx8YmEubm9kZS5pbmNsdWRlPT09Yy5JbmNsdXNpb25UeXBlLkVYQ0xVREUpZyhZLGJhLm5vZGUsYmEsbWEsTy5TSE9SVENVVCksZihiYSxZLm5vZGUsWSxtYSxPLlNIT1JUQ1VUKSxMLnJlbW92ZUVkZ2UoUixVKX1mdW5jdGlvbiBwKEwsUixVKXtsZXQgWT1MLmNvcmVHcmFwaCxiYT1ZLm5vZGUoUik7YmEuaXNPdXRFeHRyYWN0PSEwO18uZWFjaChZLnByZWRlY2Vzc29ycyhSKSxtYT0+e24oWSxtYSxSKX0pOyhGLmRldGFjaEFsbEVkZ2VzRm9ySGlnaERlZ3JlZXx8VSkmJl8uZWFjaChZLnN1Y2Nlc3NvcnMoUiksbWE9PntuKFksUixtYSl9KTswPT09WS5uZWlnaGJvcnMoUikubGVuZ3RoJiYoYmEubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLEwuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goYmEpLFkucmVtb3ZlTm9kZShSKSl9ZnVuY3Rpb24gcShMLFIsVSl7bGV0IFk9TC5jb3JlR3JhcGgsYmE9Clkubm9kZShSKTtiYS5pc0luRXh0cmFjdD0hMDtfLmVhY2goWS5zdWNjZXNzb3JzKFIpLG1hPT57bihZLFIsbWEpfSk7KEYuZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxVKSYmXy5lYWNoKFkucHJlZGVjZXNzb3JzKFIpLG1hPT57bihZLG1hLFIpfSk7MD09PVkubmVpZ2hib3JzKFIpLmxlbmd0aCYmKGJhLm5vZGUuaW5jbHVkZT1jLkluY2x1c2lvblR5cGUuRVhDTFVERSxMLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goYmEpLFkucmVtb3ZlTm9kZShSKSl9ZnVuY3Rpb24gcihMLFIpe2lmKEwudHlwZT09PWMuTm9kZVR5cGUuT1ApZm9yKHZhciBVPTA7VTxSLmxlbmd0aDtVKyspe2lmKEwub3A9PT1SW1VdKXJldHVybiEwfWVsc2UgaWYoTC50eXBlPT09Yy5Ob2RlVHlwZS5NRVRBJiYoTD1MLmdldFJvb3RPcCgpKSlmb3IoVT0wO1U8Ui5sZW5ndGg7VSsrKWlmKEwub3A9PT1SW1VdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHQoTCl7bGV0IFI9TC5jb3JlR3JhcGg7Xy5lYWNoKFIubm9kZXMoKSwKVT0+e1Iubm9kZShVKS5ub2RlLmluY2x1ZGUhPT1jLkluY2x1c2lvblR5cGUuRVhDTFVERXx8VS5zdGFydHNXaXRoKGEuZ3JhcGguRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCl8fChMLmNvcmVHcmFwaC5vdXRFZGdlcyhVKS5sZW5ndGg+TC5jb3JlR3JhcGguaW5FZGdlcyhVKS5sZW5ndGg/cChMLFUsITApOnEoTCxVLCEwKSl9KX1mdW5jdGlvbiB2KEwpe2xldCBSPUwuY29yZUdyYXBoO18uZWFjaChSLm5vZGVzKCksVT0+e2xldCBZPVIubm9kZShVKTtZLm5vZGUuaW5jbHVkZT09PWMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCYmcihZLm5vZGUsRi5vdXRFeHRyYWN0VHlwZXMpJiZwKEwsVSl9KX1mdW5jdGlvbiB5KEwpe2xldCBSPUwuY29yZUdyYXBoO18uZWFjaChSLm5vZGVzKCksVT0+e2xldCBZPVIubm9kZShVKTtZLm5vZGUuaW5jbHVkZT09PWMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCYmcihZLm5vZGUsRi5pbkV4dHJhY3RUeXBlcykmJnEoTCxVKX0pfWZ1bmN0aW9uIHooTCl7bGV0IFI9CkwuY29yZUdyYXBoLFU9e30sWT17fSxiYT0wO18uZWFjaChSLm5vZGVzKCksbGE9PntpZihSLm5vZGUobGEpLm5vZGUuaW5jbHVkZT09PWMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCl7dmFyIFo9Xy5yZWR1Y2UoUi5wcmVkZWNlc3NvcnMobGEpLCh4YSx5YSk9Pnt5YT1SLmVkZ2UoeWEsbGEpLm1ldGFlZGdlO3JldHVybiB4YSsoeWEubnVtUmVndWxhckVkZ2VzPzE6MCl9LDApOzA9PT1aJiYwPFIucHJlZGVjZXNzb3JzKGxhKS5sZW5ndGgmJihaPVIucHJlZGVjZXNzb3JzKGxhKS5sZW5ndGgpO3ZhciBGYT1fLnJlZHVjZShSLnN1Y2Nlc3NvcnMobGEpLCh4YSx5YSk9Pnt5YT1SLmVkZ2UobGEseWEpLm1ldGFlZGdlO3JldHVybiB4YSsoeWEubnVtUmVndWxhckVkZ2VzPzE6MCl9LDApOzA9PT1GYSYmMDxSLnN1Y2Nlc3NvcnMobGEpLmxlbmd0aCYmKEZhPVIuc3VjY2Vzc29ycyhsYSkubGVuZ3RoKTtVW2xhXT1aO1lbbGFdPUZhO2JhKyt9fSk7aWYoIShiYTxGLm1pbk5vZGVDb3VudEZvckV4dHJhY3Rpb24pKXt2YXIgbWE9CkYubWluRGVncmVlRm9yRXh0cmFjdGlvbi0xLGFhPU1hdGgucm91bmQoLjc1KmJhKSxjYT1NYXRoLnJvdW5kKC4yNSpiYSksZmE9T2JqZWN0LmtleXMoVSkuc29ydCgobGEsWik9PlVbbGFdLVVbWl0pLGRhPVVbZmFbYWFdXTtkYT1kYStkYS1VW2ZhW2NhXV07ZGE9TWF0aC5tYXgoZGEsbWEpO2ZvcihsZXQgbGE9YmEtMTtVW2ZhW2xhXV0+ZGE7bGEtLSlxKEwsZmFbbGFdKTtmYT1PYmplY3Qua2V5cyhZKS5zb3J0KChsYSxaKT0+WVtsYV0tWVtaXSk7YWE9WVtmYVthYV1dO2NhPWFhKzQqKGFhLVlbZmFbY2FdXSk7Y2E9TWF0aC5tYXgoY2EsbWEpO2ZvcihtYT1iYS0xO1lbZmFbbWFdXT5jYTttYS0tKShhYT1SLm5vZGUoZmFbbWFdKSkmJiFhYS5pc0luRXh0cmFjdCYmcChMLGZhW21hXSl9fWZ1bmN0aW9uIHgoTCl7bGV0IFI9TC5jb3JlR3JhcGgsVT17fTtfLmVhY2goUi5lZGdlcygpLFk9PntSLmVkZ2UoWSkubWV0YWVkZ2UubnVtUmVndWxhckVkZ2VzfHwoKFVbWS52XT1VW1kudl18fApbXSkucHVzaChZKSwoVVtZLnddPVVbWS53XXx8W10pLnB1c2goWSkpfSk7Xy5lYWNoKFUsWT0+e1kubGVuZ3RoPkYubWF4Q29udHJvbERlZ3JlZSYmXy5lYWNoKFksYmE9Pm4oUixiYS52LGJhLncpKX0pfWZ1bmN0aW9uIEMoTCl7dChMKTtGLm91dEV4dHJhY3RUeXBlcyYmdihMKTtGLmluRXh0cmFjdFR5cGVzJiZ5KEwpO3ooTCk7Ri5tYXhDb250cm9sRGVncmVlJiZ4KEwpO2xldCBSPUwuY29yZUdyYXBoO18uZWFjaChSLm5vZGVzKCksVT0+e2xldCBZPVIubm9kZShVKTt2YXIgYmE9Ui5uZWlnaGJvcnMoVSkubGVuZ3RoO2lmKFkubm9kZS5pbmNsdWRlPT09Yy5JbmNsdXNpb25UeXBlLlVOU1BFQ0lGSUVEJiYwPT09YmEpe2JhPTA8WS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aDtsZXQgbWE9MDxZLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg7WS5pc0luRXh0cmFjdD8oTC5pc29sYXRlZEluRXh0cmFjdC5wdXNoKFkpLFkubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLApSLnJlbW92ZU5vZGUoVSkpOlkuaXNPdXRFeHRyYWN0PyhMLmlzb2xhdGVkT3V0RXh0cmFjdC5wdXNoKFkpLFkubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLFIucmVtb3ZlTm9kZShVKSk6Ri5leHRyYWN0SXNvbGF0ZWROb2Rlc1dpdGhBbm5vdGF0aW9uc09uT25lU2lkZSYmKGJhJiYhbWE/KFkuaXNJbkV4dHJhY3Q9ITAsTC5pc29sYXRlZEluRXh0cmFjdC5wdXNoKFkpLFkubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLFIucmVtb3ZlTm9kZShVKSk6bWEmJiFiYSYmKFkuaXNPdXRFeHRyYWN0PSEwLEwuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goWSksWS5ub2RlLmluY2x1ZGU9Yy5JbmNsdXNpb25UeXBlLkVYQ0xVREUsUi5yZW1vdmVOb2RlKFUpKSl9fSl9ZC5PcE5vZGVDb2xvcnM9e0RFRkFVTFRfRklMTDoiI2ZmZmZmZiIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIiLENPTVBBVElCTEU6IiMwZjlkNTgiLElOQ09NUEFUSUJMRToiI2RiNDQzNyJ9OwpkLk1ldGFub2RlQ29sb3JzPXtERUZBVUxUX0ZJTEw6IiNkOWQ5ZDkiLERFRkFVTFRfU1RST0tFOiIjYTZhNmE2IixTQVRVUkFUSU9OOi42LExJR0hUTkVTUzouODUsRVhQQU5ERURfQ09MT1I6IiNmMGYwZjAiLEhVRVM6WzIyMCwxMDAsMTgwLDQwLDIwLDM0MCwyNjAsMzAwLDE0MCw2MF0sU1RSVUNUVVJFX1BBTEVUVEUoTCxSKXt2YXIgVT1kLk1ldGFub2RlQ29sb3JzLkhVRVM7TD1VW0wlVS5sZW5ndGhdO1U9TWF0aC5zaW4oTCpNYXRoLlBJLzM2MCk7cmV0dXJuIGQzLmhzbChMLC4wMSooUj8zMDo5MC02MCpVKSwuMDEqKFI/OTU6ODApKS50b1N0cmluZygpfSxERVZJQ0VfUEFMRVRURShMKXtyZXR1cm4gZC5NZXRhbm9kZUNvbG9ycy5TVFJVQ1RVUkVfUEFMRVRURShMKX0sWExBX0NMVVNURVJfUEFMRVRURShMKXtyZXR1cm4gZC5NZXRhbm9kZUNvbG9ycy5TVFJVQ1RVUkVfUEFMRVRURShMKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9O2QuU2VyaWVzTm9kZUNvbG9ycz0Ke0RFRkFVTFRfRklMTDoid2hpdGUiLERFRkFVTFRfU1RST0tFOiIjYjJiMmIyIn07Y29uc3QgRj17ZW5hYmxlRXh0cmFjdGlvbjohMCxtaW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uOjE1LG1pbkRlZ3JlZUZvckV4dHJhY3Rpb246NSxtYXhDb250cm9sRGVncmVlOjQsbWF4QnJpZGdlUGF0aERlZ3JlZTo0LG91dEV4dHJhY3RUeXBlczpbIk5vT3AiXSxpbkV4dHJhY3RUeXBlczpbXSxkZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWU6ITAsZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGU6ITAsZW5hYmxlQnJpZGdlZ3JhcGg6ITAsbWluTWF4Q29sb3JzOlsiI2ZmZjVmMCIsIiNmYjZhNGEiXSxtYXhBbm5vdGF0aW9uczo1fSxEPW5ldyBSZWdFeHAoIl4oPzoiK2EuZ3JhcGguRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCsiKT8oXFx3KylfW2EtejAtOV17OH0oPzpfXFxkKyk/JCIpO2NsYXNzIEJ7Y29uc3RydWN0b3IoTCxSKXt0aGlzLmhpZXJhcmNoeT1MOwp0aGlzLmRpc3BsYXlpbmdTdGF0cz1SO3RoaXMuaW5kZXg9e307dGhpcy5yZW5kZXJlZE9wTmFtZXM9W107dGhpcy5jb21wdXRlU2NhbGVzKCk7dGhpcy5oYXNTdWJoaWVyYXJjaHk9e307dGhpcy5yb290PW5ldyBNKEwucm9vdCxMLmdyYXBoT3B0aW9ucyk7dGhpcy5pbmRleFtMLnJvb3QubmFtZV09dGhpcy5yb290O3RoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2goTC5yb290Lm5hbWUpO3RoaXMuYnVpbGRTdWJoaWVyYXJjaHkoTC5yb290Lm5hbWUpO3RoaXMucm9vdC5leHBhbmRlZD0hMDt0aGlzLnRyYWNlSW5wdXRzPSExfWNvbXB1dGVTY2FsZXMoKXt0aGlzLmRldmljZUNvbG9yTWFwPWQzLnNjYWxlT3JkaW5hbCgpLmRvbWFpbih0aGlzLmhpZXJhcmNoeS5kZXZpY2VzKS5yYW5nZShfLm1hcChkMy5yYW5nZSh0aGlzLmhpZXJhcmNoeS5kZXZpY2VzLmxlbmd0aCksZC5NZXRhbm9kZUNvbG9ycy5ERVZJQ0VfUEFMRVRURSkpO3RoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWQzLnNjYWxlT3JkaW5hbCgpLmRvbWFpbih0aGlzLmhpZXJhcmNoeS54bGFDbHVzdGVycykucmFuZ2UoXy5tYXAoZDMucmFuZ2UodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSwKZC5NZXRhbm9kZUNvbG9ycy5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IEw9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGg7dmFyIFI9ZDMubWF4KEwubm9kZXMoKSxVPT57VT1MLm5vZGUoVSk7aWYobnVsbCE9VS5zdGF0cylyZXR1cm4gVS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLFJdKS5yYW5nZShGLm1pbk1heENvbG9ycyk7Uj1kMy5tYXgoTC5ub2RlcygpLFU9PntVPUwubm9kZShVKTtpZihudWxsIT1VLnN0YXRzKXJldHVybiBVLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsUl0pLnJhbmdlKEYubWluTWF4Q29sb3JzKTt0aGlzLmVkZ2VXaWR0aFNpemVkQmFzZWRTY2FsZT10aGlzLmhpZXJhcmNoeS5oYXNTaGFwZUluZm8/Yy5zY2VuZS5lZGdlLkVER0VfV0lEVEhfU0laRV9CQVNFRF9TQ0FMRTpkMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbMSwKdGhpcy5oaWVyYXJjaHkubWF4TWV0YUVkZ2VTaXplXSkucmFuZ2UoW2Muc2NlbmUuZWRnZS5NSU5fRURHRV9XSURUSCxjLnNjZW5lLmVkZ2UuTUFYX0VER0VfV0lEVEhdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKEwpe3JldHVybiB0aGlzLmluZGV4W0xdfWdldE5vZGVCeU5hbWUoTCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUoTCl9Y29sb3JIaXN0b2dyYW0oTCxSKXtpZigwPE9iamVjdC5rZXlzKEwpLmxlbmd0aCl7Y29uc3QgVT1fLnN1bShPYmplY3Qua2V5cyhMKS5tYXAoWT0+TFtZXSkpO3JldHVybiBPYmplY3Qua2V5cyhMKS5tYXAoWT0+KHtjb2xvcjpSKFkpLHByb3BvcnRpb246TFtZXS9VfSkpfWNvbnNvbGUuaW5mbygibm8gcGFpcnMgZm91bmQhIik7cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKEwpe2lmKCFMKXJldHVybiBudWxsO2lmKEwgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFtMXTt2YXIgUj10aGlzLmhpZXJhcmNoeS5ub2RlKEwpOwppZighUilyZXR1cm4gbnVsbDtsZXQgVT1SLmlzR3JvdXBOb2RlP25ldyBNKFIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgSChSKTt0aGlzLmluZGV4W0xdPVU7dGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaChMKTtSLnN0YXRzJiYoVS5tZW1vcnlDb2xvcj10aGlzLm1lbW9yeVVzYWdlU2NhbGUoUi5zdGF0cy50b3RhbEJ5dGVzKSxVLmNvbXB1dGVUaW1lQ29sb3I9dGhpcy5jb21wdXRlVGltZVNjYWxlKFIuc3RhdHMuZ2V0VG90YWxNaWNyb3MoKSkpO1UuaXNGYWRlZE91dD10aGlzLmRpc3BsYXlpbmdTdGF0cyYmIWEuZ3JhcGgudXRpbC5oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyhSLnN0YXRzKTt2YXIgWT1udWxsLGJhPW51bGwsbWE9bnVsbDtpZihSLmlzR3JvdXBOb2RlKXtZPVIuZGV2aWNlSGlzdG9ncmFtO2JhPVIueGxhQ2x1c3Rlckhpc3RvZ3JhbTt2YXIgYWE9Ui5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU7Uj1SLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOwppZigwIT1hYXx8MCE9UiltYT1hYS8oYWErUil9ZWxzZShhYT1VLm5vZGUuZGV2aWNlKSYmKFk9e1thYV06MX0pLChhYT1VLm5vZGUueGxhQ2x1c3RlcikmJihiYT17W2FhXToxfSksVS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk9QJiYobWE9VS5ub2RlLmNvbXBhdGlibGU/MTowKTtZJiYoVS5kZXZpY2VDb2xvcnM9dGhpcy5jb2xvckhpc3RvZ3JhbShZLHRoaXMuZGV2aWNlQ29sb3JNYXApKTtiYSYmKFUueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKGJhLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwKSk7bnVsbCE9bWEmJihVLmNvbXBhdGliaWxpdHlDb2xvcnM9W3tjb2xvcjphLmdyYXBoLnJlbmRlci5PcE5vZGVDb2xvcnMuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOm1hfSx7Y29sb3I6YS5ncmFwaC5yZW5kZXIuT3BOb2RlQ29sb3JzLklOQ09NUEFUSUJMRSxwcm9wb3J0aW9uOjEtbWF9XSk7cmV0dXJuIHRoaXMuaW5kZXhbTF19Z2V0TmVhcmVzdFZpc2libGVBbmNlc3RvcihMKXt2YXIgUj0KYy5nZXRIaWVyYXJjaGljYWxQYXRoKEwpO2xldCBVPTAsWT1udWxsO2Zvcig7VTxSLmxlbmd0aCYmKEw9UltVXSxZPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShMKSxZLmV4cGFuZGVkKTtVKyspO3JldHVybiBVPT1SLmxlbmd0aC0yJiYoUj1SW1UrMV0sWS5pbkFubm90YXRpb25zLm5vZGVOYW1lc1tSXXx8WS5vdXRBbm5vdGF0aW9ucy5ub2RlTmFtZXNbUl0pP1I6TH1zZXREZXB0aChMKXtrKHRoaXMucm9vdCwrTCl9aXNOb2RlQXV4aWxpYXJ5KEwpe2xldCBSPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShMLm5vZGUucGFyZW50Tm9kZS5uYW1lKSxVPV8uZmluZChSLmlzb2xhdGVkSW5FeHRyYWN0LFk9Plkubm9kZS5uYW1lPT09TC5ub2RlLm5hbWUpO2lmKFUpcmV0dXJuITA7VT1fLmZpbmQoUi5pc29sYXRlZE91dEV4dHJhY3QsWT0+WS5ub2RlLm5hbWU9PT1MLm5vZGUubmFtZSk7cmV0dXJuISFVfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKEwsClIsVSxZKXt2YXIgYmE9VS5uYW1lLnJlcGxhY2UoUixZKTtsZXQgbWE9TC5tZXRhZ3JhcGgubm9kZShiYSk7aWYobWEpcmV0dXJuIG1hO21hPW5ldyBjLk9wTm9kZUltcGwoe25hbWU6YmEsaW5wdXQ6W10sZGV2aWNlOlUuZGV2aWNlLG9wOlUub3AsYXR0cjpfLmNsb25lRGVlcChVLmF0dHIpfSk7bWEuY2FyZGluYWxpdHk9VS5jYXJkaW5hbGl0eTttYS5pbmNsdWRlPVUuaW5jbHVkZTttYS5vdXRwdXRTaGFwZXM9Xy5jbG9uZURlZXAoVS5vdXRwdXRTaGFwZXMpO21hLnhsYUNsdXN0ZXI9VS54bGFDbHVzdGVyO21hLmZ1bmN0aW9uSW5wdXRJbmRleD1VLmZ1bmN0aW9uSW5wdXRJbmRleDttYS5mdW5jdGlvbk91dHB1dEluZGV4PVUuZnVuY3Rpb25PdXRwdXRJbmRleDttYS5pbnB1dHM9VS5pbnB1dHMubWFwKGFhPT57Y29uc3QgY2E9Xy5jbG9uZShhYSk7Y2EubmFtZT1hYS5uYW1lLnJlcGxhY2UoUixZKTtyZXR1cm4gY2F9KTttYS5wYXJlbnROb2RlPUw7TC5tZXRhZ3JhcGguc2V0Tm9kZShtYS5uYW1lLAptYSk7dGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShtYS5uYW1lLG1hKTtiYT1hYT0+dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKEwsUixhYSxZKTttYS5pbkVtYmVkZGluZ3M9VS5pbkVtYmVkZGluZ3MubWFwKGJhKTttYS5vdXRFbWJlZGRpbmdzPVUub3V0RW1iZWRkaW5ncy5tYXAoYmEpO3JldHVybiBtYX1jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKEwsUixVLFksYmEpe2NvbnN0IG1hPXt9O0w9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKEwsUixVLFksYmEsbWEpO18uaXNFbXB0eShtYSl8fHRoaXMucGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHMoUixtYSk7cmV0dXJuIEx9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcihMLFIsVSxZLGJhLG1hKXtjb25zdCBhYT1hLmdyYXBoLmNyZWF0ZU1ldGFub2RlKFUubmFtZS5yZXBsYWNlKFksYmEpKTthYS5kZXB0aD1VLmRlcHRoO2FhLmNhcmRpbmFsaXR5PVUuY2FyZGluYWxpdHk7CmFhLnRlbXBsYXRlSWQ9VS50ZW1wbGF0ZUlkO2FhLm9wSGlzdG9ncmFtPV8uY2xvbmUoVS5vcEhpc3RvZ3JhbSk7YWEuZGV2aWNlSGlzdG9ncmFtPV8uY2xvbmUoVS5kZXZpY2VIaXN0b2dyYW0pO2FhLnhsYUNsdXN0ZXJIaXN0b2dyYW09Xy5jbG9uZShVLnhsYUNsdXN0ZXJIaXN0b2dyYW0pO2FhLmhhc05vbkNvbnRyb2xFZGdlcz1VLmhhc05vbkNvbnRyb2xFZGdlczthYS5pbmNsdWRlPVUuaW5jbHVkZTthYS5ub2RlQXR0cmlidXRlcz1fLmNsb25lKFUubm9kZUF0dHJpYnV0ZXMpO2FhLmFzc29jaWF0ZWRGdW5jdGlvbj1VLmFzc29jaWF0ZWRGdW5jdGlvbjtfLmVhY2goVS5tZXRhZ3JhcGgubm9kZXMoKSxjYT0+e2NhPVUubWV0YWdyYXBoLm5vZGUoY2EpO3N3aXRjaChjYS50eXBlKXtjYXNlIGMuTm9kZVR5cGUuTUVUQTpjYT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIoTCxSLGNhLFksYmEsbWEpO2NhLnBhcmVudE5vZGU9YWE7YWEubWV0YWdyYXBoLnNldE5vZGUoY2EubmFtZSwKY2EpO3RoaXMuaGllcmFyY2h5LnNldE5vZGUoY2EubmFtZSxjYSk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLk9QOmNhPXRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZShhYSxZLGNhLGJhKTtfLmlzTnVtYmVyKGNhLmZ1bmN0aW9uSW5wdXRJbmRleCkmJnRoaXMucGF0Y2hFZGdlc0ludG9GdW5jdGlvbklucHV0cyhSLGNhKTtfLmlzTnVtYmVyKGNhLmZ1bmN0aW9uT3V0cHV0SW5kZXgpJiYobWFbY2EuZnVuY3Rpb25PdXRwdXRJbmRleF09Y2EpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKGNhLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KTt0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMoVSxhYSxZLGJhKTtyZXR1cm4gYWF9Y2xvbmVMaWJyYXJ5TWV0YW5vZGVFZGdlcyhMLFIsVSxZKXtfLmVhY2goTC5tZXRhZ3JhcGguZWRnZXMoKSxiYT0+e2JhPUwubWV0YWdyYXBoLmVkZ2UoYmEpO2NvbnN0IG1hPWJhLnYucmVwbGFjZShVLApZKSxhYT1iYS53LnJlcGxhY2UoVSxZKSxjYT1uZXcgYy5NZXRhZWRnZUltcGwobWEsYWEpO2NhLmluYm91bmQ9YmEuaW5ib3VuZDtjYS5udW1SZWd1bGFyRWRnZXM9YmEubnVtUmVndWxhckVkZ2VzO2NhLm51bUNvbnRyb2xFZGdlcz1iYS5udW1Db250cm9sRWRnZXM7Y2EubnVtUmVmRWRnZXM9YmEubnVtUmVmRWRnZXM7Y2EudG90YWxTaXplPWJhLnRvdGFsU2l6ZTtiYS5iYXNlRWRnZUxpc3QmJihjYS5iYXNlRWRnZUxpc3Q9YmEuYmFzZUVkZ2VMaXN0Lm1hcChmYT0+e2NvbnN0IGRhPV8uY2xvbmUoZmEpO2RhLnY9ZmEudi5yZXBsYWNlKFUsWSk7ZGEudz1mYS53LnJlcGxhY2UoVSxZKTtyZXR1cm4gZGF9KSk7Ui5tZXRhZ3JhcGgubm9kZShhYSk/Ui5tZXRhZ3JhcGguc2V0RWRnZShtYSxhYSxjYSk6Ui5tZXRhZ3JhcGguc2V0RWRnZShhYSxtYSxjYSl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKEwsUil7bGV0IFU9TWF0aC5taW4oUi5mdW5jdGlvbklucHV0SW5kZXgsTC5pbnB1dHMubGVuZ3RoLQoxKTtmb3IodmFyIFk9Xy5jbG9uZShMLmlucHV0c1tVXSk7WS5pc0NvbnRyb2xEZXBlbmRlbmN5OylVKyssWT1MLmlucHV0c1tVXTtSLmlucHV0cy5wdXNoKFkpO1k9dGhpcy5oaWVyYXJjaHkuZ2V0UHJlZGVjZXNzb3JzKEwubmFtZSk7bGV0IGJhLG1hPTA7Xy5lYWNoKFkucmVndWxhcixhYT0+e21hKz1hYS5udW1SZWd1bGFyRWRnZXM7aWYobWE+VSlyZXR1cm4gYmE9YWEsITF9KTtfLmVhY2goYmEuYmFzZUVkZ2VMaXN0LGFhPT57YWEudz09PUwubmFtZSYmKGFhLnc9Ui5uYW1lKTthYS52PT09TC5uYW1lJiYoYWEudj1SLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHMoTCxSKXtjb25zdCBVPXRoaXMuaGllcmFyY2h5LmdldFN1Y2Nlc3NvcnMoTC5uYW1lKTtfLmVhY2goVS5yZWd1bGFyLFk9PntfLmVhY2goWS5iYXNlRWRnZUxpc3QsYmE9Pntjb25zdCBtYT10aGlzLmhpZXJhcmNoeS5ub2RlKGJhLncpO18uZWFjaChtYS5pbnB1dHMsYWE9PnthYS5uYW1lPT09TC5uYW1lJiYKKGFhLm5hbWU9UlthYS5vdXRwdXRUZW5zb3JLZXldLm5hbWUsYWEub3V0cHV0VGVuc29yS2V5PWJhLm91dHB1dFRlbnNvcktleSl9KX0pO18uZWFjaChZLmJhc2VFZGdlTGlzdCxiYT0+e2JhLnY9UltiYS5vdXRwdXRUZW5zb3JLZXldLm5hbWU7YmEub3V0cHV0VGVuc29yS2V5PSIwIn0pfSl9YnVpbGRTdWJoaWVyYXJjaHkoTCl7aWYoIShMIGluIHRoaXMuaGFzU3ViaGllcmFyY2h5KSl7dGhpcy5oYXNTdWJoaWVyYXJjaHlbTF09ITA7dmFyIFI9dGhpcy5pbmRleFtMXTtpZihSLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQXx8Ui5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUyl7dmFyIFU9Ui5ub2RlLm1ldGFncmFwaCxZPVIuY29yZUdyYXBoLGJhPVtdLG1hPVtdO18uaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KF8uZWFjaChVLm5vZGVzKCkseWE9Pntjb25zdCBCYT1VLm5vZGUoeWEpLEdhPXRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnNbQmEub3BdOwpHYSYmMCE9PXlhLmluZGV4T2YoYS5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYKSYmKHlhPXRoaXMuY2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZShVLEJhLEdhLm5vZGUsR2Eubm9kZS5uYW1lLEJhLm5hbWUpLGJhLnB1c2goQmEpLG1hLnB1c2goeWEpKX0pLF8uZWFjaChtYSwoeWEsQmEpPT57QmE9YmFbQmFdO3lhLnBhcmVudE5vZGU9QmEucGFyZW50Tm9kZTtVLnNldE5vZGUoQmEubmFtZSx5YSk7dGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShCYS5uYW1lLHlhKX0pKTtfLmVhY2goVS5ub2RlcygpLHlhPT57bGV0IEJhPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHlhKSxHYT1CYS5ub2RlO1kuc2V0Tm9kZSh5YSxCYSk7R2EuaXNHcm91cE5vZGV8fChfLmVhY2goR2EuaW5FbWJlZGRpbmdzLHphPT57bGV0IFVhPW5ldyBLKG51bGwpLFphPW5ldyBIKHphKTtmKEJhLHphLFphLFVhLE8uQ09OU1RBTlQpO3RoaXMuaW5kZXhbemEubmFtZV09WmF9KSxfLmVhY2goR2Eub3V0RW1iZWRkaW5ncywKemE9PntsZXQgVWE9bmV3IEsobnVsbCksWmE9bmV3IEgoemEpO2coQmEsemEsWmEsVWEsTy5TVU1NQVJZKTt0aGlzLmluZGV4W3phLm5hbWVdPVphfSkpfSk7Xy5lYWNoKFUuZWRnZXMoKSx5YT0+e3ZhciBCYT1VLmVkZ2UoeWEpO0JhPW5ldyBLKEJhKTtCYS5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbeWEudl0uaXNGYWRlZE91dHx8dGhpcy5pbmRleFt5YS53XS5pc0ZhZGVkT3V0O1kuc2V0RWRnZSh5YS52LHlhLncsQmEpfSk7Ri5lbmFibGVFeHRyYWN0aW9uJiZSLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQSYmQyhSKTtfLmlzRW1wdHkodGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucyl8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyhVKTtMPT09YS5ncmFwaC5ST09UX05BTUUmJl8uZm9yT3duKHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMseWE9Pnt5YT15YS5ub2RlO2NvbnN0IEJhPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHlhLm5hbWUpOwpSLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LnB1c2goQmEpO0JhLm5vZGUuaW5jbHVkZT1jLkluY2x1c2lvblR5cGUuRVhDTFVERTtZLnJlbW92ZU5vZGUoeWEubmFtZSl9KTt2YXIgYWE9Ui5ub2RlLnBhcmVudE5vZGU7aWYoYWEpe3ZhciBjYT10aGlzLmluZGV4W2FhLm5hbWVdLGZhPSh5YSwuLi5CYSk9PkJhLmNvbmNhdChbeWE/IklOIjoiT1VUIl0pLmpvaW4oIn5+IiksZGE9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgoTCksbGE9e30sWj17fSxGYT17fTtfLmVhY2goZGEuZWRnZXMoKSx5YT0+e2xldCBCYT0hIVUubm9kZSh5YS53KSxHYT1CYT95YS52OnlhLnc7ZGEuZWRnZSh5YSkubnVtUmVndWxhckVkZ2VzP0JhP1pbR2FdPShaW0dhXXx8MCkrMTpsYVtHYV09KGxhW0dhXXx8MCkrMTpGYVtHYV09KEZhW0dhXXx8MCkrMX0pO3ZhciB4YT10aGlzLmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7Xy5lYWNoKGRhLmVkZ2VzKCkseWE9Pnt2YXIgQmE9ZGEuZWRnZSh5YSk7bGV0IEdhPQohIVUubm9kZSh5YS53KSxbemEsVWFdPUdhP1t5YS53LHlhLnZdOlt5YS52LHlhLnddO3ZhciBaYT10aGlzLmluZGV4W3phXSx6Yj10aGlzLmluZGV4W1VhXSxJYj16Yj96Yi5ub2RlOnhhW1VhXSx1Yj0hQmEubnVtUmVndWxhckVkZ2VzJiZGYVtVYV0+Ri5tYXhDb250cm9sRGVncmVlLFssRmJdPUdhP1tSLmluQW5ub3RhdGlvbnMsWmEuaW5Bbm5vdGF0aW9uc106W1Iub3V0QW5ub3RhdGlvbnMsWmEub3V0QW5ub3RhdGlvbnNdO2xldCBBYj0oR2E/WjpsYSlbVWFdPkYubWF4QnJpZGdlUGF0aERlZ3JlZTt5YT1udWxsO3ZhciBQYj0hMTtGLmVuYWJsZUJyaWRnZWdyYXBoJiYhQWImJiF1YiYmWmEuaXNJbkNvcmUoKSYmKFBiPWJjPT5jYS5jb3JlR3JhcGguZWRnZShHYT97djpiYyx3Okx9Ont2OkwsdzpiY30pLCh5YT1QYihVYSkpfHwoeWE9UGIoZmEoR2EsVWEsYWEubmFtZSkpKSxQYj0hIXlhKTtaYT0hMTtpZih5YSYmIUJhLm51bVJlZ3VsYXJFZGdlcyl7WmE9eWE7Zm9yKHViPWNhLm5vZGU7WmEuYWRqb2luaW5nTWV0YWVkZ2U7KVphPQpaYS5hZGpvaW5pbmdNZXRhZWRnZSx1Yj11Yi5wYXJlbnROb2RlO3ViPXRoaXMuaGllcmFyY2h5LmdldFRvcG9sb2dpY2FsT3JkZXJpbmcodWIubmFtZSk7WmE9WmEubWV0YWVkZ2U7WmE9dWJbWmEudl0+dWJbWmEud119UGImJiFaYT8oSWI9ZmEoR2EsTCksemI9ZmEoR2EsVWEsTCksRmI9WS5ub2RlKHpiKSxGYnx8KFBiPVkubm9kZShJYiksUGJ8fChQYj1uZXcgSCh7bmFtZTpJYix0eXBlOmMuTm9kZVR5cGUuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTpjLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQsaW5ib3VuZDpHYSxub2RlQXR0cmlidXRlczp7fX0pLHRoaXMuaW5kZXhbSWJdPVBiLFkuc2V0Tm9kZShJYixQYikpLEZiPW5ldyBIKHtuYW1lOnpiLHR5cGU6Yy5Ob2RlVHlwZS5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOmMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCwKaW5ib3VuZDpHYSxub2RlQXR0cmlidXRlczp7fX0pLHRoaXMuaW5kZXhbemJdPUZiLFkuc2V0Tm9kZSh6YixGYiksWS5zZXRQYXJlbnQoemIsSWIpLFBiLm5vZGUuY2FyZGluYWxpdHkrKyksQmE9bmV3IEsoQmEpLEJhLmFkam9pbmluZ01ldGFlZGdlPXlhLEdhP1kuc2V0RWRnZSh6Yix6YSxCYSk6WS5zZXRFZGdlKHphLHpiLEJhKSk6RmIucHVzaChuZXcgSShJYix6YixuZXcgSyhCYSksTy5TSE9SVENVVCxHYSkpfSk7Xy5lYWNoKFshMCwhMV0seWE9PntsZXQgQmE9ZmEoeWEsTCksR2E9WS5ub2RlKEJhKTtHYSYmXy5lYWNoKFkubm9kZXMoKSx6YT0+e2lmKFkubm9kZSh6YSkubm9kZS50eXBlIT09Yy5Ob2RlVHlwZS5CUklER0UmJih5YT8hWS5wcmVkZWNlc3NvcnMoemEpLmxlbmd0aDohWS5zdWNjZXNzb3JzKHphKS5sZW5ndGgpKXt2YXIgVWE9ZmEoeWEsTCwiU1RSVUNUVVJBTF9UQVJHRVQiKSxaYT1ZLm5vZGUoVWEpO1phfHwoWmE9bmV3IEgoe25hbWU6VWEsdHlwZTpjLk5vZGVUeXBlLkJSSURHRSwKaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOmMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCxpbmJvdW5kOnlhLG5vZGVBdHRyaWJ1dGVzOnt9fSksWmEuc3RydWN0dXJhbD0hMCx0aGlzLmluZGV4W1VhXT1aYSxZLnNldE5vZGUoVWEsWmEpLEdhLm5vZGUuY2FyZGluYWxpdHkrKyxZLnNldFBhcmVudChVYSxCYSkpO1phPW5ldyBLKG51bGwpO1phLnN0cnVjdHVyYWw9ITA7WmEud2VpZ2h0LS07eWE/WS5zZXRFZGdlKFVhLHphLFphKTpZLnNldEVkZ2UoemEsVWEsWmEpfX0pfSl9fX19YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyhMKXtfLmVhY2goTC5lZGdlcygpLFI9PntSPUwuZWRnZShSKTtSPW5ldyBLKFIpO18uZm9yRWFjaChSLm1ldGFlZGdlLmJhc2VFZGdlTGlzdCxVPT57dmFyIFk9VS52LnNwbGl0KGEuZ3JhcGguTkFNRVNQQUNFX0RFTElNKTtmb3IodmFyIGJhPVkubGVuZ3RoOzA8PWJhO2JhLS0pe1U9Clkuc2xpY2UoMCxiYSk7Y29uc3QgbWE9dGhpcy5oaWVyYXJjaHkubm9kZShVLmpvaW4oYS5ncmFwaC5OQU1FU1BBQ0VfREVMSU0pKTtpZihtYSl7aWYobWEudHlwZT09PWMuTm9kZVR5cGUuT1AmJnRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnNbbWEub3BdKWZvcihZPTE7WTxVLmxlbmd0aDtZKyspKGJhPVUuc2xpY2UoMCxZKS5qb2luKGEuZ3JhcGguTkFNRVNQQUNFX0RFTElNKSkmJnRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoYmEpO2JyZWFrfX19KX0pfX1kLlJlbmRlckdyYXBoSW5mbz1CO2NsYXNzIEl7Y29uc3RydWN0b3IoTCxSLFUsWSxiYSl7dGhpcy5ub2RlPUw7dGhpcy5yZW5kZXJOb2RlSW5mbz1SO3RoaXMucmVuZGVyTWV0YWVkZ2VJbmZvPVU7dGhpcy5hbm5vdGF0aW9uVHlwZT1ZO3RoaXMuaGVpZ2h0PXRoaXMud2lkdGg9dGhpcy5keT10aGlzLmR4PTA7VSYmVS5tZXRhZWRnZSYmKHRoaXMudj1VLm1ldGFlZGdlLnYsdGhpcy53PVUubWV0YWVkZ2Uudyk7dGhpcy5pc0luPQpiYTt0aGlzLnBvaW50cz1bXX19ZC5Bbm5vdGF0aW9uPUk7bGV0IE87KGZ1bmN0aW9uKEwpe0xbTC5TSE9SVENVVD0wXT0iU0hPUlRDVVQiO0xbTC5DT05TVEFOVD0xXT0iQ09OU1RBTlQiO0xbTC5TVU1NQVJZPTJdPSJTVU1NQVJZIjtMW0wuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKE89ZC5Bbm5vdGF0aW9uVHlwZXx8KGQuQW5ub3RhdGlvblR5cGU9e30pKTtjbGFzcyBQe2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0PVtdO3RoaXMubm9kZU5hbWVzPXt9fXB1c2goTCl7aWYoIShMLm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcykpaWYodGhpcy5ub2RlTmFtZXNbTC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8Ri5tYXhBbm5vdGF0aW9ucyl0aGlzLmxpc3QucHVzaChMKTtlbHNle3ZhciBSPXRoaXMubGlzdFt0aGlzLmxpc3QubGVuZ3RoLTFdO1IuYW5ub3RhdGlvblR5cGU9PT1PLkVMTElQU0lTPyhMPVIubm9kZSxMLnNldE51bU1vcmVOb2RlcygrK0wubnVtTW9yZU5vZGVzKSk6CihSPW5ldyBhLmdyYXBoLkVsbGlwc2lzTm9kZUltcGwoMSksdGhpcy5saXN0LnB1c2gobmV3IEkoUixuZXcgSChSKSxudWxsLE8uRUxMSVBTSVMsTC5pc0luKSkpfX19ZC5Bbm5vdGF0aW9uTGlzdD1QO2NsYXNzIEh7Y29uc3RydWN0b3IoTCl7dGhpcy5ub2RlPUw7dGhpcy5leHBhbmRlZD0hMTt0aGlzLmluQW5ub3RhdGlvbnM9bmV3IFA7dGhpcy5vdXRBbm5vdGF0aW9ucz1uZXcgUDt0aGlzLm91dGJveFdpZHRoPXRoaXMuaW5ib3hXaWR0aD10aGlzLmhlaWdodD10aGlzLndpZHRoPXRoaXMueT10aGlzLng9MDt0aGlzLnN0cnVjdHVyYWw9dGhpcy5leGNsdWRlZD0hMTt0aGlzLnBhZGRpbmdCb3R0b209dGhpcy5wYWRkaW5nUmlnaHQ9dGhpcy5wYWRkaW5nTGVmdD10aGlzLnBhZGRpbmdUb3A9dGhpcy5sYWJlbEhlaWdodD10aGlzLnJhZGl1cz10aGlzLmxhYmVsT2Zmc2V0PTA7dGhpcy5pc091dEV4dHJhY3Q9dGhpcy5pc0luRXh0cmFjdD0hMTt0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9Owp0aGlzLmlzRmFkZWRPdXQ9ITE7dGhpcy5kaXNwbGF5TmFtZT1MLm5hbWUuc3Vic3RyaW5nKEwubmFtZS5sYXN0SW5kZXhPZihhLmdyYXBoLk5BTUVTUEFDRV9ERUxJTSkrMSk7TC50eXBlPT09Yy5Ob2RlVHlwZS5NRVRBJiZMLmFzc29jaWF0ZWRGdW5jdGlvbiYmKChMPXRoaXMuZGlzcGxheU5hbWUubWF0Y2goRCkpP3RoaXMuZGlzcGxheU5hbWU9TFsxXTpfLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxhLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgpJiYodGhpcy5kaXNwbGF5TmFtZT10aGlzLmRpc3BsYXlOYW1lLnN1YnN0cmluZyhhLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgubGVuZ3RoKSkpfWlzSW5Db3JlKCl7cmV0dXJuIXRoaXMuaXNJbkV4dHJhY3QmJiF0aGlzLmlzT3V0RXh0cmFjdCYmIXRoaXMuaXNMaWJyYXJ5RnVuY3Rpb259fWQuUmVuZGVyTm9kZUluZm89SDtjbGFzcyBLe2NvbnN0cnVjdG9yKEwpe3RoaXMubWV0YWVkZ2U9TDsKdGhpcy5hZGpvaW5pbmdNZXRhZWRnZT1udWxsO3RoaXMuc3RydWN0dXJhbD0hMTt0aGlzLndlaWdodD0xO3RoaXMuaXNGYWRlZE91dD0hMX19ZC5SZW5kZXJNZXRhZWRnZUluZm89SztjbGFzcyBNIGV4dGVuZHMgSHtjb25zdHJ1Y3RvcihMLFIpe3N1cGVyKEwpO0w9TC5tZXRhZ3JhcGguZ3JhcGgoKTtSLmNvbXBvdW5kPSEwO3RoaXMuY29yZUdyYXBoPWMuY3JlYXRlR3JhcGgoTC5uYW1lLGMuR3JhcGhUeXBlLkNPUkUsUik7dGhpcy5pbkV4dHJhY3RCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9O3RoaXMub3V0RXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH07dGhpcy5saWJyYXJ5RnVuY3Rpb25zQm94PXt3aWR0aDowLGhlaWdodDowfTt0aGlzLmlzb2xhdGVkSW5FeHRyYWN0PVtdO3RoaXMuaXNvbGF0ZWRPdXRFeHRyYWN0PVtdO3RoaXMubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Q9W119fWQuUmVuZGVyR3JvdXBOb2RlSW5mbz1NO2QubWFrZUluRXh0cmFjdD1xO2QubWFwSW5kZXhUb0h1ZT0KZnVuY3Rpb24oTCl7cmV0dXJuIDErNTc5LjI1NjE2Nzk3MjUqTCUzNTh9O2QuZXhwYW5kVW50aWxOb2RlSXNTaG93bj1mdW5jdGlvbihMLFIpe3ZhciBVPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY2VuZSIpO1I9Ui5zcGxpdCgiLyIpO3ZhciBZPVJbUi5sZW5ndGgtMV0ubWF0Y2goLyguKik6XHcrLyk7Mj09PVkubGVuZ3RoJiYoUltSLmxlbmd0aC0xXT1ZWzFdKTtZPVJbMF07bGV0IGJhPUwuZ2V0UmVuZGVyTm9kZUJ5TmFtZShZKTtmb3IobGV0IG1hPTE7bWE8Ui5sZW5ndGgmJmJhLm5vZGUudHlwZSE9PWEuZ3JhcGguTm9kZVR5cGUuT1A7bWErKylMLmJ1aWxkU3ViaGllcmFyY2h5KFkpLGJhLmV4cGFuZGVkPSEwLFUuc2V0Tm9kZUV4cGFuZGVkKGJhKSxZKz0iLyIrUlttYV0sYmE9TC5nZXRSZW5kZXJOb2RlQnlOYW1lKFkpO3JldHVybiBiYS5ub2RlLm5hbWV9fSkoYy5yZW5kZXJ8fChjLnJlbmRlcj17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1jb21tb24vc2NlbmUuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZihyLHQsdix5KXt2YXIgej1nKHIsdCx2KTtpZighei5lbXB0eSgpKXJldHVybiB6O3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYodiBpbnN0YW5jZW9mIEFycmF5KWZvcih6PTA7ejx2Lmxlbmd0aDt6KyspdC5jbGFzc0xpc3QuYWRkKHZbel0pO2Vsc2UgdC5jbGFzc0xpc3QuYWRkKHYpO3k/ci5ub2RlKCkuaW5zZXJ0QmVmb3JlKHQseSk6ci5ub2RlKCkuYXBwZW5kQ2hpbGQodCk7cmV0dXJuIGQzLnNlbGVjdCh0KS5kYXR1bShyLmRhdHVtKCkpfWZ1bmN0aW9uIGcocix0LHYpe3I9ci5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IHk9MDt5PHIubGVuZ3RoO3krKyl7bGV0IHo9clt5XTtpZih6LnRhZ05hbWU9PT10KWlmKHYgaW5zdGFuY2VvZiBBcnJheSl7bGV0IHg9ITA7Zm9yKGxldCBDPTA7Qzx2Lmxlbmd0aDtDKyspeD14JiZ6LmNsYXNzTGlzdC5jb250YWlucyh2W0NdKTsKaWYoeClyZXR1cm4gZDMuc2VsZWN0KHopfWVsc2UgaWYoIXZ8fHouY2xhc3NMaXN0LmNvbnRhaW5zKHYpKXJldHVybiBkMy5zZWxlY3Qoeil9cmV0dXJuIGQzLnNlbGVjdChudWxsKX1mdW5jdGlvbiBsKHIsdCl7bGV0IHY9dC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz8wOmMubGF5b3V0LlBBUkFNUy5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0O2soZyhyLCJnIixkLkNsYXNzLlNjZW5lLkNPUkUpLDAsdik7dmFyIHk9MDx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aCx6PTA8dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoO2xldCB4PTA8dC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGgsQz1jLmxheW91dC5QQVJBTVMuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxGPTA7eSYmKEYrPXQub3V0RXh0cmFjdEJveC53aWR0aCk7eiYmKEYrPXQub3V0RXh0cmFjdEJveC53aWR0aCk7eSYmKHk9dC5jb3JlQm94LndpZHRoLHk9RjxjLmxheW91dC5NSU5fQVVYX1dJRFRIPwp5LWMubGF5b3V0Lk1JTl9BVVhfV0lEVEgrdC5pbkV4dHJhY3RCb3gud2lkdGgvMjp5LXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLSh6P0M6MCkseT15LXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0oeD9DOjApLGsoZyhyLCJnIixkLkNsYXNzLlNjZW5lLklORVhUUkFDVCkseSx2KSk7eiYmKHo9dC5jb3JlQm94LndpZHRoLHo9RjxjLmxheW91dC5NSU5fQVVYX1dJRFRIP3otYy5sYXlvdXQuTUlOX0FVWF9XSURUSCt0Lm91dEV4dHJhY3RCb3gud2lkdGgvMjp6LXQub3V0RXh0cmFjdEJveC53aWR0aC8yLHo9ei10LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgtKHg/QzowKSxrKGcociwiZyIsZC5DbGFzcy5TY2VuZS5PVVRFWFRSQUNUKSx6LHYpKTt4JiYodD10LmNvcmVCb3gud2lkdGgtdC5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoLzIsayhnKHIsImciLGQuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSksdCx2KSl9ZnVuY3Rpb24gayhyLAp0LHYpe251bGwhPXIuYXR0cigidHJhbnNmb3JtIikmJihyPXIudHJhbnNpdGlvbigicG9zaXRpb24iKSk7ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIit2KyIpIil9ZnVuY3Rpb24gbihyLHQpe3JldHVybiB0P3IudG9GaXhlZCgwKToxPD1NYXRoLmFicyhyKT9yLnRvRml4ZWQoMSk6ci50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIHAocix0LHYseSl7bGV0IHo9IkRldmljZTogIityLmRldmljZV9uYW1lKyJcbiI7eis9ImR0eXBlOiAiK3IuZHR5cGUrIlxuIjtsZXQgeD0iKHNjYWxhcikiOzA8ci5zaGFwZS5sZW5ndGgmJih4PSIoIityLnNoYXBlLmpvaW4oIiwiKSsiKSIpO3o9eisoIlxuc2hhcGU6ICIreCsiXG5cbiMoZWxlbWVudHMpOiAiKSsodCsiXG4iKTtyPVtdO2Zvcih0PTA7dDx2Lmxlbmd0aDt0KyspMDx2W3RdJiZyLnB1c2goIiMoIitkLmhlYWx0aFBpbGxFbnRyaWVzW3RdLmxhYmVsKyIpOiAiK3ZbdF0pO3orPXIuam9pbigiLCAiKSsiXG5cbiI7eS5tYXg+PQp5Lm1pbiYmKHorPSJtaW46ICIreS5taW4rIiwgbWF4OiAiK3kubWF4KyJcbiIseis9Im1lYW46ICIreS5tZWFuKyIsIHN0ZGRldjogIit5LnN0ZGRldik7cmV0dXJuIHp9ZnVuY3Rpb24gcShyLHQsdix5LHo9NjAseD0xMCxDPTAsRil7ZDMuc2VsZWN0KHIucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKTtpZih0KXt2YXIgRD10LnZhbHVlLEI9RC5zbGljZSgyLDgpLEk9QlswXSxPPUJbMV0sUD1CWzVdLEg9RFsxXSxLPXttaW46RFs4XSxtYXg6RFs5XSxtZWFuOkRbMTBdLHN0ZGRldjpNYXRoLnNxcnQoRFsxMV0pfTtudWxsPT16JiYoej02MCk7bnVsbD09eCYmKHg9MTApO251bGw9PUMmJihDPTApO251bGwhPXYmJnYubm9kZS50eXBlPT09YS5ncmFwaC5Ob2RlVHlwZS5PUCYmKHovPTIseC89Mik7RD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJnIik7RC5jbGFzc0xpc3QuYWRkKCJoZWFsdGgtcGlsbCIpO3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhkLlNWR19OQU1FU1BBQ0UsCiJkZWZzIik7RC5hcHBlbmRDaGlsZChNKTt2YXIgTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJsaW5lYXJHcmFkaWVudCIpO3k9ImhlYWx0aC1waWxsLWdyYWRpZW50LSIreTtMLnNldEF0dHJpYnV0ZSgiaWQiLHkpO3ZhciBSPTAsVT0iMCUiO2ZvcihsZXQgYmE9MDtiYTxCLmxlbmd0aDtiYSsrKWlmKEJbYmFdKXtSKz1CW2JhXTt2YXIgWT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJzdG9wIik7WS5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsVSk7WS5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGQuaGVhbHRoUGlsbEVudHJpZXNbYmFdLmJhY2tncm91bmRfY29sb3IpO0wuYXBwZW5kQ2hpbGQoWSk7VT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJzdG9wIik7WT0xMDAqUi9IKyIlIjtVLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixZKTtVLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZC5oZWFsdGhQaWxsRW50cmllc1tiYV0uYmFja2dyb3VuZF9jb2xvcik7CkwuYXBwZW5kQ2hpbGQoVSk7VT1ZfU0uYXBwZW5kQ2hpbGQoTCk7TT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJyZWN0Iik7TS5zZXRBdHRyaWJ1dGUoImZpbGwiLCJ1cmwoIyIreSsiKSIpO00uc2V0QXR0cmlidXRlKCJ3aWR0aCIsU3RyaW5nKHopKTtNLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixTdHJpbmcoeCkpO00uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoQykpO0QuYXBwZW5kQ2hpbGQoTSk7TT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJ0aXRsZSIpO00udGV4dENvbnRlbnQ9cCh0LEgsQixLKTtELmFwcGVuZENoaWxkKE0pO3Q9ITE7aWYobnVsbCE9diYmKE09di54LXovMix4PXYueS14LXYuaGVpZ2h0LzItMiwwPnYubGFiZWxPZmZzZXQmJih4Kz12LmxhYmVsT2Zmc2V0KSxELnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrTSsiLCAiK3grIikiKSwoQlsyXXx8QlszXXx8Qls0XSkmJih2PXYubm9kZS5hdHRyKSYmCnYubGVuZ3RoKSlmb3IoQj0wO0I8di5sZW5ndGg7QisrKWlmKCJUIj09PXZbQl0ua2V5KXt0PSh2PXZbQl0udmFsdWUudHlwZSkmJi9eRFRfKEJPT0x8SU5UfFVJTlQpLy50ZXN0KHYpO2JyZWFrfXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwidGV4dCIpO2lmKE51bWJlci5pc0Zpbml0ZShLLm1pbikmJk51bWJlci5pc0Zpbml0ZShLLm1heCkpe2lmKEI9bihLLm1pbix0KSxLPW4oSy5tYXgsdCksdi50ZXh0Q29udGVudD0xPEg/QisiIH4gIitLOkIsMDxJfHwwPE98fDA8UCl2LnRleHRDb250ZW50Kz0iICgiLEg9W10sMDxJJiZILnB1c2goYE5hTlx1MDBkNyR7SX1gKSwwPE8mJkgucHVzaChgLVx1MjIxZVx1MDBkNyR7T31gKSwwPFAmJkgucHVzaChgK1x1MjIxZVx1MDBkNyR7UH1gKSx2LnRleHRDb250ZW50Kz1ILmpvaW4oIjsgIikrIikifWVsc2Ugdi50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO3YuY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKTsKbnVsbD09RiYmKEY9ei8yKTt2LnNldEF0dHJpYnV0ZSgieCIsU3RyaW5nKEYpKTt2LnNldEF0dHJpYnV0ZSgieSIsU3RyaW5nKEMtMikpO0QuYXBwZW5kQ2hpbGQodik7UG9seW1lci5kb20oci5wYXJlbnROb2RlKS5hcHBlbmRDaGlsZChEKX19ZC5TVkdfTkFNRVNQQUNFPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7ZC5DbGFzcz17Tm9kZTp7Q09OVEFJTkVSOiJub2RlcyIsR1JPVVA6Im5vZGUiLFNIQVBFOiJub2Rlc2hhcGUiLENPTE9SX1RBUkdFVDoibm9kZWNvbG9ydGFyZ2V0IixMQUJFTDoibm9kZWxhYmVsIixCVVRUT05fQ09OVEFJTkVSOiJidXR0b25jb250YWluZXIiLEJVVFRPTl9DSVJDTEU6ImJ1dHRvbmNpcmNsZSIsRVhQQU5EX0JVVFRPTjoiZXhwYW5kYnV0dG9uIixDT0xMQVBTRV9CVVRUT046ImNvbGxhcHNlYnV0dG9uIn0sRWRnZTp7Q09OVEFJTkVSOiJlZGdlcyIsR1JPVVA6ImVkZ2UiLExJTkU6ImVkZ2VsaW5lIixSRUZFUkVOQ0VfRURHRToicmVmZXJlbmNlZWRnZSIsClJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIiwKQlJJREdFTk9ERToiYnJpZGdlIixFTExJUFNJU05PREU6ImVsbGlwc2lzIn07ZC5oZWFsdGhQaWxsRW50cmllcz1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMWUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMWUifV07ZC5maXQ9ZnVuY3Rpb24ocix0LHYseSl7dmFyIHo9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgeD1udWxsO3RyeXtpZih4PXQuZ2V0QkJveCgpLDA9PT14LndpZHRoKXJldHVybn1jYXRjaChDKXtyZXR1cm59dD1jLmxheW91dC5QQVJBTVMuZ3JhcGg7ej1kMy56b29tSWRlbnRpdHkuc2NhbGUoLjkqTWF0aC5taW4oei53aWR0aC8KeC53aWR0aCx6LmhlaWdodC94LmhlaWdodCwyKSkudHJhbnNsYXRlKHQucGFkZGluZy5wYWRkaW5nTGVmdCx0LnBhZGRpbmcucGFkZGluZ1RvcCk7ZDMuc2VsZWN0KHIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLmNhbGwodi50cmFuc2Zvcm0seikub24oImVuZC5maXR0ZWQiLCgpPT57di5vbigiZW5kLmZpdHRlZCIsbnVsbCk7eSgpfSl9O2QucGFuVG9Ob2RlPWZ1bmN0aW9uKHIsdCx2LHkpe3Y9ZDMuc2VsZWN0KHQpLnNlbGVjdChgW2RhdGEtbmFtZT0iJHtyfSJdYCkubm9kZSgpO2lmKCF2KXJldHVybiBjb25zb2xlLndhcm4oYHBhblRvTm9kZSgpIGZhaWxlZCBmb3Igbm9kZSBuYW1lICIke3J9ImApLCExO3ZhciB6PXYuZ2V0QkJveCgpLHg9di5nZXRTY3JlZW5DVE0oKTtyPXQuY3JlYXRlU1ZHUG9pbnQoKTt2PXQuY3JlYXRlU1ZHUG9pbnQoKTtyLng9ei54O3IueT16Lnk7di54PXoueCt6LndpZHRoO3YueT16Lnkrei5oZWlnaHQ7cj1yLm1hdHJpeFRyYW5zZm9ybSh4KTt2PQp2Lm1hdHJpeFRyYW5zZm9ybSh4KTt4PShGLEQsQixJKT0+IShGPkImJkQ8SSk7ej10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IEM9ei50b3Arei5oZWlnaHQtMTUwO3JldHVybiB4KHIueCx2Lngsei5sZWZ0LHoubGVmdCt6LndpZHRoLTMyMCl8fHgoci55LHYueSx6LnRvcCxDKT8oeD16LmxlZnQrei53aWR0aC8yLShyLngrdi54KS8yLHI9ei50b3Arei5oZWlnaHQvMi0oci55K3YueSkvMix2PWQzLnpvb21UcmFuc2Zvcm0odCksZDMuc2VsZWN0KHQpLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLmNhbGwoeS50cmFuc2xhdGVCeSx4L3YuayxyL3YuayksITApOiExfTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQ9ZjtkLnNlbGVjdENoaWxkPWc7ZC5idWlsZEdyb3VwPWZ1bmN0aW9uKHIsdCx2LHkpe3k9eXx8ZC5DbGFzcy5TY2VuZS5HUk9VUDtsZXQgej1nKHIsImciLHkpLmVtcHR5KCk7cj1mKHIsImciLHkpO3k9ZihyLCJnIixkLkNsYXNzLlNjZW5lLkNPUkUpO2xldCB4PV8ucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksCihDLEYpPT57Rj10LmNvcmVHcmFwaC5ub2RlKEYpO0YuZXhjbHVkZWR8fEMucHVzaChGKTtyZXR1cm4gQ30sW10pO3Qubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMmJngucmV2ZXJzZSgpO2QuZWRnZS5idWlsZEdyb3VwKHksdC5jb3JlR3JhcGgsdik7ZC5ub2RlLmJ1aWxkR3JvdXAoeSx4LHYpOzA8dC5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/KHk9ZihyLCJnIixkLkNsYXNzLlNjZW5lLklORVhUUkFDVCksZC5ub2RlLmJ1aWxkR3JvdXAoeSx0Lmlzb2xhdGVkSW5FeHRyYWN0LHYpKTpnKHIsImciLGQuQ2xhc3MuU2NlbmUuSU5FWFRSQUNUKS5yZW1vdmUoKTswPHQuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD8oeT1mKHIsImciLGQuQ2xhc3MuU2NlbmUuT1VURVhUUkFDVCksZC5ub2RlLmJ1aWxkR3JvdXAoeSx0Lmlzb2xhdGVkT3V0RXh0cmFjdCx2KSk6ZyhyLCJnIixkLkNsYXNzLlNjZW5lLk9VVEVYVFJBQ1QpLnJlbW92ZSgpOzA8dC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg/Cih5PWYociwiZyIsZC5DbGFzcy5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKSxkLm5vZGUuYnVpbGRHcm91cCh5LHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsdikpOmcociwiZyIsZC5DbGFzcy5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtsKHIsdCk7eiYmci5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSk7cmV0dXJuIHJ9O2QuYWRkR3JhcGhDbGlja0xpc3RlbmVyPWZ1bmN0aW9uKHIsdCl7ZDMuc2VsZWN0KHIpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9O2QudHJhbnNsYXRlPWs7ZC5wb3NpdGlvblJlY3Q9ZnVuY3Rpb24ocix0LHYseSx6KXtyLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LXkvMikuYXR0cigieSIsdi16LzIpLmF0dHIoIndpZHRoIix5KS5hdHRyKCJoZWlnaHQiLHopfTtkLnBvc2l0aW9uVHJpYW5nbGU9ZnVuY3Rpb24ocix0LHYseSx6KXt6Lz0yO3kvPTI7dD1bW3Qsdi16XSxbdCt5LAp2K3pdLFt0LXksdit6XV07ci50cmFuc2l0aW9uKCkuYXR0cigicG9pbnRzIix0Lm1hcCh4PT54LmpvaW4oIiwiKSkuam9pbigiICIpKX07ZC5wb3NpdGlvbkJ1dHRvbj1mdW5jdGlvbihyLHQpe2xldCB2PWMubGF5b3V0LmNvbXB1dGVDWFBvc2l0aW9uT2ZOb2RlU2hhcGUodCkrKHQuZXhwYW5kZWQ/dC53aWR0aDp0LmNvcmVCb3gud2lkdGgpLzItNix5PXQueS0odC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0KS8yKzY7dC5ub2RlLnR5cGUhPT1jLk5vZGVUeXBlLlNFUklFU3x8dC5leHBhbmRlZHx8KHYrPTEwLHktPTIpO3Q9InRyYW5zbGF0ZSgiK3YrIiwiK3krIikiO3Iuc2VsZWN0QWxsKCJwYXRoIikudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsdCk7ci5zZWxlY3QoImNpcmNsZSIpLnRyYW5zaXRpb24oKS5hdHRyKHtjeDp2LGN5OnkscjpjLmxheW91dC5QQVJBTVMubm9kZVNpemUubWV0YS5leHBhbmRCdXR0b25SYWRpdXN9KX07ZC5wb3NpdGlvbkVsbGlwc2U9CmZ1bmN0aW9uKHIsdCx2LHkseil7ci50cmFuc2l0aW9uKCkuYXR0cigiY3giLHQpLmF0dHIoImN5Iix2KS5hdHRyKCJyeCIseS8yKS5hdHRyKCJyeSIsei8yKX07ZC5odW1hbml6ZUhlYWx0aFBpbGxTdGF0PW47ZC5hZGRIZWFsdGhQaWxsPXE7ZC5hZGRIZWFsdGhQaWxscz1mdW5jdGlvbihyLHQsdil7aWYodCl7dmFyIHk9MTtkMy5zZWxlY3Qocikuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24oeil7Y29uc3QgeD10W3oubm9kZS5uYW1lXTtxKHRoaXMseD94W3ZdOm51bGwseix5KyspfSl9fX0pKGMuc2NlbmV8fChjLnNjZW5lPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoLWNvbW1vbi90ZW1wbGF0ZS5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKHEpe2xldCByPV8ubWFwKHtkZXB0aDpxLmRlcHRoLCJ8VnwiOnEubWV0YWdyYXBoLm5vZGVzKCkubGVuZ3RoLCJ8RXwiOnEubWV0YWdyYXBoLmVkZ2VzKCkubGVuZ3RofSxmdW5jdGlvbih0LHYpe3JldHVybiB2KyJceDNkIit0fSkuam9pbigiICIpO3E9Xy5tYXAocS5vcEhpc3RvZ3JhbSxmdW5jdGlvbih0LHYpe3JldHVybiB2KyJceDNkIit0fSkuam9pbigiLCIpO3JldHVybiByKyIgW29wc10gIitxfWZ1bmN0aW9uIGcocSl7Y29uc3Qgcj1xLmdldE5vZGVNYXAoKTtsZXQgdD1PYmplY3Qua2V5cyhyKS5yZWR1Y2UoKHYseSk9Pntjb25zdCB6PXJbeV07aWYoei50eXBlIT09Yy5Ob2RlVHlwZS5NRVRBKXJldHVybiB2O3k9eS5zcGxpdCgiLyIpLmxlbmd0aC0xO2xldCB4PWYoeiksQz12W3hdfHx7bm9kZXM6W10sbGV2ZWw6eX07dlt4XT1DO0Mubm9kZXMucHVzaCh6KTtDLmxldmVsPnkmJihDLmxldmVsPQp5KTtyZXR1cm4gdn0se30pO3JldHVybiBPYmplY3Qua2V5cyh0KS5tYXAodj0+W3YsdFt2XV0pLmZpbHRlcigoWyx2XSk9Pnsoe25vZGVzOnZ9PXYpO2lmKDE8di5sZW5ndGgpcmV0dXJuITA7dj12WzBdO3JldHVybiB2LnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEmJnYuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoWyx2XSk9PnYubm9kZXNbMF0uZGVwdGgpfWZ1bmN0aW9uIGwocSxyKXtyZXR1cm4gXy5yZWR1Y2UocSxmdW5jdGlvbih0LHYpe2xldCB5PXZbMF0sej1bXTt2WzFdLm5vZGVzLmZvckVhY2goZnVuY3Rpb24oeCl7Zm9yKGxldCBDPTA7Qzx6Lmxlbmd0aDtDKyspaWYoIXJ8fG4oeltDXS5tZXRhbm9kZS5tZXRhZ3JhcGgseC5tZXRhZ3JhcGgpKXt4LnRlbXBsYXRlSWQ9eltDXS5tZXRhbm9kZS50ZW1wbGF0ZUlkO3pbQ10ubWVtYmVycy5wdXNoKHgubmFtZSk7cmV0dXJufXgudGVtcGxhdGVJZD15KyJbIit6Lmxlbmd0aCsiXSI7ei5wdXNoKHttZXRhbm9kZTp4LG1lbWJlcnM6W3gubmFtZV19KX0pOwp6LmZvckVhY2goZnVuY3Rpb24oeCl7dFt4Lm1ldGFub2RlLnRlbXBsYXRlSWRdPXtsZXZlbDp2WzFdLmxldmVsLG5vZGVzOngubWVtYmVyc319KTtyZXR1cm4gdH0se30pfWZ1bmN0aW9uIGsocSxyLHQpe3JldHVybiBfLnNvcnRCeShxLFt2PT5yLm5vZGUodikub3Asdj0+ci5ub2RlKHYpLnRlbXBsYXRlSWQsdj0+ci5uZWlnaGJvcnModikubGVuZ3RoLHY9PnIucHJlZGVjZXNzb3JzKHYpLmxlbmd0aCx2PT5yLnN1Y2Nlc3NvcnModikubGVuZ3RoLHY9PnYuc3Vic3RyKHQubGVuZ3RoKV0pfWZ1bmN0aW9uIG4ocSxyKXtmdW5jdGlvbiB0KEksTyl7bGV0IFA9SS5zdWJzdHIodi5sZW5ndGgpLEg9Ty5zdWJzdHIoeS5sZW5ndGgpO2lmKHpbUF1eeFtIXSlyZXR1cm4gY29uc29sZS53YXJuKCJkaWZmZXJlbnQgdmlzaXQgcGF0dGVybiIsIlsiK3YrIl0iLFAsIlsiK3krIl0iLEgpLCEwO3pbUF18fCh6W1BdPXhbSF09ITAsQy5wdXNoKHtuMTpJLG4yOk99KSk7cmV0dXJuITF9aWYoIWEuZ3JhcGguaGFzU2ltaWxhckRlZ3JlZVNlcXVlbmNlKHEsCnIpKXJldHVybiExO2xldCB2PXEuZ3JhcGgoKS5uYW1lLHk9ci5ncmFwaCgpLm5hbWUsej17fSx4PXt9LEM9W107dmFyIEY9cS5zb3VyY2VzKCksRD1yLnNvdXJjZXMoKTtpZihGLmxlbmd0aCE9PUQubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiZGlmZmVyZW50IHNvdXJjZSBsZW5ndGgiKSwhMTtGPWsoRixxLHYpO0Q9ayhELHIseSk7Zm9yKHZhciBCPTA7QjxGLmxlbmd0aDtCKyspaWYodChGW0JdLERbQl0pKXJldHVybiExO2Zvcig7MDxDLmxlbmd0aDspe0Q9Qy5wb3AoKTtpZighcChxLm5vZGUoRC5uMSksci5ub2RlKEQubjIpKSlyZXR1cm4hMTtGPXEuc3VjY2Vzc29ycyhELm4xKTtEPXIuc3VjY2Vzc29ycyhELm4yKTtpZihGLmxlbmd0aCE9PUQubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixGLEQpLCExO0Y9ayhGLHEsdik7RD1rKEQscix5KTtmb3IoQj0wO0I8Ri5sZW5ndGg7QisrKWlmKHQoRltCXSxEW0JdKSlyZXR1cm4hMX1yZXR1cm4hMH0KZnVuY3Rpb24gcChxLHIpe2lmKHEudHlwZT09PWMuTm9kZVR5cGUuTUVUQSlyZXR1cm4gcS50ZW1wbGF0ZUlkJiZyLnRlbXBsYXRlSWQmJnEudGVtcGxhdGVJZD09PXIudGVtcGxhdGVJZDtpZihxLnR5cGU9PT1jLk5vZGVUeXBlLk9QJiZyLnR5cGU9PT1jLk5vZGVUeXBlLk9QKXJldHVybiBxLm9wPT09ci5vcDtpZihxLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUyYmci50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMpe2xldCB0PXEubWV0YWdyYXBoLm5vZGVDb3VudCgpO3JldHVybiB0PT09ci5tZXRhZ3JhcGgubm9kZUNvdW50KCkmJigwPT09dHx8cS5tZXRhZ3JhcGgubm9kZShxLm1ldGFncmFwaC5ub2RlcygpWzBdKS5vcD09PXIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3ApfXJldHVybiExfWQuZGV0ZWN0PWZ1bmN0aW9uKHEscil7cT1nKHEpO2xldCB0PWwocSxyKTtyZXR1cm4gT2JqZWN0LmtleXModCkuc29ydCh2PT50W3ZdLmxldmVsKS5yZWR1Y2UoKHYsCnkpPT57dlt5XT10W3ldO3JldHVybiB2fSx7fSl9fSkoYy50ZW1wbGF0ZXx8KGMudGVtcGxhdGU9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29tbW9uL3V0aWwuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZC50aW1lPWZ1bmN0aW9uKGYsZyl7bGV0IGw9RGF0ZS5ub3coKTtnPWcoKTtjb25zb2xlLmxvZyhmLCI6IixEYXRlLm5vdygpLWwsIm1zIik7cmV0dXJuIGd9O2QuZ2V0VHJhY2tlcj1mdW5jdGlvbihmKXtyZXR1cm57c2V0TWVzc2FnZTpmdW5jdGlvbihnKXtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlLG1zZzpnfSl9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKGcpe2Yuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmYucHJvZ3Jlc3MudmFsdWUrZyxtc2c6Zi5wcm9ncmVzcy5tc2d9KX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24oZyxsKXtjb25zb2xlLmVycm9yKGwuc3RhY2spO2Yuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmYucHJvZ3Jlc3MudmFsdWUsbXNnOmcsZXJyb3I6ITB9KX19fTtkLmdldFN1YnRhc2tUcmFja2VyPWZ1bmN0aW9uKGYsZyxsKXtyZXR1cm57c2V0TWVzc2FnZTpmdW5jdGlvbihrKXtmLnNldE1lc3NhZ2UobCsKIjogIitrKX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24oayl7Zi51cGRhdGVQcm9ncmVzcyhrKmcvMTAwKX0scmVwb3J0RXJyb3I6ZnVuY3Rpb24oayxuKXtmLnJlcG9ydEVycm9yKGwrIjogIitrLG4pfX19O2QucnVuVGFzaz1mdW5jdGlvbihmLGcsbCxrKXtrLnNldE1lc3NhZ2UoZik7dHJ5e2xldCBuPWEuZ3JhcGgudXRpbC50aW1lKGYsbCk7ay51cGRhdGVQcm9ncmVzcyhnKTtyZXR1cm4gbn1jYXRjaChuKXtrLnJlcG9ydEVycm9yKCJGYWlsZWQgIitmLG4pfX07ZC5ydW5Bc3luY1Rhc2s9ZnVuY3Rpb24oZixnLGwsayl7cmV0dXJuIG5ldyBQcm9taXNlKG49PntrLnNldE1lc3NhZ2UoZik7c2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcD1hLmdyYXBoLnV0aWwudGltZShmLGwpO2sudXBkYXRlUHJvZ3Jlc3MoZyk7bihwKX1jYXRjaChwKXtrLnJlcG9ydEVycm9yKCJGYWlsZWQgIitmLHApfX0sMjApfSl9O2QucnVuQXN5bmNQcm9taXNlVGFzaz1mdW5jdGlvbihmLGcsbCxrKXtyZXR1cm4gbmV3IFByb21pc2UoKG4sCnApPT57ZnVuY3Rpb24gcShyKXtrLnJlcG9ydEVycm9yKCJGYWlsZWQgIitmLHIpO3Aocil9ay5zZXRNZXNzYWdlKGYpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0cnl7bGV0IHI9RGF0ZS5ub3coKTtsKCkudGhlbihmdW5jdGlvbih0KXtjb25zb2xlLmxvZyhmLCI6IixEYXRlLm5vdygpLXIsIm1zIik7ay51cGRhdGVQcm9ncmVzcyhnKTtuKHQpfSkuY2F0Y2gocSl9Y2F0Y2gocil7cShyKX19LDIwKX0pfTtkLmVzY2FwZVF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX07ZC5NRU1PUllfVU5JVFM9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XTtkLlRJTUVfVU5JVFM9W3tzeW1ib2w6Ilx1MDBiNXMifSwKe3N5bWJvbDoibXMiLG51bVVuaXRzOjFFM30se3N5bWJvbDoicyIsbnVtVW5pdHM6MUUzfSx7c3ltYm9sOiJtaW4iLG51bVVuaXRzOjYwfSx7c3ltYm9sOiJociIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImRheXMiLG51bVVuaXRzOjI0fV07ZC5jb252ZXJ0VW5pdHNUb0h1bWFuUmVhZGFibGU9ZnVuY3Rpb24oZixnLGw9MCl7cmV0dXJuIGwrMTxnLmxlbmd0aCYmZj49Z1tsKzFdLm51bVVuaXRzP2EuZ3JhcGgudXRpbC5jb252ZXJ0VW5pdHNUb0h1bWFuUmVhZGFibGUoZi9nW2wrMV0ubnVtVW5pdHMsZyxsKzEpOk51bWJlcihmLnRvUHJlY2lzaW9uKDMpKSsiICIrZ1tsXS5zeW1ib2x9O2QuaGFzRGlzcGxheWFibGVOb2RlU3RhdHM9ZnVuY3Rpb24oZil7cmV0dXJuIGYmJigwPGYudG90YWxCeXRlc3x8MDxmLmdldFRvdGFsTWljcm9zKCl8fGYub3V0cHV0U2l6ZSk/ITA6ITF9O2QucmVtb3ZlQ29tbW9uUHJlZml4PWZ1bmN0aW9uKGYpe2lmKDI+Zi5sZW5ndGgpcmV0dXJuIGY7bGV0IGc9CjAsbD0wLGs9Xy5taW4oXy5tYXAoZixuPT5uLmxlbmd0aCkpO2Zvcig7Oyl7ZysrO2xldCBuPV8ubWFwKGYscD0+cC5zdWJzdHJpbmcoMCxnKSk7aWYobi5ldmVyeSgocCxxKT0+MD09PXE/ITA6cD09PW5bcS0xXSkpe2lmKGc+PWspcmV0dXJuIGY7bD1nfWVsc2UgYnJlYWt9cmV0dXJuIF8ubWFwKGYsbj0+bi5zdWJzdHJpbmcobCkpfTtkLmNvbXB1dGVIdW1hbkZyaWVuZGx5VGltZT1mdW5jdGlvbihmKXtmPStuZXcgRGF0ZS0rbmV3IERhdGUoZi8xRTMpO3JldHVybiAzRTQ+Zj8ianVzdCBub3ciOjZFND5mP01hdGguZmxvb3IoZi8xRTMpKyIgc2Vjb25kcyBhZ28iOjEyRTQ+Zj8iYSBtaW51dGUgYWdvIjozNkU1PmY/TWF0aC5mbG9vcihmLzZFNCkrIiBtaW51dGVzIGFnbyI6MT09TWF0aC5mbG9vcihmLzM2RTUpPyJhbiBob3VyIGFnbyI6ODY0RTU+Zj9NYXRoLmZsb29yKGYvMzZFNSkrIiBob3VycyBhZ28iOjE3MjhFNT5mPyJ5ZXN0ZXJkYXkiOk1hdGguZmxvb3IoZi84NjRFNSkrIiBkYXlzIGFnbyJ9fSkoYy51dGlsfHwKKGMudXRpbD17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1jb21tb24vbWluaW1hcC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpe2NsYXNzIGR7Y29uc3RydWN0b3IoZixnLGwsayxuLHApe3RoaXMuc3ZnPWY7dGhpcy5sYWJlbFBhZGRpbmc9cDt0aGlzLnpvb21HPWc7dGhpcy5tYWluWm9vbT1sO3RoaXMubWF4V2FuZEg9bjtmPWQzLnNlbGVjdChrLnNoYWRvd1Jvb3QpO2xldCBxPWYuc2VsZWN0KCJzdmciKSxyPXEuc2VsZWN0KCJyZWN0Iik7dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07Zz1kMy5kcmFnKCkuc3ViamVjdChPYmplY3QpLm9uKCJkcmFnIiwoKT0+e3RoaXMudmlld3BvaW50Q29vcmQueD1kMy5ldmVudC54O3RoaXMudmlld3BvaW50Q29vcmQueT1kMy5ldmVudC55O3RoaXMudXBkYXRlVmlld3BvaW50KCl9KTtyLmRhdHVtKHRoaXMudmlld3BvaW50Q29vcmQpLmNhbGwoZyk7cS5vbigiY2xpY2siLCgpPT57aWYoIWQzLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpe3ZhciB0PU51bWJlcihyLmF0dHIoIndpZHRoIikpLHY9TnVtYmVyKHIuYXR0cigiaGVpZ2h0IikpLAp5PWQzLm1vdXNlKHEubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9eVswXS10LzI7dGhpcy52aWV3cG9pbnRDb29yZC55PXlbMV0tdi8yO3RoaXMudXBkYXRlVmlld3BvaW50KCl9fSk7dGhpcy52aWV3cG9pbnQ9ci5ub2RlKCk7dGhpcy5taW5pbWFwU3ZnPXEubm9kZSgpO3RoaXMubWluaW1hcD1rO3RoaXMuY2FudmFzPWYuc2VsZWN0KCJjYW52YXMuZmlyc3QiKS5ub2RlKCk7dGhpcy5jYW52YXNCdWZmZXI9Zi5zZWxlY3QoImNhbnZhcy5zZWNvbmQiKS5ub2RlKCk7dGhpcy5kb3dubG9hZENhbnZhcz1mLnNlbGVjdCgiY2FudmFzLmRvd25sb2FkIikubm9kZSgpO2QzLnNlbGVjdCh0aGlzLmRvd25sb2FkQ2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTt0aGlzLnVwZGF0ZSgpfXVwZGF0ZVZpZXdwb2ludCgpe2QzLnNlbGVjdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCBmPQotdGhpcy52aWV3cG9pbnRDb29yZC54KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwLGc9LXRoaXMudmlld3BvaW50Q29vcmQueSp0aGlzLnNjYWxlTWFpbi90aGlzLnNjYWxlTWluaW1hcDtkMy5zZWxlY3QodGhpcy5zdmcpLmNhbGwodGhpcy5tYWluWm9vbS50cmFuc2Zvcm0sZDMuem9vbUlkZW50aXR5LnRyYW5zbGF0ZShmLGcpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9dXBkYXRlKCl7bGV0IGY9bnVsbDt0cnl7aWYoZj10aGlzLnpvb21HLmdldEJCb3goKSwwPT09Zi53aWR0aClyZXR1cm59Y2F0Y2godCl7cmV0dXJufXZhciBnPWQzLnNlbGVjdCgiI2dyYXBoZG93bmxvYWQiKTt0aGlzLmRvd25sb2FkPWcubm9kZSgpO2cub24oImNsaWNrIiwoKT0+e1VSTC5yZXZva2VPYmplY3RVUkwodGhpcy5kb3dubG9hZC5ocmVmKTt2YXIgdD10aGlzLmRvd25sb2FkQ2FudmFzLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7Y29uc3Qgdj10LnNsaWNlKDAsdC5pbmRleE9mKCIsIikpO2lmKHYuZW5kc1dpdGgoIjtiYXNlNjQiKSl7dmFyIHk9CmF0b2IodC5zbGljZSh0LmluZGV4T2YoIiwiKSsxKSk7dD0obmV3IFVpbnQ4QXJyYXkoeS5sZW5ndGgpKS5tYXAoKHoseCk9PnkuY2hhckNvZGVBdCh4KSk7dGhpcy5kb3dubG9hZC5ocmVmPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3RdLHt0eXBlOiJpbWFnZS9wbmcifSkpfWVsc2UgY29uc29sZS53YXJuKGBub24tYmFzZTY0IGRhdGEgVVJMICgke3Z9KTsgY2Fubm90IHVzZSBibG9iIGRvd25sb2FkYCksdGhpcy5kb3dubG9hZC5ocmVmPXR9KTtnPWQzLnNlbGVjdCh0aGlzLnN2Zyk7dmFyIGw9IiIsaz10aGlzLnN2ZztrPShrLmdldFJvb3ROb2RlP2suZ2V0Um9vdE5vZGUoKTp0aGlzLnN2Zy5wYXJlbnROb2RlKS5zdHlsZVNoZWV0cztmb3IodmFyIG49MDtuPGsubGVuZ3RoO24rKyl0cnl7dmFyIHA9a1tuXS5jc3NSdWxlc3x8a1tuXS5ydWxlcztpZihudWxsIT1wKWZvcihsZXQgdD0wO3Q8cC5sZW5ndGg7dCsrKWwrPXBbdF0uY3NzVGV4dC5yZXBsYWNlKC8gP3RmLVtcdy1dKyA/L2csCiIiKSsiXG4ifWNhdGNoKHQpe2lmKCJTZWN1cml0eUVycm9yIiE9PXQubmFtZSl0aHJvdyB0O31wPWcuYXBwZW5kKCJzdHlsZSIpO3AudGV4dChsKTtsPWQzLnNlbGVjdCh0aGlzLnpvb21HKTtrPWwuYXR0cigidHJhbnNmb3JtIik7bC5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpO2YuaGVpZ2h0Kz1mLnk7Zi53aWR0aCs9Zi54O2YuaGVpZ2h0Kz0yKnRoaXMubGFiZWxQYWRkaW5nO2Yud2lkdGgrPTIqdGhpcy5sYWJlbFBhZGRpbmc7Zy5hdHRyKCJ3aWR0aCIsZi53aWR0aCkuYXR0cigiaGVpZ2h0IixmLmhlaWdodCk7dGhpcy5zY2FsZU1pbmltYXA9dGhpcy5tYXhXYW5kSC9NYXRoLm1heChmLndpZHRoLGYuaGVpZ2h0KTt0aGlzLm1pbmltYXBTaXplPXt3aWR0aDpmLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwLGhlaWdodDpmLmhlaWdodCp0aGlzLnNjYWxlTWluaW1hcH07ZDMuc2VsZWN0KHRoaXMubWluaW1hcFN2ZykuYXR0cih0aGlzLm1pbmltYXBTaXplKTtkMy5zZWxlY3QodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7Cm49ZDMuc2VsZWN0KHRoaXMuZG93bmxvYWRDYW52YXMpO24uc3R5bGUoIndpZHRoIixmLndpZHRoKTtuLnN0eWxlKCJoZWlnaHQiLGYuaGVpZ2h0KTtuLmF0dHIoIndpZHRoIiwzKmYud2lkdGgpO24uYXR0cigiaGVpZ2h0IiwzKmYuaGVpZ2h0KTtudWxsIT10aGlzLnRyYW5zbGF0ZSYmbnVsbCE9dGhpcy56b29tJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuem9vbSgpKTtsZXQgcT0obmV3IFhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKHRoaXMuc3ZnKTtwLnJlbW92ZSgpO2cuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCk7bC5hdHRyKCJ0cmFuc2Zvcm0iLGspO2xldCByPW5ldyBJbWFnZTtyLm9ubG9hZD0oKT0+e3ZhciB0PXRoaXMuY2FudmFzQnVmZmVyLmdldENvbnRleHQoIjJkIik7dC5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzQnVmZmVyLndpZHRoLHRoaXMuY2FudmFzQnVmZmVyLmhlaWdodCk7dC5kcmF3SW1hZ2UociwwLDAsdGhpcy5taW5pbWFwU2l6ZS53aWR0aCwKdGhpcy5taW5pbWFwU2l6ZS5oZWlnaHQpO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2QzLnNlbGVjdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpO2QzLnNlbGVjdCh0aGlzLmNhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIik7W3RoaXMuY2FudmFzLHRoaXMuY2FudmFzQnVmZmVyXT1bdGhpcy5jYW52YXNCdWZmZXIsdGhpcy5jYW52YXNdfSk7dD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7dC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpO3QuZHJhd0ltYWdlKHIsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfTtyLm9uZXJyb3I9KCk9PntyLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtxXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0XHgzZHV0Zi04In0pKX07ci5zcmM9CiJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldFx4M2R1dGYtOCwiK2VuY29kZVVSSUNvbXBvbmVudChxKX16b29tKGYpe2lmKG51bGwhPXRoaXMuc2NhbGVNaW5pbWFwKXtmJiYodGhpcy50cmFuc2xhdGU9W2YueCxmLnldLHRoaXMuc2NhbGVNYWluPWYuayk7dmFyIGc9dGhpcy5zdmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1kMy5zZWxlY3QodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47dGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtmPWcud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47Zz1nLmhlaWdodCp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsLmF0dHIoIngiLHRoaXMudmlld3BvaW50Q29vcmQueCkuYXR0cigieSIsdGhpcy52aWV3cG9pbnRDb29yZC55KS5hdHRyKCJ3aWR0aCIsCmYpLmF0dHIoImhlaWdodCIsZyk7bD10aGlzLm1pbmltYXBTaXplLndpZHRoO3ZhciBrPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LG49dGhpcy52aWV3cG9pbnRDb29yZC54LHA9dGhpcy52aWV3cG9pbnRDb29yZC55Oy44PihNYXRoLm1pbihNYXRoLm1heCgwLG4rZiksbCktTWF0aC5taW4oTWF0aC5tYXgoMCxuKSxsKSkqKE1hdGgubWluKE1hdGgubWF4KDAscCtnKSxrKS1NYXRoLm1pbihNYXRoLm1heCgwLHApLGspKS8obCprKT90aGlzLm1pbmltYXAuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik6dGhpcy5taW5pbWFwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX19Yy5NaW5pbWFwPWR9KShhLnNjZW5lfHwoYS5zY2VuZT17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoL3RmLWdyYXBoLW1pbmltYXAuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZ3JhcGgtbWluaW1hcCIsaW5pdDpmdW5jdGlvbihhLGMsZCxmLGcpe3JldHVybiBuZXcgdGYuc2NlbmUuTWluaW1hcChhLGMsZCx0aGlzLGYsZyl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgvdGYtZ3JhcGgtc2NlbmUuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZ3JhcGgtc2NlbmUiLHByb3BlcnRpZXM6e3JlbmRlckhpZXJhcmNoeTpPYmplY3QsbmFtZTpTdHJpbmcsY29sb3JCeTpTdHJpbmcsdHJhY2VJbnB1dHM6Qm9vbGVhbixfaGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U6Qm9vbGVhbixfaXNBdHRhY2hlZDpCb29sZWFuLF96b29tOk9iamVjdCxoaWdobGlnaHRlZE5vZGU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaGlnaGxpZ2h0ZWROb2RlQ2hhbmdlZCJ9LHNlbGVjdGVkTm9kZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9zZWxlY3RlZE5vZGVDaGFuZ2VkIn0saGFuZGxlRWRnZVNlbGVjdGVkOk9iamVjdCxfem9vbWVkOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9vblpvb21DaGFuZ2VkIix2YWx1ZTohMX0sX3pvb21TdGFydENvb3Jkczp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX3pvb21UcmFuc2Zvcm06e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9tYXhab29tRGlzdGFuY2VGb3JDbGljazp7dHlwZTpOdW1iZXIsCnZhbHVlOjIwfSx0ZW1wbGF0ZUluZGV4OkZ1bmN0aW9uLG1pbmltYXA6T2JqZWN0LF9ub2RlR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9hbm5vdGF0aW9uR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9lZGdlR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LG1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6OX0sbWluTWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo2fSxtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250Ont0eXBlOk51bWJlcix2YWx1ZToxMX0sbWF4TWV0YW5vZGVMYWJlbExlbmd0aDp7dHlwZTpOdW1iZXIsdmFsdWU6MTh9LHByb2dyZXNzOk9iamVjdCxub2RlQ29udGV4dE1lbnVJdGVtczpBcnJheSxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCwKaGVhbHRoUGlsbFN0ZXBJbmRleDpOdW1iZXJ9LG9ic2VydmVyczpbIl9jb2xvckJ5Q2hhbmdlZChjb2xvckJ5KSIsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkKHJlbmRlckhpZXJhcmNoeSkiLCJfYW5pbWF0ZUFuZEZpdChfaXNBdHRhY2hlZCwgcmVuZGVySGllcmFyY2h5KSIsIl91cGRhdGVIZWFsdGhQaWxscyhub2RlTmFtZXNUb0hlYWx0aFBpbGxzLCBoZWFsdGhQaWxsU3RlcEluZGV4KSIsIl91cGRhdGVJbnB1dFRyYWNlKHRyYWNlSW5wdXRzLCBzZWxlY3RlZE5vZGUpIl0sZ2V0Tm9kZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZShhKX0saXNOb2RlRXhwYW5kZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXhwYW5kZWR9LHNldE5vZGVFeHBhbmRlZDpmdW5jdGlvbigpe3RoaXMuX2J1aWxkKHRoaXMucmVuZGVySGllcmFyY2h5KTt0aGlzLl91cGRhdGVMYWJlbHMoIXRoaXMuX3pvb21lZCl9LHBhblRvTm9kZShhKXt0Zi5ncmFwaC5zY2VuZS5wYW5Ub05vZGUoYSwKdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9LGdldEdyYXBoU3ZnUm9vdCgpe3JldHVybiB0aGlzLiQuc3ZnfSxnZXRDb250ZXh0TWVudSgpe3JldHVybiB0aGlzLiQuY29udGV4dE1lbnV9LF9yZXNldFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e307dGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e307dGhpcy5fZWRnZUdyb3VwSW5kZXg9e307dGhpcy5fdXBkYXRlTGFiZWxzKCExKTtkMy5zZWxlY3QodGhpcy4kLnN2Zykuc2VsZWN0KCIjcm9vdCIpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO3RmLmdyYXBoLnNjZW5lLm5vZGUucmVtb3ZlR3JhZGllbnREZWZpbml0aW9ucyh0aGlzLiQuc3ZnKX0sX2J1aWxkOmZ1bmN0aW9uKGEpe3RoaXMudGVtcGxhdGVJbmRleD1hLmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCk7dGYuZ3JhcGgudXRpbC50aW1lKCJ0Zi1ncmFwaC1zY2VuZSAobGF5b3V0KToiLGZ1bmN0aW9uKCl7dGYuZ3JhcGgubGF5b3V0LmxheW91dFNjZW5lKGEucm9vdCwKdGhpcyl9LmJpbmQodGhpcykpO3RmLmdyYXBoLnV0aWwudGltZSgidGYtZ3JhcGgtc2NlbmUgKGJ1aWxkIHNjZW5lKToiLGZ1bmN0aW9uKCl7dGYuZ3JhcGguc2NlbmUuYnVpbGRHcm91cChkMy5zZWxlY3QodGhpcy4kLnJvb3QpLGEucm9vdCx0aGlzKTt0Zi5ncmFwaC5zY2VuZS5hZGRHcmFwaENsaWNrTGlzdGVuZXIodGhpcy4kLnN2Zyx0aGlzKTt0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcykpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVIZWFsdGhQaWxscyh0aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMsdGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4KTt0aGlzLm1pbmltYXAudXBkYXRlKCl9LmJpbmQodGhpcyksdGYuZ3JhcGgubGF5b3V0LlBBUkFNUy5hbmltYXRpb24uZHVyYXRpb24pfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX3pvb209ZDMuem9vbSgpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7dGhpcy5fem9vbVN0YXJ0Q29vcmRzJiYoTWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LQp0aGlzLl96b29tVHJhbnNmb3JtLngsMikrTWF0aC5wb3codGhpcy5fem9vbVN0YXJ0Q29vcmRzLnktdGhpcy5fem9vbVRyYW5zZm9ybS55LDIpKTx0aGlzLl9tYXhab29tRGlzdGFuY2VGb3JDbGljaz90aGlzLl9maXJlRW5hYmxlQ2xpY2soKTpzZXRUaW1lb3V0KHRoaXMuX2ZpcmVFbmFibGVDbGljay5iaW5kKHRoaXMpLDUwKSk7dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09ZDMuZXZlbnQudHJhbnNmb3JtO3RoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKTt0aGlzLl96b29tZWQ9ITA7ZDMuc2VsZWN0KHRoaXMuJC5yb290KS5hdHRyKCJ0cmFuc2Zvcm0iLGQzLmV2ZW50LnRyYW5zZm9ybSk7dGhpcy5taW5pbWFwLnpvb20oZDMuZXZlbnQudHJhbnNmb3JtKX0uYmluZCh0aGlzKSk7CmQzLnNlbGVjdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKTtkMy5zZWxlY3Qod2luZG93KS5vbigicmVzaXplIixmdW5jdGlvbigpe3RoaXMubWluaW1hcC56b29tKCl9LmJpbmQodGhpcykpO3RoaXMubWluaW1hcD10aGlzLiQubWluaW1hcC5pbml0KHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLm1pbmltYXAuc2l6ZSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITEpfSxfcmVuZGVySGllcmFyY2h5Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMTt0aGlzLl9yZXNldFN0YXRlKCk7dGhpcy5fYnVpbGQoYSl9LF9hbmltYXRlQW5kRml0OmZ1bmN0aW9uKGEpeyF0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSYmCmEmJnNldFRpbWVvdXQodGhpcy5maXQuYmluZCh0aGlzKSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLmFuaW1hdGlvbi5kdXJhdGlvbil9LF91cGRhdGVMYWJlbHM6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy4kJCgiLnRpdGxlIiksZD1jLnN0eWxlLGY9dGhpcy4kJCgiLmF1eFRpdGxlIiksZz1mLnN0eWxlLGw9dGhpcy4kJCgiLmZ1bmN0aW9uTGlicmFyeVRpdGxlIikuc3R5bGU7Y29uc3Qgaz1kMy5zZWxlY3QodGhpcy4kLnN2Zyk7dmFyIG49ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuQ09SRSkubm9kZSgpO2lmKGEmJm4mJnRoaXMucHJvZ3Jlc3MmJjEwMD09PXRoaXMucHJvZ3Jlc3MudmFsdWUpe2E9ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fGsuc2VsZWN0KCIuIisKdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuR1JPVVArIlx4M2UuIit0Zi5ncmFwaC5zY2VuZS5DbGFzcy5TY2VuZS5PVVRFWFRSQUNUKS5ub2RlKCk7dmFyIHA9bi5nZXRDVE0oKS5lO249YT9hLmdldENUTSgpLmU6bnVsbDtkLmRpc3BsYXk9ImlubGluZSI7ZC5sZWZ0PXArInB4IjtudWxsIT09biYmbiE9PXA/KGcuZGlzcGxheT0iaW5saW5lIixuPU1hdGgubWF4KHArYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxuKSxnLmxlZnQ9bisicHgiKTpnLmRpc3BsYXk9Im5vbmUiO2M9KGM9ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSkubm9kZSgpKT9jLmdldENUTSgpLmU6bnVsbDtudWxsIT09YyYmYyE9PW4/KGwuZGlzcGxheT0iaW5saW5lIixjPU1hdGgubWF4KG4rZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxjKSxsLmxlZnQ9YysicHgiKToKbC5kaXNwbGF5PSJub25lIn1lbHNlIGQuZGlzcGxheT0ibm9uZSIsZy5kaXNwbGF5PSJub25lIixsLmRpc3BsYXk9Im5vbmUifSxfY29sb3JCeUNoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsIT10aGlzLnJlbmRlckhpZXJhcmNoeSYmKF8uZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwoYSxjKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShjKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9LGZpdDpmdW5jdGlvbigpe3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlPSEwO3RmLmdyYXBoLnNjZW5lLmZpdCh0aGlzLiQuc3ZnLHRoaXMuJC5yb290LHRoaXMuX3pvb20sZnVuY3Rpb24oKXt0aGlzLl96b29tZWQ9ITF9LmJpbmQodGhpcykpfSxpc05vZGVTZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PXRoaXMuc2VsZWN0ZWROb2RlfSxpc05vZGVIaWdobGlnaHRlZDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PXRoaXMuaGlnaGxpZ2h0ZWROb2RlfSxhZGRBbm5vdGF0aW9uR3JvdXA6ZnVuY3Rpb24oYSwKYyxkKXthPWEubm9kZS5uYW1lO3RoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2FdPXRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2FdfHx7fTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFthXVtjLm5vZGUubmFtZV09ZH0sZ2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFthXX0scmVtb3ZlQW5ub3RhdGlvbkdyb3VwOmZ1bmN0aW9uKGEsYyl7ZGVsZXRlIHRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2Eubm9kZS5uYW1lXVtjLm5vZGUubmFtZV19LGFkZE5vZGVHcm91cDpmdW5jdGlvbihhLGMpe3RoaXMuX25vZGVHcm91cEluZGV4W2FdPWN9LGdldE5vZGVHcm91cDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbYV19LHJlbW92ZU5vZGVHcm91cDpmdW5jdGlvbihhKXtkZWxldGUgdGhpcy5fbm9kZUdyb3VwSW5kZXhbYV19LGFkZEVkZ2VHcm91cDpmdW5jdGlvbihhLGMpe3RoaXMuX2VkZ2VHcm91cEluZGV4W2FdPQpjfSxnZXRFZGdlR3JvdXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2VkZ2VHcm91cEluZGV4W2FdfSxfdXBkYXRlSGVhbHRoUGlsbHM6ZnVuY3Rpb24oYSxjKXt0Zi5ncmFwaC5zY2VuZS5hZGRIZWFsdGhQaWxscyh0aGlzLiQuc3ZnLGEsYyl9LF91cGRhdGVOb2RlU3RhdGU6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5nZXROb2RlKGEpLGQ9dGhpcy5nZXROb2RlR3JvdXAoYSk7ZCYmdGYuZ3JhcGguc2NlbmUubm9kZS5zdHlsaXplKGQsYyx0aGlzKTtjLm5vZGUudHlwZT09PXRmLmdyYXBoLk5vZGVUeXBlLk1FVEEmJmMubm9kZS5hc3NvY2lhdGVkRnVuY3Rpb24mJiFjLmlzTGlicmFyeUZ1bmN0aW9uJiYoZD1kMy5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSsnIGdbZGF0YS1uYW1lXHgzZCInKyh0Zi5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYKwpjLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uKSsnIl0nKSx0Zi5ncmFwaC5zY2VuZS5ub2RlLnN0eWxpemUoZCxjLHRoaXMpKTtfLmVhY2godGhpcy5nZXRBbm5vdGF0aW9uR3JvdXBzSW5kZXgoYSksZj0+e3RmLmdyYXBoLnNjZW5lLm5vZGUuc3R5bGl6ZShmLGMsdGhpcyx0Zi5ncmFwaC5zY2VuZS5DbGFzcy5Bbm5vdGF0aW9uLk5PREUpfSl9LF9zZWxlY3RlZE5vZGVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7aWYoYSE9PWMmJihjJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoYyksYSkpe3RoaXMubWluaW1hcC51cGRhdGUoKTtjPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKGEpO2Zvcih2YXIgZD1bXTtudWxsIT1jLnBhcmVudE5vZGUmJmMucGFyZW50Tm9kZS5uYW1lIT10Zi5ncmFwaC5ST09UX05BTUU7KWM9Yy5wYXJlbnROb2RlLGQucHVzaChjLm5hbWUpO3ZhciBmO18uZm9yRWFjaFJpZ2h0KGQsZz0+e3RoaXMucmVuZGVySGllcmFyY2h5LmJ1aWxkU3ViaGllcmFyY2h5KGcpOwpnPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoZyk7Zy5ub2RlLmlzR3JvdXBOb2RlJiYhZy5leHBhbmRlZCYmKGcuZXhwYW5kZWQ9ITAsZnx8KGY9ZykpfSk7ZiYmKHRoaXMuc2V0Tm9kZUV4cGFuZGVkKGYpLHRoaXMuX3pvb21lZD0hMCk7YSYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKGEpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLnBhblRvTm9kZShhKX0sdGYuZ3JhcGgubGF5b3V0LlBBUkFNUy5hbmltYXRpb24uZHVyYXRpb24pfX0sX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQ6ZnVuY3Rpb24oYSxjKXthIT09YyYmKGEmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShhKSxjJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoYykpfSxfb25ab29tQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX0sX2ZpcmVFbmFibGVDbGljazpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZW5hYmxlLWNsaWNrIil9LF91cGRhdGVJbnB1dFRyYWNlOmZ1bmN0aW9uKCl7dGYuZ3JhcGguc2NlbmUubm9kZS51cGRhdGVJbnB1dFRyYWNlKHRoaXMuZ2V0R3JhcGhTdmdSb290KCksCnRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoL3RmLWdyYXBoLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWdyYXBoIixwcm9wZXJ0aWVzOntncmFwaEhpZXJhcmNoeTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfZ3JhcGhDaGFuZ2VkIn0sYmFzaWNHcmFwaDpPYmplY3Qsc3RhdHM6T2JqZWN0LGRldmljZXNGb3JTdGF0czpPYmplY3QsaGllcmFyY2h5UGFyYW1zOk9iamVjdCxwcm9ncmVzczp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSx0aXRsZTpTdHJpbmcsc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGVjdGVkRWRnZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxfbGFzdFNlbGVjdGVkRWRnZUdyb3VwOk9iamVjdCxoaWdobGlnaHRlZE5vZGU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sY29sb3JCeTpTdHJpbmcsY29sb3JCeVBhcmFtczp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxyZW5kZXJIaWVyYXJjaHk6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sdHJhY2VJbnB1dHM6Qm9vbGVhbiwKbm9kZUNvbnRleHRNZW51SXRlbXM6QXJyYXksX3JlbmRlckRlcHRoOnt0eXBlOk51bWJlcix2YWx1ZToxfSxfYWxsb3dHcmFwaFNlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCxoZWFsdGhQaWxsU3RlcEluZGV4Ok51bWJlcixlZGdlV2lkdGhGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6IiJ9LGhhbmRsZU5vZGVTZWxlY3RlZDp7dHlwZTpPYmplY3QsdmFsdWU6IiJ9LGVkZ2VMYWJlbEZ1bmN0aW9uOnt0eXBlOk9iamVjdCx2YWx1ZToiIn0saGFuZGxlRWRnZVNlbGVjdGVkOnt0eXBlOk9iamVjdCx2YWx1ZToiIn19LG9ic2VydmVyczpbIl9zdGF0c0NoYW5nZWQoc3RhdHMsIGRldmljZXNGb3JTdGF0cykiLCJfYnVpbGROZXdSZW5kZXJIaWVyYXJjaHkoZ3JhcGhIaWVyYXJjaHksIGVkZ2VXaWR0aEZ1bmN0aW9uLCBoYW5kbGVOb2RlU2VsZWN0ZWQsIGVkZ2VMYWJlbEZ1bmN0aW9uLCBoYW5kbGVFZGdlU2VsZWN0ZWQpIiwiX3NlbGVjdGVkTm9kZUNoYW5nZWQoc2VsZWN0ZWROb2RlKSIsCiJfc2VsZWN0ZWRFZGdlQ2hhbmdlZChzZWxlY3RlZEVkZ2UpIl0scGFuVG9Ob2RlKGEpe3RoaXMuJCQoInRmLWdyYXBoLXNjZW5lIikucGFuVG9Ob2RlKGEpfSxfYnVpbGROZXdSZW5kZXJIaWVyYXJjaHkoYSl7YSYmdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkoYSl9LF9zdGF0c0NoYW5nZWQ6ZnVuY3Rpb24oYSxjKXt0aGlzLmdyYXBoSGllcmFyY2h5JiYoYSYmYyYmKHRmLmdyYXBoLmpvaW5TdGF0c0luZm9XaXRoR3JhcGgodGhpcy5iYXNpY0dyYXBoLGEsYyksdGYuZ3JhcGguaGllcmFyY2h5LmpvaW5BbmRBZ2dyZWdhdGVTdGF0cyh0aGlzLmdyYXBoSGllcmFyY2h5KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfSxfYnVpbGRSZW5kZXJIaWVyYXJjaHk6ZnVuY3Rpb24oYSl7dGYuZ3JhcGgudXRpbC50aW1lKCJuZXcgdGYuZ3JhcGgucmVuZGVyLkhpZXJhcmNoeSIsZnVuY3Rpb24oKXtmdW5jdGlvbiBjKGYpe3JldHVybnttaW5WYWx1ZTpmLmRvbWFpbigpWzBdLAptYXhWYWx1ZTpmLmRvbWFpbigpWzFdLHN0YXJ0Q29sb3I6Zi5yYW5nZSgpWzBdLGVuZENvbG9yOmYucmFuZ2UoKVsxXX19aWYoYS5yb290LnR5cGU9PT10Zi5ncmFwaC5Ob2RlVHlwZS5NRVRBKXt2YXIgZD1uZXcgdGYuZ3JhcGgucmVuZGVyLlJlbmRlckdyYXBoSW5mbyhhLCEhdGhpcy5zdGF0cyk7ZC5lZGdlTGFiZWxGdW5jdGlvbj10aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uO2QuZWRnZVdpZHRoRnVuY3Rpb249dGhpcy5lZGdlV2lkdGhGdW5jdGlvbjt0aGlzLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6YyhkLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpjKGQubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOl8ubWFwKGQuZGV2aWNlQ29sb3JNYXAuZG9tYWluKCksZnVuY3Rpb24oZil7cmV0dXJue2RldmljZTpmLGNvbG9yOmQuZGV2aWNlQ29sb3JNYXAoZil9fSkseGxhX2NsdXN0ZXI6Xy5tYXAoZC54bGFDbHVzdGVyQ29sb3JNYXAuZG9tYWluKCksZnVuY3Rpb24oZil7cmV0dXJue3hsYV9jbHVzdGVyOmYsCmNvbG9yOmQueGxhQ2x1c3RlckNvbG9yTWFwKGYpfX0pfSk7dGhpcy5fc2V0UmVuZGVySGllcmFyY2h5KGQpO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmZpcmUoInJlbmRlcmVkIil9KX19LmJpbmQodGhpcykpfSxfZ2V0VmlzaWJsZTpmdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKGEpOmF9LGxpc3RlbmVyczp7ImdyYXBoLXNlbGVjdCI6Il9ncmFwaFNlbGVjdGVkIiwiZGlzYWJsZS1jbGljayI6Il9kaXNhYmxlQ2xpY2siLCJlbmFibGUtY2xpY2siOiJfZW5hYmxlQ2xpY2siLCJub2RlLXRvZ2dsZS1leHBhbmQiOiJfbm9kZVRvZ2dsZUV4cGFuZCIsIm5vZGUtc2VsZWN0IjoiX25vZGVTZWxlY3RlZCIsIm5vZGUtaGlnaGxpZ2h0IjoiX25vZGVIaWdobGlnaHRlZCIsIm5vZGUtdW5oaWdobGlnaHQiOiJfbm9kZVVuaGlnaGxpZ2h0ZWQiLCJub2RlLXRvZ2dsZS1leHRyYWN0IjoiX25vZGVUb2dnbGVFeHRyYWN0IiwKIm5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwIjoiX25vZGVUb2dnbGVTZXJpZXNHcm91cCIsImVkZ2Utc2VsZWN0IjoiX2VkZ2VTZWxlY3RlZCIsImFubm90YXRpb24tc2VsZWN0IjoiX25vZGVTZWxlY3RlZCIsImFubm90YXRpb24taGlnaGxpZ2h0IjoiX25vZGVIaWdobGlnaHRlZCIsImFubm90YXRpb24tdW5oaWdobGlnaHQiOiJfbm9kZVVuaGlnaGxpZ2h0ZWQifSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuZml0KCl9LF9ncmFwaENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImdyYXBoLXNlbGVjdCIpfSxfZ3JhcGhTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSk7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH0sX2Rpc2FibGVDbGljazpmdW5jdGlvbigpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9LF9lbmFibGVDbGljazpmdW5jdGlvbigpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9CiEwfSxfc2VsZWN0ZWROb2RlQ2hhbmdlZChhKXt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQoYSl9LF9zZWxlY3RlZEVkZ2VDaGFuZ2VkKGEpe3RoaXMuX2Rlc2VsZWN0UHJldmlvdXNFZGdlKCk7YSYmKHRoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5jbGFzc2VkKHRmLmdyYXBoLnNjZW5lLkNsYXNzLkVkZ2UuU0VMRUNURUQsITApLHRoaXMuX3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKGEpKTt0aGlzLmhhbmRsZUVkZ2VTZWxlY3RlZCYmdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQoYSl9LF9ub2RlU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsYS5kZXRhaWwubmFtZSk7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH0sX2VkZ2VTZWxlY3RlZChhKXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0JiYodGhpcy5zZXQoIl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAiLGEuZGV0YWlsLmVkZ2VHcm91cCksCnRoaXMuc2V0KCJzZWxlY3RlZEVkZ2UiLGEuZGV0YWlsLmVkZ2VEYXRhKSk7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH0sX25vZGVIaWdobGlnaHRlZDpmdW5jdGlvbihhKXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIixhLmRldGFpbC5uYW1lKX0sX25vZGVVbmhpZ2hsaWdodGVkOmZ1bmN0aW9uKCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9LF9ub2RlVG9nZ2xlRXhwYW5kOmZ1bmN0aW9uKGEpe3RoaXMuX25vZGVTZWxlY3RlZChhKTthPWEuZGV0YWlsLm5hbWU7dmFyIGM9dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZShhKTtjLm5vZGUudHlwZSE9PXRmLmdyYXBoLk5vZGVUeXBlLk9QJiYodGhpcy5yZW5kZXJIaWVyYXJjaHkuYnVpbGRTdWJoaWVyYXJjaHkoYSksYy5leHBhbmRlZD0hYy5leHBhbmRlZCx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy4kLnNjZW5lLnNldE5vZGVFeHBhbmRlZChjKX0sNzUpKX0sX25vZGVUb2dnbGVFeHRyYWN0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZVRvZ2dsZUV4dHJhY3QoYS5kZXRhaWwubmFtZSl9LApub2RlVG9nZ2xlRXh0cmFjdDpmdW5jdGlvbihhKXthPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoYSk7YS5ub2RlLmluY2x1ZGU9YS5ub2RlLmluY2x1ZGU9PXRmLmdyYXBoLkluY2x1c2lvblR5cGUuSU5DTFVERT90Zi5ncmFwaC5JbmNsdXNpb25UeXBlLkVYQ0xVREU6YS5ub2RlLmluY2x1ZGU9PXRmLmdyYXBoLkluY2x1c2lvblR5cGUuRVhDTFVERT90Zi5ncmFwaC5JbmNsdXNpb25UeXBlLklOQ0xVREU6dGhpcy5yZW5kZXJIaWVyYXJjaHkuaXNOb2RlQXV4aWxpYXJ5KGEpP3RmLmdyYXBoLkluY2x1c2lvblR5cGUuSU5DTFVERTp0Zi5ncmFwaC5JbmNsdXNpb25UeXBlLkVYQ0xVREU7dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSl9LF9ub2RlVG9nZ2xlU2VyaWVzR3JvdXA6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlVG9nZ2xlU2VyaWVzR3JvdXAoYS5kZXRhaWwubmFtZSl9LG5vZGVUb2dnbGVTZXJpZXNHcm91cDpmdW5jdGlvbihhKXt0Zi5ncmFwaC50b2dnbGVOb2RlU2VyaWVzR3JvdXAodGhpcy5oaWVyYXJjaHlQYXJhbXMuc2VyaWVzTWFwLAphKTt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3RmLmdyYXBoLmhpZXJhcmNoeS5idWlsZCh0aGlzLmJhc2ljR3JhcGgsdGhpcy5oaWVyYXJjaHlQYXJhbXMsdGYuZ3JhcGgudXRpbC5nZXRTdWJ0YXNrVHJhY2tlcih0Zi5ncmFwaC51dGlsLmdldFRyYWNrZXIodGhpcyksMTAwLCJOYW1lc3BhY2UgaGllcmFyY2h5IikpLnRoZW4oZnVuY3Rpb24oYyl7dGhpcy5zZXQoImdyYXBoSGllcmFyY2h5IixjKTt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0aGlzLmdyYXBoSGllcmFyY2h5KX0uYmluZCh0aGlzKSl9LF9kZXNlbGVjdFByZXZpb3VzRWRnZSgpe2QzLnNlbGVjdCgiLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuRWRnZS5TRUxFQ1RFRCkuY2xhc3NlZCh0Zi5ncmFwaC5zY2VuZS5DbGFzcy5FZGdlLlNFTEVDVEVELCExKS5lYWNoKGE9PntpZihhLmxhYmVsKXtjb25zdCBjPWQzLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTthLmxhYmVsLnN0YXJ0TWFya2VySWQmJgpjLnN0eWxlKCJtYXJrZXItc3RhcnQiLGB1cmwoIyR7YS5sYWJlbC5zdGFydE1hcmtlcklkfSlgKTthLmxhYmVsLmVuZE1hcmtlcklkJiZjLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2EubGFiZWwuZW5kTWFya2VySWR9KWApfX0pfSxfdXBkYXRlTWFya2VyT2ZTZWxlY3RlZEVkZ2UoYSl7aWYoYS5sYWJlbCl7dmFyIGM9YS5sYWJlbC5zdGFydE1hcmtlcklkfHxhLmxhYmVsLmVuZE1hcmtlcklkO2lmKGMpe2NvbnN0IGQ9Yy5yZXBsYWNlKCJkYXRhZmxvdy0iLCJzZWxlY3RlZC0iKTtsZXQgZj10aGlzLiQkKCIjIitkKTtmfHwoYz10aGlzLiQuc2NlbmUucXVlcnlTZWxlY3RvcigiIyIrYyksZj1jLmNsb25lTm9kZSghMCksZi5zZXRBdHRyaWJ1dGUoImlkIixkKSxmLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkLWFycm93aGVhZCIpLGMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChmKSk7YT1hLmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLApgdXJsKCMke2R9KWApfX19LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4hYX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1sb2FkZXIvdGYtZ3JhcGgtbG9hZGVyLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWdyYXBoLWxvYWRlciIsX3RlbXBsYXRlOm51bGwscHJvcGVydGllczp7ZGF0YXNldHM6QXJyYXksc2VsZWN0ZWREYXRhOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzZWxlY3RlZEZpbGU6T2JqZWN0LGNvbXBhdGliaWxpdHlQcm92aWRlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBhLmdyYXBoLm9wLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlcn0sb3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LHByb2dyZXNzOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG91dEdyYXBoSGllcmFyY2h5Ont0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LG91dEdyYXBoOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LG91dEhpZXJhcmNoeVBhcmFtczp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX2xvYWREYXRhKGRhdGFzZXRzLCBzZWxlY3RlZERhdGEsIG92ZXJyaWRpbmdIaWVyYXJjaHlQYXJhbXMsIGNvbXBhdGliaWxpdHlQcm92aWRlcikiLAoiX2xvYWRGaWxlKHNlbGVjdGVkRmlsZSwgb3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtcywgY29tcGF0aWJpbGl0eVByb3ZpZGVyKSJdLF9sb2FkRGF0YSgpe3RoaXMuZGVib3VuY2UoImxvYWQiLCgpPT57Y29uc3QgZD10aGlzLmRhdGFzZXRzW3RoaXMuc2VsZWN0ZWREYXRhXTtkJiZ0aGlzLl9wYXJzZUFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKGQucGF0aCl9KX0sX3BhcnNlQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoZCxmKXtjb25zdCB7b3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtczpnLGNvbXBhdGliaWxpdHlQcm92aWRlcjpsfT10aGlzO3RoaXMucHJvZ3Jlc3M9e3ZhbHVlOjAsbXNnOiIifTtjb25zdCBrPWEuZ3JhcGgudXRpbC5nZXRUcmFja2VyKHRoaXMpLG49T2JqZWN0LmFzc2lnbih7fSxhLmdyYXBoLmhpZXJhcmNoeS5EZWZhdWx0SGllcmFyY2h5UGFyYW1zLGcpO2EuZ3JhcGgubG9hZGVyLmZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoaywKZCxmLGwsbikudGhlbigoe2dyYXBoOnAsZ3JhcGhIaWVyYXJjaHk6cX0pPT57dGhpcy5fc2V0T3V0SGllcmFyY2h5UGFyYW1zKG4pO3RoaXMuX3NldE91dEdyYXBoKHApO3RoaXMuX3NldE91dEdyYXBoSGllcmFyY2h5KHEpfSl9LF9sb2FkRmlsZShkKXtpZihkKXtkPWQudGFyZ2V0O3ZhciBmPWQuZmlsZXNbMF07ZiYmKGQudmFsdWU9IiIsdGhpcy5fcGFyc2VBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLGYpKX19fSl9KShjLmxvYWRlcnx8KGMubG9hZGVyPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWRlYnVnZ2VyLWRhc2hib2FyZC9oZWFsdGgtcGlsbHMuanMKdmFyIGdwOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhnLGwpe2lmKG51bGw9PWcpdGhyb3cgRXJyb3IoYE1pc3NpbmcgcmVmVmFsdWUgZm9yIGNvbmRpdGlvbiAoJHtsfSkuYCk7fWZ1bmN0aW9uIGQoZyl7cmV0dXJuIG51bGw9PWd8fDA9PWcubGVuZ3RofHwxIT09Z1swXX1jb25zdCBmPXtJTkZfT1JfTkFOOntkZXNjcmlwdGlvbjoiQ29udGFpbnMgKy8tXHUyMjFlIG9yIE5hTiIscHJlZGljYXRlOmc9PjA8Z1syXXx8MDxnWzNdfHwwPGdbN119LElORjp7ZGVzY3JpcHRpb246IkNvbnRhaW5zICsvLVx1MjIxZSIscHJlZGljYXRlOmc9PjA8Z1szXXx8MDxnWzddfSxOQU46e2Rlc2NyaXB0aW9uOiJDb250YWlucyBOYU4iLHByZWRpY2F0ZTpnPT4wPGdbMl19LE1BWF9HVDp7ZGVzY3JpcHRpb246Ik1heCBceDNlIixwcmVkaWNhdGU6KGcsbCk9PntjKGwsIk1BWF9HVCIpO3JldHVybiBnWzldPmx9fSxNQVhfTFQ6e2Rlc2NyaXB0aW9uOiJNYXggXHgzYyIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNQVhfTFQiKTsKcmV0dXJuIGdbOV08bH19LE1JTl9HVDp7ZGVzY3JpcHRpb246Ik1pbiBceDNlIixwcmVkaWNhdGU6KGcsbCk9PntjKGwsIk1JTl9HVCIpO3JldHVybiBnWzhdPmx9fSxNSU5fTFQ6e2Rlc2NyaXB0aW9uOiJNaW4gXHgzYyIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNSU5fTFQiKTtyZXR1cm4gZ1s4XTxsfX0sTUVBTl9HVDp7ZGVzY3JpcHRpb246Ik1lYW4gXHgzZSIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNRUFOX0dUIik7cmV0dXJuIGdbMTBdPmx9fSxNRUFOX0xUOntkZXNjcmlwdGlvbjoiTWVhbiBceDNjIixwcmVkaWNhdGU6KGcsbCk9PntjKGwsIk1FQU5fTFQiKTtyZXR1cm4gZ1sxMF08bH19LFJBTkdFX0dUOntkZXNjcmlwdGlvbjoiTWF4IC0gTWluIFx4M2UiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiUkFOR0VfR1QiKTtyZXR1cm4gZ1s5XS1nWzhdPmx9fSxSQU5HRV9MVDp7ZGVzY3JpcHRpb246Ik1heCAtIE1pbiBceDNjIixwcmVkaWNhdGU6KGcsbCk9PntjKGwsIlJBTkdFX0xUIik7CnJldHVybiBnWzldLWdbOF08bH19LFNURERFVl9HVDp7ZGVzY3JpcHRpb246IlN0YW5kYXJkIGRldmlhdGlvbiBceDNlIixwcmVkaWNhdGU6KGcsbCk9PntjKGwsIlNURERFVl9HVCIpO3JldHVybiBNYXRoLnNxcnQoZ1sxMV0pPmx9fSxTVERERVZfTFQ6e2Rlc2NyaXB0aW9uOiJTdGFuZGFyZCBkZXZpYXRpb24gXHgzYyIscHJlZGljYXRlOihnLGwpPT57YyhsLCJTVERERVZfTFQiKTtyZXR1cm4gTWF0aC5zcXJ0KGdbMTFdKTxsfX19O2EudGVuc29yQ29uZGl0aW9uRGVzY3JpcHRpb24yS2V5PWZ1bmN0aW9uKGcpe2Zvcihjb25zdCBsIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShsKSYmZltsXS5kZXNjcmlwdGlvbj09PWcpcmV0dXJuIGw7cmV0dXJuIG51bGx9O2EuY2hlY2tIZWFsdGhQaWxsQWdhaW5zdFRlbnNvckNvbmRpdGlvbktleT1mdW5jdGlvbihnLGwsayl7aWYoZChsKSlyZXR1cm4hMTtnPWZbZ10ucHJlZGljYXRlO3JldHVybiBnKGwsayl9fSkoZ3B8fChncD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi1kZWJ1Z2dlci1jb250aW51ZS1kaWFsb2cuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGVidWdnZXItY29udGludWUtZGlhbG9nIixwcm9wZXJ0aWVzOntjb250aW51ZU51bTp7dHlwZTpOdW1iZXIsdmFsdWU6NX0sc2Vzc2lvblJ1bkdvOkZ1bmN0aW9uLHRlbnNvckNvbmRpdGlvbkdvOkZ1bmN0aW9uLGZvcmNlQ29udGludWF0aW9uU3RvcDpGdW5jdGlvbixfY29udGludWVCdXR0b25UZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiQ29udGludWUuLi4ifSxfY29udGludWVCdXR0b25Db250aW51ZVRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJDb250aW51ZS4uLiIscmVhZG9ubHk6ITB9LF9jb250aW51ZUJ1dHRvblN0b3BUZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiU3RvcCBDb250aW51YXRpb24iLHJlYWRvbmx5OiEwfSxfc2VsZWN0ZWRUZW5zb3JDb25kaXRpb246U3RyaW5nLF90ZW5zb3JDb25kaXRpb25SZWZWYWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LF9pc1JlZlZhbHVlSW5wdXRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCwKbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX29uU2VsZWN0ZWRUZW5zb3JDb25kaXRpb25DaGFuZ2VkKF9zZWxlY3RlZFRlbnNvckNvbmRpdGlvbikiXSxub3RpZnlDb250aW51YXRpb25TdG9wKCl7dGhpcy51cGRhdGVDb250aW51ZUJ1dHRvblRleHQoITEpfSxfb3BlbkRpYWxvZygpe3RoaXMuJC5jb250aW51ZURpYWxvZy5vcGVuKCl9LF9jbG9zZURpYWxvZygpe3RoaXMuJC5jb250aW51ZURpYWxvZy5jbG9zZSgpfSxfY29udGludWVCdXR0b25DYWxsYmFjaygpe3RoaXMuX2NvbnRpbnVlQnV0dG9uVGV4dD09PXRoaXMuX2NvbnRpbnVlQnV0dG9uU3RvcFRleHQ/dGhpcy5mb3JjZUNvbnRpbnVhdGlvblN0b3AoKTp0aGlzLl9vcGVuRGlhbG9nKCl9LHVwZGF0ZUNvbnRpbnVlQnV0dG9uVGV4dChhKXt0aGlzLnNldCgiX2NvbnRpbnVlQnV0dG9uVGV4dCIsYT90aGlzLl9jb250aW51ZUJ1dHRvblN0b3BUZXh0OnRoaXMuX2NvbnRpbnVlQnV0dG9uQ29udGludWVUZXh0KX0sX3Nlc3Npb25SdW5Hb0J1dHRvbkNhbGxiYWNrKCl7MDwKdGhpcy5jb250aW51ZU51bT8odGhpcy5zZXNzaW9uUnVuR28odGhpcy5jb250aW51ZU51bSksdGhpcy51cGRhdGVDb250aW51ZUJ1dHRvblRleHQoITApLHRoaXMuX2Nsb3NlRGlhbG9nKCkpOnRoaXMuc2V0KCJjb250aW51ZU51bSIsMSl9LF90ZW5zb3JDb250aW51ZUdvQnV0dG9uQ2FsbGJhY2soKXtpZihudWxsIT10aGlzLl9zZWxlY3RlZFRlbnNvckNvbmRpdGlvbil7dmFyIGE9Z3AudGVuc29yQ29uZGl0aW9uRGVzY3JpcHRpb24yS2V5KHRoaXMuX3NlbGVjdGVkVGVuc29yQ29uZGl0aW9uKTtudWxsPT1hJiZjb25zb2xlLmVycm9yKCJJbnZhbGlkIFRlbnNvciBDb25kaXRpb24gbmFtZToiK3RoaXMuX3NlbGVjdGVkVGVuc29yQ29uZGl0aW9uKTt2YXIgYz1OdW1iZXIodGhpcy5fdGVuc29yQ29uZGl0aW9uUmVmVmFsdWUpO051bWJlci5pc0Zpbml0ZShjKT8odGhpcy50ZW5zb3JDb25kaXRpb25HbyhhLGMpLHRoaXMudXBkYXRlQ29udGludWVCdXR0b25UZXh0KCEwKSx0aGlzLl9jbG9zZURpYWxvZygpKToKdGhpcy5zZXQoIl90ZW5zb3JDb25kaXRpb25SZWZWYWx1ZSIsMCl9fSxfb25TZWxlY3RlZFRlbnNvckNvbmRpdGlvbkNoYW5nZWQoYSl7YT1ncC50ZW5zb3JDb25kaXRpb25EZXNjcmlwdGlvbjJLZXkoYSk7dGhpcy5zZXQoIl9pc1JlZlZhbHVlSW5wdXRIaWRkZW4iLC0xIT09WyJJTkZfT1JfTkFOIiwiSU5GIiwiTkFOIl0uaW5kZXhPZihhKSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLWRlYnVnZ2VyLWluaXRpYWwtZGlhbG9nLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWRlYnVnZ2VyLWluaXRpYWwtZGlhbG9nIixwcm9wZXJ0aWVzOntfdGl0bGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9jdXN0b21NZXNzYWdlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfaGFzQ3VzdG9tTWVzc2FnZTp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUhhc0N1c3RvbU1lc3NhZ2UoX2N1c3RvbU1lc3NhZ2UpIn0sX2hvc3Q6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9wb3J0Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfb3Blbjp7dHlwZTpCb29sZWFufSxfaGlkZGVuOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGlkZGVuKF9vcGVuKSIscmVmbGVjdFRvQXR0cmlidXRlOiEwfX0sb3BlbkRpYWxvZyhhLGMpe3RoaXMuc2V0KCJfdGl0bGUiLCJEZWJ1Z2dlciBpcyB3YWl0aW5nIGZvciBTZXNzaW9uLnJ1bigpIGNvbm5lY3Rpb25zLi4uIik7dGhpcy5zZXQoIl9jdXN0b21NZXNzYWdlIixudWxsKTt0aGlzLiQuZGlhbG9nLm9wZW4oKTsKbnVsbCE9YSYmbnVsbCE9YyYmKHRoaXMuc2V0KCJfaG9zdCIsYSksdGhpcy5zZXQoIl9wb3J0IixjKSl9LGNsb3NlRGlhbG9nKCl7dGhpcy4kLmRpYWxvZy5jbG9zZSgpfSxvcGVuRGlzYWJsZWREaWFsb2coKXt0aGlzLnNldCgiX3RpdGxlIiwiRGVidWdnZXIgaXMgbm90IGVuYWJsZWQgaW4gdGhpcyBUZW5zb3JCb2FyZCBpbnN0YW5jZSIpO3RoaXMuc2V0KCJfY3VzdG9tTWVzc2FnZSIsIlRvIGVuYWJsZSB0aGUgZGVidWdnZXIgaW4gVGVuc29yQm9hcmQsIHVzZSB0aGUgZmxhZzogLS1kZWJ1Z2dlcl9wb3J0IFx4M2Nwb3J0X251bWJlclx4M2UiKTt0aGlzLiQuZGlhbG9nLm9wZW4oKX0sX2NvbXB1dGVIaWRkZW4oYSl7cmV0dXJuIWF9LF9jb21wdXRlSGFzQ3VzdG9tTWVzc2FnZShhKXtyZXR1cm4hXy5pc0VtcHR5KGEpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi1kZWJ1Z2dlci1yZXNpemVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWRlYnVnZ2VyLXJlc2l6ZXIiLHByb3BlcnRpZXM6e2N1cnJlbnRMZW5ndGg6e3R5cGU6TnVtYmVyLG5vdGlmeTohMH0sbWluTGVuZ3RoOk51bWJlcixtYXhMZW5ndGg6TnVtYmVyLGlzSG9yaXpvbnRhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX3Jlc2l6ZXJJZGVudGlmaWVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNWZXJ0aWNhbDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzVmVydGljYWwoaXNIb3Jpem9udGFsKSIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHJlYWRPbmx5OiEwfSxfZHJhZ1N0YXJ0UG9zaXRpb246TnVtYmVyLF9kcmFnU3RhcnRMZW5ndGg6TnVtYmVyLF9wcmV2aW91c01vdXNlTW92ZUNhbGxiYWNrOk9iamVjdCxfcHJldmlvdXNNb3VzZVVwQ2FsbGJhY2s6T2JqZWN0fSxsaXN0ZW5lcnM6e21vdXNlZG93bjoiX2hhbmRsZU1vdXNlRG93biJ9LApfaGFuZGxlTW91c2VEb3duKGEpe2EucHJldmVudERlZmF1bHQoKTt0aGlzLl9lbmREcmFnKCk7dGhpcy5fcHJldmlvdXNNb3VzZU1vdmVDYWxsYmFjaz1jPT57Yy5wcmV2ZW50RGVmYXVsdCgpO2M9dGhpcy5fZHJhZ1N0YXJ0TGVuZ3RoKyh0aGlzLl9nZXRQb3NpdGlvblJlbGF0aXZlVG9WaWV3cG9ydChjKS10aGlzLl9kcmFnU3RhcnRQb3NpdGlvbik7Yz1NYXRoLm1heChjLHRoaXMubWluTGVuZ3RoKTtjPU1hdGgubWluKGMsdGhpcy5tYXhMZW5ndGgpO3RoaXMuc2V0KCJjdXJyZW50TGVuZ3RoIixjKX07dGhpcy5fcHJldmlvdXNNb3VzZVVwQ2FsbGJhY2s9Yz0+e2MucHJldmVudERlZmF1bHQoKTt0aGlzLl9lbmREcmFnKCl9O3RoaXMuc2V0KCJfZHJhZ1N0YXJ0UG9zaXRpb24iLHRoaXMuX2dldFBvc2l0aW9uUmVsYXRpdmVUb1ZpZXdwb3J0KGEpKTt0aGlzLnNldCgiX2RyYWdTdGFydExlbmd0aCIsdGhpcy5jdXJyZW50TGVuZ3RoKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsCnRoaXMuX3ByZXZpb3VzTW91c2VVcENhbGxiYWNrLCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9wcmV2aW91c01vdXNlTW92ZUNhbGxiYWNrLCExKX0sX2dldFBvc2l0aW9uUmVsYXRpdmVUb1ZpZXdwb3J0KGEpe3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbD9hLmNsaWVudFk6YS5jbGllbnRYfSxfZW5kRHJhZygpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3ByZXZpb3VzTW91c2VNb3ZlQ2FsbGJhY2ssITEpO3RoaXMuX3ByZXZpb3VzTW91c2VNb3ZlQ2FsbGJhY2s9bnVsbDt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fcHJldmlvdXNNb3VzZVVwQ2FsbGJhY2ssITEpO3RoaXMuX3ByZXZpb3VzTW91c2VVcENhbGxiYWNrPW51bGx9LF9jb21wdXRlSXNWZXJ0aWNhbChhKXtyZXR1cm4hYX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvc2VsZWN0aW9uLXRyZWUtbm9kZS5qcwooZnVuY3Rpb24oYSl7YS5OT0RFX05BTUVfU0VQQVJBVE9SPSIvIjthLkRFVklDRV9OQU1FX1BBVFRFUk49L15cL2pvYjpbQS1aYS16MC05X10rXC9yZXBsaWNhOlswLTlfXStcL3Rhc2s6WzAtOV0rXC9kZXZpY2U6W0EtWmEtejAtOV9dKzpbMC05XSsvO2xldCBjOyhmdW5jdGlvbihnKXtnW2cuRU1QVFk9MF09IkVNUFRZIjtnW2cuQ0hFQ0tFRD0xXT0iQ0hFQ0tFRCI7Z1tnLlBBUlRJQUw9Ml09IlBBUlRJQUwifSkoYz1hLkNoZWNrYm94U3RhdGV8fChhLkNoZWNrYm94U3RhdGU9e30pKTthLnNwbGl0Tm9kZU5hbWU9ZnVuY3Rpb24oZyl7bGV0IGw9W107Y29uc3Qgaz1nLm1hdGNoKGEuREVWSUNFX05BTUVfUEFUVEVSTik7bnVsbCE9ayYmKGwucHVzaChrWzBdKSwiLyIhPT1nW2tbMF0ubGVuZ3RoXSYmY29uc29sZS5lcnJvcignTm8gc2xhc2ggKCIvIikgYWZ0ZXIgZGV2aWNlIG5hbWUgaW4gbm9kZSBuYW1lOicsZyksZz1nLnNsaWNlKGtbMF0ubGVuZ3RoKzEpKTtyZXR1cm4gbC5jb25jYXQoZy5zcGxpdChhLk5PREVfTkFNRV9TRVBBUkFUT1IpKX07CmEuZ2V0Q2xlYW5Ob2RlTmFtZT1mdW5jdGlvbihnKXtsZXQgbD1nO2NvbnN0IGs9Zy5tYXRjaChhLkRFVklDRV9OQU1FX1BBVFRFUk4pO251bGwhPWs/KGwubGVuZ3RoPmtbMF0ubGVuZ3RoJiYiLyIhPWxba1swXS5sZW5ndGhdJiZjb25zb2xlLmVycm9yKCdObyBzbGFzaCAoIi8iKSBhZnRlciBkZXZpY2UgbmFtZSBpbiBub2RlIG5hbWU6JyxnKSxsPWwuc2xpY2Uoa1swXS5sZW5ndGgrMSkpOiIvIj09PWxbMF0mJihsPWwuc2xpY2UoMSkpO2wuaW5kZXhPZigiKSIpPT09bC5sZW5ndGgtMSYmKGw9bC5zbGljZSgwLGwuaW5kZXhPZigiLygiKSkpO3JldHVybiBsfTthLnNvcnRBbmRCYXNlRXhwYW5kRGVidWdXYXRjaGVzPWZ1bmN0aW9uKGcpe2cuc29ydCgoayxuKT0+ay5ub2RlX25hbWU8bi5ub2RlX25hbWU/LTE6ay5ub2RlX25hbWU+bi5ub2RlX25hbWU/MTprLm91dHB1dF9zbG90LW4ub3V0cHV0X3Nsb3QpO2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7KytrKXt2YXIgbD1nW2tdLm5vZGVfbmFtZSsKIi8iO2xldCBuPSExO2ZvcihsZXQgcD1rKzE7cDxnLmxlbmd0aDsrK3ApaWYoMD09PWdbcF0ubm9kZV9uYW1lLmluZGV4T2YobCkpe249ITA7YnJlYWt9biYmKGw9Z1trXS5ub2RlX25hbWUuc3BsaXQoIi8iKSxnW2tdLm5vZGVfbmFtZSs9Ii8oIitsW2wubGVuZ3RoLTFdKyIpIil9fTthLnJlbW92ZU5vZGVOYW1lQmFzZUV4cGFuc2lvbj1mdW5jdGlvbihnKXtyZXR1cm4gZy5lbmRzV2l0aCgiKSIpP2cuc2xpY2UoMCxnLmxhc3RJbmRleE9mKCIvKCIpKTpnfTthLmFzc2VtYmxlRGV2aWNlQW5kTm9kZU5hbWVzPWZ1bmN0aW9uKGcpe2NvbnN0IGw9W251bGwsbnVsbF07aWYoZ1swXS5tYXRjaChhLkRFVklDRV9OQU1FX1BBVFRFUk4pKXtsZXQgaz1nWzBdOyIvIj09PWtbay5sZW5ndGgtMV0mJihrPWsuc2xpY2UoMCxrLmxlbmd0aC0xKSk7bFswXT1rO2xbMV09Zy5zbGljZSgxKS5qb2luKCIvIil9ZWxzZSBsWzFdPWcuam9pbigiLyIpO3JldHVybiBsfTtsZXQgZDsoZnVuY3Rpb24oZyl7Z1tnLk5vZGVOYW1lPQowXT0iTm9kZU5hbWUiO2dbZy5PcFR5cGU9MV09Ik9wVHlwZSJ9KShkPWEuRGVidWdXYXRjaEZpbHRlck1vZGV8fChhLkRlYnVnV2F0Y2hGaWx0ZXJNb2RlPXt9KSk7YS5maWx0ZXJEZWJ1Z1dhdGNoZXM9ZnVuY3Rpb24oZyxsLGspe2lmKGw9PT1kLk5vZGVOYW1lKXJldHVybiBnLmZpbHRlcihuPT5uLm5vZGVfbmFtZS5tYXRjaChrKSk7aWYobD09PWQuT3BUeXBlKXJldHVybiBnLmZpbHRlcihuPT5uLm9wX3R5cGUubWF0Y2goaykpfTtjbGFzcyBme2NvbnN0cnVjdG9yKGcsbCxrLG4pe3RoaXMuZGVidWdXYXRjaENoYW5nZT1sO3RoaXMuZGVidWdXYXRjaD1uO3RoaXMubmFtZT1nO3RoaXMuZGVidWdXYXRjaD1uO3RoaXMuY2hlY2tib3hTdGF0ZT1jLkVNUFRZO3RoaXMucGFyZW50PWs7dGhpcy5jaGlsZHJlbj17fTt0aGlzLmNoZWNrYm94PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLWNoZWNrYm94Iik7dGhpcy5jaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCgpPT4Ke3RoaXMuX2hhbmRsZUNoYW5nZSgpfSwhMSl9X2hhbmRsZUNoYW5nZSgpe2lmKHRoaXMuYXZvaWRQcm9wYWdhdGlvbil0aGlzLmRlYnVnV2F0Y2gmJnRoaXMuZGVidWdXYXRjaENoYW5nZSh0aGlzLmRlYnVnV2F0Y2gsdGhpcy5pc0NoZWNrYm94Q2hlY2tlZCgpKTtlbHNlIGlmKHRoaXMuZGVidWdXYXRjaCl0aGlzLnNldENoZWNrYm94U3RhdGUodGhpcy5pc0NoZWNrYm94Q2hlY2tlZCgpP2MuQ0hFQ0tFRDpjLkVNUFRZLCEwKSx0aGlzLmlzQ2hlY2tib3hDaGVja2VkKCk/dGhpcy5zZXROb2Rlc0Fib3ZlVG9DaGVja2VkKCk6dGhpcy5zZXROb2Rlc0Fib3ZlVG9FbXB0eSgpLHRoaXMuZGVidWdXYXRjaENoYW5nZSh0aGlzLmRlYnVnV2F0Y2gsdGhpcy5pc0NoZWNrYm94Q2hlY2tlZCgpKTtlbHNlIGlmKHRoaXMuc2V0Q2hlY2tib3hTdGF0ZSh0aGlzLmlzQ2hlY2tib3hDaGVja2VkKCk/Yy5DSEVDS0VEOmMuRU1QVFksITApLHRoaXMuaXNDaGVja2JveENoZWNrZWQoKSl7Y29uc3QgbD1fLnZhbHVlcyh0aGlzLmNoaWxkcmVuKTsKZm9yKDtsLmxlbmd0aDspe3ZhciBnPWwucG9wKCk7Xy5mb3JFYWNoKGcuY2hpbGRyZW4saz0+bC5wdXNoKGspKTtnLnNldENoZWNrYm94U3RhdGUoYy5DSEVDS0VELCEwKX10aGlzLnNldE5vZGVzQWJvdmVUb0NoZWNrZWQoKX1lbHNle2NvbnN0IGw9Xy52YWx1ZXModGhpcy5jaGlsZHJlbik7Zm9yKDtsLmxlbmd0aDspZz1sLnBvcCgpLF8uZm9yRWFjaChnLmNoaWxkcmVuLGs9PmwucHVzaChrKSksZy5zZXRDaGVja2JveFN0YXRlKGMuRU1QVFksITApO3RoaXMuc2V0Tm9kZXNBYm92ZVRvRW1wdHkoKX19aXNMZWFmKCl7cmV0dXJuISF0aGlzLmRlYnVnV2F0Y2h9c2V0VG9BbGxDaGVja2VkRXh0ZXJuYWxseSgpe3RoaXMuc2V0Q2hlY2tib3hTdGF0ZShjLkNIRUNLRUQpO3RoaXMuX2hhbmRsZUNoYW5nZSgpfXNldENoZWNrYm94U3RhdGUoZyxsKXt0aGlzLmF2b2lkUHJvcGFnYXRpb249bDt0aGlzLmNoZWNrYm94U3RhdGU9Zzt0aGlzLmNoZWNrYm94LmNsYXNzTGlzdC50b2dnbGUoInBhcnRpYWwtY2hlY2tib3giLApnPT09Yy5QQVJUSUFMKTtnPT09Yy5DSEVDS0VEP3RoaXMuY2hlY2tib3guc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOnRoaXMuY2hlY2tib3gucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7dGhpcy5hdm9pZFByb3BhZ2F0aW9uPSExfWlzQ2hlY2tib3hDaGVja2VkKCl7cmV0dXJuIHRoaXMuY2hlY2tib3guaGFzQXR0cmlidXRlKCJjaGVja2VkIil9c2V0Tm9kZXNBYm92ZVRvQ2hlY2tlZCgpe2xldCBnPXRoaXMucGFyZW50LGw9ITE7Zm9yKDtnOylsP2cuc2V0Q2hlY2tib3hTdGF0ZShjLlBBUlRJQUwsITApOihsPS0xIT09Xy5maW5kSW5kZXgoXy52YWx1ZXMoZy5jaGlsZHJlbiksaz0+ay5jaGVja2JveFN0YXRlIT09Yy5DSEVDS0VEKSxnLnNldENoZWNrYm94U3RhdGUobD9jLlBBUlRJQUw6Yy5DSEVDS0VELCEwKSksZz1nLnBhcmVudH1zZXROb2Rlc0Fib3ZlVG9FbXB0eSgpe2xldCBnPXRoaXMucGFyZW50LGw9ITE7Zm9yKDtnOylsP2cuc2V0Q2hlY2tib3hTdGF0ZShjLlBBUlRJQUwsCiEwKToobD0tMSE9PV8uZmluZEluZGV4KF8udmFsdWVzKGcuY2hpbGRyZW4pLGs9PmsuY2hlY2tib3hTdGF0ZSE9PWMuRU1QVFkpLGcuc2V0Q2hlY2tib3hTdGF0ZShsP2MuUEFSVElBTDpjLkVNUFRZLCEwKSksZz1nLnBhcmVudH1zZXRMZXZlbERvbShnKXt0aGlzLmxldmVsRG9tPWd9fWEuU2VsZWN0aW9uVHJlZU5vZGU9Zn0pKGdwfHwoZ3A9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtb3Atc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtb3Atc2VsZWN0b3IiLHByb3BlcnRpZXM6e2RlYnVnV2F0Y2hlczpBcnJheSxkZWJ1Z1dhdGNoQ2hhbmdlOk9iamVjdCxub2RlQ2xpY2tlZDpGdW5jdGlvbixmb3JjZUV4cGFuZEFuZENoZWNrTm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZvcmNlRXhwYW5kTm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9zZWxlY3RlZERlYnVnV2F0Y2hNYXBwaW5nOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sX2xldmVsTmFtZTJDb250YWluZXI6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9sZXZlbE5hbWUyTm9kZTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX3dhdGNoSGllcmFyY2h5Ont0eXBlOk9iamVjdCxjb21wdXRlZDoiX2NvbXB1dGVXYXRjaEhpZXJhcmNoeShkZWJ1Z1dhdGNoZXMsIGRlYnVnV2F0Y2hDaGFuZ2UsIF9maWx0ZXJNb2RlLCBfZmlsdGVySW5wdXQpIn0sX2ZpbHRlck1vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJOb2RlIE5hbWUiLApub3RpZnk6ITB9LF9maWx0ZXJJbnB1dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxfaXNMb2FkaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9oaWdobGlnaHRlZExldmVsRG9tOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3JlbmRlckhpZXJhcmNoeVdpdGhUaW1lb3V0KF93YXRjaEhpZXJhcmNoeSwgZGVidWdXYXRjaENoYW5nZSkiLCJfaGFuZGxlRm9yY2VOb2RlRXhwYW5kQW5kQ2hlY2soZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lKSIsIl9oYW5kbGVGb3JjZU5vZGVFeHBhbmQoZm9yY2VFeHBhbmROb2RlTmFtZSkiXSxfY29tcHV0ZVdhdGNoSGllcmFyY2h5KGEsYyxkLGYpe2Y9Zi50cmltKCk7bGV0IGc9YTtudWxsIT1kJiYwPGYubGVuZ3RoJiYoZz1ncC5maWx0ZXJEZWJ1Z1dhdGNoZXMoYSxncC5EZWJ1Z1dhdGNoRmlsdGVyTW9kZVtkLnJlcGxhY2UoL1xzL2csIiIpXSxuZXcgUmVnRXhwKGYpKSk7Y29uc3QgbD1uZXcgZ3AuU2VsZWN0aW9uVHJlZU5vZGUoIiIsCmMpO2wuaXNSb290PSEwO18uZm9yRWFjaChnLGs9Pntjb25zdCBuPWdwLnNwbGl0Tm9kZU5hbWUoay5kZXZpY2VfbmFtZSsiLyIray5ub2RlX25hbWUpO2xldCBwPWw7Xy5mb3JFYWNoKG4sKHEscik9PntyPT09bi5sZW5ndGgtMT8ocj1uZXcgZ3AuU2VsZWN0aW9uVHJlZU5vZGUocSxjLHAsaykscC5jaGlsZHJlbltxXT1yKToocC5jaGlsZHJlbltxXXx8KHAuY2hpbGRyZW5bcV09bmV3IGdwLlNlbGVjdGlvblRyZWVOb2RlKHEsYyxwKSkscD1wLmNoaWxkcmVuW3FdKX0pfSk7cmV0dXJuIGx9LF9jbGVhclNlbGVjdG9ySGllcmFyY2h5KCl7Y29uc3QgYT10aGlzLiQkKCIjc2VsZWN0b3ItaGllcmFyY2h5Iik7Zm9yKDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX0sX3JlbmRlckhpZXJhcmNoeVdpdGhUaW1lb3V0KGEsYyxkLGYpe3RoaXMuX2lzTG9hZGluZ3x8KHRoaXMuc2V0KCJfaXNMb2FkaW5nIiwhMCksdGhpcy5fY2xlYXJTZWxlY3RvckhpZXJhcmNoeSgpLApzZXRUaW1lb3V0KCgpPT57dGhpcy5fcmVuZGVySGllcmFyY2h5KGEsYyxkLGYpfSwxMCkpfSxfcmVuZGVySGllcmFyY2h5KGEsYyl7dGhpcy5zZXQoIl9sZXZlbE5hbWUyQ29udGFpbmVyIix7fSk7dGhpcy5zZXQoIl9sZXZlbE5hbWUyTm9kZSIse30pO2E9dGhpcy5fcmVuZGVyTGV2ZWwobnVsbCxudWxsLGEsYyk7UG9seW1lci5kb20odGhpcy4kJCgiI3NlbGVjdG9yLWhpZXJhcmNoeSIpKS5hcHBlbmRDaGlsZChhKTt0aGlzLnNldCgiX2lzTG9hZGluZyIsITEpfSxfcmVuZGVyTGV2ZWwoYSxjLGQsZil7Y29uc3QgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtudWxsIT1hJiZnLnNldEF0dHJpYnV0ZSgibGV2ZWwtbmFtZSIsYSk7bGV0IGw7bD1udWxsPT1jP2E6YysiLyIrYTtQb2x5bWVyLmRvbShnKS5jbGFzc0xpc3QuYWRkKCJsZXZlbC1jb250YWluZXIiKTtjb25zdCBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tY29sbGFwc2UiKTtpZihhKXt0aGlzLl9sZXZlbE5hbWUyQ29udGFpbmVyW2xdPQprO2sucmVtb3ZlQXR0cmlidXRlKCJvcGVuZWQiKTtQb2x5bWVyLmRvbShnKS5jbGFzc0xpc3QuYWRkKCJpbmRlbnRlZC1sZXZlbC1jb250YWluZXIiKTtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1BvbHltZXIuZG9tKGMpLmNsYXNzTGlzdC5hZGQoImxldmVsLXRpdGxlIik7Y29uc3QgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1pY29uLWJ1dHRvbiIpO1BvbHltZXIuZG9tKHEpLmNsYXNzTGlzdC5hZGQoIm5vZGUtZXhwYW5kLWJ1dHRvbiIpO2NvbnN0IHI9KCk9PntxLnNldEF0dHJpYnV0ZSgiaWNvbiIsay5oYXNBdHRyaWJ1dGUoIm9wZW5lZCIpPyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIil9O3EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57ay5oYXNBdHRyaWJ1dGUoIm9wZW5lZCIpP2sucmVtb3ZlQXR0cmlidXRlKCJvcGVuZWQiKTprLnNldEF0dHJpYnV0ZSgib3BlbmVkIiwhMCk7cigpfSwhMSk7cigpO1BvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKHEpOwpQb2x5bWVyLmRvbShjKS5hcHBlbmRDaGlsZChkLmNoZWNrYm94KTtkLnNldExldmVsRG9tKGMpO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO1BvbHltZXIuZG9tKHQpLmNsYXNzTGlzdC5hZGQoImxldmVsLXRpdGxlLXRleHQiKTt0LnRleHRDb250ZW50PWE7UG9seW1lci5kb20oYykuYXBwZW5kQ2hpbGQodCk7UG9seW1lci5kb20oZykuYXBwZW5kQ2hpbGQoYyk7KGEubWF0Y2goZ3AuREVWSUNFX05BTUVfUEFUVEVSTil8fDE9PT1PYmplY3Qua2V5cyhkLmNoaWxkcmVuKS5sZW5ndGgpJiZrLnNldEF0dHJpYnV0ZSgib3BlbmVkIiwhMCl9ZWxzZSBrLnNldEF0dHJpYnV0ZSgib3BlbmVkIiwhMCk7Y29uc3Qgbj1bXSxwPVtdO1BvbHltZXIuZG9tKGspLmNsYXNzTGlzdC5hZGQoImNvbnRlbnQtY29udGFpbmVyIik7Xy5mb3JFYWNoKGQuY2hpbGRyZW4sKHEscik9Pntjb25zdCB0PXEuZGVidWdXYXRjaDt2YXIgdj1sO251bGw9PWwmJih2PSIiKTt2Kz0iLyIrcjsKdGhpcy5fbGV2ZWxOYW1lMk5vZGVbdl09cTtudWxsIT10aGlzLl9zZWxlY3RlZERlYnVnV2F0Y2hNYXBwaW5nW3ZdJiYocS5zZXRDaGVja2JveFN0YXRlKGdwLkNoZWNrYm94U3RhdGUuQ0hFQ0tFRCkscS5zZXROb2Rlc0Fib3ZlVG9DaGVja2VkKCkpO2lmKHQpe3Y9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7UG9seW1lci5kb20odikuY2xhc3NMaXN0LmFkZCgib3AtZGVzY3JpcHRpb24iKTtxLmNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsej0+e3RoaXMuX2hhbmRsZUxlYWZOb2RlU2VsZWN0ZWQoZix0LHoudGFyZ2V0LmNoZWNrZWQpfSwhMSk7UG9seW1lci5kb20odikuYXBwZW5kQ2hpbGQocS5jaGVja2JveCk7cS5zZXRMZXZlbERvbSh2KTt2YXIgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7eS50ZXh0Q29udGVudD0iWyIrdC5vcF90eXBlKyJdIjt5LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJvcC10eXBlIik7UG9seW1lci5kb20odikuYXBwZW5kQ2hpbGQoeSk7Cnk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3kudGV4dENvbnRlbnQ9cjt5LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJvcC10aXRsZS1sZWFmIik7eS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pntjb25zdCB6PXRoaXMuX2dldERldmljZUFuZE5vZGVOYW1lcyhyLGcpO3RoaXMubm9kZUNsaWNrZWQoelswXSx6WzFdKX0sITEpO1BvbHltZXIuZG9tKHYpLmFwcGVuZENoaWxkKHkpO3AucHVzaCh2KX1lbHNlIHEuY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix6PT57dGhpcy5faGFuZGxlTWV0YU5vZGVDaGFuZ2UocSxmLHoudGFyZ2V0LmNoZWNrZWQpfSksbi5wdXNoKHRoaXMuX3JlbmRlckxldmVsKHIsbCxxLGYpKX0pO2E9cT0+e1BvbHltZXIuZG9tKGspLmFwcGVuZENoaWxkKHEpfTtfLmZvckVhY2gocCxhKTtfLmZvckVhY2gobixhKTtQb2x5bWVyLmRvbShnKS5hcHBlbmRDaGlsZChrKTtyZXR1cm4gZ30sX2dldExlYWZEZWJ1Z1dhdGNoZXMoYSxjKXthLmRlYnVnV2F0Y2g/CmMucHVzaChhLmRlYnVnV2F0Y2gpOl8uZm9yRWFjaChhLmNoaWxkcmVuLGQ9Pnt0aGlzLl9nZXRMZWFmRGVidWdXYXRjaGVzKGQsYyl9KX0sX2dldERldmljZUFuZE5vZGVOYW1lcyhhLGMpe2ZvcihhPVthXTs7KXtjb25zdCBkPWMuZ2V0QXR0cmlidXRlKCJsZXZlbC1uYW1lIik7aWYobnVsbD09ZClicmVhaztlbHNlIGEucHVzaChkKTtjPVBvbHltZXIuZG9tKGMpLnBhcmVudE5vZGUucGFyZW50Tm9kZX1hLnJldmVyc2UoKTtyZXR1cm4gZ3AuYXNzZW1ibGVEZXZpY2VBbmROb2RlTmFtZXMoYSl9LF9oYW5kbGVNZXRhTm9kZUNoYW5nZShhLGMsZCl7bGV0IGY9W107dGhpcy5fZ2V0TGVhZkRlYnVnV2F0Y2hlcyhhLGYpO18uZm9yRWFjaChmLGc9Pnt0aGlzLl9oYW5kbGVMZWFmTm9kZVNlbGVjdGVkKGMsZyxkKX0pfSxfaGFuZGxlTGVhZk5vZGVTZWxlY3RlZChhLGMsZCl7Y29uc3QgZj1jLmRldmljZV9uYW1lKyIvIitjLm5vZGVfbmFtZTtkP3RoaXMuX3NlbGVjdGVkRGVidWdXYXRjaE1hcHBpbmdbZl09CmM6ZGVsZXRlIHRoaXMuX3NlbGVjdGVkRGVidWdXYXRjaE1hcHBpbmdbZl07YShjLGQpfSxfaGFuZGxlRm9yY2VOb2RlKGEsYyl7dGhpcy5zZXQoIl9maWx0ZXJJbnB1dCIsIiIpO3NldFRpbWVvdXQoKCk9PntpZihudWxsIT1hJiZudWxsIT10aGlzLl9sZXZlbE5hbWUyQ29udGFpbmVyKXt2YXIgZD1ncC5zcGxpdE5vZGVOYW1lKGEpO2ZvcihsZXQgZz0xO2c8PWQubGVuZ3RoOysrZyl7dmFyIGY9ZC5zbGljZSgwLGcpLmpvaW4oIi8iKTtjb25zdCBsPXRoaXMuX2xldmVsTmFtZTJOb2RlW2ZdO251bGwhPWwmJm51bGwhPWwubGV2ZWxEb20mJmwubGV2ZWxEb20uc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJjZW50ZXIiLGJlaGF2aW91cjoic21vb3RoIn0pO2c8ZC5sZW5ndGg/bnVsbCE9dGhpcy5fbGV2ZWxOYW1lMkNvbnRhaW5lcltmXSYmdGhpcy5fbGV2ZWxOYW1lMkNvbnRhaW5lcltmXS5zZXRBdHRyaWJ1dGUoIm9wZW5lZCIsITApOihsLmRlYnVnV2F0Y2h8fHRoaXMuX2hhbmRsZU1ldGFOb2RlQ2hhbmdlKGwsCmwuZGVidWdXYXRjaENoYW5nZSwhMCksYyYmKGwuc2V0VG9BbGxDaGVja2VkRXh0ZXJuYWxseSgpLChmPWwuZGVidWdXYXRjaCkmJm51bGw9PXRoaXMuX3NlbGVjdGVkRGVidWdXYXRjaE1hcHBpbmdbZi5ub2RlX25hbWVdJiYodGhpcy5fc2VsZWN0ZWREZWJ1Z1dhdGNoTWFwcGluZ1thXT1mKSksbnVsbCE9dGhpcy5faGlnaGxpZ2h0ZWRMZXZlbERvbSYmdGhpcy5faGlnaGxpZ2h0ZWRMZXZlbERvbS5jbGFzc0xpc3QucmVtb3ZlKCJoaWdobGlnaHRlZCIpLGwubGV2ZWxEb20uY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0ZWQiKSx0aGlzLnNldCgiX2hpZ2hsaWdodGVkTGV2ZWxEb20iLGwubGV2ZWxEb20pKX19fSwyMCl9LF9oYW5kbGVGb3JjZU5vZGVFeHBhbmRBbmRDaGVjayhhKXt0aGlzLl9oYW5kbGVGb3JjZU5vZGUoYSwhMCl9LF9oYW5kbGVGb3JjZU5vZGVFeHBhbmQoYSl7dGhpcy5faGFuZGxlRm9yY2VOb2RlKGEsITEpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi1zZXNzaW9uLXJ1bnMtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1zZXNzaW9uLXJ1bnMtdmlldyIscHJvcGVydGllczp7bGF0ZXN0U2Vzc2lvblJ1bjpPYmplY3Qsc2Vzc2lvblJ1bktleVRvRGV2aWNlTmFtZXM6T2JqZWN0LHNvbGVBY3RpdmU6Qm9vbGVhbixub2RlT3JUZW5zb3JDbGlja2VkOkZ1bmN0aW9uLF9ydW5LZXkyQ291bnQ6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfcnVuS2V5Mk51bURldmljZXM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfYWN0aXZlUnVuS2V5OlN0cmluZ30sb2JzZXJ2ZXJzOlsicmVuZGVyTGF0ZXN0KGxhdGVzdFNlc3Npb25SdW4pIiwic2V0U29sZUFjdGl2ZVN0YXR1cyhzb2xlQWN0aXZlKSJdLHJlbmRlckxhdGVzdChhKXthPUpTT04uc3RyaW5naWZ5KGEpO3RoaXMuX3J1bktleTJDb3VudFthXT12b2lkIDA9PT10aGlzLl9ydW5LZXkyQ291bnRbYV0/MTp0aGlzLl9ydW5LZXkyQ291bnRbYV0rMTt2b2lkIDA9PT10aGlzLl9ydW5LZXkyTnVtRGV2aWNlc1thXSYmKHRoaXMuX3J1bktleTJOdW1EZXZpY2VzW2FdPQowKTt0aGlzLl9hY3RpdmVSdW5LZXk9YTt0aGlzLl9yZW5kZXJTZXNzaW9uUnVuVGFibGUoKX0sdXBkYXRlTnVtRGV2aWNlcyhhKXtudWxsIT10aGlzLl9hY3RpdmVSdW5LZXkmJih0aGlzLl9ydW5LZXkyTnVtRGV2aWNlc1t0aGlzLl9hY3RpdmVSdW5LZXldPWEsdGhpcy5fcmVuZGVyU2Vzc2lvblJ1blRhYmxlKCkpfSxzZXRTb2xlQWN0aXZlU3RhdHVzKCl7dGhpcy5fcmVuZGVyU2Vzc2lvblJ1blRhYmxlKCl9LF9yZW5kZXJTZXNzaW9uUnVuVGFibGUoKXt0aGlzLl9jbGVhclRhYmxlKCk7dGhpcy5fcmVuZGVySGVhZGVyKCk7bGV0IGE7Zm9yKGNvbnN0IGQgaW4gdGhpcy5fcnVuS2V5MkNvdW50KWlmKHRoaXMuX3J1bktleTJDb3VudC5oYXNPd25Qcm9wZXJ0eShkKSl7dmFyIGM9SlNPTi5wYXJzZShkKTsoYz10aGlzLl9yZW5kZXJSb3coYyx0aGlzLl9ydW5LZXkyTnVtRGV2aWNlc1tkXSx0aGlzLl9ydW5LZXkyQ291bnRbZF0sdGhpcy5fYWN0aXZlUnVuS2V5PT09ZCx0aGlzLnNvbGVBY3RpdmUpKSYmCihhPWMpfWEmJihQb2x5bWVyLmRvbSh0aGlzLiQkKCIjc2Vzc2lvbi1ydW5zLXRhYmxlIikpLnBhcmVudE5vZGUucGFyZW50Tm9kZS5zY3JvbGxUb3A9YS5vZmZzZXRUb3ApfSxfY2xlYXJUYWJsZSgpe2NvbnN0IGE9dGhpcy4kJCgiI3Nlc3Npb24tcnVucy10YWJsZSIpO2Zvcig7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCl9LF9yZW5kZXJIZWFkZXIoKXtjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpO2MudGV4dENvbnRlbnQ9IkZlZWRzIjtjb25zdCBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7ZC50ZXh0Q29udGVudD0iRmV0Y2hlcyI7Y29uc3QgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpO2YudGV4dENvbnRlbnQ9IlRhcmdldHMiO2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTtnLnRleHRDb250ZW50PSIjKERldmljZXMpIjtjb25zdCBsPQpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpO2wudGV4dENvbnRlbnQ9IkNvdW50IjthLmFwcGVuZENoaWxkKGMpO2EuYXBwZW5kQ2hpbGQoZCk7YS5hcHBlbmRDaGlsZChmKTthLmFwcGVuZENoaWxkKGcpO2EuYXBwZW5kQ2hpbGQobCk7UG9seW1lci5kb20odGhpcy4kJCgiI3Nlc3Npb24tcnVucy10YWJsZSIpKS5hcHBlbmRDaGlsZChhKX0sX3JlbmRlclJvdyhhLGMsZCxmLGcpe2NvbnN0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxrPXRoaXMuX3JlbmRlckdyYXBoRWxlbWVudHMoYS5mZWVkcyksbj10aGlzLl9yZW5kZXJHcmFwaEVsZW1lbnRzKGEuZmV0Y2hlcyk7YT10aGlzLl9yZW5kZXJHcmFwaEVsZW1lbnRzKGEudGFyZ2V0cyk7Y29uc3QgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3AudGV4dENvbnRlbnQ9YztjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Yy50ZXh0Q29udGVudD1kO2wuYXBwZW5kQ2hpbGQoayk7bC5hcHBlbmRDaGlsZChuKTsKbC5hcHBlbmRDaGlsZChhKTtsLmFwcGVuZENoaWxkKHApO2wuYXBwZW5kQ2hpbGQoYyk7ZiYmKGc/bC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwic29sZS1hY3RpdmUtc2Vzc2lvbi1ydW4iKTpsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJhY3RpdmUtc2Vzc2lvbi1ydW4iKSk7UG9seW1lci5kb20odGhpcy4kJCgiI3Nlc3Npb24tcnVucy10YWJsZSIpKS5hcHBlbmRDaGlsZChsKTtpZihmKXJldHVybiBsfSxfcmVuZGVyR3JhcGhFbGVtZW50cyhhKXtjb25zdCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Xy5mb3JFYWNoKGEsZD0+e2NvbnN0IGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi50ZXh0Q29udGVudD1kO2Yuc2V0QXR0cmlidXRlKCJjbGFzcyIsIm5vZGUtb3ItdGVuc29yLWVsZW1lbnQiKTtmLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3RoaXMubm9kZU9yVGVuc29yQ2xpY2tlZChkKX0pO2MuYXBwZW5kQ2hpbGQoZil9KTtyZXR1cm4gY319KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtc291cmNlLWNvZGUtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1zb3VyY2UtY29kZS12aWV3Iixwcm9wZXJ0aWVzOntyZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sZm9jdXNOb2RlTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX29sZEZvY3VzTm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGRlYnVnV2F0Y2hlczp7dHlwZTpBcnJheSx2YWx1ZTpbXX0sbm9kZUNsaWNrZWQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6bnVsbH0sY29udGludWVUb05vZGU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6bnVsbH0sX2hpZ2hsaWdodGVkRWxlbWVudHM6e3R5cGU6QXJyYXksdmFsdWU6W119LF9maWxlUGF0aFNlbGVjdGVkOk51bWJlcixfZnVsbEZpbGVQYXRoczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfc2hvcnRGaWxlUGF0aHM6e3R5cGU6QXJyYXksdmFsdWU6bnVsbH0sX2ZpbGVMaW5lczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfbm9kZU5hbWUyRGV2aWNlTmFtZTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sCl9ub2RlTmFtZTJCYXNlRXhwYW5kZWROb2RlTmFtZTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX25vZGVOYW1lMk5vZGVFbGVtZW50czp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX25vZGVOYW1lMlN0YWNrVG9wTm9kZUVsZW1lbnQ6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9zZXRIaWdodGxpZ2h0T3JpZ2luTm9kZUVsZW1lbnQ6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9mdWxsU3RhY2tTaG93bjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZnVsbFN0YWNrTm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9yZW5kZXJEZWxheU1pbGxpczp7dHlwZTpOdW1iZXIsdmFsdWU6NTAscmVhZG9ubHk6ITB9fSxvYnNlcnZlcnM6WyJfcmVuZGVyRmlsZShfZmlsZVBhdGhTZWxlY3RlZCkiLCJfZm9jdXNPbk5vZGUoZm9jdXNOb2RlTmFtZSkiXSxyZW5kZXIoYSl7bnVsbCE9YSYmdGhpcy5zZXQoIl9kZWJ1Z1dhdGNoZXMiLGEpO3RoaXMuX3F1ZXJ5U291cmNlQ29kZUVuZFBvaW50KHttb2RlOiJwYXRocyJ9KS50aGVuKGM9Pgp7dGhpcy5zZXQoIl9mdWxsRmlsZVBhdGhzIixjLnBhdGhzKTtjb25zdCBkPWMucGF0aHMubWFwKGY9Pih7aWQ6ZixuYW1lOnRoaXMuX3Nob3J0ZW5QYXRoKGYsYy5wYXRocyl9KSk7dGhpcy5zZXQoIl9zaG9ydEZpbGVQYXRocyIsZCk7MDxkLmxlbmd0aCYmdGhpcy5zZXQoIl9maWxlUGF0aFNlbGVjdGVkIiwwKX0pfSxfc2hvcnRlblBhdGgoYSl7YT1hLnJlcGxhY2UoL1xcL2csIi8iKTthPWEuc3BsaXQoIi8iKTtyZXR1cm4gYVthLmxlbmd0aC0xXX0sX3JlbmRlckZpbGUoYSl7aWYobnVsbCE9YSl7dmFyIGM9dGhpcy5fc2hvcnRGaWxlUGF0aHNbYV0uaWQ7dGhpcy5fcXVlcnlTb3VyY2VDb2RlRW5kUG9pbnQoe21vZGU6ImNvbnRlbnQiLGZpbGVfcGF0aDpjfSkudGhlbihkPT57Y29uc3QgZj1bXSxnPWQuY29udGVudFtjXSxsPWQubGluZW5vX3RvX29wX25hbWVfYW5kX3N0YWNrX3BvcztkPXt9O2Zvcih2YXIgayBpbiBsKWwuaGFzT3duUHJvcGVydHkoaykmJihkW2tdPWxba10ubGVuZ3RoKTsKdGhpcy5fZmlsdGVyRmlsZVRyYWNlYmFja3NCeURlYnVnV2F0Y2hlcyhsKTtmb3Ioaz0wO2s8Zy5sZW5ndGg7KytrKXtjb25zdCBwPWsrMTtmLnB1c2goe2xpbmVubzpwLG51bU5vZGVzOm51bGwhPWxbcF0/U3RyaW5nKGxbcF0ubGVuZ3RoKSsiLyIrU3RyaW5nKGRbcF0pKyIgXHUyNWJjIjoiIix0ZXh0OnRoaXMuX2h0bWxFc2NhcGUoZ1trXSl9KX10aGlzLnNldCgiX2ZpbGVMaW5lcyIsZik7Y29uc3Qgbj10aGlzO3NldFRpbWVvdXQoKCk9Pntjb25zdCBwPXt9LHE9e307Zm9yKGNvbnN0IHQgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkodCkpY29udGludWU7Zm9yKHZhciByPW4uJCQoIiNzb3VyY2UtbGluZS1ub2Rlcy0iK3QpO3IuZmlyc3RDaGlsZDspci5yZW1vdmVDaGlsZChyLmZpcnN0Q2hpbGQpO2NvbnN0IHY9bFt0XTt2LnNvcnQoZnVuY3Rpb24oeSx6KXtyZXR1cm4geVswXTx6WzBdPy0xOnlbMF0+elswXT8xOjB9KTtmb3IobGV0IHk9MDt5PHYubGVuZ3RoOysreSl7Y29uc3Qgej0Kdlt5XVswXSx4PXZbeV1bMV0sQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtGLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJzb3VyY2UtbGluZS1ub2RlLWVudHRyeSIpO0Yuc2V0QXR0cmlidXRlKCJzb3VyY2VMaW5lbm8iLHQpO0YudGV4dENvbnRlbnQ9ejtGLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9Pnt0aGlzLm5vZGVDbGlja2VkKHRoaXMuX25vZGVOYW1lMkRldmljZU5hbWVbel0sdGhpcy5fbm9kZU5hbWUyQmFzZUV4cGFuZGVkTm9kZU5hbWVbel0sITApfSk7Y29uc3QgRD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1pY29uLWJ1dHRvbiIpO0Quc2V0QXR0cmlidXRlKCJpY29uIiwiZmlsdGVyLWxpc3QiKTtELnNldEF0dHJpYnV0ZSgidGl0bGUiLCJTaG93IHN0YWNrIik7RC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLCgpPT57dGhpcy5faGlnaGxpZ2h0Tm9kZUVsZW1lbnRzKHopO3RoaXMuc2V0KCJfZnVsbFN0YWNrTm9kZU5hbWUiLAp6KTt0aGlzLnNldCgiX2Z1bGxTdGFja1Nob3duIiwhMCk7dGhpcy5fcG9wdWxhdGVGdWxsU3RhY2soeix0aGlzLl9mdWxsRmlsZVBhdGhzW3RoaXMuX2ZpbGVQYXRoU2VsZWN0ZWRdLE51bWJlcih0KSl9KTtjb25zdCBCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLWljb24tYnV0dG9uIik7Qi5zZXRBdHRyaWJ1dGUoImljb24iLCJmb3J3YXJkIik7Qi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQ29udGludWUgdG8iKTtCLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9Pnt0aGlzLm5vZGVDbGlja2VkKHRoaXMuX25vZGVOYW1lMkRldmljZU5hbWVbel0sdGhpcy5fbm9kZU5hbWUyQmFzZUV4cGFuZGVkTm9kZU5hbWVbel0sITApO2NvbnN0IEk9dGhpcy5fbm9kZU5hbWUyRGV2aWNlTmFtZVt6XSxPPXRoaXMuX25vZGVOYW1lMkJhc2VFeHBhbmRlZE5vZGVOYW1lW3pdO3RoaXMuc2V0KCJfc2V0SGlnaHRsaWdodE9yaWdpbk5vZGVFbGVtZW50IixGKTt0aGlzLmNvbnRpbnVlVG9Ob2RlKEksCk8pfSk7Qy5hcHBlbmRDaGlsZChEKTtDLmFwcGVuZENoaWxkKEIpO0MuYXBwZW5kQ2hpbGQoRik7ci5hcHBlbmRDaGlsZChDKTtwLmhhc093blByb3BlcnR5KHopfHwocFt6XT1bXSk7cFt6XS5wdXNoKEYpO3EuaGFzT3duUHJvcGVydHkoeil8fChxW3pdPVtGLHhdKTt4PnFbel1bMV0mJihxW3pdPVtGLHhdKX1yLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwhMCk7cj1uLiQkKCIjc291cmNlLWxpbmUtbm9kZS10b2dnbGUtIit0KTtudWxsPT1yLmdldEF0dHJpYnV0ZSgidGFwQ2FsbGJhY2tTZXQiKSYmKHIuYWRkRXZlbnRMaXN0ZW5lcigidGFwIiwoKT0+e24uX3RvZ2dsZUxpbmVOb2RlcyhOdW1iZXIodCkpfSksci5zZXRBdHRyaWJ1dGUoInRhcENhbGxiYWNrU2V0IiwhMCkpfW4uc2V0KCJfbm9kZU5hbWUyTm9kZUVsZW1lbnRzIixwKTtmb3IoY29uc3QgdCBpbiBxKXEuaGFzT3duUHJvcGVydHkodCkmJihxW3RdPXFbdF1bMF0pO24uc2V0KCJfbm9kZU5hbWUyU3RhY2tUb3BOb2RlRWxlbWVudCIsCnEpfSx0aGlzLl9yZW5kZXJEZWxheU1pbGxpcyl9KX19LF90b2dnbGVMaW5lTm9kZXMoYSxjPSExKXthPXRoaXMuJCQoIiNzb3VyY2UtbGluZS1ub2Rlcy0iK2EpO251bGw9PWEuZ2V0QXR0cmlidXRlKCJoaWRkZW4iKSYmITAhPT1jP2Euc2V0QXR0cmlidXRlKCJoaWRkZW4iLCEwKTphLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9LF9maWx0ZXJGaWxlVHJhY2ViYWNrc0J5RGVidWdXYXRjaGVzKGEpe2NvbnN0IGM9dGhpcy5kZWJ1Z1dhdGNoZXMubWFwKGc9PmdwLnJlbW92ZU5vZGVOYW1lQmFzZUV4cGFuc2lvbihnLm5vZGVfbmFtZSkpLGQ9e30sZj17fTtmb3IoY29uc3QgZyBvZiB0aGlzLmRlYnVnV2F0Y2hlcyl7Y29uc3QgbD1ncC5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oZy5ub2RlX25hbWUpO2RbbF09Zy5kZXZpY2VfbmFtZTtmW2xdPWcubm9kZV9uYW1lfXRoaXMuc2V0KCJfbm9kZU5hbWUyRGV2aWNlTmFtZSIsZCk7dGhpcy5zZXQoIl9ub2RlTmFtZTJCYXNlRXhwYW5kZWROb2RlTmFtZSIsCmYpO2Zvcihjb25zdCBnIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShnKSYmKGFbZ109YVtnXS5maWx0ZXIobD0+Xy5pbmNsdWRlcyhjLGxbMF0pKSl9LF9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludChhKXtjb25zdCBjPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9zb3VyY2VfY29kZSIpO2E9UW8uYWRkUGFyYW1zKGMsYSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKX0sX2h0bWxFc2NhcGUoYSl7cmV0dXJuIGEucmVwbGFjZSgvIC9nLCJcdTAwYTAiKX0sX2ZvY3VzT25Ob2RlKGEpe2lmKG51bGwhPWEpe3ZhciBjPXRoaXMuX3Nob3J0RmlsZVBhdGhzW3RoaXMuX2ZpbGVQYXRoU2VsZWN0ZWRdLmlkLGQ9dGhpczt0aGlzLl9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludCh7bW9kZToib3BfdHJhY2ViYWNrIixvcF9uYW1lOmF9KS50aGVuKGY9Pntjb25zdCBnPWYub3BfdHJhY2ViYWNrW2FdO2Y9W107Zm9yKGxldCBrPTA7azxnLmxlbmd0aDsrK2spe2NvbnN0IG49Cmdba11bMV07Z1trXVswXT09PWMmJmYucHVzaChuKX1mb3IodmFyIGwgb2YgZC5faGlnaGxpZ2h0ZWRFbGVtZW50cylsLmNsYXNzTGlzdC5yZW1vdmUoImhpZ2hsaWdodGVkLXNvdXJjZS1saW5lIik7bD1bXTtmb3IoY29uc3QgayBvZiBmKWY9dGhpcy4kJCgiI3NvdXJjZS1saW5lLSIrayksbC5wdXNoKGYpLGYuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0ZWQtc291cmNlLWxpbmUiKSxkLl90b2dnbGVMaW5lTm9kZXMoaywhMCk7ZC5zZXQoIl9oaWdobGlnaHRlZEVsZW1lbnRzIixsKTt0aGlzLl9oaWdobGlnaHROb2RlRWxlbWVudHMoYSl9KX19LF9oaWdobGlnaHROb2RlRWxlbWVudHMoYSl7aWYobnVsbCE9dGhpcy5fb2xkRm9jdXNOb2RlTmFtZSlmb3IoY29uc3QgYyBvZiB0aGlzLl9ub2RlTmFtZTJOb2RlRWxlbWVudHNbdGhpcy5fb2xkRm9jdXNOb2RlTmFtZV0pYy5zdHlsZVsiZm9udC13ZWlnaHQiXT0ibm9ybWFsIjtmb3IoY29uc3QgYyBvZiB0aGlzLl9ub2RlTmFtZTJOb2RlRWxlbWVudHNbYV0pYy5zdHlsZVsiZm9udC13ZWlnaHQiXT0KImJvbGQiO251bGw9PXRoaXMuX3NldEhpZ2h0bGlnaHRPcmlnaW5Ob2RlRWxlbWVudD90aGlzLl9ub2RlTmFtZTJTdGFja1RvcE5vZGVFbGVtZW50W2FdLnNjcm9sbEludG9WaWV3KHtibG9jazoiY2VudGVyIixiZWhhdmlvdXI6InNtb290aCJ9KTp0aGlzLnNldCgiX3NldEhpZ2h0bGlnaHRPcmlnaW5Ob2RlRWxlbWVudCIsbnVsbCk7dGhpcy5zZXQoIl9vbGRGb2N1c05vZGVOYW1lIixhKX0sX3BvcHVsYXRlRnVsbFN0YWNrKGEsYyxkKXt0aGlzLl9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludCh7bW9kZToib3BfdHJhY2ViYWNrIixvcF9uYW1lOmF9KS50aGVuKGY9Pntjb25zdCBnPXRoaXMuJCQoIiNmdWxsLXN0YWNrLWNvbnRlbnQiKTtmb3IoO2cuZmlyc3RDaGlsZDspZy5yZW1vdmVDaGlsZChnLmZpcnN0Q2hpbGQpO2Zvcihjb25zdCBsIG9mIGYub3BfdHJhY2ViYWNrW2FdKXtjb25zdCBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIiksbj1sWzBdLHA9TnVtYmVyKGxbMV0pO2sudGV4dENvbnRlbnQ9Cm4rIjogIitTdHJpbmcocCk7Xy5pbmNsdWRlcyh0aGlzLl9mdWxsRmlsZVBhdGhzLG4pPyhrLmNsYXNzTGlzdC5hZGQoInN0YWNrLWZyYW1lLWNsaWNrYWJsZSIpLGsuc3R5bGUuY29sb3I9ImJsdWUiLGsuc3R5bGVbInRleHQtZGVjb3JhdGlvbiJdPSJ1bmRlcmxpbmUiLGsuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixuPT09YyYmcD09PWQmJihrLnN0eWxlWyJmb250LXdlaWdodCJdPSJib2xkIiksay5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLCgpPT57dGhpcy5zZXQoIl9maWxlUGF0aFNlbGVjdGVkIix0aGlzLl9mdWxsRmlsZVBhdGhzLmluZGV4T2YobikpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVMaW5lTm9kZXMocCwhMCk7Zm9yKGNvbnN0IHEgb2YgdGhpcy5fbm9kZU5hbWUyTm9kZUVsZW1lbnRzW2FdKU51bWJlcihxLmdldEF0dHJpYnV0ZSgic291cmNlTGluZW5vIikpPT09TnVtYmVyKHApJiYocS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6ImNlbnRlciIsYmVoYXZpb3VyOiJzbW9vdGgifSksCnRoaXMuc2V0KCJfc2V0SGlnaHRsaWdodE9yaWdpbk5vZGVFbGVtZW50IixrKSx0aGlzLl9oaWdobGlnaHROb2RlRWxlbWVudHMoYSksYz09PW4mJmQ9PT1wfHx0aGlzLl9wb3B1bGF0ZUZ1bGxTdGFjayhhLG4scCkpfSwyKnRoaXMuX3JlbmRlckRlbGF5TWlsbGlzKX0pKTooay5jbGFzc0xpc3QuYWRkKCJzdGFjay1mcmFtZS1ub25jbGlja2FibGUiKSxrLnN0eWxlLmNvbG9yPSIjNTU1Iik7Zy5hcHBlbmRDaGlsZChrKX19KX0sX2Nsb3NlRnVsbFN0YWNrRGlhbG9nKCl7dGhpcy5zZXQoIl9mdWxsU3RhY2tTaG93biIsITEpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi10ZW5zb3ItZGF0YS1zdW1tYXJ5Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLXRlbnNvci1kYXRhLXN1bW1hcnkiLHByb3BlcnRpZXM6e2xhdGVzdFRlbnNvckRhdGE6T2JqZWN0LGV4cGFuZEhhbmRsZXI6T2JqZWN0LGNvbnRpbnVlVG9DYWxsYmFjazpGdW5jdGlvbixoaWdobGlnaHRlZE5vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSx0ZW5zb3JOYW1lQ2xpY2tlZDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpudWxsfSxnZXRIZWFsdGhQaWxsOkZ1bmN0aW9uLF9oZWFsdGhQaWxsc0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxub3RpZnk6ITB9LF93YXRjaEtleXM6e3R5cGU6QXJyYXksdmFsdWU6W119LF93YXRjaEtleTJEYXRhOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3dhdGNoS2V5MkNvdW50Ont0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3dhdGNoS2V5MkV4cGFuZEhhbmRsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfd2F0Y2hLZXkyVmFsdWVTaG9ydDp7dHlwZTpPYmplY3QsdmFsdWU6e319LF93YXRjaEtleTJSb3c6e3R5cGU6T2JqZWN0LAp2YWx1ZTp7fX0sX2FjdGl2ZVdhdGNoS2V5OlN0cmluZyxfaGVhbHRoUGlsbFdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZToyMDAscmVhZG9ubHk6ITB9LF9oZWFsdGhQaWxsSGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTozMixyZWFkb25seTohMH19LG9ic2VydmVyczpbIl9yZW5kZXJMYXRlc3QobGF0ZXN0VGVuc29yRGF0YSwgZXhwYW5kSGFuZGxlcikiLCJfaGlnaGxpZ2h0KGhpZ2hsaWdodGVkTm9kZU5hbWUpIl0sbGlzdGVuZXJzOnsic2hvdy1oZWFsdGgtcGlsbHMuY2hhbmdlIjoiX3Nob3dIZWFsdGhQaWxsc0NoYW5nZWQifSxyZWFkeSgpe3RoaXMuX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKX0sZW5hYmxlSGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxzRW5hYmxlZCIsITApO3RoaXMuX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKX0sX3Nob3dIZWFsdGhQaWxsc0NoYW5nZWQoKXt0aGlzLl9oZWFsdGhQaWxsc0VuYWJsZWQ/dGhpcy5fcmVuZGVySGVhbHRoUGlsbExlZ2VuZCgpOgp0aGlzLl9jbGVhckhlYWx0aFBpbGxMZWdlbmQoKTt0aGlzLl9yZW5kZXJBbGwoKX0sX3JlbmRlckFsbCgpe3RoaXMuX2NsZWFyVGVuc29yRGF0YVRhYmxlKCk7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fd2F0Y2hLZXlzKXRoaXMuX3JlbmRlckxhdGVzdCh0aGlzLl93YXRjaEtleTJEYXRhW2FdLHRoaXMuX3dhdGNoS2V5MkV4cGFuZEhhbmRsZXJbYV0pfSxfdGVuc29yRGF0YTJXYXRjaEtleShhKXtyZXR1cm4gYS5kZXZpY2VOYW1lKyIvIithLnRlbnNvck5hbWUrIjoiK2EuZGVidWdPcH0sX3JlbmRlckxhdGVzdChhLGMpe2lmKGEpe3ZhciBkPXRoaXMuX3RlbnNvckRhdGEyV2F0Y2hLZXkoYSksZj1udWxsOyJVbmluaXRpYWxpemVkIiE9PWEuZHR5cGUmJiJVbnN1cHBvcnRlZCIhPT1hLmR0eXBlJiYoZj0oKT0+YyhhKSk7dmFyIGc9bnVsbCE9YS52YWx1ZT9KU09OLnN0cmluZ2lmeShhLnZhbHVlLChsLGspPT5rLnRvRml4ZWQ/TnVtYmVyKGsudG9GaXhlZCgzKSk6ayk6IihDbGljayB0byB2aWV3KSI7CnRoaXMuX3dhdGNoS2V5MkRhdGFbZF09YTstMT09PXRoaXMuX3dhdGNoS2V5cy5pbmRleE9mKGQpPyh0aGlzLl93YXRjaEtleXMucHVzaChkKSx0aGlzLl93YXRjaEtleTJDb3VudFtkXT0xKTp0aGlzLl93YXRjaEtleTJDb3VudFtkXSs9MTt0aGlzLl93YXRjaEtleTJFeHBhbmRIYW5kbGVyW2RdPWY7dGhpcy5fd2F0Y2hLZXkyVmFsdWVTaG9ydFtkXT1nO3RoaXMuX2FjdGl2ZVdhdGNoS2V5PWQ7dGhpcy5fcmVtb3ZlQWN0aXZlU3RhdHVzRnJvbUFsbFJvd3MoKTt0aGlzLl9yZW5kZXJSb3coZCl9fSxfY2xlYXJUZW5zb3JEYXRhVGFibGUoKXtmb3IoY29uc3QgYSBpbiB0aGlzLl93YXRjaEtleTJSb3cpdGhpcy5fd2F0Y2hLZXkyUm93Lmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fd2F0Y2hLZXkyUm93W2FdLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLl93YXRjaEtleTJSb3dbYV0pfSxfY2xlYXJUZW5zb3JEYXRhUm93KGEpe2Zvcig7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCl9LApfY2xlYXJIZWFsdGhQaWxsTGVnZW5kKCl7Y29uc3QgYT10aGlzLiQkKCIjaGVhbHRoLXBpbGwtbGVnZW5kIik7Zm9yKDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX0sX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKXt0aGlzLl9jbGVhckhlYWx0aFBpbGxMZWdlbmQoKTtjb25zdCBhPXRoaXMuJCQoIiNoZWFsdGgtcGlsbC1sZWdlbmQiKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLnRleHRDb250ZW50PSJMZWdlbmQ6IjthLmFwcGVuZENoaWxkKGMpO2Muc3R5bGVbIm1hcmdpbi1yaWdodCJdPSIwLjVlbSI7Yy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siO2ZvcihjPTA7Yzx0Zi5ncmFwaC5zY2VuZS5oZWFsdGhQaWxsRW50cmllcy5sZW5ndGg7KytjKXtjb25zdCBkPXRmLmdyYXBoLnNjZW5lLmhlYWx0aFBpbGxFbnRyaWVzW2NdLGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOwpmLnN0eWxlWyJtYXJnaW4tcmlnaHQiXT0iMC4yNWVtIjtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtnLnRleHRDb250ZW50PSJcdTI1YTAiO2cuc3R5bGUuY29sb3I9ZC5iYWNrZ3JvdW5kX2NvbG9yO2NvbnN0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2wudGV4dENvbnRlbnQ9ZC5sYWJlbDtsLnN0eWxlLmNvbG9yPWQuYmFja2dyb3VuZF9jb2xvcjtmLmFwcGVuZENoaWxkKGcpO2YuYXBwZW5kQ2hpbGQobCk7YS5hcHBlbmRDaGlsZChmKX19LF9yZW1vdmVBY3RpdmVTdGF0dXNGcm9tQWxsUm93cygpe2Zvcihjb25zdCBhIGluIHRoaXMuX3dhdGNoS2V5MlJvdyl7aWYoIXRoaXMuX3dhdGNoS2V5MlJvdy5oYXNPd25Qcm9wZXJ0eShhKSljb250aW51ZTtjb25zdCBjPXRoaXMuX3dhdGNoS2V5MlJvd1thXTtQb2x5bWVyLmRvbShjKS5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUtdGVuc29yIik7UG9seW1lci5kb20oYykuY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQiKX19LApfcmVuZGVyUm93KGEpe2xldCBjLGQ9ITE7bnVsbCE9dGhpcy5fd2F0Y2hLZXkyUm93W2FdPyhjPXRoaXMuX3dhdGNoS2V5MlJvd1thXSx0aGlzLl9jbGVhclRlbnNvckRhdGFSb3coYyksZD0hMSk6KGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxkPSEwKTtjb25zdCBmPXRoaXMuX3dhdGNoS2V5MkRhdGFbYV0uZGV2aWNlTmFtZSxnPXRoaXMuX3dhdGNoS2V5MkRhdGFbYV0ubWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZSxsPWYrIi8iK2c7dmFyIGs9dGhpcy5fd2F0Y2hLZXkyQ291bnRbYV0sbj10aGlzLl93YXRjaEtleTJEYXRhW2FdLnRlbnNvck5hbWUscD10aGlzLl93YXRjaEtleTJEYXRhW2FdLmRlYnVnT3AscT10aGlzLl93YXRjaEtleTJWYWx1ZVNob3J0W2FdO2NvbnN0IHI9dGhpcy5fd2F0Y2hLZXkyRXhwYW5kSGFuZGxlclthXSx0PWE9PT10aGlzLl9hY3RpdmVXYXRjaEtleSx2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20odikuY2xhc3NMaXN0LmFkZCgidGVuc29yLW5hbWUiKTsKdi5zdHlsZVsidGV4dC1kZWNvcmF0aW9uIl09InVuZGVybGluZSI7di5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO3YudGV4dENvbnRlbnQ9bjt2LmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9PntudWxsIT10aGlzLnRlbnNvck5hbWVDbGlja2VkJiZ0aGlzLnRlbnNvck5hbWVDbGlja2VkKGYsZyl9KTtjb25zdCB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7eS50ZXh0Q29udGVudD1rO2NvbnN0IHo9dGhpcy5fd2F0Y2hLZXkyRGF0YVthXS5kdHlwZTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Y29uc3QgeD10aGlzLl93YXRjaEtleTJEYXRhW2FdLnNoYXBlO2sudGV4dENvbnRlbnQ9ejtjb25zdCBDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Qy50ZXh0Q29udGVudD1KU09OLnN0cmluZ2lmeSh4KTtjb25zdCBGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ri50ZXh0Q29udGVudD1xO1BvbHltZXIuZG9tKEYpLmNsYXNzTGlzdC5hZGQoInZhbHVlLWV4cGFuc2lvbi1saW5rIik7Cm51bGwhPXImJihGLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsciwhMSksRi5zdHlsZVsidGV4dC1kZWNvcmF0aW9uIl09InVuZGVybGluZSIsRi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtxPW51bGw7cT10aGlzLl9oZWFsdGhQaWxsc0VuYWJsZWQ/dGhpcy5fcmVuZGVySGVhbHRoUGlsbChuKyI6IitwLHtkZXZpY2VfbmFtZTpmLG5vZGVfbmFtZTpnLGR0eXBlOnosc2hhcGU6eCx2YWx1ZTpudWxsfSxyKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLWljb24tYnV0dG9uIik7cC5zZXRBdHRyaWJ1dGUoImljb24iLCJmb3J3YXJkIik7cC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQ29udGludWUgdG8iKTtwLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3RoaXMuY29udGludWVUb0NhbGxiYWNrKGYsZyl9KTtuLmFwcGVuZENoaWxkKHApO2MuYXBwZW5kQ2hpbGQodik7CmMuYXBwZW5kQ2hpbGQoeSk7Yy5hcHBlbmRDaGlsZChrKTtjLmFwcGVuZENoaWxkKEMpO2MuYXBwZW5kQ2hpbGQoRik7Yy5hcHBlbmRDaGlsZChxKTtjLmFwcGVuZENoaWxkKG4pO2Muc2V0QXR0cmlidXRlKCJub2RlTmFtZVdpdGhEZXZpY2UiLGwpO3QmJihQb2x5bWVyLmRvbShjKS5jbGFzc0xpc3QuYWRkKCJhY3RpdmUtdGVuc29yIiksUG9seW1lci5kb20oYykuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0ZWQiKSk7dGhpcy5fd2F0Y2hLZXkyUm93W2FdPWM7ZCYmUG9seW1lci5kb20odGhpcy4kJCgiI3RlbnNvci1kYXRhLXRhYmxlIHRib2R5IikpLmFwcGVuZENoaWxkKGMpO2Muc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJlbmQiLGlubGluZToibmVhcmVzdCIsYmVoYXZpb3VyOiJzbW9vdGgifSl9LF9yZW5kZXJIZWFsdGhQaWxsKGEsYyxkKXtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20oZikuY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwiKTsKbnVsbCE9ZCYmZi5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLGQsITEpO2Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRmLmdyYXBoLnNjZW5lLlNWR19OQU1FU1BBQ0UsInN2ZyIpO2Quc2V0QXR0cmlidXRlKCJ3aWR0aCIsdGhpcy5faGVhbHRoUGlsbFdpZHRoKTtkLnNldEF0dHJpYnV0ZSgiaGVpZ2h0Iix0aGlzLl9oZWFsdGhQaWxsSGVpZ2h0KTtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0Zi5ncmFwaC5zY2VuZS5TVkdfTkFNRVNQQUNFLCJnIik7ZC5hcHBlbmRDaGlsZChnKTtmLmFwcGVuZENoaWxkKGQpO2NvbnN0IGw9InRkcC8iK2E7dGhpcy5nZXRIZWFsdGhQaWxsKGEsYy5kZXZpY2VfbmFtZSxjLm5vZGVfbmFtZSxrPT57bnVsbD09az8oZi50ZXh0Q29udGVudD0iTi9BIixmLnN0eWxlLmNvbG9yPSJncmF5Iik6KGMudmFsdWU9ayx0Zi5ncmFwaC5zY2VuZS5hZGRIZWFsdGhQaWxsKGcsYyxudWxsLGwsdGhpcy5faGVhbHRoUGlsbFdpZHRoLHRoaXMuX2hlYWx0aFBpbGxIZWlnaHQvCjIsdGhpcy5faGVhbHRoUGlsbEhlaWdodC8yLDApKX0pO3JldHVybiBmfSxfaGlnaGxpZ2h0KGEpe1BvbHltZXIuZG9tKHRoaXMuJCQoIiN0ZW5zb3ItZGF0YS10YWJsZSIpKTtjb25zdCBjPVtdO2Zvcihjb25zdCBkIGluIHRoaXMuX3dhdGNoS2V5MlJvdyl7aWYoIXRoaXMuX3dhdGNoS2V5MlJvdy5oYXNPd25Qcm9wZXJ0eShkKSljb250aW51ZTtjb25zdCBmPXRoaXMuX3dhdGNoS2V5MlJvd1tkXTtudWxsIT1mLmdldEF0dHJpYnV0ZSYmKGYuZ2V0QXR0cmlidXRlKCJub2RlTmFtZVdpdGhEZXZpY2UiKT09PWE/Yy5wdXNoKGYpOlBvbHltZXIuZG9tKGYpLmNsYXNzTGlzdC5yZW1vdmUoImhpZ2hsaWdodGVkIikpfWlmKG51bGwhPWEpZm9yKGE9MDthPGMubGVuZ3RoOysrYSlQb2x5bWVyLmRvbShjW2FdKS5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRlZCIpLGNbYV0uc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJlbmQiLGlubGluZToibmVhcmVzdCIsYmVoYXZpb3VyOiJzbW9vdGgifSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGVuc29yLXdpZGdldC90ZW5zb3Jfd2lkZ2V0X2JpbmFyeS5qcwp2YXIgaHA9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShjLGQpe2E9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGYsZyl7Zi5fX3Byb3RvX189Z318fGZ1bmN0aW9uKGYsZyl7Zm9yKHZhciBsIGluIGcpZy5oYXNPd25Qcm9wZXJ0eShsKSYmKGZbbF09Z1tsXSl9O3JldHVybiBhKGMsZCl9cmV0dXJuIGZ1bmN0aW9uKGMsZCl7ZnVuY3Rpb24gZigpe3RoaXMuY29uc3RydWN0b3I9Y31hKGMsZCk7Yy5wcm90b3R5cGU9bnVsbD09PWQ/T2JqZWN0LmNyZWF0ZShkKTooZi5wcm90b3R5cGU9ZC5wcm90b3R5cGUsbmV3IGYpfX0oKSxpcD10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIGQocSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBmKFtxLHJdKX19ZnVuY3Rpb24gZihxKXtpZihsKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTsKZm9yKDtnOyl0cnl7aWYobD0xLGsmJihuPXFbMF0mMj9rWyJyZXR1cm4iXTpxWzBdP2tbInRocm93Il18fCgobj1rWyJyZXR1cm4iXSkmJm4uY2FsbChrKSwwKTprLm5leHQpJiYhKG49bi5jYWxsKGsscVsxXSkpLmRvbmUpcmV0dXJuIG47aWYoaz0wLG4pcT1bcVswXSYyLG4udmFsdWVdO3N3aXRjaChxWzBdKXtjYXNlIDA6Y2FzZSAxOm49cTticmVhaztjYXNlIDQ6cmV0dXJuIGcubGFiZWwrKyx7dmFsdWU6cVsxXSxkb25lOiExfTtjYXNlIDU6Zy5sYWJlbCsrO2s9cVsxXTtxPVswXTtjb250aW51ZTtjYXNlIDc6cT1nLm9wcy5wb3AoKTtnLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG49Zy50cnlzLG49MDxuLmxlbmd0aCYmbltuLmxlbmd0aC0xXSkmJig2PT09cVswXXx8Mj09PXFbMF0pKXtnPTA7Y29udGludWV9aWYoMz09PXFbMF0mJighbnx8cVsxXT5uWzBdJiZxWzFdPG5bM10pKWcubGFiZWw9cVsxXTtlbHNlIGlmKDY9PT1xWzBdJiZnLmxhYmVsPG5bMV0pZy5sYWJlbD0KblsxXSxuPXE7ZWxzZSBpZihuJiZnLmxhYmVsPG5bMl0pZy5sYWJlbD1uWzJdLGcub3BzLnB1c2gocSk7ZWxzZXtuWzJdJiZnLm9wcy5wb3AoKTtnLnRyeXMucG9wKCk7Y29udGludWV9fXE9Yy5jYWxsKGEsZyl9Y2F0Y2gocil7cT1bNixyXSxrPTB9ZmluYWxseXtsPW49MH1pZihxWzBdJjUpdGhyb3cgcVsxXTtyZXR1cm57dmFsdWU6cVswXT9xWzFdOnZvaWQgMCxkb25lOiEwfX12YXIgZz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoblswXSYxKXRocm93IG5bMV07cmV0dXJuIG5bMV19LHRyeXM6W10sb3BzOltdfSxsLGssbixwO3JldHVybiBwPXtuZXh0OmQoMCksInRocm93IjpkKDEpLCJyZXR1cm4iOmQoMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYocFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxwfSxqcD10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oYSxjKXt2YXIgZD0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmYVtTeW1ib2wuaXRlcmF0b3JdOwppZighZClyZXR1cm4gYTthPWQuY2FsbChhKTt2YXIgZixnPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1jfHwwPGMtLSkmJiEoZj1hLm5leHQoKSkuZG9uZTspZy5wdXNoKGYudmFsdWUpfWNhdGNoKGspe3ZhciBsPXtlcnJvcjprfX1maW5hbGx5e3RyeXtmJiYhZi5kb25lJiYoZD1hWyJyZXR1cm4iXSkmJmQuY2FsbChhKX1maW5hbGx5e2lmKGwpdGhyb3cgbC5lcnJvcjt9fXJldHVybiBnfTsKKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShILEssTSxMKXtyZXR1cm4gbmV3IChNfHwoTT1Qcm9taXNlKSkoZnVuY3Rpb24oUixVKXtmdW5jdGlvbiBZKGFhKXt0cnl7bWEoTC5uZXh0KGFhKSl9Y2F0Y2goY2Epe1UoY2EpfX1mdW5jdGlvbiBiYShhYSl7dHJ5e21hKExbInRocm93Il0oYWEpKX1jYXRjaChjYSl7VShjYSl9fWZ1bmN0aW9uIG1hKGFhKXthYS5kb25lP1IoYWEudmFsdWUpOihuZXcgTShmdW5jdGlvbihjYSl7Y2EoYWEudmFsdWUpfSkpLnRoZW4oWSxiYSl9bWEoKEw9TC5hcHBseShILEt8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIGMoSCl7cmV0dXJuIG51bGwhPT1ILm1hdGNoKC9eaW50WzAtOV0rJC8pfHxudWxsIT09SC5tYXRjaCgvXnVpbnRbMC05XSskLyl9ZnVuY3Rpb24gZChIKXtyZXR1cm4gbnVsbCE9PUgubWF0Y2goL15mbG9hdFswLTldKyQvKXx8bnVsbCE9PUgubWF0Y2goL15iZmxvYXRbMC05XSskLyl9ZnVuY3Rpb24gZihIKXtyZXR1cm4iYm9vbCI9PT1ILnRvTG93ZXJDYXNlKCl8fAoiYm9vbGVhbiI9PT1ILnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZyhIKXtyZXR1cm4ic3RyIj09PUgudG9Mb3dlckNhc2UoKXx8InN0cmluZyI9PT1ILnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gbChIKXt2YXIgSz0xO0guZm9yRWFjaChmdW5jdGlvbihNKXtLKj1NfSk7cmV0dXJuIEt9ZnVuY3Rpb24gayhIKXtyZXR1cm4gMD09PUgubGVuZ3RoPyJzY2FsYXIiOiJbIitIKyJdIn1mdW5jdGlvbiBuKEgpe3ZhciBLPXtzbGljaW5nRGltc0FuZEluZGljZXM6W10sdmlld2luZ0RpbXM6W10sdmVydGljYWxSYW5nZTpudWxsLGhvcml6b250YWxSYW5nZTpudWxsfSxNPUgubGVuZ3RoO2lmKDE9PT1NKUsudmlld2luZ0RpbXM9WzBdO2Vsc2UgaWYoMTxNKXtpZigyPE0pZm9yKHZhciBMPTA7TDxNLTI7KytMKUsuc2xpY2luZ0RpbXNBbmRJbmRpY2VzLnB1c2goe2RpbTpMLGluZGV4OjA9PT1IW0xdP251bGw6MH0pO2ZvcihMPUgubGVuZ3RoLTI7TDxILmxlbmd0aDsrK0wpSy52aWV3aW5nRGltcy5wdXNoKEwpfXJldHVybiBLfQpmdW5jdGlvbiBwKEgsSyl7aWYoSC52aWV3aW5nRGltc1swXSE9PUsudmlld2luZ0RpbXNbMF18fEgudmlld2luZ0RpbXNbMV0hPT1LLnZpZXdpbmdEaW1zWzFdKXJldHVybiExO0s9SC5zbGljaW5nRGltc0FuZEluZGljZXMubWFwKGZ1bmN0aW9uKE0pe3JldHVybiBNLmRpbX0pO0suc29ydCgpO0g9SC5zbGljaW5nRGltc0FuZEluZGljZXMubWFwKGZ1bmN0aW9uKE0pe3JldHVybiBNLmRpbX0pO0guc29ydCgpO3JldHVybiBKU09OLnN0cmluZ2lmeShLKT09PUpTT04uc3RyaW5naWZ5KEgpfWZ1bmN0aW9uIHEoSCl7cmV0dXJuIDIwPj1ILmxlbmd0aD9IOkguc2xpY2UoMCwxMCkrIi4uLiIrSC5zbGljZShILmxlbmd0aC03LEgubGVuZ3RoKX1mdW5jdGlvbiByKEgsSyxNLEwpe3ZvaWQgMD09PU0mJihNPTIpO2lmKGlzTmFOKEgpKXJldHVybiJOYU4iO2lmKC1JbmZpbml0eT09PUgpcmV0dXJuIi1cdTIyMWUiO2lmKEluZmluaXR5PT09SClyZXR1cm4iK1x1MjIxZSI7bnVsbD09TCYmKEw9Ck1hdGguYWJzKEgpLEw9MUUzPkwmJi4wMTw9THx8MD09PUw/ImZpeGVkIjoiZXhwb25lbnRpYWwiKTtyZXR1cm4gbnVsbD09THx8ImZpeGVkIj09PUw/Sz8iIitIOkgudG9GaXhlZChNKTpILnRvRXhwb25lbnRpYWwoTSl9ZnVuY3Rpb24gdChILEspe3ZvaWQgMD09PUsmJihLPSEwKTtyZXR1cm4gSD9LPyJUIjoiVHJ1ZSI6Sz8iRiI6IkZhbHNlIn1mdW5jdGlvbiB2KEgsSyl7dm9pZCAwPT09SyYmKEs9NCk7cmV0dXJuIG51bGw9PT1LfHxILmxlbmd0aDw9Sz9IOkguc2xpY2UoMCxLLTEpKyJcdTIwMjYifXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSChLKXt0aGlzLmlzU2hvd249ITE7dGhpcy5ibHVySGlkZUZ1bmN0aW9uPW51bGw7dGhpcy5kcm9wZG93bj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duIik7dGhpcy5kcm9wZG93bi5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO3RoaXMuZHJvcGRvd24uc3R5bGUuZGlzcGxheT0KIm5vbmUiO0suYXBwZW5kQ2hpbGQodGhpcy5kcm9wZG93bil9SC5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihLLE0sTCl7dmFyIFI9dGhpcztMLmZvckVhY2goZnVuY3Rpb24oWSl7dmFyIGJhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2JhLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbSIpO2JhLnRleHRDb250ZW50PVkuY2FwdGlvbjtSLmRyb3Bkb3duLmFwcGVuZENoaWxkKGJhKTtZLmRpc2FibGVkP2JhLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbS1kaXNhYmxlZCIpOihiYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24obWEpe21hLnN0b3BQcm9wYWdhdGlvbigpO1IuZHJvcGRvd24uY2xpY2soKTtpZihudWxsIT09WS5vbkNsaWNrKVkub25DbGljayhtYSk7Ui5oaWRlKCl9KSxiYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixmdW5jdGlvbihtYSl7aWYobnVsbCE9PQpZLm9uSG92ZXIpWS5vbkhvdmVyKG1hKTtiYS5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93bi1tZW51LWl0ZW0tYWN0aXZlIil9KSxiYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2JhLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbS1hY3RpdmUiKTtpZihudWxsIT09WS5vbkhvdmVyKXtmb3IodmFyIG1hPVtdLGFhPTA7YWE8YmEuY2hpbGRyZW4ubGVuZ3RoOysrYWEpe3ZhciBjYT1iYS5jaGlsZHJlblthYV07Y2EuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93biIpJiZtYS5wdXNoKGNhKX1tYS5mb3JFYWNoKGZ1bmN0aW9uKGZhKXtyZXR1cm4gYmEucmVtb3ZlQ2hpbGQoZmEpfSl9fSkpfSk7dGhpcy5kcm9wZG93bi5zdHlsZS5kaXNwbGF5PSJibG9jayI7dGhpcy5kcm9wZG93bi5zdHlsZS50b3A9SysicHgiO3RoaXMuZHJvcGRvd24uc3R5bGUubGVmdD0KTSsicHgiO0w9dGhpcy5kcm9wZG93bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgVT1MLmxlZnQtTTt0aGlzLmRyb3Bkb3duLnN0eWxlLnRvcD0oSy0oTC50b3AtSykpLnRvRml4ZWQoMSkrInB4Ijt0aGlzLmRyb3Bkb3duLnN0eWxlLmxlZnQ9KE0tVSkudG9GaXhlZCgxKSsicHgiO3RoaXMuaXNTaG93bj0hMDt0aGlzLmJsdXJIaWRlRnVuY3Rpb249ZnVuY3Rpb24oKXtSLmhpZGUoKX07c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLFIuYmx1ckhpZGVGdW5jdGlvbil9LDUwKX07SC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2Zvcih0aGlzLmRyb3Bkb3duLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMuZHJvcGRvd24uZmlyc3RDaGlsZDspdGhpcy5kcm9wZG93bi5yZW1vdmVDaGlsZCh0aGlzLmRyb3Bkb3duLmZpcnN0Q2hpbGQpO3RoaXMuaXNTaG93bj0hMTtudWxsIT10aGlzLmJsdXJIaWRlRnVuY3Rpb24mJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsCnRoaXMuYmx1ckhpZGVGdW5jdGlvbil9O0gucHJvdG90eXBlLnNob3duPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNTaG93bn07cmV0dXJuIEh9KCksej1mdW5jdGlvbigpe2Z1bmN0aW9uIEgoSyxNKXt2YXIgTD10aGlzO3RoaXMuY29uZmlnPUs7dGhpcy5wYXJlbnRFbGVtZW50PU07dGhpcy5iYXNlRmxhdE1lbnU9bmV3IHkodGhpcy5wYXJlbnRFbGVtZW50KTt0aGlzLmN1cnJlbnRDaG9pY2VTZWxlY3Rpb25zPXt9O3RoaXMuY29uZmlnLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oUixVKXtudWxsIT1SLm9wdGlvbnMmJihMLmN1cnJlbnRDaG9pY2VTZWxlY3Rpb25zW1VdPVIuZGVmYXVsdFNlbGVjdGlvbil9KX1ILnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKEssTSl7dmFyIEw9dGhpcyxSPVtdO3RoaXMuY29uZmlnLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oVSxZKXt2YXIgYmE9e2NhcHRpb246VS5jYXB0aW9uLG9uQ2xpY2s6bnVsbCxvbkhvdmVyOm51bGx9O2lmKG51bGwhPVUub3B0aW9ucyl7dmFyIG1hPQpMLmN1cnJlbnRDaG9pY2VTZWxlY3Rpb25zW1ldO2JhLm9uSG92ZXI9ZnVuY3Rpb24oYWEpe3ZhciBjYT1hYS50YXJnZXQsZmE9W107VS5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24oZGEsbGEpe2ZhLnB1c2goe2NhcHRpb246bGE9PT1tYT9kYSsiIChcdTI3MTMpIjpkYSxvbkNsaWNrOmZ1bmN0aW9uKCl7bWEhPT1sYSYmKEwuY3VycmVudENob2ljZVNlbGVjdGlvbnNbWV09bGEsVS5jYWxsYmFjayhsYSkpfSxvbkhvdmVyOm51bGx9KX0pO2FhPW5ldyB5KGNhKTtjYT1jYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthYS5zaG93KGNhLnRvcCxjYS5yaWdodCxmYSl9fWVsc2UgYmEub25DbGljaz1VLmNhbGxiYWNrO251bGw9PVUuaXNFbmFibGVkfHxVLmlzRW5hYmxlZCgpfHwoYmEuZGlzYWJsZWQ9ITApO1IucHVzaChiYSl9KTt0aGlzLmJhc2VGbGF0TWVudS5zaG93KEssTSxSKX07SC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe3RoaXMuYmFzZUZsYXRNZW51LmhpZGUoKX07SC5wcm90b3R5cGUuc2hvd249CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmFzZUZsYXRNZW51LnNob3duKCl9O3JldHVybiBIfSgpLHg7KGZ1bmN0aW9uKEgpe0hbSC5VUD0xXT0iVVAiO0hbSC5ET1dOPTJdPSJET1dOIjtIW0guTEVGVD0zXT0iTEVGVCI7SFtILlJJR0hUPTRdPSJSSUdIVCJ9KSh4fHwoeD17fSkpO3ZhciBDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSChLLE0sTCxSLFUsWSl7dGhpcy5zaGFwZT1LO3RoaXMuc2xpY2VEaW1zPVtdO3RoaXMuc2xpY2VJbmRpY2VzPVtdO2lmKDA9PT1sKHRoaXMuc2hhcGUpKXRocm93IEVycm9yKCJUZW5zb3JFbGVtZW50U2VsZWN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCB0ZW5zb3Igd2l0aCB6ZXJvIGVsZW1lbnRzLiIpO2ZvcihLPTA7SzxNLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5sZW5ndGg7KytLKXt0aGlzLnNsaWNlRGltcy5wdXNoKE0uc2xpY2luZ0RpbXNBbmRJbmRpY2VzW0tdLmRpbSk7dmFyIGJhPU0uc2xpY2luZ0RpbXNBbmRJbmRpY2VzW0tdLmluZGV4O2lmKG51bGw9PT0KYmEpdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgVGVuc29yRWxlbWVudFNlbGVjdGlvbiBkdWUgdG8gdW5kZXRlcm1pbmVkIHNsaWNpbmcgaW5kZXggYXQgZGltZW5zaW9uICIrSyk7dGhpcy5zbGljZUluZGljZXMucHVzaChiYSl9dGhpcy5yYW5rPXRoaXMuc2hhcGUubGVuZ3RoO2lmKDA8dGhpcy5yYW5rJiZ0aGlzLnNsaWNlRGltcy5sZW5ndGg+PXRoaXMucmFuayl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgc2xpY2VEaW1zIHRvIGhhdmUgYSBsZW5ndGggbGVzcyB0aGFuIHJhbmsgIit0aGlzLnJhbmsrIiwgYnV0IGdvdCBsZW5ndGggIit0aGlzLnNsaWNlRGltcy5sZW5ndGgpO3RoaXMudmlld0RpbXM9W107Zm9yKEs9MDtLPHRoaXMucmFuazsrK0spLTE9PT10aGlzLnNsaWNlRGltcy5pbmRleE9mKEspJiZ0aGlzLnZpZXdEaW1zLnB1c2goSyk7aWYoMjx0aGlzLnZpZXdEaW1zLmxlbmd0aCl0aHJvdyBFcnJvcigiT25seSBzZWxlY3Rpb25zIGluIDFEIGFuZCAyRCBhcmUgc3VwcG9ydGVkLiIpOwp0aGlzLnJvd1N0YXJ0PW51bGw9PUw/MDpMO3RoaXMuY29sU3RhcnQ9bnVsbD09Uj8wOlI7dGhpcy5yb3dDb3VudD1udWxsPT1VPzE6VTt0aGlzLmNvbENvdW50PW51bGw9PVk/MTpZfUgucHJvdG90eXBlLmdldEVsZW1lbnRTdGF0dXM9ZnVuY3Rpb24oSyl7aWYoSy5sZW5ndGghPT10aGlzLnJhbmspdGhyb3cgRXJyb3IoIkV4cGVjdGVkIGluZGljZXMgdG8gaGF2ZSBhIHJhbmsgb2YgIit0aGlzLnJhbmsrIiwgYnV0IGdvdCAiKyhLLmxlbmd0aCsiIChbIitLKyJdKSIpKTtmb3IodmFyIE09MDtNPEsubGVuZ3RoOysrTSlpZigtMSE9PXRoaXMuc2xpY2VEaW1zLmluZGV4T2YoTSkmJktbTV0hPT10aGlzLnNsaWNlSW5kaWNlc1t0aGlzLnNsaWNlRGltcy5pbmRleE9mKE0pXSlyZXR1cm4gbnVsbDtNPW51bGw7dmFyIEw9dGhpcy5yb3dTdGFydCt0aGlzLnJvd0NvdW50LFI9dGhpcy5jb2xTdGFydCt0aGlzLmNvbENvdW50O2lmKDA9PT10aGlzLnZpZXdEaW1zLmxlbmd0aCkwPT09Sy5sZW5ndGgmJgooTT17dG9wRWRnZTohMCxib3R0b21FZGdlOiEwLGxlZnRFZGdlOiEwLHJpZ2h0RWRnZTohMH0pO2Vsc2UgaWYoMT09PXRoaXMudmlld0RpbXMubGVuZ3RoKXt2YXIgVT10aGlzLnZpZXdEaW1zWzBdO0tbVV0+PXRoaXMucm93U3RhcnQmJktbVV08TCYmKE09e3RvcEVkZ2U6S1tVXT09PXRoaXMucm93U3RhcnQsYm90dG9tRWRnZTpLW1VdPT09TC0xLGxlZnRFZGdlOiEwLHJpZ2h0RWRnZTohMH0pfWVsc2UgaWYoMj09PXRoaXMudmlld0RpbXMubGVuZ3RoKXtVPXRoaXMudmlld0RpbXNbMF07dmFyIFk9dGhpcy52aWV3RGltc1sxXTtLW1VdPj10aGlzLnJvd1N0YXJ0JiZLW1VdPEwmJktbWV0+PXRoaXMuY29sU3RhcnQmJktbWV08UiYmKE09e3RvcEVkZ2U6S1tVXT09PXRoaXMucm93U3RhcnQsYm90dG9tRWRnZTpLW1VdPT09TC0xLGxlZnRFZGdlOktbWV09PT10aGlzLmNvbFN0YXJ0LHJpZ2h0RWRnZTpLW1ldPT09Ui0xfSl9ZWxzZSB0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBsZW5ndGggb2Ygdmlld0RpbXM6ICIrCnRoaXMudmlld0RpbXMpO3JldHVybiBNfTtILnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKEssTSl7dmFyIEw9bnVsbDtpZigwPT09dGhpcy5yYW5rfHwxPT09dGhpcy5yYW5rJiYoSz09PXguTEVGVHx8Sz09PXguUklHSFQpKXJldHVybiBudWxsO2lmKG51bGw9PT1NLnZlcnRpY2FsUmFuZ2V8fG51bGw9PT1NLnZlcnRpY2FsUmFuZ2VbMV0pdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBtb3ZlIGR1ZSB0byB1bmRldGVybWluZWQgdmVydGljYWwgcmFuZ2UuIik7Sz09PXguVVA/MDx0aGlzLnJvd1N0YXJ0JiYodGhpcy5yb3dTdGFydC0tLG51bGwhPU0udmVydGljYWxSYW5nZSYmdGhpcy5yb3dTdGFydDxNLnZlcnRpY2FsUmFuZ2VbMF0mJihMPXguVVApKTpLPT09eC5ET1dOP251bGwhPU0udmlld2luZ0RpbXMmJm51bGwhPU0udmlld2luZ0RpbXNbMF0mJnRoaXMucm93U3RhcnQ8dGhpcy5zaGFwZVtNLnZpZXdpbmdEaW1zWzBdXS0xJiYodGhpcy5yb3dTdGFydCsrLG51bGwhPU0udmVydGljYWxSYW5nZSYmCnRoaXMucm93U3RhcnQ+PU0udmVydGljYWxSYW5nZVsxXSYmKEw9eC5ET1dOKSk6Sz09PXguTEVGVD8wPHRoaXMuY29sU3RhcnQmJih0aGlzLmNvbFN0YXJ0LS0sbnVsbCE9TS5ob3Jpem9udGFsUmFuZ2UmJnRoaXMuY29sU3RhcnQ8TS5ob3Jpem9udGFsUmFuZ2VbMF0mJihMPXguTEVGVCkpOks9PT14LlJJR0hUJiZudWxsIT1NLnZpZXdpbmdEaW1zJiZudWxsIT1NLnZpZXdpbmdEaW1zWzFdJiZ0aGlzLmNvbFN0YXJ0PHRoaXMuc2hhcGVbTS52aWV3aW5nRGltc1sxXV0tMSYmKHRoaXMuY29sU3RhcnQrKyxudWxsIT1NLmhvcml6b250YWxSYW5nZSYmdGhpcy5jb2xTdGFydD49TS5ob3Jpem9udGFsUmFuZ2VbMV0mJihMPXguUklHSFQpKTt0aGlzLmNvbENvdW50PXRoaXMucm93Q291bnQ9MTtyZXR1cm4gTH07SC5wcm90b3R5cGUuZ2V0Um93U3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dTdGFydH07SC5wcm90b3R5cGUuZ2V0Um93Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dDb3VudH07CkgucHJvdG90eXBlLmdldENvbFN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sU3RhcnR9O0gucHJvdG90eXBlLmdldENvbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sQ291bnR9O3JldHVybiBIfSgpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBIKEssTSxMKXt2b2lkIDA9PT1MJiYoTD1mdW5jdGlvbigpe30pO3RoaXMucm9vdERpdj1LO3RoaXMuc2hhcGU9TTt0aGlzLm9uU2xpY2luZ1NwZWNDaGFuZ2U9TDt0aGlzLmRpbUNvbnRyb2xzPVtdO3RoaXMuZGltSW5wdXRzPVtdO3RoaXMuY29tbWFzPVtdO3RoaXMuZHJvcGRvd25zPVtdO3RoaXMuYnJhY2tldERpdnM9W251bGwsbnVsbF07dGhpcy5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWQ9W107dGhpcy5yYW5rPXRoaXMuc2hhcGUubGVuZ3RoO2lmKDM+dGhpcy5yYW5rKXRocm93IEVycm9yKCJEaW1lbnNpb24gY29udHJvbCBpcyBub3QgYXBwbGljYWJsZSB0byB0ZW5zb3Igc2hhcGVzIGxlc3MgdGhhbiAzRDogcmVjZWl2ZWQgIisKKHRoaXMucmFuaysiRCB0ZW5zb3Igc2hhcGU6ICIpKyhKU09OLnN0cmluZ2lmeSh0aGlzLnNoYXBlKSsiLiIpKTt0aGlzLmNyZWF0ZUNvbXBvbmVudHMoKTt0aGlzLnNsaWNpbmdTcGVjPW4oTSl9SC5wcm90b3R5cGUuY3JlYXRlQ29tcG9uZW50cz1mdW5jdGlvbigpe2Zvcih2YXIgSz10aGlzO3RoaXMucm9vdERpdi5maXJzdENoaWxkOyl0aGlzLnJvb3REaXYucmVtb3ZlQ2hpbGQodGhpcy5yb290RGl2LmZpcnN0Q2hpbGQpO3RoaXMuZGltQ29udHJvbHM9W107dGhpcy5kaW1JbnB1dHM9W107dGhpcy5jb21tYXM9W107dGhpcy5kcm9wZG93bnM9W107dGhpcy5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWQ9W107dGhpcy5icmFja2V0RGl2c1swXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmJyYWNrZXREaXZzWzBdLnRleHRDb250ZW50PSJTbGljaW5nOiBbIjt0aGlzLmJyYWNrZXREaXZzWzBdLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWJyYWNrZXRzIik7CnRoaXMucm9vdERpdi5hcHBlbmRDaGlsZCh0aGlzLmJyYWNrZXREaXZzWzBdKTtmb3IodmFyIE09MDtNPHRoaXMucmFuazsrK00pe3ZhciBMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0iKTtMLnRpdGxlPSJEaW1lbnNpb24gIitNKyI6IHNpemVceDNkIit0aGlzLnNoYXBlW01dO3RoaXMucm9vdERpdi5hcHBlbmRDaGlsZChMKTt0aGlzLmRpbUNvbnRyb2xzLnB1c2goTCk7dGhpcy5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWQucHVzaCghMSk7TD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO0wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0iKTtMLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMucm9vdERpdi5hcHBlbmRDaGlsZChMKTt0aGlzLmRpbUlucHV0cy5wdXNoKEwpO008dGhpcy5yYW5rLTEmJihMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEwuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0tY29tbWEiKSwKTC50ZXh0Q29udGVudD0iLCIsdGhpcy5yb290RGl2LmFwcGVuZENoaWxkKEwpLHRoaXMuY29tbWFzLnB1c2goTCkpO0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7TC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93biIpO0wuc3R5bGUuZGlzcGxheT0ibm9uZSI7dGhpcy5yb290RGl2LmFwcGVuZENoaWxkKEwpO3RoaXMuZHJvcGRvd25zLnB1c2goTCl9dGhpcy5icmFja2V0RGl2c1sxXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmJyYWNrZXREaXZzWzFdLnRleHRDb250ZW50PSJdIjt0aGlzLmJyYWNrZXREaXZzWzFdLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWJyYWNrZXRzIik7dGhpcy5yb290RGl2LmFwcGVuZENoaWxkKHRoaXMuYnJhY2tldERpdnNbMV0pO3RoaXMucm9vdERpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe0suY2xlYXJBbGxEcm9wZG93bnMoKX0pfTtILnByb3RvdHlwZS5yZW5kZXI9CmZ1bmN0aW9uKEspe2Z1bmN0aW9uIE0oYmEpe3ZhciBtYT1ZLmRpbUNvbnRyb2xzW2JhXSxhYT1ZLmRpbUlucHV0c1tiYV0sY2E9WS5kcm9wZG93bnNbYmFdO2lmKCJub25lIiE9PWFhLnN0eWxlLmRpc3BsYXkpcmV0dXJuImNvbnRpbnVlIjt2YXIgZmE9WS5zaGFwZVtiYV07aWYoLTEhPT1SLmluZGV4T2YoYmEpKXt2YXIgZGE9VVtSLmluZGV4T2YoYmEpXTttYS50ZXh0Q29udGVudD1TdHJpbmcoZGEpO2FhLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltIik7YWEudHlwZT0ibnVtYmVyIjthYS5taW49IjAiO2FhLm1heD1TdHJpbmcoZmEtMSk7YWEudmFsdWU9U3RyaW5nKGRhKTtZLmRpbUNvbnRyb2xzTGlzdGVuZXJBdHRhY2hlZFtiYV18fChtYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtMLmNsZWFyQWxsRHJvcGRvd25zKCk7bWEuc3R5bGUuZGlzcGxheT0ibm9uZSI7YWEuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn0pLGFhLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsCmZ1bmN0aW9uKCl7aWYobnVsbD09PUwuc2xpY2luZ1NwZWMpdGhyb3cgRXJyb3IoIlNsaWNpbmcgY29udHJvbCBjaGFuZ2UgY2FsbGJhY2sgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIHNwZWMuIik7dmFyIGxhPXBhcnNlSW50KGFhLnZhbHVlLDEwKTshaXNGaW5pdGUobGEpfHwwPmxhfHxsYT49ZmF8fE1hdGguZmxvb3IoZmEpIT1mYT9hYS52YWx1ZT1TdHJpbmcoTC5zbGljaW5nU3BlYy5zbGljaW5nRGltc0FuZEluZGljZXNbUi5pbmRleE9mKGJhKV0uaW5kZXgpOihMLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlc1tSLmluZGV4T2YoYmEpXS5pbmRleD1sYSxtYS50ZXh0Q29udGVudD1TdHJpbmcobGEpLEwub25TbGljaW5nU3BlY0NoYW5nZShMLnNsaWNpbmdTcGVjKSl9KSxhYS5hZGRFdmVudExpc3RlbmVyKCJibHVyIixmdW5jdGlvbigpe2FhLnN0eWxlLmRpc3BsYXk9Im5vbmUiO21hLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayJ9KSxZLmRpbUNvbnRyb2xzTGlzdGVuZXJBdHRhY2hlZFtiYV09CiEwKX1lbHNle2lmKFkuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF09PT1iYSl7aWYobnVsbD09PVkuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZSl0aHJvdyBFcnJvcigiTWlzc2luZyB2ZXJ0aWNhbCByYW5nZS4iKTttYS50ZXh0Q29udGVudD0iXHUyMTk1ICIrWS5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdKyI6IitZLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMV19ZWxzZXtpZihudWxsPT09WS5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgaG9yaXpvbnRhbCByYW5nZS4iKTttYS50ZXh0Q29udGVudD0iXHUyMTk0ICIrWS5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF0rIjoiK1kuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzFdfW1hLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltIik7WS5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWRbYmFdfHwobWEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGxhPQptYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtMLnJlbmRlckRyb3Bkb3duTWVudUl0ZW1zKGNhLGxhLmJvdHRvbSxsYS5sZWZ0LGJhKX0pLFkuZGltQ29udHJvbHNMaXN0ZW5lckF0dGFjaGVkW2JhXT0hMCl9fXZhciBMPXRoaXM7bnVsbCE9SyYmKHRoaXMuc2xpY2luZ1NwZWM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShLKSkpO2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjKXRocm93IEVycm9yKCJTbGljaW5nIGNvbnRyb2wgcmVuZGVyaW5nIGZhaWxlZCBkdWUgdG8gbWlzc2luZyBzbGljaW5nIHNwZWMuIik7dmFyIFI9dGhpcy5zbGljaW5nU3BlYy5zbGljaW5nRGltc0FuZEluZGljZXMubWFwKGZ1bmN0aW9uKGJhKXtyZXR1cm4gYmEuZGltfSksVT10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oYmEpe3JldHVybiBiYS5pbmRleH0pLFk9dGhpcztmb3IoSz0wO0s8dGhpcy5yYW5rOysrSylNKEspfTtILnByb3RvdHlwZS5yZW5kZXJEcm9wZG93bk1lbnVJdGVtcz0KZnVuY3Rpb24oSyxNLEwsUil7ZnVuY3Rpb24gVShmYSl7aWYoLTE9PT1iYS5pbmRleE9mKGZhKXx8Uj09PW1hLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzFdJiZmYTw9bWEuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF18fFI9PW1hLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzBdJiZmYT49bWEuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV0pcmV0dXJuImNvbnRpbnVlIjt2YXIgZGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZGEuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtIik7ZGEudGV4dENvbnRlbnQ9IlN3YXAgd2l0aCBkaW1lbnNpb24gIitmYTtLLmFwcGVuZENoaWxkKGRhKTtkYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2RhLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbS1hY3RpdmUiKTtZLmRpbUNvbnRyb2xzW2ZhXS5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWRpbS1oaWdobGlnaHRlZCIpfSk7CmRhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7ZGEuY2xhc3NMaXN0LnJlbW92ZSgidGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZSIpO1kuZGltQ29udHJvbHNbZmFdLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtZGltLWhpZ2hsaWdodGVkIil9KTt2YXIgbGE9bWEuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF09PT1SO2RhLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe2lmKG51bGw9PT1ZLnNsaWNpbmdTcGVjKXRocm93IEVycm9yKCJEaW1lbnNpb24gc3dhcHBpbmcgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIHNsaWNpbmcgc3BlYyIpO3ZhciBaPWJhLmluZGV4T2YoZmEpO1kuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbbGE/MDoxXT1mYTtZLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlc1taXT17ZGltOlIsaW5kZXg6MH07WS5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlPW51bGw7WS5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2U9Cm51bGw7aWYoWS5vblNsaWNpbmdTcGVjQ2hhbmdlKVkub25TbGljaW5nU3BlY0NoYW5nZShZLnNsaWNpbmdTcGVjKX0pfXZhciBZPXRoaXM7aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMpdGhyb3cgRXJyb3IoIlNsaWNpbmcgY29udHJvbCBjYW5ub3QgcmVuZGVyIGRyb3Bkb3duIG1lbnUgaXRlbXMgZHVlIHRvIG1pc3Npbmcgc2xpY2luZyBzcGVjLiIpO3RoaXMuY2xlYXJBbGxEcm9wZG93bnMoKTtmb3IodmFyIGJhPXRoaXMuc2xpY2luZ1NwZWMuc2xpY2luZ0RpbXNBbmRJbmRpY2VzLm1hcChmdW5jdGlvbihmYSl7cmV0dXJuIGZhLmRpbX0pLG1hPXRoaXMsYWE9MDthYTx0aGlzLnJhbms7KythYSlVKGFhKTtLLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Sy5zdHlsZS5kaXNwbGF5PSJub25lIn0pO2lmKEsuZmlyc3RDaGlsZCl7Sy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO0suc3R5bGUudG9wPU0rInB4IjtLLnN0eWxlLmxlZnQ9TCsicHgiO0suc3R5bGUuZGlzcGxheT0KImJsb2NrIjthYT1LLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciBjYT1hYS5sZWZ0LUw7Sy5zdHlsZS50b3A9KE0tKGFhLnRvcC1NKSkudG9GaXhlZCgxKSsicHgiO0suc3R5bGUubGVmdD0oTC1jYSkudG9GaXhlZCgxKSsicHgifX07SC5wcm90b3R5cGUuc2V0U2xpY2luZ1NwZWM9ZnVuY3Rpb24oSyl7dGhpcy5zbGljaW5nU3BlYz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEspKTtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYyl0aHJvdyBFcnJvcigiQ2Fubm90IHNldCBzbGljaW5nIHNwZWMgdG8gbnVsbC4iKTt0aGlzLnJlbmRlcih0aGlzLnNsaWNpbmdTcGVjKX07SC5wcm90b3R5cGUuY2xlYXJBbGxEcm9wZG93bnM9ZnVuY3Rpb24oKXt0aGlzLmRyb3Bkb3ducy5mb3JFYWNoKGZ1bmN0aW9uKEspe2lmKG51bGwhPUspe2Zvcig7Sy5maXJzdENoaWxkOylLLnJlbW92ZUNoaWxkKEsuZmlyc3RDaGlsZCk7Sy5zdHlsZS5kaXNwbGF5PSJub25lIn19KX07cmV0dXJuIEh9KCksCkQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBIKEspe3RoaXMuY29uZmlnPUs7aWYoIWlzRmluaXRlKEsubWluKSl0aHJvdyBFcnJvcigibWluIHZhbHVlICgiK0subWluKyIpIGlzIG5vdCBmaW5pdGUiKTtpZighaXNGaW5pdGUoSy5tYXgpKXRocm93IEVycm9yKCJtYXggdmFsdWUgKCIrSy5tYXgrIikgaXMgbm90IGZpbml0ZSIpO2lmKEsubWF4PEsubWluKXRocm93IEVycm9yKCJtYXggKCIrSy5tYXgrIikgaXMgXHgzYyBtaW4gKCIrSy5taW4rIikiKTt9SC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEssTSl7aWYodGhpcy5jb25maWcubWluIT09dGhpcy5jb25maWcubWF4KXt2YXIgTD1LLmdldENvbnRleHQoIjJkIik7aWYobnVsbCE9TCl7Zm9yKHZhciBSPUsud2lkdGgvMTAwLFU9Sy5oZWlnaHQsWT0uNipVLGJhPTA7MTAwPmJhOysrYmEpe3ZhciBtYT1SKmJhLGFhPS4yKlUsY2E9anAodGhpcy5nZXRSR0IoYmEvMTAwKih0aGlzLmNvbmZpZy5tYXgtdGhpcy5jb25maWcubWluKSt0aGlzLmNvbmZpZy5taW4pLAozKSxmYT1jYVswXSxkYT1jYVsxXTtjYT1jYVsyXTtMLmJlZ2luUGF0aCgpO0wuZmlsbFN0eWxlPSJyZ2JhKCIrZmErIiwgIitkYSsiLCAiK2NhKyIsIDEpIjtMLmZpbGxSZWN0KG1hLGFhLFIsWSk7TC5zdHJva2UoKX1udWxsIT1NJiZNPj10aGlzLmNvbmZpZy5taW4mJk08PXRoaXMuY29uZmlnLm1heCYmKEs9KE0tdGhpcy5jb25maWcubWluKS8odGhpcy5jb25maWcubWF4LXRoaXMuY29uZmlnLm1pbikqSy53aWR0aCxMLmJlZ2luUGF0aCgpLEwuZmlsbFN0eWxlPSJyZ2JhKDAsIDAsIDAsIDEpIixMLm1vdmVUbyhLLC4yKlUpLEwubGluZVRvKEstNCwwKSxMLmxpbmVUbyhLKzQsMCksTC5maWxsKCksTC5iZWdpblBhdGgoKSxMLm1vdmVUbyhLLC44KlUpLEwubGluZVRvKEstNCxVKSxMLmxpbmVUbyhLKzQsVSksTC5maWxsKCkpfX19O3JldHVybiBIfSgpLEI9ZnVuY3Rpb24oSCl7ZnVuY3Rpb24gSygpe3JldHVybiBudWxsIT09SCYmSC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9CmhwKEssSCk7Sy5wcm90b3R5cGUuZ2V0UkdCPWZ1bmN0aW9uKE0pe2lmKGlzTmFOKE0pKXJldHVyblsyNTUsMCwwXTtpZighaXNGaW5pdGUoTSkpcmV0dXJuIDA8TT9bMCwwLDI1NV06WzI1NSwxMjcuNSwwXTtNPXRoaXMuY29uZmlnLm1pbj09PXRoaXMuY29uZmlnLm1heD8uNTooTS10aGlzLmNvbmZpZy5taW4pLyh0aGlzLmNvbmZpZy5tYXgtdGhpcy5jb25maWcubWluKTtNPU1hdGgubWF4KE1hdGgubWluKE0sMSksMCk7cmV0dXJuWzI1NSpNLDI1NSpNLDI1NSpNXX07cmV0dXJuIEt9KEQpO0Q9ZnVuY3Rpb24oSCl7ZnVuY3Rpb24gSygpe3JldHVybiBudWxsIT09SCYmSC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9aHAoSyxIKTtLLnByb3RvdHlwZS5nZXRSR0I9ZnVuY3Rpb24oTSl7aWYoaXNOYU4oTSkpcmV0dXJuWzYzLjc1LDYzLjc1LDYzLjc1XTtpZighaXNGaW5pdGUoTSkpcmV0dXJuIDA+TT9bMTI3LjUsMTI3LjUsMTI3LjVdOlsxOTEuMjUsMTkxLjI1LDE5MS4yNV07dmFyIEw9CjAsUj0wLFU9MDtNPXRoaXMuY29uZmlnLm1pbj09PXRoaXMuY29uZmlnLm1heD8uNTooTS10aGlzLmNvbmZpZy5taW4pLyh0aGlzLmNvbmZpZy5tYXgtdGhpcy5jb25maWcubWluKTtNPU1hdGgubWF4KE1hdGgubWluKE0sMSksMCk7LjM1Pj1NPyhSPU0vLjM1LFU9MSk6LjM1PE0mJi42NT49TT8oTD0oTS0uMzUpLyguNjUtLjM1KSxSPTEsVT0oLjY1LU0pLyguNjUtLjM1KSk6LjY1PE0mJihMPTEsUj0oMS1NKS8uMzUpO3JldHVyblsyNTUqTCwyNTUqUiwyNTUqVV19O3JldHVybiBLfShEKTt2YXIgSTsoZnVuY3Rpb24oSCl7SFtILlRFWFQ9MV09IlRFWFQiO0hbSC5JTUFHRT0yXT0iSU1BR0UifSkoSXx8KEk9e30pKTt2YXIgTz17R3JheXNjYWxlOkIsSmV0OkR9LFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBIKEssTSxMKXt0aGlzLnJvb3RFbGVtZW50PUs7dGhpcy50ZW5zb3JWaWV3PU07dGhpcy5iYXNlUnVsZXJUaWNrPXRoaXMudG9wUnVsZXI9dGhpcy52YWx1ZVNlY3Rpb249dGhpcy5zbGljaW5nU3BlY1Jvb3Q9CnRoaXMubWVudVRodW1iPXRoaXMuaW5mb1N1YnNlY3Rpb249dGhpcy5oZWFkZXJTZWN0aW9uPW51bGw7dGhpcy50b3BSdWxlclRpY2tzPVtdO3RoaXMubGVmdFJ1bGVyVGlja3M9W107dGhpcy52YWx1ZVJvd3M9W107dGhpcy52YWx1ZURpdnM9W107dGhpcy5zbGljaW5nQ29udHJvbD10aGlzLnZhbHVlVG9vbHRpcD1udWxsO3RoaXMuY29sc0N1dG9mZj10aGlzLnJvd3NDdXRvZmY9ITE7dGhpcy5tZW51PXRoaXMubWVudUNvbmZpZz10aGlzLnNlbGVjdGlvbj1udWxsO3RoaXMuY29sb3JNYXBOYW1lPSJHcmF5c2NhbGUiO3RoaXMuY29sb3JNYXA9bnVsbDt0aGlzLnNob3dJbmRpY2VzT25UaWNrcz0hMTt0aGlzLmltYWdlQ2VsbFNpemU9MTY7dGhpcy5taW5JbWFnZUNlbGxTaXplPTQ7dGhpcy5tYXhJbWFnZUNlbGxTaXplPTQwO3RoaXMuem9vbVN0ZXBSYXRpbz0xLjI7dGhpcy5udW1lcmljU3VtbWFyeT1udWxsO3RoaXMub3B0aW9ucz1MfHx7fTt0aGlzLnNsaWNpbmdTcGVjPW4odGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGUpOwp0aGlzLnJhbms9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGUubGVuZ3RoO3RoaXMudmFsdWVSZW5kZXJNb2RlPUkuVEVYVH1ILnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gaXAodGhpcyxmdW5jdGlvbihLKXtzd2l0Y2goSy5sYWJlbCl7Y2FzZSAwOnRoaXMucm9vdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldCIpO3RoaXMucmVuZGVySGVhZGVyKCk7aWYoIShjKHRoaXMudGVuc29yVmlldy5zcGVjLmR0eXBlKXx8ZCh0aGlzLnRlbnNvclZpZXcuc3BlYy5kdHlwZSl8fGYodGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUpfHxnKHRoaXMudGVuc29yVmlldy5zcGVjLmR0eXBlKSkpdGhyb3cgRXJyb3IoIlJlbmRlcmluZyBkdHlwZSAiK3RoaXMudGVuc29yVmlldy5zcGVjLmR0eXBlKyIgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIik7cmV0dXJuWzQsdGhpcy5yZW5kZXJWYWx1ZXMoKV07CmNhc2UgMTpyZXR1cm4gSy5zZW50KCksWzJdfX0pfSl9O0gucHJvdG90eXBlLnJlbmRlckhlYWRlcj1mdW5jdGlvbigpe251bGw9PXRoaXMuaGVhZGVyU2VjdGlvbiYmKHRoaXMuaGVhZGVyU2VjdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmhlYWRlclNlY3Rpb24uY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1oZWFkZXIiKSx0aGlzLnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGVhZGVyU2VjdGlvbiksdGhpcy5jcmVhdGVNZW51KCkpO3RoaXMucmVuZGVySW5mbygpfTtILnByb3RvdHlwZS5yZW5kZXJJbmZvPWZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMuaGVhZGVyU2VjdGlvbil0aHJvdyBFcnJvcigiUmVuZGVyaW5nIHRlbnNvciBpbmZvIGZhaWxlZCBkdWUgdG8gbWlzaW5nIGhlYWRlciBzZWN0aW9uIik7bnVsbD09dGhpcy5pbmZvU3Vic2VjdGlvbiYmKHRoaXMuaW5mb1N1YnNlY3Rpb249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCnRoaXMuaW5mb1N1YnNlY3Rpb24uY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1pbmZvIiksdGhpcy5oZWFkZXJTZWN0aW9uLmFwcGVuZENoaWxkKHRoaXMuaW5mb1N1YnNlY3Rpb24pKTtmb3IoO3RoaXMuaW5mb1N1YnNlY3Rpb24uZmlyc3RDaGlsZDspdGhpcy5pbmZvU3Vic2VjdGlvbi5yZW1vdmVDaGlsZCh0aGlzLmluZm9TdWJzZWN0aW9uLmZpcnN0Q2hpbGQpO3RoaXMucmVuZGVyTmFtZSgpO3RoaXMucmVuZGVyRFR5cGUoKTt0aGlzLnJlbmRlclNoYXBlKCl9O0gucHJvdG90eXBlLnJlbmRlck5hbWU9ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLmluZm9TdWJzZWN0aW9uKXRocm93IEVycm9yKCJSZW5kZXJpbmcgdGVuc29yIG5hbWUgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIGluZm8gc3Vic2VjdGlvbi4iKTtpZihudWxsIT10aGlzLm9wdGlvbnMubmFtZSYmMCE9PXRoaXMub3B0aW9ucy5uYW1lLmxlbmd0aCl7dmFyIEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Sy5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXRlbnNvci1uYW1lIik7CksudGV4dENvbnRlbnQ9cSh0aGlzLm9wdGlvbnMubmFtZSk7Sy50aXRsZT10aGlzLm9wdGlvbnMubmFtZTt0aGlzLmluZm9TdWJzZWN0aW9uLmFwcGVuZENoaWxkKEspfX07SC5wcm90b3R5cGUucmVuZGVyRFR5cGU9ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLmluZm9TdWJzZWN0aW9uKXRocm93IEVycm9yKCJSZW5kZXJpbmcgdGVuc29yIGR0eXBlIGZhaWxlZCBkdWUgdG8gbWlzc2luZyBpbmZvIHN1YnNlY3Rpb24uIik7dmFyIEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Sy5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWR0eXBlIik7dmFyIE09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO00uY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kdHlwZS1sYWJlbCIpO00udGV4dENvbnRlbnQ9ImR0eXBlOiI7Sy5hcHBlbmRDaGlsZChNKTtNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtNLnRleHRDb250ZW50PXRoaXMudGVuc29yVmlldy5zcGVjLmR0eXBlOwpLLmFwcGVuZENoaWxkKE0pO3RoaXMuaW5mb1N1YnNlY3Rpb24uYXBwZW5kQ2hpbGQoSyl9O0gucHJvdG90eXBlLnJlbmRlclNoYXBlPWZ1bmN0aW9uKCl7aWYobnVsbD09dGhpcy5pbmZvU3Vic2VjdGlvbil0aHJvdyBFcnJvcigiUmVuZGVyaW5nIHRlbnNvciBzaGFwZSBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgaW5mbyBzdWJzZWN0aW9uLiIpO3ZhciBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0suY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1zaGFwZSIpO3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO00uY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1zaGFwZS1sYWJlbCIpO00udGV4dENvbnRlbnQ9InNoYXBlOiI7Sy5hcHBlbmRDaGlsZChNKTtNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO00uY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1zaGFwZS12YWx1ZSIpO00udGV4dENvbnRlbnQ9ayh0aGlzLnRlbnNvclZpZXcuc3BlYy5zaGFwZSk7CksuYXBwZW5kQ2hpbGQoTSk7dGhpcy5pbmZvU3Vic2VjdGlvbi5hcHBlbmRDaGlsZChLKX07SC5wcm90b3R5cGUuY3JlYXRlTWVudT1mdW5jdGlvbigpe3ZhciBLPXRoaXM7dGhpcy5tZW51Q29uZmlnPXtpdGVtczpbXX07aWYoZCh0aGlzLnRlbnNvclZpZXcuc3BlYy5kdHlwZSl8fGModGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUpfHxmKHRoaXMudGVuc29yVmlldy5zcGVjLmR0eXBlKSl0aGlzLm1lbnVDb25maWcuaXRlbXMucHVzaCh7Y2FwdGlvbjoiU2VsZWN0IGRpc3BsYXkgbW9kZS4uLiIsb3B0aW9uczpbIlRleHQiLCJJbWFnZSJdLGRlZmF1bHRTZWxlY3Rpb246MCxjYWxsYmFjazpmdW5jdGlvbihNKXswPT09TT8oSy52YWx1ZVJlbmRlck1vZGU9SS5URVhULEsucmVuZGVyVmFsdWVzKCkpOihLLnZhbHVlUmVuZGVyTW9kZT1JLklNQUdFLEsudGVuc29yVmlldy5nZXROdW1lcmljU3VtbWFyeSgpLnRoZW4oZnVuY3Rpb24oTCl7Sy5udW1lcmljU3VtbWFyeT1MO0sucmVuZGVyVmFsdWVzKCl9KSl9fSksCnRoaXMubWVudUNvbmZpZy5pdGVtcy5wdXNoKHtjYXB0aW9uOiJTZWxlY3QgY29sb3IgbWFwLi4uIixvcHRpb25zOk9iamVjdC5rZXlzKE8pLGRlZmF1bHRTZWxlY3Rpb246MCxjYWxsYmFjazpmdW5jdGlvbihNKXtLLmNvbG9yTWFwTmFtZT1PYmplY3Qua2V5cyhPKVtNXTtLLnJlbmRlclZhbHVlcygpfSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy52YWx1ZVJlbmRlck1vZGU9PT1JLklNQUdFfX0pLHRoaXMubWVudUNvbmZpZy5pdGVtcy5wdXNoKHtjYXB0aW9uOiJab29tIGluIChJbWFnZSBtb2RlKSIsY2FsbGJhY2s6ZnVuY3Rpb24oKXtLLnpvb21Jbk9uZVN0ZXBBbmRSZW5kZXJWYWx1ZXMoKX0saXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIEsudmFsdWVSZW5kZXJNb2RlPT09SS5JTUFHRX19KSx0aGlzLm1lbnVDb25maWcuaXRlbXMucHVzaCh7Y2FwdGlvbjoiWm9vbSBvdXQgKEltYWdlIG1vZGUpIixjYWxsYmFjazpmdW5jdGlvbigpe0suem9vbU91dE9uZVN0ZXBBbmRSZW5kZXJWYWx1ZXMoKX0sCmlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBLLnZhbHVlUmVuZGVyTW9kZT09PUkuSU1BR0V9fSk7bnVsbCE9PXRoaXMubWVudUNvbmZpZyYmMDx0aGlzLm1lbnVDb25maWcuaXRlbXMubGVuZ3RoJiYodGhpcy5tZW51PW5ldyB6KHRoaXMubWVudUNvbmZpZyx0aGlzLmhlYWRlclNlY3Rpb24pLHRoaXMucmVuZGVyTWVudVRodW1iKCkpfTtILnByb3RvdHlwZS56b29tSW5PbmVTdGVwQW5kUmVuZGVyVmFsdWVzPWZ1bmN0aW9uKCl7dGhpcy5pbWFnZUNlbGxTaXplKnRoaXMuem9vbVN0ZXBSYXRpbzw9dGhpcy5tYXhJbWFnZUNlbGxTaXplJiYodGhpcy5pbWFnZUNlbGxTaXplKj10aGlzLnpvb21TdGVwUmF0aW8sdGhpcy5yZW5kZXJWYWx1ZXMoKSl9O0gucHJvdG90eXBlLnpvb21PdXRPbmVTdGVwQW5kUmVuZGVyVmFsdWVzPWZ1bmN0aW9uKCl7dGhpcy5pbWFnZUNlbGxTaXplL3RoaXMuem9vbVN0ZXBSYXRpbz49dGhpcy5taW5JbWFnZUNlbGxTaXplJiYodGhpcy5pbWFnZUNlbGxTaXplLz0KdGhpcy56b29tU3RlcFJhdGlvLHRoaXMucmVuZGVyVmFsdWVzKCkpfTtILnByb3RvdHlwZS5yZW5kZXJNZW51VGh1bWI9ZnVuY3Rpb24oKXt2YXIgSz10aGlzO2lmKG51bGw9PXRoaXMuaGVhZGVyU2VjdGlvbil0aHJvdyBFcnJvcigiUmVuZGVyaW5nIG1lbnUgdGh1bWIgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIGhlYWRlciBzZWN0aW9uLiIpO3RoaXMubWVudVRodW1iPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMubWVudVRodW1iLnRleHRDb250ZW50PSJcdTIyZWUiO3RoaXMubWVudVRodW1iLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtbWVudS10aHVtYiIpO3RoaXMuaGVhZGVyU2VjdGlvbi5hcHBlbmRDaGlsZCh0aGlzLm1lbnVUaHVtYik7dGhpcy5tZW51VGh1bWIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7aWYobnVsbCE9PUsubWVudSlpZihLLm1lbnUuc2hvd24oKSlLLm1lbnUuaGlkZSgpO2Vsc2V7dmFyIE09Sy5tZW51VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CksubWVudS5zaG93KE0uYm90dG9tLE0ubGVmdCl9fSl9O0gucHJvdG90eXBlLnJlbmRlclZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBLPXRoaXM7cmV0dXJuIGlwKHRoaXMsZnVuY3Rpb24oTSl7c3dpdGNoKE0ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gMjx0aGlzLnJhbmsmJm51bGw9PT10aGlzLnNsaWNpbmdTcGVjUm9vdCYmKHRoaXMuc2xpY2luZ1NwZWNSb290PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2xpY2luZ1NwZWNSb290LmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtc2xpY2luZy1ncm91cCIpLHRoaXMucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zbGljaW5nU3BlY1Jvb3QpKSxudWxsPT10aGlzLnZhbHVlU2VjdGlvbiYmKHRoaXMudmFsdWVTZWN0aW9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMudmFsdWVTZWN0aW9uLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtc2VjdGlvbiIpLAp0aGlzLnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmFsdWVTZWN0aW9uKSx0aGlzLnZhbHVlU2VjdGlvbi5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZnVuY3Rpb24oTCl7cmV0dXJuIGEoSyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFI7cmV0dXJuIGlwKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpSPSExO251bGw9PXRoaXMub3B0aW9ucy53aGVlbFpvb21LZXl8fCJjdHJsIj09PXRoaXMub3B0aW9ucy53aGVlbFpvb21LZXk/Uj1MLmN0cmxLZXk6ImFsdCI9PT10aGlzLm9wdGlvbnMud2hlZWxab29tS2V5P1I9TC5hbHRLZXk6InNoaWZ0Ij09PXRoaXMub3B0aW9ucy53aGVlbFpvb21LZXkmJihSPUwuc2hpZnRLZXkpO2lmKFImJnRoaXMudmFsdWVSZW5kZXJNb2RlPT09SS5JTUFHRSlyZXR1cm4gTC5zdG9wUHJvcGFnYXRpb24oKSxMLnByZXZlbnREZWZhdWx0KCksMDxMLmRlbHRhWT90aGlzLnpvb21PdXRPbmVTdGVwQW5kUmVuZGVyVmFsdWVzKCk6CnRoaXMuem9vbUluT25lU3RlcEFuZFJlbmRlclZhbHVlcygpLFsyXTtpZihudWxsPT10aGlzLnNlbGVjdGlvbilyZXR1cm5bMl07TC5zdG9wUHJvcGFnYXRpb24oKTtMLnByZXZlbnREZWZhdWx0KCk7dGhpcy5oaWRlVmFsdWVUb29sdGlwKCk7cmV0dXJuWzQsdGhpcy5zY3JvbGxVcE9yRG93bigwPEwuZGVsdGFZP3guRE9XTjp4LlVQKV07Y2FzZSAxOnJldHVybiBVLnNlbnQoKSxbMl19fSl9KX0pLHRoaXMudmFsdWVTZWN0aW9uLnRhYkluZGV4PTEwMjQsdGhpcy52YWx1ZVNlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oTCl7dmFyIFI9WzM4LDQwLDM3LDM5XTtpZihudWxsIT1LLnNlbGVjdGlvbiYmLTEhPT1SLmluZGV4T2YoTC5rZXlDb2RlKSl7TC5zdG9wUHJvcGFnYXRpb24oKTtMLnByZXZlbnREZWZhdWx0KCk7Sy5oaWRlVmFsdWVUb29sdGlwKCk7dmFyIFU9Uj1udWxsOzM4PT09TC5rZXlDb2RlP1U9eC5VUDo0MD09PUwua2V5Q29kZT9VPXguRE9XTjoKMzc9PT1MLmtleUNvZGU/VT14LkxFRlQ6Mzk9PT1MLmtleUNvZGUmJihVPXguUklHSFQpO251bGwhPT1VJiYoUj1LLnNlbGVjdGlvbi5tb3ZlKFUsSy5zbGljaW5nU3BlYykpO251bGw9PT1SP0sucmVuZGVyU2VsZWN0aW9uKCk6Uj09PXguVVB8fFI9PT14LkRPV04/Sy5zY3JvbGxVcE9yRG93bihSKTooUj09PXguTEVGVHx8Uj09PXguUklHSFQpJiZLLnNjcm9sbExlZnRPclJpZ2h0KFIpfX0pKSx0aGlzLmNsZWFyVmFsdWVTZWN0aW9uKCksdGhpcy5jcmVhdGVUb3BSdWxlcigpLHRoaXMuY3JlYXRlTGVmdFJ1bGVyKCksdGhpcy5jcmVhdGVWYWx1ZURpdnMoKSxbNCx0aGlzLnJlbmRlclJ1bGVyc0FuZFZhbHVlRGl2cygpXTtjYXNlIDE6cmV0dXJuIE0uc2VudCgpLDI8dGhpcy5yYW5rJiYodGhpcy5zbGljaW5nQ29udHJvbD1uZXcgRih0aGlzLnNsaWNpbmdTcGVjUm9vdCx0aGlzLnRlbnNvclZpZXcuc3BlYy5zaGFwZSxmdW5jdGlvbihMKXtyZXR1cm4gYShLLHZvaWQgMCx2b2lkIDAsCmZ1bmN0aW9uKCl7cmV0dXJuIGlwKHRoaXMsZnVuY3Rpb24oUil7c3dpdGNoKFIubGFiZWwpe2Nhc2UgMDppZihwKHRoaXMuc2xpY2luZ1NwZWMsTCkpcmV0dXJuWzMsMl07dGhpcy5zbGljaW5nU3BlYz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEwpKTtyZXR1cm5bNCx0aGlzLnJlbmRlcigpXTtjYXNlIDE6cmV0dXJuIFIuc2VudCgpLFszLDRdO2Nhc2UgMjpyZXR1cm4gdGhpcy5zbGljaW5nU3BlYz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEwpKSxbNCx0aGlzLnJlbmRlclJ1bGVyc0FuZFZhbHVlRGl2cygpXTtjYXNlIDM6Ui5zZW50KCksUi5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0pLHRoaXMuc2xpY2luZ0NvbnRyb2wucmVuZGVyKHRoaXMuc2xpY2luZ1NwZWMpKSxbMl19fSl9KX07SC5wcm90b3R5cGUuY2xlYXJWYWx1ZVNlY3Rpb249ZnVuY3Rpb24oKXtpZihudWxsIT09dGhpcy52YWx1ZVNlY3Rpb24pe2Zvcig7dGhpcy52YWx1ZVNlY3Rpb24uZmlyc3RDaGlsZDspdGhpcy52YWx1ZVNlY3Rpb24ucmVtb3ZlQ2hpbGQodGhpcy52YWx1ZVNlY3Rpb24uZmlyc3RDaGlsZCk7CnRoaXMudG9wUnVsZXI9bnVsbDt0aGlzLnZhbHVlUm93cz1bXX19O0gucHJvdG90eXBlLmNyZWF0ZVRvcFJ1bGVyPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcztpZihudWxsPT09dGhpcy52YWx1ZVNlY3Rpb24pdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgdG9wIHJ1bGVyIGR1ZSB0byBtaXNzaW5nIHZhbHVlIHNlY3Rpb24uIik7bnVsbD09dGhpcy50b3BSdWxlciYmKHRoaXMudG9wUnVsZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy50b3BSdWxlci5jbGFzc0xpc3QuYWRkKCJ0ZW5lc29yLXdpZGdldC10b3AtcnVsZXIiKSx0aGlzLnRvcFJ1bGVyLnN0eWxlLndoaXRlU3BhY2U9Im5vd3JhcCIsdGhpcy52YWx1ZVNlY3Rpb24uYXBwZW5kQ2hpbGQodGhpcy50b3BSdWxlciksdGhpcy50b3BSdWxlclRpY2tzPVtdLHRoaXMudG9wUnVsZXIuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKFkpe3JldHVybiBhKEssdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBpcCh0aGlzLApmdW5jdGlvbihiYSl7c3dpdGNoKGJhLmxhYmVsKXtjYXNlIDA6aWYobnVsbD09dGhpcy5zZWxlY3Rpb24pcmV0dXJuWzJdO1kuc3RvcFByb3BhZ2F0aW9uKCk7WS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuaGlkZVZhbHVlVG9vbHRpcCgpO3JldHVybls0LHRoaXMuc2Nyb2xsTGVmdE9yUmlnaHQoMDxZLmRlbHRhWT94LlJJR0hUOnguTEVGVCldO2Nhc2UgMTpyZXR1cm4gYmEuc2VudCgpLFsyXX19KX0pfSkpO2Zvcig7dGhpcy50b3BSdWxlci5maXJzdENoaWxkOyl0aGlzLnRvcFJ1bGVyLnJlbW92ZUNoaWxkKHRoaXMudG9wUnVsZXIuZmlyc3RDaGlsZCk7dGhpcy5iYXNlUnVsZXJUaWNrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuYmFzZVJ1bGVyVGljay5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXRvcC1ydWxlci10aWNrIik7dGhpcy50b3BSdWxlci5hcHBlbmRDaGlsZCh0aGlzLmJhc2VSdWxlclRpY2spOzI8PXRoaXMucmFuayYmKHRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlPQpbMCxudWxsXSk7dmFyIE09MT49dGhpcy5yYW5rPzE6dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1sxXV07dmFyIEw9dGhpcy5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDt0aGlzLmNvbHNDdXRvZmY9ITE7Zm9yKHZhciBSPTA7UjxNOysrUil7dmFyIFU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7VS5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXRvcC1ydWxlci10aWNrIik7dGhpcy52YWx1ZVJlbmRlck1vZGU9PT1JLklNQUdFJiYoVS5zdHlsZS53aWR0aD10aGlzLmltYWdlQ2VsbFNpemUrInB4Iik7dGhpcy50b3BSdWxlci5hcHBlbmRDaGlsZChVKTt0aGlzLnRvcFJ1bGVyVGlja3MucHVzaChVKTtpZihVLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0Pj1MKXtpZigyPD10aGlzLnJhbmspe2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZSl0aHJvdyBFcnJvcigiTWlzc2luZyBob3Jpem9udGFsIHJhbmdlIGZvciAiKwp0aGlzLnJhbmsrIkQgdGVuc29yLiIpO3RoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzFdPVIrMTt0aGlzLmNvbHNDdXRvZmY9ITB9YnJlYWt9fWlmKCF0aGlzLmNvbHNDdXRvZmYmJjI8PXRoaXMucmFuayl7aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIGhvcml6b250YWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVsxXT1NfX07SC5wcm90b3R5cGUuY3JlYXRlTGVmdFJ1bGVyPWZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMudmFsdWVTZWN0aW9uKXRocm93IEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGxlZnQgcnVsZXIgZHVlIHRvIG1pc3NpbmcgdmFsdWUgc2VjdGlvbi4iKTt0aGlzLnZhbHVlUm93cz1bXTt0aGlzLmxlZnRSdWxlclRpY2tzPVtdOzE8PXRoaXMucmFuayYmKHRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZT0KWzAsbnVsbF0pO3ZhciBLPTA9PT10aGlzLnJhbms/MTp0aGlzLnRlbnNvclZpZXcuc3BlYy5zaGFwZVt0aGlzLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzBdXTt0aGlzLnJvd3NDdXRvZmY9ITE7Zm9yKHZhciBNPXRoaXMucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLEw9MDtMPEs7KytMKXt2YXIgUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtSLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtcm93Iik7dGhpcy52YWx1ZVJlbmRlck1vZGU9PT1JLklNQUdFJiYoUi5zdHlsZS5oZWlnaHQ9dGhpcy5pbWFnZUNlbGxTaXplKyJweCIsUi5zdHlsZS5saW5lSGVpZ2h0PXRoaXMuaW1hZ2VDZWxsU2l6ZSsicHgiKTt0aGlzLnZhbHVlU2VjdGlvbi5hcHBlbmRDaGlsZChSKTt0aGlzLnZhbHVlUm93cy5wdXNoKFIpO3ZhciBVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1UuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC10b3AtcnVsZXItdGljayIpOwp0aGlzLnZhbHVlUmVuZGVyTW9kZT09PUkuSU1BR0UmJihVLnN0eWxlLmhlaWdodD10aGlzLmltYWdlQ2VsbFNpemUrInB4IixVLnN0eWxlLmxpbmVIZWlnaHQ9dGhpcy5pbWFnZUNlbGxTaXplKyJweCIpO1IuYXBwZW5kQ2hpbGQoVSk7dGhpcy5sZWZ0UnVsZXJUaWNrcy5wdXNoKFUpO2lmKFUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tPj1NKXtpZigxPD10aGlzLnJhbmspe2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgdmVydGljYWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTt0aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMV09TCsxO3RoaXMucm93c0N1dG9mZj0hMH1icmVha319aWYoIXRoaXMucm93c0N1dG9mZiYmMTw9dGhpcy5yYW5rKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIHZlcnRpY2FsIHJhbmdlIGZvciAiKwp0aGlzLnJhbmsrIkQgdGVuc29yLiIpO3RoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVsxXT1LfX07SC5wcm90b3R5cGUuY3JlYXRlVmFsdWVEaXZzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSyhiYSl7ZnVuY3Rpb24gbWEoY2Epe3ZhciBmYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmYS5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdiIpO1UudmFsdWVSZW5kZXJNb2RlPT09SS5JTUFHRSYmKGZhLnN0eWxlLndpZHRoPVUuaW1hZ2VDZWxsU2l6ZSsicHgiLGZhLnN0eWxlLmhlaWdodD1VLmltYWdlQ2VsbFNpemUrInB4IixmYS5zdHlsZS5saW5lSGVpZ2h0PVUuaW1hZ2VDZWxsU2l6ZSsicHgiKTtVLnZhbHVlUm93c1tiYV0uYXBwZW5kQ2hpbGQoZmEpO1UudmFsdWVEaXZzW2JhXS5wdXNoKGZhKTtmYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtNLnNlbGVjdGlvbj1uZXcgQyhNLnRlbnNvclZpZXcuc3BlYy5zaGFwZSxNLnNsaWNpbmdTcGVjLApudWxsPT1NLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2V8fG51bGw9PU0uc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVswXT8wOk0uc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVswXStiYSxudWxsPT1NLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZXx8bnVsbD09TS5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF0/MDpNLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVswXStjYSwxLDEpO00ucmVuZGVyU2VsZWN0aW9uKCl9KTtmYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3ZhciBkYT1mYS5nZXRBdHRyaWJ1dGUoImRldGFpbGVkLXZhbHVlIik7aWYobnVsbCE9PWRhKXt2YXIgbGE9TS5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxaPWZhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEZhPVouYm90dG9tLVoudG9wLHhhPVoucmlnaHQtWi5sZWZ0LHlhPU0uY2FsY3VsYXRlSW5kaWNlcyhiYSxjYSk7TS5kcmF3VmFsdWVUb29sdGlwKHlhLApkYSxaLnRvcC1sYS50b3ArLjgqRmEsWi5sZWZ0LWxhLmxlZnQrLjc1KnhhKX19KTtmYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe00uaGlkZVZhbHVlVG9vbHRpcCgpfSl9VS52YWx1ZURpdnNbYmFdPVtdO2Zvcih2YXIgYWE9MDthYTxMOysrYWEpbWEoYWEpfXZhciBNPXRoaXM7aWYobnVsbD09PXRoaXMudmFsdWVSb3dzKXRocm93IEVycm9yKCJWYWx1ZSByb3dzIGFyZSB1bmV4cGVjdGVkbHkgdW5pbml0aWFsaXplZC4iKTt0aGlzLnZhbHVlRGl2cz1bXTtmb3IodmFyIEw9dGhpcy50b3BSdWxlclRpY2tzLmxlbmd0aCxSPXRoaXMudmFsdWVSb3dzLmxlbmd0aCxVPXRoaXMsWT0wO1k8UjsrK1kpSyhZKX07SC5wcm90b3R5cGUucmVuZGVyVG9wUnVsZXI9ZnVuY3Rpb24oKXtpZigyPD10aGlzLnJhbmspZm9yKHZhciBLPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV1dLE09MDtNPHRoaXMudG9wUnVsZXJUaWNrcy5sZW5ndGg7KytNKXtpZihudWxsPT09CnRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIGhvcml6b250YWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTt2YXIgTD10aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVswXStNO3RoaXMuc2hvd0luZGljZXNPblRpY2tzJiYodGhpcy50b3BSdWxlclRpY2tzW01dLnRleHRDb250ZW50PUw8Sz8iIitMOiIiKX19O0gucHJvdG90eXBlLnJlbmRlckxlZnRSdWxlcj1mdW5jdGlvbigpe2lmKDE8PXRoaXMucmFuaylmb3IodmFyIEs9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV0sTT0wO008dGhpcy5sZWZ0UnVsZXJUaWNrcy5sZW5ndGg7KytNKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIHZlcnRjaWFsIHJhbmdlIGZvciAiK3RoaXMucmFuaysiRCB0ZW5zb3IuIik7dmFyIEw9dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdKwpNO3RoaXMuc2hvd0luZGljZXNPblRpY2tzJiYodGhpcy5sZWZ0UnVsZXJUaWNrc1tNXS50ZXh0Q29udGVudD1MPEs/IiIrTDoiIil9fTtILnByb3RvdHlwZS5yZW5kZXJWYWx1ZURpdnM9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSyxNLEwsUixVLFksYmEsbWEsYWEsY2EsZmEsZGEsbGEsWixGYSx4YSx5YTtyZXR1cm4gaXAodGhpcyxmdW5jdGlvbihCYSl7c3dpdGNoKEJhLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEs9dGhpcy52YWx1ZURpdnMubGVuZ3RoLE09dGhpcy52YWx1ZURpdnNbMF0ubGVuZ3RoLFs0LHRoaXMudGVuc29yVmlldy52aWV3KHRoaXMuc2xpY2luZ1NwZWMpXTtjYXNlIDE6TD1CYS5zZW50KCk7MD09PXRoaXMucmFuaz9MPVtbTF1dOjE9PT10aGlzLnJhbmsmJihMPUwubWFwKGZ1bmN0aW9uKEdhKXtyZXR1cm5bR2FdfSkpO1I9dGhpcy5nZXRWYWx1ZUNsYXNzKCk7VT10aGlzLnZhbHVlUmVuZGVyTW9kZTtpZihVPT09CkkuSU1BR0Upe2lmKG51bGw9PXRoaXMubnVtZXJpY1N1bW1hcnkpdGhyb3cgRXJyb3IoIkZhaWxlZCB0byByZW5kZXIgaW1hZ2UgcmVwcmVzZW50YXRpb24gb2YgdGVuc29yIGR1ZSB0byBtaXNzaW5nIG51bWVyaWMgc3VtbWFyeSIpO1k9dGhpcy5udW1lcmljU3VtbWFyeTtiYT1ZLm1pbmltdW07bWE9WS5tYXhpbXVtO2lmKG51bGw9PWJhfHxudWxsPT1tYSl0aHJvdyBFcnJvcigiRmFpbGVkIHRvIHJlbmRlciBpbWFnZSByZXByZXNlbnRhdGlvbiBvZiB0ZW5zb3IgZHVlIHRvIG1pc3NpbmcgbWluaW11bSBvciBtYXhpbXVtIHZhbHVlcyBpbiBudW1lcmljIHN1bW1hcnkiKTthYT17bWluOmJhLG1heDptYX07dGhpcy5jb2xvck1hcD10aGlzLmNvbG9yTWFwTmFtZSBpbiBPP25ldyBPW3RoaXMuY29sb3JNYXBOYW1lXShhYSk6bmV3IEIoYWEpfWZvcihjYT0wO2NhPEs7KytjYSlmb3IoZmE9MDtmYTxNOysrZmEpZGE9dGhpcy52YWx1ZURpdnNbY2FdW2ZhXSxjYTxMLmxlbmd0aCYmZmE8TFtjYV0ubGVuZ3RoPwoobGE9TFtjYV1bZmFdLFU9PT1JLklNQUdFPyhaPWpwKHRoaXMuY29sb3JNYXAuZ2V0UkdCKGxhKSwzKSxGYT1aWzBdLHhhPVpbMV0seWE9WlsyXSxkYS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InJnYigiK0ZhKyIsICIreGErIiwgIit5YSsiKSIpOiJudW1lcmljIj09PVI/ZGEudGV4dENvbnRlbnQ9cihsYSxjKHRoaXMudGVuc29yVmlldy5zcGVjLmR0eXBlKSk6ImJvb2xlYW4iPT09Uj9kYS50ZXh0Q29udGVudD10KGxhKToic3RyaW5nIj09PVImJihkYS50ZXh0Q29udGVudD12KGxhKSksZGEuc2V0QXR0cmlidXRlKCJkZXRhaWxlZC12YWx1ZSIsdGhpcy5nZXREZXRhaWxlZFZhbHVlVG9vbHRpcFN0cmluZyhsYSkpKTooZGEudGV4dENvbnRlbnQ9IiIsZGEuc2V0QXR0cmlidXRlKCJkZXRhaWxlZC12YWx1ZSIsIiIpKTt0aGlzLnJlbmRlclNlbGVjdGlvbigpO3JldHVyblsyXX19KX0pfTtILnByb3RvdHlwZS5nZXREZXRhaWxlZFZhbHVlVG9vbHRpcFN0cmluZz1mdW5jdGlvbihLKXtyZXR1cm4iYm9vbGVhbiI9PT0KdGhpcy5nZXRWYWx1ZUNsYXNzKCk/dChLLCExKToic3RyaW5nIj09PXRoaXMuZ2V0VmFsdWVDbGFzcygpPyJMZW5ndGgtIitLLmxlbmd0aCsnIHN0cmluZzogIicrdihLLDUwMCkrJyInOlN0cmluZyhLKX07SC5wcm90b3R5cGUucmVuZGVyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5zZWxlY3Rpb24pZm9yKHZhciBLPXRoaXMudmFsdWVEaXZzLmxlbmd0aCxNPXRoaXMudmFsdWVEaXZzWzBdLmxlbmd0aCxMPTA7TDxLOysrTClmb3IodmFyIFI9MDtSPE07KytSKXt2YXIgVT10aGlzLnZhbHVlRGl2c1tMXVtSXTtVLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbiIpO1UuY2xhc3NMaXN0LnJlbW92ZSgidGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXRvcCIpO1UuY2xhc3NMaXN0LnJlbW92ZSgidGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLWJvdHRvbSIpO1UuY2xhc3NMaXN0LnJlbW92ZSgidGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLWxlZnQiKTsKVS5jbGFzc0xpc3QucmVtb3ZlKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24tcmlnaHQiKTt2YXIgWT10aGlzLmNhbGN1bGF0ZUluZGljZXMoTCxSKTtZPXRoaXMuc2VsZWN0aW9uLmdldEVsZW1lbnRTdGF0dXMoWSk7bnVsbCE9PVkmJihVLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbiIpLFkudG9wRWRnZSYmVS5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24tdG9wIiksWS5ib3R0b21FZGdlJiZVLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1ib3R0b20iKSxZLmxlZnRFZGdlJiZVLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0IiksWS5yaWdodEVkZ2UmJlUuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXJpZ2h0IikpfX07SC5wcm90b3R5cGUuY2FsY3VsYXRlSW5kaWNlcz0KZnVuY3Rpb24oSyxNKXtmb3IodmFyIEw9W10sUj10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24obWEpe3JldHVybiBtYS5kaW19KSxVPXRoaXMuc2xpY2luZ1NwZWMuc2xpY2luZ0RpbXNBbmRJbmRpY2VzLm1hcChmdW5jdGlvbihtYSl7cmV0dXJuIG1hLmluZGV4fSksWT0wO1k8dGhpcy5yYW5rOysrWSlpZigtMSE9PVIuaW5kZXhPZihZKSl7dmFyIGJhPVVbUi5pbmRleE9mKFkpXTtpZihudWxsPT09YmEpdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBjYWxjdWxhdGUgaW5kaWNlczogVW5kZXRlcm1pbmVkIGluZGV4IGF0IGRpbWVuc2lvbiAiK1kpO0wucHVzaChiYSl9ZWxzZSBpZihZPT09dGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXSl7aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZXx8bnVsbD09PXRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVswXSl0aHJvdyBFcnJvcigiRmFpbGVkIHRvIGNhbGN1bGF0ZSBpbmRpY2VzIGR1ZSB0byB1bmRlcnRlcm1pbmVkIHZlcnRpY2FsIHJhbmdlLiIpOwpMLnB1c2godGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdK0spfWVsc2UgaWYoWT09PXRoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV0pe2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZXx8bnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzBdKXRocm93IEVycm9yKCJGYWlsZWQgdG8gY2FsY3VsYXRlIGluZGljZXMgZHVlIHRvIHVuZGVydGVybWluZWQgdmVydGljYWwgcmFuZ2UuIik7TC5wdXNoKHRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzBdK00pfXJldHVybiBMfTtILnByb3RvdHlwZS5kcmF3VmFsdWVUb29sdGlwPWZ1bmN0aW9uKEssTSxMLFIpe251bGw9PT10aGlzLnZhbHVlVG9vbHRpcCYmKHRoaXMudmFsdWVUb29sdGlwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMudmFsdWVUb29sdGlwLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcCIpLHRoaXMucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZVRvb2x0aXApKTsKZm9yKDt0aGlzLnZhbHVlVG9vbHRpcC5maXJzdENoaWxkOyl0aGlzLnZhbHVlVG9vbHRpcC5yZW1vdmVDaGlsZCh0aGlzLnZhbHVlVG9vbHRpcC5maXJzdENoaWxkKTt2YXIgVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtVLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC1pbmRpY2VzIik7VS50ZXh0Q29udGVudD0iSW5kaWNlczogIitKU09OLnN0cmluZ2lmeShLKTt0aGlzLnZhbHVlVG9vbHRpcC5hcHBlbmRDaGlsZChVKTtLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0suY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwLXZhbHVlIik7Sy50ZXh0Q29udGVudD1NO3RoaXMudmFsdWVUb29sdGlwLmFwcGVuZENoaWxkKEspO3RoaXMudmFsdWVUb29sdGlwLnN0eWxlLnRvcD1MKyJweCI7dGhpcy52YWx1ZVRvb2x0aXAuc3R5bGUubGVmdD1SKyJweCI7dGhpcy52YWx1ZVRvb2x0aXAuc3R5bGUuZGlzcGxheT0iYmxvY2siOwp0aGlzLnZhbHVlUmVuZGVyTW9kZT09SS5JTUFHRSYmbnVsbCE9dGhpcy5jb2xvck1hcCYmKEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksTC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLXRvb2x0aXAtY29sb3JiYXIiKSx0aGlzLnZhbHVlVG9vbHRpcC5hcHBlbmRDaGlsZChMKSx0aGlzLmNvbG9yTWFwLnJlbmRlcihMLHBhcnNlRmxvYXQoTSkpKX07SC5wcm90b3R5cGUuaGlkZVZhbHVlVG9vbHRpcD1mdW5jdGlvbigpe251bGwhPXRoaXMudmFsdWVUb29sdGlwJiYodGhpcy52YWx1ZVRvb2x0aXAuc3R5bGUuZGlzcGxheT0ibm9uZSIpfTtILnByb3RvdHlwZS5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnM9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gaXAodGhpcyxmdW5jdGlvbihLKXtzd2l0Y2goSy5sYWJlbCl7Y2FzZSAwOnJldHVybiBudWxsIT10aGlzLnNsaWNpbmdDb250cm9sJiZ0aGlzLnNsaWNpbmdDb250cm9sLnNldFNsaWNpbmdTcGVjKHRoaXMuc2xpY2luZ1NwZWMpLAp0aGlzLmNhbGN1bGF0ZVNob3dJbmRpY2VzT25SdWxlclRpY2tzKCksdGhpcy5yZW5kZXJUb3BSdWxlcigpLHRoaXMucmVuZGVyTGVmdFJ1bGVyKCksWzQsdGhpcy5yZW5kZXJWYWx1ZURpdnMoKV07Y2FzZSAxOnJldHVybiBLLnNlbnQoKSxbMl19fSl9KX07SC5wcm90b3R5cGUuY2FsY3VsYXRlU2hvd0luZGljZXNPblJ1bGVyVGlja3M9ZnVuY3Rpb24oKXtpZigyPD10aGlzLnJhbmspe3ZhciBLPXRoaXMudG9wUnVsZXJUaWNrc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnNob3dJbmRpY2VzT25UaWNrcz1LLnJpZ2h0LUsubGVmdD45Kk1hdGguY2VpbChNYXRoLmxvZyh0aGlzLnRlbnNvclZpZXcuc3BlYy5zaGFwZVt0aGlzLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzBdXSkvTWF0aC5MTjEwKX1lbHNlIDE9PT10aGlzLnJhbms/KEs9dGhpcy5sZWZ0UnVsZXJUaWNrc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLnNob3dJbmRpY2VzT25UaWNrcz0xNjxLLmJvdHRvbS0KSy50b3ApOnRoaXMuc2hvd0luZGljZXNPblRpY2tzPSExfTtILnByb3RvdHlwZS5zY3JvbGxIb3Jpem9udGFsbHk9ZnVuY3Rpb24oSyl7cmV0dXJuIGEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE0sTDtyZXR1cm4gaXAodGhpcyxmdW5jdGlvbihSKXtzd2l0Y2goUi5sYWJlbCl7Y2FzZSAwOmlmKDE+PXRoaXMucmFuaylyZXR1cm5bMl07aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIGhvcml6b250YWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTtNPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV1dO2lmKDA+S3x8Sz49TSl0aHJvdyBFcnJvcigiSW5kZXggb3V0IG9mIGJvdW5kOiAiK0srIiBpcyBvdXRzaWRlIFswLCAiK00rIl0pIik7dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF09Szt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVsxXT0KSyt0aGlzLnRvcFJ1bGVyVGlja3MubGVuZ3RoO0w9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1sxXV07dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMV0+TCYmKHRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzFdPUwpO3JldHVybls0LHRoaXMucmVuZGVyUnVsZXJzQW5kVmFsdWVEaXZzKCldO2Nhc2UgMTpyZXR1cm4gUi5zZW50KCksWzJdfX0pfSl9O0gucHJvdG90eXBlLnNjcm9sbFZlcnRpY2FsbHk9ZnVuY3Rpb24oSyl7cmV0dXJuIGEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE0sTDtyZXR1cm4gaXAodGhpcyxmdW5jdGlvbihSKXtzd2l0Y2goUi5sYWJlbCl7Y2FzZSAwOmlmKDA9PT10aGlzLnJhbmspcmV0dXJuWzJdO2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgdmVydGljYWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKwoiRCB0ZW5zb3IuIik7aWYobnVsbD09PXRoaXMudmFsdWVSb3dzKXRocm93IEVycm9yKCJWZXJ0aWNhbCBzY3JvbGxpbmcgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIHZhbHVlIHJvd3MuIik7TT10aGlzLnRlbnNvclZpZXcuc3BlYy5zaGFwZVt0aGlzLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzBdXTtpZigwPkt8fEs+PU0pdGhyb3cgRXJyb3IoIkluZGV4IG91dCBvZiBib3VuZDogIitLKyIgaXMgb3V0c2lkZSBbMCwgIitNKyJdKSIpO3RoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVswXT1LO3RoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVsxXT1LK3RoaXMudmFsdWVSb3dzLmxlbmd0aDtMPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF1dO3RoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVsxXT5MJiYodGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzFdPUwpO3JldHVybls0LHRoaXMucmVuZGVyUnVsZXJzQW5kVmFsdWVEaXZzKCldOwpjYXNlIDE6cmV0dXJuIFIuc2VudCgpLFsyXX19KX0pfTtILnByb3RvdHlwZS5zY3JvbGxVcE9yRG93bj1mdW5jdGlvbihLKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTSxMLFI7cmV0dXJuIGlwKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDppZigwPT09dGhpcy5yYW5rfHwhdGhpcy5yb3dzQ3V0b2ZmKXJldHVyblsyXTtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIHZlcnRpY2FsIHJhbmdlIGZvciAiK3RoaXMucmFuaysiRCB0ZW5zb3IuIik7aWYobnVsbD09PXRoaXMudmFsdWVSb3dzKXRocm93IEVycm9yKCJWZXJ0aWNhbCBzY3JvbGxpbmcgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIHZhbHVlIHJvd3MuIik7TT10aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMF07aWYoSyE9PXguRE9XTilyZXR1cm5bMywzXTtMPXRoaXMudmFsdWVSb3dzLmxlbmd0aC0KMTtSPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF1dLUw7cmV0dXJuIE08Uj9bNCx0aGlzLnNjcm9sbFZlcnRpY2FsbHkoTSsxKV06WzMsMl07Y2FzZSAxOlUuc2VudCgpLFUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzMsNV07Y2FzZSAzOnJldHVybiAwPD1NLTE/WzQsdGhpcy5zY3JvbGxWZXJ0aWNhbGx5KE0tMSldOlszLDVdO2Nhc2UgNDpVLnNlbnQoKSxVLmxhYmVsPTU7Y2FzZSA1OnJldHVyblsyXX19KX0pfTtILnByb3RvdHlwZS5zY3JvbGxMZWZ0T3JSaWdodD1mdW5jdGlvbihLKXtyZXR1cm4gYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTSxMLFI7cmV0dXJuIGlwKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDppZigxPj10aGlzLnJhbmt8fCF0aGlzLmNvbHNDdXRvZmYpcmV0dXJuWzJdO2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZSl0aHJvdyBFcnJvcigiSG9yaXpvbnRhbCBzY3JvbGxpbmcgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIGhvcml6b250YWwgcmFuZ2UuIik7Ck09dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF07aWYoSyE9PXguUklHSFQpcmV0dXJuWzMsM107TD10aGlzLnRvcFJ1bGVyVGlja3MubGVuZ3RoLTE7Uj10aGlzLnRlbnNvclZpZXcuc3BlYy5zaGFwZVt0aGlzLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzFdXS1MO3JldHVybiBNPFI/WzQsdGhpcy5zY3JvbGxIb3Jpem9udGFsbHkoTSsxKV06WzMsMl07Y2FzZSAxOlUuc2VudCgpLFUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzMsNV07Y2FzZSAzOnJldHVybiAwPD1NLTE/WzQsdGhpcy5zY3JvbGxIb3Jpem9udGFsbHkoTS0xKV06WzMsNV07Y2FzZSA0OlUuc2VudCgpLFUubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzJdfX0pfSl9O0gucHJvdG90eXBlLm5hdmlnYXRlVG9JbmRpY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGlwKHRoaXMsZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigibmF2aWdhdGVUb0luZGljZXMoKSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiIpOwp9KX0pfTtILnByb3RvdHlwZS5nZXRWYWx1ZUNsYXNzPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGU7cmV0dXJuIGMoSyl8fGQoSyk/Im51bWVyaWMiOmYoSyk/ImJvb2xlYW4iOiJzdHJpbmcifTtyZXR1cm4gSH0oKTtEPU9iamVjdC5mcmVlemUoe3RlbnNvcldpZGdldDpmdW5jdGlvbihILEssTSl7cmV0dXJuIG5ldyBQKEgsSyxNKX0sVkVSU0lPTjoiMC4wLjAifSk7d2luZG93LnRlbnNvcl93aWRnZXQ9RH0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLWRlYnVnZ2VyLWxpbmUtY2hhcnQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGVidWdnZXItbGluZS1jaGFydCIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX2RlZmF1bHRTZXJpZXNOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZToiX19kZWJ1Z2dlcl9kYXRhX18iLHJlYWRvbmx5OiEwfSxfbGluZUNoYXJ0WENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsdmFsdWU6KCk9PigpPT57Y29uc3QgYT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXI7cmV0dXJue3NjYWxlOmEsYXhpczpuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhhLCJib3R0b20iKSxhY2Nlc3NvcjpjPT5jLnN0ZXB9fX0sX2xpbmVDaGFydFlWYWx1ZUFjY2Vzc29yOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCx2YWx1ZTooKT0+YT0+YS5zY2FsYXJ9LF9saW5lQ2hhcnRUb29sdGlwQ29sdW1uczp7dHlwZTpBcnJheSxyZWFkT25seTohMCx2YWx1ZTooKT0+W3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6YT0+CiJzdGVwXHgzZCIrYS5kYXR1bS5zdGVwKyI7IHNjYWxhclx4M2QgIithLmRhdHVtLnNjYWxhcn1dfSxfbGluZUNoYXJ0U21vb3RoaW5nRW5hYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsicmVuZGVyKGRhdGEpIl0scmVuZGVyKGEpe2lmKG51bGwhPWEpe3ZhciBjPXRoaXMuJCQoInZ6LWxpbmUtY2hhcnQyIik7Yy5zZXRWaXNpYmxlU2VyaWVzKFt0aGlzLl9kZWZhdWx0U2VyaWVzTmFtZV0pO3ZhciBkPVtdLGY9YS54O2E9YS55O2ZvcihsZXQgZz0wO2c8Zi5sZW5ndGg7KytnKWQucHVzaCh7c3RlcDpmW2ddLHNjYWxhcjphW2ddfSk7Yy5zZXRTZXJpZXNEYXRhKHRoaXMuX2RlZmF1bHRTZXJpZXNOYW1lLGQpfX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtdGVuc29yLXZhbHVlLXZpZXcuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGVuc29yLXZhbHVlLXZpZXciLHByb3BlcnRpZXM6e3ZpZXdJZDpTdHJpbmcsdGVuc29yTmFtZTpTdHJpbmcsZGVidWdPcDpTdHJpbmcsZGV2aWNlTmFtZTpTdHJpbmcsbWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZTpTdHJpbmcsc2xpY2luZzpTdHJpbmcsdGltZUluZGljZXM6U3RyaW5nLGR0eXBlOlN0cmluZyxzaGFwZTpBcnJheSxjb250aW51ZVRvQnV0dG9uQ2FsbGJhY2s6T2JqZWN0LGNsb3NlQnV0dG9uQ2FsbGJhY2s6T2JqZWN0LHRlbnNvck5hbWVDYWxsYmFjazpPYmplY3QsdGVuc29yV2lkZ2V0Ok9iamVjdCxnZXRIZWFsdGhQaWxsOkZ1bmN0aW9uLF9pc1RlbnNvclZhbHVlU2NhbGFyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pc1RlbnNvclZhbHVlTGluZUNoYXJ0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pc1RlbnNvclZhbHVlSW1hZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2RhdGFTY2FsYXI6e3R5cGU6TnVtYmVyLHZhbHVlOm51bGx9LApfbGluZUNoYXJ0RGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfZGF0YUltYWdlU3JjOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uUmVxdWVzdE1hbmFnZXIoMTApfX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZVRpbWVJbmRpY2VzVG9nZ2xlKHRpbWVJbmRpY2VzKSJdLHJlbmRlclRlbnNvclZhbHVlKCl7aWYodGhpcy50ZW5zb3JOYW1lKWlmKG51bGw9PXRoaXMuc2xpY2luZyl7dGhpcy5zZXQoIl91c2VUZW5zb3JXaWRnZXQiLCEwKTtjb25zdCBjPXtzcGVjOntkdHlwZTp0aGlzLmR0eXBlLHNoYXBlOnRoaXMuc2hhcGV9LGdldDooKT0+e3Rocm93IEVycm9yKCJ0ZW5zb3JWaWV3LmdldCgpIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIik7fSx2aWV3OmQ9Pntjb25zdCBmPXRoaXM7cmV0dXJuIEJiKGZ1bmN0aW9uKigpe2NvbnN0IGc9Zi5zaGFwZS5sZW5ndGgsbD1kLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAocD0+CnAuZGltKSxrPWQuc2xpY2luZ0RpbXNBbmRJbmRpY2VzLm1hcChwPT5wLmluZGV4KTtsZXQgbj0iWyI7Zm9yKGxldCBwPTA7cDxnOysrcCktMSE9PWwuaW5kZXhPZihwKT9uKz1gJHtrW2wuaW5kZXhPZihwKV19YDpkLnZpZXdpbmdEaW1zWzBdPT09cD9uKz1gJHtkLnZlcnRpY2FsUmFuZ2VbMF19OiR7ZC52ZXJ0aWNhbFJhbmdlWzFdfWA6ZC52aWV3aW5nRGltc1sxXT09PXAmJihuKz1gJHtkLmhvcml6b250YWxSYW5nZVswXX06JHtkLmhvcml6b250YWxSYW5nZVsxXX1gKSxwPGctMSYmKG4rPSIsIik7bis9Il0iO3JldHVybiBuZXcgUHJvbWlzZSgocCxxKT0+e2NvbnN0IHI9Zi5fZ2V0VGVuc29yRGF0YVVSTCh7d2F0Y2hfa2V5OmYudGVuc29yTmFtZSsiOiIrZi5kZWJ1Z09wLHNsaWNpbmc6bix0aW1lX2luZGljZXM6Zi50aW1lSW5kaWNlcyxtYXBwaW5nOiJub25lIn0pO2YuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocikudGhlbih0PT57bnVsbD09dC5lcnJvcj9wKHQudGVuc29yX2RhdGFbdC50ZW5zb3JfZGF0YS5sZW5ndGgtCjFdKTpxKHQuZXJyb3IpfSkuY2F0Y2godD0+cSh0KSl9KX0pfSxnZXROdW1lcmljU3VtbWFyeTooKT0+e2NvbnN0IGQ9dGhpcztyZXR1cm4gQmIoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLGcpPT57Y29uc3QgbD1kLnRlbnNvck5hbWUrIjoiK2QuZGVidWdPcDtkLmdldEhlYWx0aFBpbGwobCxkLmRldmljZU5hbWUsZC5tYXliZUJhc2VFeHBhbmRlZE5vZGVOYW1lLGs9PntudWxsPT1rP2coYEZhaWxlZCB0byBnZXQgaGVhbHRoIHBpbGwgZm9yIHdhdGNoIGtleSAke2x9YCk6Zih7ZWxlbWVudENvdW50OmtbMV0sbWluaW11bTprWzhdLG1heGltdW06a1s5XX0pfSl9KX0pfX07c2V0VGltZW91dCgoKT0+e251bGw9PXRoaXMudGVuc29yV2lkZ2V0JiYodGhpcy50ZW5zb3JXaWRnZXQ9dGVuc29yX3dpZGdldC50ZW5zb3JXaWRnZXQodGhpcy4kJCgiI3RlbnNvci13aWRnZXQiKSxjLHt3aGVlbFpvb21LZXk6ImFsdCJ9KSk7dGhpcy50ZW5zb3JXaWRnZXQucmVuZGVyKCl9LAoxMCl9ZWxzZXt0aGlzLnNldCgiX3VzZVRlbnNvcldpZGdldCIsITEpO3ZhciBhPXRoaXMuX3JhbmtGcm9tU2xpY2luZyh0aGlzLnNsaWNpbmcudHJpbSgpKTtjb25zdCBjPXRoaXMuX2lzVGltZUluZGljZXNTaW5nbGVTdGVwKHRoaXMudGltZUluZGljZXMpO2xldCBkPWE7aWYoIWMpe2lmKDE8YSl7dGhpcy5fc2hvd1RvYXN0KCJIaXN0b3J5IGZvciB0ZW5zb3JzIFx4M2UgMUQgaXMgbm90IHlldCBzdXBwb3J0ZWQuIik7cmV0dXJufWQrPTF9YT10aGlzLl9nZXRUZW5zb3JEYXRhVVJMKHt3YXRjaF9rZXk6dGhpcy50ZW5zb3JOYW1lKyI6Iit0aGlzLmRlYnVnT3Asc2xpY2luZzp0aGlzLnNsaWNpbmcsdGltZV9pbmRpY2VzOnRoaXMudGltZUluZGljZXMsbWFwcGluZzoyPD1kPyJpbWFnZS9wbmciOiJub25lIn0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihmPT57dGhpcy4kJCgiI2RlYnVnLW9wIikudGV4dENvbnRlbnQ9dGhpcy5fY2FsY3VsYXRlRGVidWdPcFRvRGlzcGxheSgpOwppZihudWxsIT1mLmVycm9yKXRoaXMuX3Nob3dUb2FzdChmLmVycm9yLnR5cGUrIjogIitmLmVycm9yLm1lc3NhZ2UpO2Vsc2UgaWYoZj1jP2YudGVuc29yX2RhdGFbMF06Zi50ZW5zb3JfZGF0YSwwPT09ZCl0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgic2NhbGFyIiksdGhpcy5zZXQoIl9kYXRhU2NhbGFyIixmKTtlbHNlIGlmKDE9PT1kKXt0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgibGluZUNoYXJ0Iik7bGV0IGc9e3g6W10seTpmfTtmb3IobGV0IGw9MDtsPGYubGVuZ3RoOysrbClnLngucHVzaChsKzEpO3RoaXMuc2V0KCJfbGluZUNoYXJ0RGF0YSIsZyl9ZWxzZSAyPD1kPyh0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgiaW1hZ2UiKSx0aGlzLnNldCgiX2RhdGFJbWFnZVNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiK2YpKTp0aGlzLl9zaG93VG9hc3QoIlZpc3VhbGl6YXRpb24gb2YgcmFuay0iK2QrIiB0ZW5zb3JzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIpfSl9fSwKcmVmcmVzaCgpe3RoaXMudGVuc29yTmFtZS50cmltKCkmJnRoaXMucmVuZGVyVGVuc29yVmFsdWUoKX0sX2dldFRlbnNvckRhdGFVUkwoYSl7Y29uc3QgYz1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvdGVuc29yX2RhdGEiKTtyZXR1cm4gUW8uYWRkUGFyYW1zKGMsYSl9LF9yYW5rRnJvbVNsaWNpbmcoYSl7YS5zdGFydHNXaXRoKCJbIikmJihhPWEuc2xpY2UoMSxhLmxlbmd0aC0xKSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiAwO3thPWEuc3BsaXQoIiwiKTtsZXQgYz1hLmxlbmd0aDtmb3IoY29uc3QgZCBvZiBhKWlzTmFOKE51bWJlcihkKSl8fGMtLTtyZXR1cm4gY319LF9zZXRWaXN1YWxpemF0aW9uVHlwZShhKXsic2NhbGFyIj09PWE/KHRoaXMuc2V0KCJfaXNWYWx1ZVNjYWxhciIsITApLHRoaXMuc2V0KCJfaXNWYWx1ZUxpbmVDaGFydCIsITEpLHRoaXMuc2V0KCJfaXNWYWx1ZUltYWdlIiwhMSkpOiJsaW5lQ2hhcnQiPT09YT8odGhpcy5zZXQoIl9pc1ZhbHVlU2NhbGFyIiwKITEpLHRoaXMuc2V0KCJfaXNWYWx1ZUxpbmVDaGFydCIsITApLHRoaXMuc2V0KCJfaXNWYWx1ZUltYWdlIiwhMSkpOiJpbWFnZSI9PT1hPyh0aGlzLnNldCgiX2lzVmFsdWVTY2FsYXIiLCExKSx0aGlzLnNldCgiX2lzVmFsdWVMaW5lQ2hhcnQiLCExKSx0aGlzLnNldCgiX2lzVmFsdWVJbWFnZSIsITApKTpjb25zb2xlLmVycm9yKCJJbnZhbGlkIHZpc3VhbGl6YXRpb25UeXBlOiIsYSl9LF90aW1lSW5kaWNlc1RvZ2dsZUJ1dHRvbkNhbGxiYWNrKCl7ImZ1bGwgaGlzdG9yeSI9PT1Qb2x5bWVyLmRvbSh0aGlzLiQkKCIjdGltZS1pbmRpY2VzLXRvZ2dsZS1idXR0b24iKSkudGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKT90aGlzLnNldCgidGltZUluZGljZXMiLCI6Iik6dGhpcy5zZXQoInRpbWVJbmRpY2VzIiwiLTEiKTt0aGlzLnJlbmRlclRlbnNvclZhbHVlKCl9LF91cGRhdGVUaW1lSW5kaWNlc1RvZ2dsZShhKXt0aGlzLl9pc1RpbWVJbmRpY2VzU2luZ2xlU3RlcChhKT9Qb2x5bWVyLmRvbSh0aGlzLiQkKCIjdGltZS1pbmRpY2VzLXRvZ2dsZS1idXR0b24iKSkudGV4dENvbnRlbnQ9CiJGdWxsIEhpc3RvcnkiOlBvbHltZXIuZG9tKHRoaXMuJCQoIiN0aW1lLWluZGljZXMtdG9nZ2xlLWJ1dHRvbiIpKS50ZXh0Q29udGVudD0iTGF0ZXN0IFRpbWUgUG9pbnQifSxfaXNUaW1lSW5kaWNlc1NpbmdsZVN0ZXAoYSl7YS5zdGFydHNXaXRoKCJbIikmJihhPWEuc2xpY2UoMSxhLmxlbmd0aC0xKSk7cmV0dXJuIWlzTmFOKE51bWJlcihhKSl9LF9jYWxjdWxhdGVEZWJ1Z09wVG9EaXNwbGF5KCl7cmV0dXJuIkRlYnVnSWRlbnRpdHkiPT09dGhpcy5kZWJ1Z09wPyIiOnRoaXMuZGVidWdPcH0sX3Nob3dUb2FzdChhKXt0aGlzLiQudGVuc29yVmFsdWVUb2FzdC5zZXRBdHRyaWJ1dGUoInRleHQiLGEpO3RoaXMuJC50ZW5zb3JWYWx1ZVRvYXN0Lm9wZW4oKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtdGVuc29yLXZhbHVlLW11bHRpLXZpZXcuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGVuc29yLXZhbHVlLW11bHRpLXZpZXciLHByb3BlcnRpZXM6e2NvbnRpbnVlVG9DYWxsYmFjazpGdW5jdGlvbix0ZW5zb3JOYW1lQ2xpY2tlZDpGdW5jdGlvbixfdGVuc29yVmlld0NvdW50ZXI6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LGdldEhlYWx0aFBpbGw6RnVuY3Rpb259LGFkZFZpZXcoYSl7Y29uc3QgYz10aGlzLiQkKCIjbXVsdGktdGVuc29yLXZpZXctY29udGFpbmVyIiksZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi10ZW5zb3ItdmFsdWUtdmlldyIpO2Quc2V0QXR0cmlidXRlKCJjbGFzcyIsImRlYnVnZ2VyLXRlbnNvci12aWV3Iik7ZC52aWV3SWQ9YS52aWV3SWQ7ZC50ZW5zb3JOYW1lPWEudGVuc29yTmFtZTtkLmRlYnVnT3A9YS5kZWJ1Z09wO2QuZGV2aWNlTmFtZT1hLmRldmljZU5hbWU7ZC5tYXliZUJhc2VFeHBhbmRlZE5vZGVOYW1lPWEubWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZTtkLmR0eXBlPWEuZHR5cGU7ZC5zaGFwZT1hLnNoYXBlOwpkLnNsaWNpbmc9YS5zbGljaW5nO2QudGltZUluZGljZXM9YS50aW1lSW5kaWNlcztkLmNsb3NlQnV0dG9uQ2FsbGJhY2s9dGhpcy5fY3JlYXRlQ2xvc2VCdXR0b25DYWxsYmFjayhhLnZpZXdJZCk7ZC5jb250aW51ZVRvQnV0dG9uQ2FsbGJhY2s9KCk9Pnt0aGlzLmNvbnRpbnVlVG9DYWxsYmFjayhhLmRldmljZU5hbWUsYS5tYXliZUJhc2VFeHBhbmRlZE5vZGVOYW1lKX07ZC50ZW5zb3JOYW1lQ2FsbGJhY2s9KCk9Pnt0aGlzLnRlbnNvck5hbWVDbGlja2VkKGEuZGV2aWNlTmFtZSxhLm1heWJlQmFzZUV4cGFuZGVkTm9kZU5hbWUpfTtkLmdldEhlYWx0aFBpbGw9dGhpcy5nZXRIZWFsdGhQaWxsO2MuYXBwZW5kQ2hpbGQoZCk7ZC5yZWZyZXNoKCl9LGdldFZpZXdzKCl7Y29uc3QgYT1bXTtfLmZvckVhY2godGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZWJ1Z2dlci10ZW5zb3ItdmlldyIpLGM9PnthLnB1c2goe3ZpZXdJZDpjLnZpZXdJZCx0ZW5zb3JOYW1lOmMudGVuc29yTmFtZSwKZGVidWdPcDpjLmRlYnVnT3Asc2xpY2luZzpjLnNsaWNpbmcsdGltZUluZGljZXM6Yy50aW1lSW5kaWNlc30pfSk7cmV0dXJuIGF9LHJlbmRlclRlbnNvclZhbHVlcygpe18uZm9yRWFjaCh0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgiLmRlYnVnZ2VyLXRlbnNvci12aWV3IiksYT0+e2EucmVuZGVyVGVuc29yVmFsdWUoKX0pfSxfcmVkcmF3Vmlld3MoYSl7Y29uc3QgYz10aGlzLiQkKCIjbXVsdGktdGVuc29yLXZpZXctY29udGFpbmVyIik7Xy5mb3JFYWNoKHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuZGVidWdnZXItdGVuc29yLXZpZXciKSxkPT57Yy5yZW1vdmVDaGlsZChkKX0pO18uZm9yRWFjaChhLGQ9Pnt0aGlzLmFkZFZpZXcoZCl9KX0sX2NyZWF0ZUNsb3NlQnV0dG9uQ2FsbGJhY2soYSl7cmV0dXJuKCk9Pntjb25zdCBjPVtdLGQ9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZWJ1Z2dlci10ZW5zb3ItdmlldyIpO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7KytmKXtjb25zdCBnPQpkW2ZdO2cudmlld0lkIT09YSYmYy5wdXNoKHt2aWV3SWQ6Zy52aWV3SWQsdGVuc29yTmFtZTpnLnRlbnNvck5hbWUsZGVidWdPcDpnLmRlYnVnT3AsZHR5cGU6Zy5kdHlwZSxzaGFwZTpnLnNoYXBlLHNsaWNpbmc6Zy5zbGljaW5nLHRpbWVJbmRpY2VzOmcudGltZUluZGljZXN9KX10aGlzLl9yZWRyYXdWaWV3cyhjKX19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RlbnNvci1zaGFwZS1oZWxwZXIuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoZCxmKXtyZXR1cm4gZDw9Zj8iOjoiOiI6OiIrTWF0aC5jZWlsKGQvZil9YS5nZXREZWZhdWx0U2xpY2luZz1mdW5jdGlvbihkKXtyZXR1cm4gMD09PWQubGVuZ3RoPyIiOjE9PT1kLmxlbmd0aD8iWyIrYyhkWzBdLDFFMykrIl0iOjI9PT1kLmxlbmd0aD8iWyIrYyhkWzBdLDI1MCkrIiwgIitjKGRbMV0sMjUwKSsiXSI6bnVsbH07YS5yYW5rRnJvbVNsaWNpbmc9ZnVuY3Rpb24oZCl7ZC5zdGFydHNXaXRoKCJbIikmJihkPWQuc2xpY2UoMSxkLmxlbmd0aC0xKSk7aWYoMD09PWQubGVuZ3RoKXJldHVybiAwO3tkPWQuc3BsaXQoIiwiKTtsZXQgZj1kLmxlbmd0aDtmb3IoY29uc3QgZyBvZiBkKWlzTmFOKE51bWJlcihnKSl8fGYtLTtyZXR1cm4gZn19fSkoZ3B8fChncD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQuaHRtbC5qcwpjb25zdCBrcD0oKT0+d2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0fHxkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxscD0oKT0+d2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxtcD0oa3AoKS03MCkvMjsKUG9seW1lcih7aXM6InRmLWRlYnVnZ2VyLWRhc2hib2FyZCIscHJvcGVydGllczp7X3RvcFJpZ2h0VGFiczp7dHlwZTpBcnJheSx2YWx1ZTpbe2lkOiJ0YWItcnVudGltZS1ncmFwaHMiLG5hbWU6IlJ1bnRpbWUgR3JhcGhzIn0se2lkOiJ0YWItdGVuc29yLXZhbHVlcyIsbmFtZToiVGVuc29yIFZhbHVlcyJ9XSxyZWFkb25seTohMH0sX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF9pc1RvcFJpZ2h0VGVuc29yVmFsdWVzQWN0aXZlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF90b3BSaWdodFNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZToiMCIsb2JzZXJ2ZXI6Il90b3BSaWdodFNlbGVjdGVkQ2hhbmdlZCJ9LF9sb25nUG9sbENvdW50Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfc3RlcEJ1dHRvblRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJTdGVwIn0sX2NvbnRpbnVlQnV0dG9uVGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IkNvbnRpbnVlLi4uIn0sCl90ZW5zb3JWaWV3SWRDb3VudGVyOnt0eXBlOk51bWJlcix2YWx1ZTowfSxpc1JlbG9hZERpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAscmVhZE9ubHk6ITB9LGFscmVhZHlTdGFydGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9jdXJyZW50U2Vzc2lvblJ1bkluZm86e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9zZXNzaW9uUnVuVG90YWxDb3VudGVyOnt0eXBlOk51bWJlcix2YWx1ZTowfSxfc2Vzc2lvblJ1bkNvdW50ZXJzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3Nlc3Npb25SdW5LZXkyRGV2aWNlTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfYWN0aXZlU2Vzc2lvblJ1bktleTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX2FjdGl2ZVNlc3Npb25SdW5EZXZpY2VzOnt0eXBlOkFycmF5LHZhbHVlOltdfSxfYWN0aXZlU2Vzc2lvblJ1bk51bURldmljZXM6e3R5cGU6TnVtYmVyLHZhbHVlOi0xfSxfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZTp7dHlwZTpTdHJpbmcsCnZhbHVlOm51bGwsbm90aWZ5OiEwfSxfaGlnaGxpZ2h0Tm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9jb250aW51ZVRvVHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9jb250aW51ZVRvQ291bnRlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX2NvbnRpbnVlU3RvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY29udGludWVUb1RhcmdldDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9jb250aW51ZVRvQ291bnRlclRhcmdldDp7dHlwZTpOdW1iZXIsdmFsdWU6LTF9LF9mb3JjZUV4cGFuZEFuZENoZWNrTm9kZU5hbWU6U3RyaW5nLF9mb3JjZUV4cGFuZE5vZGVOYW1lOlN0cmluZyxfc291cmNlRm9jdXNOb2RlTmFtZTpTdHJpbmcsX3NvdXJjZUNvZGVTaG93bjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfc2hvd1NvdXJjZUNvZGVDaGFuZ2VkIn0sX2dyYXBoUHJvZ3Jlc3M6e3R5cGU6T2JqZWN0fSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4KbmV3IFFvLlJlcXVlc3RNYW5hZ2VyKDUwKX0sX2J1c3k6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2xlZnRQYW5lV2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOlRvLmdldE51bWJlckluaXRpYWxpemVyKCJfbGVmdFBhbmVXaWR0aCIse2RlZmF1bHRWYWx1ZTo0NTB9KSxvYnNlcnZlcjoiX2xlZnRQYW5lV2lkdGhPYnNlcnZlciJ9LF9taW5sZWZ0UGFuZVdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZTo0NTAscmVhZE9ubHk6ITB9LF9tYXhsZWZ0UGFuZVdpZHRoOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVNYXhsZWZ0UGFuZVdpZHRoKF93aW5kb3dXaWR0aCwgX21heE1haW5Db250ZW50V2lkdGgsIF9yZXNpemVyV2lkdGgpIn0sX21heE1haW5Db250ZW50V2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOjM1MCxyZWFkT25seTohMH0sX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHQ6e3R5cGU6TnVtYmVyLHZhbHVlOlRvLmdldE51bWJlckluaXRpYWxpemVyKCJfdG9wUmlnaHRRdWFkcmFudEhlaWdodCIsCntkZWZhdWx0VmFsdWU6bXB9KSxvYnNlcnZlcjoiX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHRPYnNlcnZlciJ9LF9taW5Ub3BSaWdodFF1YWRyYW50SGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZToyMDAscmVhZE9ubHk6ITB9LF9tYXhUb3BSaWdodFF1YWRyYW50SGVpZ2h0Ont0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVNYXhUb3BSaWdodFF1YWRyYW50SGVpZ2h0KF93aW5kb3dIZWlnaHQsIF9yZXNpemVyV2lkdGgpIn0sX3Jlc2l6ZXJXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6MzAscmVhZE9ubHk6ITB9LF93aW5kb3dXaWR0aDpOdW1iZXIsX3dpbmRvd0hlaWdodDpOdW1iZXIsX2RlYnVnV2F0Y2hlczpBcnJheSxfbGF0ZXN0U2Vzc2lvblJ1bjpPYmplY3R9LG9ic2VydmVyczpbIl9vbkFjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWVDaGFuZ2UoX2FjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWUpIiwiX3NpemVEYXNoYm9hcmRSZWdpb25zKF9sZWZ0UGFuZVdpZHRoLCBfdG9wUmlnaHRRdWFkcmFudEhlaWdodCwgX3dpbmRvd1dpZHRoKSIsCiJfZ3JhcGhQcm9ncmVzc1VwZGF0ZWQoX2dyYXBoUHJvZ3Jlc3MpIl0scmVhZHkoKXt0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e3RoaXMuX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpfSwhMSk7dGhpcy5yZWxvYWQoKX0sbG9uZ19wb2xsKCl7Y29uc3QgYT17cG9zOisrdGhpcy5fbG9uZ1BvbGxDb3VudH07bGV0IGM9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImRlYnVnZ2VyIiwiL2NvbW0iKTtjPVFvLmFkZFBhcmFtcyhjLGEpO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbihkPT57Y29uc3QgZj1kLnR5cGU7ZD1kLmRhdGE7aWYoIm1ldGEiPT09Zil7dmFyIGc9ZC5ydW5fa2V5LGw9Z1swXS5zcGxpdCgiLCIpLGs9Z1sxXS5zcGxpdCgiLCIpO2NvbnN0IHA9Z1syXS5zcGxpdCgiLCIpO3ZhciBuPXRoaXMuX2FjdGl2ZVNlc3Npb25SdW5LZXk7dGhpcy5zZXQoIl9hY3RpdmVTZXNzaW9uUnVuS2V5IiwKZyk7dGhpcy5zZXQoIl9sYXRlc3RTZXNzaW9uUnVuIix7ZmVlZHM6bCxmZXRjaGVzOmssdGFyZ2V0czpwfSk7dGhpcy5zZXQoIl9zZXNzaW9uUnVuU29sZUFjdGl2ZSIsITApO3ZvaWQgMD09PXRoaXMuX3Nlc3Npb25SdW5LZXkyRGV2aWNlTmFtZXNbZ10/KHRoaXMuX3Nlc3Npb25SdW5LZXkyRGV2aWNlTmFtZXNbZ109W10sdGhpcy5zZXQoIl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlcyIsW10pKTp0aGlzLnNldCgiX2FjdGl2ZVNlc3Npb25SdW5EZXZpY2VzIix0aGlzLl9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzW2ddKTt0aGlzLl9jdXJyZW50U2Vzc2lvblJ1bkluZm89bD0iRmVlZHM6ICIrbCsiOyBGZXRjaGVzOiAiK2srIjsgVGFyZ2V0czogIitwO3RoaXMuX3Nlc3Npb25SdW5Db3VudGVycy5oYXNPd25Qcm9wZXJ0eShsKT90aGlzLl9zZXNzaW9uUnVuQ291bnRlcnNbbF0rPTE6dGhpcy5fc2Vzc2lvblJ1bkNvdW50ZXJzW2xdPTE7dGhpcy5fc2Vzc2lvblJ1blRvdGFsQ291bnRlcisrOwp0aGlzLiQuaW5pdGlhbERpYWxvZy5jbG9zZURpYWxvZygpO3RoaXMuX2NvbnRpbnVlVG9UeXBlJiZfLmlzRXF1YWwobixnKXx8KHRoaXMuX3Byb2Nlc3NHYXRlZEdycGNEZWJ1Z09wcyhnLCExKSx0aGlzLl9hbm5vdW5jZU5ld1Nlc3Npb25SdW4oKSl9ZWxzZSJ0ZW5zb3IiPT09Zj8oZz1kLmRldmljZV9uYW1lLG49ZC5ub2RlX25hbWUsbD1kLm1heWJlX2Jhc2VfZXhwYW5kZWRfbm9kZV9uYW1lLHRoaXMuX2FjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWUhPWc/dGhpcy5zZXQoIl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lIixnKTohdGhpcy5fY29udGludWVUb1R5cGUmJnRoaXMuX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlJiYodGhpcy5fZm9jdXNPbkdyYXBoTm9kZShnLGwpLHRoaXMuc2V0KCJfZm9yY2VFeHBhbmROb2RlTmFtZSIsZysiLyIrbCkpLHRoaXMuc2V0KCJfc2Vzc2lvblJ1blNvbGVBY3RpdmUiLCExKSxrPW4rIjoiK2Qub3V0cHV0X3Nsb3QsdGhpcy5zZXQoIl9sYXRlc3RUZW5zb3JEYXRhIiwKe2RldmljZU5hbWU6Zyx0ZW5zb3JOYW1lOmssbm9kZU5hbWU6bixtYXliZUJhc2VFeHBhbmRlZE5vZGVOYW1lOmwsZGVidWdPcDpkLmRlYnVnX29wLGR0eXBlOmQuZHR5cGUsc2hhcGU6ZC5zaGFwZSx2YWx1ZTpkLnZhbHVlc30pLHRoaXMuX21heWJlVXBkYXRlVGVuc29yVmFsdWVWaWV3cyhrLGQuZGVidWdfb3ApLHRoaXMuc2V0KCJfYnVzeSIsITEpKTpjb25zb2xlLmVycm9yKCJJbnZhbGlkIGxvbmctcG9sbGluZyByZXNwb25zZSB0eXBlOiAiLGYpO251bGwhPXRoaXMuX2NvbnRpbnVlVG9UeXBlJiZ0aGlzLl9wcm9jZXNzQ29udGludWVUbyhmLGQpO3RoaXMubG9uZ19wb2xsKCl9KX0sX3Byb2Nlc3NDb250aW51ZVRvKGEsYyl7dGhpcy5fY29udGludWVTdG9wP3RoaXMuX2NsZWFyQ29udGludWVUbygpOiJTZXNzaW9uUnVuIj09PXRoaXMuX2NvbnRpbnVlVG9UeXBlP3RoaXMuX3Byb2Nlc3NDb250aW51ZVRvU2Vzc2lvblJ1bigibWV0YSI9PT1hKToiVGVuc29yQ29uZGl0aW9uIj09PQp0aGlzLl9jb250aW51ZVRvVHlwZT90aGlzLl9zdGVwKCk6Im9wIj09PXRoaXMuX2NvbnRpbnVlVG9UeXBlP3RoaXMuX3Byb2Nlc3NDb250aW51ZVRvT3AoIm1ldGEiPT09YSxjKTpudWxsIT10aGlzLl9jb250aW51ZVRvVHlwZSYmIiIhPT10aGlzLl9jb250aW51ZVRvVHlwZSYmY29uc29sZS5lcnJvcigiSW52YWxpZCBfY29udGludWVUb1R5cGU6Iix0aGlzLl9jb250aW51ZVRvVHlwZSl9LF9wcm9jZXNzQ29udGludWVUb1Nlc3Npb25SdW4oYSl7YSYmdGhpcy5zZXQoIl9jb250aW51ZVRvQ291bnRlciIsdGhpcy5fY29udGludWVUb0NvdW50ZXIrMSk7dGhpcy5fY29udGludWVUb0NvdW50ZXI8dGhpcy5fY29udGludWVUb0NvdW50ZXJUYXJnZXQ/dGhpcy5fc3RlcCgpOnRoaXMuX2NsZWFyQ29udGludWVUbygpfSxfcHJvY2Vzc0NvbnRpbnVlVG9PcChhLGMpe2EmJnRoaXMuX2Fubm91bmNlTmV3U2Vzc2lvblJ1bigpO2E9Yy5kZXZpY2VfbmFtZTtjPWMubWF5YmVfYmFzZV9leHBhbmRlZF9ub2RlX25hbWU7CmNvbnN0IGQ9bnVsbD09Yz9udWxsOmdwLnJlbW92ZU5vZGVOYW1lQmFzZUV4cGFuc2lvbihjKTthKyIvIitjPT09dGhpcy5fY29udGludWVUb1RhcmdldHx8YSsiLyIrZD09PXRoaXMuX2NvbnRpbnVlVG9UYXJnZXQ/KHRoaXMuX2NsZWFyQ29udGludWVUbygpLHRoaXMuX3NvdXJjZUNvZGVTaG93biYmdGhpcy5zZXQoIl9zb3VyY2VGb2N1c05vZGVOYW1lIixkKSk6dGhpcy5fc3RlcCgpfSxfbWF5YmVVcGRhdGVUZW5zb3JWYWx1ZVZpZXdzKGEsYyl7Y29uc3QgZD10aGlzLiQkKCIjdGVuc29yVmFsdWVNdWx0aVZpZXciKTtpZihudWxsIT1kKXt2YXIgZj0hMTtfLmZvckVhY2goZC5nZXRWaWV3cygpLGc9PntpZihnLnRlbnNvck5hbWU9PT1hJiZnLmRlYnVnT3A9PT1jKXJldHVybiBmPSEwLCExfSk7ZiYmZC5yZW5kZXJUZW5zb3JWYWx1ZXMoKX19LHJlbG9hZCgpe2lmKCF0aGlzLmFscmVhZHlTdGFydGVkKXt0aGlzLnNldCgiYWxyZWFkeVN0YXJ0ZWQiLCEwKTt2YXIgYT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLAoiL2RlYnVnZ2VyX2dycGNfaG9zdF9wb3J0Iik7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9PnswPGMucG9ydD8odGhpcy4kLmluaXRpYWxEaWFsb2cub3BlbkRpYWxvZyhjLmhvc3QsYy5wb3J0KSx0aGlzLmxvbmdfcG9sbCgpKTp0aGlzLiQuaW5pdGlhbERpYWxvZy5vcGVuRGlzYWJsZWREaWFsb2coKX0pfX0sX3Nob3dTb3VyY2VDb2RlQ2hhbmdlZCgpe3RoaXMuX3NvdXJjZUNvZGVTaG93bj8odGhpcy4kJCgiI25vZGUtZW50cmllcyIpLnN0eWxlLmhlaWdodD0iNDAlIix0aGlzLiQuc291cmNlQ29kZVZpZXcucmVuZGVyKCkpOnRoaXMuJCQoIiNub2RlLWVudHJpZXMiKS5zdHlsZS5oZWlnaHQ9IjgwJSJ9LF9zaG93VG9hc3QoYSl7dGhpcy4kLnRvYXN0LnNldEF0dHJpYnV0ZSgidGV4dCIsYSk7dGhpcy4kLnRvYXN0Lm9wZW4oKX0sX2Fubm91bmNlTmV3U2Vzc2lvblJ1bigpe3RoaXMuX3Nob3dUb2FzdCgiU2Vzc2lvbi5ydW4oKSAjIit0aGlzLl9zZXNzaW9uUnVuVG90YWxDb3VudGVyKwoiIGlzIHN0YXJ0aW5nLiIpfSxfZGlzcGxheUdyYXBoKGEsYyl7YT17cnVuX2tleTpKU09OLnN0cmluZ2lmeShhKSxkZXZpY2VfbmFtZTpjfTthPVFvLmFkZFBhcmFtcygiL2RhdGEvcGx1Z2luL2RlYnVnZ2VyL2RlYnVnZ2VyX2dyYXBoIixhKTt0aGlzLiQubG9hZGVyLmRhdGFzZXRzPVt7bmFtZToiL2RlYnVnZ2VyX2dyYXBoIixwYXRoOmF9XTt0aGlzLiQubG9hZGVyLnNldCgic2VsZWN0ZWREYXRhc2V0IiwwKX0sX3Byb2Nlc3NHYXRlZEdycGNEZWJ1Z09wcyhhLGMpe2M/Y29uc29sZS5sb2coIlBvbGxpbmcgZm9yIGZpcnN0IEdyYXBoRGVmIGZvciBydW4ga2V5OiIsYSk6dGhpcy5zZXQoIl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lIixudWxsKTt2YXIgZD17bW9kZToicmV0cmlldmVfYWxsIixydW5fa2V5OkpTT04uc3RyaW5naWZ5KGEpfTtjb25zdCBmPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9nYXRlZF9ncnBjIik7ZD1Rby5hZGRQYXJhbXMoZiwKZCk7bGV0IGc9W107dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKS50aGVuKGw9PntpZigwPT1sLmRldmljZV9uYW1lcy5sZW5ndGgpY3x8dGhpcy5fc3RlcCgpLHRoaXMuX3Byb2Nlc3NHYXRlZEdycGNEZWJ1Z09wcyhhLCEwKTtlbHNle3ZhciBrPW51bGw7Zm9yKGNvbnN0IG4gaW4gbC5nYXRlZF9ncnBjX3RlbnNvcnMpaWYobC5nYXRlZF9ncnBjX3RlbnNvcnMuaGFzT3duUHJvcGVydHkobikpey0xPT09dGhpcy5fc2Vzc2lvblJ1bktleTJEZXZpY2VOYW1lc1thXS5pbmRleE9mKG4pJiYodGhpcy5fc2Vzc2lvblJ1bktleTJEZXZpY2VOYW1lc1thXS5wdXNoKG4pLHRoaXMuJC5zZXNzaW9uUnVuc1ZpZXcudXBkYXRlTnVtRGV2aWNlcyh0aGlzLl9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzW2FdLmxlbmd0aCkpO3RoaXMuc2V0KCJfYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMiLHRoaXMuX3Nlc3Npb25SdW5LZXkyRGV2aWNlTmFtZXNbYV0uc2xpY2UoKSk7az10aGlzLl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlc1t0aGlzLl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlcy5sZW5ndGgtCjFdO2NvbnN0IHA9bC5nYXRlZF9ncnBjX3RlbnNvcnNbbl07Zm9yKGxldCBxPTA7cTxwLmxlbmd0aDsrK3EpZy5wdXNoKHtkZXZpY2VfbmFtZTpuLG5vZGVfbmFtZTpwW3FdWzBdLG9wX3R5cGU6cFtxXVsxXSxvdXRwdXRfc2xvdDpwW3FdWzJdLGRlYnVnX29wOnBbcV1bM119KX1udWxsIT1rJiYodGhpcy5zZXQoIl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lIixrKSxsPVBvbHltZXIuZG9tKHRoaXMuJCQoIiNhY3RpdmUtcnVudGltZS1ncmFwaC1kZXZpY2UtbmFtZSIpKSxudWxsIT1sJiZsLnNldEF0dHJpYnV0ZSgic2VsZWN0ZWQiLGspKTtncC5zb3J0QW5kQmFzZUV4cGFuZERlYnVnV2F0Y2hlcyhnKTt0aGlzLnNldCgiX2RlYnVnV2F0Y2hlcyIsZyk7dGhpcy4kLnNvdXJjZUNvZGVWaWV3LnJlbmRlcihnKX19KX0sX2NyZWF0ZURlYnVnV2F0Y2hDaGFuZ2VIYW5kbGVyKCl7cmV0dXJuKGEsYyk9PntjPWM/ImJyZWFrIjoiZGlzYWJsZSI7dGhpcy5fcmVxdWVzdEJyZWFrcG9pbnRTdGF0ZUNoYW5nZShncC5nZXRDbGVhbk5vZGVOYW1lKGEuZGV2aWNlX25hbWUrCiIvIithLm5vZGVfbmFtZSksYS5vdXRwdXRfc2xvdCxhLmRlYnVnX29wLGMpfX0sX2ZvY3VzT25HcmFwaE5vZGUoYSxjKXtudWxsIT1hJiZ0aGlzLl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lIT09YSYmdGhpcy5zZXQoIl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lIixhKTt0aGlzLl9zZXRUb3BSaWdodFJ1bnRpbWVHcmFwaHNUb0FjdGl2ZSgpO2NvbnN0IGQ9dGhpcy4kJCgiI2dyYXBoIik7aWYoZC5zZWxlY3RlZE5vZGU9PT1jKWQucGFuVG9Ob2RlKGMpO2Vsc2V7Y29uc3QgZj1kLmdldCgicmVuZGVySGllcmFyY2h5IikuaGllcmFyY2h5LmdldE5vZGVNYXAoKTtudWxsPT1mW2NdJiYoYz1ncC5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oYykpO251bGwhPWZbY10mJmQuc2V0KCJzZWxlY3RlZE5vZGUiLGMpfXRoaXMuc2V0KCJfaGlnaGxpZ2h0Tm9kZU5hbWUiLGErIi8iK2MpfSxfY3JlYXRlTm9kZUNsaWNrZWRIYW5kbGVyKCl7cmV0dXJuKGEsYyxkKT0+e3RoaXMuX3NvdXJjZUNvZGVTaG93biYmCiEwIT09ZCYmdGhpcy5zZXQoIl9zb3VyY2VGb2N1c05vZGVOYW1lIixncC5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oYykpO3RoaXMuX2ZvY3VzT25HcmFwaE5vZGUoYSxjKTt0aGlzLnNldCgiX2ZvcmNlRXhwYW5kTm9kZU5hbWUiLGErIi8iK2MpfX0sX2NyZWF0ZUZlZWRGZXRjaFRhcmdldENsaWNrZWRIYW5kbGVyKCl7cmV0dXJuIGE9PntsZXQgYz1hOy0xIT09Yy5pbmRleE9mKCI6IikmJihjPWMuc2xpY2UoMCxjLmluZGV4T2YoIjoiKSkpO2E9Xy5maW5kKHRoaXMuX2RlYnVnV2F0Y2hlcyxkPT5kLm5vZGVfbmFtZT09PWN8fDA9PT1kLm5vZGVfbmFtZS5pbmRleE9mKGMpJiYiKCI9PT1kLm5vZGVfbmFtZVtjLmxlbmd0aF0pO251bGw9PWE/dGhpcy5fc2hvd1RvYXN0KCJOb2RlICciK2MrIicgaXMgbm90IGluIHRoZSBydW50aW1lIGdyYXBoIG9mIHRoZSBjdXJyZW50IFNlc3Npb24ucnVuIG9yIGRvZXMgbm90IGhhdmUgYSBkZWJ1ZyBvcCBhdHRhY2hlZC4iKTp0aGlzLl9mb2N1c09uR3JhcGhOb2RlKGEuZGV2aWNlX25hbWUsCmMpfX0sX2NyZWF0ZVRlbnNvckRhdGFFeHBhbmRIYW5kbGVyKCl7cmV0dXJuIGE9Pnt0aGlzLl9zZXRUb3BSaWdodFRlbnNvclZhbHVlc1RvQWN0aXZlKCk7c2V0VGltZW91dCgoKT0+e3RoaXMuJCQoIiN0ZW5zb3JWYWx1ZU11bHRpVmlldyIpLmFkZFZpZXcoe3ZpZXdJZDp0aGlzLl9jcmVhdGVUZW5zb3JWaWV3SWQoKSxkZXZpY2VOYW1lOmEuZGV2aWNlTmFtZSx0ZW5zb3JOYW1lOmEudGVuc29yTmFtZSxub2RlTmFtZTphLm5vZGVOYW1lLG1heWJlQmFzZUV4cGFuZGVkTm9kZU5hbWU6YS5tYXliZUJhc2VFeHBhbmRlZE5vZGVOYW1lLGRlYnVnT3A6YS5kZWJ1Z09wLGR0eXBlOmEuZHR5cGUsc2hhcGU6YS5zaGFwZSxzbGljaW5nOmdwLmdldERlZmF1bHRTbGljaW5nKGEuc2hhcGUpLHRpbWVJbmRpY2VzOiItMSJ9KX0sMTApfX0sX2NyZWF0ZVRlbnNvclZpZXdJZCgpe2NvbnN0IGE9ImRlYnVnZ2VyLXRlbnNvci12aWV3LSIrdGhpcy5fdGVuc29yVmlld0lkQ291bnRlcjt0aGlzLl90ZW5zb3JWaWV3SWRDb3VudGVyKys7CnJldHVybiBhfSxfY3JlYXRlTm9kZUNvbnRleHRNZW51SXRlbXMoKXtyZXR1cm5be3RpdGxlOigpPT4iRXhwYW5kIGFuZCBoaWdobGlnaHQiLGFjdGlvbjphPT57Y29uc3QgYz1ncC5nZXRDbGVhbk5vZGVOYW1lKGEubm9kZS5uYW1lKTthPXRoaXMuX2FjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWUrIi8iK2Eubm9kZS5uYW1lO3RoaXMuc2V0KCJfZm9yY2VFeHBhbmROb2RlTmFtZSIsYSk7dGhpcy5zZXQoIl9oaWdobGlnaHROb2RlTmFtZSIsYSk7dGhpcy5fc291cmNlQ29kZVNob3duJiZ0aGlzLnNldCgiX3NvdXJjZUZvY3VzTm9kZU5hbWUiLGdwLnJlbW92ZU5vZGVOYW1lQmFzZUV4cGFuc2lvbihjKSl9fSx7dGl0bGU6KCk9PiJBZGQgYnJlYWtwb2ludCIsYWN0aW9uOmE9Pntjb25zdCBjPWdwLmdldENsZWFuTm9kZU5hbWUoYS5ub2RlLm5hbWUpO3RoaXMuc2V0KCJfZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lIix0aGlzLl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lKwoiLyIrYS5ub2RlLm5hbWUpO3RoaXMuX3NvdXJjZUNvZGVTaG93biYmdGhpcy5zZXQoIl9zb3VyY2VGb2N1c05vZGVOYW1lIixncC5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oYykpfX0se3RpdGxlOigpPT4iQ29udGludWUgdG8iLGFjdGlvbjphPT57LTEhPT1bIl9BcmciLCJfUmV0dmFsIl0uaW5kZXhPZihhLm5vZGUub3ApP3RoaXMuX3Nob3dUb2FzdCgnQ2Fubm90IGNvbnRpbnVlIHRvIG5vZGUgIicrYS5ub2RlLm5hbWUrJyIsIGR1ZSB0byBvcCB0eXBlICInK2Eubm9kZS5vcCsnIi4nKTp0aGlzLl9jb250aW51ZVRvTm9kZSh0aGlzLl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lLGEubm9kZS5uYW1lKX19XX0sX2NyZWF0ZUdldEhlYWx0aFBpbGwoKXtyZXR1cm4oYSxjLGQsZik9Pnt2YXIgZz17d2F0Y2hfa2V5OmEsdGltZV9pbmRpY2VzOiItMSIsbWFwcGluZzoiaGVhbHRoLXBpbGwifTtjb25zdCBsPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsCiIvdGVuc29yX2RhdGEiKTtnPVFvLmFkZFBhcmFtcyhsLGcpO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZykudGhlbihrPT57az1rLnRlbnNvcl9kYXRhWzBdO2Yoayk7dGhpcy5fY29uZGl0aW9uYWxIZWFsdGhQaWxsU3RvcChhLGMsZCxrKX0pfX0sX2NvbmRpdGlvbmFsSGVhbHRoUGlsbFN0b3AoYSxjLGQsZil7aWYoIlRlbnNvckNvbmRpdGlvbiI9PT10aGlzLl9jb250aW51ZVRvVHlwZSYmZ3AuY2hlY2tIZWFsdGhQaWxsQWdhaW5zdFRlbnNvckNvbmRpdGlvbktleSh0aGlzLl9jb250aW51ZVRvVGFyZ2V0LGYsdGhpcy5fY29udGludWVUb0NvdW50ZXJUYXJnZXQpKXt0aGlzLnNldCgiX2NvbnRpbnVlU3RvcCIsITApO2Y9Z3AucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGQpO3RoaXMuX3NvdXJjZUNvZGVTaG93biYmdGhpcy5zZXQoIl9zb3VyY2VGb2N1c05vZGVOYW1lIixmKTt0aGlzLl9mb2N1c09uR3JhcGhOb2RlKGMsZCk7Y29uc3QgZz1jKyIvIitkO3RoaXMuc2V0KCJfZm9yY2VFeHBhbmROb2RlTmFtZSIsCmcpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldCgiX2hpZ2hsaWdodE5vZGVOYW1lIixudWxsKTt0aGlzLnNldCgiX2hpZ2hsaWdodE5vZGVOYW1lIixnKX0sMTAwKTt0aGlzLl9zaG93VG9hc3QoJ1RlbnNvciBjb25kaXRpb24gIicrdGhpcy5fY29udGludWVUb1RhcmdldCsnIiBpcyBtZXQgYnkgd2F0Y2gga2V5OiAiJythKyciLlxuU3RvcHBpbmcgY29udGludWF0aW9uLicpfX0sX2NvbnRpbnVlVG9Ob2RlKGEsYyl7Y29uc3QgZD1ncC5nZXRDbGVhbk5vZGVOYW1lKGMpO2E9YSsiLyIrYzt0aGlzLl9yZXF1ZXN0QnJlYWtwb2ludFN0YXRlQ2hhbmdlKGQsMCwiRGVidWdJZGVudGl0eSIsImJyZWFrIik7dGhpcy5zZXQoIl9mb3JjZUV4cGFuZEFuZENoZWNrTm9kZU5hbWUiLGEpO3RoaXMuX3NvdXJjZUNvZGVTaG93biYmdGhpcy5zZXQoIl9zb3VyY2VGb2N1c05vZGVOYW1lIixncC5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oZCkpO3RoaXMuX3NldENvbnRpbnVlVG8oIm9wIixhKTsKdGhpcy4kLmNvbnRpbnVlRGlhbG9nLnVwZGF0ZUNvbnRpbnVlQnV0dG9uVGV4dCghMCk7dGhpcy5fc3RlcCgpfSxfY3JlYXRlQ29udGludWVUb05vZGVIYW5kbGVyKCl7cmV0dXJuKGEsYyk9Pnt0aGlzLl9jb250aW51ZVRvTm9kZShhLGMpfX0sX29uQWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZUNoYW5nZShhKXtjb25zdCBjPVBvbHltZXIuZG9tKHRoaXMuJCQoIiNydW50aW1lLWdyYXBoLWRldmljZS1uYW1lIikpO2lmKDA8dGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMubGVuZ3RoKXtsZXQgZDtkPWErKCIgKGRldmljZSAiKyh0aGlzLl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlcy5pbmRleE9mKGEpKzEpKyIgb2YgIit0aGlzLl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlcy5sZW5ndGgrIikiKTt0aGlzLl9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZSYmbnVsbCE9YyYmKGMudGV4dENvbnRlbnQ9ZCl9ZWxzZSB0aGlzLl9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZSYmCm51bGwhPWMmJihjLnRleHRDb250ZW50PSJXYWl0aW5nIGZvciBkZXZpY2UuLi4iKTtudWxsIT1hJiZ0aGlzLl9kaXNwbGF5R3JhcGgodGhpcy5fYWN0aXZlU2Vzc2lvblJ1bktleSxhKX0sX3N0ZXAoKXtpZihudWxsIT10aGlzLl9hY3RpdmVTZXNzaW9uUnVuS2V5KXt0aGlzLnNldCgiX2J1c3kiLCEwKTt2YXIgYT17bW9kZToicmV0cmlldmVfZGV2aWNlX25hbWVzIixydW5fa2V5OkpTT04uc3RyaW5naWZ5KHRoaXMuX2FjdGl2ZVNlc3Npb25SdW5LZXkpfSxjPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9nYXRlZF9ncnBjIik7YT1Rby5hZGRQYXJhbXMoYyxhKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oZD0+e2xldCBmPSExO2ZvcihsZXQgZz0wO2c8ZC5kZXZpY2VfbmFtZXMubGVuZ3RoOysrZylpZigtMT09PXRoaXMuX2FjdGl2ZVNlc3Npb25SdW5EZXZpY2VzLmluZGV4T2YoZC5kZXZpY2VfbmFtZXNbZ10pKXtmPSEwO2JyZWFrfWQ9ClFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9hY2siKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGQpLnRoZW4oKCk9PntmJiZ0aGlzLl9wcm9jZXNzR2F0ZWRHcnBjRGVidWdPcHModGhpcy5fYWN0aXZlU2Vzc2lvblJ1bktleSwhMSl9KX0pfX0sX2NyZWF0ZVNlc3Npb25SdW5Hbygpe3JldHVybiBhPT57dGhpcy5fc2V0Q29udGludWVUbygiU2Vzc2lvblJ1biIsdGhpcy5fY3VycmVudFNlc3Npb25SdW5JbmZvLGEpO3RoaXMuX3N0ZXAoKX19LF9jcmVhdGVUZW5zb3JDb25kaXRpb25Hbygpe3JldHVybihhLGMpPT57dGhpcy5fc2V0Q29udGludWVUbygiVGVuc29yQ29uZGl0aW9uIixhLGMpO3RoaXMuJC50ZW5zb3JEYXRhU3VtbWFyeS5lbmFibGVIZWFsdGhQaWxscygpO3RoaXMuX3N0ZXAoKX19LF9jcmVhdGVGb3JjZUNvbnRpbnVhdGlvblN0b3AoKXtyZXR1cm4oKT0+e3RoaXMuX3Nob3dUb2FzdCgnQ29udGludWF0aW9uIG9mIHR5cGUgIicrdGhpcy5fY29udGludWVUb1R5cGUrCiciIHdhcyBpbnRlcnJ1cHRlZCBieSB1c2VyLicpO3RoaXMuc2V0KCJfY29udGludWVTdG9wIiwhMCl9fSxfc2V0Q29udGludWVUbyhhLGMsZD0tMSl7dGhpcy5fY29udGludWVUb1R5cGU9YTt0aGlzLl9jb250aW51ZVRvVGFyZ2V0PWM7dGhpcy5fY29udGludWVUb0NvdW50ZXJUYXJnZXQ9ZDt0aGlzLl9jb250aW51ZVRvQ291bnRlcj0wO3RoaXMuX2NvbnRpbnVlU3RvcD0hMX0sX2NsZWFyQ29udGludWVUbygpe3RoaXMuJC5jb250aW51ZURpYWxvZy5ub3RpZnlDb250aW51YXRpb25TdG9wKCk7dGhpcy5fY29udGludWVUb1RhcmdldD10aGlzLl9jb250aW51ZVRvVHlwZT0iIjt0aGlzLl9jb250aW51ZVRvQ291bnRlclRhcmdldD0tMTt0aGlzLl9jb250aW51ZVRvQ291bnRlcj0wO3RoaXMuX2NvbnRpbnVlU3RvcD0hMTt0aGlzLnNldCgiX2J1c3kiLCExKX0sX2NyZWF0ZUNvbnRpbnVlVG9DYWxsYmFjaygpe3JldHVybihhLGMpPT57dGhpcy5fc2V0Q29udGludWVUbygib3AiLGErIi8iKwpjKTt0aGlzLl9zdGVwKCk7dGhpcy5faXNUb3BSaWdodFJ1bnRpbWVHcmFwaHNBY3RpdmUmJnRoaXMuX2ZvY3VzT25HcmFwaE5vZGUoYSxjKTt0aGlzLnNldCgiX2ZvcmNlRXhwYW5kTm9kZU5hbWUiLGErIi8iK2MpfX0sX3RvcFJpZ2h0U2VsZWN0ZWRDaGFuZ2VkKGEpe2E9dGhpcy5fdG9wUmlnaHRUYWJzW2FdLmlkO3RoaXMuc2V0KCJfaXNUb3BSaWdodFJ1bnRpbWVHcmFwaHNBY3RpdmUiLCJ0YWItcnVudGltZS1ncmFwaHMiPT09YSk7dGhpcy5zZXQoIl9pc1RvcFJpZ2h0VGVuc29yVmFsdWVzQWN0aXZlIiwidGFiLXRlbnNvci12YWx1ZXMiPT09YSl9LF9zZXRUb3BSaWdodFJ1bnRpbWVHcmFwaHNUb0FjdGl2ZSgpe3RoaXMuc2V0KCJfdG9wUmlnaHRTZWxlY3RlZCIsIjAiKTt0aGlzLnNldCgiX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlIiwhMCk7dGhpcy5zZXQoIl9pc1RvcFJpZ2h0VGVuc29yVmFsdWVzQWN0aXZlIiwhMSl9LF9zZXRUb3BSaWdodFRlbnNvclZhbHVlc1RvQWN0aXZlKCl7dGhpcy5zZXQoIl90b3BSaWdodFNlbGVjdGVkIiwKIjEiKTt0aGlzLnNldCgiX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlIiwhMSk7dGhpcy5zZXQoIl9pc1RvcFJpZ2h0VGVuc29yVmFsdWVzQWN0aXZlIiwhMCl9LF9yZXF1ZXN0QnJlYWtwb2ludFN0YXRlQ2hhbmdlKGEsYyxkLGYpe2E9e21vZGU6InNldF9zdGF0ZSIsbm9kZV9uYW1lOmEsb3V0cHV0X3Nsb3Q6YyxkZWJ1Z19vcDpkLHN0YXRlOmZ9O2M9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImRlYnVnZ2VyIiwiL2dhdGVkX2dycGMiKTthPVFvLmFkZFBhcmFtcyhjLGEpO3RoaXMuc2V0KCJfYnVzeSIsITApO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihnPT57dGhpcy5zZXQoIl9idXN5IiwhMSk7Y29uc29sZS5sb2coIkJyZWFrcG9pbnQgc2V0X3N0YXRlIHJlc3BvbnNlOiAiLGcpfSl9LF9ncmFwaFByb2dyZXNzVXBkYXRlZChhKXtjb25zdCBjPXRoaXMuJCQoIiN0b3AtcmlnaHQtcHJvZ3Jlc3MtYmFyIik7bnVsbD09dGhpcy5fbGF0ZXN0U2Vzc2lvblJ1bj8KKGMuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsMCksdGhpcy5zZXQoIl9idXN5IiwhMSkpOihjLnNldEF0dHJpYnV0ZSgidmFsdWUiLGEudmFsdWUpLHRoaXMuc2V0KCJfYnVzeSIsMTAwPmEudmFsdWUpKX0sX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpe3RoaXMuc2V0KCJfd2luZG93V2lkdGgiLGxwKCkpO3RoaXMuc2V0KCJfd2luZG93SGVpZ2h0IixrcCgpKTt0aGlzLl9zaXplRGFzaGJvYXJkUmVnaW9ucyh0aGlzLl9sZWZ0UGFuZVdpZHRoLHRoaXMuX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHQsdGhpcy5fd2luZG93V2lkdGgpfSxfY29tcHV0ZU1heGxlZnRQYW5lV2lkdGgoYSxjLGQpe3JldHVybiBhLWMtZH0sX2NvbXB1dGVNYXhUb3BSaWdodFF1YWRyYW50SGVpZ2h0KGEsYyl7cmV0dXJuIGEtYy03MH0sX3NpemVEYXNoYm9hcmRSZWdpb25zKGEsYyxkKXt0aGlzLiQkKCIjbGVmdC1wYW5lIikuc3R5bGUud2lkdGg9YSsicHgiO2E9ZC1hLXRoaXMuX3Jlc2l6ZXJXaWR0aC04O3RoaXMuJCQoIiNjZW50ZXItY29udGVudCIpLnN0eWxlLndpZHRoPQphKyJweCI7YT1jLXRoaXMuX3Jlc2l6ZXJXaWR0aDt0aGlzLiQkKCIjdG9wLXJpZ2h0LXF1YWRyYW50Iikuc3R5bGUuaGVpZ2h0PWErInB4Ijt0aGlzLiQkKCIjdGVuc29yLWRhdGEiKS5zdHlsZS50b3A9YysicHgifSxfbGVmdFBhbmVXaWR0aE9ic2VydmVyOlRvLmdldE51bWJlck9ic2VydmVyKCJfbGVmdFBhbmVXaWR0aCIse2RlZmF1bHRWYWx1ZTo0NTB9KSxfdG9wUmlnaHRRdWFkcmFudEhlaWdodE9ic2VydmVyOlRvLmdldE51bWJlck9ic2VydmVyKCJfdG9wUmlnaHRRdWFkcmFudEhlaWdodCIse2RlZmF1bHRWYWx1ZTptcH0pfSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItbWF0ZXJpYWwvcGFwZXItbWF0ZXJpYWwuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZCIscHJvcGVydGllczp7cmVuZGVySGllcmFyY2h5Ok9iamVjdCxkZWJ1Z2dlck51bWVyaWNBbGVydHM6e3R5cGU6QXJyYXksbm90aWZ5OiEwfSxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCxoZWFsdGhQaWxsU3RlcEluZGV4Ont0eXBlOk51bWJlcixub3RpZnk6ITB9LHNwZWNpZmljSGVhbHRoUGlsbFN0ZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxzZWxlY3RlZE5vZGU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0saGlnaGxpZ2h0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGVjdGVkTm9kZUluY2x1ZGU6e3R5cGU6TnVtYmVyLG5vdGlmeTohMH0sYXJlSGVhbHRoUGlsbHNMb2FkaW5nOkJvb2xlYW4saGVhbHRoUGlsbEVudHJpZXM6e3R5cGU6QXJyYXksdmFsdWU6dGYuZ3JhcGguc2NlbmUuaGVhbHRoUGlsbEVudHJpZXMscmVhZE9ubHk6ITB9LGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGU6e3R5cGU6QXJyYXksCmNvbXB1dGVkOiJfY29tcHV0ZUhlYWx0aFBpbGxGb3JOb2RlKG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMsIGhlYWx0aFBpbGxTdGVwSW5kZXgsIHNlbGVjdGVkTm9kZSwgYWxsU3RlcHNNb2RlRW5hYmxlZCwgYXJlSGVhbHRoUGlsbHNMb2FkaW5nKSJ9LGFsbFN0ZXBzTW9kZUVuYWJsZWQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9LF9iaWdnZXN0U3RlcEV2ZXJTZWVuOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVCaWdnZXN0U3RlcEV2ZXJTZWVuKG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpIn0sX21heFN0ZXBJbmRleDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlTWF4U3RlcEluZGV4KG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpIn0sX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50U3RlcERpc3BsYXlWYWx1ZShub2RlTmFtZXNUb0hlYWx0aFBpbGxzLCBoZWFsdGhQaWxsU3RlcEluZGV4LCBhbGxTdGVwc01vZGVFbmFibGVkLCBzcGVjaWZpY0hlYWx0aFBpbGxTdGVwLCBhcmVIZWFsdGhQaWxsc0xvYWRpbmcpIn19LApvYnNlcnZlcnM6WyJfdXBkYXRlQWxlcnRzTGlzdChkZWJ1Z2dlck51bWVyaWNBbGVydHMpIl0scmVhZHk6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbkNvbnRhaW5lciIpLGM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidGYtZGFzaGJvYXJkLWxheW91dCAuc2Nyb2xsYmFyIik7YSYmYyYmKGEuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsYy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIil9LF9oZWFsdGhQaWxsc0F2YWlsYWJsZTpmdW5jdGlvbihhLGMpe3JldHVybiBhJiZjfSxfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE/YVtjXS50b0ZpeGVkKDApOiIifSxfY29tcHV0ZUhlYWx0aFBpbGxGb3JOb2RlOmZ1bmN0aW9uKGEsYyxkLGYsZyl7aWYoZ3x8IWQpcmV0dXJuIG51bGw7YT1hW2RdO3JldHVybiBhPyhjPWFbZj8wOmNdKT9jLnZhbHVlLnNsaWNlKDIsOCk6bnVsbDpudWxsfSxfY29tcHV0ZUN1cnJlbnRTdGVwRGlzcGxheVZhbHVlOmZ1bmN0aW9uKGEsCmMsZCxmLGcpe2lmKGQpcmV0dXJuIGYudG9GaXhlZCgwKTtpZihnKXJldHVybiAwO2ZvcihsZXQgbCBpbiBhKXJldHVybiBhW2xdW2NdLnN0ZXAudG9GaXhlZCgwKTtyZXR1cm4gMH0sX2NvbXB1dGVCaWdnZXN0U3RlcEV2ZXJTZWVuOmZ1bmN0aW9uKGEpe2ZvcihsZXQgYyBpbiBhKXJldHVybiBhPWFbY10sTWF0aC5tYXgodGhpcy5fYmlnZ2VzdFN0ZXBFdmVyU2VlbixhW2EubGVuZ3RoLTFdLnN0ZXApO3JldHVybiB0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVufHwwfSxfY29tcHV0ZU1heFN0ZXBJbmRleDpmdW5jdGlvbihhKXtmb3IobGV0IGMgaW4gYSlyZXR1cm4gYVtjXS5sZW5ndGgtMTtyZXR1cm4gMH0sX2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0czpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5sZW5ndGh9LF91cGRhdGVBbGVydHNMaXN0OmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoYyl7Yy5pbm5lckhUTUw9IiI7Zm9yKHZhciBkPQowO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZj1hW2RdLGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7bC5pbm5lckhUTUw9dGYuZ3JhcGgudXRpbC5jb21wdXRlSHVtYW5GcmllbmRseVRpbWUoZi5maXJzdF90aW1lc3RhbXApO2wuY2xhc3NMaXN0LmFkZCgiZmlyc3Qtb2ZmZW5zZS10ZCIpO2cuYXBwZW5kQ2hpbGQobCk7bD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2suY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIik7ay5pbm5lckhUTUw9Zi50ZW5zb3JfbmFtZTt0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGssZi50ZW5zb3JfbmFtZSk7bC5hcHBlbmRDaGlsZChrKTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2suY2xhc3NMaXN0LmFkZCgiZGV2aWNlLXNlY3Rpb24td2l0aGluLXRhYmxlIik7CmsuaW5uZXJIVE1MPSIoIitmLmRldmljZV9uYW1lKyIpIjtsLmFwcGVuZENoaWxkKGspO2cuYXBwZW5kQ2hpbGQobCk7bD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwiKTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7ay5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsLXRkIik7ay5hcHBlbmRDaGlsZChsKTtnLmFwcGVuZENoaWxkKGspO2YubmVnX2luZl9ldmVudF9jb3VudCYmKGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksay5jbGFzc0xpc3QuYWRkKCJuZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIiksay5pbm5lckhUTUw9Zi5uZWdfaW5mX2V2ZW50X2NvdW50LGsuc2V0QXR0cmlidXRlKCJ0aXRsZSIsZi5uZWdfaW5mX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggLVx1MjIxZSIpLGwuYXBwZW5kQ2hpbGQoaykpO2YucG9zX2luZl9ldmVudF9jb3VudCYmKGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCmsuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGsuaW5uZXJIVE1MPWYucG9zX2luZl9ldmVudF9jb3VudCxrLnNldEF0dHJpYnV0ZSgidGl0bGUiLGYucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMWUiKSxsLmFwcGVuZENoaWxkKGspKTtmLm5hbl9ldmVudF9jb3VudCYmKGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksay5jbGFzc0xpc3QuYWRkKCJuYW4tbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIiksay5pbm5lckhUTUw9Zi5uYW5fZXZlbnRfY291bnQsay5zZXRBdHRyaWJ1dGUoInRpdGxlIixmLm5hbl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoIE5hTiIpLGwuYXBwZW5kQ2hpbGQoaykpO1BvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKGcpfX19LF9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyOmZ1bmN0aW9uKGEsYyl7YS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgZD10Zi5ncmFwaC5yZW5kZXIuZXhwYW5kVW50aWxOb2RlSXNTaG93bih0aGlzLnJlbmRlckhpZXJhcmNoeSwKYyksZixnPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO2cmJihmPWcuc2Nyb2xsSGVpZ2h0LWcuc2Nyb2xsVG9wKTt2YXIgbD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixkKTtkPSgpPT57Zy5zY3JvbGxUb3A9Zy5zY3JvbGxIZWlnaHQtZn07ZyYmKGw/ZCgpOndpbmRvdy5zZXRUaW1lb3V0KGQsMjApKX0pfX0pfSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9pcm9uLXNjcm9sbC10YXJnZXQtYmVoYXZpb3IvaXJvbi1zY3JvbGwtdGFyZ2V0LWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uU2Nyb2xsVGFyZ2V0QmVoYXZpb3I9e3Byb3BlcnRpZXM6e3Njcm9sbFRhcmdldDp7dHlwZTpIVE1MRWxlbWVudCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0U2Nyb2xsVGFyZ2V0fX19LG9ic2VydmVyczpbIl9zY3JvbGxUYXJnZXRDaGFuZ2VkKHNjcm9sbFRhcmdldCwgaXNBdHRhY2hlZCkiXSxfc2hvdWxkSGF2ZUxpc3RlbmVyOiEwLF9zY3JvbGxUYXJnZXRDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dGhpcy5fb2xkU2Nyb2xsVGFyZ2V0JiYodGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEsdGhpcy5fb2xkU2Nyb2xsVGFyZ2V0KSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQ9bnVsbCk7YyYmKCJkb2N1bWVudCI9PT1hP3RoaXMuc2Nyb2xsVGFyZ2V0PXRoaXMuX2RvYzoic3RyaW5nIj09PXR5cGVvZiBhP3RoaXMuc2Nyb2xsVGFyZ2V0PShjPXRoaXMuZG9tSG9zdCkmJmMuJD9jLiRbYV06UG9seW1lci5kb20odGhpcy5vd25lckRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKCIjIisKYSk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWEsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGEpKSl9LF9zY3JvbGxIYW5kbGVyOmZ1bmN0aW9uKCl7fSxnZXQgX2RlZmF1bHRTY3JvbGxUYXJnZXQoKXtyZXR1cm4gdGhpcy5fZG9jfSxnZXQgX2RvYygpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSxnZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VZT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcDowfSxnZXQgX3Njcm9sbExlZnQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5wYWdlWE9mZnNldDp0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxMZWZ0OgowfSxzZXQgX3Njcm9sbFRvcChhKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8od2luZG93LnBhZ2VYT2Zmc2V0LGEpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD1hKX0sc2V0IF9zY3JvbGxMZWZ0KGEpe3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyhhLHdpbmRvdy5wYWdlWU9mZnNldCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1hKX0sc2Nyb2xsOmZ1bmN0aW9uKGEsYyl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKGEsYyk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1hLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD1jKX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/CnRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lcldpZHRoOnRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldFdpZHRoOjB9LGdldCBfc2Nyb2xsVGFyZ2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuaW5uZXJIZWlnaHQ6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0OjB9LF9pc1ZhbGlkU2Nyb2xsVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Nyb2xsVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LF90b2dnbGVTY3JvbGxMaXN0ZW5lcjpmdW5jdGlvbihhLGMpe2M9Yz09PXRoaXMuX2RvYz93aW5kb3c6YzthP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksYy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOgp0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXImJihjLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyKSx0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXI9bnVsbCl9LHRvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGEpe3RoaXMuX3Nob3VsZEhhdmVMaXN0ZW5lcj1hO3RoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKGEsdGhpcy5zY3JvbGxUYXJnZXQpfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1saXN0L2lyb24tbGlzdC5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksYz1hJiY4PD1hWzFdLGQ9bnVsbCE9UG9seW1lci5mbHVzaCxmPWQ/UG9seW1lci5Bc3luYy5hbmltYXRpb25GcmFtZTowLGc9ZD9Qb2x5bWVyLkFzeW5jLmlkbGVQZXJpb2Q6MSxsPWQ/UG9seW1lci5Bc3luYy5taWNyb1Rhc2s6MjtQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGFCZWhhdmlvcnx8KFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YUJlaGF2aW9yPXt9KTtQb2x5bWVyKHtpczoiaXJvbi1saXN0Iixwcm9wZXJ0aWVzOntpdGVtczp7dHlwZTpBcnJheX0sYXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtIn0saW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6ImluZGV4In0sc2VsZWN0ZWRBczp7dHlwZTpTdHJpbmcsdmFsdWU6InNlbGVjdGVkIn0sZ3JpZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCwKb2JzZXJ2ZXI6Il9ncmlkQ2hhbmdlZCJ9LHNlbGVjdGlvbkVuYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sbXVsdGlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2Nyb2xsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowfX0sb2JzZXJ2ZXJzOlsiX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSIsIl9zZWxlY3Rpb25FbmFibGVkQ2hhbmdlZChzZWxlY3Rpb25FbmFibGVkKSIsIl9tdWx0aVNlbGVjdGlvbkNoYW5nZWQobXVsdGlTZWxlY3Rpb24pIiwiX3NldE92ZXJmbG93KHNjcm9sbFRhcmdldCwgc2Nyb2xsT2Zmc2V0KSJdLGJlaGF2aW9yczpbUG9seW1lci5UZW1wbGF0aXplcixQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcixQb2x5bWVyLklyb25TY3JvbGxUYXJnZXRCZWhhdmlvcixQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGFCZWhhdmlvcl0sCl9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfY29sbGVjdGlvbjpudWxsLF9sYXN0VmlzaWJsZUluZGV4VmFsOm51bGwsX21heFBhZ2VzOjIsX2ZvY3VzZWRJdGVtOm51bGwsX2ZvY3VzZWRWaXJ0dWFsSW5kZXg6LTEsX2ZvY3VzZWRQaHlzaWNhbEluZGV4Oi0xLF9vZmZzY3JlZW5Gb2N1c2VkSXRlbTpudWxsLF9mb2N1c0JhY2tmaWxsSXRlbTpudWxsLF9pdGVtc1BlclJvdzoxLF9pdGVtV2lkdGg6MCxfcm93SGVpZ2h0OjAsX3RlbXBsYXRlQ29zdDowLApfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3JldHVybih0aGlzLmdyaWQ/dGhpcy5fcGh5c2ljYWxSb3dzKnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemUpLXRoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX2l0ZW1zUGFyZW50KCl7cmV0dXJuIFBvbHltZXIuZG9tKFBvbHltZXIuZG9tKHRoaXMuX3VzZXJUZW1wbGF0ZSkucGFyZW50Tm9kZSl9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LApnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBrPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxrLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChrKXtrPXRoaXMuX2NsYW1wKGssMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpO3RoaXMuZ3JpZCYmKGstPWsldGhpcy5faXRlbXNQZXJSb3cpO3RoaXMuX3ZpcnR1YWxTdGFydFZhbD1rfSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydChrKXtrJT10aGlzLl9waHlzaWNhbENvdW50OzA+ayYmKGs9dGhpcy5fcGh5c2ljYWxDb3VudCtrKTt0aGlzLmdyaWQmJihrLT1rJXRoaXMuX2l0ZW1zUGVyUm93KTt0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWt9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrCnRoaXMuX3BoeXNpY2FsQ291bnQtMSkldGhpcy5fcGh5c2ljYWxDb3VudH0sc2V0IF9waHlzaWNhbENvdW50KGspe3RoaXMuX3BoeXNpY2FsQ291bnRWYWw9a30sZ2V0IF9waHlzaWNhbENvdW50KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsQ291bnRWYWx8fDB9LGdldCBfb3B0UGh5c2ljYWxTaXplKCl7cmV0dXJuIDA9PT10aGlzLl92aWV3cG9ydEhlaWdodD9JbmZpbml0eTp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4hKCF0aGlzLm9mZnNldFdpZHRoJiYhdGhpcy5vZmZzZXRIZWlnaHQpfSxnZXQgZmlyc3RWaXNpYmxlSW5kZXgoKXt2YXIgaz10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbDtpZihudWxsPT1rKXt2YXIgbj10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9az10aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocCxxKXtuKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocCk7CmlmKG4+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIHRoaXMuZ3JpZD9xLXEldGhpcy5faXRlbXNQZXJSb3c6cTtpZih0aGlzLmdyaWQmJnRoaXMuX3ZpcnR1YWxDb3VudC0xPT09cSlyZXR1cm4gcS1xJXRoaXMuX2l0ZW1zUGVyUm93fSl8fDB9cmV0dXJuIGt9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGs9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihudWxsPT1rKXtpZih0aGlzLmdyaWQpaz1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIG49dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihwLHEpe248dGhpcy5fc2Nyb2xsQm90dG9tJiYoaz1xKTtuKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocCl9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWt9cmV0dXJuIGt9LApnZXQgX2RlZmF1bHRTY3JvbGxUYXJnZXQoKXtyZXR1cm4gdGhpc30sZ2V0IF92aXJ0dWFsUm93Q291bnQoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpcnR1YWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfZXN0Um93c0luVmlldygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlld3BvcnRIZWlnaHQvdGhpcy5fcm93SGVpZ2h0KX0sZ2V0IF9waHlzaWNhbFJvd3MoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxnZXQgX3Njcm9sbE9mZnNldCgpe3JldHVybiB0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3ArdGhpcy5zY3JvbGxPZmZzZXR9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fZGlkRm9jdXMuYmluZCh0aGlzKSwhMCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixmKTt0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsCiJfcmVzaXplSGFuZGxlciIpO3RoaXMubGlzdGVuKHRoaXMsImtleWRvd24iLCJfa2V5ZG93bkhhbmRsZXIiKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVubGlzdGVuKHRoaXMsImlyb24tcmVzaXplIiwiX3Jlc2l6ZUhhbmRsZXIiKTt0aGlzLnVubGlzdGVuKHRoaXMsImtleWRvd24iLCJfa2V5ZG93bkhhbmRsZXIiKX0sX3NldE92ZXJmbG93OmZ1bmN0aW9uKGspe3RoaXMuc3R5bGUud2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc9az09PXRoaXM/InRvdWNoIjoiIjt0aGlzLnN0eWxlLm92ZXJmbG93WT1rPT09dGhpcz8iYXV0byI6IiI7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsO3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe3ZhciBrPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD0KdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzPzA6cGFyc2VJbnQoa1sicGFkZGluZy10b3AiXSwxMCk7dGhpcy5faXNSVEw9InJ0bCI9PT1rLmRpcmVjdGlvbjt0aGlzLl92aWV3cG9ydFdpZHRoPXRoaXMuJC5pdGVtcy5vZmZzZXRXaWR0aDt0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHQ7dGhpcy5ncmlkJiZ0aGlzLl91cGRhdGVHcmlkTWV0cmljcygpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBrPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fbWF4U2Nyb2xsVG9wLHRoaXMuX3Njcm9sbFRvcCkpLG49ay10aGlzLl9zY3JvbGxQb3NpdGlvbixwPTA8PW47dGhpcy5fc2Nyb2xsUG9zaXRpb249azt0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGw7TWF0aC5hYnMobik+dGhpcy5fcGh5c2ljYWxTaXplJiYwPHRoaXMuX3BoeXNpY2FsU2l6ZT8obi09dGhpcy5fc2Nyb2xsT2Zmc2V0LHA9TWF0aC5yb3VuZChuLwp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UpKnRoaXMuX2l0ZW1zUGVyUm93LHRoaXMuX3ZpcnR1YWxTdGFydCs9cCx0aGlzLl9waHlzaWNhbFN0YXJ0Kz1wLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsdGhpcy5fdXBkYXRlKCkpOjA8dGhpcy5fcGh5c2ljYWxDb3VudCYmKGs9dGhpcy5fZ2V0UmV1c2FibGVzKHApLHA/KHRoaXMuX3BoeXNpY2FsVG9wPWsucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0Kz1rLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQrPWsuaW5kZXhlcy5sZW5ndGgpOih0aGlzLl92aXJ0dWFsU3RhcnQtPWsuaW5kZXhlcy5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydC09ay5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGsuaW5kZXhlcyxwP251bGw6ay5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIiwKdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLGwpKX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihrKXt2YXIgbj1bXSxwPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplKnRoaXMuX3JhdGlvLHE9dGhpcy5fdmlydHVhbFN0YXJ0LHI9dGhpcy5fdmlydHVhbEVuZCx0PXRoaXMuX3BoeXNpY2FsQ291bnQsdj10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dmFyIHk9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0O3ZhciB6PXRoaXMuX3Njcm9sbFRvcCx4PXRoaXMuX3Njcm9sbEJvdHRvbTtpZihrKXt2YXIgQz10aGlzLl9waHlzaWNhbFN0YXJ0O3k9ei12fWVsc2UgQz10aGlzLl9waHlzaWNhbEVuZCx5LT14O2Zvcig7Oyl7dmFyIEY9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KEMpO3ktPUY7aWYobi5sZW5ndGg+PXR8fHk8PXApYnJlYWs7aWYoayl7aWYocituLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnQpYnJlYWs7CmlmKHYrRj49ei10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7bi5wdXNoKEMpO3YrPUY7Qz0oQysxKSV0fWVsc2V7aWYoMD49cS1uLmxlbmd0aClicmVhaztpZih2K3RoaXMuX3BoeXNpY2FsU2l6ZS1GPD14KWJyZWFrO24ucHVzaChDKTt2LT1GO0M9MD09PUM/dC0xOkMtMX19cmV0dXJue2luZGV4ZXM6bixwaHlzaWNhbFRvcDp2LXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24oayxuKXtpZighKGsmJjA9PT1rLmxlbmd0aHx8MD09PXRoaXMuX3BoeXNpY2FsQ291bnQpKXt0aGlzLl9tYW5hZ2VGb2N1cygpO3RoaXMuX2Fzc2lnbk1vZGVscyhrKTt0aGlzLl91cGRhdGVNZXRyaWNzKGspO2lmKG4pZm9yKDtuLmxlbmd0aDspaz1uLnBvcCgpLHRoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoayk7dGhpcy5fcG9zaXRpb25JdGVtcygpO3RoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpfX0sX2NyZWF0ZVBvb2w6ZnVuY3Rpb24oayl7dGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKTsKdmFyIG4scD1BcnJheShrKTtmb3Iobj0wO248aztuKyspe3ZhciBxPXRoaXMuc3RhbXAobnVsbCk7cFtuXT1xLnJvb3QucXVlcnlTZWxlY3RvcigiKiIpO3RoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHEucm9vdCl9cmV0dXJuIHB9LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGspe2s9dGhpcy5fY2xhbXAodGhpcy5fcGh5c2ljYWxDb3VudCtrLDMsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCk7az10aGlzLl9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93KGspO2lmKHRoaXMuZ3JpZCl7dmFyIG49ayV0aGlzLl9pdGVtc1BlclJvdztuJiZrLW48PXRoaXMuX3BoeXNpY2FsQ291bnQmJihrKz10aGlzLl9pdGVtc1BlclJvdyk7CmstPW59ay09dGhpcy5fcGh5c2ljYWxDb3VudDtuPU1hdGgucm91bmQoLjUqdGhpcy5fcGh5c2ljYWxDb3VudCk7aWYoISgwPmspKXtpZigwPGspe249d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKGspKTtmb3IodmFyIHA9MDtwPGs7cCsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50Kz1rO3RoaXMuX3BoeXNpY2FsU3RhcnQ+dGhpcy5fcGh5c2ljYWxFbmQmJnRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSYmdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KTx0aGlzLl9waHlzaWNhbEVuZCYmKHRoaXMuX3BoeXNpY2FsU3RhcnQrPWspO3RoaXMuX3VwZGF0ZSgpO3RoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLW4pL2s7bj1NYXRoLnJvdW5kKC41Kgp0aGlzLl9waHlzaWNhbENvdW50KX10aGlzLl92aXJ0dWFsRW5kPj10aGlzLl92aXJ0dWFsQ291bnQtMXx8MD09PW58fCh0aGlzLl9pc0NsaWVudEZ1bGwoKT90aGlzLl9waHlzaWNhbFNpemU8dGhpcy5fb3B0UGh5c2ljYWxTaXplJiZ0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsdGhpcy5fY2xhbXAoTWF0aC5yb3VuZCg1MC90aGlzLl90ZW1wbGF0ZUNvc3QpLDEsbikpLGcpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSxsKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9pc1Zpc2libGUpaWYoMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpe3ZhciBrPXRoaXMuX2dldFJldXNhYmxlcyghMCk7dGhpcy5fcGh5c2ljYWxUb3A9ay5waHlzaWNhbFRvcDt0aGlzLl92aXJ0dWFsU3RhcnQrPQprLmluZGV4ZXMubGVuZ3RoO3RoaXMuX3BoeXNpY2FsU3RhcnQrPWsuaW5kZXhlcy5sZW5ndGg7dGhpcy5fdXBkYXRlKGsuaW5kZXhlcyk7dGhpcy5fdXBkYXRlKCk7dGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCl9ZWxzZSAwPHRoaXMuX3ZpcnR1YWxDb3VudCYmKHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMykpfSxfZW5zdXJlVGVtcGxhdGl6ZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jdG9yKXsodGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSl8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGs9e19fa2V5X186ITB9O2tbdGhpcy5hc109ITA7a1t0aGlzLmluZGV4QXNdPSEwO2tbdGhpcy5zZWxlY3RlZEFzXT0hMDtrLnRhYkluZGV4PSEwO3RoaXMuX2luc3RhbmNlUHJvcHM9Cms7dGhpcy50ZW1wbGF0aXplKHRoaXMuX3VzZXJUZW1wbGF0ZSx0aGlzLm11dGFibGVEYXRhKX19LF9ncmlkQ2hhbmdlZDpmdW5jdGlvbihrLG4peyJ1bmRlZmluZWQiIT09dHlwZW9mIG4mJih0aGlzLm5vdGlmeVJlc2l6ZSgpLFBvbHltZXIuZmx1c2g/UG9seW1lci5mbHVzaCgpOlBvbHltZXIuZG9tLmZsdXNoKCksayYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSl9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oayl7aWYoIml0ZW1zIj09PWsucGF0aCl0aGlzLl9waHlzaWNhbFRvcD10aGlzLl92aXJ0dWFsU3RhcnQ9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX2NvbGxlY3Rpb249dGhpcy5pdGVtcyYmUG9seW1lci5Db2xsZWN0aW9uP1BvbHltZXIuQ29sbGVjdGlvbi5nZXQodGhpcy5pdGVtcyk6bnVsbCx0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5PXt9LHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9Cm51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZik7ZWxzZSBpZigiaXRlbXMuc3BsaWNlcyI9PT1rLnBhdGgpe3RoaXMuX2FkanVzdFZpcnR1YWxJbmRleChrLnZhbHVlLmluZGV4U3BsaWNlcyk7dGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MDtpZihrLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKHApe3JldHVybiAwPHAuYWRkZWRDb3VudHx8MDxwLnJlbW92ZWQubGVuZ3RofSkpe3ZhciBuPQp0aGlzLl9nZXRBY3RpdmVFbGVtZW50KCk7dGhpcy5jb250YWlucyhuKSYmbi5ibHVyKCl9az1rLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKHApe3JldHVybiBwLmluZGV4K3AuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZwLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTt0aGlzLl9pc0NsaWVudEZ1bGwoKSYmIWt8fHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZil9ZWxzZSJpdGVtcy5sZW5ndGgiIT09ay5wYXRoJiZ0aGlzLl9mb3J3YXJkSXRlbVBhdGgoay5wYXRoLGsudmFsdWUpfSxfZm9yd2FyZEl0ZW1QYXRoOmZ1bmN0aW9uKGssbil7az1rLnNsaWNlKDYpO3ZhciBwPWsuaW5kZXhPZigiLiIpOy0xPT09cCYmKHA9ay5sZW5ndGgpO3ZhciBxLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pO2lmKGQpe3ZhciB0PXBhcnNlSW50KGsuc3Vic3RyaW5nKDAscCksMTApO2lmKHE9dGhpcy5faXNJbmRleFJlbmRlcmVkKHQpKXt2YXIgdj0KdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0KTt2YXIgeT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3ZdKX1lbHNlIHImJih5PXIpO2lmKCF5fHx5W3RoaXMuaW5kZXhBc10hPT10KXJldHVybn1lbHNlIGlmKHQ9ay5zdWJzdHJpbmcoMCxwKSxyJiZyLl9fa2V5X189PT10KXk9cjtlbHNlIGlmKHY9dGhpcy5fcGh5c2ljYWxJbmRleEZvcktleVt0XSx5PXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdl0pLCF5fHx5Ll9fa2V5X18hPT10KXJldHVybjtrPWsuc3Vic3RyaW5nKHArMSk7az10aGlzLmFzKyhrPyIuIitrOiIiKTtkP3kuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChrLG4sITEsITApOnkubm90aWZ5UGF0aChrLG4sITApO3kuX2ZsdXNoUHJvcGVydGllcyYmeS5fZmx1c2hQcm9wZXJ0aWVzKCEwKTtxJiYodGhpcy5fdXBkYXRlTWV0cmljcyhbdl0pLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKSl9LApfYWRqdXN0VmlydHVhbEluZGV4OmZ1bmN0aW9uKGspe2suZm9yRWFjaChmdW5jdGlvbihuKXtuLnJlbW92ZWQuZm9yRWFjaCh0aGlzLl9yZW1vdmVJdGVtLHRoaXMpO24uaW5kZXg8dGhpcy5fdmlydHVhbFN0YXJ0JiYobj1NYXRoLm1heChuLmFkZGVkQ291bnQtbi5yZW1vdmVkLmxlbmd0aCxuLmluZGV4LXRoaXMuX3ZpcnR1YWxTdGFydCksdGhpcy5fdmlydHVhbFN0YXJ0Kz1uLDA8PXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgmJih0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kz1uKSl9LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihrKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3Qoayk7dGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWsmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oayxuKXt2YXIgcCxxO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiZuKWZvcihxPQowO3E8bi5sZW5ndGg7cSsrKXt2YXIgcj1uW3FdO3ZhciB0PXRoaXMuX2NvbXB1dGVWaWR4KHIpO2lmKG51bGwhPShwPWsuY2FsbCh0aGlzLHIsdCkpKXJldHVybiBwfWVsc2V7cj10aGlzLl9waHlzaWNhbFN0YXJ0O2Zvcih0PXRoaXMuX3ZpcnR1YWxTdGFydDtyPHRoaXMuX3BoeXNpY2FsQ291bnQ7cisrLHQrKylpZihudWxsIT0ocD1rLmNhbGwodGhpcyxyLHQpKSlyZXR1cm4gcDtmb3Iocj0wO3I8dGhpcy5fcGh5c2ljYWxTdGFydDtyKyssdCsrKWlmKG51bGwhPShwPWsuY2FsbCh0aGlzLHIsdCkpKXJldHVybiBwfX0sX2NvbXB1dGVWaWR4OmZ1bmN0aW9uKGspe3JldHVybiBrPj10aGlzLl9waHlzaWNhbFN0YXJ0P3RoaXMuX3ZpcnR1YWxTdGFydCsoay10aGlzLl9waHlzaWNhbFN0YXJ0KTp0aGlzLl92aXJ0dWFsU3RhcnQrKHRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fcGh5c2ljYWxTdGFydCkra30sX2Fzc2lnbk1vZGVsczpmdW5jdGlvbihrKXt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obiwKcCl7dmFyIHE9dGhpcy5fcGh5c2ljYWxJdGVtc1tuXSxyPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcF07aWYobnVsbCE9cil7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQocSk7dC5fX2tleV9fPXRoaXMuX2NvbGxlY3Rpb24/dGhpcy5fY29sbGVjdGlvbi5nZXRLZXkocik6bnVsbDt0aGlzLl9mb3J3YXJkUHJvcGVydHkodCx0aGlzLmFzLHIpO3RoaXMuX2ZvcndhcmRQcm9wZXJ0eSh0LHRoaXMuc2VsZWN0ZWRBcyx0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZChyKSk7dGhpcy5fZm9yd2FyZFByb3BlcnR5KHQsdGhpcy5pbmRleEFzLHApO3RoaXMuX2ZvcndhcmRQcm9wZXJ0eSh0LCJ0YWJJbmRleCIsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD09PXA/MDotMSk7dGhpcy5fcGh5c2ljYWxJbmRleEZvcktleVt0Ll9fa2V5X19dPW47dC5fZmx1c2hQcm9wZXJ0aWVzJiZ0Ll9mbHVzaFByb3BlcnRpZXMoITApO3EucmVtb3ZlQXR0cmlidXRlKCJoaWRkZW4iKX1lbHNlIHEuc2V0QXR0cmlidXRlKCJoaWRkZW4iLAoiIil9LGspfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihrKXtQb2x5bWVyLmZsdXNoP1BvbHltZXIuZmx1c2goKTpQb2x5bWVyLmRvbS5mbHVzaCgpO3ZhciBuPTAscD0wLHE9dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQscj10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQpe3ArPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF07dGhpcy5fcGh5c2ljYWxTaXplc1t0XT10aGlzLl9waHlzaWNhbEl0ZW1zW3RdLm9mZnNldEhlaWdodDtuKz10aGlzLl9waHlzaWNhbFNpemVzW3RdO3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50Kz10aGlzLl9waHlzaWNhbFNpemVzW3RdPzE6MH0sayk7dGhpcy5ncmlkPyh0aGlzLl91cGRhdGVHcmlkTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsU2l6ZT1NYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcm93SGVpZ2h0KToocD0xPT09dGhpcy5faXRlbXNQZXJSb3c/cDoKTWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK24tcCx0aGlzLl9pdGVtc1BlclJvdz0xKTt0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PXEmJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgocipxK24pL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF91cGRhdGVHcmlkTWV0cmljczpmdW5jdGlvbigpe3RoaXMuX2l0ZW1XaWR0aD0wPHRoaXMuX3BoeXNpY2FsQ291bnQ/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDoyMDA7dGhpcy5fcm93SGVpZ2h0PTA8dGhpcy5fcGh5c2ljYWxDb3VudD90aGlzLl9waHlzaWNhbEl0ZW1zWzBdLm9mZnNldEhlaWdodDoyMDA7dGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbVdpZHRoP01hdGguZmxvb3IodGhpcy5fdmlld3BvcnRXaWR0aC90aGlzLl9pdGVtV2lkdGgpOgp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBrPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIG49KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoKS8yO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihwLHEpe3ZhciByPU1hdGguZmxvb3IocSV0aGlzLl9pdGVtc1BlclJvdyp0aGlzLl9pdGVtV2lkdGgrbik7dGhpcy5faXNSVEwmJihyKj0tMSk7dGhpcy50cmFuc2xhdGUzZChyKyJweCIsaysicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1twXSk7dGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhxKSYmKGsrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNlIHRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihwKXt0aGlzLnRyYW5zbGF0ZTNkKDAsaysicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1twXSk7ays9dGhpcy5fcGh5c2ljYWxTaXplc1twXX0pfSwKX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGspJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2tdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihrKXtyZXR1cm4gayV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBrPTA9PT10aGlzLl92aXJ0dWFsU3RhcnQ/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoMCE9PWspe3RoaXMuX3BoeXNpY2FsVG9wLT1rO3ZhciBuPXRoaXMuX3Njcm9sbFRvcDshYyYmMDxuJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKG4tayl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihrKXt0aGlzLnNjcm9sbFRhcmdldCYmCjA8PWsmJih0aGlzLl9zY3JvbGxQb3NpdGlvbj10aGlzLl9zY3JvbGxUb3A9ayl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oayl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuZ3JpZD90aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7aWYoKGs9KGs9KGs9a3x8MD09PXRoaXMuX3Njcm9sbEhlaWdodCl8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplKXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCl8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCl0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PQp0aGlzLl9lc3RTY3JvbGxIZWlnaHQrInB4Iix0aGlzLl9zY3JvbGxIZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0fSxzY3JvbGxUb0l0ZW06ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuc2Nyb2xsVG9JbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaykpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGspe2lmKCEoIm51bWJlciIhPT10eXBlb2Yga3x8MD5rfHxrPnRoaXMuaXRlbXMubGVuZ3RoLTEpJiYoUG9seW1lci5mbHVzaD9Qb2x5bWVyLmZsdXNoKCk6UG9seW1lci5kb20uZmx1c2goKSwwIT09dGhpcy5fcGh5c2ljYWxDb3VudCkpe2s9dGhpcy5fY2xhbXAoaywwLHRoaXMuX3ZpcnR1YWxDb3VudC0xKTtpZighdGhpcy5faXNJbmRleFJlbmRlcmVkKGspfHxrPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuZ3JpZD9rLTIqdGhpcy5faXRlbXNQZXJSb3c6ay0xO3RoaXMuX21hbmFnZUZvY3VzKCk7dGhpcy5fYXNzaWduTW9kZWxzKCk7dGhpcy5fdXBkYXRlTWV0cmljcygpOwp0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2Zvcih2YXIgbj10aGlzLl9waHlzaWNhbFN0YXJ0LHA9dGhpcy5fdmlydHVhbFN0YXJ0LHE9MCxyPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplO3A8ayYmcTw9cjspcSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KG4pLG49KG4rMSkldGhpcy5fcGh5c2ljYWxDb3VudCxwKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKTt0aGlzLl9wb3NpdGlvbkl0ZW1zKCk7dGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrcSk7dGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCk7dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsfX0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PQp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGw7dGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKTt0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0sZil9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGspKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oayl7aWYoISgwPmt8fGs+PXRoaXMuX3ZpcnR1YWxDb3VudCkpeyF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpO2lmKHRoaXMuX2lzSW5kZXhSZW5kZXJlZChrKSl7dmFyIG49CnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleChrKV0pO24mJihuW3RoaXMuc2VsZWN0ZWRBc109ITApO3RoaXMudXBkYXRlU2l6ZUZvckluZGV4KGspfXRoaXMuJC5zZWxlY3Rvci5zZWxlY3RJbmRleD90aGlzLiQuc2VsZWN0b3Iuc2VsZWN0SW5kZXgoayk6dGhpcy4kLnNlbGVjdG9yLnNlbGVjdCh0aGlzLml0ZW1zW2tdKX19LGRlc2VsZWN0SXRlbTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5kZXNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihrKSl9LGRlc2VsZWN0SW5kZXg6ZnVuY3Rpb24oayl7MD5rfHxrPj10aGlzLl92aXJ0dWFsQ291bnR8fCh0aGlzLl9pc0luZGV4UmVuZGVyZWQoaykmJih0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoayldKVt0aGlzLnNlbGVjdGVkQXNdPSExLHRoaXMudXBkYXRlU2l6ZUZvckluZGV4KGspKSx0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3RJbmRleD8KdGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoayk6dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0KHRoaXMuaXRlbXNba10pKX0sdG9nZ2xlU2VsZWN0aW9uRm9ySXRlbTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaykpfSx0b2dnbGVTZWxlY3Rpb25Gb3JJbmRleDpmdW5jdGlvbihrKXsodGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZD90aGlzLiQuc2VsZWN0b3IuaXNJbmRleFNlbGVjdGVkKGspOnRoaXMuJC5zZWxlY3Rvci5pc1NlbGVjdGVkKHRoaXMuaXRlbXNba10pKT90aGlzLmRlc2VsZWN0SW5kZXgoayk6dGhpcy5zZWxlY3RJbmRleChrKX0sY2xlYXJTZWxlY3Rpb246ZnVuY3Rpb24oKXt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24oayl7dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1trXSlbdGhpcy5zZWxlY3RlZEFzXT0hMX0pO3RoaXMuJC5zZWxlY3Rvci5jbGVhclNlbGVjdGlvbigpfSwKX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGspeyhrP3RoaXMubGlzdGVuOnRoaXMudW5saXN0ZW4pLmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihrKXt2YXIgbj10aGlzLm1vZGVsRm9yRWxlbWVudChrLnRhcmdldCk7aWYobil7dmFyIHA9UG9seW1lci5kb20oaykucGF0aFswXTtrPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt2YXIgcT10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoblt0aGlzLmluZGV4QXNdKV07aWYoImlucHV0IiE9PXAubG9jYWxOYW1lJiYiYnV0dG9uIiE9PXAubG9jYWxOYW1lJiYic2VsZWN0IiE9PXAubG9jYWxOYW1lKXtwPW4udGFiSW5kZXg7bi50YWJJbmRleD0tMTAwO3ZhciByPWs/ay50YWJJbmRleDotMTtuLnRhYkluZGV4PXA7ayYmcSE9PWsmJnEuY29udGFpbnMoaykmJi0xMDAhPT1yfHx0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckl0ZW0oblt0aGlzLmFzXSl9fX0sCl9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oayl7dGhpcy5jbGVhclNlbGVjdGlvbigpO3RoaXMuJC5zZWxlY3Rvci5tdWx0aT1rfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihrKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGspKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGspe2lmKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoaykpcmV0dXJuIG51bGw7dGhpcy5fdXBkYXRlTWV0cmljcyhbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleChrKV0pO3RoaXMuX3Bvc2l0aW9uSXRlbXMoKTtyZXR1cm4gbnVsbH0sX21hbmFnZUZvY3VzOmZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDswPD1rJiZrPHRoaXMuX3ZpcnR1YWxDb3VudD90aGlzLl9pc0luZGV4UmVuZGVyZWQoayk/dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCk6dGhpcy5fY3JlYXRlRm9jdXNCYWNrZmlsbEl0ZW0oKTowPHRoaXMuX3ZpcnR1YWxDb3VudCYmCjA8dGhpcy5fcGh5c2ljYWxDb3VudCYmKHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX3BoeXNpY2FsU3RhcnQsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD10aGlzLl92aXJ0dWFsU3RhcnQsdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9waHlzaWNhbFN0YXJ0XSl9LF9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93OmZ1bmN0aW9uKGspe3RoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1zUGVyUm93fHwxO3JldHVybiB0aGlzLmdyaWQ/TWF0aC5jZWlsKGsvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX2l0ZW1zUGVyUm93Omt9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24oayl7cmV0dXJuIGs+PXRoaXMuX3ZpcnR1YWxTdGFydCYmazw9dGhpcy5fdmlydHVhbEVuZH0sX2lzSW5kZXhWaXNpYmxlOmZ1bmN0aW9uKGspe3JldHVybiBrPj10aGlzLmZpcnN0VmlzaWJsZUluZGV4JiZrPD10aGlzLmxhc3RWaXNpYmxlSW5kZXh9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGspe3JldHVybiBkPwoodGhpcy5fcGh5c2ljYWxTdGFydCsoay10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50OnRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbdGhpcy5fY29sbGVjdGlvbi5nZXRLZXkodGhpcy5pdGVtc1trXSldfSxmb2N1c0l0ZW06ZnVuY3Rpb24oayl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oayl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihrKXtpZighKDA+a3x8az49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCk7dGhpcy5faXNJbmRleFJlbmRlcmVkKGspfHx0aGlzLnNjcm9sbFRvSW5kZXgoayk7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGspXSxwPXRoaXMubW9kZWxGb3JFbGVtZW50KG4pLHE7cC50YWJJbmRleD0tMTAwOy0xMDA9PT1uLnRhYkluZGV4JiYocT1uKTtxfHwocT1Qb2x5bWVyLmRvbShuKS5xdWVyeVNlbGVjdG9yKCdbdGFiaW5kZXhceDNkIi0xMDAiXScpKTsKcC50YWJJbmRleD0wO3RoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9aztxJiZxLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pO3RoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGw7dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD0tMX0sX2NyZWF0ZUZvY3VzQmFja2ZpbGxJdGVtOmZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg7aWYoISh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8MD50aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSl7aWYoIXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKXt2YXIgbj10aGlzLnN0YW1wKG51bGwpO3RoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPQpuLnJvb3QucXVlcnlTZWxlY3RvcigiKiIpO3RoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKG4ucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1trXTt0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MDt0aGlzLl9waHlzaWNhbEl0ZW1zW2tdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtO3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWs7dGhpcy50cmFuc2xhdGUzZCgwLCItMTAwMDBweCIsMCx0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSl9fSxfcmVzdG9yZUZvY3VzZWRJdGVtOmZ1bmN0aW9uKCl7aWYodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJiEoMD50aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGs9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSwKbj10aGlzLl9waHlzaWNhbEl0ZW1zW2tdO2lmKG4pe3ZhciBwPXRoaXMubW9kZWxGb3JFbGVtZW50KG4pLHE9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pO3BbdGhpcy5hc109PT1xW3RoaXMuYXNdPyh0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1uLHAudGFiSW5kZXg9LTEsdGhpcy5fcGh5c2ljYWxJdGVtc1trXT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLnRyYW5zbGF0ZTNkKDAsIi0xMDAwMHB4IiwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCk7dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oayl7az10aGlzLm1vZGVsRm9yRWxlbWVudChrLnRhcmdldCk7dmFyIG49dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLHA9bnVsbCE9PXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtLApxPXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg7ayYmKG49PT1rP3RoaXMuX2lzSW5kZXhWaXNpYmxlKHEpfHx0aGlzLnNjcm9sbFRvSW5kZXgocSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLG4mJihuLnRhYkluZGV4PS0xKSxrLnRhYkluZGV4PTAsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1xPWtbdGhpcy5pbmRleEFzXSx0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9nZXRQaHlzaWNhbEluZGV4KHEpLHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXhdLHAmJiF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5fdXBkYXRlKCkpKX0sX2tleWRvd25IYW5kbGVyOmZ1bmN0aW9uKGspe3N3aXRjaChrLmtleUNvZGUpe2Nhc2UgNDA6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDx0aGlzLl92aXJ0dWFsQ291bnQtMSYmay5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2ZvY3VzUGh5c2ljYWxJdGVtKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgrCih0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzk6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8tMToxKSk7YnJlYWs7Y2FzZSAzODowPHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgmJmsucHJldmVudERlZmF1bHQoKTt0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4LSh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8xOi0xKSk7YnJlYWs7Y2FzZSAxMzp0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0aGlzLnNlbGVjdGlvbkVuYWJsZWQmJnRoaXMuX3NlbGVjdGlvbkhhbmRsZXIoayl9fSxfY2xhbXA6ZnVuY3Rpb24oaywKbixwKXtyZXR1cm4gTWF0aC5taW4ocCxNYXRoLm1heChuLGspKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGssbixwKXtkPyh0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNba109UG9seW1lci5EZWJvdW5jZXIuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1trXSxwLG4uYmluZCh0aGlzKSksUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyKHRoaXMuX2RlYm91bmNlcnNba10pKTpQb2x5bWVyLmRvbS5hZGREZWJvdW5jZXIodGhpcy5kZWJvdW5jZShrLG4pKX0sX2ZvcndhcmRQcm9wZXJ0eTpmdW5jdGlvbihrLG4scCl7ZD9rLl9zZXRQZW5kaW5nUHJvcGVydHkobixwKTprW25dPXB9LF9mb3J3YXJkSG9zdFByb3BWMjpmdW5jdGlvbihrLG4peyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocCl7cCYmdGhpcy5tb2RlbEZvckVsZW1lbnQocCkuZm9yd2FyZEhvc3RQcm9wKGssCm4pfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGssbixwKXtQb2x5bWVyLlBhdGgubWF0Y2hlcyh0aGlzLmFzLG4pJiYoaz1rW3RoaXMuaW5kZXhBc10sbj09dGhpcy5hcyYmKHRoaXMuaXRlbXNba109cCksdGhpcy5ub3RpZnlQYXRoKFBvbHltZXIuUGF0aC50cmFuc2xhdGUodGhpcy5hcywiaXRlbXMuIitrLG4pLHApKX0sX2dldFN0YW1wZWRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9waHlzaWNhbEl0ZW1zfSxfZm9yd2FyZEluc3RhbmNlUGF0aDpmdW5jdGlvbihrLG4scCl7MD09PW4uaW5kZXhPZih0aGlzLmFzKyIuIikmJnRoaXMubm90aWZ5UGF0aCgiaXRlbXMuIitrLl9fa2V5X18rIi4iK24uc2xpY2UodGhpcy5hcy5sZW5ndGgrMSkscCl9LF9mb3J3YXJkUGFyZW50UGF0aDpmdW5jdGlvbihrLG4peyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocCl7cCYmCnRoaXMubW9kZWxGb3JFbGVtZW50KHApLm5vdGlmeVBhdGgoayxuLCEwKX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihrLG4peyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocCl7cCYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHApW2tdPW4pfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgaz10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIFBvbHltZXIuZG9tKGs/ay5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pfSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1pdGVtL3BhcGVyLWl0ZW0tYm9keS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pdGVtLWJvZHkifSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29tbW9uL3RmLWdyYXBoLWljb24uanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7bGV0IGY7KGZ1bmN0aW9uKGcpe2cuQ09OU1Q9IkNPTlNUIjtnLk1FVEE9Ik1FVEEiO2cuT1A9Ik9QIjtnLlNFUklFUz0iU0VSSUVTIjtnLlNVTU1BUlk9IlNVTU1BUlkifSkoZj1kLkdyYXBoSWNvblR5cGV8fChkLkdyYXBoSWNvblR5cGU9e30pKTtQb2x5bWVyKHtpczoidGYtZ3JhcGgtaWNvbiIscHJvcGVydGllczp7dHlwZTpTdHJpbmcsdmVydGljYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZmlsbE92ZXJyaWRlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzdHJva2VPdmVycmlkZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0saGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZToyMH0sZmFkZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2ZpbGw6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUZpbGwodHlwZSwgZmlsbE92ZXJyaWRlKSJ9LF9zdHJva2U6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVN0cm9rZSh0eXBlLCBzdHJva2VPdmVycmlkZSkifX0sCmdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy4kLnN2Z0RlZnN9LF9jb21wdXRlRmlsbChnLGwpe2lmKG51bGwhPWwpcmV0dXJuIGw7c3dpdGNoKGcpe2Nhc2UgZi5NRVRBOnJldHVybiBhLmdyYXBoLnJlbmRlci5NZXRhbm9kZUNvbG9ycy5ERUZBVUxUX0ZJTEw7Y2FzZSBmLlNFUklFUzpyZXR1cm4gYS5ncmFwaC5yZW5kZXIuU2VyaWVzTm9kZUNvbG9ycy5ERUZBVUxUX0ZJTEw7ZGVmYXVsdDpyZXR1cm4gYS5ncmFwaC5yZW5kZXIuT3BOb2RlQ29sb3JzLkRFRkFVTFRfRklMTH19LF9jb21wdXRlU3Ryb2tlKGcsbCl7aWYobnVsbCE9bClyZXR1cm4gbDtzd2l0Y2goZyl7Y2FzZSBmLk1FVEE6cmV0dXJuIGEuZ3JhcGgucmVuZGVyLk1ldGFub2RlQ29sb3JzLkRFRkFVTFRfU1RST0tFO2Nhc2UgZi5TRVJJRVM6cmV0dXJuIGEuZ3JhcGgucmVuZGVyLlNlcmllc05vZGVDb2xvcnMuREVGQVVMVF9TVFJPS0U7ZGVmYXVsdDpyZXR1cm4gYS5ncmFwaC5yZW5kZXIuT3BOb2RlQ29sb3JzLkRFRkFVTFRfU1RST0tFfX0sCl9pc1R5cGUoZyxsKXtyZXR1cm4gZz09PWx9LF9mYWRlZENsYXNzOmZ1bmN0aW9uKGcsbCl7cmV0dXJuIGc/ImZhZGVkLSIrbDoiIn19KX0pKGMuaWNvbnx8KGMuaWNvbj17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1jb21tb24vdGYtbm9kZS1pY29uLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLW5vZGUtaWNvbiIscHJvcGVydGllczp7bm9kZTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0scmVuZGVySW5mbzp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sY29sb3JCeTp7dHlwZTpPYmplY3QsdmFsdWU6InN0cnVjdHVyYWwifSx0ZW1wbGF0ZUluZGV4Ont0eXBlOkZ1bmN0aW9uLHZhbHVlOm51bGx9LHR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LHZlcnRpY2FsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNvbnN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHN1bW1hcnk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZmlsbDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0saGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZToyMH0sX2ZpbGxPdmVycmlkZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9fSwKX2NvbXB1dGVGaWxsT3ZlcnJpZGU6ZnVuY3Rpb24oYSxjLGQsZixnKXtyZXR1cm4gYSYmYyYmZCYmZj8oYT10Zi5ncmFwaC5zY2VuZS5ub2RlLGEuZ2V0RmlsbEZvck5vZGUoZixhLkNvbG9yQnlbZC50b1VwcGVyQ2FzZSgpXSxjLCExKSk6Z30sX2dldFN0cm9rZU92ZXJyaWRlOmZ1bmN0aW9uKGEpe3JldHVybiBhP3RmLmdyYXBoLnNjZW5lLm5vZGUuZ2V0U3Ryb2tlRm9yRmlsbChhKTpudWxsfSxfZ2V0VHlwZTpmdW5jdGlvbihhLGMsZCxmKXtjb25zdCB7R3JhcGhJY29uVHlwZTpnfT10Zi5ncmFwaC5pY29uO2lmKGEpc3dpdGNoKGEudHlwZSl7Y2FzZSB0Zi5ncmFwaC5Ob2RlVHlwZS5PUDpyZXR1cm4gYT1hLm9wLCJzdHJpbmciIT09dHlwZW9mIGE/Zy5PUDoiQ29uc3QiPT09YXx8ZD9nLkNPTlNUOmEuZW5kc1dpdGgoIlN1bW1hcnkiKXx8Yz9nLlNVTU1BUlk6Zy5PUDtjYXNlIHRmLmdyYXBoLk5vZGVUeXBlLk1FVEE6cmV0dXJuIGcuTUVUQTtjYXNlIHRmLmdyYXBoLk5vZGVUeXBlLlNFUklFUzpyZXR1cm4gZy5TRVJJRVN9cmV0dXJuIGZ9LApfaXNWZXJ0aWNhbDpmdW5jdGlvbihhLGMpe3JldHVybiBhP2EuaGFzTm9uQ29udHJvbEVkZ2VzOiEhY30sX2dldEZhZGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmlzRmFkZWRPdXR9LF9vbkZpbGxPdmVycmlkZUNoYW5nZWQoYSxjKXtjb25zdCB7bm9kZTpkLHJlbmRlckluZm86Zixjb2xvckJ5OmcsdGVtcGxhdGVJbmRleDpsfT10aGlzLGs9dGYuZ3JhcGguc2NlbmUubm9kZTthIT09YyYmay5yZW1vdmVHcmFkaWVudERlZmluaXRpb25zKHRoaXMuJC5pY29uLmdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKSk7ZCYmZiYmZyYmbCYmay5nZXRGaWxsRm9yTm9kZShsLGsuQ29sb3JCeVtnLnRvVXBwZXJDYXNlKCldLGYsITEsdGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKX19KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbS5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ncmFwaC1vcC1jb21wYXQtbGlzdC1pdGVtIixwcm9wZXJ0aWVzOntjYXJkTm9kZTpPYmplY3QsaXRlbU5vZGU6T2JqZWN0LGVkZ2VMYWJlbDpTdHJpbmcsaXRlbVJlbmRlckluZm86T2JqZWN0LG5hbWU6U3RyaW5nLGl0ZW1UeXBlOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2l0ZW1UeXBlQ2hhbmdlZCJ9LGNvbG9yQnk6U3RyaW5nLGNvbG9yQnlQYXJhbXM6T2JqZWN0LHRlbXBsYXRlSW5kZXg6RnVuY3Rpb259LF9pdGVtVHlwZUNoYW5nZWQ6ZnVuY3Rpb24oKXsic3Vibm9kZSIhPT10aGlzLml0ZW1UeXBlP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX0sX25vZGVMaXN0ZW5lcjpmdW5jdGlvbihhKXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrYS50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9LApfZmFkZWRDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5pc0ZhZGVkT3V0PyJmYWRlZCI6IiJ9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWdyYXBoLW9wLWNvbXBhdC1jYXJkL3RmLWdyYXBoLW9wLWNvbXBhdC1jYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIixwcm9wZXJ0aWVzOntncmFwaEhpZXJhcmNoeTpPYmplY3QsaGllcmFyY2h5UGFyYW1zOk9iamVjdCxyZW5kZXJIaWVyYXJjaHk6T2JqZWN0LG5vZGVUaXRsZTpTdHJpbmcsX3RlbXBsYXRlSW5kZXg6e3R5cGU6RnVuY3Rpb24sY29tcHV0ZWQ6Il9nZXRUZW1wbGF0ZUluZGV4KGdyYXBoSGllcmFyY2h5KSJ9LF9pbmNvbXBhdGlibGVPcE5vZGVzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldEluY29tcGF0aWJsZU9wTm9kZXMoZ3JhcGhIaWVyYXJjaHksIGhpZXJhcmNoeVBhcmFtcykifSxfZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sX29wQ29tcGF0U2NvcmU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZU9wQ29tcGF0U2NvcmUoZ3JhcGhIaWVyYXJjaHkpIn0sX29wQ29tcGF0U2NvcmVMYWJlbDp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXRPcENvbXBhdFNjb3JlTGFiZWwoX29wQ29tcGF0U2NvcmUpIn0sCl9vcENvbXBhdENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZTp0Zi5ncmFwaC5yZW5kZXIuT3BOb2RlQ29sb3JzLkNPTVBBVElCTEV9LF9vcEluY29tcGF0Q29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOnRmLmdyYXBoLnJlbmRlci5PcE5vZGVDb2xvcnMuSU5DT01QQVRJQkxFfSxfdG90YWxJbmNvbXBhdE9wczp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9nZXRUb3RhbEluY29tcGF0aWJsZU9wcyhncmFwaEhpZXJhcmNoeSkifX0sX2dldFRlbXBsYXRlSW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVJbmRleCgpfSxfZ2V0Tm9kZTpmdW5jdGlvbihhLGMpe3JldHVybiBjLm5vZGUoYSl9LF9nZXRQcmludGFibGVIVE1MTm9kZU5hbWU6ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fCIiKS5yZXBsYWNlKC9cLy9nLCJceDNjd2JyXHgzZS8iKX0sX2dldFJlbmRlckluZm86ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVuZGVySGllcmFyY2h5LmdldE9yQ3JlYXRlUmVuZGVyTm9kZUJ5TmFtZShhKX0sCl90b2dnbGVFeHBhbmRlZDpmdW5jdGlvbigpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH0sX2dldFRvZ2dsZUljb246ZnVuY3Rpb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfcmVzaXplTGlzdDpmdW5jdGlvbihhKXsoYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGEpKSYmYS5maXJlKCJpcm9uLXJlc2l6ZSIpfSxfZ2V0SW5jb21wYXRpYmxlT3BOb2RlczpmdW5jdGlvbihhLGMpe2lmKGEmJmEucm9vdClyZXR1cm4gdGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksdGYuZ3JhcGguaGllcmFyY2h5LmdldEluY29tcGF0aWJsZU9wcyhhLGMpfSxfY29tcHV0ZU9wQ29tcGF0U2NvcmU6ZnVuY3Rpb24oYSl7aWYoYSYmYS5yb290KXt2YXIgYz1hLnJvb3Q7YT1jLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZTtjPWMuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7CnJldHVybiAwPT1hJiYwPT1jPzA6TWF0aC5mbG9vcigxMDAqYS8oYStjKSkvMTAwfXJldHVybiAwfSxfZ2V0T3BDb21wYXRTY29yZUxhYmVsOmZ1bmN0aW9uKGEpe3JldHVybiBkMy5mb3JtYXQoIi4wJSIpKGEpfSxfZ2V0VG90YWxJbmNvbXBhdGlibGVPcHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEucm9vdD9hLnJvb3QuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU6MH19KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtaW5mby90Zi1ub2RlLWxpc3QtaXRlbS5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ub2RlLWxpc3QtaXRlbSIscHJvcGVydGllczp7Y2FyZE5vZGU6T2JqZWN0LGl0ZW1Ob2RlOk9iamVjdCxlZGdlTGFiZWw6U3RyaW5nLGl0ZW1SZW5kZXJJbmZvOk9iamVjdCxuYW1lOlN0cmluZyxpdGVtVHlwZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9pdGVtVHlwZUNoYW5nZWQifSxjb2xvckJ5OlN0cmluZyxjb2xvckJ5UGFyYW1zOk9iamVjdCx0ZW1wbGF0ZUluZGV4OkZ1bmN0aW9ufSxfaXRlbVR5cGVDaGFuZ2VkOmZ1bmN0aW9uKCl7InN1Ym5vZGUiIT09dGhpcy5pdGVtVHlwZT90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9LF9ub2RlTGlzdGVuZXI6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJub2RlLWxpc3QtaXRlbS0iK2EudHlwZSx7Y2FyZE5vZGU6dGhpcy5jYXJkTm9kZS5uYW1lLG5vZGVOYW1lOnRoaXMubmFtZSwKdHlwZTp0aGlzLml0ZW1UeXBlfSl9LF9mYWRlZENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLmlzRmFkZWRPdXQ/ImZhZGVkIjoiIn19KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtaW5mby90Zi1ub2RlLWluZm8uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtbm9kZS1pbmZvIixwcm9wZXJ0aWVzOntub2RlTmFtZTpTdHJpbmcsZ3JhcGhIaWVyYXJjaHk6T2JqZWN0LHJlbmRlckhpZXJhcmNoeTpPYmplY3QsY29sb3JCeTpTdHJpbmcsX3RlbXBsYXRlSW5kZXg6e3R5cGU6RnVuY3Rpb24sY29tcHV0ZWQ6Il9nZXRUZW1wbGF0ZUluZGV4KGdyYXBoSGllcmFyY2h5KSJ9LF9ub2RlOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUobm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0sX25vZGVTdGF0czp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMobm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0sX2hhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldEhhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzKF9ub2RlU3RhdHMpIn0sX25vZGVTdGF0c0Zvcm1hdHRlZEJ5dGVzOnt0eXBlOlN0cmluZywKY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyhfbm9kZVN0YXRzKSJ9LF9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZShfbm9kZVN0YXRzKSJ9LF9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldE5vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzKF9ub2RlU3RhdHMpIn0sbm9kZUluY2x1ZGU6e3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfbm9kZUluY2x1ZGVTdGF0ZUNoYW5nZWQifSxfYXR0cmlidXRlczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEF0dHJpYnV0ZXMoX25vZGUpIn0sX2RldmljZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXREZXZpY2UoX25vZGUpIn0sX3N1Y2Nlc3NvcnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0U3VjY2Vzc29ycyhfbm9kZSwgZ3JhcGhIaWVyYXJjaHkpIn0sCl9wcmVkZWNlc3NvcnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0UHJlZGVjZXNzb3JzKF9ub2RlLCBncmFwaEhpZXJhcmNoeSkifSxfZnVuY3Rpb25Vc2FnZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRGdW5jdGlvblVzYWdlcyhfbm9kZSwgZ3JhcGhIaWVyYXJjaHkpIn0sX3N1Ym5vZGVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0U3Vibm9kZXMoX25vZGUpIn0sX2V4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF90b3RhbFByZWRlY2Vzc29yczp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9nZXRUb3RhbFByZWQoX3ByZWRlY2Vzc29ycykifSxfdG90YWxTdWNjZXNzb3JzOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2dldFRvdGFsU3VjYyhfc3VjY2Vzc29ycykifSxfb3BlbmVkQ29udHJvbFByZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX29wZW5lZENvbnRyb2xTdWNjOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hdXhCdXR0b25UZXh0OlN0cmluZyxfZ3JvdXBCdXR0b25UZXh0OlN0cmluZ30sCmV4cGFuZE5vZGU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoIl9ub2RlLmV4cGFuZCIsdGhpcy5ub2RlKX0sX2dldFRlbXBsYXRlSW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVJbmRleCgpfSxfZ2V0Tm9kZTpmdW5jdGlvbihhLGMpe3JldHVybiBjLm5vZGUoYSl9LF9nZXROb2RlU3RhdHM6ZnVuY3Rpb24oYSxjKXtyZXR1cm4oYT10aGlzLl9nZXROb2RlKGEsYykpP2Euc3RhdHM6bnVsbH0sX2dldFRvdGFsTWljcm9zOmZ1bmN0aW9uKGEpe3JldHVybiBhP2EuZ2V0VG90YWxNaWNyb3MoKTowfSxfZ2V0SGFzRGlzcGxheWFibGVOb2RlU3RhdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRmLmdyYXBoLnV0aWwuaGFzRGlzcGxheWFibGVOb2RlU3RhdHMoYSl9LF9nZXROb2RlU3RhdHNGb3JtYXR0ZWRCeXRlczpmdW5jdGlvbihhKXtpZihhJiZhLnRvdGFsQnl0ZXMpcmV0dXJuIHRmLmdyYXBoLnV0aWwuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlKGEudG90YWxCeXRlcyx0Zi5ncmFwaC51dGlsLk1FTU9SWV9VTklUUyl9LApfZ2V0Tm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWU6ZnVuY3Rpb24oYSl7aWYoYSYmYS5nZXRUb3RhbE1pY3JvcygpKXJldHVybiB0Zi5ncmFwaC51dGlsLmNvbnZlcnRVbml0c1RvSHVtYW5SZWFkYWJsZShhLmdldFRvdGFsTWljcm9zKCksdGYuZ3JhcGgudXRpbC5USU1FX1VOSVRTKX0sX2dldE5vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzOmZ1bmN0aW9uKGEpe2lmKGEmJmEub3V0cHV0U2l6ZSYmYS5vdXRwdXRTaXplLmxlbmd0aClyZXR1cm4gXy5tYXAoYS5vdXRwdXRTaXplLGZ1bmN0aW9uKGMpe3JldHVybiAwPT09Yy5sZW5ndGg/InNjYWxhciI6IlsiK2Muam9pbigiLCAiKSsiXSJ9KX0sX2dldFByaW50YWJsZUhUTUxOb2RlTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4oYXx8IiIpLnJlcGxhY2UoL1wvL2csIlx4M2N3YnJceDNlLyIpfSxfZ2V0UmVuZGVySW5mbzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGEpfSwKX2dldEF0dHJpYnV0ZXM6ZnVuY3Rpb24oYSl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2F0dHJpYnV0ZXNMaXN0IikpO2lmKCFhfHwhYS5hdHRyKXJldHVybltdO3ZhciBjPVtdO18uZWFjaChhLmF0dHIsZnVuY3Rpb24oZCl7ZC5rZXk9PT10Zi5ncmFwaC5MQVJHRV9BVFRSU19LRVk/Yz1jLmNvbmNhdChkLnZhbHVlLmxpc3Qucy5tYXAoZnVuY3Rpb24oZil7cmV0dXJue2tleTpmLHZhbHVlOiJUb28gbGFyZ2UgdG8gc2hvdy4uLiJ9fSkpOmMucHVzaCh7a2V5OmQua2V5LHZhbHVlOkpTT04uc3RyaW5naWZ5KGQudmFsdWUpfSl9KTtyZXR1cm4gY30sX2dldERldmljZTpmdW5jdGlvbihhKXtyZXR1cm4gYT9hLmRldmljZTpudWxsfSxfZ2V0U3VjY2Vzc29ycyhhLGMpe3RoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImlucHV0c0xpc3QiKTtyZXR1cm4gYT90aGlzLl9jb252ZXJ0RWRnZUxpc3RUb0VkZ2VJbmZvTGlzdChjLmdldFN1Y2Nlc3NvcnMoYS5uYW1lKSwKITEsYS5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19LF9nZXRQcmVkZWNlc3NvcnMoYSxjKXt0aGlzLl9yZWZyZXNoTm9kZUl0ZW1MaXN0KCJvdXRwdXRzTGlzdCIpO3JldHVybiBhP3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KGMuZ2V0UHJlZGVjZXNzb3JzKGEubmFtZSksITAsYS5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19LF9nZXRGdW5jdGlvblVzYWdlcyhhLGMpe3RoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpO3JldHVybiBhJiZhLnR5cGU9PT10Zi5ncmFwaC5Ob2RlVHlwZS5NRVRBPyhhPWMubGlicmFyeUZ1bmN0aW9uc1thLmFzc29jaWF0ZWRGdW5jdGlvbl0pP2EudXNhZ2VzOltdOltdfSxfcmVmcmVzaE5vZGVJdGVtTGlzdChhKXt0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLGAjJHthfWApKX0sX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0OmZ1bmN0aW9uKGEsCmMsZCl7dmFyIGY9bD0+Xy5tYXAobC5iYXNlRWRnZUxpc3Qsaz0+e3ZhciBuPWM/ay52OmsudztyZXR1cm57bmFtZTpuLG5vZGU6dGhpcy5fZ2V0Tm9kZShuLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDp0Zi5ncmFwaC5zY2VuZS5lZGdlLmdldExhYmVsRm9yQmFzZUVkZ2Uoayx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKG4sdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLGc9ZnVuY3Rpb24obCl7dmFyIGs9W107Xy5lYWNoKGwsbj0+e3ZhciBwPWM/bi52Om4udztkJiYxIT1uLmJhc2VFZGdlTGlzdC5sZW5ndGg/ay5wdXNoKHtuYW1lOnAsbm9kZTp0aGlzLl9nZXROb2RlKHAsdGhpcy5ncmFwaEhpZXJhcmNoeSksZWRnZUxhYmVsOnRmLmdyYXBoLnNjZW5lLmVkZ2UuZ2V0TGFiZWxGb3JFZGdlKG4sdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhwLHRoaXMucmVuZGVySGllcmFyY2h5KX0pOgprPWsuY29uY2F0KGYobikpfSk7cmV0dXJuIGt9LmJpbmQodGhpcyk7cmV0dXJue3JlZ3VsYXI6ZyhhLnJlZ3VsYXIpLGNvbnRyb2w6ZyhhLmNvbnRyb2wpfX0sX2dldFN1Ym5vZGVzOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLm1ldGFncmFwaD9hLm1ldGFncmFwaC5ub2RlcygpOm51bGx9LF9nZXRUb3RhbFByZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVndWxhci5sZW5ndGgrYS5jb250cm9sLmxlbmd0aH0sX2dldFRvdGFsU3VjYzpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZWd1bGFyLmxlbmd0aCthLmNvbnRyb2wubGVuZ3RofSxfdG9nZ2xlQ29udHJvbFByZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hdGhpcy5fb3BlbmVkQ29udHJvbFByZWR9LF90b2dnbGVDb250cm9sU3VjYzpmdW5jdGlvbigpe3RoaXMuX29wZW5lZENvbnRyb2xTdWNjPSF0aGlzLl9vcGVuZWRDb250cm9sU3VjY30sX3RvZ2dsZUV4cGFuZGVkOmZ1bmN0aW9uKCl7dGhpcy5fZXhwYW5kZWQ9CiF0aGlzLl9leHBhbmRlZH0sX2dldFRvZ2dsZUljb246ZnVuY3Rpb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfcmVzZXRTdGF0ZTpmdW5jdGlvbigpe3RoaXMuX29wZW5lZENvbnRyb2xTdWNjPXRoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExO3RoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0Iix0Zi5ncmFwaC5zY2VuZS5ub2RlLmdldEdyb3VwU2V0dGluZ0xhYmVsKHRoaXMuX25vZGUpKTt0aGlzLl9ub2RlJiYoUG9seW1lci5kb20odGhpcy4kLm5vZGV0aXRsZSkuaW5uZXJIVE1MPXRoaXMuX2dldFByaW50YWJsZUhUTUxOb2RlTmFtZSh0aGlzLl9ub2RlLm5hbWUpKX0sX3Jlc2l6ZUxpc3Q6ZnVuY3Rpb24oYSl7KGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhKSkmJmEuZmlyZSgiaXJvbi1yZXNpemUiKX0sX3RvZ2dsZUluY2x1ZGU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoIm5vZGUtdG9nZ2xlLWluY2x1c2lvbiIse25hbWU6dGhpcy5ub2RlTmFtZX0pfSwKX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIsdGYuZ3JhcGguZ2V0SW5jbHVkZU5vZGVCdXR0b25TdHJpbmcoYSkpfSxfdG9nZ2xlR3JvdXA6ZnVuY3Rpb24oKXt2YXIgYT10Zi5ncmFwaC5zY2VuZS5ub2RlLmdldFNlcmllc05hbWUodGhpcy5fbm9kZSk7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6YX0pfSxfaXNMaWJyYXJ5RnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEubmFtZS5zdGFydHNXaXRoKHRmLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgpfSxfaXNJblNlcmllczpmdW5jdGlvbihhKXtyZXR1cm4gdGYuZ3JhcGguc2NlbmUubm9kZS5jYW5CZUluU2VyaWVzKGEpfX0pfSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1pbmZvL3RmLWdyYXBoLWluZm8uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtaW5mbyIscHJvcGVydGllczp7dGl0bGU6U3RyaW5nLGdyYXBoSGllcmFyY2h5Ok9iamVjdCxncmFwaDpPYmplY3QscmVuZGVySGllcmFyY2h5Ok9iamVjdCxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCxoZWFsdGhQaWxsU3RlcEluZGV4Ont0eXBlOk51bWJlcixub3RpZnk6ITB9LGNvbG9yQnk6U3RyaW5nLGNvbXBhdE5vZGVUaXRsZTpTdHJpbmcsc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGhpZ2hsaWdodGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZE5vZGVJbmNsdWRlOnt0eXBlOk51bWJlcixub3RpZnk6ITB9LGRlYnVnZ2VyRGF0YUVuYWJsZWQ6Qm9vbGVhbn0sbGlzdGVuZXJzOnsibm9kZS1saXN0LWl0ZW0tY2xpY2siOiJfbm9kZUxpc3RJdGVtQ2xpY2tlZCIsIm5vZGUtbGlzdC1pdGVtLW1vdXNlb3ZlciI6Il9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIiLCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCI6Il9ub2RlTGlzdEl0ZW1Nb3VzZW91dCJ9LApfbm9kZUxpc3RJdGVtQ2xpY2tlZDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkTm9kZT1hLmRldGFpbC5ub2RlTmFtZX0sX25vZGVMaXN0SXRlbU1vdXNlb3ZlcjpmdW5jdGlvbihhKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1hLmRldGFpbC5ub2RlTmFtZX0sX25vZGVMaXN0SXRlbU1vdXNlb3V0OmZ1bmN0aW9uKCl7dGhpcy5oaWdobGlnaHRlZE5vZGU9bnVsbH0sX2hlYWx0aFBpbGxzQXZhaWxhYmxlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEmJmMmJjA8T2JqZWN0LmtleXMoYykubGVuZ3RofSxfZXF1YWxzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE9PT1jfX0pfSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1ib2FyZC90Zi1ncmFwaC1ib2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ncmFwaC1ib2FyZCIscHJvcGVydGllczp7Z3JhcGhIaWVyYXJjaHk6T2JqZWN0LGdyYXBoOk9iamVjdCxzdGF0czpPYmplY3QscHJvZ3Jlc3M6T2JqZWN0LHRyYWNlSW5wdXRzOkJvb2xlYW4sY29sb3JCeTpTdHJpbmcsY29sb3JCeVBhcmFtczp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxyZW5kZXJIaWVyYXJjaHk6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sZGVidWdnZXJEYXRhRW5hYmxlZDpCb29sZWFuLGFyZUhlYWx0aFBpbGxzTG9hZGluZzpCb29sZWFuLGRlYnVnZ2VyTnVtZXJpY0FsZXJ0czp7dHlwZTpBcnJheSxub3RpZnk6ITB9LG5vZGVOYW1lc1RvSGVhbHRoUGlsbHM6T2JqZWN0LGFsbFN0ZXBzTW9kZUVuYWJsZWQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6ITF9LHNwZWNpZmljSGVhbHRoUGlsbFN0ZXA6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCx2YWx1ZTowfSxoZWFsdGhQaWxsU3RlcEluZGV4Ok51bWJlcixzZWxlY3RlZE5vZGU6e3R5cGU6U3RyaW5nLApub3RpZnk6ITB9LGNvbXBhdE5vZGVUaXRsZTp7dHlwZTpTdHJpbmcsdmFsdWU6IlRQVSBDb21wYXRpYmlsaXR5In0sZWRnZVdpZHRoRnVuY3Rpb246T2JqZWN0LF9zZWxlY3RlZE5vZGVJbmNsdWRlOk51bWJlcixfaGlnaGxpZ2h0ZWROb2RlOlN0cmluZyxoYW5kbGVOb2RlU2VsZWN0ZWQ6T2JqZWN0LGVkZ2VMYWJlbEZ1bmN0aW9uOk9iamVjdCxoYW5kbGVFZGdlU2VsZWN0ZWQ6T2JqZWN0fSxvYnNlcnZlcnM6WyJfdXBkYXRlTm9kZUluY2x1ZGUoc2VsZWN0ZWROb2RlLCByZW5kZXJIaWVyYXJjaHkpIl0sZml0OmZ1bmN0aW9uKCl7dGhpcy4kLmdyYXBoLmZpdCgpfSxfaXNOb3RDb21wbGV0ZTpmdW5jdGlvbihhKXtyZXR1cm4gMTAwPmEudmFsdWV9LF9nZXRDb250YWluZXJDbGFzczpmdW5jdGlvbihhKXt2YXIgYz0iY29udGFpbmVyIjthLmVycm9yJiYoYys9IiBlcnJvciIpO3RoaXMuX2lzTm90Q29tcGxldGUoYSkmJihjKz0iIGxvYWRpbmciKTtyZXR1cm4gY30sX29uTm9kZUluY2x1c2lvblRvZ2dsZWQoYSl7dGhpcy4kLmdyYXBoLm5vZGVUb2dnbGVFeHRyYWN0KGEuZGV0YWlsLm5hbWUpfSwKX29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZChhKXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKGEuZGV0YWlsLm5hbWUpfSxfdXBkYXRlTm9kZUluY2x1ZGUoKXtjb25zdCBhPXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT1hP2EuaW5jbHVkZTp0Zi5ncmFwaC5JbmNsdXNpb25UeXBlLlVOU1BFQ0lGSUVEfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tbWVudS1iZWhhdmlvci9pcm9uLW1lbnViYXItYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25NZW51YmFyQmVoYXZpb3JJbXBsPXtob3N0QXR0cmlidXRlczp7cm9sZToibWVudWJhciJ9LGtleUJpbmRpbmdzOntsZWZ0OiJfb25MZWZ0S2V5IixyaWdodDoiX29uUmlnaHRLZXkifSxfb25VcEtleTpmdW5jdGlvbihhKXt0aGlzLmZvY3VzZWRJdGVtLmNsaWNrKCk7YS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGEpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKTthLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LGdldCBfaXNSVEwoKXtyZXR1cm4icnRsIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbn0sX29uTGVmdEtleTpmdW5jdGlvbihhKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCk7YS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihhKXt0aGlzLl9pc1JUTD8KdGhpcy5fZm9jdXNQcmV2aW91cygpOnRoaXMuX2ZvY3VzTmV4dCgpO2EuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uS2V5ZG93bjpmdW5jdGlvbihhKXt0aGlzLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyhhLCJ1cCBkb3duIGxlZnQgcmlnaHQgZXNjIil8fHRoaXMuX2ZvY3VzV2l0aEtleWJvYXJkRXZlbnQoYSl9fTtQb2x5bWVyLklyb25NZW51YmFyQmVoYXZpb3I9W1BvbHltZXIuSXJvbk1lbnVCZWhhdmlvcixQb2x5bWVyLklyb25NZW51YmFyQmVoYXZpb3JJbXBsXTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1yYWRpby1idXR0b24vcGFwZXItcmFkaW8tYnV0dG9uLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltQb2x5bWVyLlBhcGVyQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLlJlbmRlclN0YXR1cy5hZnRlck5leHRSZW5kZXIodGhpcyxmdW5jdGlvbigpe2lmKCItMXB4Ij09PXRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIikudHJpbSgpKXt2YXIgYT1wYXJzZUZsb2F0KHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUiKS50cmltKCkpLApjPU1hdGguZmxvb3IoMyphKTtjJTIhPT1hJTImJmMrKzt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpjKyJweCJ9KX19KX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1yYWRpby1ncm91cC9wYXBlci1yYWRpby1ncm91cC5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25NZW51YmFyQmVoYXZpb3JdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJyYWRpb2dyb3VwIn0scHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZToibmFtZSJ9LHNlbGVjdGVkQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiY2hlY2tlZCJ9LHNlbGVjdGFibGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwYXBlci1yYWRpby1idXR0b24ifSxhbGxvd0VtcHR5U2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxzZWxlY3Q6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5fdmFsdWVUb0l0ZW0oYSk7aWYoIWN8fCFjLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7aWYodGhpcy5zZWxlY3RlZCl7Yz10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLnNlbGVjdGVkKTtpZih0aGlzLnNlbGVjdGVkPT1hKWlmKHRoaXMuYWxsb3dFbXB0eVNlbGVjdGlvbilhPSIiO2Vsc2V7YyYmCihjLmNoZWNrZWQ9ITApO3JldHVybn1jJiYoYy5jaGVja2VkPSExKX1Qb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3Iuc2VsZWN0LmFwcGx5KHRoaXMsW2FdKTt0aGlzLmZpcmUoInBhcGVyLXJhZGlvLWdyb3VwLWNoYW5nZWQiKX19LF9hY3RpdmF0ZUZvY3VzZWRJdGVtOmZ1bmN0aW9uKCl7dGhpcy5faXRlbUFjdGl2YXRlKHRoaXMuX3ZhbHVlRm9ySXRlbSh0aGlzLmZvY3VzZWRJdGVtKSx0aGlzLmZvY3VzZWRJdGVtKX0sX29uVXBLZXk6ZnVuY3Rpb24oYSl7dGhpcy5fZm9jdXNQcmV2aW91cygpO2EucHJldmVudERlZmF1bHQoKTt0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oYSl7dGhpcy5fZm9jdXNOZXh0KCk7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uTGVmdEtleTpmdW5jdGlvbihhKXtQb2x5bWVyLklyb25NZW51YmFyQmVoYXZpb3JJbXBsLl9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpOwp0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9LF9vblJpZ2h0S2V5OmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvbk1lbnViYXJCZWhhdmlvckltcGwuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci10b29sdGlwL3BhcGVyLXRvb2x0aXAuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCwKdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57ZW50cnk6W3tuYW1lOiJmYWRlLWluLWFuaW1hdGlvbiIsbm9kZTp0aGlzLHRpbWluZzp7ZGVsYXk6MH19XSxleGl0Olt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIixub2RlOnRoaXN9XX19fSxfc2hvd2luZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnt3ZWJraXRBbmltYXRpb25FbmQ6Il9vbkFuaW1hdGlvbkVuZCJ9LGdldCB0YXJnZXQoKXt2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlLGM9UG9seW1lci5kb20odGhpcykuZ2V0T3duZXJSb290KCk7cmV0dXJuIHRoaXMuZm9yP1BvbHltZXIuZG9tKGMpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTphLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/Yy5ob3N0OmF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluZFRhcmdldCgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMubWFudWFsTW9kZXx8dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCl9LApwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGEpeyJlbnRyeSI9PT1hP3RoaXMuc2hvdygpOiJleGl0Ij09PWEmJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoIiI9PT1Qb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudC50cmltKCkpe2Zvcih2YXIgYT0hMCxjPVBvbHltZXIuZG9tKHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxkPTA7ZDxjLmxlbmd0aDtkKyspaWYoIiIhPT1jW2RdLnRleHRDb250ZW50LnRyaW0oKSl7YT0hMTticmVha31pZihhKXJldHVybn10aGlzLl9zaG93aW5nPSEwO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKTt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSk7CnRoaXMudXBkYXRlUG9zaXRpb24oKTt0aGlzLl9hbmltYXRpb25QbGF5aW5nPSEwO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZW50cnkiKSl9fSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5fc2hvd2luZyYmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmc/KHRoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCkpOih0aGlzLl9vbkFuaW1hdGlvbkZpbmlzaCgpLHRoaXMuX3Nob3dpbmc9ITEsdGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMCkpfSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuX3RhcmdldCYmdGhpcy5vZmZzZXRQYXJlbnQpe3ZhciBhPXRoaXMub2Zmc2V0OzE0IT10aGlzLm1hcmdpblRvcCYmMTQ9PXRoaXMub2Zmc2V0JiYoYT10aGlzLm1hcmdpblRvcCk7dmFyIGM9dGhpcy5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD10aGlzLl90YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCmY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPShkLndpZHRoLWYud2lkdGgpLzIsbD0oZC5oZWlnaHQtZi5oZWlnaHQpLzIsaz1kLmxlZnQtYy5sZWZ0LG49ZC50b3AtYy50b3A7c3dpdGNoKHRoaXMucG9zaXRpb24pe2Nhc2UgInRvcCI6dmFyIHA9aytnO3ZhciBxPW4tZi5oZWlnaHQtYTticmVhaztjYXNlICJib3R0b20iOnA9aytnO3E9bitkLmhlaWdodCthO2JyZWFrO2Nhc2UgImxlZnQiOnA9ay1mLndpZHRoLWE7cT1uK2w7YnJlYWs7Y2FzZSAicmlnaHQiOnA9aytkLndpZHRoK2EscT1uK2x9dGhpcy5maXRUb1Zpc2libGVCb3VuZHM/KGMubGVmdCtwK2Yud2lkdGg+d2luZG93LmlubmVyV2lkdGg/KHRoaXMuc3R5bGUucmlnaHQ9IjBweCIsdGhpcy5zdHlsZS5sZWZ0PSJhdXRvIik6KHRoaXMuc3R5bGUubGVmdD1NYXRoLm1heCgwLHApKyJweCIsdGhpcy5zdHlsZS5yaWdodD0iYXV0byIpLGMudG9wK3ErZi5oZWlnaHQ+d2luZG93LmlubmVySGVpZ2h0Pyh0aGlzLnN0eWxlLmJvdHRvbT0KYy5oZWlnaHQrInB4Iix0aGlzLnN0eWxlLnRvcD0iYXV0byIpOih0aGlzLnN0eWxlLnRvcD1NYXRoLm1heCgtYy50b3AscSkrInB4Iix0aGlzLnN0eWxlLmJvdHRvbT0iYXV0byIpKToodGhpcy5zdHlsZS5sZWZ0PXArInB4Iix0aGlzLnN0eWxlLnRvcD1xKyJweCIpfX0sX2FkZExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3RhcmdldCYmKHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VlbnRlciIsInNob3ciKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VsZWF2ZSIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsImJsdXIiLCJoaWRlIiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpO3RoaXMubGlzdGVuKHRoaXMuJC50b29sdGlwLCJhbmltYXRpb25lbmQiLCJfb25BbmltYXRpb25FbmQiKTt0aGlzLmxpc3Rlbih0aGlzLCJtb3VzZWVudGVyIiwiaGlkZSIpfSwKX2ZpbmRUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpO3RoaXMuX3RhcmdldD10aGlzLnRhcmdldDt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX2FkZExpc3RlbmVycygpfSxfZGVsYXlDaGFuZ2U6ZnVuY3Rpb24oYSl7NTAwIT09YSYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOmErIm1zIn0pfSxfbWFudWFsTW9kZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGU/dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCk6dGhpcy5fYWRkTGlzdGVuZXJzKCl9LF9jYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKTt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIik7CnRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMTt0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oYSl7aWYoImVudHJ5Ij09PWEmJiIiIT09dGhpcy5hbmltYXRpb25FbnRyeSlyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTsKaWYoImV4aXQiPT09YSYmIiIhPT10aGlzLmFuaW1hdGlvbkV4aXQpcmV0dXJuIHRoaXMuYW5pbWF0aW9uRXhpdDtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZ1thXSYmInN0cmluZyI9PT10eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0ubmFtZSl7aWYodGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0udGltaW5nJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1thXVswXS50aW1pbmcuZGVsYXkmJjAhPT10aGlzLmFuaW1hdGlvbkNvbmZpZ1thXVswXS50aW1pbmcuZGVsYXkpe3ZhciBjPXRoaXMuYW5pbWF0aW9uQ29uZmlnW2FdWzBdLnRpbWluZy5kZWxheTsiZW50cnkiPT09YT90aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiI6YysibXMifSk6ImV4aXQiPT09YSYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0IjpjKyJtcyJ9KX1yZXR1cm4gdGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0ubmFtZX19LF9yZW1vdmVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJgoodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpO3RoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpO3RoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1ub2RlLXNlYXJjaC90Zi1ncmFwaC1ub2RlLXNlYXJjaC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ncmFwaC1ub2RlLXNlYXJjaCIscHJvcGVydGllczp7cmVuZGVySGllcmFyY2h5Ok9iamVjdCxzZWxlY3RlZE5vZGU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3Jhd1JlZ2V4SW5wdXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfcmVnZXhJbnB1dDp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUmVnZXhJbnB1dChyZW5kZXJIaWVyYXJjaHksIF9yYXdSZWdleElucHV0KSJ9LF9wcmV2aW91c1JlZ2V4SW5wdXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfc2VhcmNoVGltZW91dERlbGF5Ont0eXBlOk51bWJlcix2YWx1ZToxNTAscmVhZE9ubHk6ITB9LF9zZWFyY2hQZW5kaW5nOkJvb2xlYW4sX21heFJlZ2V4UmVzdWx0czp7dHlwZTpOdW1iZXIsdmFsdWU6NDJ9LF9yZWdleE1hdGNoZXM6QXJyYXl9LG9ic2VydmVyczpbIl9yZWdleElucHV0Q2hhbmdlZChfcmVnZXhJbnB1dCkiXSxfY29tcHV0ZVJlZ2V4SW5wdXQoYSxjKXtyZXR1cm4gYy50cmltKCl9LApfcmVnZXhJbnB1dENoYW5nZWQoKXt0aGlzLl9yZXF1ZXN0U2VhcmNoKCl9LF9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfSxfcmVxdWVzdFNlYXJjaCgpe3RoaXMuX3NlYXJjaFBlbmRpbmd8fCh0aGlzLl9yZWdleElucHV0PT09dGhpcy5fcHJldmlvdXNSZWdleElucHV0P3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE6KHRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExO3RoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KSkpfSxfZXhlY3V0ZVNlYXJjaCgpe2lmKHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD10aGlzLl9yZWdleElucHV0KXt0cnl7dmFyIGE9bmV3IFJlZ0V4cCh0aGlzLl9yZWdleElucHV0KX1jYXRjaChkKXt0aGlzLl9jbGVhclNlYXJjaFJlc3VsdHMoKTtyZXR1cm59dmFyIGM9W107Xy5lYWNoKHRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCksCihkLGYpPT57aWYoYy5sZW5ndGg+PXRoaXMuX21heFJlZ2V4UmVzdWx0cylyZXR1cm4hMTthLnRlc3QoZikmJmMucHVzaChmKX0pO3RoaXMuc2V0KCJfcmVnZXhNYXRjaGVzIixjKX1lbHNlIHRoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpfSxfbWF0Y2hDbGlja2VkKGEpe3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLGEubW9kZWwuaXRlbSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtZ3JhcGgtY29udHJvbHMvdGYtZ3JhcGgtY29udHJvbHMuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7Y29uc3QgZj0vZGV2aWNlOihbXjpdKzpbMC05XSspJC8sZz1be3JlZ2V4OmZ9XSxsPVtdO2xldCBrOyhmdW5jdGlvbihwKXtwLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIjtwLk1FTU9SWT0ibWVtb3J5IjtwLlNUUlVDVFVSRT0ic3RydWN0dXJlIjtwLlhMQV9DTFVTVEVSPSJ4bGFfY2x1c3RlciI7cC5PUF9DT01QQVRJQklMSVRZPSJvcF9jb21wYXRpYmlsaXR5In0pKGs9ZC5Db2xvckJ5fHwoZC5Db2xvckJ5PXt9KSk7Y29uc3Qgbj1uZXcgU2V0KFtrLkNPTVBVVEVfVElNRSxrLk1FTU9SWV0pO1BvbHltZXIoe2lzOiJ0Zi1ncmFwaC1jb250cm9scyIscHJvcGVydGllczp7c3RhdHM6e3ZhbHVlOm51bGwsdHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSxkZXZpY2VzRm9yU3RhdHM6e3ZhbHVlOm51bGwsdHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRvbmx5OiEwfSxjb2xvckJ5Ont0eXBlOlN0cmluZywKdmFsdWU6ay5TVFJVQ1RVUkUsbm90aWZ5OiEwfSxjb2xvckJ5UGFyYW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZG9ubHk6ITB9LGRhdGFzZXRzOnt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIix2YWx1ZTooKT0+W119LHJlbmRlckhpZXJhcmNoeTp7dHlwZTpPYmplY3R9LHNlbGVjdGlvbjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0sc2VsZWN0ZWRGaWxlOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LF9zZWxlY3RlZFJ1bkluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLG9ic2VydmVyOiJfc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQifSx0cmFjZUlucHV0czp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTohMX0sX3NlbGVjdGVkVGFnSW5kZXg6e3R5cGU6TnVtYmVyLAp2YWx1ZTowLG9ic2VydmVyOiJfc2VsZWN0ZWRUYWdJbmRleENoYW5nZWQifSxfc2VsZWN0ZWRHcmFwaFR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOmEuZ3JhcGguU2VsZWN0aW9uVHlwZS5PUF9HUkFQSH0sc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9jdXJyZW50RGV2aWNlczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEN1cnJlbnREZXZpY2VzKGRldmljZXNGb3JTdGF0cykifSxfY3VycmVudERldmljZVBhcmFtczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEN1cnJlbnREZXZpY2VQYXJhbXMoY29sb3JCeVBhcmFtcykifSxfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRDdXJyZW50WGxhQ2x1c3RlclBhcmFtcyhjb2xvckJ5UGFyYW1zKSJ9LF9jdXJyZW50R3JhZGllbnRQYXJhbXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0Q3VycmVudEdyYWRpZW50UGFyYW1zKGNvbG9yQnlQYXJhbXMsIGNvbG9yQnkpIn0sCnNob3dTZXNzaW9uUnVuc0Ryb3Bkb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LHNob3dVcGxvYWRCdXR0b246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0saGVhbHRoUGlsbHNGZWF0dXJlRW5hYmxlZDpCb29sZWFuLGhlYWx0aFBpbGxzVG9nZ2xlZE9uOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSxfbGVnZW5kT3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9fSxfeGxhQ2x1c3RlcnNQcm92aWRlZDpmdW5jdGlvbihwKXtyZXR1cm4gcCYmcC5oaWVyYXJjaHkmJjA8cC5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RofSxfc3RhdHNDaGFuZ2VkOmZ1bmN0aW9uKHApe2lmKG51bGwhPXApe3ZhciBxPXt9O18uZWFjaChwLmRldl9zdGF0cyxmdW5jdGlvbihyKXt2YXIgdD1fLnNvbWUoZyxmdW5jdGlvbih5KXtyZXR1cm4geS5yZWdleC50ZXN0KHIuZGV2aWNlKX0pLHY9Xy5zb21lKGwsZnVuY3Rpb24oeSl7cmV0dXJuIHkucmVnZXgudGVzdChyLmRldmljZSl9KTt0JiYhdiYmKHFbci5kZXZpY2VdPQohMCl9KTt0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixxKX19LF9nZXRDdXJyZW50RGV2aWNlczpmdW5jdGlvbihwKXt2YXIgcT10aGlzLnN0YXRzO3E9KHE/cS5kZXZfc3RhdHM6W10pLm1hcCh0PT50LmRldmljZSkuZmlsdGVyKHQ9Pmcuc29tZSh2PT52LnJlZ2V4LnRlc3QodCkpKTtjb25zdCByPWEuZ3JhcGgudXRpbC5yZW1vdmVDb21tb25QcmVmaXgocSk7aWYoMT09ci5sZW5ndGgpe2NvbnN0IHQ9clswXS5tYXRjaChmKTt0JiYoclswXT10WzFdKX1yZXR1cm4gcS5tYXAoKHQsdik9PntsZXQgeT1udWxsO2wuZm9yRWFjaCh6PT57ei5yZWdleC50ZXN0KHQpJiYoeT16Lm1zZyl9KTtyZXR1cm57ZGV2aWNlOnQsc3VmZml4OnJbdl0sdXNlZDpwW3RdLGlnbm9yZWRNc2c6eX19KX0sX2RldmljZUNoZWNrYm94Q2xpY2tlZDpmdW5jdGlvbihwKXtwPXAudGFyZ2V0O2NvbnN0IHE9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmRldmljZXNGb3JTdGF0cykscj1wLnZhbHVlO3AuY2hlY2tlZD8KcVtyXT0hMDpkZWxldGUgcVtyXTt0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixxKX0sX251bVRhZ3M6ZnVuY3Rpb24ocCxxKXtyZXR1cm4gdGhpcy5fZ2V0VGFncyhwLHEpLmxlbmd0aH0sX2dldFRhZ3M6ZnVuY3Rpb24ocCxxKXtyZXR1cm4gcCYmcFtxXT9wW3FdLnRhZ3M6W119LF9maXQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImZpdC10YXAiKX0sX2lzR3JhZGllbnRDb2xvcmluZzpmdW5jdGlvbihwLHEpe3JldHVybiBuLmhhcyhxKSYmbnVsbCE9cH0sX2VxdWFsczpmdW5jdGlvbihwLHEpe3JldHVybiBwPT09cX0sX2dldEN1cnJlbnREZXZpY2VQYXJhbXM6ZnVuY3Rpb24ocCl7cD1wLmRldmljZS5maWx0ZXIodD0+Zy5zb21lKHY9PnYucmVnZXgudGVzdCh0LmRldmljZSkpKTtjb25zdCBxPWEuZ3JhcGgudXRpbC5yZW1vdmVDb21tb25QcmVmaXgocC5tYXAodD0+dC5kZXZpY2UpKTtpZigxPT1xLmxlbmd0aCl7dmFyIHI9cVswXS5tYXRjaChmKTtyJiYocVswXT1yWzFdKX1yZXR1cm4gcC5tYXAoKHQsCnYpPT4oe2RldmljZTpxW3ZdLGNvbG9yOnQuY29sb3J9KSl9LF9nZXRDdXJyZW50WGxhQ2x1c3RlclBhcmFtczpmdW5jdGlvbihwKXtyZXR1cm4gcC54bGFfY2x1c3Rlcn0sX2dldEN1cnJlbnRHcmFkaWVudFBhcmFtczpmdW5jdGlvbihwLHEpe2lmKHRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHEpKXtwPXBbcV07dmFyIHI9cC5taW5WYWx1ZSx0PXAubWF4VmFsdWU7cT09PWsuTUVNT1JZPyhyPWEuZ3JhcGgudXRpbC5jb252ZXJ0VW5pdHNUb0h1bWFuUmVhZGFibGUocixhLmdyYXBoLnV0aWwuTUVNT1JZX1VOSVRTKSx0PWEuZ3JhcGgudXRpbC5jb252ZXJ0VW5pdHNUb0h1bWFuUmVhZGFibGUodCxhLmdyYXBoLnV0aWwuTUVNT1JZX1VOSVRTKSk6cT09PWsuQ09NUFVURV9USU1FJiYocj1hLmdyYXBoLnV0aWwuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlKHIsYS5ncmFwaC51dGlsLlRJTUVfVU5JVFMpLHQ9YS5ncmFwaC51dGlsLmNvbnZlcnRVbml0c1RvSHVtYW5SZWFkYWJsZSh0LAphLmdyYXBoLnV0aWwuVElNRV9VTklUUykpO3JldHVybnttaW5WYWx1ZTpyLG1heFZhbHVlOnQsc3RhcnRDb2xvcjpwLnN0YXJ0Q29sb3IsZW5kQ29sb3I6cC5lbmRDb2xvcn19fSxkb3dubG9hZDpmdW5jdGlvbigpe3RoaXMuJC5ncmFwaGRvd25sb2FkLmNsaWNrKCl9LF91cGRhdGVGaWxlSW5wdXQ6ZnVuY3Rpb24ocCl7dmFyIHE9cC50YXJnZXQuZmlsZXNbMF07aWYocSl7cT1xLm5hbWU7dmFyIHI9cS5sYXN0SW5kZXhPZigiLiIpOzA8PXImJihxPXEuc3Vic3RyaW5nKDAscikpO3I9cS5sYXN0SW5kZXhPZigiLyIpOzA8PXImJihxPXEuc3Vic3RyaW5nKHIrMSkpO3RoaXMuX3NldERvd25sb2FkRmlsZW5hbWUocSk7dGhpcy5zZXQoInNlbGVjdGVkRmlsZSIscCl9fSxfZGF0YXNldHNDaGFuZ2VkOmZ1bmN0aW9uKHAscSl7bnVsbCE9cSYmKHRoaXMuX3NlbGVjdGVkUnVuSW5kZXg9MCl9LF9jb21wdXRlU2VsZWN0aW9uOmZ1bmN0aW9uKHAscSxyLHQpe3JldHVybiBwW3FdJiZwW3FdLnRhZ3Nbcl0/CntydW46cFtxXS5uYW1lLHRhZzpwW3FdLnRhZ3Nbcl0udGFnLHR5cGU6dH06bnVsbH0sX3NlbGVjdGVkUnVuSW5kZXhDaGFuZ2VkOmZ1bmN0aW9uKHApe3RoaXMuZGF0YXNldHMmJih0aGlzLmNvbG9yQnk9ay5TVFJVQ1RVUkUsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPXRoaXMuX2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCksdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKHRoaXMuZGF0YXNldHNbcF0/dGhpcy5kYXRhc2V0c1twXS5uYW1lOiIiKSl9LF9zZWxlY3RlZFRhZ0luZGV4Q2hhbmdlZCgpe3RoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPXRoaXMuX2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCl9LF9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpe2NvbnN0IHtkYXRhc2V0czpwLF9zZWxlY3RlZFJ1bkluZGV4OnEsX3NlbGVjdGVkVGFnSW5kZXg6cn09dGhpcztyZXR1cm4gcCYmcFtxXSYmcFtxXS50YWdzW3JdJiYKIXBbcV0udGFnc1tyXS5vcEdyYXBoP3BbcV0udGFnc1tyXS5wcm9maWxlP2EuZ3JhcGguU2VsZWN0aW9uVHlwZS5QUk9GSUxFOnBbcV0udGFnc1tyXS5jb25jZXB0dWFsR3JhcGg/YS5ncmFwaC5TZWxlY3Rpb25UeXBlLkNPTkNFUFRVQUxfR1JBUEg6YS5ncmFwaC5TZWxlY3Rpb25UeXBlLk9QX0dSQVBIOmEuZ3JhcGguU2VsZWN0aW9uVHlwZS5PUF9HUkFQSH0sX2dldEZpbGU6ZnVuY3Rpb24oKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9LF9zZXREb3dubG9hZEZpbGVuYW1lOmZ1bmN0aW9uKHApe3RoaXMuJC5ncmFwaGRvd25sb2FkLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLHArIi5wbmciKX0sX3N0YXRzTm90TnVsbDpmdW5jdGlvbihwKXtyZXR1cm4gbnVsbCE9PXB9LF90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfSxfZ2V0VG9nZ2xlVGV4dChwKXtyZXR1cm4gcD8iQ2xvc2UgbGVnZW5kLiI6IkV4cGFuZCBsZWdlbmQuIn0sCl9nZXRUb2dnbGVMZWdlbmRJY29uKHApe3JldHVybiBwPyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn0sX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChwLHEscil7cmV0dXJuIXBbcV18fCFwW3FdLnRhZ3Nbcl18fCFwW3FdLnRhZ3Nbcl0ub3BHcmFwaH0sX2dldFNlbGVjdGlvblByb2ZpbGVEaXNhYmxlZChwLHEscil7cmV0dXJuIXBbcV18fCFwW3FdLnRhZ3Nbcl18fCFwW3FdLnRhZ3Nbcl0ucHJvZmlsZX0sX2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHAscSxyKXtyZXR1cm4hcFtxXXx8IXBbcV0udGFnc1tyXXx8IXBbcV0udGFnc1tyXS5jb25jZXB0dWFsR3JhcGh9fSl9KShjLmNvbnRyb2xzfHwoYy5jb250cm9scz17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1sb2FkZXIvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlci5qcwpmcD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oYSxjLGQsZil7cmV0dXJuIG5ldyAoZHx8KGQ9UHJvbWlzZSkpKGZ1bmN0aW9uKGcsbCl7ZnVuY3Rpb24gayhxKXt0cnl7cChmLm5leHQocSkpfWNhdGNoKHIpe2wocil9fWZ1bmN0aW9uIG4ocSl7dHJ5e3AoZlsidGhyb3ciXShxKSl9Y2F0Y2gocil7bChyKX19ZnVuY3Rpb24gcChxKXtxLmRvbmU/ZyhxLnZhbHVlKToobmV3IGQoZnVuY3Rpb24ocil7cihxLnZhbHVlKX0pKS50aGVuKGssbil9cCgoZj1mLmFwcGx5KGEsY3x8W10pKS5uZXh0KCkpfSl9OwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ncmFwaC1kYXNoYm9hcmQtbG9hZGVyIixfdGVtcGxhdGU6bnVsbCxwcm9wZXJ0aWVzOntkYXRhc2V0czpBcnJheSxwcm9ncmVzczp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3Rpb246T2JqZWN0LHNlbGVjdGVkRmlsZTpPYmplY3QsY29tcGF0aWJpbGl0eVByb3ZpZGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IGEuZ3JhcGgub3AuVHB1Q29tcGF0aWJpbGl0eVByb3ZpZGVyfSxoaWVyYXJjaHlQYXJhbXM6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5hLmdyYXBoLmhpZXJhcmNoeS5EZWZhdWx0SGllcmFyY2h5UGFyYW1zfSxvdXRHcmFwaEhpZXJhcmNoeTp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxvdXRHcmFwaDp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxvdXRTdGF0czp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSwKX2dyYXBoUnVuVGFnOk9iamVjdH0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uLCBjb21wYXRpYmlsaXR5UHJvdmlkZXIpIiwiX3NlbGVjdGVkRmlsZUNoYW5nZWQoc2VsZWN0ZWRGaWxlLCBjb21wYXRpYmlsaXR5UHJvdmlkZXIpIl0sX3NlbGVjdGlvbkNoYW5nZWQoKXt0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX0sX2xvYWQ6ZnVuY3Rpb24oZCl7Y29uc3Qge3J1bjpmLHRhZzpnLHR5cGU6bH09ZDtzd2l0Y2gobCl7Y2FzZSBhLmdyYXBoLlNlbGVjdGlvblR5cGUuT1BfR1JBUEg6Y2FzZSBhLmdyYXBoLlNlbGVjdGlvblR5cGUuQ09OQ0VQVFVBTF9HUkFQSDpyZXR1cm4gdGhpcy5fc2V0T3V0U3RhdHMobnVsbCksZD1uZXcgVVJMU2VhcmNoUGFyYW1zLGQuc2V0KCJydW4iLGYpLGQuc2V0KCJjb25jZXB0dWFsIixTdHJpbmcobD09PWEuZ3JhcGguU2VsZWN0aW9uVHlwZS5DT05DRVBUVUFMX0dSQVBIKSksCmcmJmQuc2V0KCJ0YWciLGcpLGQ9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImdyYXBocyIsIi9ncmFwaCIsZCksdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChkKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpmLHRhZzpnfX0pO2Nhc2UgYS5ncmFwaC5TZWxlY3Rpb25UeXBlLlBST0ZJTEU6eyh7dGFnczpkfT10aGlzLmRhdGFzZXRzLmZpbmQoKHtuYW1lOnF9KT0+cT09PWYpKTtjb25zdCBrPWQuZmluZChxPT5xLnRhZz09PWcpLm9wR3JhcGg/ZzpudWxsO2NvbnNvbGUuYXNzZXJ0KGQuZmluZChxPT5xLnRhZz09PWspLGBSZXF1aXJlZCB0YWcgKCR7a30pIGlzIG1pc3NpbmcuYCk7ZD10aGlzLl9ncmFwaFJ1blRhZyYmdGhpcy5fZ3JhcGhSdW5UYWcucnVuPT09ZiYmdGhpcy5fZ3JhcGhSdW5UYWcudGFnPT09az9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLl9sb2FkKHtydW46Zix0YWc6ayx0eXBlOmEuZ3JhcGguU2VsZWN0aW9uVHlwZS5PUF9HUkFQSH0pOwpjb25zdCBuPW5ldyBVUkxTZWFyY2hQYXJhbXM7bi5zZXQoInRhZyIsZyk7bi5zZXQoInJ1biIsZik7Y29uc3QgcD1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsbik7cmV0dXJuIGQudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEocCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KEVycm9yKGBVbmtub3duIHNlbGVjdGlvbiB0eXBlOiAke2x9YCkpfX0sX3JlYWRBbmRQYXJzZU1ldGFkYXRhOmZ1bmN0aW9uKGQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7YS5ncmFwaC5wYXJzZXIuZmV0Y2hBbmRQYXJzZU1ldGFkYXRhKGQsYS5ncmFwaC51dGlsLmdldFRyYWNrZXIodGhpcykpLnRoZW4oZj0+e3RoaXMuX3NldE91dFN0YXRzKGYpfSl9LF9mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoOmZ1bmN0aW9uKGQsZil7cmV0dXJuIGZwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnNldCgicHJvZ3Jlc3MiLAp7dmFsdWU6MCxtc2c6IiJ9KTtyZXR1cm4gYS5ncmFwaC5sb2FkZXIuZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhLmdyYXBoLnV0aWwuZ2V0VHJhY2tlcih0aGlzKSxkLGYsdGhpcy5jb21wYXRpYmlsaXR5UHJvdmlkZXIsdGhpcy5oaWVyYXJjaHlQYXJhbXMpLnRoZW4oKHtncmFwaDpnLGdyYXBoSGllcmFyY2h5Omx9KT0+e3RoaXMuX3NldE91dEdyYXBoKGcpO3RoaXMuX3NldE91dEdyYXBoSGllcmFyY2h5KGwpfSl9KX0sX3NlbGVjdGVkRmlsZUNoYW5nZWQ6ZnVuY3Rpb24oZCl7aWYoZCl7ZD1kLnRhcmdldDt2YXIgZj1kLmZpbGVzWzBdO2YmJihkLnZhbHVlPSIiLHRoaXMuX2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgobnVsbCxmKSl9fX0pfSkoYy5sb2FkZXJ8fChjLmxvYWRlcj17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ncmFwaC1kYXNoYm9hcmQvdGYtZ3JhcGgtZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWdyYXBoLWRhc2hib2FyZCIscHJvcGVydGllczp7X2RhdGFzZXRzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX2RhdGFzZXRzRmV0Y2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc2VsZWN0ZWREYXRhc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfcmVuZGVySGllcmFyY2h5Ont0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uUmVxdWVzdE1hbmFnZXJ9LF9jYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uQ2FuY2VsbGVyfSxfZGVidWdnZXJEYXRhRW5hYmxlZDpCb29sZWFuLGFsbFN0ZXBzTW9kZUVuYWJsZWQ6Qm9vbGVhbixzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOnt0eXBlOk51bWJlcix2YWx1ZTowfSxoZWFsdGhQaWxsc1RvZ2dsZWRPbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaGVhbHRoUGlsbHNUb2dnbGVkT25DaGFuZ2VkIn0sCnNlbGVjdGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfaXNBdHRhY2hlZDpCb29sZWFuLF9pbml0aWFsaXplZDpCb29sZWFuLF9hcmVIZWFsdGhQaWxsc0xvYWRpbmc6Qm9vbGVhbixfZGVidWdnZXJOdW1lcmljQWxlcnRzOnt0eXBlOkFycmF5LHZhbHVlOltdLG5vdGlmeTohMH0sX25vZGVOYW1lc1RvSGVhbHRoUGlsbHM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfaGVhbHRoUGlsbFN0ZXBJbmRleDpOdW1iZXIsX2hlYWx0aFBpbGxSZXF1ZXN0SWQ6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LF9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkOk51bWJlcixfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJEZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6NTAwLHJlYWRPbmx5OiEwfSxydW5zOkFycmF5LHJ1bjp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJydW4iLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExfSksb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9LApfc2VsZWN0aW9uOnt0eXBlOk9iamVjdH0sX2NvbXBhdGliaWxpdHlQcm92aWRlcjpPYmplY3QsX3RyYWNlSW5wdXRzOkJvb2xlYW59LGxpc3RlbmVyczp7Im5vZGUtdG9nZ2xlLWV4cGFuZCI6Il9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kIn0sb2JzZXJ2ZXJzOlsiX21heWJlRmV0Y2hIZWFsdGhQaWxscyhfZGVidWdnZXJEYXRhRW5hYmxlZCwgYWxsU3RlcHNNb2RlRW5hYmxlZCwgc3BlY2lmaWNIZWFsdGhQaWxsU3RlcCwgX3NlbGVjdGVkTm9kZSkiLCJfbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKF9pc0F0dGFjaGVkKSIsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQoX2RhdGFzZXRzRmV0Y2hlZCwgX2RhdGFzZXRzLCBydW4pIiwiX3VwZGF0ZVNlbGVjdGVkRGF0YXNldE5hbWUoX2RhdGFzZXRzRmV0Y2hlZCwgX2RhdGFzZXRzLCBfc2VsZWN0ZWREYXRhc2V0KSJdLGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwKITEpfSxyZWxvYWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJ1Z2dlckRhdGFFbmFibGVkfHx0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KFFvLmdldFJvdXRlcigpLnBsdWdpbnNMaXN0aW5nKCkpLnRoZW4odGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGE9PnthLmNhbmNlbGxlZHx8YS52YWx1ZVsiZGVidWdnZXIiXSYmdGhpcy5zZXQoIl9kZWJ1Z2dlckRhdGFFbmFibGVkIiwhMCl9KSk7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9LF9maXQ6ZnVuY3Rpb24oKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfSxfcnVuT2JzZXJ2ZXI6VG8uZ2V0U3RyaW5nT2JzZXJ2ZXIoInJ1biIse2RlZmF1bHRWYWx1ZToiIixwb2x5bWVyUHJvcGVydHk6InJ1biIsdXNlTG9jYWxTdG9yYWdlOiExfSksX2ZldGNoRGF0YXNldCgpe3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KFFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvaW5mbyIpKX0sX2ZldGNoSGVhbHRoUGlsbHMoYSwKYyl7YT17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeShhKSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07dm9pZCAwIT09YyYmKGEuc3RlcD1jKTtjPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChjLGEpfSxfZmV0Y2hEZWJ1Z2dlck51bWVyaWNzQWxlcnRzKCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoUW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImRlYnVnZ2VyIiwiL251bWVyaWNzX2FsZXJ0X3JlcG9ydCIpKX0sX2dyYXBoVXJsKGEsYyxkKXtyZXR1cm4gUW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImdyYXBocyIsIi9ncmFwaCIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7cnVuOmEsbGltaXRfYXR0cl9zaXplOmMsbGFyZ2VfYXR0cnNfa2V5OmR9KSl9LF9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdnZXJEYXRhRW5hYmxlZCYmCnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX0sX21heWJlSW5pdGlhbGl6ZURhc2hib2FyZDpmdW5jdGlvbihhKXshdGhpcy5faW5pdGlhbGl6ZWQmJmEmJih0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IHRmLmdyYXBoLm9wLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlciksdGhpcy5faW5pdGlhbGl6ZWQ9ITAsdGhpcy5fZmV0Y2hEYXRhc2V0KCkudGhlbihjPT57dGhpcy5fZGF0YXNldHM9T2JqZWN0LmtleXMoYykuc29ydChnbi5jb21wYXJlVGFnTmFtZXMpLm1hcChkPT57Y29uc3QgZj1jW2RdO3ZhciBnPU9iamVjdC5rZXlzKGYudGFncykuc29ydChnbi5jb21wYXJlVGFnTmFtZXMpLm1hcChsPT5mLnRhZ3NbbF0pLm1hcCgoe3RhZzpsLGNvbmNlcHR1YWxfZ3JhcGg6ayxvcF9ncmFwaDpuLHByb2ZpbGU6cH0pPT4KKHt0YWc6bCxkaXNwbGF5TmFtZTpsLGNvbmNlcHR1YWxHcmFwaDprLG9wR3JhcGg6bixwcm9maWxlOnB9KSk7Zz1mLnJ1bl9ncmFwaD9be3RhZzpudWxsLGRpc3BsYXlOYW1lOiJEZWZhdWx0Iixjb25jZXB0dWFsR3JhcGg6ITEsb3BHcmFwaDohMCxwcm9maWxlOiExfSwuLi5nXTpnO3JldHVybntuYW1lOmQsdGFnczpnfX0pO3RoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMH0pKX0sX2RldGVybWluZVNlbGVjdGVkRGF0YXNldChhLGMsZCl7ZD8oYz1jLmZpbmRJbmRleChmPT5mLm5hbWU9PT1kKSwtMT09PWM/YSYmKGE9dGhpcy4kJCgiI2Vycm9yLWRpYWxvZyIpLGEudGV4dENvbnRlbnQ9YE5vIGRhdGFzZXQgbmFtZWQgIiR7ZH0iIGNvdWxkIGJlIGZvdW5kLmAsYS5vcGVuKCkpOnRoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IixjKSk6dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLDApfSxfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZShhLGMsZCl7YSYmKGMubGVuZ3RoPD1kfHx0aGlzLnNldCgicnVuIiwKY1tkXS5uYW1lKSl9LF9yZXF1ZXN0SGVhbHRoUGlsbHM6ZnVuY3Rpb24oKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciBhPSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDtudWxsIT09dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKTt0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsO3RoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyhhKX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHMoYSl9LApfaW5pdGlhdGVOZXR3b3JrUmVxdWVzdEZvckhlYWx0aFBpbGxzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9PT1hKXt2YXIgYz10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwOnZvaWQgMCksZD10aGlzLl9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKTtQcm9taXNlLmFsbChbYyxkXSkudGhlbihmdW5jdGlvbihmKXt2YXIgZz1mWzBdO2Y9ZlsxXTtpZih0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uJiZhPT09dGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZCl7Zm9yKHZhciBsIGluIGcpe3RoaXMuc2V0KCJfaGVhbHRoUGlsbFN0ZXBJbmRleCIsZ1tsXS5sZW5ndGgtMSk7YnJlYWt9dGhpcy5zZXQoIl9kZWJ1Z2dlck51bWVyaWNBbGVydHMiLGYpO3RoaXMuc2V0KCJfbm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsCmcpO3RoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSk7dGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfX0sX2RhdGFzZXRzU3RhdGU6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBhP2MmJmMubGVuZ3RoPyJQUkVTRU5UIj09PWQ6IkVNUFRZIj09PWQ6Ik5PVF9MT0FERUQiPT09ZH0sX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlbG9hZCgpfSxfaGFuZGxlTm9kZVRvZ2dsZUV4cGFuZDpmdW5jdGlvbigpe3RoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfSxfaGVhbHRoUGlsbHNUb2dnbGVkT25DaGFuZ2VkOmZ1bmN0aW9uKGEpe2E/dGhpcy5yZWxvYWQoKTp0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHt9KX0sX21heWJlRmV0Y2hIZWFsdGhQaWxsczpmdW5jdGlvbigpe3RoaXMuX3Nob3VsZFJlcXVlc3RIZWFsdGhQaWxscygpJiZ0aGlzLl9yZXF1ZXN0SGVhbHRoUGlsbHMoKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92ei1kaXN0cmlidXRpb24tY2hhcnQvdnotZGlzdHJpYnV0aW9uLWNoYXJ0LmpzCnZhciBucDsKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCxmKXt0aGlzLnJ1bjJkYXRhc2V0cz17fTt0aGlzLmNvbG9yU2NhbGU9Zjt0aGlzLmJ1aWxkQ2hhcnQoZCl9Z2V0RGF0YXNldChkKXt2b2lkIDA9PT10aGlzLnJ1bjJkYXRhc2V0c1tkXSYmKHRoaXMucnVuMmRhdGFzZXRzW2RdPW5ldyBQbG90dGFibGUuRGF0YXNldChbXSx7cnVuOmR9KSk7cmV0dXJuIHRoaXMucnVuMmRhdGFzZXRzW2RdfWJ1aWxkQ2hhcnQoZCl7dGhpcy5vdXRlciYmdGhpcy5vdXRlci5kZXN0cm95KCk7ZD0kby5nZXRYQ29tcG9uZW50cyhkKTt0aGlzLnhBY2Nlc3Nvcj1kLmFjY2Vzc29yO3RoaXMueFNjYWxlPWQuc2NhbGU7dGhpcy54QXhpcz1kLmF4aXM7dGhpcy54QXhpcy5tYXJnaW4oMCkudGlja0xhYmVsUGFkZGluZygzKTt0aGlzLnlTY2FsZT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXI7dGhpcy55QXhpcz1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2Q9CiRvLm11bHRpc2NhbGVGb3JtYXR0ZXIoJG8uWV9BWElTX0ZPUk1BVFRFUl9QUkVDSVNJT04pO3RoaXMueUF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoNSkuZm9ybWF0dGVyKGQpO3RoaXMueUF4aXMudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24oKTtkPXRoaXMuYnVpbGRQbG90KHRoaXMueEFjY2Vzc29yLHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTt0aGlzLmdyaWRsaW5lcz1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTt0aGlzLmNlbnRlcj1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JvdXAoW3RoaXMuZ3JpZGxpbmVzLGRdKTt0aGlzLm91dGVyPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW3RoaXMueUF4aXMsdGhpcy5jZW50ZXJdLFtudWxsLHRoaXMueEF4aXNdXSl9YnVpbGRQbG90KGQsZixnKXtsZXQgbD1bMCwyMjgsMTU4NywzMDg1LDVFMyw2OTE1LDg0MTMsOTc3MiwxRTRdLGs9Xy5yYW5nZShsLmxlbmd0aC0KMSkubWFwKHQ9PihsW3QrMV0tbFt0XSkvMjUwMCksbj1sLm1hcCgodCx2KT0+eT0+eVt2XVsxXSkscD1uWzRdLHE9Xy5yYW5nZShuLmxlbmd0aC0xKS5tYXAodD0+e2xldCB2PW5ldyBQbG90dGFibGUuUGxvdHMuQXJlYTt2LngoZCxmKTtsZXQgeT00PHQ/blt0XTpuW3QrMV07di55KDQ8dD9uW3QrMV06blt0XSxnKTt2LnkwKHkpO3YuYXR0cigiZmlsbCIsKHoseCxDKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKEMubWV0YWRhdGEoKS5ydW4pKTt2LmF0dHIoInN0cm9rZSIsKHoseCxDKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKEMubWV0YWRhdGEoKS5ydW4pKTt2LmF0dHIoInN0cm9rZS13ZWlnaHQiLCgpPT4iMC41cHgiKTt2LmF0dHIoInN0cm9rZS1vcGFjaXR5IiwoKT0+a1t0XSk7di5hdHRyKCJmaWxsLW9wYWNpdHkiLCgpPT5rW3RdKTtyZXR1cm4gdn0pLHI9bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO3IueChkLGYpO3IueShwLGcpO3IuYXR0cigic3Ryb2tlIiwodCx2LHkpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoeS5ydW4pKTsKdGhpcy5wbG90cz1xO3JldHVybiBuZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JvdXAocSl9c2V0VmlzaWJsZVNlcmllcyhkKXt0aGlzLnJ1bnM9ZDtsZXQgZj1kLm1hcChnPT50aGlzLmdldERhdGFzZXQoZykpO3RoaXMucGxvdHMuZm9yRWFjaChnPT5nLmRhdGFzZXRzKGYpKX1zZXRTZXJpZXNEYXRhKGQsZil7dGhpcy5nZXREYXRhc2V0KGQpLmRhdGEoZil9cmVuZGVyVG8oZCl7dGhpcy50YXJnZXRTVkc9ZDt0aGlzLm91dGVyLnJlbmRlclRvKGQpfXJlZHJhdygpe3RoaXMub3V0ZXIucmVkcmF3KCl9ZGVzdHJveSgpe3RoaXMub3V0ZXIuZGVzdHJveSgpfX1hLkRpc3RyaWJ1dGlvbkNoYXJ0PWM7UG9seW1lcih7aXM6InZ6LWRpc3RyaWJ1dGlvbi1jaGFydCIscHJvcGVydGllczp7Y29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3IpLnJhbmdlKGQzLnNjaGVtZUNhdGVnb3J5MTApfX0seFR5cGU6e3R5cGU6U3RyaW5nLAp2YWx1ZToic3RlcCJ9LF9hdHRhY2hlZDpCb29sZWFuLF9jaGFydDpPYmplY3QsX3Zpc2libGVTZXJpZXNDYWNoZTp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3Nlcmllc0RhdGFDYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ6e3R5cGU6TnVtYmVyLHZhbHVlOm51bGx9fSxvYnNlcnZlcnM6WyJfbWFrZUNoYXJ0KHhUeXBlLCBjb2xvclNjYWxlLCBfYXR0YWNoZWQpIiwiX3JlbG9hZEZyb21DYWNoZShfY2hhcnQpIl0sc2V0VmlzaWJsZVNlcmllczpmdW5jdGlvbihkKXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9ZDt0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXMoZCksdGhpcy5yZWRyYXcoKSl9LHNldFNlcmllc0RhdGE6ZnVuY3Rpb24oZCxmKXt0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbZF09Zjt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YShkLApmKX0scmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX0sX21ha2VDaGFydDpmdW5jdGlvbihkLGYsZyl7bnVsbD09PXRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCYmdGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpO3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD10aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGw7aWYoZyl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKTt2YXIgbD1uZXcgYyhkLGYpLGs9ZDMuc2VsZWN0KHRoaXMuJC5jaGFydGRpdik7bC5yZW5kZXJUbyhrKTt0aGlzLl9jaGFydD1sfX0sMzUwKX0sX3JlbG9hZEZyb21DYWNoZTpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLAp0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaChmdW5jdGlvbihkKXt0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKGQsdGhpcy5fc2VyaWVzRGF0YUNhY2hlW2RdfHxbXSl9LmJpbmQodGhpcykpKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZD0hMH0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZD0hMX19KX0pKG5wfHwobnA9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkL3RmLWRpc3RyaWJ1dGlvbi1sb2FkZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLHRhZ01ldGFkYXRhOk9iamVjdCx4VHlwZTpTdHJpbmcsZGF0YVRvTG9hZDp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2NvbXB1dGVEYXRhVG9Mb2FkKHJ1biwgdGFnKSJ9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTooKT0+KHtydW46YX0pPT5hfSxnZXREYXRhTG9hZFVybDp7dHlwZTpGdW5jdGlvbix2YWx1ZTooKT0+KHt0YWc6YSxydW46Y30pPT5Rby5hZGRQYXJhbXMoUW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImRpc3RyaWJ1dGlvbnMiLCIvZGlzdHJpYnV0aW9ucyIpLHt0YWc6YSxydW46Y30pfSxsb2FkRGF0YUNhbGxiYWNrOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKGEsYyxkKT0+e2E9ZC5tYXAoZj0+e2NvbnN0IFtnLGwsa109ZjtrLndhbGxfdGltZT1uZXcgRGF0ZSgxRTMqZyk7ay5zdGVwPWw7cmV0dXJuIGt9KTsKYz10aGlzLmdldERhdGFMb2FkTmFtZShjKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShjLGEpO3RoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtjXSl9fX0sX2NvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4oe3NjYWxlOlhvLnJ1bnNDb2xvclNjYWxlfSkscmVhZE9ubHk6ITB9LF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IocnVuKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0scmVxdWVzdE1hbmFnZXI6T2JqZWN0LF9jYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uQ2FuY2VsbGVyfX0sb2JzZXJ2ZXJzOlsicmVsb2FkKHJ1biwgdGFnKSJdLGJlaGF2aW9yczpbVW8uRGF0YUxvYWRlckJlaGF2aW9yXSxfY29tcHV0ZURhdGFUb0xvYWQoYSxjKXtyZXR1cm5be3J1bjphLHRhZzpjfV19LF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGUuc2NhbGUoYSl9LApyZWRyYXcoKXt0aGlzLiQuY2hhcnQucmVkcmF3KCl9LF90b2dnbGVFeHBhbmRlZCgpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkL3RmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZCIscHJvcGVydGllczp7X3hUeXBlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RlcCJ9LF9zZWxlY3RlZFJ1bnM6QXJyYXksX3J1blRvVGFnOk9iamVjdCxfcnVuVG9UYWdJbmZvOk9iamVjdCxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjpTdHJpbmcsX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnLCBfc2VsZWN0ZWRSdW5zLCBfdGFnRmlsdGVyLCBfY2F0ZWdvcmllc0RvbVJlYWR5KSJ9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5SZXF1ZXN0TWFuYWdlcn19LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGlzdHJpYnV0aW9ucyIsCiIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYz0+e2lmKCFfLmlzRXF1YWwoYyx0aGlzLl9ydW5Ub1RhZ0luZm8pKXt2YXIgZD1fLm1hcFZhbHVlcyhjLGc9Pk9iamVjdC5rZXlzKGcpKSxmPVFvLmdldFRhZ3MoZCk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1mLmxlbmd0aCk7dGhpcy5zZXQoIl9ydW5Ub1RhZyIsZCk7dGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLGMpO3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9fSl9LF9yZWxvYWREaXN0cmlidXRpb25zKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWRpc3RyaWJ1dGlvbi1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe3JldHVybiBSby5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGEsYyxkKX0sX3RhZ01ldGFkYXRhKGEsCmMsZCl7cmV0dXJuIGFbY11bZF19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMvdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMuaHRtbC5qcwpQb2x5bWVyKHtpczoidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiLHByb3BlcnRpZXM6e21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmZzZXQifSx0aW1lUHJvcGVydHk6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGVwIn0sYmluczp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbnMifSx4Ont0eXBlOlN0cmluZyx2YWx1ZToieCJ9LGR4Ont0eXBlOlN0cmluZyx2YWx1ZToiZHgifSx5Ont0eXBlOlN0cmluZyx2YWx1ZToieSJ9LGNvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVDYXRlZ29yeTEwKX19LG1vZGVUcmFuc2l0aW9uRHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjUwMH0sX2F0dGFjaGVkOkJvb2xlYW4sX25hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9kYXRhOnt0eXBlOkFycmF5LHZhbHVlOm51bGx9fSxvYnNlcnZlcnM6WyJyZWRyYXcodGltZVByb3BlcnR5LCBfYXR0YWNoZWQpIiwiX21vZGVSZWRyYXcobW9kZSkiXSwKcmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuc3ZnLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZD0hMH0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZD0hMX0sc2V0U2VyaWVzRGF0YTpmdW5jdGlvbihhLGMpe3RoaXMuX25hbWU9YTt0aGlzLl9kYXRhPWM7dGhpcy5yZWRyYXcoKX0scmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fZHJhdygwKX0sX21vZGVSZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9kcmF3KHRoaXMubW9kZVRyYW5zaXRpb25EdXJhdGlvbil9LF9kcmF3OmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2F0dGFjaGVkJiZ0aGlzLl9kYXRhKXtpZih2b2lkIDA9PT1hKXRocm93IEVycm9yKCJ2ei1oaXN0b2dyYW0tdGltZXNlcmllcyBfZHJhdyBuZWVkcyBkdXJhdGlvbiIpO2lmKDA+PXRoaXMuX2RhdGEubGVuZ3RoKXRocm93IEVycm9yKCJOb3QgZW5vdWdoIHN0ZXBzIGluIHRoZSBkYXRhIik7aWYoIXRoaXMuX2RhdGFbMF0uaGFzT3duUHJvcGVydHkodGhpcy5iaW5zKSl0aHJvdyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIisKdGhpcy5iaW5zKyInIGluIGRhdGEiKTtpZigwPj10aGlzLl9kYXRhWzBdW3RoaXMuYmluc10ubGVuZ3RoKXRocm93IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgRXJyb3IoIk5vIHggcHJvcGVydHkgJyIrdGhpcy54KyInIG9uIGJpbnMgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy5keCkpdGhyb3cgRXJyb3IoIk5vIGR4IHByb3BlcnR5ICciK3RoaXMuZHgrIicgb24gYmlucyBkYXRhIik7aWYoIXRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLnkpKXRocm93IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgYz10aGlzLnRpbWVQcm9wZXJ0eSxkPXRoaXMueCxmPXRoaXMuYmlucyxnPXRoaXMuZHgsCmw9dGhpcy55LGs9dGhpcy5fZGF0YSxuPXRoaXMubW9kZSxwPWQzLmhjbCh0aGlzLmNvbG9yU2NhbGUodGhpcy5fbmFtZSkpLHE9ZDMuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxyPWZ1bmN0aW9uKHphKXtyZXR1cm4gemFbZF19LHQ9ZnVuY3Rpb24oemEpe3JldHVybiB6YVtsXX0sdj1mdW5jdGlvbih6YSl7cmV0dXJuIHphW2RdK3phW2ddfSx5PWZ1bmN0aW9uKHphKXtyZXR1cm4gemFbY119OyJyZWxhdGl2ZSI9PT1jJiYoeT1mdW5jdGlvbih6YSl7cmV0dXJuIHphLndhbGxfdGltZS1rWzBdLndhbGxfdGltZX0pO3ZhciB6PXRoaXMuJC5zdmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseD16LndpZHRoLEM9ei5oZWlnaHQsRj01O2lmKCJvZmZzZXQiPT09bil7dmFyIEQ9Qy8yLjU7Rj1EKzV9ZWxzZSBEPUMtRi0yMDt2YXIgQj14LTI0LTYwLEk9Qy1GLTIwO2QzLm1pbihrLHIpO2QzLm1heChrLHYpO3ZhciBPPWQzLmZvcm1hdCgiLjNuIik7ej1kMy5mb3JtYXQoIi4wZiIpOyJ3YWxsX3RpbWUiPT09CmM/ej1kMy50aW1lRm9ybWF0KCIlbS8lZCAlWCIpOiJyZWxhdGl2ZSI9PT1jJiYoej1mdW5jdGlvbih6YSl7cmV0dXJuIGQzLmZvcm1hdCgiLjFyIikoemEvMzZFNSkrImgifSk7dmFyIFA9ay5tYXAoZnVuY3Rpb24oemEpe3JldHVybltkMy5taW4oemFbZl0sciksZDMubWF4KHphW2ZdLHYpXX0pLEg9ay5tYXAoZnVuY3Rpb24oemEpe3JldHVybiBkMy5leHRlbnQoemFbZl0sdCl9KSxLPWQzLmV4dGVudChrLHkpLE09KCJ3YWxsX3RpbWUiPT09Yz9kMy5zY2FsZVRpbWUoKTpkMy5zY2FsZUxpbmVhcigpKS5kb21haW4oSykucmFuZ2UoWzAsIm9mZnNldCI9PT1uP0k6MF0pLEw9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsZDMubWF4KGssZnVuY3Rpb24oemEsVWEpe3JldHVybiBIW1VhXVsxXX0pXSkucmFuZ2UoW0QsMF0pLFI9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oTC5kb21haW4oKSkucmFuZ2UoWzUwMCwwXSksVT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbZDMubWluKGssZnVuY3Rpb24oemEsClVhKXtyZXR1cm4gUFtVYV1bMF19KSxkMy5tYXgoayxmdW5jdGlvbih6YSxVYSl7cmV0dXJuIFBbVWFdWzFdfSldKS5uaWNlKCkucmFuZ2UoWzAsQl0pLFk9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oVS5kb21haW4oKSkucmFuZ2UoWzAsNTAwXSksYmE9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oZDMuZXh0ZW50KGsseSkpLnJhbmdlKFtwLmRhcmtlcigpLHAuYnJpZ2h0ZXIoKV0pLmludGVycG9sYXRlKGQzLmludGVycG9sYXRlSGNsKTtwPWQzLmF4aXNCb3R0b20oVSkudGlja3MoKTt2YXIgbWE9ZDMuYXhpc1JpZ2h0KE0pLnRpY2tzKCkudGlja0Zvcm1hdCh6KSxhYT1kMy5heGlzUmlnaHQoTCkudGlja3MoKS50aWNrU2l6ZShCKzUpLnRpY2tGb3JtYXQoTyksY2E9ZnVuY3Rpb24oemEpe3JldHVybiB6YVtkXSt6YVtnXS8yfSxmYT1kMy5saW5lKCkueChmdW5jdGlvbih6YSl7cmV0dXJuIFkoY2EoemEpKX0pLnkoZnVuY3Rpb24oemEpe3JldHVybiBSKHphW2xdKX0pLGRhPWZ1bmN0aW9uKHphKXtyZXR1cm4iTSIrClkoY2EoemFbMF0pKSsiLCIrUigwKSsiTCIrZmEoemEpLnNsaWNlKDEpKyJMIitZKGNhKHphW3phLmxlbmd0aC0xXSkpKyIsIitSKDApfSxsYT10aGlzLiQuc3ZnO3o9ZDMuc2VsZWN0KGxhKTthPXoudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEpO3o9ei5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gMDxCJiYxNTA+PUJ9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIDE1MDxCJiYzMDA+PUJ9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gMzAwPEJ9KTthPWEuc2VsZWN0KCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDI0LCIrRisiKSIpO3ZhciBaPWQzLmJpc2VjdG9yKHYpLmxlZnQ7Sz16LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXt4YS5zdHlsZSgib3BhY2l0eSIsMSk7eWEuc3R5bGUoIm9wYWNpdHkiLDEpO0JhLnN0eWxlKCJvcGFjaXR5IiwxKTtHYS5zdHlsZSgib3BhY2l0eSIsCjEpO3Euc3R5bGUoIm9wYWNpdHkiLDEpfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbigpe3hhLnN0eWxlKCJvcGFjaXR5IiwwKTt5YS5zdHlsZSgib3BhY2l0eSIsMCk7QmEuc3R5bGUoIm9wYWNpdHkiLDApO0dhLnN0eWxlKCJvcGFjaXR5IiwwKTt4YS5jbGFzc2VkKCJob3Zlci1jbG9zZXN0IiwhMSk7RmEuY2xhc3NlZCgib3V0bGluZS1ob3ZlciIsITEpO3Euc3R5bGUoIm9wYWNpdHkiLDApfSkub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24oKXtmdW5jdGlvbiB6YShHYil7cmV0dXJuIE1hdGgubWluKEdiW2ZdLmxlbmd0aC0xLFooR2JbZl0sWmEpKX12YXIgVWE9ZDMubW91c2UodGhpcyksWmE9VS5pbnZlcnQoVWFbMF0pO00uaW52ZXJ0KFVhWzFdKTt2YXIgemIsSWI9SW5maW5pdHksdWI7eGEuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihHYil7dmFyIFJiPXphKEdiKTt1Yj1HYjt2YXIgRWM9VShHYltmXVtSYl1bZF0rR2JbZl1bUmJdW2ddLzIpO1JiPUwoR2JbZl1bUmJdW2xdKTt2YXIgeGM9CiJvZmZzZXQiPT09bj9NKHkoR2IpKS0oRC1SYik6UmI7eGM9TWF0aC5hYnMoVWFbMV0teGMpO3hjPEliJiYoSWI9eGMsemI9R2IpO3JldHVybiJ0cmFuc2xhdGUoIitFYysiLCIrUmIrIikifSk7eGEuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihHYil7dmFyIFJiPXphKEdiKTtyZXR1cm4gR2JbZl1bUmJdW2xdfSk7eGEuY2xhc3NlZCgiaG92ZXItY2xvc2VzdCIsZnVuY3Rpb24oR2Ipe3JldHVybiBHYj09PXpifSk7RmEuY2xhc3NlZCgib3V0bGluZS1ob3ZlciIsZnVuY3Rpb24oR2Ipe3JldHVybiBHYj09PXpifSk7dmFyIEZiPXphKHViKTt5YS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK1UodWJbZl1bRmJdW2RdK3ViW2ZdW0ZiXVtnXS8yKSsiLCAiK0krIikifSkuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbigpe3JldHVybiBPKHViW2ZdW0ZiXVtkXSt1YltmXVtGYl1bZ10vMil9KTt2YXIgQWI9bWEudGlja0Zvcm1hdCgpO0JhLmF0dHIoInRyYW5zZm9ybSIsCmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK0IrIiwgIisoIm9mZnNldCI9PT1uP00oeSh6YikpOjApKyIpIn0pLnN0eWxlKCJkaXNwbGF5Iiwib2Zmc2V0Ij09PW4/IiI6Im5vbmUiKS5zZWxlY3QoInRleHQiKS50ZXh0KGZ1bmN0aW9uKCl7cmV0dXJuIEFiKHkoemIpKX0pO3ZhciBQYj1hYS50aWNrRm9ybWF0KCk7R2EuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIitCKyIsICIrKCJvZmZzZXQiPT09bj8wOkwoemJbZl1bRmJdW2xdKSkrIikifSkuc3R5bGUoImRpc3BsYXkiLCJvZmZzZXQiPT09bj8ibm9uZSI6IiIpLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oKXtyZXR1cm4gUGIoemJbZl1bRmJdW2xdKX0pO3ZhciBiYz1kMy5tb3VzZShsYSk7cS5zdHlsZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGJjWzBdKzE1KSsicHgsIisoYmNbMV0tMTUpKyJweCkiKS5zZWxlY3QoInNwYW4iKS50ZXh0KCJvZmZzZXQiPT09bj9QYih6YltmXVtGYl1bbF0pOgooInN0ZXAiPT09Yz8ic3RlcCAiOiIiKStBYih5KHpiKSkpfSk7Sy5zZWxlY3QoIi5iYWNrZ3JvdW5kIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKC0yNCwiKy1GKyIpIikuYXR0cigid2lkdGgiLHgpLmF0dHIoImhlaWdodCIsQyk7Qz1LLnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEoayk7Qy5leGl0KCkucmVtb3ZlKCk7eD1DLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKTtDPXgubWVyZ2UoQykuc29ydChmdW5jdGlvbih6YSxVYSl7cmV0dXJuIHkoemEpLXkoVWEpfSk7Rj1hLnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oemEpe3JldHVybiJ0cmFuc2xhdGUoMCwgIisoIm9mZnNldCI9PT1uP00oeSh6YSkpLUQ6MCkrIikifSk7eC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsImJhc2VsaW5lIik7Ri5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oKXtyZXR1cm4ib2Zmc2V0Ij09PQpuPy4xOjB9KS5hdHRyKCJ5MSIsRCkuYXR0cigieTIiLEQpLmF0dHIoIngyIixCKTt4LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwib3V0bGluZSIpO3ZhciBGYT1DLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiZCIsZnVuY3Rpb24oemEpe3JldHVybiBkYSh6YVtmXSl9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKTtGLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK0IvNTAwKyIsICIrRC81MDArIikiKS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbih6YSl7cmV0dXJuIm9mZnNldCI9PT1uPyJ3aGl0ZSI6YmEoeSh6YSkpfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24oKXtyZXR1cm4ib2Zmc2V0Ij09PW4/MTowfSkuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKHphKXtyZXR1cm4gYmEoeSh6YSkpfSk7eD14LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKS5zdHlsZSgiZmlsbCIsCmZ1bmN0aW9uKHphKXtyZXR1cm4gYmEoeSh6YSkpfSk7dmFyIHhhPUMuc2VsZWN0KCIuaG92ZXIiKTt4LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMik7eC5hcHBlbmQoInRleHQiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJkeCIsNCk7eD16LnNlbGVjdCgiLngtYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbIngiXSk7Qz14LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO3ZhciB5YT14Lm1lcmdlKEMpO0MuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTIwKS5hdHRyKCJ5Iiw2KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpO0MuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpO0MuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHkiLDE4KTt4PXouc2VsZWN0KCIueS1heGlzLWhvdmVyIikuc2VsZWN0QWxsKCIubGFiZWwiKS5kYXRhKFsieSJdKTsKQz14LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO3ZhciBCYT14Lm1lcmdlKEMpO0MuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsOCkuYXR0cigieSIsLTYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCk7Qy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCk7Qy5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3o9ei5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pO3g9ei5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTt2YXIgR2E9ei5tZXJnZSh4KTt4LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpO3guYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiw2KS5hdHRyKCJ5MSIsCjApLmF0dHIoInkyIiwwKTt4LmFwcGVuZCgidGV4dCIpLmF0dHIoImR4Iiw4KS5hdHRyKCJkeSIsNCk7YS5zZWxlY3QoIi55LmF4aXMuc2xpY2UiKS5zdHlsZSgib3BhY2l0eSIsIm9mZnNldCI9PT1uPzA6MSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrKCJvZmZzZXQiPT09bj8tRDowKSsiKSIpLmNhbGwoYWEpO2Euc2VsZWN0KCIueC5heGlzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrSSsiKSIpLmNhbGwocCk7YS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsIm9mZnNldCI9PT1uPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrQisiLCAiKygib2Zmc2V0Ij09PW4/MDpJKSsiKSIpLmNhbGwobWEpO2Euc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKTthLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIil9fX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWhpc3RvZ3JhbS1kYXNoYm9hcmQvaGlzdG9ncmFtQ29yZS5qcwp2YXIgb3A7CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGYpe2NvbnN0IFtnLGwsa109ZjtyZXR1cm57d2FsbF90aW1lOmcsc3RlcDpsLG1pbjpkMy5taW4oay5tYXAoKFtuXSk9Pm4pKSxtYXg6ZDMubWF4KGsubWFwKChbLG5dKT0+bikpLGJ1Y2tldHM6ay5tYXAoKFtuLHAscV0pPT4oe2xlZnQ6bixyaWdodDpwLGNvdW50OnF9KSl9fWZ1bmN0aW9uIGQoZixnLGwsaz0zMCl7bD09PWcmJihsPTEuMSpnKzEsZz1nLzEuMS0xKTtjb25zdCBuPShsLWcpL2s7bGV0IHA9MDtyZXR1cm4gZDMucmFuZ2UoZyxsLG4pLm1hcChxPT57Y29uc3Qgcj1xK247bGV0IHQ9MDtmb3IoO3A8Zi5idWNrZXRzLmxlbmd0aDspe2NvbnN0IHk9TWF0aC5taW4obCxmLmJ1Y2tldHNbcF0ucmlnaHQpO3ZhciB2PU1hdGgubWF4KGcsZi5idWNrZXRzW3BdLmxlZnQpO2NvbnN0IHo9TWF0aC5taW4oeSxyKS1NYXRoLm1heCh2LHEpO3Y9ei8oeS12KSpmLmJ1Y2tldHNbcF0uY291bnQ7dCs9MDx6P3Y6MDtpZih5PnIpYnJlYWs7cCsrfXJldHVybnt4OnEsCmR4Om4seTp0fX0pfWEuYmFja2VuZFRvSW50ZXJtZWRpYXRlPWM7YS5pbnRlcm1lZGlhdGVUb0QzPWQ7YS5iYWNrZW5kVG9Wej1mdW5jdGlvbihmKXtmPWYubWFwKGMpO2NvbnN0IGc9ZDMubWluKGYsaz0+ay5taW4pLGw9ZDMubWF4KGYsaz0+ay5tYXgpO3JldHVybiBmLm1hcChrPT4oe3dhbGxfdGltZTprLndhbGxfdGltZSxzdGVwOmsuc3RlcCxiaW5zOmQoayxnLGwpfSkpfX0pKG9wfHwob3A9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1oaXN0b2dyYW0tZGFzaGJvYXJkL3RmLWhpc3RvZ3JhbS1sb2FkZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaGlzdG9ncmFtLWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlRGF0YVRvTG9hZChydW4sIHRhZykifSxnZXREYXRhTG9hZE5hbWU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7cnVuOmF9KT0+YX0sZ2V0RGF0YUxvYWRVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7dGFnOmEscnVuOmN9KT0+UW8uYWRkUGFyYW1zKFFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKSx7dGFnOmEscnVuOmN9KX0sbG9hZERhdGFDYWxsYmFjazp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihhLGMsZCk9PnthPW9wLmJhY2tlbmRUb1Z6KGQpO2M9dGhpcy5nZXREYXRhTG9hZE5hbWUoYyk7dGhpcy4kLmNoYXJ0LnNldFNlcmllc0RhdGEoYyxhKX19fSx0YWdNZXRhZGF0YTpPYmplY3QsdGltZVByb3BlcnR5OlN0cmluZywKaGlzdG9ncmFtTW9kZTpTdHJpbmcsX2NvbG9yU2NhbGVGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PlhvLnJ1bnNDb2xvclNjYWxlfSxfcnVuQ29sb3I6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKHJ1bikifSxfZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJyZWxvYWQocnVuLCB0YWcsIHJlcXVlc3RNYW5hZ2VyKSJdLGJlaGF2aW9yczpbVW8uRGF0YUxvYWRlckJlaGF2aW9yXSxfY29tcHV0ZURhdGFUb0xvYWQoYSxjKXtyZXR1cm5be3J1bjphLHRhZzpjfV19LF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbihhKX0scmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfSxfdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpO3RoaXMucmVkcmF3KCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaGlzdG9ncmFtLWRhc2hib2FyZC90Zi1oaXN0b2dyYW0tZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhpc3RvZ3JhbS1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19oaXN0b2dyYW1Nb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToib2Zmc2V0In0sX3RpbWVQcm9wZXJ0eTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0ZXAifSxfc2VsZWN0ZWRSdW5zOkFycmF5LF9ydW5Ub1RhZzpPYmplY3QsX3J1blRvVGFnSW5mbzpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF90YWdGaWx0ZXI6U3RyaW5nLF9yZXN0YW1wOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9jYXRlZ29yaWVzRG9tUmVhZHk6Qm9vbGVhbixfY2F0ZWdvcmllczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX21ha2VDYXRlZ29yaWVzKF9ydW5Ub1RhZywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uUmVxdWVzdE1hbmFnZXJ9fSxsaXN0ZW5lcnM6eyJjb250ZW50LXZpc2liaWxpdHktY2hhbmdlZCI6Il9yZWRyYXdDYXRlZ29yeVBhbmUifSwKX3JlZHJhd0NhdGVnb3J5UGFuZShhLGMpe2MmJmEudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKGQ9PmQucmVkcmF3KCkpfSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRIaXN0b2dyYW1zKCl9KX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImhpc3RvZ3JhbXMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYz0+e2lmKCFfLmlzRXF1YWwoYyx0aGlzLl9ydW5Ub1RhZ0luZm8pKXt2YXIgZD1fLm1hcFZhbHVlcyhjLGc9Pk9iamVjdC5rZXlzKGcpKSxmPVFvLmdldFRhZ3MoZCk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1mLmxlbmd0aCk7dGhpcy5zZXQoIl9ydW5Ub1RhZyIsZCk7dGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLGMpO3RoaXMuYXN5bmMoKCk9Pgp7dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfX0pfSxfcmVsb2FkSGlzdG9ncmFtcygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1oaXN0b2dyYW0tbG9hZGVyIikuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfc2hvdWxkT3BlbihhKXtyZXR1cm4gMj49YX0sX21ha2VDYXRlZ29yaWVzKGEsYyxkKXtyZXR1cm4gUm8uY2F0ZWdvcml6ZVJ1blRhZ0NvbWJpbmF0aW9ucyhhLGMsZCl9LF90YWdNZXRhZGF0YShhLGMsZCl7cmV0dXJuIGFbY11bZF19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtdGV4dC1kYXNoYm9hcmQvdGYtdGV4dC1sb2FkZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGV4dC1sb2FkZXIiLHByb3BlcnRpZXM6e3J1bjpTdHJpbmcsdGFnOlN0cmluZyxfcnVuQ29sb3I6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKHJ1bikifSxfdGV4dHM6e3R5cGU6QXJyYXksdmFsdWU6W119LHJlcXVlc3RNYW5hZ2VyOk9iamVjdCxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFFvLkNhbmNlbGxlcn19LF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIFhvLnJ1bnNDb2xvclNjYWxlKGEpfSxhdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwO3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe2lmKHRoaXMuX2F0dGFjaGVkKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7dmFyIGE9UW8uYWRkUGFyYW1zKFFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RleHQiKSx7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bn0pLGM9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGQ9PntkLmNhbmNlbGxlZHx8CihkPWQudmFsdWUubWFwKGY9Pih7d2FsbF90aW1lOm5ldyBEYXRlKDFFMypmLndhbGxfdGltZSksc3RlcDpmLnN0ZXAsdGV4dDpmLnRleHR9KSksdGhpcy5zZXQoIl90ZXh0cyIsZC5zbGljZSgpLnJldmVyc2UoKSkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYyl9fSxfZm9ybWF0U3RlcChhKXtyZXR1cm4gZDMuZm9ybWF0KCIsIikoYSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtdGV4dC1kYXNoYm9hcmQvdGYtdGV4dC1kYXNoYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGV4dC1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19zZWxlY3RlZFJ1bnM6QXJyYXksX3J1blRvVGFnOk9iamVjdCxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjpTdHJpbmcsX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnLCBfc2VsZWN0ZWRSdW5zLCBfdGFnRmlsdGVyLCBfY2F0ZWdvcmllc0RvbVJlYWR5KSJ9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5SZXF1ZXN0TWFuYWdlcn19LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZFRleHRzKCl9KX0sX3Nob3VsZE9wZW4oYSl7cmV0dXJuIDI+PWF9LF9mZXRjaFRhZ3MoKXtjb25zdCBhPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9Pgp7aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnKSl7dmFyIGQ9UW8uZ2V0VGFncyhjKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnIixjKTt0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfX0pfSxfcmVsb2FkVGV4dHMoKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9tYWtlQ2F0ZWdvcmllcyhhLGMsZCl7cmV0dXJuIFJvLmNhdGVnb3JpemVSdW5UYWdDb21iaW5hdGlvbnMoYSxjLGQpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLXByLWN1cnZlLWRhc2hib2FyZC90Zi1wci1jdXJ2ZS1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXByLWN1cnZlLWNhcmQiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXksdGFnOlN0cmluZyx0YWdNZXRhZGF0YTpPYmplY3QscnVuVG9TdGVwQ2FwOk9iamVjdCxyZXF1ZXN0TWFuYWdlcjpPYmplY3QsYWN0aXZlOkJvb2xlYW4sX2V4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfcnVuVG9QckN1cnZlRW50cnk6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4oe30pfSxfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeTp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5zV2l0aFN0ZXBBdmFpbGFibGU6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlUnVuc1dpdGhTdGVwQXZhaWxhYmxlKHJ1bnMsIF9ydW5Ub1ByQ3VydmVFbnRyeSkifSxfc2V0T2ZSZWxldmFudFJ1bnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNldE9mUmVsZXZhbnRSdW5zKF9ydW5zV2l0aFN0ZXBBdmFpbGFibGUpIn0sX3J1blRvRGF0YU92ZXJUaW1lOk9iamVjdCwKX2NvbG9yU2NhbGVGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7c2NhbGU6WG8ucnVuc0NvbG9yU2NhbGV9KX0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5DYW5jZWxsZXJ9LF9hdHRhY2hlZDpCb29sZWFuLF94Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCx2YWx1ZTooKT0+KCk9Pntjb25zdCBhPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6YSxheGlzOm5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGEsImJvdHRvbSIpLGFjY2Vzc29yOmM9PmMucmVjYWxsfX19LF95VmFsdWVBY2Nlc3Nvcjp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsdmFsdWU6KCk9PmE9PmEucHJlY2lzaW9ufSxfdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6KCk9Pntjb25zdCBhPSRvLm11bHRpc2NhbGVGb3JtYXR0ZXIoJG8uWV9UT09MVElQX0ZPUk1BVFRFUl9QUkVDSVNJT04pLApjPWQ9PmlzTmFOKGQpPyJOYU4iOmEoZCk7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpkPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpkPT5jKGQuZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6ZD0+ZC5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6ZD0+ZC5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOmQ9PmQuZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOmQ9PmQuZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19fSxfc2VyaWVzRGF0YUZpZWxkczp7dHlwZTpBcnJheSx2YWx1ZToidGhyZXNob2xkcyBwcmVjaXNpb24gcmVjYWxsIHRydWVfcG9zaXRpdmVzIGZhbHNlX3Bvc2l0aXZlcyB0cnVlX25lZ2F0aXZlcyBmYWxzZV9uZWdhdGl2ZXMiLnNwbGl0KCIgIiksCnJlYWRPbmx5OiEwfSxfZGVmYXVsdFhSYW5nZTp7dHlwZTpBcnJheSx2YWx1ZTpbLS4wNSwxLjA1XSxyZWFkT25seTohMH0sX2RlZmF1bHRZUmFuZ2U6e3R5cGU6QXJyYXksdmFsdWU6Wy0uMDUsMS4wNV0scmVhZE9ubHk6ITB9LF9kYXRhVXJsOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9Pntjb25zdCBjPXRoaXMudGFnO3JldHVybiBRby5hZGRQYXJhbXMoUW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi9wcl9jdXJ2ZXMiKSx7dGFnOmMscnVuOmF9KX19fSxfc21vb3RoaW5nRW5hYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsicmVsb2FkKHJ1bnMsIHRhZykiLCJfc2V0Q2hhcnREYXRhKF9ydW5Ub1ByQ3VydmVFbnRyeSwgX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksIF9zZXRPZlJlbGV2YW50UnVucykiLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkoX3J1blRvRGF0YU92ZXJUaW1lLCBydW5Ub1N0ZXBDYXApIl0sCl9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKGEsYyxkKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsZCkpfX0sX2NvbXB1dGVSdW5Db2xvcihhKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uLnNjYWxlKGEpfSxhdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwO3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2F0dGFjaGVkJiYoMD09PXRoaXMucnVucy5sZW5ndGg/dGhpcy5zZXQoIl9ydW5Ub0RhdGFPdmVyVGltZSIse30pOnRoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWxvYWQoKSl9LF9zZXRDaGFydERhdGEoYSxjLGQpe18uZm9yT3duKGEsKGYsZyk9Pntjb25zdCBsPWNbZ107bCYmYVtnXS5zdGVwPT09bC5zdGVwfHwoZFtnXT90aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKGcsZik6dGhpcy5fY2xlYXJTZXJpZXNEYXRhKGcpKX0pfSwKX3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4oYSxjKXtjb25zdCBkPV8ucmVkdWNlKHRoaXMuX3Nlcmllc0RhdGFGaWVsZHMsKGcsbCk9PntnW2xdPWNbbF0uc2xpY2UoKS5yZXZlcnNlKCk7cmV0dXJuIGd9LHt9KSxmPUFycmF5KGRbdGhpcy5fc2VyaWVzRGF0YUZpZWxkc1swXV0ubGVuZ3RoKTtmb3IobGV0IGc9MDtnPGYubGVuZ3RoO2crKylmW2ddPV8ubWFwVmFsdWVzKGQsbD0+bFtnXSk7dGhpcy4kJCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpLnNldFNlcmllc0RhdGEoYSxmKX0sX2NsZWFyU2VyaWVzRGF0YShhKXt0aGlzLiQkKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIikuc2V0U2VyaWVzRGF0YShhLFtdKX0sX3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KGEsYyl7Y29uc3QgZD17fTtfLmZvck93bihhLChmLGcpPT57ZiYmZi5sZW5ndGgmJihkW2ddPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKGNbZ10sZikpfSk7dGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5IiwKdGhpcy5fcnVuVG9QckN1cnZlRW50cnkpO3RoaXMuc2V0KCJfcnVuVG9QckN1cnZlRW50cnkiLGQpfSxfY29tcHV0ZUVudHJ5Q2xvc2VzdE9yRXF1YWxUb1N0ZXBDYXAoYSxjKXthPU1hdGgubWluKF8uc29ydGVkSW5kZXgoYy5tYXAoZD0+ZC5zdGVwKSxhKSxjLmxlbmd0aC0xKTtyZXR1cm4gY1thXX0sX2NvbXB1dGVSdW5zV2l0aFN0ZXBBdmFpbGFibGUoYSxjKXtyZXR1cm4gXy5maWx0ZXIoYSxkPT5jW2RdKS5zb3J0KCl9LF9jb21wdXRlU2V0T2ZSZWxldmFudFJ1bnMoYSl7Y29uc3QgYz17fTtfLmZvckVhY2goYSxkPT57Y1tkXT0hMH0pO3JldHVybiBjfSxfY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKGEsYyl7cmV0dXJuKGE9YVtjXSk/YS5zdGVwOm51bGx9LF9jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKGEsYyl7cmV0dXJuKGE9YVtjXSk/KG5ldyBEYXRlKDFFMyphLndhbGxfdGltZSkpLnRvU3RyaW5nKCk6bnVsbH0sX3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsCiF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3Jlc2V0RG9tYWluKCl7dGhpcy4kJCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpLnJlc2V0RG9tYWluKCl9LHJlZHJhdygpe3RoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWRyYXcoKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1wci1jdXJ2ZS1kYXNoYm9hcmQvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXkscnVuVG9BdmFpbGFibGVUaW1lRW50cmllczpPYmplY3QscnVuVG9TdGVwOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSx0aW1lRGlzcGxheVR5cGU6U3RyaW5nLF9ydW5Ub1N0ZXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5zV2l0aFNsaWRlcnM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlUnVuc1dpdGhTbGlkZXJzKHJ1bnMsIHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMpIn19LG9ic2VydmVyczpbIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcykiXSxfY29tcHV0ZUNvbG9yRm9yUnVuKGEpe3JldHVybiBYby5ydW5zQ29sb3JTY2FsZShhKX0sX2NvbXB1dGVUaW1lVGV4dEZvclJ1bihhLApjLGQsZil7Yz1jW2RdO2lmKCFfLmlzTnVtYmVyKGMpKXJldHVybiIiO2E9YVtkXTtpZighYSlyZXR1cm4iIjthPWFbY11bZl07aWYoInN0ZXAiPT09ZilyZXR1cm5gc3RlcCAke2F9YDtpZigicmVsYXRpdmUiPT09ZilyZXR1cm4gMT5hP2AkeygxRTMqYSkudG9GaXhlZCgyKX0gbXNgOmAke2EudG9GaXhlZCgyKX0gc2A7aWYoIndhbGxfdGltZSI9PT1mKXJldHVybihuZXcgRGF0ZSgxRTMqYSkpLnRvU3RyaW5nKCk7dGhyb3cgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtmfSBpcyBub3QgcmVjb2duaXplZC5gKTt9LF9zbGlkZXJWYWx1ZUNoYW5nZWQoYSl7Y29uc3QgYz1hLnRhcmdldC5kYXRhc2V0LnJ1bixkPWEudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLGY9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7aXNOYU4oZCk/ZGVsZXRlIGZbY106ZltjXT1hLnRhcmdldC5pbW1lZGlhdGVWYWx1ZTt0aGlzLl9ydW5Ub1N0ZXBJbmRleD1mfSxfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihhLApjKXtyZXR1cm4oYT1hW2NdKSYmYS5sZW5ndGg/YS5sZW5ndGgtMTowfSxfdXBkYXRlU3RlcHNGb3JOZXdSdW5zKGEpe2NvbnN0IGM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7Xy5mb3JPd24oYSwoZCxmKT0+e18uaXNOdW1iZXIoY1tmXSl8fChjW2ZdPWQubGVuZ3RoLTEpfSk7dGhpcy5fcnVuVG9TdGVwSW5kZXg9Y30sX2dldFN0ZXAoYSxjKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbY106MH0sX2NvbXB1dGVSdW5Ub1N0ZXAoYSxjKXtjb25zdCBkPXt9O18uZm9yT3duKGMsKGYsZyk9Pntjb25zdCBsPWFbZ107bCYmKGRbZ109bFtmXS5zdGVwKX0pO3JldHVybiBkfSxfY29tcHV0ZVJ1bnNXaXRoU2xpZGVycyhhLGMpe3JldHVybiBhLmZpbHRlcihkPT5jW2RdKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1wci1jdXJ2ZS1kYXNoYm9hcmQvdGYtcHItY3VydmUtZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXByLWN1cnZlLWRhc2hib2FyZCIscHJvcGVydGllczp7X3RpbWVEaXNwbGF5VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0ZXAifSxfc2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3J1blRvVGFnSW5mbzp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3JlbGV2YW50U2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfY29tcHV0ZVJlbGV2YW50U2VsZWN0ZWRSdW5zKF9zZWxlY3RlZFJ1bnMsIF9ydW5Ub1RhZ0luZm8pIn0sX3J1bnNXaXRoUHJDdXJ2ZURhdGE6QXJyYXksX3J1blRvU3RlcDp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjpTdHJpbmcsX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSwKX2dldENhdGVnb3J5SXRlbUtleTp7dHlwZTpGdW5jdGlvbix2YWx1ZTooKT0+YT0+YS50YWd9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5SZXF1ZXN0TWFuYWdlcn0sX3N0ZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfX0scmVhZHkoKXt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXtQcm9taXNlLmFsbChbdGhpcy5fZmV0Y2hUYWdzKCksdGhpcy5fZmV0Y2hUaW1lRW50cmllc1BlclJ1bigpXSkudGhlbigoKT0+e3RoaXMuX3JlbG9hZENhcmRzKCl9KX0sX3Nob3VsZE9wZW4oYSl7cmV0dXJuIDI+PWF9LF9mZXRjaFRhZ3MoKXtjb25zdCBhPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYz0+e2lmKCFfLmlzRXF1YWwoYyx0aGlzLl9ydW5Ub1RhZ0luZm8pKXt2YXIgZD1fLm1hcFZhbHVlcyhjLGY9Pl8ua2V5cyhmKSk7CmQ9UW8uZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX2ZldGNoVGltZUVudHJpZXNQZXJSdW4oKXtjb25zdCBhPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvYXZhaWxhYmxlX3RpbWVfZW50cmllcyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYz0+e18uZm9yT3duKGMsZD0+e18uZm9yRWFjaChkLGY9PntmLnJlbGF0aXZlPWYud2FsbF90aW1lLWRbMF0ud2FsbF90aW1lfSl9KTt0aGlzLnNldCgiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLGMpO2M9Xy5rZXlzKGMpLnNsaWNlKCkuc29ydCgpO18uaXNFcXVhbChjLHRoaXMuX3J1bnNXaXRoUHJDdXJ2ZURhdGEpfHx0aGlzLnNldCgiX3J1bnNXaXRoUHJDdXJ2ZURhdGEiLApjKX0pfSxfcmVsb2FkQ2FyZHMoKXtfLmZvckVhY2godGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXByLWN1cnZlLWNhcmQiKSxhPT57YS5yZWxvYWQoKX0pfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe2E9Xy5tYXBWYWx1ZXMoYSxmPT5PYmplY3Qua2V5cyhmKSk7cmV0dXJuIFJvLmNhdGVnb3JpemVUYWdzKGEsYyxkKX0sX2NvbXB1dGVDb2xvckZvclJ1bihhKXtyZXR1cm4gWG8ucnVuc0NvbG9yU2NhbGUoYSl9LF9jb21wdXRlUmVsZXZhbnRTZWxlY3RlZFJ1bnMoYSxjKXtyZXR1cm4gYS5maWx0ZXIoZD0+Y1tkXSl9LF90YWdNZXRhZGF0YShhLGMsZCl7Y29uc3QgZj17fTtjLmZvckVhY2goZz0+e2ZbZ109YVtnXVtkXX0pO2M9ZC5yZXBsYWNlKC9cL3ByX2N1cnZlcyQvLCIiKTtyZXR1cm4gWm8uYWdncmVnYXRlVGFnSW5mbyhmLGMpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BhcGVyLXNwaW5uZXIvcGFwZXItc3Bpbm5lci5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1zcGlubmVyIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3JdfSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaW5wdXQtcGlwZWxpbmUvaW5wdXQtcGlwZWxpbmUtYW5hbHl6ZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoiaW5wdXQtcGlwZWxpbmUtYW5hbHl6ZXIiLHByb3BlcnRpZXM6e19kYXRhOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3VwZGF0ZVZpZXcifSxfc2hvd19kZXZpY2Vfc2lkZV9hbmFseXNpczp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMH0sX3Nob3dfaG9zdF9zaWRlX2NoYXJ0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITAsbm90aWZ5OiEwfSxfc2hvd19ob3N0X3NpZGVfdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LF90b2dnbGVfYnV0dG9uX3RleHQ6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0VG9nZ2xlQnV0dG9uVGV4dChfc2hvd19ob3N0X3NpZGVfdGFibGUpIn0sX2RldmljZUpzb246e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2hvc3RKc29uOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9yZWNvbW1lbmRhdGlvbkpzb246e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCwKb2JzZXJ2ZXI6Il9vbkFjdGl2ZUNoYW5nZWQifSxfc3VtbWFyeV9jb25jbHVzaW9uOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9zdW1tYXJ5X25leHRzdGVwOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9pbmZlZWRfcGVyY2VudF9hdmVyYWdlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9pbmZlZWRfcGVyY2VudF9zdGRkZXY6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2luZmVlZF9wZXJjZW50X21pbmltdW06e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2luZmVlZF9wZXJjZW50X21heGltdW06e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3N0ZXB0aW1lX21zX2F2ZXJhZ2U6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3N0ZXB0aW1lX21zX3N0ZGRldjp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfc3RlcHRpbWVfbXNfbWluaW11bTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfc3RlcHRpbWVfbXNfbWF4aW11bTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX3Nob3dEZXZpY2VTdGVwQ2hhcnQoX2RldmljZUpzb24pIiwKIl9zaG93RGV2aWNlSW5mZWVkQ2hhcnQoX2RldmljZUpzb24pIiwiX3Nob3dIb3N0Q2hhcnQoX2hvc3RKc29uKSIsIl9zaG93SG9zdFRhYmxlKF9ob3N0SnNvbikiLCJfbWFrZVJlY29tbWVuZGF0aW9ucyhfcmVjb21tZW5kYXRpb25Kc29uKSJdLG9uQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLnNldCgiX3Nob3dfaG9zdF9zaWRlX3RhYmxlIiwhdGhpcy5fc2hvd19ob3N0X3NpZGVfdGFibGUpfSxfb25BY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKGEpe2F8fCh0aGlzLl9zaG93X2hvc3Rfc2lkZV90YWJsZT10aGlzLl9zaG93X2hvc3Rfc2lkZV9jaGFydD10aGlzLl9zaG93X2RldmljZV9zaWRlX2FuYWx5c2lzPSExKX0sX2dldFRvZ2dsZUJ1dHRvblRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE/IkhpZGUiOiJTaG93IikrIiBJbnB1dCBPcCBTdGF0aXN0aWNzIn0sX3VzVG9NczpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnMoTnVtYmVyKGEpKS8xRTN9LF91cGRhdGVWaWV3OmZ1bmN0aW9uKCl7aWYodGhpcy5fZGF0YSYmCnRoaXMuX2FjdGl2ZSl7dmFyIGE9dGhpcy5fZGF0YVswXTt0aGlzLl9kZXZpY2VKc29uPWE7dGhpcy5faG9zdEpzb249dGhpcy5fZGF0YVsyXTt0aGlzLl9yZWNvbW1lbmRhdGlvbkpzb249dGhpcy5fZGF0YVszXTt0aGlzLl9zdW1tYXJ5X2NvbmNsdXNpb249YS5wLnN1bW1hcnlfY29uY2x1c2lvbjt0aGlzLl9zdW1tYXJ5X25leHRzdGVwPWEucC5zdW1tYXJ5X25leHRzdGVwO3RoaXMuX2luZmVlZF9wZXJjZW50X2F2ZXJhZ2U9YS5wLmluZmVlZF9wZXJjZW50X2F2ZXJhZ2U7dGhpcy5faW5mZWVkX3BlcmNlbnRfc3RkZGV2PWEucC5pbmZlZWRfcGVyY2VudF9zdGFuZGFyZF9kZXZpYXRpb247dGhpcy5faW5mZWVkX3BlcmNlbnRfbWluaW11bT1hLnAuaW5mZWVkX3BlcmNlbnRfbWluaW11bTt0aGlzLl9pbmZlZWRfcGVyY2VudF9tYXhpbXVtPWEucC5pbmZlZWRfcGVyY2VudF9tYXhpbXVtO3RoaXMuX3N0ZXB0aW1lX21zX2F2ZXJhZ2U9YS5wLnN0ZXB0aW1lX21zX2F2ZXJhZ2U7dGhpcy5fc3RlcHRpbWVfbXNfc3RkZGV2PQphLnAuc3RlcHRpbWVfbXNfc3RhbmRhcmRfZGV2aWF0aW9uO3RoaXMuX3N0ZXB0aW1lX21zX21pbmltdW09YS5wLnN0ZXB0aW1lX21zX21pbmltdW07dGhpcy5fc3RlcHRpbWVfbXNfbWF4aW11bT1hLnAuc3RlcHRpbWVfbXNfbWF4aW11bTt0aGlzLl9zdW1tYXJ5X2NvbmNsdXNpb24uaW5jbHVkZXMoIkhJR0hMWSIpP3RoaXMuY3VzdG9tU3R5bGVbIi0tc3VtbWFyeS1jb2xvciJdPSJyZWQiOnRoaXMuX3N1bW1hcnlfY29uY2x1c2lvbi5pbmNsdWRlcygiTU9ERVJBVEUiKSYmKHRoaXMuY3VzdG9tU3R5bGVbIi0tc3VtbWFyeS1jb2xvciJdPSJvcmFuZ2UiKTt0aGlzLnVwZGF0ZVN0eWxlcygpfX0sX3Nob3dEZXZpY2VTdGVwQ2hhcnQ6ZnVuY3Rpb24oYSl7aWYoYSYmMCE9YS5yb3dzLmxlbmd0aCYmdGhpcy5fYWN0aXZlKXt0aGlzLl9zaG93X2RldmljZV9zaWRlX2FuYWx5c2lzPSEwO3ZhciBjPVtdLGQ9W10sZj0wLGc9LTE7YS5yb3dzLmZvckVhY2goZnVuY3Rpb24obCl7Zz0wPGc/KytnOgpOdW1iZXIobC5jWzBdLnYpO2MucHVzaCh7c2NhbGFyOmwuY1sxXS52LHN0ZXA6Zyx0cHVfc3RlcDpOdW1iZXIobC5jWzBdLnYpLGxvd193YXRlcm1hcms6MH0pO2QucHVzaCh7c2NhbGFyOmwuY1sxXS52K2wuY1syXS52LHN0ZXA6Zyxsb3dfd2F0ZXJtYXJrOmwuY1sxXS52fSk7Zj1NYXRoLm1heChmLGwuY1sxXS52K2wuY1syXS52KX0pO2lmKGE9dGhpcy4kLmRldmljZV9zdGVwX2NoYXJ0KWEuc2V0VmlzaWJsZVNlcmllcyhbImRldmljZSBzdGVwIHRpbWUiLCJjb21wdXRlIHRpbWUiXSksYS5zZXRTZXJpZXNEYXRhKCJkZXZpY2Ugc3RlcCB0aW1lIixkKSxhLnNldFNlcmllc0RhdGEoImNvbXB1dGUgdGltZSIsYyksYS5kZWZhdWx0WVJhbmdlPVswLDEuMSpmXSxhLnNtb290aGluZ0VuYWJsZWQ9ITEsYS50b29sdGlwQ29sdW1ucz1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpsPT5sLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRpbWUobXMpIixldmFsdWF0ZTpsPT5sLmRhdHVtLnNjYWxhci50b0ZpeGVkKDIpfSwKe3RpdGxlOiJTdGVwIixldmFsdWF0ZTpsPT5sLmRhdHVtLnN0ZXB9XSxhLmZpbGxBcmVhPXtoaWdoZXJBY2Nlc3NvcjpsPT5sLnNjYWxhcixsb3dlckFjY2Vzc29yOmw9PmwubG93X3dhdGVybWFya30sYS54QXhpc0Zvcm1hdHRlcj1kMy5mb3JtYXQoImQiKX1lbHNlIHRoaXMuX3Nob3dfZGV2aWNlX3NpZGVfYW5hbHlzaXM9ITF9LF9zaG93RGV2aWNlSW5mZWVkQ2hhcnQ6ZnVuY3Rpb24oYSl7aWYoYSYmMCE9YS5yb3dzLmxlbmd0aCl7dmFyIGM9W10sZD0tMTthLnJvd3MuZm9yRWFjaChmdW5jdGlvbihmKXtkPTA8ZD8rK2Q6TnVtYmVyKGYuY1swXS52KTtjLnB1c2goe3N0ZXA6ZCx0cHVfc3RlcDpOdW1iZXIoZi5jWzBdLnYpLHNjYWxhcjpmLmNbNF0udixtaW46Zi5jWzVdLnYsbWF4OmYuY1s2XS52fSl9KTtpZihhPXRoaXMuJC5kZXZpY2VfaW5mZWVkX2NoYXJ0KWEuc2V0VmlzaWJsZVNlcmllcyhbImlucHV0IHRpbWUlIl0pLGEuc2V0U2VyaWVzRGF0YSgiaW5wdXQgdGltZSUiLGMpLAphLnRvb2x0aXBDb2x1bW5zPVt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmY9PmYuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiU3RlcCIsZXZhbHVhdGU6Zj0+Zi5kYXR1bS50cHVfc3RlcH0se3RpdGxlOiJBdmVyYWdlKCUpIixldmFsdWF0ZTpmPT5mLmRhdHVtLnNjYWxhci50b0ZpeGVkKDQpKyIlIn0se3RpdGxlOiJNaW4oJSkiLGV2YWx1YXRlOmY9PmYuZGF0dW0ubWluLnRvRml4ZWQoNCkrIiUifSx7dGl0bGU6Ik1heCglKSIsZXZhbHVhdGU6Zj0+Zi5kYXR1bS5tYXgudG9GaXhlZCg0KSsiJSJ9XSxhLmZpbGxBcmVhPXtoaWdoZXJBY2Nlc3NvcjpmPT5mLm1heCxsb3dlckFjY2Vzc29yOmY9PmYubWlufSxhLnhBeGlzRm9ybWF0dGVyPWQzLmZvcm1hdCgiZCIpfWVsc2UgdGhpcy5fc2hvd19kZXZpY2Vfc2lkZV9hbmFseXNpcz0hMX0sX3Nob3dIb3N0Q2hhcnQ6ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGM9dGhpcy5fdXNUb01zKGEucC51bmNsYXNzaWZpZWRfbm9uZXF1ZXVlX3VzKSwKZD10aGlzLl91c1RvTXMoYS5wLmRlbWFuZGVkX2ZpbGVfcmVhZF91cyksZj10aGlzLl91c1RvTXMoYS5wLmFkdmFuY2VkX2ZpbGVfcmVhZF91cyksZz10aGlzLl91c1RvTXMoYS5wLnByZXByb2Nlc3NpbmdfdXMpO2E9dGhpcy5fdXNUb01zKGEucC5lbnF1ZXVlX3VzKTt2YXIgbD1jK2QrZitnK2E7dGhpcy5fc2hvd19ob3N0X3NpZGVfY2hhcnQ9MDxsOzA8bCYmKGY9W3tOYW1lOiJPdGhlciBkYXRhIHJlYWRpbmcgb3IgcHJvY2Vzc2luZyIsVG90YWw6Yy9sKjEwMH0se05hbWU6IlJlYWRpbmcgZGF0YSBmcm9tIGZpbGVzIG9uIGRlbWFuZCIsVG90YWw6ZC9sKjEwMH0se05hbWU6IlJlYWRpbmcgZGF0YSBmcm9tIGZpbGVzIGluIGFkdmFuY2UgW2luY2x1ZGluZyBjYWNoaW5nLCBwcmVmZXRjaGluZywgaW50ZXJsZWF2aW5nXSIsVG90YWw6Zi9sKjEwMH0se05hbWU6IkRhdGEgcHJlcHJvY2Vzc2luZyIsVG90YWw6Zy9sKjEwMH0se05hbWU6IkVucXVldWluZyBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIHRvIGRldmljZSIsClRvdGFsOmEvbCoxMDB9XSxnPW5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yLGQ9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkxlZ2VuZChnKSxjPWQzLnNlbGVjdCh0aGlzLiQuaG9zdF9zaWRlX2NoYXJ0KSxmPShuZXcgUGxvdHRhYmxlLlBsb3RzLlBpZSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oayl7cmV0dXJuIGsuTmFtZX0sZykuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQoZikpLnNlY3RvclZhbHVlKGZ1bmN0aW9uKGspe3JldHVybiBrLlRvdGFsfSkubGFiZWxzRW5hYmxlZCghMCkubGFiZWxGb3JtYXR0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIE51bWJlcihrKS50b0ZpeGVkKDIpKyIlIn0pLGQ9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLlRhYmxlKFtbZixkXV0pLGMuc2VsZWN0KCIqIikucmVtb3ZlKCksZC5yZW5kZXJUbyhjKSl9fSxfc2hvd0hvc3RUYWJsZTpmdW5jdGlvbihhKXtpZihhKXt2YXIgYz10aGlzLiQuaG9zdF9zaWRlX3RhYmxlX2NvbnRlbnQ7Yy5pbm5lckhUTUw9CiIiO3RoaXMuX3Nob3dfaG9zdF9zaWRlX3RhYmxlPSExOzAhPWEucm93cy5sZW5ndGgmJmEucm93cy5mb3JFYWNoKGZ1bmN0aW9uKGQpe2xldCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7UG9seW1lci5kb20oYykuYXBwZW5kQ2hpbGQoZik7bGV0IGc9W107Zy5wdXNoKGQuY1swXS52KTtnLnB1c2goZC5jWzFdLnYpO2cucHVzaChkLmNbMl0udi50b0ZpeGVkKDIpKTtnLnB1c2goKDEwMCpkLmNbM10udikudG9GaXhlZCgyKSsiJSIpO2cucHVzaChkLmNbNF0udi50b0ZpeGVkKDIpKTtnLnB1c2goKDEwMCpkLmNbNV0udikudG9GaXhlZCgyKSsiJSIpO2cucHVzaChkLmNbNl0udik7Zy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2xldCBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20oZikuYXBwZW5kQ2hpbGQoayk7UG9seW1lci5kb20oaykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobCkpfSl9KX19LF9tYWtlUmVjb21tZW5kYXRpb25zOmZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBjPQoiIjthLnJvd3MuZm9yRWFjaChmdW5jdGlvbihkKXtjKz0iXHgzY2xpXHgzZSIrZC5jWzBdLnYrIlx4M2MvbGlceDNlIn0pO3RoaXMuJC5yZWNvbW1lbmRhdGlvbl9kZXRhaWxzLmlubmVySFRNTD1jfX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITA7dGhpcy5fdXBkYXRlVmlldygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9pcm9uLWltYWdlL2lyb24taW1hZ2UuaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1pbWFnZSIscHJvcGVydGllczp7c3JjOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sYWx0Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxjcm9zc29yaWdpbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0scHJldmVudExvYWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2l6aW5nOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJjZW50ZXIifSxwcmVsb2FkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsLG9ic2VydmVyOiJfcGxhY2Vob2xkZXJDaGFuZ2VkIn0sZmFkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxsb2FkZWQ6e25vdGlmeTohMCxyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGxvYWRpbmc6e25vdGlmeTohMCxyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGVycm9yOntub3RpZnk6ITAsCnJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2lkdGg6e29ic2VydmVyOiJfd2lkdGhDaGFuZ2VkIix0eXBlOk51bWJlcix2YWx1ZTpudWxsfSxoZWlnaHQ6e29ic2VydmVyOiJfaGVpZ2h0Q2hhbmdlZCIsdHlwZTpOdW1iZXIsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl90cmFuc2Zvcm1DaGFuZ2VkKHNpemluZywgcG9zaXRpb24pIiwiX2xvYWRTdGF0ZU9ic2VydmVyKHNyYywgcHJldmVudExvYWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3Jlc29sdmVkU3JjPSIifSxfaW1nT25Mb2FkOmZ1bmN0aW9uKCl7dGhpcy4kLmltZy5zcmM9PT10aGlzLl9yZXNvbHZlU3JjKHRoaXMuc3JjKSYmKHRoaXMuX3NldExvYWRpbmcoITEpLHRoaXMuX3NldExvYWRlZCghMCksdGhpcy5fc2V0RXJyb3IoITEpKX0sX2ltZ09uRXJyb3I6ZnVuY3Rpb24oKXt0aGlzLiQuaW1nLnNyYz09PXRoaXMuX3Jlc29sdmVTcmModGhpcy5zcmMpJiYodGhpcy4kLmltZy5yZW1vdmVBdHRyaWJ1dGUoInNyYyIpLAp0aGlzLiQuc2l6ZWRJbWdEaXYuc3R5bGUuYmFja2dyb3VuZEltYWdlPSIiLHRoaXMuX3NldExvYWRpbmcoITEpLHRoaXMuX3NldExvYWRlZCghMSksdGhpcy5fc2V0RXJyb3IoITApKX0sX2NvbXB1dGVQbGFjZWhvbGRlckhpZGRlbjpmdW5jdGlvbigpe3JldHVybiF0aGlzLnByZWxvYWR8fCF0aGlzLmZhZGUmJiF0aGlzLmxvYWRpbmcmJnRoaXMubG9hZGVkfSxfY29tcHV0ZVBsYWNlaG9sZGVyQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlbG9hZCYmdGhpcy5mYWRlJiYhdGhpcy5sb2FkaW5nJiZ0aGlzLmxvYWRlZD8iZmFkZWQtb3V0IjoiIn0sX2NvbXB1dGVJbWdEaXZIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zaXppbmd9LF9jb21wdXRlSW1nRGl2QVJJQUhpZGRlbjpmdW5jdGlvbigpe3JldHVybiIiPT09dGhpcy5hbHQ/InRydWUiOnZvaWQgMH0sX2NvbXB1dGVJbWdEaXZBUklBTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuYWx0P3RoaXMuYWx0OgoiIj09PXRoaXMuc3JjPyIiOnRoaXMuX3Jlc29sdmVTcmModGhpcy5zcmMpLnJlcGxhY2UoL1s/fCNdLiovZywiIikuc3BsaXQoIi8iKS5wb3AoKX0sX2NvbXB1dGVJbWdIaWRkZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc2l6aW5nfSxfd2lkdGhDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS53aWR0aD1pc05hTih0aGlzLndpZHRoKT90aGlzLndpZHRoOnRoaXMud2lkdGgrInB4In0sX2hlaWdodENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmhlaWdodD1pc05hTih0aGlzLmhlaWdodCk/dGhpcy5oZWlnaHQ6dGhpcy5oZWlnaHQrInB4In0sX2xvYWRTdGF0ZU9ic2VydmVyOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcy5fcmVzb2x2ZVNyYyhhKTtkIT09dGhpcy5fcmVzb2x2ZWRTcmMmJih0aGlzLl9yZXNvbHZlZFNyYz0iIix0aGlzLiQuaW1nLnJlbW92ZUF0dHJpYnV0ZSgic3JjIiksdGhpcy4kLnNpemVkSW1nRGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZT0iIiwiIj09PQphfHxjP3RoaXMuX3NldExvYWRpbmcoITEpOih0aGlzLl9yZXNvbHZlZFNyYz1kLHRoaXMuJC5pbWcuc3JjPXRoaXMuX3Jlc29sdmVkU3JjLHRoaXMuJC5zaXplZEltZ0Rpdi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9J3VybCgiJyt0aGlzLl9yZXNvbHZlZFNyYysnIiknLHRoaXMuX3NldExvYWRpbmcoITApKSx0aGlzLl9zZXRMb2FkZWQoITEpLHRoaXMuX3NldEVycm9yKCExKSl9LF9wbGFjZWhvbGRlckNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLiQucGxhY2Vob2xkZXIuc3R5bGUuYmFja2dyb3VuZEltYWdlPXRoaXMucGxhY2Vob2xkZXI/J3VybCgiJyt0aGlzLnBsYWNlaG9sZGVyKyciKSc6IiJ9LF90cmFuc2Zvcm1DaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLnNpemVkSW1nRGl2LnN0eWxlLGM9dGhpcy4kLnBsYWNlaG9sZGVyLnN0eWxlO2EuYmFja2dyb3VuZFNpemU9Yy5iYWNrZ3JvdW5kU2l6ZT10aGlzLnNpemluZzthLmJhY2tncm91bmRQb3NpdGlvbj1jLmJhY2tncm91bmRQb3NpdGlvbj0KdGhpcy5zaXppbmc/dGhpcy5wb3NpdGlvbjoiIjthLmJhY2tncm91bmRSZXBlYXQ9Yy5iYWNrZ3JvdW5kUmVwZWF0PXRoaXMuc2l6aW5nPyJuby1yZXBlYXQiOiIifSxfcmVzb2x2ZVNyYzpmdW5jdGlvbihhKXthPVBvbHltZXIuUmVzb2x2ZVVybC5yZXNvbHZlVXJsKGEsdGhpcy4kLmJhc2VVUklBbmNob3IuaHJlZik7Ii8iPT09YVswXSYmKGE9KGxvY2F0aW9uLm9yaWdpbnx8bG9jYXRpb24ucHJvdG9jb2wrIi8vIitsb2NhdGlvbi5ob3N0KSthKTtyZXR1cm4gYX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci1jYXJkL3BhcGVyLWNhcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItY2FyZCIscHJvcGVydGllczp7aGVhZGluZzp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6Il9oZWFkaW5nQ2hhbmdlZCJ9LGltYWdlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sYWx0Ont0eXBlOlN0cmluZ30scHJlbG9hZEltYWdlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZhZGVJbWFnZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxwbGFjZWhvbGRlckltYWdlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxlbGV2YXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhbmltYXRlZFNoYWRvdzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbmltYXRlZDp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMCxjb21wdXRlZDoiX2NvbXB1dGVBbmltYXRlZChhbmltYXRlZFNoYWRvdykifX0sX2lzSGlkZGVuOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJmYWxzZSI6InRydWUifSxfaGVhZGluZ0NoYW5nZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9CnRoaXMuZ2V0QXR0cmlidXRlKCJoZWFkaW5nIiksZD10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyJzdHJpbmciPT09dHlwZW9mIGQmJmQhPT1jfHx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsYSl9LF9jb21wdXRlSGVhZGluZ0NsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhPyIgb3Zlci1pbWFnZSI6IiJ9LF9jb21wdXRlQW5pbWF0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtb3ZlcnZpZXctcGFnZS9vdmVydmlldy1wYWdlLmh0bWwuanMKUG9seW1lcih7aXM6Im92ZXJ2aWV3LXBhZ2UiLHByb3BlcnRpZXM6e19kYXRhOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3VwZGF0ZVZpZXcifSxfc2hvd190b3Bfb3BzX3RhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9zaG93X3N0ZXBfdGltZV9ncmFwaDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfc2hvdWxkU2hvd1N0ZXBUaW1lR3JhcGgoX2RhdGEsIF9hY3RpdmUpIn0sX3RvcF9vcHNfYnV0dG9uX3RleHQ6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0VG9wT3BzQnV0dG9uVGV4dChfc2hvd190b3Bfb3BzX3RhYmxlKSJ9LF9nZW5lcmFsQW5hbHlzaXNKc29uOnt0eXBlOlN0cmluZ30sX2lucHV0QW5hbHlzaXNKc29uOnt0eXBlOlN0cmluZ30sX3J1bkVudmlyb25tZW50SnNvbjp7dHlwZTpTdHJpbmd9LF9yZWNvbW1lbmRhdGlvbkpzb246e3R5cGU6U3RyaW5nfSxfYWN0aXZlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vbkFjdGl2ZUNoYW5nZWQifSxfaG9zdF9pZGxlX3RpbWVfcGVyY2VudDp7dHlwZTpTdHJpbmd9LApfZGV2aWNlX2lkbGVfdGltZV9wZXJjZW50Ont0eXBlOlN0cmluZ30sX214dV91dGlsaXphdGlvbl9wZXJjZW50Ont0eXBlOlN0cmluZ30sX3N0ZXB0aW1lX21zX2F2ZXJhZ2U6e3R5cGU6U3RyaW5nfSxfc3RlcHRpbWVfbXNfc3RkZGV2Ont0eXBlOlN0cmluZ30sX2luZmVlZF9tc19hdmVyYWdlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2NvbXB1dGVfbXNfYXZlcmFnZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF90b3Bfb3BzX2hlYWRpbmc6e3R5cGU6U3RyaW5nfSxfZXJyb3JfbWVzc2FnZTp7dHlwZTpTdHJpbmd9LF9ob3N0X2NvdW50Ont0eXBlOlN0cmluZ30sX3RwdV90eXBlOnt0eXBlOlN0cmluZ30sX3RwdV9jb3JlX2NvdW50Ont0eXBlOlN0cmluZ30sX2JhdGNoX3NpemU6e3R5cGU6U3RyaW5nfSxfY2hhbmdlX2xpc3Q6e3R5cGU6U3RyaW5nfSxfYnVpbGRfdGltZTp7dHlwZTpTdHJpbmd9LF9idWlsZF90YXJnZXQ6e3R5cGU6U3RyaW5nfSxfc3RhdGVtZW50Ont0eXBlOlN0cmluZ319LApvYnNlcnZlcnM6WyJfc2hvd1N1bW1hcnkoX2lucHV0QW5hbHlzaXNKc29uLCBfZ2VuZXJhbEFuYWx5c2lzSnNvbikiLCJfc2hvd1J1bkVudmlyb25tZW50KF9ydW5FbnZpcm9ubWVudEpzb24pIiwiX3Nob3dEZXZpY2VTdGVwQ2hhcnQoX2lucHV0QW5hbHlzaXNKc29uKSIsIl9zaG93VG9wT3BzVGFibGUoX2dlbmVyYWxBbmFseXNpc0pzb24pIiwiX3Nob3dSZWNvbW1lbmRhdGlvbihfcmVjb21tZW5kYXRpb25Kc29uKSJdLG9uQ2xpY2tUb3BPcHM6ZnVuY3Rpb24oKXt0aGlzLl9zaG93X3RvcF9vcHNfdGFibGU9IXRoaXMuX3Nob3dfdG9wX29wc190YWJsZX0sX2dldFRvcE9wc0J1dHRvblRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE/IkhpZGUiOiJTaG93IikrIiB0YWJsZSJ9LF91cGRhdGVWaWV3OmZ1bmN0aW9uKCl7aWYodGhpcy5fZGF0YSYmdGhpcy5fYWN0aXZlKXt0aGlzLl9nZW5lcmFsQW5hbHlzaXNKc29uPXRoaXMuX2RhdGFbMF07dGhpcy5faW5wdXRBbmFseXNpc0pzb249dGhpcy5fZGF0YVsxXTsKdGhpcy5fcnVuRW52aXJvbm1lbnRKc29uPXRoaXMuX2RhdGFbMl07dmFyIGE9dGhpcy5fZGF0YVszXTt0aGlzLl9yZWNvbW1lbmRhdGlvbkpzb249YTt0aGlzLl9zdGF0ZW1lbnQ9YS5wLnN0YXRlbWVudDthPSJncmVlbiI7dGhpcy5fc3RhdGVtZW50LmluY2x1ZGVzKCJISUdITFkiKT9hPSJyZWQiOnRoaXMuX3N0YXRlbWVudC5pbmNsdWRlcygiTU9ERVJBVEUiKSYmKGE9Im9yYW5nZSIpO3RoaXMudXBkYXRlU3R5bGVzKHsiLS1zdW1tYXJ5LWNvbG9yIjphfSl9fSxfc2hvd1N1bW1hcnk6ZnVuY3Rpb24oYSxjKXthJiZjJiYodGhpcy5faG9zdF9pZGxlX3RpbWVfcGVyY2VudD1jLnAuaG9zdF9pZGxlX3RpbWVfcGVyY2VudCx0aGlzLl9kZXZpY2VfaWRsZV90aW1lX3BlcmNlbnQ9Yy5wLmRldmljZV9pZGxlX3RpbWVfcGVyY2VudCx0aGlzLl9teHVfdXRpbGl6YXRpb25fcGVyY2VudD1jLnAubXh1X3V0aWxpemF0aW9uX3BlcmNlbnQsdGhpcy5fc3RlcHRpbWVfbXNfYXZlcmFnZT1hLnAuc3RlcHRpbWVfbXNfYXZlcmFnZSwKdGhpcy5fc3RlcHRpbWVfbXNfc3RkZGV2PWEucC5zdGVwdGltZV9tc19zdGFuZGFyZF9kZXZpYXRpb24sdGhpcy5fY29tcHV0ZV9tc19hdmVyYWdlPWEucC5jb21wdXRlX21zX2F2ZXJhZ2UsdGhpcy5faW5mZWVkX21zX2F2ZXJhZ2U9YS5wLmluZmVlZF9tc19hdmVyYWdlKX0sX3Nob3dSdW5FbnZpcm9ubWVudDpmdW5jdGlvbihhKXthJiYodGhpcy5fZXJyb3JfbWVzc2FnZT1hLnAuZXJyb3JfbWVzc2FnZSx0aGlzLl9ob3N0X2NvdW50PWEucC5ob3N0X2NvdW50LHRoaXMuX3RwdV90eXBlPWEucC50cHVfdHlwZSx0aGlzLl90cHVfY29yZV9jb3VudD1hLnAudHB1X2NvcmVfY291bnQsdGhpcy5fYmF0Y2hfc2l6ZT1hLnAuYmF0Y2hfc2l6ZSx0aGlzLl9jaGFuZ2VfbGlzdD1hLnAuY2hhbmdlX2xpc3QsdGhpcy5fYnVpbGRfdGltZT1hLnAuYnVpbGRfdGltZSx0aGlzLl9idWlsZF90YXJnZXQ9YS5wLmJ1aWxkX3RhcmdldCl9LF9zaG93RGV2aWNlU3RlcENoYXJ0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuX3Nob3dfc3RlcF90aW1lX2dyYXBoKXt2YXIgYz0KW10sZD1bXSxmPTAsZz0tMTthLnJvd3MuZm9yRWFjaChmdW5jdGlvbihsKXtnPTA8Zz8rK2c6TnVtYmVyKGwuY1swXS52KTtjLnB1c2goe3NjYWxhcjpsLmNbMV0udixzdGVwOmcsdHB1X3N0ZXA6TnVtYmVyKGwuY1swXS52KSxsb3dfd2F0ZXJtYXJrOjB9KTtkLnB1c2goe3NjYWxhcjpsLmNbMV0uditsLmNbMl0udixzdGVwOmcsbG93X3dhdGVybWFyazpsLmNbMV0udn0pO2Y9TWF0aC5tYXgoZixsLmNbMV0uditsLmNbMl0udil9KTtpZihhPXRoaXMuJCQoIiNkZXZpY2Vfc3RlcF9jaGFydCIpKWEuc2V0VmlzaWJsZVNlcmllcyhbImNvbXB1dGUtdGltZSIsInN0ZXAtdGltZSBceDNkIGlucHV0LXRpbWUgKyBjb21wdXRlLXRpbWUiXSksYS5zZXRTZXJpZXNEYXRhKCJjb21wdXRlLXRpbWUiLGMpLGEuc2V0U2VyaWVzRGF0YSgic3RlcC10aW1lIFx4M2QgaW5wdXQtdGltZSArIGNvbXB1dGUtdGltZSIsZCksYS5kZWZhdWx0WVJhbmdlPVswLDEuMSpmXSxhLnNtb290aGluZ0VuYWJsZWQ9CiExLGEudG9vbHRpcENvbHVtbnM9W3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bD0+bC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJUaW1lKG1zKSIsZXZhbHVhdGU6bD0+bC5kYXR1bS5zY2FsYXIudG9GaXhlZCgyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpsPT5sLmRhdHVtLnN0ZXB9XSxhLmZpbGxBcmVhPXtoaWdoZXJBY2Nlc3NvcjpsPT5sLnNjYWxhcixsb3dlckFjY2Vzc29yOmw9PmwubG93X3dhdGVybWFya30sYS54QXhpc0Zvcm1hdHRlcj1kMy5mb3JtYXQoImQiKX19LF9zaG93VG9wT3BzVGFibGU6ZnVuY3Rpb24oYSl7aWYoYSYmYS5yb3dzJiZhLnJvd3MubGVuZ3RoJiZ0aGlzLl9hY3RpdmUpe3ZhciBjPTAsZD10aGlzLiQkKCIjdG9wX29wc190YWJsZV9jb250ZW50Iik7ZCYmKGQuaW5uZXJIVE1MPSIiLGEucm93cy5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7UG9seW1lci5kb20oZCkuYXBwZW5kQ2hpbGQoZyk7CnZhciBsPVtdO2wucHVzaCgoMTAwKmYuY1swXS52KS50b0ZpeGVkKDIpKyIlIik7bC5wdXNoKCgxMDAqZi5jWzFdLnYpLnRvRml4ZWQoMikrIiUiKTtsLnB1c2goZi5jWzJdLnYpO2wucHVzaChmLmNbM10udik7bC5wdXNoKGYuY1s0XS52LnRvRml4ZWQoMikpO2wuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO1BvbHltZXIuZG9tKGcpLmFwcGVuZENoaWxkKG4pO1BvbHltZXIuZG9tKG4pLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspKX0pO2MrPTF9KSx0aGlzLl90b3Bfb3BzX2hlYWRpbmc9IlRvcCAiK2MrIiBUZW5zb3JGbG93IG9wZXJhdGlvbnMgZXhlY3V0ZWQgb24gVFBVIix0aGlzLl9zaG93X3RvcF9vcHNfdGFibGU9ITEpfX0sX2dlbmVyYXRlUmVjb21tZW5kYXRpb25IdG1sOmZ1bmN0aW9uKGEsYyxkLGYpe3ZhciBnPSJceDNjcFx4M2VceDI2bmJzcDtceDNjL3BceDNlIjtnKz0nXHgzY2RpdiBjbGFzc1x4M2QiJysKYysnIlx4M2UnO2crPSJceDNjYlx4M2UiK2YrIjpceDNjL2JceDNlIjthLnJvd3MuZm9yRWFjaChmdW5jdGlvbihsKXtsLmNbMF0udj09ZCYmKGcrPSJceDNjbGlceDNlIitsLmNbMV0udisiXHgzYy9saVx4M2UiKX0pO3JldHVybiBnKz0iXHgzYy9kaXZceDNlIn0sX3Nob3dSZWNvbW1lbmRhdGlvbjpmdW5jdGlvbihhKXtpZihhJiZ0aGlzLl9hY3RpdmUpe3ZhciBjPWEucC5ib3R0bGVuZWNrLGQ9dGhpcy4kJCgiI2hvc3Rfc2lkZV90aXBzIiksZj10aGlzLiQkKCIjZGV2aWNlX3NpZGVfdGlwcyIpO2QmJmYmJigiZGV2aWNlIj09Yz8oZC5pbm5lckhUTUw9IiIsZi5pbm5lckhUTUw9dGhpcy5fZ2VuZXJhdGVSZWNvbW1lbmRhdGlvbkh0bWwoYSwiYm90dGxlbmVja1RpcHMiLCJkZXZpY2UiLCJOZXh0IHRvb2xzIHRvIHVzZSBmb3IgcmVkdWNpbmcgdGhlIFRQVSB0aW1lIikpOiJob3N0Ij09Yz8oZC5pbm5lckhUTUw9dGhpcy5fZ2VuZXJhdGVSZWNvbW1lbmRhdGlvbkh0bWwoYSwiYm90dGxlbmVja1RpcHMiLAoiaG9zdCIsIk5leHQgdG9vbHMgdG8gdXNlIGZvciByZWR1Y2luZyB0aGUgaW5wdXQgdGltZSIpLGYuaW5uZXJIVE1MPSIiKTooZC5pbm5lckhUTUw9dGhpcy5fZ2VuZXJhdGVSZWNvbW1lbmRhdGlvbkh0bWwoYSwiYm90dGxlbmVja1RpcHMiLCJob3N0IiwiTmV4dCB0b29scyB0byB1c2UgZm9yIHJlZHVjaW5nIHRoZSBpbnB1dCB0aW1lIiksZi5pbm5lckhUTUw9dGhpcy5fZ2VuZXJhdGVSZWNvbW1lbmRhdGlvbkh0bWwoYSwiYm90dGxlbmVja1RpcHMiLCJkZXZpY2UiLCJOZXh0IHRvb2xzIHRvIHVzZSBmb3IgcmVkdWNpbmcgdGhlIFRQVSB0aW1lIikpLGM9dGhpcy4kJCgiI2RvY3VtZW50YXRpb25fdGlwcyIpKSYmKGMuaW5uZXJIVE1MPXRoaXMuX2dlbmVyYXRlUmVjb21tZW5kYXRpb25IdG1sKGEsImRvY3VtZW50YXRpb25UaXBzIiwiZG9jIiwiT3RoZXIgdXNlZnVsIHJlc291cmNlcyIpKX19LF9vbkFjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7YT90aGlzLl91cGRhdGVWaWV3KCk6CnRoaXMuX3Nob3dfdG9wX29wc190YWJsZT10aGlzLl9zaG93X3N0ZXBfdGltZV9ncmFwaD0hMX0sX3Nob3VsZFNob3dTdGVwVGltZUdyYXBoOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGMmJmEmJmFbMV0mJmFbMV0ucm93cyYmYVsxXS5yb3dzLmxlbmd0aH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITA7dGhpcy5fdXBkYXRlVmlldygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1vcC1wcm9maWxlL3V0aWxzLmpzCnZhciBwcDsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobCxrLG4scCl7cmV0dXJuInJnYmEoIitNYXRoLnJvdW5kKDI1NSpsKSsiLCIrTWF0aC5yb3VuZCgyNTUqaykrIiwiK01hdGgucm91bmQoMjU1Km4pKyIsIitwKyIpIn1mdW5jdGlvbiBkKGwsaz0xLG49MSxwPU1hdGguc3FydCl7aWYoaXNOYU4obCkpcmV0dXJuIGMoayxrLGssbik7bD1wKGwpO3JldHVybi41Pmw/YyhrLDIqbCprLDAsbik6YygyKigxLWwpKmssaywwLG4pfWZ1bmN0aW9uIGYobCl7cmV0dXJuIGwmJmwubWV0cmljcyYmbC5tZXRyaWNzLnRpbWU/bC5tZXRyaWNzLmZsb3BzL2wubWV0cmljcy50aW1lOk5hTn1mdW5jdGlvbiBnKGwpe3JldHVybiBsJiZsLm1ldHJpY3MmJmwubWV0cmljcy5tZW1vcnlCYW5kd2lkdGg/bC5tZXRyaWNzLm1lbW9yeUJhbmR3aWR0aDpOYU59YS5mbGFtZUNvbG9yPWQ7YS5mbG9wc0NvbG9yPWZ1bmN0aW9uKGwpe3JldHVybiBkKGwsLjcpfTthLmJ3Q29sb3I9ZnVuY3Rpb24obCl7cmV0dXJuIGQoMS1sLAouNyl9O2EudXRpbGl6YXRpb249ZjthLm1lbW9yeVV0aWxpemF0aW9uPWc7YS5oYXNNZW1vcnlVdGlsaXphdGlvbj1mdW5jdGlvbihsKXtyZXR1cm4gbCYmbC5tZXRyaWNzJiZsLm1ldHJpY3MubWVtb3J5QmFuZHdpZHRofTthLmhhc0Zsb3BzPWZ1bmN0aW9uKGwpe3JldHVybiBsJiZsLm1ldHJpY3MmJmwubWV0cmljcy50aW1lfTthLnBlcmNlbnQ9ZnVuY3Rpb24obCl7cmV0dXJuIGlzTmFOKGwpPyItIjouOTk1PD1sPyIxMDAlIjoxRS01Pmw/IjAuMDAlIjooMTAwKmwpLnRvUHJlY2lzaW9uKDIpKyIlIn07YS50aW1lV2FzdGVkPWZ1bmN0aW9uKGwpe3JldHVybiBsJiZsLm1ldHJpY3M/bC5tZXRyaWNzLnRpbWUqKDEtTWF0aC5tYXgoZihsKSxnKGwpKSk6TmFOfX0pKHBwfHwocHA9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1vcC1wcm9maWxlL3RmLW9wLXRhYmxlLmh0bWwuanMKUG9seW1lcih7aXM6InRmLW9wLXRhYmxlIixwcm9wZXJ0aWVzOntyb290Tm9kZTp7dHlwZTpPYmplY3R9LGFjdGl2ZTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9hY3RpdmUoX3NlbGVjdGVkLCBfaG92ZXIpIixub3RpZnk6ITB9LHNob3dQOTA6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGJ5V2FzdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGNoaWxkcmVuQ291bnQ6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG5vdGlmeTohMH0sX3NlbGVjdGVkOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsLG5vdGlmeTohMH0sX2hvdmVyOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsLG5vdGlmeTohMH0sX29uSGVhZGVySG92ZXI6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9PnRoaXMuX2hvdmVyPWF9fSxfb25IZWFkZXJDbGljazp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYT0+e3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQuc2VsZWN0ZWQ9CiExKTt0aGlzLl9zZWxlY3RlZD1hO2Euc2VsZWN0ZWQ9ITB9fX19LF9hY3RpdmU6ZnVuY3Rpb24oYSxjKXtpZihjKXJldHVybiBjLm5vZGU7aWYoYSlyZXR1cm4gYS5ub2RlfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLW9wLXByb2ZpbGUvdGYtb3AtdGFibGUuaHRtbC0yLmpzClBvbHltZXIoe2lzOiJ0Zi1vcC10YWJsZS1lbnRyeSIscHJvcGVydGllczp7bm9kZTp7dHlwZTpPYmplY3R9LGxldmVsOnt0eXBlOk51bWJlcix2YWx1ZTowfSxoZWFkZXJIb3Zlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PmZ1bmN0aW9uKCl7fSxub3RpZnk6ITB9LGhlYWRlckNsaWNrOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+ZnVuY3Rpb24oKXt9LG5vdGlmeTohMH0sZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHNlbGVjdGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9zZWxlY3RlZENoYW5nZWQifX0sX2VxOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE9PWN9LF9uZXh0TGV2ZWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGErMX0sX2hhbmRsZUhlYWRlckNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5leHBhbmRlZF49MTt0aGlzLmhlYWRlckNsaWNrKHRoaXMpfSxfaGFuZGxlSGVhZGVyTW91c2VFbnRlcjpmdW5jdGlvbigpe3RoaXMuaGVhZGVySG92ZXIodGhpcyl9LApfaGFuZGxlSGVhZGVyTW91c2VMZWF2ZTpmdW5jdGlvbigpe3RoaXMuaGVhZGVySG92ZXIobnVsbCl9LF9wZXJjZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhLm1ldHJpY3MmJmEubWV0cmljcy50aW1lP3BwLnBlcmNlbnQoYS5tZXRyaWNzLnRpbWUpOiIifSxfdGltZVdhc3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gcHAucGVyY2VudChwcC50aW1lV2FzdGVkKGEpKX0sX3Byb3ZlbmFuY2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueGxhJiZhLnhsYS5wcm92ZW5hbmNlP2EueGxhLnByb3ZlbmFuY2UucmVwbGFjZSgvXi4qXC8vLCIiKToiIn0sX3V0aWxpemF0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBwcC5wZXJjZW50KHBwLnV0aWxpemF0aW9uKGEpKX0sX2hhc0Zsb3BzOnBwLmhhc0Zsb3BzLF9mbGFtZUNvbG9yOmZ1bmN0aW9uKGEpe3JldHVybiBwcC5mbGFtZUNvbG9yKHBwLnV0aWxpemF0aW9uKGEpLDEsLjIpfSxfYmFyV2lkdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWV0cmljcyYmYS5tZXRyaWNzLnRpbWU/CnBwLnBlcmNlbnQoYS5tZXRyaWNzLnRpbWUpOjB9LF9zZWxlY3RlZENoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJzZWxlY3RlZCIsYSl9LF9nZXRLQ2hpbGRyZW46ZnVuY3Rpb24oYSxjLGQsZil7aWYoZCYmMDxhLmNoaWxkcmVuLmxlbmd0aCYmYS5jaGlsZHJlblswXS5tZXRyaWNzKXtmb3IodmFyIGc9ZD0wLGw9LjkqYS5tZXRyaWNzLnRpbWU7ZzxNYXRoLm1pbihjLGEuY2hpbGRyZW4ubGVuZ3RoKSYmIShkPj1sKTtnKyspZCs9YS5jaGlsZHJlbltnXS5tZXRyaWNzLnRpbWU7Yz1nfXJldHVybiBmP2EuY2hpbGRyZW4uc2xpY2UoMCxjKTphLmNoaWxkcmVufSxfaGFzTGVmdG91dDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGQ/YS5udW1DaGlsZHJlbj5NYXRoLm1pbihjLGEuY2hpbGRyZW4ubGVuZ3RoKTohMX0sX251bUxlZnRvdXQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYS5udW1DaGlsZHJlbi1NYXRoLm1pbihjLGEuY2hpbGRyZW4ubGVuZ3RoKX0sX2dldFBhZGRpbmdMZWZ0OmZ1bmN0aW9uKGEpe3JldHVybiBhKwo1fSxfc29ydDpmdW5jdGlvbihhKXtyZXR1cm4gYT8oYyxkKT0+cHAudGltZVdhc3RlZChkKS1wcC50aW1lV2FzdGVkKGMpOjB9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtb3AtcHJvZmlsZS90Zi1vcC1kZXRhaWxzLmh0bWwuanMKUG9seW1lcih7aXM6InRmLW9wLWJhciIscHJvcGVydGllczp7dmFsdWU6e3R5cGU6TnVtYmVyfSxjb2xvcjp7dHlwZTpTdHJpbmd9fSxvYnNlcnZlcnM6WyJfdXBkYXRlVmFsdWUodmFsdWUsIGNvbG9yKSJdLF9wZXJjZW50OnBwLnBlcmNlbnQsX3VwZGF0ZVZhbHVlOmZ1bmN0aW9uKGEsYyl7YyYmKGE9cHAucGVyY2VudChhKSx0aGlzLnN0eWxlLmJhY2tncm91bmQ9YGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHtjfSAke2F9LCAjY2NjICR7YX0pYCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtb3AtcHJvZmlsZS90Zi1vcC1kZXRhaWxzLmh0bWwtMi5qcwpQb2x5bWVyKHtpczoidGYtb3AtZGV0YWlscyIscHJvcGVydGllczp7bm9kZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfdXBkYXRlQ2FyZCJ9fSxfdXRpbGl6YXRpb246cHAudXRpbGl6YXRpb24sX21lbW9yeVV0aWxpemF0aW9uOnBwLm1lbW9yeVV0aWxpemF0aW9uLF9oYXNGbG9wczpwcC5oYXNGbG9wcyxfaGFzTWVtb3J5VXRpbGl6YXRpb246cHAuaGFzTWVtb3J5VXRpbGl6YXRpb24sX3VwZGF0ZUNhcmQ6ZnVuY3Rpb24oYSl7YSYmKGE9cHAuZmxhbWVDb2xvcihwcC51dGlsaXphdGlvbihhKSwuNyksdGhpcy4kLmNhcmQudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jYXJkLWJhY2tncm91bmQtY29sb3IiOmF9KSl9LF9zdWJoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/YS54bGE/YS54bGEuY2F0ZWdvcnkrIiBvcGVyYXRpb24iOmEuY2F0ZWdvcnk/Ik9wZXJhdGlvbiBjYXRlZ29yeSI6IlVua25vd24iOm51bGx9LF9mdXNlZDpmdW5jdGlvbihhKXtyZXR1cm4gYSYmCmEueGxhJiYhKGEubWV0cmljcyYmYS5tZXRyaWNzLnRpbWUpfSxfZGltZW5zaW9uQ29sb3I6ZnVuY3Rpb24oYSl7aWYoIWF8fCFhLmFsaWdubWVudClyZXR1cm4gbnVsbDthPWEuc2l6ZS9hLmFsaWdubWVudDtyZXR1cm4gcHAuZmxhbWVDb2xvcihhL01hdGguY2VpbChhKSwxLC4yNSxjPT4xLU1hdGguc3FydCgxLWMpKX0sX2RpbWVuc2lvbkhpbnQ6ZnVuY3Rpb24oYSl7aWYoIWF8fCFhLmFsaWdubWVudClyZXR1cm4gbnVsbDt2YXIgYz1NYXRoLmNlaWwoYS5zaXplL2EuYWxpZ25tZW50KSxkPTE9PWM/IiI6IjogIitjKyIgXHUwMGQ3ICIrYS5hbGlnbm1lbnQ7cmV0dXJuIDA9PWEuc2l6ZSVhLmFsaWdubWVudD8iRXhhY3QgZml0IitkOiJQYWQgdG8gIitjKmEuYWxpZ25tZW50K2R9LF9mbG9wc0NvbG9yOmZ1bmN0aW9uKGEpe3JldHVybiBwcC5mbG9wc0NvbG9yKHBwLnV0aWxpemF0aW9uKGEpKX0sX2J3Q29sb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHBwLmJ3Q29sb3IocHAubWVtb3J5VXRpbGl6YXRpb24oYSkpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLW9wLXByb2ZpbGUvdGYtb3AtcHJvZmlsZS5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1vcC1wcm9maWxlIixwcm9wZXJ0aWVzOntfZGF0YTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxfcm9vdDp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxhY3RpdmU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTpudWxsfSxfaGFzVHdvUHJvZmlsZXM6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NoZWNrUHJvZmlsZXMoX2RhdGEpIixub3RpZnk6ITB9LGlzQnlDYXRlZ29yeTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2hvd1A5MDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sYnlXYXN0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sY2hpbGRyZW5Db3VudDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX2dldFJvb3QoX2RhdGEsIGlzQnlDYXRlZ29yeSkiXSxfbG9hZDpmdW5jdGlvbihhKXt0aGlzLl9kYXRhPWF9LF9nZXRSb290OmZ1bmN0aW9uKGEsYyl7dGhpcy5fcm9vdD0KdGhpcy5faGFzVHdvUHJvZmlsZXM/Yz9hLmJ5Q2F0ZWdvcnk6YS5ieVByb2dyYW06YS5ieUNhdGVnb3J5fHxhLmJ5UHJvZ3JhbX0sX2NoZWNrUHJvZmlsZXM6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEuYnlQcm9ncmFtJiZudWxsIT1hLmJ5Q2F0ZWdvcnl9LF91dGlsaXphdGlvblBlcmNlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHBwLnBlcmNlbnQocHAudXRpbGl6YXRpb24oYSkpfSxfbWVtb3J5VXRpbGl6YXRpb25QZXJjZW50OmZ1bmN0aW9uKGEpe3JldHVybiBwcC5wZXJjZW50KHBwLm1lbW9yeVV0aWxpemF0aW9uKGEpKX0sX2hhc0Zsb3BzOmZ1bmN0aW9uKGEpe3JldHVybiAwPGEubWV0cmljcy5mbG9wc30sX2Zsb3BzQ29sb3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHBwLmZsb3BzQ29sb3IocHAudXRpbGl6YXRpb24oYSkpfSxfYndDb2xvcjpmdW5jdGlvbihhKXtyZXR1cm4gcHAuYndDb2xvcihwcC5tZW1vcnlVdGlsaXphdGlvbihhKSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtcHJvZmlsZS1jb21tb24vdXRpbC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtkLnRpbWU9ZnVuY3Rpb24oZixnKXtsZXQgbD1EYXRlLm5vdygpO2c9ZygpO2NvbnNvbGUubG9nKGYsIjoiLERhdGUubm93KCktbCwibXMiKTtyZXR1cm4gZ307ZC5nZXRUcmFja2VyPWZ1bmN0aW9uKGYpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKGcpe2Yuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmYucHJvZ3Jlc3MudmFsdWUsbXNnOmd9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24oZyl7Zi5zZXQoInByb2dyZXNzIix7dmFsdWU6Zi5wcm9ncmVzcy52YWx1ZStnLG1zZzpmLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbihnLGwpe2NvbnNvbGUuZXJyb3IobC5zdGFjayk7Zi5zZXQoInByb2dyZXNzIix7dmFsdWU6Zi5wcm9ncmVzcy52YWx1ZSxtc2c6ZyxlcnJvcjohMH0pfX19O2QucnVuVGFzaz1mdW5jdGlvbihmLGcsbCxrKXtrLnNldE1lc3NhZ2UoZik7dHJ5e2xldCBuPWEucHJvZmlsZS51dGlsLnRpbWUoZiwKbCk7ay51cGRhdGVQcm9ncmVzcyhnKTtyZXR1cm4gbn1jYXRjaChuKXtrLnJlcG9ydEVycm9yKCJGYWlsZWQgIitmLG4pfX19KShjLnV0aWx8fChjLnV0aWw9e30pKX0pKGEucHJvZmlsZXx8KGEucHJvZmlsZT17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL21lbW9yeS12aWV3ZXIvdXRpbHMuanMKdmFyIHFwOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhkLGYsZyxsKXtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoMjU1KmQpKyIsIitNYXRoLnJvdW5kKDI1NSpmKSsiLCIrTWF0aC5yb3VuZCgyNTUqZykrIiwiK2wrIikifWEuYnl0ZXNUb01pQj1mdW5jdGlvbihkKXtyZXR1cm4gZC8xMDQ4NTc2fTthLmJ5dGVTaXplT2ZQcmltaXRpdmVUeXBlPWZ1bmN0aW9uKGQpe3N3aXRjaChkKXtjYXNlICJQUkVEIjpyZXR1cm4gMTtjYXNlICJTOCI6cmV0dXJuIDE7Y2FzZSAiUzE2IjpyZXR1cm4gMjtjYXNlICJTMzIiOnJldHVybiA0O2Nhc2UgIlM2NCI6cmV0dXJuIDg7Y2FzZSAiVTgiOnJldHVybiAxO2Nhc2UgIlUxNiI6cmV0dXJuIDI7Y2FzZSAiVTMyIjpyZXR1cm4gNDtjYXNlICJVNjQiOnJldHVybiA4O2Nhc2UgIkJGMTYiOnJldHVybiAyO2Nhc2UgIkYxNiI6cmV0dXJuIDI7Y2FzZSAiRjMyIjpyZXR1cm4gNDtjYXNlICJGNjQiOnJldHVybiA4O2Nhc2UgIkM2NCI6cmV0dXJuIDg7Y2FzZSAiVE9LRU4iOnJldHVybiAwO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBwcmltaXRpdmUgdHlwZSAiKwpkKSwwfX07YS5mbGFtZUNvbG9yPWZ1bmN0aW9uKGQsZixnLGwpe3ZvaWQgMD09PWYmJihmPTEpO3ZvaWQgMD09PWcmJihnPTEpO3ZvaWQgMD09PWwmJihsPWs9PjEtTWF0aC5zcXJ0KDEtaykpO2lmKGlzTmFOKGQpKXJldHVybiBjKGYsZixmLGcpO2Q9bChkKTtyZXR1cm4uNT5kP2MoZiwyKmQqZiwwLGcpOmMoMiooMS1kKSpmLGYsMCxnKX07YS5wZXJjZW50PWZ1bmN0aW9uKGQpe3JldHVybiBpc05hTihkKT8iLSI6Ljk5NTw9ZD8iMTAwJSI6MUUtNT5kPyIwLjAwJSI6KDEwMCpkKS50b1ByZWNpc2lvbigyKSsiJSJ9fSkocXB8fChxcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL21lbW9yeS12aWV3ZXIvc2hhcGUuanMKdmFyIHJwOwooZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihkKXt0aGlzLmVsZW1lbnRUeXBlPWQuZWxlbWVudFR5cGUudG9TdHJpbmcoKTt0aGlzLmRpbWVuc2lvbnM9ZC5kaW1lbnNpb25zLm1hcChmPT5wYXJzZUludChmLDEwKSk7ZC50dXBsZVNoYXBlcyYmKHRoaXMudHVwbGVTaGFwZXM9ZC50dXBsZVNoYXBlcy5tYXAoZj0+bmV3IGMoZikpKTt0aGlzLmxheW91dD1kLmxheW91dH1yZXNvbHZlU2hhcGVJbmRleChkKXtyZXR1cm4gZC5yZWR1Y2UoKGYsZyk9PmYudHVwbGVTaGFwZXNbZ10sdGhpcyl9dW5wYWRkZWRIZWFwU2l6ZUJ5dGVzKCl7aWYoIlRPS0VOIj09PXRoaXMuZWxlbWVudFR5cGUpcmV0dXJuIDA7aWYoIlRVUExFIj09PXRoaXMuZWxlbWVudFR5cGUpcmV0dXJuIDgqdGhpcy50dXBsZVNoYXBlcy5sZW5ndGg7bGV0IGQ9MDtpZih0aGlzLmxheW91dCYmIkRFTlNFIiE9dGhpcy5sYXlvdXQuZm9ybWF0KSJTUEFSU0UiPT10aGlzLmxheW91dC5mb3JtYXQmJihmPXBhcnNlSW50KHRoaXMubGF5b3V0Lm1heFNwYXJzZUVsZW1lbnRzLAoxMCksZD1mKnFwLmJ5dGVTaXplT2ZQcmltaXRpdmVUeXBlKHRoaXMuZWxlbWVudFR5cGUpLGQrPWYqdGhpcy5kaW1lbnNpb25zLmxlbmd0aCo4KTtlbHNle3ZhciBmPXRoaXMuZGltZW5zaW9ucy5yZWR1Y2UoKGcsbCk9PmcqbCwxKTtkKz1mKnFwLmJ5dGVTaXplT2ZQcmltaXRpdmVUeXBlKHRoaXMuZWxlbWVudFR5cGUpfXJldHVybiBkfWh1bWFuU3RyaW5nV2l0aExheW91dCgpe2lmKCJUVVBMRSI9PT10aGlzLmVsZW1lbnRUeXBlKXt2YXIgZD0iKCI7bGV0IGY9IiI7Zm9yKGNvbnN0IGcgb2YgdGhpcy50dXBsZVNoYXBlcylkPWQrZitnLmh1bWFuU3RyaW5nV2l0aExheW91dCgpLGY9IiwgIjtyZXR1cm4gZCs9IikifWQ9dGhpcy5lbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpKyJbIjtkKz10aGlzLmRpbWVuc2lvbnMuam9pbigpKyJdIjsiT1BBUVVFIiE9PXRoaXMuZWxlbWVudFR5cGUmJiJUT0tFTiIhPT10aGlzLmVsZW1lbnRUeXBlJiYwPHRoaXMuZGltZW5zaW9ucy5sZW5ndGgmJnRoaXMubGF5b3V0JiYKKGQrPXRoaXMuaHVtYW5MYXlvdXRTdHJpbmcodGhpcy5sYXlvdXQpKTtyZXR1cm4gZH1odW1hbkxheW91dFN0cmluZyhkKXtyZXR1cm4iU1BBUlNFIj09ZC5mb3JtYXQ/InNwYXJzZXsiK2QubWF4U3BhcnNlRWxlbWVudHMrIn0iOiJERU5TRSI9PWQuZm9ybWF0PyJ7IitkLm1pbm9yVG9NYWpvci5qb2luKCkrIn0iOiIifX1hLlNoYXBlPWN9KShycHx8KHJwPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vbWVtb3J5LXZpZXdlci9sb2dpY2FsLWJ1ZmZlci5qcwp2YXIgc3A7KGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCl7dGhpcy5pbnN0cnVjdGlvbk5hbWU9dGhpcy5jb21wdXRhdGlvbk5hbWU9IiI7dGhpcy5zaGFwZUluZGV4PVtdO3RoaXMuaWQ9cGFyc2VJbnQoZC5pZCwxMCk7dGhpcy5zaXplPXBhcnNlSW50KGQuc2l6ZSwxMCk7dGhpcy5jb2xvcj1wYXJzZUludChkLmNvbG9yLDEwKTt0aGlzLmluaXRCdWZmZXJMb2NhdGlvbl8oZC5kZWZpbmVkQXQpfWluaXRCdWZmZXJMb2NhdGlvbl8oZCl7ZCYmKHRoaXMuY29tcHV0YXRpb25OYW1lPWQuY29tcHV0YXRpb25OYW1lLHRoaXMuaW5zdHJ1Y3Rpb25OYW1lPWQuaW5zdHJ1Y3Rpb25OYW1lLHRoaXMuc2hhcGVJbmRleD1kLnNoYXBlSW5kZXgubWFwKGY9PnBhcnNlSW50KGYsMTApKSl9fWEuTG9naWNhbEJ1ZmZlcj1jfSkoc3B8fChzcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL21lbW9yeS12aWV3ZXIvYnVmZmVyLWFsbG9jYXRpb24uanMKdmFyIHRwOyhmdW5jdGlvbihhKXtjbGFzcyBje2NvbnN0cnVjdG9yKGQpe3RoaXMuaW5kZXg9cGFyc2VJbnQoZC5pbmRleCwxMCk7dGhpcy5zaXplPXBhcnNlSW50KGQuc2l6ZSwxMCk7dGhpcy5pc1RocmVhZExvY2FsPWQuaXNUaHJlYWRMb2NhbHx8ITE7dGhpcy5hc3NpZ25lZD1kLmFzc2lnbmVkLm1hcChmPT5uZXcgdXAuQnVmZmVyQWxsb2NhdGlvbkFzc2lnbmVkKGYpKTt0aGlzLmdyb3VwTmFtZT10aGlzLmdldEdyb3VwTmFtZShkKX1nZXRHcm91cE5hbWUoZCl7cmV0dXJuIGQuaXNFbnRyeUNvbXB1dGF0aW9uUGFyYW1ldGVyPyJQYXJhbWV0ZXIiOmQubWF5YmVMaXZlT3V0PyJPdXRwdXQiOmQuaXNUaHJlYWRMb2NhbD8iVGhyZWFkLWxvY2FsIjoiVGVtcG9yYXJ5In19YS5CdWZmZXJBbGxvY2F0aW9uPWN9KSh0cHx8KHRwPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vbWVtb3J5LXZpZXdlci9idWZmZXItYWxsb2NhdGlvbi1hc3NpZ25lZC5qcwp2YXIgdXA7KGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCl7dGhpcy5sb2dpY2FsQnVmZmVySWQ9cGFyc2VJbnQoZC5sb2dpY2FsQnVmZmVySWQsMTApO3RoaXMub2Zmc2V0PXBhcnNlSW50KGQub2Zmc2V0LDEwKTt0aGlzLnNpemU9cGFyc2VJbnQoZC5zaXplLDEwKX19YS5CdWZmZXJBbGxvY2F0aW9uQXNzaWduZWQ9Y30pKHVwfHwodXA9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9tZW1vcnktdmlld2VyL2hsby1pbnN0cnVjdGlvbi5qcwp2YXIgdnA7KGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCl7dGhpcy5uYW1lPWQubmFtZT9kLm5hbWU6IiI7dGhpcy5vcGNvZGU9ZC5vcGNvZGU/ZC5vcGNvZGU6IiI7dGhpcy5zaGFwZT1kLnNoYXBlP25ldyBycC5TaGFwZShkLnNoYXBlKTpudWxsO2QubWV0YWRhdGEmJih0aGlzLnRmT3BOYW1lPWQubWV0YWRhdGEub3BOYW1lP2QubWV0YWRhdGEub3BOYW1lOiIiKX19YS5IbG9JbnN0cnVjdGlvbj1jfSkodnB8fCh2cD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL21lbW9yeS12aWV3ZXIvbWVtb3J5LXVzYWdlLmpzCnZhciB3cDsKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCl7dGhpcy5idWZmZXJzXz1bXTt0aGlzLmlkVG9CdWZmZXJfPXt9O3RoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fPXt9O3RoaXMubmFtZVRvSGxvXz17fTt0aGlzLnVucGFkZGVkUGVha0hlYXBTaXplQnl0ZXM9dGhpcy5wZWFrSGVhcFNpemVCeXRlcz10aGlzLnJlc3RfPXRoaXMubkNvbG9yXz0wO3RoaXMucGVha0xvZ2ljYWxCdWZmZXJzPVtdO3RoaXMuaW5kZWZpbml0ZU1lbW9yeVVzYWdlQnl0ZXM9dGhpcy5wZWFrSGVhcFNpemVQb3NpdGlvbj0wO3RoaXMuaGVhcFNpemVzPVtdO3RoaXMudW5wYWRkZWRIZWFwU2l6ZXM9W107dGhpcy5tYXhIZWFwPVtdO3RoaXMubWF4SGVhcEJ5U2l6ZT1bXTt0aGlzLmJ5U2l6ZVRvTWF4SGVhcD1bXTt0aGlzLm1heEhlYXBUb0J5U2l6ZT1bXTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFucz17fTt0aGlzLnVuU2VlbkxvZ2ljYWxCdWZmZXJzXz1uZXcgU2V0O3RoaXMuc2VlbkJ1ZmZlckFsbG9jYXRpb25zXz1uZXcgU2V0Owp0aGlzLnNtYWxsQnVmZmVyU2l6ZT0xNjM4NDt0aGlzLmluaXRIbG9JbnN0cnVjdGlvbnNfKGQuaGxvTW9kdWxlKTt0aGlzLmluaXRNZW1vcnlVc2FnZV8oZC5idWZmZXJBc3NpZ25tZW50KTt0aGlzLmluaXRNYXhIZWFwXygpfWluaXRIbG9JbnN0cnVjdGlvbnNfKGQpe2lmKGQpZm9yKGNvbnN0IGYgb2YgZC5jb21wdXRhdGlvbnMpZm9yKGNvbnN0IGcgb2YgZi5pbnN0cnVjdGlvbnMpZy5uYW1lJiYodGhpcy5uYW1lVG9IbG9fW2cubmFtZV09bmV3IHZwLkhsb0luc3RydWN0aW9uKGcpKTtlbHNlIGNvbnNvbGUud2FybigiTWlzc2luZyBobG9Nb2R1bGUsIHNraXBwaW5nIHVucGFkZGVkIGFsbG9jYXRpb24gc2l6ZSBhbmFseXNpcyIpfWluaXRNZW1vcnlVc2FnZV8oZCl7ZD8odGhpcy5pbml0QnVmZmVyc18oZCksdGhpcy5pbml0QWxsb2NhdGlvbnNfKGQpLChkPXRoaXMuZ2V0SGJtSGVhcFRyYWNlXyhkKSk/dGhpcy5maW5kUGVha01lbW9yeVVzYWdlXyhkKTpjb25zb2xlLmVycm9yKCJNaXNzaW5nIGhibSBoZWFwIHNpbXVsYXRvciB0cmFjZS4iKSk6CmNvbnNvbGUuZXJyb3IoIk5vIGJ1ZmZlciBhc3NpZ25tZW50IGluZm8iKX1nZXRIYm1IZWFwVHJhY2VfKGQpe2Zvcihjb25zdCBmIG9mIGQuaGVhcFNpbXVsYXRvclRyYWNlcylmb3IoY29uc3QgZyBvZiBmLmV2ZW50cylpZihnLmJ1ZmZlcklkJiYoZD10aGlzLmlkVG9CdWZmZXJfW2cuYnVmZmVySWRdKSl7aWYoMCE9ZC5jb2xvcilicmVhaztyZXR1cm4gZn1yZXR1cm4gbnVsbH1pbml0QnVmZmVyc18oZCl7Zm9yKGxldCBmIG9mIGQubG9naWNhbEJ1ZmZlcnMpZD1uZXcgc3AuTG9naWNhbEJ1ZmZlcihmKSx0aGlzLmJ1ZmZlcnNfLnB1c2goZCksdGhpcy5pZFRvQnVmZmVyX1tkLmlkXT1kLHRoaXMudW5TZWVuTG9naWNhbEJ1ZmZlcnNfLmFkZChkLmlkKX1pbml0QWxsb2NhdGlvbnNfKGQpe2Zvcihjb25zdCBmIG9mIGQuYnVmZmVyQWxsb2NhdGlvbnMpe2Q9bmV3IHRwLkJ1ZmZlckFsbG9jYXRpb24oZik7Zm9yKGNvbnN0IGcgb2YgZi5hc3NpZ25lZClnLmxvZ2ljYWxCdWZmZXJJZCYmKHRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2cubG9naWNhbEJ1ZmZlcklkXT0KZCl9fW5ld0hlYXBPYmplY3RfKGQsZixnLGwsayl7Y29uc3Qgbj1nP3FwLmJ5dGVzVG9NaUIoZy51bnBhZGRlZEhlYXBTaXplQnl0ZXMoKSk6MDtyZXR1cm57aW5zdHJ1Y3Rpb25OYW1lOmYuaW5zdHJ1Y3Rpb25OYW1lLGxvZ2ljYWxCdWZmZXJJZDpmLmlkLHVucGFkZGVkU2l6ZU1pQjpuLHRmT3BOYW1lOmwudGZPcE5hbWUsb3Bjb2RlOmwub3Bjb2RlLHNpemVNaUI6cXAuYnl0ZXNUb01pQihmLnNpemUpLGNvbG9yOmQsc2hhcGU6Zz9nLmh1bWFuU3RyaW5nV2l0aExheW91dCgpOiIiLGdyb3VwTmFtZTprfX1hZGRIZWFwT2JqZWN0XyhkLGYsZyl7aWYoZi5zaXplPD1kLnNtYWxsQnVmZmVyU2l6ZSlkLnJlc3RfKz1mLnNpemU7ZWxzZSBpZihmLmluc3RydWN0aW9uTmFtZSl7dmFyIGw9ZC5uYW1lVG9IbG9fW2YuaW5zdHJ1Y3Rpb25OYW1lXTtpZihsKXt2YXIgaz1sLnNoYXBlLnJlc29sdmVTaGFwZUluZGV4KGYuc2hhcGVJbmRleCk7ZC5tYXhIZWFwLnB1c2goZC5uZXdIZWFwT2JqZWN0XyhkLm5Db2xvcl8rKywKZixrLGwsZykpfX19aW5pdE1heEhlYXBfKCl7Zm9yKHZhciBkIG9mIHRoaXMucGVha0xvZ2ljYWxCdWZmZXJzKXtjb25zdCBmPXRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2RdO3RoaXMuYWRkSGVhcE9iamVjdF8odGhpcyx0aGlzLmlkVG9CdWZmZXJfW2RdLGY/Zi5ncm91cE5hbWU6IiIpfTAhPXRoaXMucmVzdF8mJihkPSJzbWFsbCAoXHgzYyIrdGhpcy5zbWFsbEJ1ZmZlclNpemUvMTAyNCsiIEtpQikiLHRoaXMubWF4SGVhcC5wdXNoKHtpbnN0cnVjdGlvbk5hbWU6ZCxzaXplTWlCOnFwLmJ5dGVzVG9NaUIodGhpcy5yZXN0XyksY29sb3I6MCxncm91cE5hbWU6ZH0pKTtkPXRoaXMubWF4SGVhcC5tYXAoZnVuY3Rpb24oZixnKXtyZXR1cm57aW5kOmcsdmFsOmZ9fSk7ZC5zb3J0KChmLGcpPT5nLnZhbC5zaXplTWlCLWYudmFsLnNpemVNaUIpO3RoaXMubWF4SGVhcEJ5U2l6ZT1kLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi52YWx9KTt0aGlzLmJ5U2l6ZVRvTWF4SGVhcD1kLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5pbmR9KTsKdGhpcy5tYXhIZWFwVG9CeVNpemUubGVuZ3RoPXRoaXMubWF4SGVhcC5sZW5ndGg7Zm9yKGQ9MDtkPHRoaXMuYnlTaXplVG9NYXhIZWFwLmxlbmd0aDtkKyspdGhpcy5tYXhIZWFwVG9CeVNpemVbdGhpcy5ieVNpemVUb01heEhlYXBbZF1dPWR9ZmluZFBlYWtNZW1vcnlVc2FnZV8oZCl7bGV0IGY9W10sZz1bXTt2YXIgbD1bXTtsZXQgaz1bXSxuPTAscD0wLHE9MCxyPTAsdD0wO2Zvcihjb25zdCB6IG9mIGQuZXZlbnRzKXtmLnB1c2gocXAuYnl0ZXNUb01pQihuKSk7Zy5wdXNoKHFwLmJ5dGVzVG9NaUIocCkpO2NvbnN0IHg9cGFyc2VJbnQoei5idWZmZXJJZCwxMCk7ZD10aGlzLmlkVG9CdWZmZXJfW3hdO3RoaXMudW5TZWVuTG9naWNhbEJ1ZmZlcnNfLmRlbGV0ZSh4KTt2YXIgdj10aGlzLmlkVG9CdWZmZXJBbGxvY2F0aW9uX1t4XTt2JiZ0aGlzLnNlZW5CdWZmZXJBbGxvY2F0aW9uc18uYWRkKHYuaW5kZXgpO3Y9bnVsbDtkLmluc3RydWN0aW9uTmFtZSYmIiIhPWQuaW5zdHJ1Y3Rpb25OYW1lJiYKKHY9dGhpcy5uYW1lVG9IbG9fW2QuaW5zdHJ1Y3Rpb25OYW1lXS5zaGFwZS5yZXNvbHZlU2hhcGVJbmRleChkLnNoYXBlSW5kZXgpKTtzd2l0Y2goei5raW5kLnRvU3RyaW5nKCkpe2Nhc2UgIkFMTE9DIjpjYXNlICJTSEFSRV9XSVRIIjpsLnB1c2goeCk7bis9ZC5zaXplO3YmJihwKz12LnVucGFkZGVkSGVhcFNpemVCeXRlcygpKTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFuc1t4XT1bZi5sZW5ndGgsLTFdO24+cSYmKHE9bixyPXAsdD1mLmxlbmd0aCxrPWwuc2xpY2UoKSk7YnJlYWs7Y2FzZSAiRlJFRSI6bD1sLmZpbHRlcihDPT5DIT09eCk7bi09ZC5zaXplO3YmJihwLT12LnVucGFkZGVkSGVhcFNpemVCeXRlcygpKTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFuc1t4XVsxXT1mLmxlbmd0aDswPm4mJmNvbnNvbGUuZXJyb3IoImhlYXBfc2l6ZV9ieXRlcyBceDNjIDAiKTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKCJFUlJPUjogdW5rbm93biBoZWFwIGV2ZW50IGtpbmQ6Iix6KX19Zi5wdXNoKHFwLmJ5dGVzVG9NaUIobikpOwpsPXRoaXMuZmluZEluZGVmaW5pdGVNZW1vcnlVc2FnZV8odGhpcy51blNlZW5Mb2dpY2FsQnVmZmVyc18pO3RoaXMucGVha0hlYXBTaXplQnl0ZXM9cStsO3RoaXMudW5wYWRkZWRQZWFrSGVhcFNpemVCeXRlcz1yK2w7dGhpcy5wZWFrTG9naWNhbEJ1ZmZlcnM9azt0aGlzLnBlYWtIZWFwU2l6ZVBvc2l0aW9uPXQ7Y29uc3QgeT1xcC5ieXRlc1RvTWlCKGwpO3RoaXMuaGVhcFNpemVzPWYubWFwKHo9PnoreSk7dGhpcy51bnBhZGRlZEhlYXBTaXplcz1nLm1hcCh6PT56K3kpfWZpbmRJbmRlZmluaXRlTWVtb3J5VXNhZ2VfKGQpe2xldCBmPTA7ZC5mb3JFYWNoKGc9Pntjb25zdCBsPXRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2ddO2wuaXNUaHJlYWRMb2NhbHx8dGhpcy5zZWVuQnVmZmVyQWxsb2NhdGlvbnNfLmhhcyhsLmluZGV4KXx8KHRoaXMuc2VlbkJ1ZmZlckFsbG9jYXRpb25zXy5hZGQobC5pbmRleCksZis9bC5zaXplLHRoaXMuYWRkSGVhcE9iamVjdF8odGhpcyx0aGlzLmlkVG9CdWZmZXJfW2ddLApsLmdyb3VwTmFtZSkpfSk7cmV0dXJuIHRoaXMuaW5kZWZpbml0ZU1lbW9yeVVzYWdlQnl0ZXM9Zn19YS5NZW1vcnlVc2FnZT1jfSkod3B8fCh3cD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL21lbW9yeS12aWV3ZXIvbXYtbGluZS1jaGFydC5qcwp2YXIgeHA7CihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJtdi1saW5lLWNoYXJ0Iixwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhQ2hhbmdlZCJ9LGFjdGl2ZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfcmVuZGVyU3BhbnMifSxidWZmZXJTaXplczp7dHlwZTpBcnJheSxub3RpZnk6ITB9LHVucGFkZGVkQnVmZmVyU2l6ZXM6e3R5cGU6QXJyYXksbm90aWZ5OiEwfSxtYXhIZWFwOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sbWF4SGVhcEJ5U2l6ZTp7dHlwZTpBcnJheSxub3RpZnk6ITB9LHNwYW5QbG90Ont0eXBlOk9iamVjdCxub3RpZnk6ITB9LGNvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sX3NlbGVjdGVkRW50aXR5SW5TcmNDaGFydDp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2VsZWN0ZWRFbnRpdHlDaGFuZ2VkIn0sX3NlbGVjdGVkRW50aXR5SW5Ec3RDaGFydDp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLApvYnNlcnZlcjoiX3NlbGVjdGVkRW50aXR5Q2hhbmdlZCJ9LF9zeW1ib2xUb0V2ZW50Q2FsbGJhY2s6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgTWFwfX0sX21ha2VDaGFydERhdGFzZXQoKXtpZih0aGlzLmRhdGEpe3RoaXMuYnVmZmVyU2l6ZXM9dGhpcy5kYXRhLmhlYXBTaXplcy5tYXAoKGQsZik9PltmLGRdKTt0aGlzLnVucGFkZGVkQnVmZmVyU2l6ZXM9dGhpcy5kYXRhLnVucGFkZGVkSGVhcFNpemVzLm1hcCgoZCxmKT0+W2YsZF0pO3ZhciBhPXRoaXMuZGF0YS5tYXhIZWFwO3RoaXMuZGF0YS5tYXhIZWFwLnJlZHVjZShmdW5jdGlvbihkLGYsZyl7YVtnXS5vZmZzZXQ9ZDtyZXR1cm4gZCtmLnNpemVNaUJ9LDApO3RoaXMubWF4SGVhcD1hO3ZhciBjPXRoaXMuZGF0YS5tYXhIZWFwQnlTaXplO3RoaXMuZGF0YS5tYXhIZWFwQnlTaXplLnJlZHVjZShmdW5jdGlvbihkLGYsZyl7Y1tnXS5vZmZzZXRCeVNpemU9ZDtyZXR1cm4gZCtmLnNpemVNaUJ9LDApO3RoaXMubWF4SGVhcEJ5U2l6ZT0KY319LF9kcmF3UHJvZ3JhbU9yZGVyKCl7aWYodGhpcy5kYXRhKXt2YXIgYT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXIsYz1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXIsZD1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhhLCJib3R0b20iKSxmPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGMsImxlZnQiKSxnPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZTtnLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHRoaXMuYnVmZmVyU2l6ZXMpKTtnLngoZnVuY3Rpb24odil7cmV0dXJuIHZbMF19LGEpLnkoZnVuY3Rpb24odil7cmV0dXJuIHZbMV19LGMpLmF0dHIoInN0cm9rZSIsInJlZCIpO3ZhciBsPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZTtsLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHRoaXMudW5wYWRkZWRCdWZmZXJTaXplcykpO2wueChmdW5jdGlvbih2KXtyZXR1cm4gdlswXX0sYSkueShmdW5jdGlvbih2KXtyZXR1cm4gdlsxXX0sYykuYXR0cigic3Ryb2tlIiwKImdyZXkiKTt2YXIgaz1uZXcgUGxvdHRhYmxlLlBsb3RzLlJlY3RhbmdsZSxuPXRoaXMuYnVmZmVyU2l6ZXMubGVuZ3RoLzQwO2suYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQoW3RoaXMuYnVmZmVyU2l6ZXNbdGhpcy5kYXRhLnBlYWtIZWFwU2l6ZVBvc2l0aW9uXV0pKTtrLngoZnVuY3Rpb24odil7cmV0dXJuIHZbMF0tbi8yfSxhKS55KGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGMpLngyKGZ1bmN0aW9uKHYpe3JldHVybiB2WzBdK24vMn0pLnkyKGZ1bmN0aW9uKHYpe3JldHVybiB2WzFdfSkuYXR0cigiZmlsbCIsInJlZCIpLmF0dHIoIm9wYWNpdHkiLC4zKTt2YXIgcD10aGlzLmNvbG9yU2NhbGUscT1uZXcgUGxvdHRhYmxlLlBsb3RzLlJlY3RhbmdsZSxyPXRoaXMuZGF0YS5sb2dpY2FsQnVmZmVyU3BhbnMsdD10aGlzLm1heEhlYXAubWFwKHY9Pntjb25zdCB5PXJbdi5sb2dpY2FsQnVmZmVySWRdO3JldHVybiB5P3tpZDp2LmxvZ2ljYWxCdWZmZXJJZCxzcGFuOnksc2l6ZTp2LnNpemVNaUIsCmNvbG9yOnYuY29sb3J9Om51bGx9KTt0PXQuZmlsdGVyKHY9Pm51bGwhPT12KTtxLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHQpKTtxLngoZnVuY3Rpb24odil7cmV0dXJuIHYuc3BhblswXX0sYSkueShmdW5jdGlvbigpe3JldHVybiAwfSxjKS54MihmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGFuWzFdfSkueTIoZnVuY3Rpb24odil7cmV0dXJuIHYuc2l6ZX0pLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHYpe3JldHVybih2LmNvbG9yJTEwKS50b1N0cmluZygpfSxwKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO3RoaXMuc3BhblBsb3Q9cTtwPW5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yO3AucmFuZ2UoWyJyZWQiLCJncmV5Il0pO3AuZG9tYWluKFsiU2l6ZXMiLCJVbnBhZGRlZCBTaXplcyJdKTtwPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5MZWdlbmQocCk7cC5tYXhFbnRyaWVzUGVyUm93KDIpO2E9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyaWRsaW5lcyhhLGMpOwpnPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5Hcm91cChbayxnLGwsYSxxXSk7ZD1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuVGFibGUoW1tudWxsLHBdLFtmLGddLFtudWxsLGRdXSk7Zj1kMy5zZWxlY3QodGhpcy4kLmNoYXJ0ZGl2KTtmLnNlbGVjdEFsbCgiLmNvbXBvbmVudCIpLnJlbW92ZSgpO2QucmVuZGVyVG8oZil9fSxfZHJhd01heEhlYXAoKXtsZXQgYT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXIsYz1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXI7bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMoYywidG9wIik7bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMoYSwibGVmdCIpO2xldCBkPXRoaXMuY29sb3JTY2FsZTtkMy5zZWxlY3QodGhpcy4kLm1heGhlYXBjaGFydCkuc2VsZWN0QWxsKCIuY29tcG9uZW50IikucmVtb3ZlKCk7ZDMuc2VsZWN0KHRoaXMuJC5tYXhoZWFwc2l6ZWNoYXJ0KS5zZWxlY3RBbGwoIi5jb21wb25lbnQiKS5yZW1vdmUoKTt0aGlzLl9tYXhIZWFwQ2hhcnRNb3VzZU1vdmVLZXkmJgoodGhpcy5fdW5saXN0ZW4odGhpcy5fbWF4SGVhcENoYXJ0TW91c2VNb3ZlS2V5KSx0aGlzLl9tYXhIZWFwQ2hhcnRNb3VzZU1vdmVLZXk9bnVsbCk7dGhpcy5fbWF4SGVhcFNpemVDaGFydE1vdXNlTW92ZUtleSYmKHRoaXMuX3VubGlzdGVuKHRoaXMuX21heEhlYXBTaXplQ2hhcnRNb3VzZU1vdmVLZXkpLHRoaXMuX21heEhlYXBTaXplQ2hhcnRNb3VzZU1vdmVLZXk9bnVsbCk7bGV0IGY9bmV3IFBsb3R0YWJsZS5QbG90cy5SZWN0YW5nbGU7Zi5hZGREYXRhc2V0KG5ldyBQbG90dGFibGUuRGF0YXNldCh0aGlzLm1heEhlYXApKS54KGZ1bmN0aW9uKGwpe3JldHVybiBsLm9mZnNldH0sYykueShmdW5jdGlvbigpe3JldHVybiAwfSxhKS54MihmdW5jdGlvbihsKXtyZXR1cm4gbC5vZmZzZXQrbC5zaXplTWlCfSkueTIoZnVuY3Rpb24oKXtyZXR1cm4gMTJ9KS5hdHRyKCJmaWxsIixmdW5jdGlvbihsKXtyZXR1cm4obC5jb2xvciUxMCkudG9TdHJpbmcoKX0sZCkuYXR0cigib3BhY2l0eSIsCiIwLjYiKS5yZW5kZXJUbyhkMy5zZWxlY3QodGhpcy4kLm1heGhlYXBjaGFydCkpO2xldCBnPW5ldyBQbG90dGFibGUuUGxvdHMuUmVjdGFuZ2xlO2cuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodGhpcy5tYXhIZWFwQnlTaXplKSkueChmdW5jdGlvbihsKXtyZXR1cm4gbC5vZmZzZXRCeVNpemV9LGMpLnkoZnVuY3Rpb24oKXtyZXR1cm4gMH0sYSkueDIoZnVuY3Rpb24obCl7cmV0dXJuIGwub2Zmc2V0QnlTaXplK2wuc2l6ZU1pQn0pLnkyKGZ1bmN0aW9uKCl7cmV0dXJuIDEyfSkuYXR0cigiZmlsbCIsZnVuY3Rpb24obCl7cmV0dXJuKGwuY29sb3IlMTApLnRvU3RyaW5nKCl9LGQpLmF0dHIoIm9wYWNpdHkiLCIwLjYiKS5yZW5kZXJUbyhkMy5zZWxlY3QodGhpcy4kLm1heGhlYXBzaXplY2hhcnQpKTt0aGlzLl9tYXhIZWFwQ2hhcnRNb3VzZU1vdmVLZXk9dGhpcy5fbGlzdGVuKHRoaXMuJC5tYXhoZWFwY2hhcnQsIm1vdXNlbW92ZSIsbD0+e3RoaXMuX29uSG92ZXJJbnRlcmFjdGlvbihsLApmLGcsdGhpcy5kYXRhLm1heEhlYXBUb0J5U2l6ZSl9LHtwYXNzaXZlOiEwfSk7dGhpcy5fbWF4SGVhcFNpemVDaGFydE1vdXNlTW92ZUtleT10aGlzLl9saXN0ZW4odGhpcy4kLm1heGhlYXBzaXplY2hhcnQsIm1vdXNlbW92ZSIsbD0+e3RoaXMuX29uSG92ZXJJbnRlcmFjdGlvbihsLGcsZix0aGlzLmRhdGEuYnlTaXplVG9NYXhIZWFwKX0se3Bhc3NpdmU6ITB9KX0sX2xpc3RlbihhLGMsZCxmPW51bGwpe2NvbnN0IGc9U3ltYm9sKCk7YS5hZGRFdmVudExpc3RlbmVyKGMsZCxmKTt0aGlzLl9zeW1ib2xUb0V2ZW50Q2FsbGJhY2suc2V0KGcse2V2ZW50TmFtZTpjLG5vZGU6YSxjYWxsYmFjazpkLG9wdGlvbnM6Zn0pO3JldHVybiBnfSxfdW5saXN0ZW4oYSl7Y29uc29sZS5hc3NlcnQodGhpcy5fc3ltYm9sVG9FdmVudENhbGxiYWNrLmhhcyhhKSwiQ2Fubm90IHVubGlzdGVuIGFuIHVua25vd24gZXZlbnQiKTthPXRoaXMuX3N5bWJvbFRvRXZlbnRDYWxsYmFjay5nZXQoYSk7Y29uc3Qge2NhbGxiYWNrOmMsCmV2ZW50TmFtZTpkLG5vZGU6ZixvcHRpb25zOmd9PWE7Zi5yZW1vdmVFdmVudExpc3RlbmVyKGQsYyxnKX0sX29uSG92ZXJJbnRlcmFjdGlvbihhLGMsZCxmKXt2YXIgZz1jLnJvb3RFbGVtZW50KCkubm9kZSgpOyh7bGVmdDpnfT1nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtjb25zdCBsPWEuY2xpZW50WC1nOyhhPWMuZW50aXRpZXMoKS5maW5kKGs9Pntjb25zdCB7eDpuLHdpZHRoOnB9PWsuYm91bmRzO3JldHVybiBuPD1sJiZuK3A+PWx9KSk/KHRoaXMuYWN0aXZlPWEuZGF0dW0sdGhpcy5fc2VsZWN0ZWRFbnRpdHlJblNyY0NoYXJ0PWEsdGhpcy5fc2VsZWN0ZWRFbnRpdHlJbkRzdENoYXJ0PWQuZW50aXRpZXMoKVtmW2EuaW5kZXhdXSk6dGhpcy5hY3RpdmU9dGhpcy5fc2VsZWN0ZWRFbnRpdHlJbkRzdENoYXJ0PXRoaXMuX3NlbGVjdGVkRW50aXR5SW5TcmNDaGFydD1udWxsfSxfc2VsZWN0ZWRFbnRpdHlDaGFuZ2VkKGEsYyl7YyYmYy5zZWxlY3Rpb24uYXR0cigib3BhY2l0eSIsCiIwLjYiKTthJiZhLnNlbGVjdGlvbi5hdHRyKCJvcGFjaXR5IiwiMS4wIil9LF9yZW5kZXJTcGFucyhhKXt0aGlzLnNwYW5QbG90JiYodGhpcy5zcGFuUGxvdC5zZWxlY3Rpb25zKCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMCIpLGEmJnRoaXMuc3BhblBsb3QuZW50aXRpZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2Muc2VsZWN0aW9uLmF0dHIoImZpbGwtb3BhY2l0eSIsYy5kYXR1bS5pZD09PWEubG9naWNhbEJ1ZmZlcklkPzE6MCl9KSl9LF9yZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLmRhdGEmJih0aGlzLmNvbG9yU2NhbGU9bmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3IoIkNhdGVnb3J5MTAiKSx0aGlzLl9tYWtlQ2hhcnREYXRhc2V0KCksdGhpcy5fZHJhd1Byb2dyYW1PcmRlcigpLHRoaXMuX2RyYXdNYXhIZWFwKCkpfSxfZGF0YUNoYW5nZWQoYSl7YSYmdGhpcy5fcmVkcmF3KCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVkcmF3KCl9fSl9KSh4cHx8KHhwPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vbWVtb3J5LXZpZXdlci9idWZmZXItZGV0YWlscy5qcwp2YXIgeXA7CihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1tdi1iYXIiLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il91cGRhdGVWYWx1ZSJ9fSxfdXBkYXRlVmFsdWU6ZnVuY3Rpb24oYSl7Y29uc3QgYz1xcC5mbGFtZUNvbG9yKGEpO2E9cXAucGVyY2VudChhKTt0aGlzLnN0eWxlLmJhY2tncm91bmQ9YGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHtjfSAke2F9LCAjY2NjICR7YX0pYH19KTtQb2x5bWVyKHtpczoiYnVmZmVyLWRldGFpbHMiLHByb3BlcnRpZXM6e25vZGU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX3VwZGF0ZUNhcmQifSxzaXplOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHVucGFkZGVkU2l6ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxwYWRkaW5nOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGV4cGFuc2lvbjp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSx1dGlsaXphdGlvbjp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfX0sCl91cGRhdGVDYXJkOmZ1bmN0aW9uKGEpe2lmKGEpe3RoaXMuc2l6ZT1hLnNpemVNaUIudG9GaXhlZCgxKTt2YXIgYz0icmdiKDE5MiwxOTIsMTkyKSI7YS51bnBhZGRlZFNpemVNaUImJih0aGlzLnVucGFkZGVkU2l6ZT1hLnVucGFkZGVkU2l6ZU1pQi50b0ZpeGVkKDEpLHRoaXMucGFkZGluZz0oYS5zaXplTWlCLWEudW5wYWRkZWRTaXplTWlCKS50b0ZpeGVkKDEpLHRoaXMudXRpbGl6YXRpb249YS51bnBhZGRlZFNpemVNaUIvYS5zaXplTWlCLHRoaXMuZXhwYW5zaW9uPSgxL3RoaXMudXRpbGl6YXRpb24pLnRvRml4ZWQoMSksYz1xcC5mbGFtZUNvbG9yKHRoaXMudXRpbGl6YXRpb24sLjcpKTt0aGlzLiQuY2FyZC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNhcmQtYmFja2dyb3VuZC1jb2xvciI6Y30pO3RoaXMuJC5zdWJoZWFkZXIuc3R5bGUuYmFja2dyb3VuZENvbG9yPWN9fSxfc3ViaGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLm9wY29kZT9hLm9wY29kZSsiIG9wZXJhdGlvbiI6CiIifX0pfSkoeXB8fCh5cD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL21lbW9yeS12aWV3ZXIvbWVtb3J5LXZpZXdlci1kYXNoYm9hcmQuanMKdmFyIHpwOwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoibWVtb3J5LXZpZXdlci1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19kYXRhOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6ImRhdGFDaGFuZ2VkXyJ9LGhsb01vZHVsZV86e3R5cGU6T2JqZWN0fSxtb2R1bGVOYW1lXzp7dHlwZTpTdHJpbmd9LHBlYWtIZWFwU2l6ZU1pQl86e3R5cGU6U3RyaW5nfSx1bnBhZGRlZFBlYWtIZWFwU2l6ZU1pQl86e3R5cGU6U3RyaW5nfSx1c2FnZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxhY3RpdmU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTpudWxsfX0sZGF0YUNoYW5nZWRfKGEpe2EmJmEuaGxvTW9kdWxlJiZhLmJ1ZmZlckFzc2lnbm1lbnQmJih0aGlzLmhsb01vZHVsZV89YS5obG9Nb2R1bGUsdGhpcy5tb2R1bGVOYW1lXz10aGlzLmhsb01vZHVsZV8ubmFtZT90aGlzLmhsb01vZHVsZV8ubmFtZToiIix0aGlzLnVzYWdlPW5ldyB3cC5NZW1vcnlVc2FnZShhKSx0aGlzLnBlYWtIZWFwU2l6ZU1pQl89cXAuYnl0ZXNUb01pQih0aGlzLnVzYWdlLnBlYWtIZWFwU2l6ZUJ5dGVzKS50b0ZpeGVkKDIpLAp0aGlzLnVucGFkZGVkUGVha0hlYXBTaXplTWlCXz1xcC5ieXRlc1RvTWlCKHRoaXMudXNhZ2UudW5wYWRkZWRQZWFrSGVhcFNpemVCeXRlcykudG9GaXhlZCgyKSl9fSl9KSh6cHx8KHpwPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcG9kLXZpZXdlci9wcm90by5qcwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BvZC12aWV3ZXIvZGV0YWlscy1jYXJkLmpzCnZhciBBcDsKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6ImRldGFpbHMtY2FyZCIscHJvcGVydGllczp7bm9kZXM6e3R5cGU6QXJyYXl9LF9uYW1lOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVOYW1lKG5vZGVzKSJ9LHN0ZXBCcmVha2Rvd25MYXllcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7a2V5OiJoaWdoRmxvcHNDb21wdXRlVXMiLGxhYmVsOiJIaWdoIGZsb3BzIGNvbXB1dGUifSx7a2V5OiJsb3dGbG9wc0NvbXB1dGVVcyIsbGFiZWw6IkxvdyBmbG9wcyBjb21wdXRlIn0se2tleToiaG9zdEluZmVlZER1cmF0aW9uVXMiLGxhYmVsOiJJbmZlZWQifSx7a2V5OiJob3N0T3V0ZmVlZER1cmF0aW9uVXMiLGxhYmVsOiJPdXRmZWVkIn0se2tleToiYWxsUmVkdWNlQ29tcHV0ZUR1cmF0aW9uVXMiLGxhYmVsOiJBbGxSZWR1Y2UgY29tcHV0ZSJ9LHtrZXk6ImFsbFJlZHVjZVN5bmNEdXJhdGlvblVzIixsYWJlbDoiQWxsUmVkdWNlIHN5bmMifSx7a2V5OiJzZW5kRHVyYXRpb25VcyIsbGFiZWw6IlNlbmQifSwKe2tleToicmVjdkR1cmF0aW9uVXMiLGxhYmVsOiJSZWN2In1dfX0sX2lzQWxsUmVkdWNlKGEpe3JldHVybiB2b2lkIDAhPWEucmVwbGljYUdyb3Vwc30sX2lzQ2hhbm5lbChhKXtyZXR1cm4gdm9pZCAwIT1hLmNoYW5uZWxJZH0sX2lzU3RlcChhKXtyZXR1cm4gdm9pZCAwIT1hLmhvc3ROYW1lfSxfaGFzUmVwbGljYUdyb3VwcyhhKXtyZXR1cm4gYS5yZXBsaWNhR3JvdXBzJiYwPGEucmVwbGljYUdyb3Vwcy5sZW5ndGh9LF9jb21wdXRlTmFtZTpmdW5jdGlvbihhKXtpZihhJiYwIT1hLmxlbmd0aCl7YT1hWzBdO2lmKHRoaXMuX2lzQ2hhbm5lbChhKSlyZXR1cm4iQ2hhbm5lbCAjICIrYS5jaGFubmVsSWQ7aWYodGhpcy5faXNBbGxSZWR1Y2UoYSkpcmV0dXJuIGEubmFtZTtpZih0aGlzLl9pc1N0ZXAoYSkpcmV0dXJuIlN0ZXAgYnJlYWtkb3duIG9mIGNoaXAgIithLmNoaXBJZCsiLCBjb3JlICIrYS5ub2RlSWR9fSxfYnl0ZXNUb01pQjpmdW5jdGlvbihhKXtyZXR1cm4gYS8xMDQ4NTc2fSwKX3NpemVNaUI6ZnVuY3Rpb24oYSl7aWYoYSlyZXR1cm4gdGhpcy5fZm9ybWF0KHRoaXMuX2J5dGVzVG9NaUIoYSkpfSxfYmFuZHdpZHRoOmZ1bmN0aW9uKGEsYyl7aWYoYSYmYylyZXR1cm4gdGhpcy5fZm9ybWF0KGEvYy8xMDczLjc0KX0sX2NoaXBJZDpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5mbG9vcihhLzIpfSxfbm9kZUlkOmZ1bmN0aW9uKGEpe3JldHVybiBhJjF9LF9mb3JtYXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YS50b0ZpeGVkKDIpfSxfZ2V0U3RlcEJyZWFrZG93blZhbHVlOmZ1bmN0aW9uKGEsYyl7aWYoYyYmYSlyZXR1cm4gdGhpcy5fZm9ybWF0KGFbY10/YVtjXTowKX0sX2dldFN0ZXBCcmVha2Rvd25QY3Q6ZnVuY3Rpb24oYSxjKXtpZihjJiZhJiZhLnRvdGFsRHVyYXRpb25VcyYmYVtjXSlyZXR1cm4oYVtjXS9hLnRvdGFsRHVyYXRpb25VcyoxMDApLnRvRml4ZWQoMikrIiUifX0pfSkoQXB8fChBcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BvZC12aWV3ZXIvc3RhY2stYmFyLWNoYXJ0LmpzCnZhciBCcDsKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InN0YWNrLWJhci1jaGFydCIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W10sb2JzZXJ2ZXI6Il9kYXRhQ2hhbmdlZCJ9LGFjdGl2ZUJhcjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSx4RG9tYWluRnVuYzp7dHlwZTpPYmplY3R9LHN0YWNrTGF5ZXJzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxvYnNlcnZlcjoiX29uU3RhY2tMYXllcnNDaGFuZ2VkIn19LHN0YWNrQmFyQ2hhcnQ6ZnVuY3Rpb24oYSl7aWYoYS5sZW5ndGgmJnRoaXMuaXNBdHRhY2hlZCYmMCE9dGhpcy5zdGFja0xheWVycy5sZW5ndGgpe3ZhciBjPXRoaXMuc3RhY2tMYXllcnMubWFwKHA9PnAua2V5KSxkPXRoaXMuc3RhY2tMYXllcnMubWFwKHA9PnAubGFiZWwpLGY9NTAqYS5sZW5ndGgsZz1kMy5zY2FsZUJhbmQoKS5yYW5nZShbMCxmXSkucGFkZGluZyguNCksbD1kMy5zY2FsZUxpbmVhcigpLnJhbmdlKFsyNTAsMF0pLGs9ZDMuc2NhbGVPcmRpbmFsKGQzLnNjaGVtZUNhdGVnb3J5MTApLmRvbWFpbihbMCwxOV0pLApuPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnQpLnNlbGVjdCgic3ZnIik7bi5lbXB0eSgpJiYobj1kMy5zZWxlY3QodGhpcy4kLmNoYXJ0KS5hcHBlbmQoInN2ZyIpLmF0dHIoIndpZHRoIixNYXRoLm1heCgxNjAwLGYrMTAwKzIwKSkuYXR0cigiaGVpZ2h0IiwzMDApLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMDAsMjApIiksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInggYXhpcyIpLnN0eWxlKCJmb250LXNpemUiLDE0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwyNTUpIiksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInkgYXhpcyIpLnN0eWxlKCJmb250LXNpemUiLDE0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwwKSIpKTtjPWQzLnN0YWNrKCkua2V5cyhjKS5vcmRlcihkMy5zdGFja09yZGVyTm9uZSkub2Zmc2V0KGQzLnN0YWNrT2Zmc2V0Tm9uZSkoYSk7Zy5kb21haW4oYS5tYXAodGhpcy54RG9tYWluRnVuYykpO2wuZG9tYWluKFswLApkMy5tYXgoY1tjLmxlbmd0aC0xXSxwPT5wWzBdK3BbMV0pXSkubmljZSgpO3RoaXMuZHJhd0xheWVycyhuLGMsZyxsLGspO3RoaXMuZHJhd0F4ZXMobixnLGwsMjUwKTthPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnQpLnNlbGVjdCgiLmxlZ2VuZCIpO2EuZW1wdHkoKSYmKGE9bi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsMTQpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSk7dGhpcy5kcmF3TGVnZW5kKGEsZCxrKX19LGRyYXdMYXllcnM6ZnVuY3Rpb24oYSxjLGQsZixnKXtsZXQgbD10aGlzO2E9YS5zZWxlY3RBbGwoIi5sYXllciIpLmRhdGEoYyk7Yz1hLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYXllciIpLm1lcmdlKGEpLnN0eWxlKCJmaWxsIiwoayxuKT0+ZyhuKSkuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShrPT5rKTtjLmVudGVyKCkuYXBwZW5kKCJyZWN0IikubWVyZ2UoYykuYXR0cigid2lkdGgiLApkLmJhbmR3aWR0aCgpKS5hdHRyKCJ5IixrPT5mKGtbMV0pKS5hdHRyKCJoZWlnaHQiLGs9PmYoa1swXSktZihrWzFdKSkuYXR0cigieCIsaz0+ZChsLnhEb21haW5GdW5jKGsuZGF0YSkpKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihrKXtkMy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiLC41KTtsLmFjdGl2ZUJhcj1rLmRhdGF9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJvcGFjaXR5IiwxKTtsLmFjdGl2ZUJhcj1udWxsfSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDFFMyk7YS5leGl0KCkucmVtb3ZlKCl9LGRyYXdBeGVzOmZ1bmN0aW9uKGEsYyxkKXthLnNlbGVjdCgiLnguYXhpcyIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpLmNhbGwoZDMuYXhpc0JvdHRvbShjKSk7YS5zZWxlY3QoIi55LmF4aXMiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMUUzKS5jYWxsKGQzLmF4aXNMZWZ0KGQpKX0sZHJhd0xlZ2VuZDpmdW5jdGlvbihhLApjLGQpe2E9YS5zZWxlY3RBbGwoImciKS5kYXRhKGMuc2xpY2UoKSk7YS5leGl0KCkucmVtb3ZlKCk7Yz1hLmVudGVyKCkuYXBwZW5kKCJnIik7Yy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwyMDApLmF0dHIoIndpZHRoIiwxOSkuYXR0cigiaGVpZ2h0IiwxOSk7Yy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyMjQpLmF0dHIoInkiLDkuNSkuYXR0cigiZHkiLCIwLjMyZW0iKTthPWMubWVyZ2UoYSk7YS5hdHRyKCJ0cmFuc2Zvcm0iLChmLGcpPT5gdHJhbnNsYXRlKCR7MTUwKmctNzUwKk1hdGguZmxvb3IoZy81KX0sICR7MzAqTWF0aC5mbG9vcihnLzUpfSlgKTthLnNlbGVjdCgicmVjdCIpLmF0dHIoImZpbGwiLChmLGcpPT5kKGcpKTthLnNlbGVjdCgidGV4dCIpLnRleHQoZj0+Zil9LHJlZHJhdzpmdW5jdGlvbihhKXthJiYwIT1hLmxlbmd0aCYmdGhpcy5zdGFja0JhckNoYXJ0KGEpfSxfb25TdGFja0xheWVyc0NoYW5nZWQ6ZnVuY3Rpb24oYSl7YSYmMCE9YS5sZW5ndGgmJnRoaXMucmVkcmF3KHRoaXMuZGF0YSl9LApfZGF0YUNoYW5nZWQ6ZnVuY3Rpb24oYSl7YSYmMCE9YS5sZW5ndGgmJnRoaXMucmVkcmF3KGEpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucmVkcmF3KHRoaXMuZGF0YSl9fSl9KShCcHx8KEJwPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcG9kLXZpZXdlci90b3BvbG9neS1ncmFwaC5qcwp2YXIgQ3A7CihmdW5jdGlvbigpe2NvbnN0IGE9IiNmZmZmZDkgI2VkZjhiMSAjYzdlOWI0ICM3ZmNkYmIgIzQxYjZjNCAjMWQ5MWMwICMyMjVlYTggIzI1MzQ5NCAjMDgxZDU4Ii5zcGxpdCgiICIpLGM9ZDMuc2NhbGVRdWFudGlsZSgpLmRvbWFpbihbMCwxXSkucmFuZ2UoYSk7UG9seW1lcih7aXM6InRvcG9sb2d5LWdyYXBoIixwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOk9iamVjdH0scnVuRW52aXJvbm1lbnQ6e3R5cGU6T2JqZWN0fSxtZXRyaWNzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sYWN0aXZlQmFyOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2FjdGl2ZUJhckNoYW5nZWQifSxzZWxlY3RlZE1ldHJpY0lkeDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3NlbGVjdGVkTWV0cmljSWR4Q2hhbmdlZCJ9LF90b3BvRGF0YTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlVG9wb0RhdGEoZGF0YSwgcnVuRW52aXJvbm1lbnQsIG1ldHJpY3MpIn0sX3hEaW1lbnNpb246e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVhEaW1lbnNpb24ocnVuRW52aXJvbm1lbnQpIn0sCl95RGltZW5zaW9uOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVZRGltZW5zaW9uKHJ1bkVudmlyb25tZW50KSJ9LF90b3RhbENvcmVDb3VudDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlVG90YWxDb3JlQ291bnQoX3hEaW1lbnNpb24sIF95RGltZW5zaW9uKSJ9LF90cHVUeXBlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUcHVUeXBlKHJ1bkVudmlyb25tZW50KSJ9LF9ob3N0WFN0cmlkZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlSG9zdFhTdHJpZGUoX3RwdVR5cGUpIn0sX2hvc3RHcmlkV2lkdGg6e3R5cGU6TnVtYmVyfSxfaG9zdEdyaWRIZWlnaHQ6e3R5cGU6TnVtYmVyfSxfbm9kZUdyaWRIZWlnaHQ6e3R5cGU6TnVtYmVyfSxfbm9kZUdyaWRXaWR0aDp7dHlwZTpOdW1iZXJ9LF9nU1ZHOnt0eXBlOk9iamVjdH19LG9ic2VydmVyczpbImRyYXdUb3BvbG9neShfdG9wb0RhdGEsIHJ1bkVudmlyb25tZW50KSJdLF9jb21wdXRlVG9wb0RhdGE6ZnVuY3Rpb24oZCwKZixnKXtpZihkJiZmJiZmLnRvcG9sb2d5JiZnKXt2YXIgbD1wYXJzZUludChmLnRvcG9sb2d5LnhEaW1lbnNpb24sMTApO3JldHVybiBPYmplY3Qua2V5cyhkLnBvZFN0YXRzUGVyQ29yZSkubWFwKGs9Pntjb25zdCBuPWQucG9kU3RhdHNQZXJDb3JlW2tdO2xldCBwPWcubWFwKHE9Pm5bcS5rZXldP25bcS5rZXldOjApO3JldHVybnt4ZGltOm4uY2hpcElkJWwseWRpbTpNYXRoLmZsb29yKG4uY2hpcElkL2wpLG5pZDpuLm5vZGVJZCxjaWQ6bi5jaGlwSWQscmlkOmQuY29yZUlkVG9SZXBsaWNhSWRNYXBba10saG9zdDpuLmhvc3ROYW1lLHZhbHVlczpwLHRvdGFsOm4udG90YWxEdXJhdGlvblVzfX0pfX0sX2NvbXB1dGVUcHVUeXBlOmZ1bmN0aW9uKGQpe2lmKGQpcmV0dXJuIGQudHB1VHlwZX0sX2NvbXB1dGVYRGltZW5zaW9uOmZ1bmN0aW9uKGQpe2lmKGQmJmQudG9wb2xvZ3kpcmV0dXJuIHBhcnNlSW50KGQudG9wb2xvZ3kueERpbWVuc2lvbiwxMCl9LF9jb21wdXRlWURpbWVuc2lvbjpmdW5jdGlvbihkKXtpZihkJiYKZC50b3BvbG9neSlyZXR1cm4gcGFyc2VJbnQoZC50b3BvbG9neS55RGltZW5zaW9uLDEwKX0sX2NvbXB1dGVUb3RhbENvcmVDb3VudDpmdW5jdGlvbihkLGYpe3JldHVybiBkKmYqMn0sX2NvbXB1dGVIb3N0WFN0cmlkZTpmdW5jdGlvbihkKXtyZXR1cm4iVFBVIHYzIj09ZD80OjJ9LHRvcG9sb2d5R3JhcGg6ZnVuY3Rpb24oZCl7dGhpcy5faG9zdEdyaWRXaWR0aD10aGlzLmdldEhvc3RHcmlkU2l6ZSh0aGlzLl9ob3N0WFN0cmlkZSk7dGhpcy5faG9zdEdyaWRIZWlnaHQ9dGhpcy5nZXRIb3N0R3JpZFNpemUoMik7dGhpcy5fbm9kZUdyaWRXaWR0aD0xNTt0aGlzLl9ub2RlR3JpZEhlaWdodD0zMDt2YXIgZj10aGlzLl94RGltZW5zaW9uL3RoaXMuX2hvc3RYU3RyaWRlO2NvbnN0IGc9dGhpcy5feURpbWVuc2lvbi8yLGw9QXJyYXkuZnJvbShBcnJheSh0aGlzLl94RGltZW5zaW9uKS5rZXlzKCkpLGs9QXJyYXkuZnJvbShBcnJheSh0aGlzLl95RGltZW5zaW9uKS5rZXlzKCkpO3RoaXMuX2dTVkd8fAoodGhpcy5fZ1NWRz1kMy5zZWxlY3QodGhpcy4kLnRwZ3JhcGgpLmFwcGVuZCgic3ZnIikuYXR0cigid2lkdGgiLDE2MjApLmF0dHIoImhlaWdodCIsZyp0aGlzLl9ob3N0R3JpZEhlaWdodCsxNTApLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgzMCw1MCkiKSx0aGlzLl9nU1ZHLmFwcGVuZCgic3ZnOmciKS5jbGFzc2VkKCJncmFwaCIsITApLHRoaXMuX2dTVkcuYXBwZW5kKCJzdmc6ZyIpLmNsYXNzZWQoImxpbmsiLCEwKSx0aGlzLl9nU1ZHLmFwcGVuZCgic3ZnOmRlZnMiKS5hcHBlbmQoInN2ZzptYXJrZXIiKS5hdHRyKCJpZCIsImFycm93IikuYXR0cigidmlld0JveCIsIjAgLTUgMTAgMTAiKS5hdHRyKCJtYXJrZXJXaWR0aCIsNSkuYXR0cigibWFya2VySGVpZ2h0Iiw1KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJzdmc6cGF0aCIpLnN0eWxlKCJzdHJva2UiLCJyZWQiKS5zdHlsZSgiZmlsbCIsInJlZCIpLmF0dHIoImQiLCJNMCwtNUwxMCwwTDAsNSIpKTsKbGV0IG49dGhpcy5fZ1NWRy5zZWxlY3QoIi5ncmFwaCIpO2Y9dGhpcy5jcmVhdGVIb3N0RGF0YShmLGcpO3RoaXMuZHJhd0hvc3RDYXJkcyhuLGYsdGhpcy5faG9zdEdyaWRXaWR0aCx0aGlzLl9ob3N0R3JpZEhlaWdodCk7dGhpcy5kcmF3Tm9kZUNhcmRzKG4sZCxjKTt0aGlzLmRyYXdMYWJlbHMobixsLGspO3RoaXMuZHJhd0xlZ2VuZChuLHRoaXMuX2hvc3RHcmlkSGVpZ2h0Kk1hdGguY2VpbCh0aGlzLl95RGltZW5zaW9uLzIpKzEwLGMpfSxnZXRIb3N0R3JpZFNpemUoZCl7cmV0dXJuIDMwKzEwKihkLTEpKzMwKmQrMTB9LGdldENoaXBYTG9jOmZ1bmN0aW9uKGQsZil7cmV0dXJuIGQqdGhpcy5faG9zdEdyaWRXaWR0aCsxNSs0MCpmfSxnZXRDaGlwWUxvYzpmdW5jdGlvbihkLGYpe3JldHVybiBkKnRoaXMuX2hvc3RHcmlkSGVpZ2h0KzE1KzQwKmZ9LGdldE5vZGVYTG9jOmZ1bmN0aW9uKGQsZixnKXtyZXR1cm4gdGhpcy5nZXRDaGlwWExvYyhkLGYpK2cqdGhpcy5fbm9kZUdyaWRXaWR0aH0sCmNyZWF0ZUhvc3REYXRhOmZ1bmN0aW9uKGQsZil7bGV0IGc9W107Zm9yKGxldCBsPTA7bDxkO2wrKylmb3IobGV0IGs9MDtrPGY7aysrKWcucHVzaCh7eGRpbTpsLHlkaW06a30pO3JldHVybiBnfSxkcmF3TGFiZWxzOmZ1bmN0aW9uKGQsZixnKXtmPWQuc2VsZWN0QWxsKCIueC1sYWJlbCIpLmRhdGEoZik7Zi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLm1lcmdlKGYpLnRleHQobD0+bCkuYXR0cigieCIsKGwsayk9PnRoaXMuZ2V0Q2hpcFhMb2MoTWF0aC5mbG9vcihrL3RoaXMuX2hvc3RYU3RyaWRlKSxrJXRoaXMuX2hvc3RYU3RyaWRlKSkuYXR0cigieSIsMCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE1LCAtNikiKS5hdHRyKCJjbGFzcyIsIngtbGFiZWwiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMUUzKTtmLmV4aXQoKS5yZW1vdmUoKTtkPWQuc2VsZWN0QWxsKCIueS1sYWJlbCIpLmRhdGEoZyk7ZC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLm1lcmdlKGQpLnRleHQobD0+CmwpLmF0dHIoIngiLDApLmF0dHIoInkiLChsLGspPT50aGlzLmdldENoaXBZTG9jKE1hdGguZmxvb3Ioay8yKSxrJTIpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoLTEyLDE1KSIpLmF0dHIoImNsYXNzIiwieS1sYWJlbCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3SG9zdENhcmRzOmZ1bmN0aW9uKGQsZixnLGwpe2Q9ZC5zZWxlY3RBbGwoIi5ob3N0IikuZGF0YShmKTtkLmVudGVyKCkuYXBwZW5kKCJyZWN0IikubWVyZ2UoZCkuYXR0cigieCIsaz0+ay54ZGltKmcpLmF0dHIoInkiLGs9PmsueWRpbSpsKS5hdHRyKCJyeCIsNCpnL2wpLmF0dHIoInJ5Iiw0KS5hdHRyKCJjbGFzcyIsImhvc3QgYm9yZGVyZWQiKS5hdHRyKCJ3aWR0aCIsZy0xMCkuYXR0cigiaGVpZ2h0IixsLTEwKS5hdHRyKCJib3JkZXIiLDEpLnN0eWxlKCJmaWxsIiwiRjBGMEYwIikuc3R5bGUoInN0cm9rZSIsCiJibGFjayIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3Tm9kZUNhcmRzOmZ1bmN0aW9uKGQsZixnKXtkPWQuc2VsZWN0QWxsKCIubm9kZSIpLmRhdGEoZik7bGV0IGw9dGhpcyxrPU1hdGgubWF4KHRoaXMuc2VsZWN0ZWRNZXRyaWNJZHgsMCk7ZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLm1lcmdlKGQpLmF0dHIoImlkIixuPT4icmlkIituLnJpZCkuYXR0cigieCIsbj0+dGhpcy5nZXROb2RlWExvYyhNYXRoLmZsb29yKG4ueGRpbS90aGlzLl9ob3N0WFN0cmlkZSksbi54ZGltJXRoaXMuX2hvc3RYU3RyaWRlLG4ubmlkKSkuYXR0cigieSIsbj0+dGhpcy5nZXRDaGlwWUxvYyhNYXRoLmZsb29yKG4ueWRpbS8yKSxuLnlkaW0lMikpLmF0dHIoInJ4IiwyKS5hdHRyKCJyeSIsNCkuYXR0cigiY2xhc3MiLCJub2RlIGJvcmRlcmVkIikuYXR0cigid2lkdGgiLHRoaXMuX25vZGVHcmlkV2lkdGgpLmF0dHIoImhlaWdodCIsCnRoaXMuX25vZGVHcmlkSGVpZ2h0KS5hdHRyKCJib3JkZXIiLDEpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJmaWxsIixuPT5nKG4udmFsdWVzW2tdL24udG90YWwpKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihuKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiY2VsbC1ob3ZlciIsITApLnN0eWxlKCJvcGFjaXR5IiwuNSk7dmFyIHA9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBxPWwuJC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1wLngrcC53aWR0aCs1LXEueDtwPXAueS1xLnk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5zdHlsZSgibGVmdCIscisicHgiKS5zdHlsZSgidG9wIixwKyJweCIpLnNlbGVjdCgiI3ZhbHVlIikudGV4dChsLl9nZXRUb29sVGlwVGV4dChuKSk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5jbGFzc2VkKCJoaWRkZW4iLCExKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiY2VsbC1ob3ZlciIsCiExKS5zdHlsZSgib3BhY2l0eSIsMSk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5jbGFzc2VkKCJoaWRkZW4iLCEwKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3TGlua3M6ZnVuY3Rpb24oZCxmKXtmJiZmLmxlbmd0aCYmZCYmKGQ9ZC5zZWxlY3QoIi5saW5rIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmKSxkLmVudGVyKCkuYXBwZW5kKCJzdmc6cGF0aCIpLm1lcmdlKGQpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwicmVkIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvdykiKS5hdHRyKCJkIixnPT50aGlzLmxpbmtUb1BhdGgoZ1swXSxnWzFdKSksZC5leGl0KCkucmVtb3ZlKCkpfSxjb3JlSWRUb1BvczpmdW5jdGlvbihkKXt2YXIgZj1NYXRoLmZsb29yKGQvMik7Y29uc3QgZz1mJXRoaXMuX3hEaW1lbnNpb247Zj1NYXRoLmZsb29yKGYvdGhpcy5feERpbWVuc2lvbik7CnJldHVybnt4OjcuNSt0aGlzLmdldE5vZGVYTG9jKE1hdGguZmxvb3IoZy90aGlzLl9ob3N0WFN0cmlkZSksZyV0aGlzLl9ob3N0WFN0cmlkZSxkJjEpLHk6dGhpcy5nZXRDaGlwWUxvYyhNYXRoLmZsb29yKGYvMiksZiUyKSsxNX19LGxpbmtUb1BhdGg6ZnVuY3Rpb24oZCxmKXtkPXRoaXMuY29yZUlkVG9Qb3MoZD9kOjApO2Y9dGhpcy5jb3JlSWRUb1BvcyhmP2Y6MCk7cmV0dXJuIk0gIitkLngrIiAiK2QueSsiTCAiK2YueCsiICIrZi55fSxfZ2V0VG9vbFRpcFRleHQ6ZnVuY3Rpb24oZCl7Y29uc3QgZj0wPD10aGlzLnNlbGVjdGVkTWV0cmljSWR4P3RoaXMubWV0cmljc1t0aGlzLnNlbGVjdGVkTWV0cmljSWR4XS5sYWJlbDoiIixnPTA8PXRoaXMuc2VsZWN0ZWRNZXRyaWNJZHg/ZC52YWx1ZXNbdGhpcy5zZWxlY3RlZE1ldHJpY0lkeF06MCxsPW5ldyBJbnRsLk51bWJlckZvcm1hdChuYXZpZ2F0b3IubGFuZ3VhZ2Use3N0eWxlOiJwZXJjZW50IixtaW5pbXVtRnJhY3Rpb25EaWdpdHM6Mn0pOwpyZXR1cm5gcG9zOiAoJHtkLnlkaW19LCAke2QueGRpbX0pLAogICAgICAgIGhvc3Q6ICR7ZC5ob3N0fSwKICAgICAgICBjaGlwIGlkOiAke2QuY2lkfSwKICAgICAgICBjb3JlIGlkOiAke2QubmlkfSwKICAgICAgICByZXBsaWNhIGlkOiAke2QucmlkfQogICAgICAgICR7Zj9gJHtmfSBzcGVuZHMgJHtnLnRvRml4ZWQoMil9XHUwMGI1cyBpbiB0b3RhbCwKICAgICAgICAgICAgdGFraW5nICR7bC5mb3JtYXQoZy9kLnRvdGFsKX0gb2YgYSBzdGVwLmA6IiJ9YH0sZHJhd0xlZ2VuZDpmdW5jdGlvbihkLGYsZyl7ZD1kLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEoWzBdLmNvbmNhdChnLnF1YW50aWxlcygpKSxsPT5sKTtkLmV4aXQoKS5yZW1vdmUoKTtnPWQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpO2cuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDYwKS5hdHRyKCJoZWlnaHQiLDMwKS5tZXJnZShkLnNlbGVjdCgicmVjdCIpKS5hdHRyKCJ4IiwobCxrKT0+NjAqaykuYXR0cigieSIsZikuc3R5bGUoImZpbGwiLChsLGspPT5hW2tdKTtnLmFwcGVuZCgidGV4dCIpLm1lcmdlKGQuc2VsZWN0KCJ0ZXh0IikpLnRleHQobD0+Ilx1MjI2NSAwLiIrTWF0aC5yb3VuZCgxMCpsKSkuYXR0cigieCIsKGwsayk9PjYwKmspLmF0dHIoInkiLGYrNjApfSxkcmF3VG9wb2xvZ3k6ZnVuY3Rpb24oZCxmKXtkJiZmJiZ0aGlzLmlzQXR0YWNoZWQmJgp0aGlzLnRvcG9sb2d5R3JhcGgoZCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5kcmF3VG9wb2xvZ3kodGhpcy5fdG9wb0RhdGEsdGhpcy5ydW5FbnZpcm9ubWVudCl9LF9zZWxlY3RlZE1ldHJpY0lkeENoYW5nZWQ6ZnVuY3Rpb24oZCl7MD5kfHxkMy5zZWxlY3QodGhpcy4kLnRwZ3JhcGgpLnNlbGVjdEFsbCgiLm5vZGUiKS5zdHlsZSgiZmlsbCIsZj0+YyhmLnZhbHVlc1tkXS9mLnRvdGFsKSl9LF9hY3RpdmVCYXJDaGFuZ2VkOmZ1bmN0aW9uKGQpe3ZhciBmPWQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVDYXRlZ29yeTEwKS5kb21haW4oZDMucmFuZ2UoMCwxOSkpO2lmKGQpaWYoZC5yZXBsaWNhR3JvdXBzJiYwPGQucmVwbGljYUdyb3Vwcy5sZW5ndGgpe2ZvcihsZXQgZz0wO2c8ZC5yZXBsaWNhR3JvdXBzLmxlbmd0aDtnKyspe2NvbnN0IGw9ZC5yZXBsaWNhR3JvdXBzW2ddLnJlcGxpY2FJZHM7Zm9yKGxldCBrPTA7azxsLmxlbmd0aDtrKyspZDMuc2VsZWN0KHRoaXMuJC50cGdyYXBoKS5zZWxlY3RBbGwoIiNyaWQiKwpsW2tdKS5zdHlsZSgiZmlsbCIsZihnJTIwKSl9dGhpcy5zZWxlY3RlZE1ldHJpY0lkeD0tMX1lbHNlIGQuc3JjQ29yZUlkcyYmKGY9ZC5zcmNDb3JlSWRzLm1hcCgoZyxsKT0+W2csZC5kc3RDb3JlSWRzW2xdXSksdGhpcy5kcmF3TGlua3ModGhpcy5fZ1NWRyxmKSl9LF9nZXRTZWxlY3RlZE1ldHJpY0xhYmVsOmZ1bmN0aW9uKGQsZil7cmV0dXJuIDA+Znx8IWR8fGY+ZC5sZW5ndGg/IlBsZWFzZSBzZWxlY3QgYSBtZXRyaWMiOiJDb2xvcjogIitkW2ZdLmxhYmVsfX0pfSkoQ3B8fChDcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3BvZC12aWV3ZXIvcG9kLXZpZXdlci1kYXNoYm9hcmQuanMKdmFyIERwOwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoicG9kLXZpZXdlci1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e2RhdGE6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZGF0YUNoYW5nZWQifSxhY3RpdmVEZXRhaWxzOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sYWN0aXZlQmFyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9hY3RpdmVCYXJDaGFuZ2VkIn0sY3VyU3RlcElkOnt0eXBlOk51bWJlcix2YWx1ZTowfSxfcG9kU3RhdHNNYXBzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2NvbXB1dGVQb2RTdGF0c01hcHMoZGF0YSkifSxfbWF4U3RlcElkOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVNYXhTdGVwSWQoX3BvZFN0YXRzTWFwcykifSxfZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVFcnJvck1lc3NhZ2UoX21heFN0ZXBJZCkifSxfcnVuRW52aXJvbm1lbnQ6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkVudmlyb25tZW50KGRhdGEpIn0sX3N0ZXBCcmVha2Rvd25MYXllcnM6e3R5cGU6T2JqZWN0LAp2YWx1ZTooKT0+W3trZXk6ImhpZ2hGbG9wc0NvbXB1dGVVcyIsbGFiZWw6IkhpZ2ggZmxvcHMgY29tcHV0ZSJ9LHtrZXk6Imxvd0Zsb3BzQ29tcHV0ZVVzIixsYWJlbDoiTG93IGZsb3BzIGNvbXB1dGUifSx7a2V5OiJob3N0SW5mZWVkRHVyYXRpb25VcyIsbGFiZWw6IkluZmVlZCJ9LHtrZXk6Imhvc3RPdXRmZWVkRHVyYXRpb25VcyIsbGFiZWw6Ik91dGZlZWQifSx7a2V5OiJhbGxSZWR1Y2VDb21wdXRlRHVyYXRpb25VcyIsbGFiZWw6IkFsbFJlZHVjZSBjb21wdXRlIn0se2tleToiYWxsUmVkdWNlU3luY0R1cmF0aW9uVXMiLGxhYmVsOiJBbGxSZWR1Y2Ugc3luYyJ9LHtrZXk6InNlbmREdXJhdGlvblVzIixsYWJlbDoiU2VuZCJ9LHtrZXk6InJlY3ZEdXJhdGlvblVzIixsYWJlbDoiUmVjdiJ9XX0sX3BvZFN0YXRzTWFwOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2NvbXB1dGVQb2RTdGF0c01hcChfcG9kU3RhdHNNYXBzLCBjdXJTdGVwSWQsIF9zdGVwQnJlYWtkb3duTGF5ZXJzKSJ9LApfc3RlcFN0YXRzOnt0eXBlOkFycmF5LHZhbHVlOm51bGwsY29tcHV0ZWQ6Il9jb21wdXRlU3RlcFN0YXRzKF9wb2RTdGF0c01hcCkifSxfY2hhbm5lbERiOnt0eXBlOkFycmF5LHZhbHVlOm51bGwsY29tcHV0ZWQ6Il9jb21wdXRlQ2hhbm5lbERiKF9wb2RTdGF0c01hcCkifSxfYWxsUmVkdWNlRGI6e3R5cGU6QXJyYXksdmFsdWU6bnVsbCxjb21wdXRlZDoiX2NvbXB1dGVBbGxSZWR1Y2VEYihfcG9kU3RhdHNNYXApIn0sX2NoYW5uZWxMYXllcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7a2V5OiJkdXJhdGlvblVzIixsYWJlbDoiRHVyYXRpb24gKHMpIn1dfSxfYWxsUmVkdWNlTGF5ZXJzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5be2tleToiZHVyYXRpb25VcyIsbGFiZWw6IkR1cmF0aW9uIChcdTAwYjVzKSJ9XX0sX3N0ZXBCcmVha2Rvd25GdW5jOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+YT0+YCgke2EuY2hpcElkfSwgJHthLm5vZGVJZH0pYH0sX2NoYW5uZWxGdW5jOnt0eXBlOk9iamVjdCwKdmFsdWU6KCk9PmE9PmEuY2hhbm5lbElkfSxfYWxsUmVkdWNlRnVuYzp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PmZ1bmN0aW9uKGEpe2lmKGEubmFtZSlyZXR1cm4gYT1hLm5hbWUucmVwbGFjZSgvbGwtcmVkdWNlLnx1c2lvbi58bGwtcmVkdWNlfHVzaW9uLywiIiksMTxhLmxlbmd0aD9hOmErIjAifX19LF9jb21wdXRlUG9kU3RhdHNNYXBzKGEpe3JldHVybiBhP2EucG9kU3RhdHNTZXF1ZW5jZS5wb2RTdGF0c01hcDpbXX0sX2NvbXB1dGVSdW5FbnZpcm9ubWVudChhKXtpZihhKXJldHVybiBhLnJ1bkVudmlyb25tZW50fSxfY29tcHV0ZU1heFN0ZXBJZChhKXtyZXR1cm4gYS5sZW5ndGgtMX0sX2NvbXB1dGVFcnJvck1lc3NhZ2UoYSl7cmV0dXJuIDA8PWE/IiI6IldBUk5JTkc6IE5vIHN0ZXAgdGltZSBtZWFzdXJlZC4gVGhpcyBtaWdodCBoYXBwZW4gaWYgeW91ciBwcm9maWxlIGR1cmF0aW9uIGlzIHRvbyBzaG9ydCwgdHJ5IGluY3JlYXNlIHByb2ZpbGUgZHVyYXRpb24gdG8gY292ZXIgYSBmdWxsIHN0ZXAuIElmIHlvdSBoYXZlIGFuIGluZmVyZW5jZSBqb2Igb3Igbm90IHVzZSBUcHVFc3RpbWF0b3IsIHBsZWFzZSBza2lwIHRoaXMgdG9vbC4ifSwKX3BvcHVsYXRlTG93RmxvcHNDb21wdXRlKGEsYyl7aWYoYSYmYyl7dmFyIGQ9YS5wb2RTdGF0c1BlckNvcmU7Zm9yKGxldCBmIGluIGQpe2xldCBnPWRbZl07aWYoZy5oYXNPd25Qcm9wZXJ0eSgibG93RmxvcHNDb21wdXRlVXMiKSlicmVhaztnLmxvd0Zsb3BzQ29tcHV0ZVVzPWcudG90YWxEdXJhdGlvblVzO2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKTEhPWwmJihnW2NbbF0ua2V5XXx8KGdbY1tsXS5rZXldPTApLGcubG93RmxvcHNDb21wdXRlVXMtPWdbY1tsXS5rZXldKX1yZXR1cm4gYX19LF9jb21wdXRlUG9kU3RhdHNNYXAoYSxjLGQpe2lmKCEoIWF8fDA+Y3x8Yz49YS5sZW5ndGgpJiZkKXJldHVybiB0aGlzLl9wb3B1bGF0ZUxvd0Zsb3BzQ29tcHV0ZShhW2NdLGQpfSxfY29tcHV0ZVN0ZXBTdGF0cyhhKXtpZihhJiZhLnBvZFN0YXRzUGVyQ29yZSl7dmFyIGM9YS5wb2RTdGF0c1BlckNvcmU7cmV0dXJuIE9iamVjdC5rZXlzKGMpLm1hcChkPT5jW2RdKS5zb3J0KChkLGYpPT4KZC5jaGlwSWQtZi5jaGlwSWQpfX0sX2NvbXB1dGVDaGFubmVsRGIoYSl7aWYoYSYmYS5jaGFubmVsRGImJiEoMD49YS5jaGFubmVsRGIubGVuZ3RoKSlyZXR1cm4gYS5jaGFubmVsRGIuc2xpY2UoKS5zb3J0KChjLGQpPT5kLmR1cmF0aW9uVXMtYy5kdXJhdGlvblVzKX0sX2NvbXB1dGVBbGxSZWR1Y2VEYihhKXtpZihhJiZhLmFsbFJlZHVjZU9wRGImJiEoMD49YS5hbGxSZWR1Y2VPcERiLmxlbmd0aCkpcmV0dXJuIGEuYWxsUmVkdWNlT3BEYi5zbGljZSgpLnNvcnQoKGMsZCk9PmQuZHVyYXRpb25Vcy1jLmR1cmF0aW9uVXMpfSxfZGF0YUNoYW5nZWQoYSl7YSYmKHRoaXMuY3VyU3RlcElkPTApfSxfYWN0aXZlQmFyQ2hhbmdlZChhKXthJiYodGhpcy5hY3RpdmVEZXRhaWxzPVthXSl9LF9nZXRTdGVwTnVtKGEpe3JldHVybiBhP2Euc3RlcE51bTowfX0pfSkoRHB8fChEcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2lyb24tYWpheC9pcm9uLXJlcXVlc3QuaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1yZXF1ZXN0Iixob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxwcm9wZXJ0aWVzOnt4aHI6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fSxyZXNwb25zZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxzdGF0dXM6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTowfSxzdGF0dXNUZXh0Ont0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITAsdmFsdWU6IiJ9LGNvbXBsZXRlczp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYyl7dGhpcy5yZXNvbHZlQ29tcGxldGVzPWE7dGhpcy5yZWplY3RDb21wbGV0ZXM9Y30uYmluZCh0aGlzKSl9fSxwcm9ncmVzczp7dHlwZTpPYmplY3QsCm5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sYWJvcnRlZDp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTohMX0sZXJyb3JlZDp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTohMX0sdGltZWRPdXQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAsdmFsdWU6ITF9fSxnZXQgc3VjY2VlZGVkKCl7aWYodGhpcy5lcnJvcmVkfHx0aGlzLmFib3J0ZWR8fHRoaXMudGltZWRPdXQpcmV0dXJuITE7dmFyIGE9dGhpcy54aHIuc3RhdHVzfHwwO3JldHVybiAwPT09YXx8MjAwPD1hJiYzMDA+YX0sc2VuZDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnhocjtpZigwPGMucmVhZHlTdGF0ZSlyZXR1cm4gbnVsbDtjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihuKXt0aGlzLl9zZXRQcm9ncmVzcyh7bGVuZ3RoQ29tcHV0YWJsZTpuLmxlbmd0aENvbXB1dGFibGUsbG9hZGVkOm4ubG9hZGVkLAp0b3RhbDpuLnRvdGFsfSk7dGhpcy5maXJlKCJpcm9uLXJlcXVlc3QtcHJvZ3Jlc3MtY2hhbmdlZCIse3ZhbHVlOnRoaXMucHJvZ3Jlc3N9KX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24obil7dGhpcy5fc2V0RXJyb3JlZCghMCk7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dGhpcy5yZWplY3RDb21wbGV0ZXMoYS5yZWplY3RXaXRoUmVxdWVzdD97ZXJyb3I6bixyZXF1ZXN0OnRoaXN9Om4pfS5iaW5kKHRoaXMpKTtjLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGZ1bmN0aW9uKG4pe3RoaXMuX3NldFRpbWVkT3V0KCEwKTt0aGlzLl91cGRhdGVTdGF0dXMoKTt0aGlzLnJlamVjdENvbXBsZXRlcyhhLnJlamVjdFdpdGhSZXF1ZXN0P3tlcnJvcjpuLHJlcXVlc3Q6dGhpc306bil9LmJpbmQodGhpcykpO2MuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKCl7dGhpcy5fc2V0QWJvcnRlZCghMCk7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dmFyIG49CkVycm9yKCJSZXF1ZXN0IGFib3J0ZWQuIik7dGhpcy5yZWplY3RDb21wbGV0ZXMoYS5yZWplY3RXaXRoUmVxdWVzdD97ZXJyb3I6bixyZXF1ZXN0OnRoaXN9Om4pfS5iaW5kKHRoaXMpKTtjLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dGhpcy5fc2V0UmVzcG9uc2UodGhpcy5wYXJzZVJlc3BvbnNlKCkpO2lmKHRoaXMuc3VjY2VlZGVkKXRoaXMucmVzb2x2ZUNvbXBsZXRlcyh0aGlzKTtlbHNle3ZhciBuPUVycm9yKCJUaGUgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogIit0aGlzLnhoci5zdGF0dXMpO3RoaXMucmVqZWN0Q29tcGxldGVzKGEucmVqZWN0V2l0aFJlcXVlc3Q/e2Vycm9yOm4scmVxdWVzdDp0aGlzfTpuKX19LmJpbmQodGhpcykpO3RoaXMudXJsPWEudXJsO3ZhciBkPSExIT09YS5hc3luYztjLm9wZW4oYS5tZXRob2R8fCJHRVQiLGEudXJsLGQpO3ZhciBmPXtqc29uOiJhcHBsaWNhdGlvbi9qc29uIiwKdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCIsYXJyYXlidWZmZXI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9W2EuaGFuZGxlQXNdLGc9YS5oZWFkZXJzfHxPYmplY3QuY3JlYXRlKG51bGwpLGw9T2JqZWN0LmNyZWF0ZShudWxsKSxrO2ZvcihrIGluIGcpbFtrLnRvTG93ZXJDYXNlKCldPWdba107Zz1sO2YmJiFnLmFjY2VwdCYmKGcuYWNjZXB0PWYpO09iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24obil7L1tBLVpdLy50ZXN0KG4pJiZQb2x5bWVyLkJhc2UuX2Vycm9yKCJIZWFkZXJzIG11c3QgYmUgbG93ZXIgY2FzZSwgZ290IixuKTtjLnNldFJlcXVlc3RIZWFkZXIobixnW25dKX0sdGhpcyk7aWYoZCl7Yy50aW1lb3V0PWEudGltZW91dDtkPWEuaGFuZGxlQXM7aWYoYS5qc29uUHJlZml4fHwhZClkPSJ0ZXh0IjtjLnJlc3BvbnNlVHlwZT1jLl9yZXNwb25zZVR5cGU9ZDthLmpzb25QcmVmaXgmJihjLl9qc29uUHJlZml4PQphLmpzb25QcmVmaXgpfWMud2l0aENyZWRlbnRpYWxzPSEhYS53aXRoQ3JlZGVudGlhbHM7ZD10aGlzLl9lbmNvZGVCb2R5T2JqZWN0KGEuYm9keSxnWyJjb250ZW50LXR5cGUiXSk7Yy5zZW5kKGQpO3JldHVybiB0aGlzLmNvbXBsZXRlc30scGFyc2VSZXNwb25zZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMueGhyLGM9YS5yZXNwb25zZVR5cGV8fGEuX3Jlc3BvbnNlVHlwZSxkPSF0aGlzLnhoci5yZXNwb25zZVR5cGUsZj1hLl9qc29uUHJlZml4JiZhLl9qc29uUHJlZml4Lmxlbmd0aHx8MDt0cnl7c3dpdGNoKGMpe2Nhc2UgImpzb24iOmlmKGR8fHZvaWQgMD09PWEucmVzcG9uc2UpdHJ5e3JldHVybiBKU09OLnBhcnNlKGEucmVzcG9uc2VUZXh0KX1jYXRjaChnKXtyZXR1cm4gY29uc29sZS53YXJuKCJGYWlsZWQgdG8gcGFyc2UgSlNPTiBzZW50IGZyb20gIithLnJlc3BvbnNlVVJMKSxudWxsfXJldHVybiBhLnJlc3BvbnNlO2Nhc2UgInhtbCI6cmV0dXJuIGEucmVzcG9uc2VYTUw7Y2FzZSAiYmxvYiI6Y2FzZSAiZG9jdW1lbnQiOmNhc2UgImFycmF5YnVmZmVyIjpyZXR1cm4gYS5yZXNwb25zZTsKZGVmYXVsdDppZihmKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dC5zdWJzdHJpbmcoZikpfWNhdGNoKGcpe3JldHVybiBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBwYXJzZSBKU09OIHNlbnQgZnJvbSAiK2EucmVzcG9uc2VVUkwpLG51bGx9cmV0dXJuIGEucmVzcG9uc2VUZXh0fX1jYXRjaChnKXt0aGlzLnJlamVjdENvbXBsZXRlcyhFcnJvcigiQ291bGQgbm90IHBhcnNlIHJlc3BvbnNlLiAiK2cubWVzc2FnZSkpfX0sYWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLl9zZXRBYm9ydGVkKCEwKTt0aGlzLnhoci5hYm9ydCgpfSxfZW5jb2RlQm9keU9iamVjdDpmdW5jdGlvbihhLGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYSlyZXR1cm4gYTtzd2l0Y2goYyl7Y2FzZSAiYXBwbGljYXRpb24vanNvbiI6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpO2Nhc2UgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6cmV0dXJuIHRoaXMuX3d3d0Zvcm1VcmxFbmNvZGUoYSl9cmV0dXJuIGF9LApfd3d3Rm9ybVVybEVuY29kZTpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4iIjt2YXIgYz1bXTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2MucHVzaCh0aGlzLl93d3dGb3JtVXJsRW5jb2RlUGllY2UoZCkrIlx4M2QiK3RoaXMuX3d3d0Zvcm1VcmxFbmNvZGVQaWVjZShhW2RdKSl9LHRoaXMpO3JldHVybiBjLmpvaW4oIlx4MjYiKX0sX3d3d0Zvcm1VcmxFbmNvZGVQaWVjZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWEmJmEudG9TdHJpbmc/ZW5jb2RlVVJJQ29tcG9uZW50KGEudG9TdHJpbmcoKS5yZXBsYWNlKC9ccj9cbi9nLCJcclxuIikpLnJlcGxhY2UoLyUyMC9nLCIrIik6IiJ9LF91cGRhdGVTdGF0dXM6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTdGF0dXModGhpcy54aHIuc3RhdHVzKTt0aGlzLl9zZXRTdGF0dXNUZXh0KHZvaWQgMD09PXRoaXMueGhyLnN0YXR1c1RleHQ/IiI6dGhpcy54aHIuc3RhdHVzVGV4dCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZ29vZ2xlLWNoYXJ0L2dvb2dsZS1jaGFydC1sb2FkZXIuaHRtbC5qcwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGspe3JldHVybiBnb29nbGVbMD09PWsuaW5kZXhPZigibWQtIik/Yy5DSEFSVFM6Yy5WSVNdfXZhciBjPXtDSEFSVFM6ImNoYXJ0cyIsVklTOiJ2aXN1YWxpemF0aW9uIn0sZD17YXJlYTp7Y3RvcjoiQXJlYUNoYXJ0In0sYmFyOntjdG9yOiJCYXJDaGFydCJ9LCJtZC1iYXIiOntjdG9yOiJCYXIiLHBrZzoiYmFyIn0sYnViYmxlOntjdG9yOiJCdWJibGVDaGFydCJ9LGNhbGVuZGFyOntjdG9yOiJDYWxlbmRhciIscGtnOiJjYWxlbmRhciJ9LGNhbmRsZXN0aWNrOntjdG9yOiJDYW5kbGVzdGlja0NoYXJ0In0sY29sdW1uOntjdG9yOiJDb2x1bW5DaGFydCJ9LGNvbWJvOntjdG9yOiJDb21ib0NoYXJ0In0sZ2F1Z2U6e2N0b3I6IkdhdWdlIixwa2c6ImdhdWdlIn0sZ2VvOntjdG9yOiJHZW9DaGFydCJ9LGhpc3RvZ3JhbTp7Y3RvcjoiSGlzdG9ncmFtIn0sbGluZTp7Y3RvcjoiTGluZUNoYXJ0In0sIm1kLWxpbmUiOntjdG9yOiJMaW5lIixwa2c6ImxpbmUifSwKb3JnOntjdG9yOiJPcmdDaGFydCIscGtnOiJvcmdjaGFydCJ9LHBpZTp7Y3RvcjoiUGllQ2hhcnQifSxzYW5rZXk6e2N0b3I6IlNhbmtleSIscGtnOiJzYW5rZXkifSxzY2F0dGVyOntjdG9yOiJTY2F0dGVyQ2hhcnQifSwibWQtc2NhdHRlciI6e2N0b3I6IlNjYXR0ZXIiLHBrZzoic2NhdHRlciJ9LCJzdGVwcGVkLWFyZWEiOntjdG9yOiJTdGVwcGVkQXJlYUNoYXJ0In0sdGFibGU6e2N0b3I6IlRhYmxlIixwa2c6InRhYmxlIn0sdGltZWxpbmU6e2N0b3I6IlRpbWVsaW5lIixwa2c6InRpbWVsaW5lIn0sdHJlZW1hcDp7Y3RvcjoiVHJlZU1hcCIscGtnOiJ0cmVlbWFwIn0sd29yZHRyZWU6e2N0b3I6IldvcmRUcmVlIixuYW1lc3BhY2U6Yy5WSVMscGtnOiJ3b3JkdHJlZSJ9fSxmPXt9LGc9e30sbD17fTtQb2x5bWVyKHtpczoiZ29vZ2xlLWNoYXJ0LWxvYWRlciIscHJvcGVydGllczp7cGFja2FnZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sb2JzZXJ2ZXI6Il9sb2FkUGFja2FnZXMifSwKdHlwZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9sb2FkUGFja2FnZUZvclR5cGUifX0sZ2V0IF9jb3JlUGFja2FnZSgpe3JldHVybiBnLmNvcmVjaGFydD9nLmNvcmVjaGFydDp0aGlzLl9sb2FkUGFja2FnZXMoWyJjb3JlY2hhcnQiXSkudGhlbihmdW5jdGlvbihrKXtyZXR1cm4ga1swXX0pfSxfbG9hZFBhY2thZ2VzRGVib3VuY2U6ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlKCJsb2FkUGFja2FnZXMiLGZ1bmN0aW9uKCl7dmFyIGs9T2JqZWN0LmtleXMoZik7ay5sZW5ndGgmJihmPXt9LGdvb2dsZS5jaGFydHMubG9hZCgiY3VycmVudCIse3BhY2thZ2VzOmssbGFuZ3VhZ2U6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lmxhbmd8fCJlbiJ9KSxnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKGZ1bmN0aW9uKCl7ay5mb3JFYWNoKGZ1bmN0aW9uKG4pe3RoaXMuZmlyZSgibG9hZGVkIixuKTtsW25dKGdvb2dsZS52aXN1YWxpemF0aW9uKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpKX0sCjEwMCl9LF9sb2FkUGFja2FnZXM6ZnVuY3Rpb24oayl7dmFyIG49W107ay5mb3JFYWNoKGZ1bmN0aW9uKHApe2dbcF18fChmW3BdPSEwLGdbcF09bmV3IFByb21pc2UoZnVuY3Rpb24ocSl7bFtwXT1xfSksdGhpcy5fbG9hZFBhY2thZ2VzRGVib3VuY2UoKSk7bi5wdXNoKGdbcF0pfS5iaW5kKHRoaXMpKTtyZXR1cm4gUHJvbWlzZS5hbGwobil9LF9sb2FkUGFja2FnZUZvclR5cGU6ZnVuY3Rpb24oayl7dmFyIG49ZFtrXTtyZXR1cm4gbj90aGlzLl9sb2FkUGFja2FnZXMoW24ucGtnfHwiY29yZWNoYXJ0Il0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4oZ29vZ2xlW24ubmFtZXNwYWNlXXx8YShrKSlbbi5jdG9yXX0pOlByb21pc2UucmVqZWN0KCJUaGlzIGNoYXJ0IHR5cGUgaXMgbm90IHlldCBzdXBwb3J0ZWQ6ICIrayl9LGNyZWF0ZTpmdW5jdGlvbihrLG4pe3JldHVybiB0aGlzLl9sb2FkUGFja2FnZUZvclR5cGUoaykudGhlbihmdW5jdGlvbihwKXtyZXR1cm4gbmV3IHAobil9KX0sZmlyZU9uQ2hhcnRFdmVudDpmdW5jdGlvbihrLApuLHApe3JldHVybiB0aGlzLl9jb3JlUGFja2FnZS50aGVuKGZ1bmN0aW9uKHEpeyhwP3EuZXZlbnRzLmFkZE9uZVRpbWVMaXN0ZW5lcjpxLmV2ZW50cy5hZGRMaXN0ZW5lcikoayxuLGZ1bmN0aW9uKHIpe3RoaXMuZmlyZSgiZ29vZ2xlLWNoYXJ0LSIrbix7Y2hhcnQ6ayxkYXRhOnJ9KX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfSxkYXRhVGFibGU6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX2NvcmVQYWNrYWdlLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PWs/bmV3IG4uRGF0YVRhYmxlOmsuZ2V0TnVtYmVyT2ZSb3dzP2s6ay5jb2xzP25ldyBuLkRhdGFUYWJsZShrKTowPGsubGVuZ3RoP24uYXJyYXlUb0RhdGFUYWJsZShrKTowPT09ay5sZW5ndGg/UHJvbWlzZS5yZWplY3QoIkRhdGEgd2FzIGVtcHR5LiIpOlByb21pc2UucmVqZWN0KCJEYXRhIGZvcm1hdCB3YXMgbm90IHJlY29nbml6ZWQuIil9KX0sZGF0YVZpZXc6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX2NvcmVQYWNrYWdlLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBuLkRhdGFWaWV3KGspfSl9LApxdWVyeTpmdW5jdGlvbihrLG4pe3JldHVybiB0aGlzLl9jb3JlUGFja2FnZS50aGVuKGZ1bmN0aW9uKHApe3JldHVybiBuZXcgcC5RdWVyeShrLG4pfSl9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2dvb2dsZS1jaGFydC9nb29nbGUtY2hhcnQuaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoiZ29vZ2xlLWNoYXJ0Iixwcm9wZXJ0aWVzOnt0eXBlOnt0eXBlOlN0cmluZyx2YWx1ZToiY29sdW1uIixvYnNlcnZlcjoiX3R5cGVDaGFuZ2VkIn0sZXZlbnRzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxvcHRpb25zOnt0eXBlOk9iamVjdH0sY29sczp7dHlwZTpBcnJheSxvYnNlcnZlcjoiX3Jvd3NPckNvbHVtbnNDaGFuZ2VkIn0scm93czp7dHlwZTpBcnJheSxvYnNlcnZlcjoiX3Jvd3NPckNvbHVtbnNDaGFuZ2VkIn0sZGF0YTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9kYXRhQ2hhbmdlZCJ9LHZpZXc6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdmlld0NoYW5nZWQifSxzZWxlY3Rpb246e3R5cGU6QXJyYXksbm90aWZ5OiEwLG9ic2VydmVyOiJfc2V0U2VsZWN0aW9uIn0sZHJhd246e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMCx2YWx1ZTohMX19LG9ic2VydmVyczpbIl9kcmF3KF9jaGFydCwgX2RhdGFWaWV3KSIsCiJfc3ViT3B0aW9uQ2hhbmdlZChvcHRpb25zLiopIl0sbGlzdGVuZXJzOnsiZ29vZ2xlLWNoYXJ0LXNlbGVjdCI6Il91cGRhdGVTZWxlY3Rpb24iLCJnb29nbGUtY2hhcnQtcmVhZHkiOiJfb25DaGFydFJlYWR5In0sX2NoYXJ0Om51bGwsX2RhdGFWaWV3Om51bGwsX3NlbGVjdGlvbjpudWxsLF90eXBlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuJC5sb2FkZXIuY3JlYXRlKHRoaXMudHlwZSx0aGlzLiQuY2hhcnRkaXYpLnRoZW4oZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy4kLmxvYWRlcjtPYmplY3Qua2V5cyh0aGlzLmV2ZW50cy5jb25jYXQoWyJzZWxlY3QiLCJyZWFkeSJdKS5yZWR1Y2UoZnVuY3Rpb24oZCxmKXtkW2ZdPSEwO3JldHVybiBkfSx7fSkpLmZvckVhY2goZnVuY3Rpb24oZCl7Yy5maXJlT25DaGFydEV2ZW50KGEsZCl9KTt0aGlzLl9zZXREcmF3bighMSk7dGhpcy5fY2hhcnQ9YX0uYmluZCh0aGlzKSl9LF9zdWJPcHRpb25DaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucz0KYS5iYXNlO3RoaXMuZGVib3VuY2UoIm9wdGlvbkNoYW5nZVJlZHJhdyIsZnVuY3Rpb24oKXt0aGlzLnJlZHJhdygpfSw1KX0sX3NldFNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuZHJhd24mJnRoaXMuc2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGlvbiE9PXRoaXMuX3NlbGVjdGlvbiYmKHRoaXMuX2NoYXJ0LnNldFNlbGVjdGlvbiYmdGhpcy5fY2hhcnQuc2V0U2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uKSx0aGlzLl9zZWxlY3Rpb249dGhpcy5zZWxlY3Rpb24pfSxfdXBkYXRlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb249dGhpcy5fc2VsZWN0aW9uPXRoaXMuX2NoYXJ0LmdldFNlbGVjdGlvbigpfSxfb25DaGFydFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fc2V0RHJhd24oITApO3RoaXMuX3NlbGVjdGlvbj1udWxsO3RoaXMuX3NldFNlbGVjdGlvbigpfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmdGhpcy5fZGF0YVZpZXcmJnRoaXMuX2RyYXcodGhpcy5fY2hhcnQsCnRoaXMuX2RhdGFWaWV3KX0sX2RyYXc6ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1hJiZudWxsIT1jKXRyeXt0aGlzLl9zZXREcmF3bighMSksYS5kcmF3KGMsdGhpcy5vcHRpb25zfHx7fSl9Y2F0Y2goZCl7dGhpcy4kLmNoYXJ0ZGl2LmlubmVySFRNTD1kfX0sZ2V0IGltYWdlVVJJKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmdldEltYWdlVVJJKCk6bnVsbH0sX3ZpZXdDaGFuZ2VkOmZ1bmN0aW9uKGEpe2EmJih0aGlzLl9kYXRhVmlldz1hKX0sX3Jvd3NPckNvbHVtbnNDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yb3dzLGM9dGhpcy5jb2xzO2EmJmMmJnRoaXMuJC5sb2FkZXIuZGF0YVRhYmxlKCkudGhlbihmdW5jdGlvbihkKXtjLmZvckVhY2goZnVuY3Rpb24oZil7ZC5hZGRDb2x1bW4oZil9KTtkLmFkZFJvd3MoYSk7cmV0dXJuIGR9LmJpbmQodGhpcykpLnRoZW4odGhpcy4kLmxvYWRlci5kYXRhVmlldy5iaW5kKHRoaXMuJC5sb2FkZXIpKS50aGVuKGZ1bmN0aW9uKGQpe3RoaXMuX2RhdGFWaWV3PQpkfS5iaW5kKHRoaXMpKS5jYXRjaChmdW5jdGlvbihkKXt0aGlzLiQuY2hhcnRkaXYuaW5uZXJIVE1MPWR9LmJpbmQodGhpcykpfSxfZGF0YUNoYW5nZWQ6ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGM9ITE7dHJ5e2E9SlNPTi5wYXJzZShhKX1jYXRjaChkKXtjPSJzdHJpbmciPT10eXBlb2YgYXx8YSBpbnN0YW5jZW9mIFN0cmluZ31hPWM/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1yZXF1ZXN0Iikuc2VuZCh7dXJsOmEsaGFuZGxlQXM6Impzb24ifSkudGhlbihmdW5jdGlvbihkKXtyZXR1cm4gZC5yZXNwb25zZX0pOlByb21pc2UucmVzb2x2ZShhKTthLnRoZW4odGhpcy4kLmxvYWRlci5kYXRhVGFibGUuYmluZCh0aGlzLiQubG9hZGVyKSkudGhlbih0aGlzLiQubG9hZGVyLmRhdGFWaWV3LmJpbmQodGhpcy4kLmxvYWRlcikpLnRoZW4oZnVuY3Rpb24oZCl7dGhpcy5fZGF0YVZpZXc9ZH0uYmluZCh0aGlzKSl9fSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwphLnNyYz0iaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzL2xvYWRlci5qcyI7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhKX19KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZ29vZ2xlLWNoYXJ0L2dvb2dsZS1jaGFydC1kZW1vLmh0bWwuanMKUG9seW1lcih7aXM6Imdvb2dsZS1jaGFydC1kZW1vIixwcm9wZXJ0aWVzOntfZGF0YTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVWaWV3In19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtdGVuc29yYm9hcmQvcGx1Z2luLWRpYWxvZy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1wbHVnaW4tZGlhbG9nIixwcm9wZXJ0aWVzOntfdGl0bGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9jdXN0b21NZXNzYWdlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfb3Blbjp7dHlwZTpCb29sZWFufSxfaGlkZGVuOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGlkZGVuKF9vcGVuKSIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfdXNlTmF0aXZlQmFja2Ryb3A6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH19LG9wZW5Ob1RlbnNvckZsb3dEaWFsb2coKXt0aGlzLm9wZW5EaWFsb2coIlRoaXMgcGx1Z2luIGlzIGRpc2FibGVkIHdpdGhvdXQgVGVuc29yRmxvdyIsJ1RvIGVuYWJsZSB0aGlzIHBsdWdpbiBpbiBUZW5zb3JCb2FyZCwgaW5zdGFsbCBUZW5zb3JGbG93IHdpdGggInBpcCBpbnN0YWxsIHRlbnNvcmZsb3ciIG9yIGVxdWl2YWxlbnQuJyl9LG9wZW5PbGRUZW5zb3JGbG93RGlhbG9nKGEpe3RoaXMub3BlbkRpYWxvZygiVGhpcyBwbHVnaW4gaXMgZGlzYWJsZWQgd2l0aG91dCBUZW5zb3JGbG93ICIrCmEsIlRvIGVuYWJsZSB0aGlzIHBsdWdpbiBpbiBUZW5zb3JCb2FyZCwgaW5zdGFsbCBUZW5zb3JGbG93ICIrYSsnIG9yIGdyZWF0ZXIgd2l0aCAicGlwIGluc3RhbGwgdGVuc29yZmxvdyIgb3IgZXF1aXZhbGVudC4nKX0sb3BlbkRpYWxvZyhhLGMpe3RoaXMuc2V0KCJfdGl0bGUiLGEpO3RoaXMuc2V0KCJfY3VzdG9tTWVzc2FnZSIsYyk7dGhpcy4kLmRpYWxvZy5vcGVuKCl9LGNsb3NlRGlhbG9nKCl7dGhpcy4kLmRpYWxvZy5jbG9zZSgpfSxfY29tcHV0ZUhpZGRlbihhKXtyZXR1cm4hYX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1wcm9maWxlLWRhc2hib2FyZC90Zi1wcm9maWxlLWRhc2hib2FyZC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1wcm9maWxlLWRhc2hib2FyZCIscHJvcGVydGllczp7X3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFFvLlJlcXVlc3RNYW5hZ2VyfSxfaXNBdHRhY2hlZDpCb29sZWFuLF9pc0F2YWlsYWJsZTpCb29sZWFuLF9pbml0aWFsaXplZDpCb29sZWFuLF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfZGF0YXNldHM6e3R5cGU6QXJyYXksbm90aWZ5OiEwLG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0sX2FjdGl2ZVRvb2xzTGlzdDp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEFjdGl2ZVRvb2xzTGlzdChzZWxlY3RlZERhdGFzZXRJbmRleCwgX2RhdGFzZXRzKSIsb2JzZXJ2ZXI6Il9hY3RpdmVUb29sc0NoYW5nZWQifSxfYWN0aXZlSG9zdHNMaXN0Ont0eXBlOkFycmF5LG9ic2VydmVyOiJfYWN0aXZlSG9zdHNDaGFuZ2VkIn0sX3RvcExldmVsU3RhdGU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVRvcExldmVsU3RhdGUoX2RhdGFOb3RGb3VuZCwgcHJvZ3Jlc3MpIiwKcmVhZE9ubHk6ITB9LHByb2dyZXNzOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHNlbGVjdGVkRGF0YXNldEluZGV4Ont0eXBlOk51bWJlcixub3RpZnk6ITAsdmFsdWU6MH0sc2VsZWN0ZWRUb29sSW5kZXg6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCx2YWx1ZTowfSxzZWxlY3RlZEhvc3RJbmRleDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLHZhbHVlOjB9LHRyYWNlVmlld2VyQmFzZVVybDp7dHlwZTpTdHJpbmcsdmFsdWU6InRyYWNlX3ZpZXdlcl9pbmRleC5odG1sIn0sX3Byb2ZpbGVyU2VydmljZUFkZHJlc3M6U3RyaW5nLF9wcm9maWxlclNlcnZpY2VBZGRyZXNzVHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImlwLWFkZHJlc3MifSxfcHJvZmlsZUR1cmF0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiMTAwMCJ9LF9wcm9maWxlTnVtUmV0cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIzIn0sX3Byb2ZpbGVXb3JrZXJMaXN0Ont0eXBlOlN0cmluZ30sX3Byb2ZpbGVJbmNsdWRlRGF0YXNldE9wczp7dHlwZTpCb29sZWFuLAp2YWx1ZTohMH0sX3RyYWNlRGF0YVVybDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9vcFByb2ZpbGVEYXRhOnt0eXBlOk9iamVjdH0sX2lucHV0UGlwZWxpbmVEYXRhOnt0eXBlOk9iamVjdH0sX292ZXJ2aWV3UGFnZURhdGE6e3R5cGU6T2JqZWN0fSxfbWVtb3J5Vmlld2VyRGF0YTp7dHlwZTpPYmplY3R9LF9wb2RWaWV3ZXJEYXRhOnt0eXBlOk9iamVjdH0sX2dvb2dsZUNoYXJ0RGVtb0RhdGE6e3R5cGU6T2JqZWN0fSxfc2VsZWN0ZWREYXRhc2V0TmFtZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLGNvbXB1dGVkOiJfZ2V0U2VsZWN0ZWREYXRhc2V0TmFtZShzZWxlY3RlZERhdGFzZXRJbmRleCwgX2RhdGFzZXRzKSJ9LF9zZWxlY3RlZFRvb2xOYW1lOnt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9nZXRTZWxlY3RlZChzZWxlY3RlZFRvb2xJbmRleCwgX2FjdGl2ZVRvb2xzTGlzdCkifSxfc2VsZWN0ZWRIb3N0TmFtZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLGNvbXB1dGVkOiJfZ2V0U2VsZWN0ZWQoc2VsZWN0ZWRIb3N0SW5kZXgsIF9hY3RpdmVIb3N0c0xpc3QpIn0sCl90b29sSW5TY29wZTp7dHlwZTpTdHJpbmd9LF9hY3RpdmVPcERldGFpbHM6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT57fX0sX2FjdGl2ZUJ1ZmZlckRldGFpbHM6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT57fX0sX2FjdGl2ZVBvZERldGFpbHM6e3R5cGU6QXJyYXl9LF9jYXB0dXJpbmdQcm9maWxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxyZWxvYWQ6ZnVuY3Rpb24oKXt9LHJlYWR5OmZ1bmN0aW9uKCl7fSxvYnNlcnZlcnM6WyJfbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKF9pc0F0dGFjaGVkLCBfaXNBdmFpbGFibGUpIiwiX21heWJlVXBkYXRlRGF0YShfc2VsZWN0ZWRIb3N0TmFtZSkiLCJfbWF5YmVVcGRhdGVBY3RpdmVIb3N0cyhfc2VsZWN0ZWREYXRhc2V0TmFtZSwgX3NlbGVjdGVkVG9vbE5hbWUpIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldCgiX2lzQXR0YWNoZWQiLCEwKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KFFvLmdldFJvdXRlcigpLnBsdWdpbnNMaXN0aW5nKCkpLnRoZW4oYT0+CnsicHJvZmlsZSJpbiBhPyh0aGlzLiQuaW5pdGlhbERpYWxvZy5jbG9zZURpYWxvZygpLHRoaXMuc2V0KCJfaXNBdmFpbGFibGUiLCEwKSk6KHRoaXMuJC5pbml0aWFsRGlhbG9nLm9wZW5PbGRUZW5zb3JGbG93RGlhbG9nKCIxLjE0IiksdGhpcy5zZXQoIl9pc0F2YWlsYWJsZSIsITEpKX0pfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITEpfSxfb3BlbkNhcHR1cmVQcm9maWxlRGlhbG9nOmZ1bmN0aW9uKCl7dGhpcy4kLmNhcHR1cmVQcm9maWxlRGlhbG9nLm9wZW4oKX0sX3Nob3VsZERpc2FibGVDYXB0dXJlUHJvZmlsZUJ1dHRvbjpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIWF8fCIiPT09Y3x8IiI9PT1kfSxfc2hvdWxkU2hvd1RwdU9wdGlvbnM6ZnVuY3Rpb24oYSl7cmV0dXJuInRwdS1uYW1lIj09YX0sX2NhcHR1cmVQcm9maWxlOmZ1bmN0aW9uKCl7dGhpcy5fY2FwdHVyaW5nUHJvZmlsZT0hMDtjb25zdCBhPVFvLmFkZFBhcmFtcyhRby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgicHJvZmlsZSIsCiIvY2FwdHVyZV9wcm9maWxlIikse3NlcnZpY2VfYWRkcjp0aGlzLl9wcm9maWxlclNlcnZpY2VBZGRyZXNzLnRyaW0oKSxpc190cHVfbmFtZToidHB1LW5hbWUiPT10aGlzLl9wcm9maWxlclNlcnZpY2VBZGRyZXNzVHlwZSxkdXJhdGlvbjp0aGlzLl9wcm9maWxlRHVyYXRpb24sd29ya2VyX2xpc3Q6dGhpcy5fcHJvZmlsZVdvcmtlckxpc3QsaW5jbHVkZV9kYXRhc2V0X29wczp0aGlzLl9wcm9maWxlSW5jbHVkZURhdGFzZXRPcHMsbnVtX3JldHJ5OnRoaXMuX3Byb2ZpbGVOdW1SZXRyeX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57dGhpcy5fY2FwdHVyaW5nUHJvZmlsZT0hMTtudWxsIT1jLmVycm9yP3RoaXMuX3Nob3dUb2FzdCgiRmFpbGVkIHRvIGNhcHR1cmUgcHJvZmlsZTogIitjLmVycm9yKTp0aGlzLl9zaG93VG9hc3QoYy5yZXN1bHQpfSkuY2F0Y2goYz0+e3RoaXMuX2NhcHR1cmluZ1Byb2ZpbGU9ITE7dGhpcy5fc2hvd1RvYXN0KCJGYWlsZWQgdG8gY2FwdHVyZSBwcm9maWxlOiAiKwpjKX0pfSxfc2hvd1RvYXN0KGEpe3RoaXMuJC50b2FzdC50ZXh0PWE7dGhpcy4kLnRvYXN0Lm9wZW4oKX0sX21heWJlSW5pdGlhbGl6ZURhc2hib2FyZDpmdW5jdGlvbihhLGMpe2lmKCF0aGlzLl9pbml0aWFsaXplZCYmYSYmYyl7dGhpcy5faW5pdGlhbGl6ZWQ9ITA7dmFyIGQ9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByb2ZpbGUiLCIvdG9vbHMiKTt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciBmPXRoaXMsZz10Zi5wcm9maWxlLnV0aWwuZ2V0VHJhY2tlcih0aGlzKTt0Zi5wcm9maWxlLnV0aWwucnVuVGFzaygiTG9hZGluZyBkYXRhc2V0cyIsMjAsKCk9Pntjb25zb2xlLmxvZygic3RhcnQgY291bnRpbmciKTtyZXR1cm4gZi5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKX0sZykudGhlbihsPT50Zi5wcm9maWxlLnV0aWwucnVuVGFzaygiUHJvY2Vzc2luZyBkYXRhc2V0cyIsNzAsKCk9Pm5ldyBQcm9taXNlKGZ1bmN0aW9uKGspe2YuX3Byb2Nlc3NSdW5Ub1Rvb2wobCk7CmsobnVsbCl9KSxnKSkudGhlbigoKT0+dGYucHJvZmlsZS51dGlsLnJ1blRhc2soIkRvbmUiLDEwLCgpPT5udWxsLGcpKX19LF9wcm9jZXNzUnVuVG9Ub29sOmZ1bmN0aW9uKGEpe2E9Xy5tYXAoYSwoYyxkKT0+KHtuYW1lOmQsYWN0aXZlVG9vbHM6Y30pKTthLnNvcnQoKGMsZCk9PjAtZ24uY29tcGFyZVRhZ05hbWVzKGMubmFtZSxkLm5hbWUpKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWEubGVuZ3RoKTt0aGlzLnNldCgiX2RhdGFzZXRzIixhKX0sX2dldFNlbGVjdGVkOmZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YSlyZXR1cm4gYyYmMDw9YSYmYTxjLmxlbmd0aD9jW2FdOm51bGx9LF9nZXRTZWxlY3RlZERhdGFzZXROYW1lOmZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YSlyZXR1cm4gYyYmMDw9YSYmYTxjLmxlbmd0aD9jW2FdLm5hbWU6IiJ9LF9nZXRBY3RpdmVUb29sc0xpc3Q6ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1hKXJldHVybiBjJiYwPD1hJiZhPGMubGVuZ3RoPyh0aGlzLnNlbGVjdGVkVG9vbEluZGV4PQowLGNbYV0uYWN0aXZlVG9vbHMpOltdfSxfbWF5YmVVcGRhdGVEYXRhOmZ1bmN0aW9uKGEpe2lmKG51bGwhPWEpe3ZhciBjPXRoaXMuX3NlbGVjdGVkRGF0YXNldE5hbWUsZD10aGlzLl9zZWxlY3RlZFRvb2xOYW1lO2lmKG51bGwhPWMmJm51bGwhPWQpaWYodGhpcy5fdG9vbEluU2NvcGU9InVuZGVmaW5lZCIsZC5zdGFydHNXaXRoKCJ0cmFjZV92aWV3ZXIiKSl7dmFyIGY9UW8uYWRkUGFyYW1zKFFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJwcm9maWxlIiwiL2RhdGEiKSx7dGFnOmQscnVuOmMsaG9zdDphfSksZz1kLmVuZHNXaXRoKCJAIik7dGhpcy5fdHJhY2VEYXRhVXJsPXRoaXMudHJhY2VWaWV3ZXJCYXNlVXJsKyI/dHJhY2VfZGF0YV91cmxceDNkIitlbmNvZGVVUklDb21wb25lbnQoZikrIlx4MjZpc19zdHJlYW1pbmdceDNkIitnO3RoaXMuX3Rvb2xJblNjb3BlPSJ0cmFjZV92aWV3ZXIifWVsc2V7dGhpcy5zZXQoInByb2dyZXNzIix7dmFsdWU6MCxtc2c6IiJ9KTtsZXQgbD0KdGhpcyxrPXRmLnByb2ZpbGUudXRpbC5nZXRUcmFja2VyKHRoaXMpO3RmLnByb2ZpbGUudXRpbC5ydW5UYXNrKCJSZWFkaW5nICIrZCsiIHRvb2wgZGF0YSIsMjAsKCk9PmwuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoUW8uYWRkUGFyYW1zKFFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJwcm9maWxlIiwiL2RhdGEiKSx7dGFnOmQsaG9zdDphLHJ1bjpjfSkpLGspLmNhdGNoKCgpPT57fSkudGhlbihuPT50Zi5wcm9maWxlLnV0aWwucnVuVGFzaygiRG9uZSIsODAsKCk9PntsLl91cGRhdGVUb29sRGF0YShkLG4pfSxrKSl9fX0sX3VwZGF0ZVRvb2xEYXRhOmZ1bmN0aW9uKGEsYyl7c3dpdGNoKGEpe2Nhc2UgIm9wX3Byb2ZpbGUiOnRoaXMuX29wUHJvZmlsZURhdGE9Yzt0aGlzLl90b29sSW5TY29wZT0ib3BfcHJvZmlsZSI7YnJlYWs7Y2FzZSAiaW5wdXRfcGlwZWxpbmVfYW5hbHl6ZXIiOnRoaXMuX2lucHV0UGlwZWxpbmVEYXRhPWM7dGhpcy5fdG9vbEluU2NvcGU9ImlucHV0X3BpcGVsaW5lX2FuYWx5emVyIjsKYnJlYWs7Y2FzZSAib3ZlcnZpZXdfcGFnZSI6dGhpcy5fb3ZlcnZpZXdQYWdlRGF0YT1jO3RoaXMuX3Rvb2xJblNjb3BlPSJvdmVydmlld19wYWdlIjticmVhaztjYXNlICJtZW1vcnlfdmlld2VyIjp0aGlzLl9tZW1vcnlWaWV3ZXJEYXRhPWM7dGhpcy5fdG9vbEluU2NvcGU9Im1lbW9yeV92aWV3ZXIiO2JyZWFrO2Nhc2UgInBvZF92aWV3ZXIiOnRoaXMuX3BvZFZpZXdlckRhdGE9Yzt0aGlzLl90b29sSW5TY29wZT0icG9kX3ZpZXdlciI7YnJlYWs7Y2FzZSAiZ29vZ2xlX2NoYXJ0X2RlbW8iOnRoaXMuX2dvb2dsZUNoYXJ0RGVtb0RhdGE9Yyx0aGlzLl90b29sSW5TY29wZT0iZ29vZ2xlX2NoYXJ0X2RlbW8ifX0sX21heWJlVXBkYXRlQWN0aXZlSG9zdHM6ZnVuY3Rpb24oYSxjKXtpZihudWxsPT1hfHxudWxsPT1jKXJldHVybiBudWxsO3RoaXMuX2FjdGl2ZUhvc3RzTGlzdD1bXTthPVFvLmFkZFBhcmFtcyhRby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgicHJvZmlsZSIsIi9ob3N0cyIpLAp7dGFnOmMscnVuOmF9KTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oZD0+e3RoaXMuc2V0KCJfYWN0aXZlSG9zdHNMaXN0IixkLnNvcnQoKGYsZyk9PmduLmNvbXBhcmVUYWdOYW1lcyhmLGcpKSl9KX0sX2RhdGFzZXRzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2RhdGFzZXRzJiYodGhpcy5zZWxlY3RlZERhdGFzZXRJbmRleD0wKX0sX2FjdGl2ZVRvb2xzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2FjdGl2ZVRvb2xzTGlzdCYmdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuc2V0KCJzZWxlY3RlZFRvb2xJbmRleCIsLTEpO3RoaXMuc2V0KCJzZWxlY3RlZFRvb2xJbmRleCIsMCl9LmJpbmQodGhpcykpfSxfYWN0aXZlSG9zdHNDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlSG9zdHNMaXN0JiZ0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXQoInNlbGVjdGVkSG9zdEluZGV4IiwtMSk7dGhpcy5zZXQoInNlbGVjdGVkSG9zdEluZGV4IiwwKX0uYmluZCh0aGlzKSl9LApfaXNDdXJyZW50VG9vbDpmdW5jdGlvbihhLGMpe3JldHVybiBhPT1jfSxfaGFzQWN0aXZlVG9vbHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlVG9vbHNMaXN0JiYwPHRoaXMuX2FjdGl2ZVRvb2xzTGlzdC5sZW5ndGg/ITA6ITF9LF9nZXRIb3N0RGlzcGxheU5hbWU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6IiI9PWE/ImRlZmF1bHQiOmEuc2xpY2UoMCwtMSl9LF9jb21wdXRlVG9wTGV2ZWxTdGF0ZTpmdW5jdGlvbihhLGMpe3JldHVybiBhPyJEQVRBX05PVF9GT1VORCI6IWN8fDEwMD5jLnZhbHVlPyJMT0FESU5HIjoiQUNUSVZFIn0sX2lzU3RhdGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYT09PWN9fSk7WW8ucmVnaXN0ZXJEYXNoYm9hcmQoe3BsdWdpbjoicHJvZmlsZSIsZWxlbWVudE5hbWU6InRmLXByb2ZpbGUtZGFzaGJvYXJkIixpc1JlbG9hZERpc2FibGVkOiEwfSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWJlaG9sZGVyLWRhc2hib2FyZC90Zi1iZWhvbGRlci12aWRlby5odG1sLmpzCihmdW5jdGlvbigpe2NvbnN0IGE9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImJlaG9sZGVyIiwiL2JlaG9sZGVyLWZyYW1lIiksYz1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYmVob2xkZXIiLCIvcGluZyIpO1BvbHltZXIoe2lzOiJ0Zi1iZWhvbGRlci12aWRlbyIscHJvcGVydGllczp7ZnBzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxvYnNlcnZlcjoiX2Zwc0NoYW5nZWQifSxwaW5nU2xlZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjFFM30seGhyVGltZW91dDp7dHlwZTpOdW1iZXIsdmFsdWU6MjUwMH0sX2ltYWdlVVJMOnt0eXBlOlN0cmluZyx2YWx1ZToiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBRC9BQ3dBQUFBQUFRQUJBQUFDQURzXHgzZCJ9LF94aHI6T2JqZWN0LF90aW1lcjpOdW1iZXIsX2lzRGVhZDpCb29sZWFufSxhdHRhY2hlZCgpe3RoaXMuc2V0KCJfaW1hZ2VVUkwiLGEpO3RoaXMuX3BpbmcoKX0sZGV0YWNoZWQoKXt0aGlzLl9jbGVhcigpOwp0aGlzLnNldCgiX2ltYWdlVVJMIiwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBRC9BQ3dBQUFBQUFRQUJBQUFDQURzXHgzZCIpfSxfcGluZygpe3RoaXMuX2NsZWFyKCk7dGhpcy5feGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt0aGlzLl94aHIub3BlbigiR0VUIixjLCEwKTt0aGlzLl94aHIudGltZW91dD10aGlzLnhoclRpbWVvdXQ7dGhpcy5feGhyLm9ubG9hZD10aGlzLl9vblBpbmdMb2FkLmJpbmQodGhpcyk7dGhpcy5feGhyLm9uZXJyb3I9dGhpcy5fb25QaW5nLmJpbmQodGhpcywhMSx0aGlzLnBpbmdTbGVlcCk7dGhpcy5feGhyLm9udGltZW91dD10aGlzLl9vblBpbmcuYmluZCh0aGlzLCExLDEpO3RoaXMuX3hoci5zZW5kKG51bGwpfSxfb25QaW5nTG9hZCgpe2lmKDIwMD09dGhpcy5feGhyLnN0YXR1cyl7Y29uc3QgZD1KU09OLnBhcnNlKHRoaXMuX3hoci5yZXNwb25zZVRleHQpO3RoaXMuX29uUGluZygiYWxpdmUiPT1kLnN0YXR1cyx0aGlzLnBpbmdTbGVlcCl9ZWxzZSB0aGlzLl9vblBpbmcoITEsCnRoaXMucGluZ1NsZWVwKX0sX29uUGluZyhkLGYpe2QmJnRoaXMuX2lzRGVhZCYmdGhpcy5zZXQoIl9pbWFnZVVSTCIsYSsiP3RceDNkIisobmV3IERhdGUpLmdldFRpbWUoKSk7dGhpcy5faXNEZWFkPSFkO3RoaXMuX3RpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl9waW5nKCksZil9LF9jbGVhcigpe3RoaXMuX3RpbWVyJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCk7dGhpcy5feGhyJiYodGhpcy5feGhyLnJlYWR5U3RhdGU8WE1MSHR0cFJlcXVlc3QuRE9ORSYmdGhpcy5feGhyLmFib3J0KCksdGhpcy5feGhyPW51bGwpfSxfZnBzQ2hhbmdlZChkLGYpezA9PWQ/dGhpcy5fY2xlYXIoKTowPT1mJiZ0aGlzLl9waW5nKCl9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWJlaG9sZGVyLWRhc2hib2FyZC90Zi1iZWhvbGRlci1pbmZvLmh0bWwuanMKKGZ1bmN0aW9uKCl7Y29uc3QgYT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYmVob2xkZXIiLCIvc2VjdGlvbi1pbmZvIik7UG9seW1lcih7aXM6InRmLWJlaG9sZGVyLWluZm8iLHByb3BlcnRpZXM6e2Zwczp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsb2JzZXJ2ZXI6Il9mcHNDaGFuZ2VkIn0seGhyVGltZW91dDp7dHlwZTpOdW1iZXIsdmFsdWU6MUU0fSxfaXRlbXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7bmFtZToiTG9hZGluZy4uLiJ9XX0sX3hocjpPYmplY3QsX3RpbWVyOk51bWJlcn0sYXR0YWNoZWQoKXt0aGlzLl9sb2FkKCl9LGRldGFjaGVkKCl7dGhpcy5fY2xlYXIoKX0sX2xvYWQoKXt0aGlzLl9jbGVhcigpO3RoaXMuX3hocj1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy5feGhyLm9wZW4oIkdFVCIsYSwhMCk7dGhpcy5feGhyLnRpbWVvdXQ9dGhpcy54aHJUaW1lb3V0O3RoaXMuX3hoci5vbmxvYWQ9dGhpcy5fb25Mb2FkLmJpbmQodGhpcyk7dGhpcy5feGhyLm9uZXJyb3I9CnRoaXMuX3JldHJ5LmJpbmQodGhpcyx0aGlzLl9nZXRTbGVlcCgpKTt0aGlzLl94aHIub250aW1lb3V0PXRoaXMuX3JldHJ5LmJpbmQodGhpcywxKTt0aGlzLl94aHIuc2VuZChudWxsKX0sX29uTG9hZCgpe2lmKDIwMD09dGhpcy5feGhyLnN0YXR1cyl7Y29uc3QgYz1KU09OLnBhcnNlKHRoaXMuX3hoci5yZXNwb25zZVRleHQpO2NvbnNvbGUuYXNzZXJ0KEFycmF5LmlzQXJyYXkoYyksIkV4cGVjdGVkIHJlc3BvbnNlIHRvIGJlIGluIGFuIGFycmF5Iik7dGhpcy5faXRlbXM9Y310aGlzLl9yZXRyeSh0aGlzLl9nZXRTbGVlcCgpKX0sX3JldHJ5KGMpe3RoaXMuX3RpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX2xvYWQuYmluZCh0aGlzKSxjKX0sX2dldFNsZWVwKCl7cmV0dXJuIDFFMy8oMD09PXRoaXMuZnBzPzE6dGhpcy5mcHMpfSxfY2xlYXIoKXt0aGlzLl90aW1lciYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPW51bGwpO3RoaXMuX3hociYmCih0aGlzLl94aHIucmVhZHlTdGF0ZTxYTUxIdHRwUmVxdWVzdC5ET05FJiZ0aGlzLl94aHIuYWJvcnQoKSx0aGlzLl94aHI9bnVsbCl9LF9mcHNDaGFuZ2VkKGMsZCl7MD09Yz90aGlzLl9jbGVhcigpOjA9PWQmJnRoaXMuX2xvYWQoKX19KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtYmVob2xkZXItZGFzaGJvYXJkL3RmLWJlaG9sZGVyLWRhc2hib2FyZC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1iZWhvbGRlci1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5SZXF1ZXN0TWFuYWdlcigxMCwwKX0sX2lzQXZhaWxhYmxlOkJvb2xlYW4sX3ZhbHVlczp7dHlwZTpTdHJpbmcsdmFsdWU6InRyYWluYWJsZV92YXJpYWJsZXMiLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9tb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToidmFyaWFuY2UiLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9zY2FsaW5nOnt0eXBlOlN0cmluZyx2YWx1ZToibGF5ZXIiLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF93aW5kb3dTaXplOnt0eXBlOk51bWJlcix2YWx1ZToxNSxvYnNlcnZlcjoiX2NvbmZpZ0NoYW5nZWQifSxfcHJldmlvdXNGUFM6e3R5cGU6TnVtYmVyLHZhbHVlOjMwfSxfRlBTOnt0eXBlOk51bWJlcix2YWx1ZToxMCxvYnNlcnZlcjoiX2NvbmZpZ0NoYW5nZWQifSwKX3JlY29yZFRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFydCByZWNvcmRpbmcifSxfaXNSZWNvcmRpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2NvbmZpZ0NoYW5nZWQifSxfc2hvd0FsbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9jb2xvcm1hcDp7dHlwZTpTdHJpbmcsdmFsdWU6Im1hZ21hIixvYnNlcnZlcjoiX2NvbmZpZ0NoYW5nZWQifSxfaXNfYWN0aXZlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX2NvbnRyb2xzX2Rpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn19LF92YWx1ZXNOb3RGcmFtZShhKXtyZXR1cm4iZnJhbWVzIiE9PWF9LF92YXJpYW5jZVNlbGVjdGVkKGEpe3JldHVybiJ2YXJpYW5jZSI9PT1hfSxfY29uZmlnQ2hhbmdlZCgpe2lmKHRoaXMuX2lzX2FjdGl2ZSYmIXRoaXMuX2NvbnRyb2xzX2Rpc2FibGVkKXt2YXIgYT0KW3RoaXMuX3ZhbHVlcyx0aGlzLl9tb2RlLHRoaXMuX3NjYWxpbmcsdGhpcy5fd2luZG93U2l6ZSx0aGlzLl9GUFMsdGhpcy5faXNSZWNvcmRpbmcsdGhpcy5fc2hvd0FsbCx0aGlzLl9jb2xvcm1hcF0sYztmb3IoYyBvZiBhKWlmKCJ1bmRlZmluZWQiPT09dHlwZW9mIGN8fCIiPT09YylyZXR1cm47YT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYmVob2xkZXIiLCIvY2hhbmdlLWNvbmZpZyIpO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSx7dmFsdWVzOnRoaXMuX3ZhbHVlcyxtb2RlOnRoaXMuX21vZGUsc2NhbGluZzp0aGlzLl9zY2FsaW5nLHdpbmRvd19zaXplOnRoaXMuX3dpbmRvd1NpemUsRlBTOnRoaXMuX0ZQUyxpc19yZWNvcmRpbmc6dGhpcy5faXNSZWNvcmRpbmcsc2hvd19hbGw6dGhpcy5fc2hvd0FsbCxjb2xvcm1hcDp0aGlzLl9jb2xvcm1hcH0pfX0sX3RvZ2dsZVJlY29yZCgpeyJzdGFydCByZWNvcmRpbmciPT10aGlzLl9yZWNvcmRUZXh0Pyh0aGlzLnNldCgiX3JlY29yZFRleHQiLAoic3RvcCByZWNvcmRpbmciKSx0aGlzLnNldCgiX2lzUmVjb3JkaW5nIiwhMCkpOih0aGlzLnNldCgiX3JlY29yZFRleHQiLCJzdGFydCByZWNvcmRpbmciKSx0aGlzLnNldCgiX2lzUmVjb3JkaW5nIiwhMSkpO3RoaXMuJC5yZWNvcmRfYnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoImlzLXJlY29yZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoUW8uZ2V0Um91dGVyKCkucGx1Z2luc0xpc3RpbmcoKSkudGhlbihhPT57ImJlaG9sZGVyImluIGE/KHRoaXMuJC5pbml0aWFsRGlhbG9nLmNsb3NlRGlhbG9nKCksdGhpcy5zZXQoIl9pc0F2YWlsYWJsZSIsITApKToodGhpcy4kLmluaXRpYWxEaWFsb2cub3Blbk5vVGVuc29yRmxvd0RpYWxvZygpLHRoaXMuc2V0KCJfaXNBdmFpbGFibGUiLCExKSl9KX0scmVhZHkoKXt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXtpZih0aGlzLl9pc0F2YWlsYWJsZSl7Y29uc3QgYT1Rby5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYmVob2xkZXIiLAoiL2lzLWFjdGl2ZSIpO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57dGhpcy5zZXQoIl9pc19hY3RpdmUiLGMuaXNfYWN0aXZlKTt0aGlzLnNldCgiX2NvbnRyb2xzX2Rpc2FibGVkIiwhYy5pc19jb25maWdfd3JpdGFibGUpfSl9fX0pO1lvLnJlZ2lzdGVyRGFzaGJvYXJkKHtwbHVnaW46ImJlaG9sZGVyIixlbGVtZW50TmFtZToidGYtYmVob2xkZXItZGFzaGJvYXJkIixzaG91bGRSZW1vdmVEb206ITB9KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vaXJvbi1wYWdlcy9pcm9uLXBhZ2VzLmh0bWwuanMKUG9seW1lcih7aXM6Imlyb24tcGFnZXMiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3IsUG9seW1lci5Jcm9uU2VsZWN0YWJsZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci10YWJzL3BhcGVyLXRhYi5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uQ29udHJvbFN0YXRlLFBvbHltZXIuSXJvbkJ1dHRvblN0YXRlLFBvbHltZXIuUGFwZXJSaXBwbGVCZWhhdmlvcl0scHJvcGVydGllczp7bGluazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0YWIifSxsaXN0ZW5lcnM6e2Rvd246Il91cGRhdGVOb2luayIsdGFwOiJfb25UYXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZU5vaW5rKCl9LGdldCBfcGFyZW50Tm9pbmsoKXt2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlO3JldHVybiEhYSYmISFhLm5vaW5rfSxfdXBkYXRlTm9pbms6ZnVuY3Rpb24oKXt0aGlzLm5vaW5rPSEhdGhpcy5ub2lua3x8ISF0aGlzLl9wYXJlbnROb2lua30sX29uVGFwOmZ1bmN0aW9uKGEpe2lmKHRoaXMubGluayl7dmFyIGM9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCJhIik7CmMmJmEudGFyZ2V0IT09YyYmYy5jbGljaygpfX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci10YWJzL3BhcGVyLXRhYnMuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdGFicyIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcixQb2x5bWVyLklyb25NZW51YmFyQmVoYXZpb3JdLHByb3BlcnRpZXM6e25vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ub2lua0NoYW5nZWQifSxub0Jhcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub1NsaWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZml0Q29udGFpbmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVEcmFnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGVTY3JvbGxCdXR0b25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsaWduQm90dG9tOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGFibGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwYXBlci10YWIifSxhdXRvc2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9zZWxlY3REZWxheTp7dHlwZTpOdW1iZXIsCnZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGw7dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT0Kdm9pZCAwO3RoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihhKXtQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKS5mb3JFYWNoKGE/dGhpcy5fc2V0Tm9pbmtBdHRyaWJ1dGU6dGhpcy5fcmVtb3ZlTm9pbmtBdHRyaWJ1dGUpfSxfc2V0Tm9pbmtBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7YS5zZXRBdHRyaWJ1dGUoIm5vaW5rIiwiIil9LF9yZW1vdmVOb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihhKXthLnJlbW92ZUF0dHJpYnV0ZSgibm9pbmsiKX0sCl9jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3M6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiFjfHxkPyJoaWRkZW4iOmE/Im5vdC12aXNpYmxlIjoiIn0sX2NvbXB1dGVUYWJzQ29udGVudENsYXNzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE/InNjcm9sbGFibGUiKyhjPyIgZml0LWNvbnRhaW5lciI6IiIpOiIgZml0LWNvbnRhaW5lciJ9LF9jb21wdXRlU2VsZWN0aW9uQmFyQ2xhc3M6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYT8iaGlkZGVuIjpjPyJhbGlnbi1ib3R0b20iOiIifSxfb25UYWJTaXppbmdDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX29uVGFiU2l6aW5nQ2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwoKTt0aGlzLl90YWJDaGFuZ2VkKHRoaXMuc2VsZWN0ZWRJdGVtKX0sMTApfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMuX3RhYkNoYW5nZWQoYS5kZXRhaWwuaXRlbSx0aGlzLl9wcmV2aW91c1RhYik7dGhpcy5fcHJldmlvdXNUYWI9YS5kZXRhaWwuaXRlbTsKdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoInRhYi1jaGFuZ2VkIixmdW5jdGlvbigpe3RoaXMuX3RhYkNoYW5nZWQobnVsbCx0aGlzLl9wcmV2aW91c1RhYik7dGhpcy5fcHJldmlvdXNUYWI9bnVsbH0sMSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpO1BvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGwuX2FjdGl2YXRlSGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9zY2hlZHVsZUFjdGl2YXRpb246ZnVuY3Rpb24oYSxjKXt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09YTt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dGhpcy5hc3luYyh0aGlzLl9iaW5kRGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLGMpfSxfZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtOwp0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMDthLmZpcmUodGhpcy5hY3RpdmF0ZUV2ZW50LG51bGwse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pfSxfY2FuY2VsUGVuZGluZ0FjdGl2YXRpb246ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCksdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKCl7dGhpcy5hdXRvc2VsZWN0JiZ0aGlzLl9zY2hlZHVsZUFjdGl2YXRpb24odGhpcy5mb2N1c2VkSXRlbSx0aGlzLmF1dG9zZWxlY3REZWxheSl9LF9vbkJsdXJDYXB0dXJlOmZ1bmN0aW9uKGEpe2EudGFyZ2V0PT09dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtJiZ0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSwKZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGEsYyl7dGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9hZmZlY3RTY3JvbGwoYyYmLWMuZGR4fHwwKX0sX2Rvd246ZnVuY3Rpb24oKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oYSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9YTthPXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7dGhpcy5fbGVmdEhpZGRlbj0wPT09YTt0aGlzLl9yaWdodEhpZGRlbj1hPT09dGhpcy5fdGFiQ29udGFpbmVyU2Nyb2xsU2l6ZX0sCl9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCk7dGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCk7dGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpO3RoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihhLGMpe2lmKGEpe3ZhciBkPXRoaXMuJC50YWJzQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKZj1kLndpZHRoLGc9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkPWcubGVmdC1kLmxlZnQ7dGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChnLndpZHRoLGYpLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQoZCxmKX07aWYodGhpcy5ub1NsaWRlfHxudWxsPT1jKXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCk7ZWxzZXt2YXIgbD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2M9dGhpcy5pdGVtcy5pbmRleE9mKGMpO2E9dGhpcy5pdGVtcy5pbmRleE9mKGEpO3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LmFkZCgiZXhwYW5kIik7YT1jPGE7dGhpcy5faXNSVEwmJihhPSFhKTthP3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGcubGVmdCtnLndpZHRoLQpsLmxlZnQsZiktNSx0aGlzLl9sZWZ0KTp0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9jYWxjUGVyY2VudChsLmxlZnQrbC53aWR0aC1nLmxlZnQsZiktNSx0aGlzLl9jYWxjUGVyY2VudChkLGYpKzUpO3RoaXMuc2Nyb2xsYWJsZSYmdGhpcy5fc2Nyb2xsVG9TZWxlY3RlZElmTmVlZGVkKGcud2lkdGgsZCl9fWVsc2UgdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJleHBhbmQiKSx0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIoMCwwKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihhLGMpe2MtPXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7MD5jP3RoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQrPWM6KGMrPWEtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgsMDxjJiYodGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9YykpfSxfY2FsY1BlcmNlbnQ6ZnVuY3Rpb24oYSwKYyl7cmV0dXJuIDEwMCphL2N9LF9wb3NpdGlvbkJhcjpmdW5jdGlvbihhLGMpe2E9YXx8MDtjPWN8fDA7dGhpcy5fd2lkdGg9YTt0aGlzLl9sZWZ0PWM7dGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZVgoIitjKyIlKSBzY2FsZVgoIithLzEwMCsiKSIsdGhpcy4kLnNlbGVjdGlvbkJhcil9LF9vbkJhclRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdDthLmNvbnRhaW5zKCJleHBhbmQiKT8oYS5yZW1vdmUoImV4cGFuZCIpLGEuYWRkKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCkpOmEuY29udGFpbnMoImNvbnRyYWN0IikmJmEucmVtb3ZlKCJjb250cmFjdCIpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWludGVyYWN0aXZlLWluZmVyZW5jZS1kYXNoYm9hcmQvdGYtaW5mZXJlbmNlLXBhbmVsLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWluZmVyZW5jZS1wYW5lbCIscHJvcGVydGllczp7ZXhhbXBsZXNQYXRoOnt0eXBlOlN0cmluZyx2YWx1ZTpUby5nZXRTdHJpbmdJbml0aWFsaXplcigiZXhhbXBsZXNQYXRoIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6ImV4YW1wbGVzUGF0aENoYW5nZWRfIixub3RpZnk6ITB9LGhpZGVNb2RlbFBhbmUyOnt0eXBlOkJvb2xlYW4sdmFsdWU6VG8uZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJoaWRlTW9kZWxQYW5lMiIse2RlZmF1bHRWYWx1ZTohMH0pLG9ic2VydmVyOiJoaWRlTW9kZWxQYW5lMkNoYW5nZWRfIn0sbW9kZWxOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LG1vZGVsTmFtZTE6e3R5cGU6U3RyaW5nLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJtb2RlbE5hbWUxIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Im1vZGVsTmFtZTFDaGFuZ2VkXyIsbm90aWZ5OiEwfSxtb2RlbE5hbWUyOnt0eXBlOlN0cmluZywKdmFsdWU6VG8uZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoIm1vZGVsTmFtZTIiLHtkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoibW9kZWxOYW1lMkNoYW5nZWRfIixub3RpZnk6ITB9LGluZmVyZW5jZUFkZHJlc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saW5mZXJlbmNlQWRkcmVzczE6e3R5cGU6U3RyaW5nLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJpbmZlcmVuY2VBZGRyZXNzMSIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJpbmZlcmVuY2VBZGRyZXNzMUNoYW5nZWRfIixub3RpZnk6ITB9LGluZmVyZW5jZUFkZHJlc3MyOnt0eXBlOlN0cmluZyx2YWx1ZTpUby5nZXRTdHJpbmdJbml0aWFsaXplcigiaW5mZXJlbmNlQWRkcmVzczIiLHtkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoiaW5mZXJlbmNlQWRkcmVzczJDaGFuZ2VkXyIsbm90aWZ5OiEwfSxtb2RlbFR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJtb2RlbFR5cGUiLAp7ZGVmYXVsdFZhbHVlOiJjbGFzc2lmaWNhdGlvbiJ9KSxvYnNlcnZlcjoibW9kZWxUeXBlQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxWZXJzaW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LG1vZGVsVmVyc2lvbjE6e3R5cGU6U3RyaW5nLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJtb2RlbFZlcnNpb24xIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Im1vZGVsVmVyc2lvbjFDaGFuZ2VkXyIsbm90aWZ5OiEwfSxtb2RlbFZlcnNpb24yOnt0eXBlOlN0cmluZyx2YWx1ZTpUby5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxWZXJzaW9uMiIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJtb2RlbFZlcnNpb24yQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxTaWduYXR1cmU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sbW9kZWxTaWduYXR1cmUxOnt0eXBlOlN0cmluZyx2YWx1ZTpUby5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxTaWduYXR1cmUxIiwKe2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJtb2RlbFNpZ25hdHVyZTFDaGFuZ2VkXyIsbm90aWZ5OiEwfSxtb2RlbFNpZ25hdHVyZTI6e3R5cGU6U3RyaW5nLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJtb2RlbFNpZ25hdHVyZTIiLHtkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoibW9kZWxTaWduYXR1cmUyQ2hhbmdlZF8iLG5vdGlmeTohMH0sbWF4RXhhbXBsZXM6e3R5cGU6TnVtYmVyLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJtYXhFeGFtcGxlcyIse2RlZmF1bHRWYWx1ZToiMTAwMCJ9KSxvYnNlcnZlcjoibWF4RXhhbXBsZXNDaGFuZ2VkXyIsbm90aWZ5OiEwfSxsYWJlbFZvY2FiUGF0aDp7dHlwZTpTdHJpbmcsdmFsdWU6VG8uZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoImxhYmVsVm9jYWJQYXRoIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6ImxhYmVsVm9jYWJQYXRoQ2hhbmdlZF8iLG5vdGlmeTohMH0sbXVsdGlDbGFzczp7dHlwZTpCb29sZWFuLApub3RpZnk6ITAsdmFsdWU6VG8uZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJtdWx0aUNsYXNzIix7ZGVmYXVsdFZhbHVlOiExfSksb2JzZXJ2ZXI6Im11bHRpQ2xhc3NDaGFuZ2VkXyJ9LHNlcXVlbmNlRXhhbXBsZXM6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6VG8uZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJzZXF1ZW5jZUV4YW1wbGVzIix7ZGVmYXVsdFZhbHVlOiExfSksb2JzZXJ2ZXI6InNlcXVlbmNlRXhhbXBsZXNDaGFuZ2VkXyJ9LG1heENsYXNzZXNUb0Rpc3BsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOlRvLmdldFN0cmluZ0luaXRpYWxpemVyKCJtYXhDbGFzc2VzVG9EaXNwbGF5Iix7ZGVmYXVsdFZhbHVlOiI1In0pLG9ic2VydmVyOiJtYXhDbGFzc2VzVG9EaXNwbGF5Q2hhbmdlZF8iLG5vdGlmeTohMH0sc2FtcGxpbmdPZGRzOnt0eXBlOk51bWJlcix2YWx1ZTpUby5nZXRTdHJpbmdJbml0aWFsaXplcigic2FtcGxpbmdPZGRzIix7ZGVmYXVsdFZhbHVlOiIxIn0pLG9ic2VydmVyOiJzYW1wbGluZ09kZHNDaGFuZ2VkXyIsCm5vdGlmeTohMH0sdXNlUHJlZGljdEFwaTp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTpUby5nZXRCb29sZWFuSW5pdGlhbGl6ZXIoInVzZVByZWRpY3RBcGkiLHtkZWZhdWx0VmFsdWU6ITF9KSxvYnNlcnZlcjoidXNlUHJlZGljdEFwaUNoYW5nZWRfIn0scHJlZGljdElucHV0VGVuc29yOnt0eXBlOlN0cmluZyx2YWx1ZTpUby5nZXRTdHJpbmdJbml0aWFsaXplcigicHJlZGljdElucHV0VGVuc29yIix7ZGVmYXVsdFZhbHVlOiJleGFtcGxlcyJ9KSxvYnNlcnZlcjoicHJlZGljdElucHV0VGVuc29yQ2hhbmdlZF8iLG5vdGlmeTohMH0scHJlZGljdE91dHB1dFRlbnNvcjp7dHlwZTpTdHJpbmcsdmFsdWU6VG8uZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoInByZWRpY3RPdXRwdXRUZW5zb3IiLHtkZWZhdWx0VmFsdWU6InByb2JhYmlsaXRpZXMifSksb2JzZXJ2ZXI6InByZWRpY3RPdXRwdXRUZW5zb3JDaGFuZ2VkXyIsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsidXBkYXRlTW9kZWxOYW1lKG1vZGVsTmFtZTEsIG1vZGVsTmFtZTIpIiwKInVwZGF0ZUluZmVyZW5jZUFkZHJlc3MoaW5mZXJlbmNlQWRkcmVzczEsIGluZmVyZW5jZUFkZHJlc3MyKSIsInVwZGF0ZU1vZGVsVmVyc2lvbihtb2RlbFZlcnNpb24xLCBtb2RlbFZlcnNpb24yKSIsInVwZGF0ZU1vZGVsU2lnbmF0dXJlKG1vZGVsU2lnbmF0dXJlMSwgbW9kZWxTaWduYXR1cmUyKSJdLHVwZGF0ZU1vZGVsTmFtZTpmdW5jdGlvbihhLGMpe3RoaXMubW9kZWxOYW1lPWErIiwiK2M7dGhpcy5tb2RlbE5hbWU9dGhpcy5tb2RlbE5hbWUucmVwbGFjZSgvKF4sKXwoLCQpL2csIiIpfSx1cGRhdGVJbmZlcmVuY2VBZGRyZXNzOmZ1bmN0aW9uKGEsYyl7dGhpcy5pbmZlcmVuY2VBZGRyZXNzPWErIiwiK2M7dGhpcy5pbmZlcmVuY2VBZGRyZXNzPXRoaXMuaW5mZXJlbmNlQWRkcmVzcy5yZXBsYWNlKC8oXiwpfCgsJCkvZywiIil9LHVwZGF0ZU1vZGVsVmVyc2lvbjpmdW5jdGlvbihhLGMpe3RoaXMubW9kZWxWZXJzaW9uPWErIiwiK2N9LHVwZGF0ZU1vZGVsU2lnbmF0dXJlOmZ1bmN0aW9uKGEsCmMpe3RoaXMubW9kZWxTaWduYXR1cmU9YSsiLCIrY30sYWRkTW9kZWxDbGlja2VkXzpmdW5jdGlvbigpe3RoaXMuaGlkZU1vZGVsUGFuZTI9IXRoaXMuaGlkZU1vZGVsUGFuZTJ9LGV4YW1wbGVzUGF0aENoYW5nZWRfOlRvLmdldFN0cmluZ09ic2VydmVyKCJleGFtcGxlc1BhdGgiLHtkZWZhdWx0VmFsdWU6IiJ9KSxtb2RlbE5hbWUxQ2hhbmdlZF86VG8uZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsTmFtZTEiLHtkZWZhdWx0VmFsdWU6IiJ9KSxtb2RlbE5hbWUyQ2hhbmdlZF86VG8uZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsTmFtZTIiLHtkZWZhdWx0VmFsdWU6IiJ9KSxpbmZlcmVuY2VBZGRyZXNzMUNoYW5nZWRfOlRvLmdldFN0cmluZ09ic2VydmVyKCJpbmZlcmVuY2VBZGRyZXNzMSIse2RlZmF1bHRWYWx1ZToiIn0pLGluZmVyZW5jZUFkZHJlc3MyQ2hhbmdlZF86VG8uZ2V0U3RyaW5nT2JzZXJ2ZXIoImluZmVyZW5jZUFkZHJlc3MyIix7ZGVmYXVsdFZhbHVlOiIifSksbW9kZWxUeXBlQ2hhbmdlZF86VG8uZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsVHlwZSIsCntkZWZhdWx0VmFsdWU6ImNsYXNzaWZpY2F0aW9uIn0pLG1vZGVsVmVyc2lvbjFDaGFuZ2VkXzpUby5nZXRTdHJpbmdPYnNlcnZlcigibW9kZWxWZXJzaW9uMSIse2RlZmF1bHRWYWx1ZToiIn0pLG1vZGVsVmVyc2lvbjJDaGFuZ2VkXzpUby5nZXRTdHJpbmdPYnNlcnZlcigibW9kZWxWZXJzaW9uMiIse2RlZmF1bHRWYWx1ZToiIn0pLG1vZGVsU2lnbmF0dXJlMUNoYW5nZWRfOlRvLmdldFN0cmluZ09ic2VydmVyKCJtb2RlbFNpZ25hdHVyZTEiLHtkZWZhdWx0VmFsdWU6IiJ9KSxtb2RlbFNpZ25hdHVyZTJDaGFuZ2VkXzpUby5nZXRTdHJpbmdPYnNlcnZlcigibW9kZWxTaWduYXR1cmUyIix7ZGVmYXVsdFZhbHVlOiIifSksbWF4RXhhbXBsZXNDaGFuZ2VkXzpUby5nZXRTdHJpbmdPYnNlcnZlcigibWF4RXhhbXBsZXMiLHtkZWZhdWx0VmFsdWU6IjEwMDAifSksbGFiZWxWb2NhYlBhdGhDaGFuZ2VkXzpUby5nZXRTdHJpbmdPYnNlcnZlcigibGFiZWxWb2NhYlBhdGgiLHtkZWZhdWx0VmFsdWU6IiJ9KSwKbWF4Q2xhc3Nlc1RvRGlzcGxheUNoYW5nZWRfOlRvLmdldFN0cmluZ09ic2VydmVyKCJtYXhDbGFzc2VzVG9EaXNwbGF5Iix7ZGVmYXVsdFZhbHVlOiI1In0pLHNhbXBsaW5nT2Rkc0NoYW5nZWRfOlRvLmdldFN0cmluZ09ic2VydmVyKCJzYW1wbGluZ09kZHMiLHtkZWZhdWx0VmFsdWU6IjEifSksbXVsdGlDbGFzc0NoYW5nZWRfOlRvLmdldEJvb2xlYW5PYnNlcnZlcigibXVsdGlDbGFzcyIse2RlZmF1bHRWYWx1ZTohMX0pLHNlcXVlbmNlRXhhbXBsZXNDaGFuZ2VkXzpUby5nZXRCb29sZWFuT2JzZXJ2ZXIoInNlcXVlbmNlRXhhbXBsZXMiLHtkZWZhdWx0VmFsdWU6ITF9KSxoaWRlTW9kZWxQYW5lMkNoYW5nZWRfOlRvLmdldEJvb2xlYW5PYnNlcnZlcigiaGlkZU1vZGVsUGFuZTIiLHtkZWZhdWx0VmFsdWU6ITB9KSx1c2VQcmVkaWN0QXBpQ2hhbmdlZF86VG8uZ2V0Qm9vbGVhbk9ic2VydmVyKCJ1c2VQcmVkaWN0QXBpIix7ZGVmYXVsdFZhbHVlOiExfSkscHJlZGljdE91dHB1dFRlbnNvckNoYW5nZWRfOlRvLmdldFN0cmluZ09ic2VydmVyKCJwcmVkaWN0T3V0cHV0VGVuc29yIiwKe2RlZmF1bHRWYWx1ZToicHJvYmFiaWxpdGllcyJ9KSxwcmVkaWN0SW5wdXRUZW5zb3JDaGFuZ2VkXzpUby5nZXRTdHJpbmdPYnNlcnZlcigicHJlZGljdElucHV0VGVuc29yIix7ZGVmYXVsdFZhbHVlOiJleGFtcGxlcyJ9KSxzaG91bGREaXNhYmxlQ2xhc3NpZmljYXRpb25Db250cm9sc186ZnVuY3Rpb24oYSl7cmV0dXJuInJlZ3Jlc3Npb24iPT1hfSxzaG91bGREaXNhYmxlTXVsdGlDbGFzc0NvbnRyb2xzXzpmdW5jdGlvbihhKXtyZXR1cm4hYX0sc2hvdWxkRGlzYWJsZVByZWRpY3RUZW5zb3JDb250cm9sc186ZnVuY3Rpb24oYSl7cmV0dXJuIWF9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdnotYmFyLWNoYXJ0L3Z6LWJhci1jaGFydC5qcwp2YXIgRXA7CihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ2ei1iYXItY2hhcnQiLHByb3BlcnRpZXM6e2RhdGE6T2JqZWN0LGxpbmVzOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sY29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3IpLnJhbmdlKGQzLnNjaGVtZUNhdGVnb3J5MTApfX0sbGluZXNDb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybihuZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcikucmFuZ2UoZDMuc2NoZW1lQ2F0ZWdvcnkxMCl9fSx0b29sdGlwQ29sdW1uczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmZ1bmN0aW9uKGMpe3JldHVybiBjLmtleX19LHt0aXRsZToiWCIsZXZhbHVhdGU6ZnVuY3Rpb24oYyl7cmV0dXJuIGMudmFsdWUueH19LHt0aXRsZToiWSIsZXZhbHVhdGU6ZnVuY3Rpb24oYyl7cmV0dXJuIGMudmFsdWUueX19XX19LF9hdHRhY2hlZDpCb29sZWFuLApfY2hhcnQ6T2JqZWN0fSxvYnNlcnZlcnM6WyJfbWFrZUNoYXJ0KGRhdGEsIGxpbmVzLCBjb2xvclNjYWxlLCBsaW5lc0NvbG9yU2NhbGUsIHRvb2x0aXBDb2x1bW5zLCBfYXR0YWNoZWQpIl0scmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2F0dGFjaGVkPSEwfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2F0dGFjaGVkPSExfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC50b29sdGlwLCEwKTt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuY2hhcnRkaXYsITApfSxfbWFrZUNoYXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKTt2YXIgYz1kMy5zZWxlY3QodGhpcy4kLnRvb2x0aXApO2M9bmV3IGEodGhpcy5kYXRhLHRoaXMubGluZXMsdGhpcy5jb2xvclNjYWxlLHRoaXMubGluZXNDb2xvclNjYWxlLGMsdGhpcy50b29sdGlwQ29sdW1ucyk7CnZhciBkPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnRkaXYpO2MucmVuZGVyVG8oZCk7dGhpcy5fY2hhcnQ9Y319KTtjbGFzcyBhe2NvbnN0cnVjdG9yKGMsZCxmLGcsbCxrKXtmLmRvbWFpbihfLnNvcnRCeShfLmtleXMoYykpKTt0aGlzLmRhdGE9Yzt0aGlzLmxpbmVzPWQ7dGhpcy5jb2xvclNjYWxlPWY7dGhpcy5saW5lc0NvbG9yU2NhbGU9Zzt0aGlzLnRvb2x0aXA9bDt0aGlzLm91dGVyPXRoaXMucGxvdD1udWxsO3RoaXMuYnVpbGRDaGFydChjLGQsZixnKTt0aGlzLnNldHVwVG9vbHRpcHMoayl9YnVpbGRDaGFydChjLGQsZil7dGhpcy5vdXRlciYmdGhpcy5vdXRlci5kZXN0cm95KCk7dmFyIGc9bmV3IFBsb3R0YWJsZS5TY2FsZXMuQ2F0ZWdvcnk7Y29uc3QgbD1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXIsaz1uZXcgUGxvdHRhYmxlLkF4ZXMuQ2F0ZWdvcnkoZywiYm90dG9tIiksbj1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhsLCJsZWZ0IikscD1uZXcgUGxvdHRhYmxlLlBsb3RzLkNsdXN0ZXJlZEJhcjsKcC54KGZ1bmN0aW9uKHIpe3JldHVybiByLnh9LGcpO3AueShmdW5jdGlvbihyKXtyZXR1cm4gci55fSxsKTtfLmtleXMoYykuZm9yRWFjaChyPT5wLmFkZERhdGFzZXQoKG5ldyBQbG90dGFibGUuRGF0YXNldChjW3JdKSkubWV0YWRhdGEocikpKTtwLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHIsdCx2KXtyZXR1cm4gZi5zY2FsZSh2Lm1ldGFkYXRhKCkpfSk7dGhpcy5wbG90PXA7Y29uc3QgcT1fLmtleXMoZCk7aWYoMDxxLmxlbmd0aCl7Y29uc3Qgcj1uZXcgUGxvdHRhYmxlLlBsb3RzLkxpbmU7ci54KGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9LGcpO3IueShmdW5jdGlvbih0KXtyZXR1cm4gdC55fSxsKTtxLmZvckVhY2godD0+ci5hZGREYXRhc2V0KChuZXcgUGxvdHRhYmxlLkRhdGFzZXQoZFt0XSkpLm1ldGFkYXRhKHQpKSk7ci5hdHRyKCJzdHJva2UiLCh0LHYseSk9PnRoaXMubGluZXNDb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKSkpO2c9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKFtwLApyXSk7dGhpcy5vdXRlcj1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuVGFibGUoW1tuLGddLFtudWxsLGtdXSl9ZWxzZSB0aGlzLm91dGVyPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW24scF0sW251bGwsa11dKX1zZXR1cFRvb2x0aXBzKGMpe3ZhciBkPXRoaXMudG9vbHRpcC5zZWxlY3QoInRoZWFkIHRyIik7ZC5zZWxlY3RBbGwoInRoIikuZGF0YShjKS5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGc9PmcudGl0bGUpO2QuaW5zZXJ0KCJ0aCIsIjpmaXJzdC1jaGlsZCIpO2NvbnN0IGY9dGhpcy5wbG90O2Q9bmV3ICRvLlBvaW50ZXJJbnRlcmFjdGlvbjtkLmF0dGFjaFRvKGYpO2Qub25Qb2ludGVyTW92ZShnPT57KGc9Zi5lbnRpdHlOZWFyZXN0KGcpKSYmdGhpcy5kcmF3VG9vbHRpcHMoZyxjKX0pO2Qub25Qb2ludGVyRXhpdCgoKT0+e3RoaXMudG9vbHRpcC5zdHlsZSgib3BhY2l0eSIsMCl9KX1kcmF3VG9vbHRpcHMoYyxkKXtjb25zdCBmPWMuZGF0dW0ueCxnPWMuZGF0YXNldC5tZXRhZGF0YSgpOwp2YXIgbD1fLm1hcFZhbHVlcyh0aGlzLmRhdGEscD0+Xy5maWx0ZXIocCxxPT5xLng9PWYpKTtsPV8ucGlja0J5KGwscD0+MDxwLmxlbmd0aCk7bD1fLm1hcFZhbHVlcyhsLHA9PnBbMF0pO2w9ZDMuZW50cmllcyhsKTtjb25zdCBrPXRoaXMudG9vbHRpcC5zZWxlY3QoInRib2R5IikuaHRtbCgiIikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEobCkuZW50ZXIoKS5hcHBlbmQoInRyIik7ay5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKTtrLmNsYXNzZWQoImNsb3Nlc3QiLHA9PnAua2V5PT1nKTtjb25zdCBuPXRoaXMuY29sb3JTY2FsZTtrLmFwcGVuZCgidGQiKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN3YXRjaCIsITApLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIixwPT5uLnNjYWxlKHAua2V5KSk7Xy5lYWNoKGQscD0+e2suYXBwZW5kKCJ0ZCIpLnRleHQocT0+cC5ldmFsdWF0ZShxKSl9KTt0aGlzLnRvb2x0aXAuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2MucG9zaXRpb24ueCsKInB4LCIrYy5wb3NpdGlvbi55KyJweCkiKTt0aGlzLnRvb2x0aXAuc3R5bGUoIm9wYWNpdHkiLDEpfXJlbmRlclRvKGMpe3RoaXMudGFyZ2V0U1ZHPWM7dGhpcy5vdXRlci5yZW5kZXJUbyhjKX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19fSkoRXB8fChFcD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWludGVyYWN0aXZlLWluZmVyZW5jZS1kYXNoYm9hcmQvdGYtY29uZnVzaW9uLW1hdHJpeC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1jb25mdXNpb24tbWF0cml4Iixwcm9wZXJ0aWVzOntjb3VudHM6T2JqZWN0LGFsbEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sbGFiZWw6U3RyaW5nLGJhY2tncm91bmQ6e3R5cGU6T2JqZWN0LHZhbHVlOmQzLmNvbG9yKCJncmF5Iil9fSxvYnNlcnZlcnM6WyJkcmF3TWF0cml4KGNvdW50cywgYWxsSXRlbXMpIl0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuaG9sZGVyLCEwKX0sZHJhd01hdHJpeDpmdW5jdGlvbihhLGMpe3RoaXMuJC5ob2xkZXIuaW5uZXJIVE1MPSIiO2lmKGEpe3ZhciBkPWM7aWYobnVsbD09ZHx8MD09ZC5sZW5ndGgpe2M9bmV3IFNldDt2YXIgZj1PYmplY3Qua2V5cyhhKTtmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl7Yy5hZGQoZltnXSk7dmFyIGw9T2JqZWN0LmtleXMoYVtmW2ddXSk7Zm9yKGxldCBxPTA7cTxsLmxlbmd0aDtxKyspYy5hZGQobFtxXSl9ZD1BcnJheS5mcm9tKGMudmFsdWVzKCkpfWQ9CmQuc29ydCgpOzI9PWQubGVuZ3RoJiYiTm8iPT1kWzBdJiYiWWVzIj09ZFsxXSYmKGQ9ZC5yZXZlcnNlKCkpO3ZhciBrPUFycmF5KGQubGVuZ3RoKTtfLmZpbGwoaywwKTt2YXIgbj1bXTtmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKWY9QXJyYXkoZC5sZW5ndGgpLF8uZmlsbChmLDApLG4ucHVzaChmKTtmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKWZvcihmPTA7ZjxkLmxlbmd0aDtmKyspZz1kW2NdLGw9ZFtmXSxnIGluIGEmJmwgaW4gYVtnXSYmKG5bY11bZl09YVtnXVtsXSk7YT1bXTt2YXIgcD0wO2ZvcihjPTA7YzxuLmxlbmd0aDtjKyspZm9yKGY9bltjXS5yZWR1Y2UoKHEscik9PnErciwwKSxhLnB1c2goWzBdLmNvbmNhdChuW2NdKS5jb25jYXQoW2ZdKSksZj0wO2Y8bi5sZW5ndGg7ZisrKWtbZl0rPW5bY11bZl0scCs9bltjXVtmXTtjPXRoaXMuZ2V0SW5kaWNlcyhuLmxlbmd0aCsyKTtsPWQzLnNlbGVjdCh0aGlzLiQuaG9sZGVyKS5hcHBlbmQoInRhYmxlIik7Zj1sLmFwcGVuZCgidGhlYWQiKTsKZz1sLmFwcGVuZCgidGJvZHkiKTtsPWwuYXBwZW5kKCJ0Zm9vdCIpO2YuYXBwZW5kKCJ0ciIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKGMpLmVudGVyKCkuYXBwZW5kKCJ0aCIpLnRleHQocT0+MD09cT90aGlzLmxhYmVsOnE8PW4ubGVuZ3RoPyJQcmVkaWN0ZWQgIitkW3EtMV06IlRvdGFsIikuYXR0cigiY2xhc3MiLHE9PjA9PXE/Im4tbGFiZWwiOnE8PW4ubGVuZ3RoPyJwcmVkLWxhYmVsIjoidG90YWwtbGFiZWwiKTthPWcuc2VsZWN0QWxsKCJ0ciIpLmRhdGEoYSkuZW50ZXIoKS5hcHBlbmQoInRyIikuc2VsZWN0QWxsKCJ0ZCIpLmRhdGEoKHEscik9PnEubWFwKCh0LHYpPT4wPT12P3t2YWx1ZToiQWN0dWFsICIrZFtyXX06e3ZhbHVlOnQscm93OnJ9KSkuZW50ZXIoKS5hcHBlbmQoInRkIikuYXR0cigiY2xhc3MiLChxLHIpPT4wPT1yPyJhY3R1YWwtbGFiZWwiOnI8PW4ubGVuZ3RoPyJ2YWx1ZS1jZWxsIjoidG90YWwtY2VsbCIpLnN0eWxlKCJiYWNrZ3JvdW5kIiwocSxyKT0+e2lmKDA9PQpyfHxyPm4ubGVuZ3RoKXJldHVybiIjRkZGRkZGIjtyPXRoaXMuYmFja2dyb3VuZDtyLm9wYWNpdHk9cS52YWx1ZS9wO3JldHVybiByKyIifSkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJmbGV4IiwhMCk7YS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInBhcmVudGhldGljYWwiLChxLHIpPT4hIXIpLnRleHQocT0+InJvdyJpbiBxPyIoIitxLnZhbHVlKyIpIjoiIik7YS5hcHBlbmQoImRpdiIpLnRleHQoKHEscik9PjA8cj9kMy5mb3JtYXQoIiwuMSUiKShxLnZhbHVlL3ApOnEudmFsdWUpO2E9bC5hcHBlbmQoInRyIikuc2VsZWN0QWxsKCJ0ZCIpLmRhdGEoYykuZW50ZXIoKS5hcHBlbmQoInRkIik7YS5jbGFzc2VkKCJ0b3RhbC1sYWJlbCIsKHEscik9PjA9PXIpO2EuY2xhc3NlZCgidG90YWwtY2VsbCIsKHEscik9PjAhPXIpO2E9YS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImZsZXgiLCEwKTthLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGFyZW50aGV0aWNhbCIsKHEscik9PiEhcikudGV4dChxPT4KMD09cT8iVG90YWwiOnE8PW4ubGVuZ3RoPyIoIitrW3EtMV0rIikiOiIiKTthLmFwcGVuZCgiZGl2IikudGV4dChxPT4wPT1xPyIiOnE8PW4ubGVuZ3RoP2QzLmZvcm1hdCgiLC4xJSIpKGtbcS0xXS9wKToiIil9fSxnZXRJbmRpY2VzOmZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5hcHBseShudWxsLHtsZW5ndGg6YX0pLm1hcChOdW1iZXIuY2FsbCxOdW1iZXIpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWludGVyYWN0aXZlLWluZmVyZW5jZS1kYXNoYm9hcmQvdGYtaW5mZXJlbmNlLXZpZXdlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbmZlcmVuY2Utdmlld2VyIixwcm9wZXJ0aWVzOntpbmZlcmVuY2VzOkFycmF5LG1vZGVsVHlwZTpTdHJpbmcsbW9kZWxOYW1lczpBcnJheSxtYXhFbnRyaWVzUGVyUnVuOnt0eXBlOk51bWJlcix2YWx1ZTo1fX0sZ2V0TGFiZWw6ZnVuY3Rpb24oYSl7bGV0IGM9YS5sYWJlbDthLnZvY2FiTGFiZWwmJihjKz0iICgiK2Eudm9jYWJMYWJlbCsiKSIpO3JldHVybiBjfSxnZXRMYWJlbENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiJjbGFzc2lmaWNhdGlvbiI9PWE/InNob3ctbGFiZWwgdGV4dCI6Im5vLWxhYmVsIn0sZ2V0TGFiZWxIZWFkZXJDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT1hPyJzaG93LWxhYmVsIjoibm8tbGFiZWwifSxnZXRNb2RlbENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhJiYxPGFbMF0ubGVuZ3RoPyJtdWx0aS1tb2RlbCB0ZXh0Ijoib25lLW1vZGVsIn0sZ2V0TW9kZWxIZWFkZXJDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYSYmCjE8YVswXS5sZW5ndGg/Im11bHRpLW1vZGVsIjoib25lLW1vZGVsIn0sZ2V0U2NvcmVMYWJlbDpmdW5jdGlvbihhKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT1hPyJTY29yZSI6IlZhbHVlIn0sZ2V0SWNvbkNsYXNzOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5nZXRJY29uRGVjaXNpb24oYSxjLGQsImdyZWVuIiwicmVkIil9LGdldEljb246ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmdldEljb25EZWNpc2lvbihhLGMsZCwiaWNvbnM6YXJyb3ctdXB3YXJkIiwiaWNvbnM6YXJyb3ctZG93bndhcmQiKX0sZ2V0SWNvbkRlY2lzaW9uOmZ1bmN0aW9uKGEsYyxkLGYsZyl7aWYoMD09YSlyZXR1cm4iIjtjb25zdCBsPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5sYWJlbDtjPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5zY29yZTthPXRoaXMuaW5mZXJlbmNlc1thLTFdW2RdO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspaWYoYVtkXS5sYWJlbD09bCl7aWYoYVtkXS5zY29yZT5jKXJldHVybiBnOwppZihhW2RdLnNjb3JlPGMpYnJlYWs7cmV0dXJuIiJ9cmV0dXJuIGZ9LGdldFJ1bk51bWJlcjpmdW5jdGlvbihhKXtyZXR1cm4gYSsxfSxnZXRNb2RlbE5hbWU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYVtjXX0sZ2V0TWFya2VyQ2xhc3M6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiJtYXJrZXIiKyhudWxsIT1jJiZhPT1jLmxlbmd0aC0xPzA9PWQ/IiBtYXJrLW9uZSI6IiBtYXJrLXR3byI6IiIpfSxnZXRSb3dDbGFzczpmdW5jdGlvbihhLGMsZCl7bGV0IGY9InJvdyAiO3JldHVybiBmPW51bGwhPWMmJmE9PWMubGVuZ3RoLTE/ZisoMD09ZD8iZGFyay1yb3ctb25lIjoiZGFyay1yb3ctdHdvIik6Zisid2hpdGUtcm93In0sZ2V0SW5mZXJlbmNlOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxnZXRQcmludGFibGVTY29yZTpmdW5jdGlvbihhKXtyZXR1cm4gYS50b0ZpeGVkKDMpfSxnZXRQcmludGFibGVEZWx0YTpmdW5jdGlvbihhLGMsZCl7aWYoMD09YSlyZXR1cm4iIjtjb25zdCBmPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5sYWJlbDsKYz10aGlzLmluZmVyZW5jZXNbYV1bZF1bY10uc2NvcmU7YT10aGlzLmluZmVyZW5jZXNbYS0xXVtkXTtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGFbZF0ubGFiZWw9PWYpcmV0dXJuKGMtYVtkXS5zY29yZSkudG9GaXhlZCg2KTtyZXR1cm4iIn0sZ2V0SW5mZXJlbmNlTGlzdDpmdW5jdGlvbihhLGMpe3JldHVybiBhLnNsaWNlKDAsYyl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLWRpdmUvbGliL2JvdW5kZWQtb2JqZWN0LmpzCi8qCgogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIEluYy4KCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KdmFyIEZwOyhmdW5jdGlvbihhKXthW2EuQm90dG9tPTBdPSJCb3R0b20iO2FbYS5MZWZ0PTFdPSJMZWZ0IjthW2EuUmlnaHQ9Ml09IlJpZ2h0IjthW2EuVG9wPTNdPSJUb3AifSkoRnB8fChGcD17fSkpOwpjbGFzcyBHcHtzaG91bGRCZVZpc2libGUoYSxjLGQsZil7aWYodm9pZCAwIT09dGhpcy5taW5TY2FsZSlyZXR1cm4gdGhpcy5zY2FsZURvd258fGM+PXRoaXMubWluU2NhbGU7aWYoIXRoaXMuYm91bmRpbmdCb3gpcmV0dXJuITA7Y29uc3QgZz10aGlzLmJvdW5kaW5nQm94O2lmKGcubGVmdD5kLngrZi5yaWdodHx8Zy5yaWdodDxkLngrZi5sZWZ0fHxnLmJvdHRvbT5kLnkrZi50b3B8fGcudG9wPGQueStmLmJvdHRvbSlyZXR1cm4hMTtmPXRoaXMuZWxlbWVudE1hcmdpbnx8e2JvdHRvbTowLGxlZnQ6MCxyaWdodDowLHRvcDowfTtkPXZvaWQgMD09PXRoaXMud2lkdGg/YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCtmLmxlZnQrZi5yaWdodDp0aGlzLndpZHRoO2E9dm9pZCAwPT09dGhpcy5oZWlnaHQ/YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrZi50b3ArZi5ib3R0b206dGhpcy5oZWlnaHQ7Zj1pc0Zpbml0ZShnLnRvcCkmJmlzRmluaXRlKGcuYm90dG9tKT8KZy50b3AtZy5ib3R0b206SW5maW5pdHk7cmV0dXJuKGlzRmluaXRlKGcubGVmdCkmJmlzRmluaXRlKGcucmlnaHQpP2cucmlnaHQtZy5sZWZ0OkluZmluaXR5KSpjPj1kJiZmKmM+PWF9fTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtZGl2ZS9saWIvc29ydGluZy5qcwpmdW5jdGlvbiBIcChhLGMpe3JldHVybiBudWxsIT09YSYmdm9pZCAwIT09YXx8bnVsbCE9PWMmJnZvaWQgMCE9PWM/bnVsbD09PWF8fHZvaWQgMD09PWE/LTE6bnVsbD09PWN8fHZvaWQgMD09PWM/MToibnVtYmVyIj09PXR5cGVvZiBhJiYibnVtYmVyIj09PXR5cGVvZiBjP2lzTmFOKGEpJiZpc05hTihjKT8wOmlzTmFOKGEpPy0xOmlzTmFOKGMpPzE6YS1jOiJzdHJpbmciIT09dHlwZW9mIGE/LTE6InN0cmluZyIhPT10eXBlb2YgYz8xOmEubG9jYWxlQ29tcGFyZShjKTphPT09Yz8wOnZvaWQgMD09PWE/LTE6MX0KZnVuY3Rpb24gSXAoYSxjKXtyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWF8fG51bGwhPT1jJiZ2b2lkIDAhPT1jP251bGw9PT1hfHx2b2lkIDA9PT1hPy0xOm51bGw9PT1jfHx2b2lkIDA9PT1jPzE6Im51bWJlciI9PT10eXBlb2YgYSYmIm51bWJlciI9PT10eXBlb2YgYz9pc05hTihhKSYmaXNOYU4oYyk/MDppc05hTihhKT8tMTppc05hTihjKT8xOmMtYToic3RyaW5nIiE9PXR5cGVvZiBhPy0xOiJzdHJpbmciIT09dHlwZW9mIGM/MTotYS5sb2NhbGVDb21wYXJlKGMpOmE9PT1jPzA6dm9pZCAwPT09YT8tMToxfQpmdW5jdGlvbiBKcChhLGMpe3JldHVybiBudWxsIT09YSYmdm9pZCAwIT09YXx8bnVsbCE9PWMmJnZvaWQgMCE9PWM/bnVsbD09PWF8fHZvaWQgMD09PWE/LTE6bnVsbD09PWN8fHZvaWQgMD09PWM/MToic3RyaW5nIj09PXR5cGVvZiBhJiYic3RyaW5nIj09PXR5cGVvZiBjP2EubG9jYWxlQ29tcGFyZShjKToibnVtYmVyIiE9PXR5cGVvZiBhPy0xOiJudW1iZXIiIT09dHlwZW9mIGM/MTppc05hTihhKSYmaXNOYU4oYyk/MDppc05hTihhKT8tMTppc05hTihjKT8xOmEtYzphPT09Yz8wOnZvaWQgMD09PWE/LTE6MX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLWRpdmUvbGliL2dyaWQuanMKY29uc3QgS3A9KGEsYyxkLGYpPT57YT1NYXRoLmZsb29yKDFFLTYrZC5taW5XaWR0aC9mLml0ZW1Bc3BlY3RSYXRpbyk7cmV0dXJuIDE8YT9jJWEvKGEtMSk6MH0sTHA9KGEsYyxkLGYpPT57YT1NYXRoLmZsb29yKDFFLTYrZC5taW5XaWR0aC9mLml0ZW1Bc3BlY3RSYXRpbyk7ZD1NYXRoLmNlaWwoZC5pdGVtcy5sZW5ndGgvYSk7cmV0dXJuIDE8ZD9NYXRoLmZsb29yKGMvYSkvKGQtMSk6MH0sTXA9KGEsYyk9Pntjb25zdCBkPSJyaWdodCI9PT1jPzE6Im1pZGRsZSI9PT1jPy41OjAsZj0idG9wIj09PWE/MToibWlkZGxlIj09PWE/LjU6MDtyZXR1cm4oZyxsLGssbik9Pntjb25zdCBwPWsuaW5uZXJXaWR0aC1uLml0ZW1Bc3BlY3RSYXRpbyxxPWsuaW5uZXJIZWlnaHQtMTtyZXR1cm57eDpLcChnLGwsayxuKS9wKihrLm1pbldpZHRoLW4uaXRlbUFzcGVjdFJhdGlvKStkKihrLmlubmVyV2lkdGgtay5taW5XaWR0aCkvcCx5OkxwKGcsbCxrLG4pL3EqKGsubWluSGVpZ2h0LTEpK2YqKGsuaW5uZXJIZWlnaHQtCmsubWluSGVpZ2h0KS9xfX19LE5wPU1wKCJib3R0b20iLCJsZWZ0Iik7dmFyIE9wOyhmdW5jdGlvbihhKXthW2EuVGlnaHQ9MF09IlRpZ2h0IjthW2EuVW5pZm9ybT0xXT0iVW5pZm9ybSJ9KShPcHx8KE9wPXt9KSk7CmNsYXNzIFBwe2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YTt0aGlzLmNlbGxNYXJnaW49dGhpcy5pdGVtQXNwZWN0UmF0aW89MTt0aGlzLmNlbGxQYWRkaW5nPXtib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx0b3A6MH07dGhpcy50YXJnZXRHcmlkQXNwZWN0UmF0aW89MTt0aGlzLm1pbkNlbGxBc3BlY3RSYXRpbz0wO3RoaXMubWF4Q2VsbEFzcGVjdFJhdGlvPUluZmluaXR5O3RoaXMudmVydGljYWxGYWNldD0oKT0+bnVsbDt0aGlzLmhvcml6b250YWxGYWNldD0oKT0+bnVsbDt0aGlzLnZlcnRpY2FsS2V5Q29tcGFyZT1JcDt0aGlzLmhvcml6b250YWxLZXlDb21wYXJlPUhwO3RoaXMudmVydGljYWxLZXlzPVtdO3RoaXMudmVydGljYWxLZXlzSGFzaD17fTt0aGlzLmhvcml6b250YWxLZXlzPVtdO3RoaXMuaG9yaXpvbnRhbEtleXNIYXNoPXt9O3RoaXMuY2VsbHM9e307dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLmxvbmdlc3RDZWxsTGVuZ3RoPTA7dGhpcy5pdGVtUG9zaXRpb25TZXR0ZXI9CihjLGQsZik9PntjLng9ZDtjLnk9Zn07dGhpcy5jb21wdXRlSXRlbVBvc2l0aW9uPU5wO3RoaXMuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQ9dGhpcy52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9T3AuVGlnaHQ7dGhpcy5jZWxsSXRlbUNvbXBhcmF0b3I9bnVsbH1jbGVhcigpe3RoaXMudmVydGljYWxLZXlzPVtdO3RoaXMudmVydGljYWxLZXlzSGFzaD17fTt0aGlzLmhvcml6b250YWxLZXlzPVtdO3RoaXMuaG9yaXpvbnRhbEtleXNIYXNoPXt9O3RoaXMuY2VsbHM9e307dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLmxvbmdlc3RDZWxsTGVuZ3RoPTB9YXJyYW5nZSgpe3RoaXMuZmFjZXRJdGVtc0ludG9DZWxscygpO3ZhciBhPXRoaXMuY29tcHV0ZU9wdGltYWxDZWxsQXNwZWN0UmF0aW8odGhpcy50YXJnZXRHcmlkQXNwZWN0UmF0aW8pLGM9TWF0aC5taW4odGhpcy5tYXhDZWxsQXNwZWN0UmF0aW8sTWF0aC5tYXgodGhpcy5taW5DZWxsQXNwZWN0UmF0aW8sYSkpO2E9W107Y29uc3QgZD0KW107Zm9yKHZhciBmPTA7Zjx0aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGg7ZisrKWZvcih2YXIgZz0wO2c8dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7ZysrKXt2YXIgbD10aGlzLmdldE9yQ3JlYXRlQ2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tmXSx0aGlzLmhvcml6b250YWxLZXlzW2ddKTtbbC5taW5XaWR0aCxsLm1pbkhlaWdodF09dGhpcy5jb21wdXRlQ2VsbERpbWVuc2lvbnMoYyxsLml0ZW1zLmxlbmd0aCk7YVtmXT1NYXRoLm1heChhW2ZdfHwwLGwubWluSGVpZ2h0KTtkW2ddPU1hdGgubWF4KGRbZ118fDAsbC5taW5XaWR0aCl9Zm9yKGM9MDtjPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aDtjKyspZm9yKGY9MDtmPHRoaXMuaG9yaXpvbnRhbEtleXMubGVuZ3RoO2YrKylnPXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tjXSx0aGlzLmhvcml6b250YWxLZXlzW2ZdKSxjPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aC0xJiYoZy5zaWJsaW5ncy5hYm92ZT10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbYysKMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tmXSkpLDA8YyYmKGcuc2libGluZ3MuYmVsb3c9dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2MtMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tmXSkpLDA8ZiYmKGcuc2libGluZ3MubGVmdD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbY10sdGhpcy5ob3Jpem9udGFsS2V5c1tmLTFdKSksZjx0aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aC0xJiYoZy5zaWJsaW5ncy5yaWdodD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbY10sdGhpcy5ob3Jpem9udGFsS2V5c1tmKzFdKSk7aWYodGhpcy52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9PT1PcC5Vbmlmb3JtKWZvcihjPU1hdGgubWF4KC4uLmEpLGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPWM7aWYodGhpcy5ob3Jpem9udGFsR3JpZEFsaWdubWVudD09PU9wLlVuaWZvcm0pZm9yKGM9TWF0aC5tYXgoLi4uZCksZj0wO2Y8ZC5sZW5ndGg7ZisrKWRbZl09Yztmb3IoYz0wO2M8dGhpcy52ZXJ0aWNhbEtleXMubGVuZ3RoO2MrKylmb3IoZj0KMDtmPHRoaXMuaG9yaXpvbnRhbEtleXMubGVuZ3RoO2YrKylnPXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tjXSx0aGlzLmhvcml6b250YWxLZXlzW2ZdKSxnLmhlaWdodD1hW2NdLGcud2lkdGg9ZFtmXSxnLmlubmVySGVpZ2h0PWcuaGVpZ2h0LXRoaXMuY2VsbFBhZGRpbmcudG9wLXRoaXMuY2VsbFBhZGRpbmcuYm90dG9tLGcuaW5uZXJXaWR0aD1nLndpZHRoLXRoaXMuY2VsbFBhZGRpbmcubGVmdC10aGlzLmNlbGxQYWRkaW5nLnJpZ2h0O2M9dGhpcy5jZWxsTWFyZ2luKnRoaXMuaXRlbUFzcGVjdFJhdGlvO2ZvcihmPTA7Zjx0aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGg7ZisrKWZvcihnPTA7Zzx0aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aDtnKyspbD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbZl0sdGhpcy5ob3Jpem9udGFsS2V5c1tnXSksbC55PWY/dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2YtMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tnXSkueSsKYVtmLTFdK2M6MCxsLmNvbnRlbnRZPWwueSt0aGlzLmNlbGxQYWRkaW5nLmJvdHRvbSxsLng9Zz90aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbZl0sdGhpcy5ob3Jpem9udGFsS2V5c1tnLTFdKS54K2RbZy0xXStjOjAsbC5jb250ZW50WD1sLngrdGhpcy5jZWxsUGFkZGluZy5sZWZ0O3RoaXMuZWFjaENlbGwoaz0+e3RoaXMud2lkdGg9TWF0aC5tYXgodGhpcy53aWR0aCxrLngray53aWR0aCk7dGhpcy5oZWlnaHQ9TWF0aC5tYXgodGhpcy5oZWlnaHQsay55K2suaGVpZ2h0KX0pO3RoaXMucG9zaXRpb25JdGVtcygpfXBvc2l0aW9uSXRlbXMoKXt0aGlzLmVhY2hDZWxsKGE9Pntjb25zdCBjPU1hdGgubWF4KDAsYS5pbm5lcldpZHRoLXRoaXMuaXRlbUFzcGVjdFJhdGlvKSxkPU1hdGgubWF4KDAsYS5pbm5lckhlaWdodC0xKSxmPWEuaXRlbXMuc2xpY2UoMCk7dGhpcy5jZWxsSXRlbUNvbXBhcmF0b3ImJmYuc29ydCh0aGlzLmNlbGxJdGVtQ29tcGFyYXRvcik7Zm9yKGxldCBnPQowO2c8Zi5sZW5ndGg7ZysrKXtjb25zdCBsPXRoaXMuY29tcHV0ZUl0ZW1Qb3NpdGlvbihmW2ddLGcsYSx0aGlzKTt0aGlzLml0ZW1Qb3NpdGlvblNldHRlcihmW2ddLGEuY29udGVudFgrKCFsfHxpc05hTihsLngpPzA6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGwueCkpKSpjLGEuY29udGVudFkrKCFsfHxpc05hTihsLnkpPzA6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGwueSkpKSpkKX19KX1mYWNldEl0ZW1zSW50b0NlbGxzKCl7dGhpcy5jbGVhcigpO3RoaXMuZWFjaEl0ZW0oYT0+e2NvbnN0IGM9dGhpcy5nZXRPckNyZWF0ZUNlbGwodGhpcy52ZXJ0aWNhbEZhY2V0KGEpLHRoaXMuaG9yaXpvbnRhbEZhY2V0KGEpKTtjLml0ZW1zLnB1c2goYSk7dGhpcy5sb25nZXN0Q2VsbExlbmd0aD1NYXRoLm1heCh0aGlzLmxvbmdlc3RDZWxsTGVuZ3RoLGMuaXRlbXMubGVuZ3RoKX0pO2Zvcihjb25zdCBhIGluIHRoaXMudmVydGljYWxLZXlzSGFzaCl0aGlzLnZlcnRpY2FsS2V5cy5wdXNoKHRoaXMudmVydGljYWxLZXlzSGFzaFthXSk7CnRoaXMudmVydGljYWxLZXlzLnNvcnQodGhpcy52ZXJ0aWNhbEtleUNvbXBhcmUpO2Zvcihjb25zdCBhIGluIHRoaXMuaG9yaXpvbnRhbEtleXNIYXNoKXRoaXMuaG9yaXpvbnRhbEtleXMucHVzaCh0aGlzLmhvcml6b250YWxLZXlzSGFzaFthXSk7dGhpcy5ob3Jpem9udGFsS2V5cy5zb3J0KHRoaXMuaG9yaXpvbnRhbEtleUNvbXBhcmUpfWVhY2hJdGVtKGEpe2lmKHRoaXMuaXRlbXMpZm9yKGxldCBjPTA7Yzx0aGlzLml0ZW1zLmxlbmd0aDtjKyspYS5jYWxsKHRoaXMsdGhpcy5pdGVtc1tjXSl9ZWFjaENlbGwoYSl7Zm9yKGNvbnN0IGMgaW4gdGhpcy5jZWxscylhLmNhbGwodGhpcyx0aGlzLmNlbGxzW2NdKX1nZXRDb21wb3VuZEtleShhLGMpe3JldHVybiB0eXBlb2YgYSsiXHUwMDFmIithKyJcdTAwMWUiK3R5cGVvZiBjKyJcdTAwMWYiK2N9Z2V0Q2VsbChhLGMpe2E9dGhpcy5nZXRDb21wb3VuZEtleShhLGMpO3JldHVybiBhIGluIHRoaXMuY2VsbHM/dGhpcy5jZWxsc1thXTpudWxsfWdldENlbGxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2VsbHMpLm1hcChhPT4KdGhpcy5jZWxsc1thXSl9Z2V0T3JDcmVhdGVDZWxsKGEsYyl7bGV0IGQ9dGhpcy5nZXRDZWxsKGEsYyk7aWYoZClyZXR1cm4gZDt0aGlzLmFkZFZlcnRpY2FsS2V5KGEpO3RoaXMuYWRkSG9yaXpvbnRhbEtleShjKTtjb25zdCBmPXRoaXMuZ2V0Q29tcG91bmRLZXkoYSxjKTtkPXt2ZXJ0aWNhbEtleTphLGhvcml6b250YWxLZXk6Yyxjb21wb3VuZEtleTpmLGl0ZW1zOltdLHNpYmxpbmdzOnt9fTtyZXR1cm4gdGhpcy5jZWxsc1tmXT1kfWdldFJvdyhhKXtjb25zdCBjPVtdO2ZvcihsZXQgZD0wO2Q8dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7ZCsrKXtjb25zdCBmPXRoaXMuZ2V0Q2VsbChhLHRoaXMuaG9yaXpvbnRhbEtleXNbZF0pO2YmJmMucHVzaChmKX1yZXR1cm4gY31nZXRDb2x1bW4oYSl7Y29uc3QgYz1bXTtmb3IobGV0IGQ9MDtkPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aDtkKyspe2NvbnN0IGY9dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2RdLGEpO2YmJmMucHVzaChmKX1yZXR1cm4gY31hZGRWZXJ0aWNhbEtleShhKXtjb25zdCBjPQp0eXBlb2YgYSsiXHUwMDFmIithO2MgaW4gdGhpcy52ZXJ0aWNhbEtleXNIYXNofHwodGhpcy52ZXJ0aWNhbEtleXNIYXNoW2NdPWEpfWFkZEhvcml6b250YWxLZXkoYSl7Y29uc3QgYz10eXBlb2YgYSsiXHUwMDFmIithO2MgaW4gdGhpcy5ob3Jpem9udGFsS2V5c0hhc2h8fCh0aGlzLmhvcml6b250YWxLZXlzSGFzaFtjXT1hKX1jb21wdXRlT3B0aW1hbENlbGxBc3BlY3RSYXRpbyhhKXt2YXIgYz10aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGgsZD10aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aDtpZighY3x8IWQpcmV0dXJuIDE7bGV0IGY9Yy9kLGc9ZixsPUluZmluaXR5LGs9MCxuPUluZmluaXR5O2M9TWF0aC5taW4oMjAsTWF0aC5tYXgoYyxkLHRoaXMubG9uZ2VzdENlbGxMZW5ndGgpKTtmb3IoZD0wO2Q8Yzspe2QrKztjb25zdCBwPXRoaXMuY29tcHV0ZUdyaWRBc3BlY3RSYXRpbyhmKSxxPU1hdGguYWJzKDEtcC9hKTtxPGwmJihnPWYsbD1xKTtpZiguMDAxPnEpYnJlYWs7cD5hPyhuPQpmLGYtPShuLWspLzIpOihrPWYsZj1pc0Zpbml0ZShuKT9mKyhuLWspLzI6MipmKX1yZXR1cm4gZ31jb21wdXRlR3JpZEFzcGVjdFJhdGlvKGEpe2NvbnN0IGM9dGhpcy52ZXJ0aWNhbEtleXMubGVuZ3RoLGQ9dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7bGV0IGY9LUluZmluaXR5LGc9LUluZmluaXR5LGw9LUluZmluaXR5LGs9LUluZmluaXR5O2NvbnN0IG49W107Zm9yKGxldCBwPTA7cDxjO3ArKyl7bltwXT1bXTtmb3IobGV0IHE9MDtxPGQ7cSsrKXtjb25zdCByPW5bcF1bcV09e3dpZHRoOnE/bltwXVtxLTFdLndpZHRoOjAsaGVpZ2h0OnA/bltwLTFdW3FdLmhlaWdodDowfSx0PXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1twXSx0aGlzLmhvcml6b250YWxLZXlzW3FdKTtpZighdHx8IXQuaXRlbXN8fCF0Lml0ZW1zLmxlbmd0aCljb250aW51ZTtjb25zdCBbdix5XT10aGlzLmNvbXB1dGVDZWxsRGltZW5zaW9ucyhhLHQuaXRlbXMubGVuZ3RoKTtyLndpZHRoKz12O3IuaGVpZ2h0Kz0KeTtmPU1hdGgubWF4KGYsci53aWR0aCk7Zz1NYXRoLm1heChnLHkpO2w9TWF0aC5tYXgobCx2KTtrPU1hdGgubWF4KGssci5oZWlnaHQpfX10aGlzLnZlcnRpY2FsR3JpZEFsaWdubWVudD09PU9wLlVuaWZvcm0mJihrPWcqYyk7dGhpcy5ob3Jpem9udGFsR3JpZEFsaWdubWVudD09PU9wLlVuaWZvcm0mJihmPWwqZCk7YT10aGlzLmNlbGxNYXJnaW4qdGhpcy5pdGVtQXNwZWN0UmF0aW87cmV0dXJuKGYrYSooZC0xKSkvKGsrYSooYy0xKSl9Y29tcHV0ZUNlbGxEaW1lbnNpb25zKGEsYyl7Y29uc3QgZD1bdGhpcy5pdGVtQXNwZWN0UmF0aW8qKHRoaXMuY2VsbFBhZGRpbmcubGVmdCt0aGlzLmNlbGxQYWRkaW5nLnJpZ2h0KSx0aGlzLml0ZW1Bc3BlY3RSYXRpbyoodGhpcy5jZWxsUGFkZGluZy50b3ArdGhpcy5jZWxsUGFkZGluZy5ib3R0b20pXTtpZighYylyZXR1cm4gZDthPU1hdGgubWluKGMsTWF0aC5jZWlsKE1hdGguc3FydChhKmMpL3RoaXMuaXRlbUFzcGVjdFJhdGlvKSk7ZFswXSs9CnRoaXMuaXRlbUFzcGVjdFJhdGlvKmE7ZFsxXSs9TWF0aC5jZWlsKGMvYSk7cmV0dXJuIGR9fTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtZGl2ZS9saWIvYXhpcy5qcwpjbGFzcyBRcCBleHRlbmRzIEdwe2NvbnN0cnVjdG9yKGEsYyl7c3VwZXIoKTt0aGlzLnNpZGU9YTt0aGlzLmNlbGw9Yztzd2l0Y2goYSl7Y2FzZSBGcC5MZWZ0OnRoaXMubWluU2NhbGU9MzAvYy5pbm5lckhlaWdodDtmb3IoYT1jLnNpYmxpbmdzLmxlZnQ7ISghYXx8YS5pdGVtcy5sZW5ndGh8fGEuc2libGluZ3MuYWJvdmUmJmEuc2libGluZ3MuYWJvdmUuaXRlbXMubGVuZ3RoKTspYT1hLnNpYmxpbmdzLmxlZnQ7YSYmKHRoaXMubWluU2NhbGU9TWF0aC5tYXgodGhpcy5taW5TY2FsZSwzOS4yLyhjLmNvbnRlbnRYLShhLmNvbnRlbnRYK2EuaW5uZXJXaWR0aCkpKSk7YnJlYWs7Y2FzZSBGcC5Cb3R0b206dGhpcy5taW5TY2FsZT0zMC9jLmlubmVyV2lkdGg7Zm9yKGE9Yy5zaWJsaW5ncy5iZWxvdzshKCFhfHxhLml0ZW1zLmxlbmd0aHx8YS5zaWJsaW5ncy5yaWdodCYmYS5zaWJsaW5ncy5yaWdodC5pdGVtcy5sZW5ndGgpOylhPWEuc2libGluZ3MuYmVsb3c7YSYmKHRoaXMubWluU2NhbGU9Ck1hdGgubWF4KHRoaXMubWluU2NhbGUsMzkuMi8oYy5jb250ZW50WS0oYS5jb250ZW50WSthLmlubmVySGVpZ2h0KSkpKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJBeGVzIGZvciBzcGVjaWZpZWQgc2lkZSBhcmUgbm90IGltcGxlbWVudGVkLiIpO319c3Ryb2tlV2lkdGgoYSl7cmV0dXJuIDEuMi9hfXBhdGgoYSl7Y29uc3QgYz00L2EsZD02L2E7cmV0dXJuIHRoaXMuc2lkZT09PUZwLkxlZnQ/YE0gJHt0aGlzLmNlbGwuY29udGVudFgtYy1kfSwke3RoaXMuY2VsbC5jb250ZW50WSsuNi9hfSBoICR7ZH0gdiAke3RoaXMuY2VsbC5pbm5lckhlaWdodC0xLjIvYX0gaCAtJHtkfWA6dGhpcy5zaWRlPT09RnAuQm90dG9tP2BNICR7dGhpcy5jZWxsLmNvbnRlbnRYKy42L2F9LCR7dGhpcy5jZWxsLmNvbnRlbnRZLWMtZH0gdiAke2R9IGggJHt0aGlzLmNlbGwuaW5uZXJXaWR0aC0xLjIvYX0gdiAtJHtkfWA6IiJ9a2V5KCl7cmV0dXJuYCR7dGhpcy5jZWxsLmNvbXBvdW5kS2V5fS0ke3RoaXMuc2lkZX1gfX0KOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2ZhY2V0cy1kaXZlL2xpYi9kYXRhLWV4YW1wbGUuanMKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtZGl2ZS9saWIvbGFiZWwuanMKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtZGl2ZS9saWIvbGF5b3V0LmpzCmNsYXNzIFJwe2NvbnN0cnVjdG9yKCl7dGhpcy5ncmlkPXtib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx0b3A6MH07dGhpcy52aWV3cG9ydD17aGVpZ2h0OjAsd2lkdGg6MH07dGhpcy5wYWRkaW5nPXtib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx0b3A6MH19Y29tcHV0ZVNjYWxlKCl7Y29uc3QgYT10aGlzLnZpZXdwb3J0LndpZHRoLXRoaXMucGFkZGluZy5sZWZ0LXRoaXMucGFkZGluZy5yaWdodCxjPXRoaXMudmlld3BvcnQuaGVpZ2h0LXRoaXMucGFkZGluZy50b3AtdGhpcy5wYWRkaW5nLmJvdHRvbTtpZihpc05hTihhKXx8MD49YXx8aXNOYU4oYyl8fDA+PWMpcmV0dXJuIE5hTjtjb25zdCBkPXRoaXMuZ3JpZC5yaWdodC10aGlzLmdyaWQubGVmdCxmPXRoaXMuZ3JpZC50b3AtdGhpcy5ncmlkLmJvdHRvbTtyZXR1cm4gaXNOYU4oZCl8fDA+PWR8fGlzTmFOKGYpfHwwPj1mP05hTjphL2M+ZC9mP2MvZjphL2R9Y29tcHV0ZUNhbWVyYSgpe2NvbnN0IGE9dGhpcy5jb21wdXRlU2NhbGUoKTsKaWYoaXNOYU4oYSl8fDA+PWEpcmV0dXJue3Bvc2l0aW9uOnt4Ok5hTix5Ok5hTn0sZnJ1c3R1bTp7Ym90dG9tOk5hTixsZWZ0Ok5hTixyaWdodDpOYU4sdG9wOk5hTn19O2NvbnN0IGM9dGhpcy52aWV3cG9ydC53aWR0aC9hLGQ9dGhpcy52aWV3cG9ydC5oZWlnaHQvYTtyZXR1cm57cG9zaXRpb246e3g6dGhpcy5ncmlkLmxlZnQtKGMtKHRoaXMucGFkZGluZy5sZWZ0K3RoaXMucGFkZGluZy5yaWdodCkvYS0odGhpcy5ncmlkLnJpZ2h0LXRoaXMuZ3JpZC5sZWZ0KSkvMi10aGlzLnBhZGRpbmcubGVmdC9hLHk6dGhpcy5ncmlkLnRvcCsoZC0odGhpcy5wYWRkaW5nLnRvcCt0aGlzLnBhZGRpbmcuYm90dG9tKS9hLSh0aGlzLmdyaWQudG9wLXRoaXMuZ3JpZC5ib3R0b20pKS8yK3RoaXMucGFkZGluZy50b3AvYX0sZnJ1c3R1bTp7Ym90dG9tOi1kLGxlZnQ6MCxyaWdodDpjLHRvcDowfX19cmVkdWNlUGFkZGluZ1RvRml0V2lkdGgoYSl7aWYoMjAwPmEpdGhpcy5wYWRkaW5nLmxlZnQ9MCx0aGlzLnBhZGRpbmcucmlnaHQ9CjA7ZWxzZSBpZih0aGlzLnBhZGRpbmcubGVmdCt0aGlzLnBhZGRpbmcucmlnaHQrMjAwPmEpe2NvbnN0IGM9dGhpcy5wYWRkaW5nLmxlZnQrdGhpcy5wYWRkaW5nLnJpZ2h0O2EtPTIwMDt0aGlzLnBhZGRpbmcubGVmdD10aGlzLnBhZGRpbmcubGVmdC9jKmF8fDA7dGhpcy5wYWRkaW5nLnJpZ2h0PXRoaXMucGFkZGluZy5yaWdodC9jKmF8fDB9fXJlZHVjZVBhZGRpbmdUb0ZpdEhlaWdodChhKXtpZigyMDA+YSl0aGlzLnBhZGRpbmcudG9wPTAsdGhpcy5wYWRkaW5nLmJvdHRvbT0wO2Vsc2UgaWYodGhpcy5wYWRkaW5nLnRvcCt0aGlzLnBhZGRpbmcuYm90dG9tKzIwMD5hKXtjb25zdCBjPXRoaXMucGFkZGluZy50b3ArdGhpcy5wYWRkaW5nLmJvdHRvbTthLT0yMDA7dGhpcy5wYWRkaW5nLnRvcD10aGlzLnBhZGRpbmcudG9wL2MqYXx8MDt0aGlzLnBhZGRpbmcuYm90dG9tPXRoaXMucGFkZGluZy5ib3R0b20vYyphfHwwfX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2ZhY2V0cy1kaXZlL2xpYi90ZXh0LmpzCnZhciBTcDsoZnVuY3Rpb24oYSl7YVthLkxlZnQ9MF09IkxlZnQiO2FbYS5SaWdodD0xXT0iUmlnaHQiO2FbYS5DZW50ZXI9Ml09IkNlbnRlciJ9KShTcHx8KFNwPXt9KSk7dmFyIFRwOyhmdW5jdGlvbihhKXthW2EuVG9wPTBdPSJUb3AiO2FbYS5Cb3R0b209MV09IkJvdHRvbSI7YVthLk1pZGRsZT0yXT0iTWlkZGxlIn0pKFRwfHwoVHA9e30pKTtjb25zdCBVcD17eDowLHk6MCxnbHlwaEFzcGVjdFJhdGlvOi42LGxpbmVIZWlnaHQ6MS4xLGhvcml6b250YWxBbGlnbjpTcC5DZW50ZXIsdmVydGljYWxBbGlnbjpUcC5NaWRkbGV9OwpjbGFzcyBWcHtjb25zdHJ1Y3RvcihhKXt0aGlzLnNldHRpbmdzPU9iamVjdC5hc3NpZ24oe30sVXAsYSl9Zml0KGEpe2E9YS50cmltKCk7Y29uc3Qge21heDpjLHNlZ21lbnRzOmR9PXRoaXMuc3BsaXQoYSkse2N1dG9mZjpmLHdpZHRoOmcsaGVpZ2h0Omx9PXRoaXMuY29tcHV0ZUN1dG9mZihkLGEubGVuZ3RoLGMpO2E9Zyp0aGlzLnNldHRpbmdzLmdseXBoQXNwZWN0UmF0aW87YT1hL2w+dGhpcy5zZXR0aW5ncy53aWR0aC90aGlzLnNldHRpbmdzLmhlaWdodD90aGlzLnNldHRpbmdzLndpZHRoL2E6dGhpcy5zZXR0aW5ncy5oZWlnaHQvbDtjb25zdCBrPXRoaXMuc2V0dGluZ3MuaG9yaXpvbnRhbEFsaWduPT09U3AuTGVmdD8wOnRoaXMuc2V0dGluZ3MuaG9yaXpvbnRhbEFsaWduPT09U3AuUmlnaHQ/MTouNSxuPU1hdGgubWF4KDAsdGhpcy5zZXR0aW5ncy5oZWlnaHQtbCphKSoodGhpcy5zZXR0aW5ncy52ZXJ0aWNhbEFsaWduPT09VHAuVG9wPzA6dGhpcy5zZXR0aW5ncy52ZXJ0aWNhbEFsaWduPT09ClRwLkJvdHRvbT8xOi41KSxwPXRoaXMud3JhcExpbmVzKGQsZikscT1bXTtmb3IobGV0IHI9MDtyPHAubGVuZ3RoO3IrKyl7Y29uc3Qge3N0YXJ0UG9zOnQsZW5kUG9zOnZ9PXBbcl07bGV0IHk9IiI7Zm9yKGxldCB6PXQ7ejx2O3orKyl5Kz1kW3pdLnRleHQ7cS5wdXNoKHt0ZXh0OnkseDp0aGlzLnNldHRpbmdzLngraypNYXRoLm1heCgwLHRoaXMuc2V0dGluZ3Mud2lkdGgteS5sZW5ndGgqdGhpcy5zZXR0aW5ncy5nbHlwaEFzcGVjdFJhdGlvKmEpLHk6dGhpcy5zZXR0aW5ncy55K24rcip0aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQqYX0pfXJldHVybntsaW5lczpxLGZvbnRTaXplOmF9fXNwbGl0KGEpe2NvbnN0IGM9W107bGV0IGQ9MSxmPS9ccy8udGVzdChhLmNoYXJBdCgwKSksZz0wLGw9MDtmb3IoO2Q8PWEubGVuZ3RoOyl7Y29uc3Qgaz1hLmNoYXJBdChkKSxuPS9ccy8udGVzdChrKTtrLmxlbmd0aCYmZj09PW58fChsPU1hdGgubWF4KGwsZC1nKSxjLnB1c2goe3RleHQ6YS5zdWJzdHJpbmcoZywKZCksd2hpdGVzcGFjZTpmfSksZz1kKTtmPW47ZCsrfXJldHVybnttYXg6bCxzZWdtZW50czpjfX1jb21wdXRlVGV4dFJlY3QoYSxjKXtsZXQgZD0wLGY9MCxnPTAsbD0xO2ZvcihsZXQgaz0wO2s8YS5sZW5ndGg7aysrKXtjb25zdCB7dGV4dDpuLHdoaXRlc3BhY2U6cH09YVtrXSxxPW4ubGVuZ3RoO2lmKCFwfHxkKXA/ZCtxPD1jP2QrPXE6KGY9ZD0wLGwrPXRoaXMuc2V0dGluZ3MubGluZUhlaWdodCk6ZCtxPD1jP2Y9ZCs9cTooZj9kPWY9cTooZz1NYXRoLm1heChnLHEpLGQ9Zj0wKSxsKz10aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQpLGc9TWF0aC5tYXgoZyxmKX1yZXR1cm57d2lkdGg6ZyxoZWlnaHQ6bH19Y29tcHV0ZUN1dG9mZihhLGMsZCl7Y29uc3QgZj10aGlzLnNldHRpbmdzLndpZHRoL3RoaXMuc2V0dGluZ3MuaGVpZ2h0O2xldCBnPWQrKGMtZCkvMixsPWcsaz1udWxsLG49SW5maW5pdHk7Y29uc3QgcD1NYXRoLm1pbigyMCwoYS5sZW5ndGgrMSkvMik7bGV0IHE9MDtmb3IoO3E8CnA7KXtxKys7Y29uc3Qgcj10aGlzLmNvbXB1dGVUZXh0UmVjdChhLGcpLHQ9ci53aWR0aC9yLmhlaWdodCp0aGlzLnNldHRpbmdzLmdseXBoQXNwZWN0UmF0aW8sdj1NYXRoLmFicygxLXQvZik7djxuJiYobD1nLGs9cixuPXYpO2lmKC4wMT52KWJyZWFrO3Q+Zj9jPWc6ZD1nO2c9ZCsoYy1kKS8yfXJldHVybntjdXRvZmY6bCx3aWR0aDprLndpZHRoLGhlaWdodDprLmhlaWdodH19d3JhcExpbmVzKGEsYyl7Y29uc3QgZD1bXTtsZXQgZj0wLGc9MCxsPTAsaz0wO2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bisrKXtjb25zdCB7dGV4dDpwLHdoaXRlc3BhY2U6cX09YVtuXSxyPXAubGVuZ3RoO3EmJiFsP2Y9Zz1uKzE6cT9sK3I8PWM/bCs9cjooZC5wdXNoKHtzdGFydFBvczpmLGVuZFBvczpnLHRleHRMZW5ndGg6a30pLGw9az0wLGY9Zz1uKzEpOmwrcjw9Yz8oaz1sKz1yLGc9bisxKTprPyhkLnB1c2goe3N0YXJ0UG9zOmYsZW5kUG9zOmcsdGV4dExlbmd0aDprfSksbD1rPXIsZj1uLGc9bisKMSk6KGQucHVzaCh7c3RhcnRQb3M6bixlbmRQb3M6bisxLHRleHRMZW5ndGg6cn0pLGw9az0wLGY9Zz1uKzEpfWc+ZiYmZC5wdXNoKHtzdGFydFBvczpmLGVuZFBvczpnLHRleHRMZW5ndGg6a30pO3JldHVybiBkfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaW1wb3J0cy90aHJlZS5qcwooZnVuY3Rpb24oYSxjKXsib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBtb2R1bGU/YyhleHBvcnRzKToiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sYyk6KGE9YXx8c2VsZixjKGEuVEhSRUU9e30pKX0pKHRoaXMsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYygpe31mdW5jdGlvbiBkKGIsZSl7dGhpcy54PWJ8fDA7dGhpcy55PWV8fDB9ZnVuY3Rpb24gZihiLGUsaCxtKXt0aGlzLl94PWJ8fDA7dGhpcy5feT1lfHwwO3RoaXMuX3o9aHx8MDt0aGlzLl93PXZvaWQgMCE9PW0/bToxfWZ1bmN0aW9uIGcoYixlLGgpe3RoaXMueD1ifHwwO3RoaXMueT1lfHwwO3RoaXMuej1ofHwwfWZ1bmN0aW9uIGwoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDEsMCwwLDAsMV07MDxhcmd1bWVudHMubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfQpmdW5jdGlvbiBrKGIsZSxoLG0sdSx3LEEsRSxHLEope09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOkpxKyt9KTt0aGlzLnV1aWQ9bGIuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMuaW1hZ2U9dm9pZCAwIT09Yj9iOmsuREVGQVVMVF9JTUFHRTt0aGlzLm1pcG1hcHM9W107dGhpcy5tYXBwaW5nPXZvaWQgMCE9PWU/ZTprLkRFRkFVTFRfTUFQUElORzt0aGlzLndyYXBTPXZvaWQgMCE9PWg/aDoxMDAxO3RoaXMud3JhcFQ9dm9pZCAwIT09bT9tOjEwMDE7dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09dT91OjEwMDY7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09dz93OjEwMDg7dGhpcy5hbmlzb3Ryb3B5PXZvaWQgMCE9PUc/RzoxO3RoaXMuZm9ybWF0PXZvaWQgMCE9PUE/QToxMDIzO3RoaXMudHlwZT12b2lkIDAhPT1FP0U6MTAwOTt0aGlzLm9mZnNldD1uZXcgZCgwLDApO3RoaXMucmVwZWF0PW5ldyBkKDEsMSk7dGhpcy5jZW50ZXI9bmV3IGQoMCwwKTsKdGhpcy5yb3RhdGlvbj0wO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMDt0aGlzLm1hdHJpeD1uZXcgbDt0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMDt0aGlzLnByZW11bHRpcGx5QWxwaGE9ITE7dGhpcy5mbGlwWT0hMDt0aGlzLnVucGFja0FsaWdubWVudD00O3RoaXMuZW5jb2Rpbmc9dm9pZCAwIT09Sj9KOjNFMzt0aGlzLnZlcnNpb249MDt0aGlzLm9uVXBkYXRlPW51bGx9ZnVuY3Rpb24gbihiLGUsaCxtKXt0aGlzLng9Ynx8MDt0aGlzLnk9ZXx8MDt0aGlzLno9aHx8MDt0aGlzLnc9dm9pZCAwIT09bT9tOjF9ZnVuY3Rpb24gcChiLGUsaCl7dGhpcy53aWR0aD1iO3RoaXMuaGVpZ2h0PWU7dGhpcy5zY2lzc29yPW5ldyBuKDAsMCxiLGUpO3RoaXMuc2Npc3NvclRlc3Q9ITE7dGhpcy52aWV3cG9ydD1uZXcgbigwLDAsYixlKTtoPWh8fHt9O3RoaXMudGV4dHVyZT1uZXcgayh2b2lkIDAsdm9pZCAwLGgud3JhcFMsaC53cmFwVCxoLm1hZ0ZpbHRlcixoLm1pbkZpbHRlcixoLmZvcm1hdCxoLnR5cGUsCmguYW5pc290cm9weSxoLmVuY29kaW5nKTt0aGlzLnRleHR1cmUuaW1hZ2U9e307dGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPWI7dGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1lO3RoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09aC5nZW5lcmF0ZU1pcG1hcHM/aC5nZW5lcmF0ZU1pcG1hcHM6ITE7dGhpcy50ZXh0dXJlLm1pbkZpbHRlcj12b2lkIDAhPT1oLm1pbkZpbHRlcj9oLm1pbkZpbHRlcjoxMDA2O3RoaXMuZGVwdGhCdWZmZXI9dm9pZCAwIT09aC5kZXB0aEJ1ZmZlcj9oLmRlcHRoQnVmZmVyOiEwO3RoaXMuc3RlbmNpbEJ1ZmZlcj12b2lkIDAhPT1oLnN0ZW5jaWxCdWZmZXI/aC5zdGVuY2lsQnVmZmVyOiEwO3RoaXMuZGVwdGhUZXh0dXJlPXZvaWQgMCE9PWguZGVwdGhUZXh0dXJlP2guZGVwdGhUZXh0dXJlOm51bGx9ZnVuY3Rpb24gcShiLGUsaCl7cC5jYWxsKHRoaXMsYixlLGgpO3RoaXMuc2FtcGxlcz00fWZ1bmN0aW9uIHIoKXt0aGlzLmVsZW1lbnRzPQpbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07MDxhcmd1bWVudHMubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfWZ1bmN0aW9uIHQoYixlLGgsbSl7dGhpcy5feD1ifHwwO3RoaXMuX3k9ZXx8MDt0aGlzLl96PWh8fDA7dGhpcy5fb3JkZXI9bXx8dC5EZWZhdWx0T3JkZXJ9ZnVuY3Rpb24gdigpe3RoaXMubWFzaz0xfWZ1bmN0aW9uIHkoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpLcSsrfSk7dGhpcy51dWlkPWxiLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ik9iamVjdDNEIjt0aGlzLnBhcmVudD1udWxsO3RoaXMuY2hpbGRyZW49W107dGhpcy51cD15LkRlZmF1bHRVcC5jbG9uZSgpO3ZhciBiPW5ldyBnLGU9bmV3IHQsaD1uZXcgZixtPW5ldyBnKDEsMSwxKTtlLl9vbkNoYW5nZShmdW5jdGlvbigpe2guc2V0RnJvbUV1bGVyKGUsCiExKX0pO2guX29uQ2hhbmdlKGZ1bmN0aW9uKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihoLHZvaWQgMCwhMSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6Yn0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmh9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTptfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyByfSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBsfX0pO3RoaXMubWF0cml4PW5ldyByO3RoaXMubWF0cml4V29ybGQ9bmV3IHI7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPXkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExO3RoaXMubGF5ZXJzPW5ldyB2O3RoaXMudmlzaWJsZT0hMDsKdGhpcy5yZWNlaXZlU2hhZG93PXRoaXMuY2FzdFNoYWRvdz0hMTt0aGlzLmZydXN0dW1DdWxsZWQ9ITA7dGhpcy5yZW5kZXJPcmRlcj0wO3RoaXMudXNlckRhdGE9e319ZnVuY3Rpb24geigpe3kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNjZW5lIjt0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9dGhpcy5mb2c9dGhpcy5iYWNrZ3JvdW5kPW51bGw7dGhpcy5hdXRvVXBkYXRlPSEwOyJ1bmRlZmluZWQiIT09dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9ZnVuY3Rpb24geChiLGUpe3RoaXMubWluPXZvaWQgMCE9PWI/YjpuZXcgZyhJbmZpbml0eSxJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09ZT9lOm5ldyBnKC1JbmZpbml0eSwtSW5maW5pdHksLUluZmluaXR5KX1mdW5jdGlvbiBDKGIsZSxoLG0sdSl7dmFyIHc7dmFyIEE9MDtmb3Iodz1iLmxlbmd0aC0KMztBPD13O0ErPTMpe0llLmZyb21BcnJheShiLEEpO3ZhciBFPWUuZG90KEllKSxHPWguZG90KEllKSxKPW0uZG90KEllKTtpZihNYXRoLm1heCgtTWF0aC5tYXgoRSxHLEopLE1hdGgubWluKEUsRyxKKSk+dS54Kk1hdGguYWJzKEllLngpK3UueSpNYXRoLmFicyhJZS55KSt1LnoqTWF0aC5hYnMoSWUueikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gRihiLGUpe3RoaXMuY2VudGVyPXZvaWQgMCE9PWI/YjpuZXcgZzt0aGlzLnJhZGl1cz12b2lkIDAhPT1lP2U6MH1mdW5jdGlvbiBEKGIsZSl7dGhpcy5vcmlnaW49dm9pZCAwIT09Yj9iOm5ldyBnO3RoaXMuZGlyZWN0aW9uPXZvaWQgMCE9PWU/ZTpuZXcgZ31mdW5jdGlvbiBCKGIsZSxoKXt0aGlzLmE9dm9pZCAwIT09Yj9iOm5ldyBnO3RoaXMuYj12b2lkIDAhPT1lP2U6bmV3IGc7dGhpcy5jPXZvaWQgMCE9PWg/aDpuZXcgZ31mdW5jdGlvbiBJKGIsZSxoKXtyZXR1cm4gdm9pZCAwPT09ZSYmdm9pZCAwPT09aD90aGlzLnNldChiKToKdGhpcy5zZXRSR0IoYixlLGgpfWZ1bmN0aW9uIE8oYixlLGgpezA+aCYmKGgrPTEpOzE8aCYmLS1oO3JldHVybiBoPDEvNj9iKzYqKGUtYikqaDouNT5oP2U6aDwyLzM/Yis2KihlLWIpKigyLzMtaCk6Yn1mdW5jdGlvbiBQKGIpe3JldHVybi4wNDA0NT5iPy4wNzczOTkzODA4KmI6TWF0aC5wb3coLjk0Nzg2NzI5ODYqYisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIEgoYil7cmV0dXJuLjAwMzEzMDg+Yj8xMi45MipiOjEuMDU1Kk1hdGgucG93KGIsLjQxNjY2KS0uMDU1fWZ1bmN0aW9uIEsoYixlLGgsbSx1LHcpe3RoaXMuYT1iO3RoaXMuYj1lO3RoaXMuYz1oO3RoaXMubm9ybWFsPW0mJm0uaXNWZWN0b3IzP206bmV3IGc7dGhpcy52ZXJ0ZXhOb3JtYWxzPUFycmF5LmlzQXJyYXkobSk/bTpbXTt0aGlzLmNvbG9yPXUmJnUuaXNDb2xvcj91Om5ldyBJO3RoaXMudmVydGV4Q29sb3JzPUFycmF5LmlzQXJyYXkodSk/dTpbXTt0aGlzLm1hdGVyaWFsSW5kZXg9dm9pZCAwIT09dz93OjB9CmZ1bmN0aW9uIE0oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpMcSsrfSk7dGhpcy51dWlkPWxiLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ik1hdGVyaWFsIjt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMDt0aGlzLmJsZW5kaW5nPTE7dGhpcy5zaWRlPTA7dGhpcy52ZXJ0ZXhUYW5nZW50cz10aGlzLmZsYXRTaGFkaW5nPSExO3RoaXMudmVydGV4Q29sb3JzPTA7dGhpcy5vcGFjaXR5PTE7dGhpcy50cmFuc3BhcmVudD0hMTt0aGlzLmJsZW5kU3JjPTIwNDt0aGlzLmJsZW5kRHN0PTIwNTt0aGlzLmJsZW5kRXF1YXRpb249MTAwO3RoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXRoaXMuYmxlbmREc3RBbHBoYT10aGlzLmJsZW5kU3JjQWxwaGE9bnVsbDt0aGlzLmRlcHRoRnVuYz0zO3RoaXMuZGVwdGhXcml0ZT10aGlzLmRlcHRoVGVzdD0hMDt0aGlzLnN0ZW5jaWxGdW5jPTUxOTt0aGlzLnN0ZW5jaWxSZWY9MDt0aGlzLnN0ZW5jaWxNYXNrPQoyNTU7dGhpcy5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsRmFpbD03NjgwO3RoaXMuc3RlbmNpbFdyaXRlPSExO3RoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbDt0aGlzLmNsaXBTaGFkb3dzPXRoaXMuY2xpcEludGVyc2VjdGlvbj0hMTt0aGlzLnNoYWRvd1NpZGU9bnVsbDt0aGlzLmNvbG9yV3JpdGU9ITA7dGhpcy5wcmVjaXNpb249bnVsbDt0aGlzLnBvbHlnb25PZmZzZXQ9ITE7dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPTA7dGhpcy5kaXRoZXJpbmc9ITE7dGhpcy5hbHBoYVRlc3Q9MDt0aGlzLnByZW11bHRpcGxpZWRBbHBoYT0hMTt0aGlzLnRvbmVNYXBwZWQ9dGhpcy52aXNpYmxlPSEwO3RoaXMudXNlckRhdGE9e307dGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBMKGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBJKDE2Nzc3MjE1KTt0aGlzLmxpZ2h0TWFwPQp0aGlzLm1hcD1udWxsO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9MTt0aGlzLmFvTWFwPW51bGw7dGhpcy5hb01hcEludGVuc2l0eT0xO3RoaXMuZW52TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5zcGVjdWxhck1hcD1udWxsO3RoaXMuY29tYmluZT0wO3RoaXMucmVmbGVjdGl2aXR5PTE7dGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4O3RoaXMud2lyZWZyYW1lPSExO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIjt0aGlzLmxpZ2h0cz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIFIoYixlLGgpe2lmKEFycmF5LmlzQXJyYXkoYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLm5hbWU9IiI7dGhpcy5hcnJheT1iO3RoaXMuaXRlbVNpemU9CmU7dGhpcy5jb3VudD12b2lkIDAhPT1iP2IubGVuZ3RoL2U6MDt0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1oO3RoaXMuZHluYW1pYz0hMTt0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX07dGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gVShiLGUsaCl7Ui5jYWxsKHRoaXMsbmV3IEludDhBcnJheShiKSxlLGgpfWZ1bmN0aW9uIFkoYixlLGgpe1IuY2FsbCh0aGlzLG5ldyBVaW50OEFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gYmEoYixlLGgpe1IuY2FsbCh0aGlzLG5ldyBVaW50OENsYW1wZWRBcnJheShiKSxlLGgpfWZ1bmN0aW9uIG1hKGIsZSxoKXtSLmNhbGwodGhpcyxuZXcgSW50MTZBcnJheShiKSxlLGgpfWZ1bmN0aW9uIGFhKGIsZSxoKXtSLmNhbGwodGhpcyxuZXcgVWludDE2QXJyYXkoYiksZSxoKX1mdW5jdGlvbiBjYShiLGUsaCl7Ui5jYWxsKHRoaXMsbmV3IEludDMyQXJyYXkoYiksZSxoKX1mdW5jdGlvbiBmYShiLGUsaCl7Ui5jYWxsKHRoaXMsbmV3IFVpbnQzMkFycmF5KGIpLAplLGgpfWZ1bmN0aW9uIGRhKGIsZSxoKXtSLmNhbGwodGhpcyxuZXcgRmxvYXQzMkFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gbGEoYixlLGgpe1IuY2FsbCh0aGlzLG5ldyBGbG9hdDY0QXJyYXkoYiksZSxoKX1mdW5jdGlvbiBaKCl7dGhpcy52ZXJ0aWNlcz1bXTt0aGlzLm5vcm1hbHM9W107dGhpcy5jb2xvcnM9W107dGhpcy51dnM9W107dGhpcy51dnMyPVtdO3RoaXMuZ3JvdXBzPVtdO3RoaXMubW9ycGhUYXJnZXRzPXt9O3RoaXMuc2tpbldlaWdodHM9W107dGhpcy5za2luSW5kaWNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMuY29sb3JzTmVlZFVwZGF0ZT10aGlzLm5vcm1hbHNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPSExfWZ1bmN0aW9uIEZhKGIpe2lmKDA9PT1iLmxlbmd0aClyZXR1cm4tSW5maW5pdHk7Zm9yKHZhciBlPWJbMF0saD0xLG09CmIubGVuZ3RoO2g8bTsrK2gpYltoXT5lJiYoZT1iW2hdKTtyZXR1cm4gZX1mdW5jdGlvbiB4YSgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOk1xKz0yfSk7dGhpcy51dWlkPWxiLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLmluZGV4PW51bGw7dGhpcy5hdHRyaWJ1dGVzPXt9O3RoaXMubW9ycGhBdHRyaWJ1dGVzPXt9O3RoaXMuZ3JvdXBzPVtdO3RoaXMuYm91bmRpbmdTcGhlcmU9dGhpcy5ib3VuZGluZ0JveD1udWxsO3RoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OkluZmluaXR5fTt0aGlzLnVzZXJEYXRhPXt9fWZ1bmN0aW9uIHlhKGIsZSl7eS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaCI7dGhpcy5nZW9tZXRyeT12b2lkIDAhPT1iP2I6bmV3IHhhO3RoaXMubWF0ZXJpYWw9dm9pZCAwIT09ZT9lOm5ldyBMKHtjb2xvcjoxNjc3NzIxNSpNYXRoLnJhbmRvbSgpfSk7dGhpcy5kcmF3TW9kZT0KMDt0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWZ1bmN0aW9uIEJhKGIsZSxoLG0sdSx3LEEsRSl7aWYobnVsbD09PSgxPT09ZS5zaWRlP20uaW50ZXJzZWN0VHJpYW5nbGUoQSx3LHUsITAsRSk6bS5pbnRlcnNlY3RUcmlhbmdsZSh1LHcsQSwyIT09ZS5zaWRlLEUpKSlyZXR1cm4gbnVsbDtwaS5jb3B5KEUpO3BpLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKTtlPWgucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHBpKTtyZXR1cm4gZTxoLm5lYXJ8fGU+aC5mYXI/bnVsbDp7ZGlzdGFuY2U6ZSxwb2ludDpwaS5jbG9uZSgpLG9iamVjdDpifX1mdW5jdGlvbiBHYShiLGUsaCxtLHUsdyxBLEUsRyxKLFEpe0plLmZyb21CdWZmZXJBdHRyaWJ1dGUodSxHKTtLZS5mcm9tQnVmZmVyQXR0cmlidXRlKHUsSik7TGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1LFEpO3U9Yi5tb3JwaFRhcmdldEluZmx1ZW5jZXM7aWYoZS5tb3JwaFRhcmdldHMmJncmJnUpe2xrLnNldCgwLDAsMCk7bWsuc2V0KDAsMCwwKTsKbmsuc2V0KDAsMCwwKTtmb3IodmFyIFM9MCxUPXcubGVuZ3RoO1M8VDtTKyspe3ZhciBXPXVbU10sWD13W1NdOzAhPT1XJiYoaG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShYLEcpLGpuLmZyb21CdWZmZXJBdHRyaWJ1dGUoWCxKKSxrbi5mcm9tQnVmZmVyQXR0cmlidXRlKFgsUSksbGsuYWRkU2NhbGVkVmVjdG9yKGhuLnN1YihKZSksVyksbWsuYWRkU2NhbGVkVmVjdG9yKGpuLnN1YihLZSksVyksbmsuYWRkU2NhbGVkVmVjdG9yKGtuLnN1YihMZSksVykpfUplLmFkZChsayk7S2UuYWRkKG1rKTtMZS5hZGQobmspfWlmKGI9QmEoYixlLGgsbSxKZSxLZSxMZSxZZykpQSYmKHpmLmZyb21CdWZmZXJBdHRyaWJ1dGUoQSxHKSxBZi5mcm9tQnVmZmVyQXR0cmlidXRlKEEsSiksQmYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShBLFEpLGIudXY9Qi5nZXRVVihZZyxKZSxLZSxMZSx6ZixBZixCZixuZXcgZCkpLEUmJih6Zi5mcm9tQnVmZmVyQXR0cmlidXRlKEUsRyksQWYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShFLApKKSxCZi5mcm9tQnVmZmVyQXR0cmlidXRlKEUsUSksYi51djI9Qi5nZXRVVihZZyxKZSxLZSxMZSx6ZixBZixCZixuZXcgZCkpLEE9bmV3IEsoRyxKLFEpLEIuZ2V0Tm9ybWFsKEplLEtlLExlLEEubm9ybWFsKSxiLmZhY2U9QTtyZXR1cm4gYn1mdW5jdGlvbiB6YSgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOk5xKz0yfSk7dGhpcy51dWlkPWxiLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ikdlb21ldHJ5Ijt0aGlzLnZlcnRpY2VzPVtdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0KdGhpcy5jb2xvcnNOZWVkVXBkYXRlPXRoaXMubm9ybWFsc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPXRoaXMuZWxlbWVudHNOZWVkVXBkYXRlPSExfWZ1bmN0aW9uIFVhKGIsZSxoLG0sdSx3KXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQm94R2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17d2lkdGg6YixoZWlnaHQ6ZSxkZXB0aDpoLHdpZHRoU2VnbWVudHM6bSxoZWlnaHRTZWdtZW50czp1LGRlcHRoU2VnbWVudHM6d307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFphKGIsZSxoLG0sdSx3KSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gWmEoYixlLGgsbSx1LHcpe2Z1bmN0aW9uIEEoWCxpYSxoYSxzYSxxYSxyYSx3YSxwYSx2YSxDYSxWYSl7dmFyIFdhPXJhL3ZhLERhPXdhL0NhLElhPXJhLzIsRWE9d2EvMixPYT1wYS8yO3dhPXZhKzE7dmFyIGhiPUNhKzEseWI9cmE9MCxMYSxlYixuYj1uZXcgZztmb3IoZWI9CjA7ZWI8aGI7ZWIrKyl7dmFyIE5iPWViKkRhLUVhO2ZvcihMYT0wO0xhPHdhO0xhKyspbmJbWF09KExhKldhLUlhKSpzYSxuYltpYV09TmIqcWEsbmJbaGFdPU9hLEoucHVzaChuYi54LG5iLnksbmIueiksbmJbWF09MCxuYltpYV09MCxuYltoYV09MDxwYT8xOi0xLFEucHVzaChuYi54LG5iLnksbmIueiksUy5wdXNoKExhL3ZhKSxTLnB1c2goMS1lYi9DYSkscmErPTF9Zm9yKGViPTA7ZWI8Q2E7ZWIrKylmb3IoTGE9MDtMYTx2YTtMYSsrKVg9VCtMYSt3YSooZWIrMSksaWE9VCsoTGErMSkrd2EqKGViKzEpLGhhPVQrKExhKzEpK3dhKmViLEcucHVzaChUK0xhK3dhKmViLFgsaGEpLEcucHVzaChYLGlhLGhhKSx5Yis9NjtFLmFkZEdyb3VwKFcseWIsVmEpO1crPXliO1QrPXJhfXhhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDpiLGhlaWdodDplLGRlcHRoOmgsd2lkdGhTZWdtZW50czptLGhlaWdodFNlZ21lbnRzOnUsCmRlcHRoU2VnbWVudHM6d307dmFyIEU9dGhpcztiPWJ8fDE7ZT1lfHwxO2g9aHx8MTttPU1hdGguZmxvb3IobSl8fDE7dT1NYXRoLmZsb29yKHUpfHwxO3c9TWF0aC5mbG9vcih3KXx8MTt2YXIgRz1bXSxKPVtdLFE9W10sUz1bXSxUPTAsVz0wO0EoInoiLCJ5IiwieCIsLTEsLTEsaCxlLGIsdyx1LDApO0EoInoiLCJ5IiwieCIsMSwtMSxoLGUsLWIsdyx1LDEpO0EoIngiLCJ6IiwieSIsMSwxLGIsaCxlLG0sdywyKTtBKCJ4IiwieiIsInkiLDEsLTEsYixoLC1lLG0sdywzKTtBKCJ4IiwieSIsInoiLDEsLTEsYixlLGgsbSx1LDQpO0EoIngiLCJ5IiwieiIsLTEsLTEsYixlLC1oLG0sdSw1KTt0aGlzLnNldEluZGV4KEcpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKEosMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBkYShRLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBkYShTLDIpKX1mdW5jdGlvbiB6YihiKXt2YXIgZT17fSxoO2ZvcihoIGluIGIpe2VbaF09Cnt9O2Zvcih2YXIgbSBpbiBiW2hdKXt2YXIgdT1iW2hdW21dO2VbaF1bbV09dSYmKHUuaXNDb2xvcnx8dS5pc01hdHJpeDN8fHUuaXNNYXRyaXg0fHx1LmlzVmVjdG9yMnx8dS5pc1ZlY3RvcjN8fHUuaXNWZWN0b3I0fHx1LmlzVGV4dHVyZSk/dS5jbG9uZSgpOkFycmF5LmlzQXJyYXkodSk/dS5zbGljZSgpOnV9fXJldHVybiBlfWZ1bmN0aW9uIEliKGIpe2Zvcih2YXIgZT17fSxoPTA7aDxiLmxlbmd0aDtoKyspe3ZhciBtPXpiKGJbaF0pLHU7Zm9yKHUgaW4gbSllW3VdPW1bdV19cmV0dXJuIGV9ZnVuY3Rpb24gdWIoYil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiO3RoaXMuZGVmaW5lcz17fTt0aGlzLnVuaWZvcm1zPXt9O3RoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uIFx4M2QgcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iO3RoaXMuZnJhZ21lbnRTaGFkZXI9CiJ2b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApO1xufSI7dGhpcy5saW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9dGhpcy5jbGlwcGluZz10aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfTt0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfTt0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwO3RoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExO3ZvaWQgMCE9PWImJih2b2lkIDAhPT1iLmF0dHJpYnV0ZXMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpLAp0aGlzLnNldFZhbHVlcyhiKSl9ZnVuY3Rpb24gRmIoKXt5LmNhbGwodGhpcyk7dGhpcy50eXBlPSJDYW1lcmEiO3RoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyByO3RoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgcjt0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlPW5ldyByfWZ1bmN0aW9uIEFiKGIsZSxoLG0pe0ZiLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSI7dGhpcy5mb3Y9dm9pZCAwIT09Yj9iOjUwO3RoaXMuem9vbT0xO3RoaXMubmVhcj12b2lkIDAhPT1oP2g6LjE7dGhpcy5mYXI9dm9pZCAwIT09bT9tOjJFMzt0aGlzLmZvY3VzPTEwO3RoaXMuYXNwZWN0PXZvaWQgMCE9PWU/ZToxO3RoaXMudmlldz1udWxsO3RoaXMuZmlsbUdhdWdlPTM1O3RoaXMuZmlsbU9mZnNldD0wO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWZ1bmN0aW9uIFBiKGIsZSxoLG0pe3kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN1YmVDYW1lcmEiO3ZhciB1PW5ldyBBYig5MCwKMSxiLGUpO3UudXAuc2V0KDAsLTEsMCk7dS5sb29rQXQobmV3IGcoMSwwLDApKTt0aGlzLmFkZCh1KTt2YXIgdz1uZXcgQWIoOTAsMSxiLGUpO3cudXAuc2V0KDAsLTEsMCk7dy5sb29rQXQobmV3IGcoLTEsMCwwKSk7dGhpcy5hZGQodyk7dmFyIEE9bmV3IEFiKDkwLDEsYixlKTtBLnVwLnNldCgwLDAsMSk7QS5sb29rQXQobmV3IGcoMCwxLDApKTt0aGlzLmFkZChBKTt2YXIgRT1uZXcgQWIoOTAsMSxiLGUpO0UudXAuc2V0KDAsMCwtMSk7RS5sb29rQXQobmV3IGcoMCwtMSwwKSk7dGhpcy5hZGQoRSk7dmFyIEc9bmV3IEFiKDkwLDEsYixlKTtHLnVwLnNldCgwLC0xLDApO0cubG9va0F0KG5ldyBnKDAsMCwxKSk7dGhpcy5hZGQoRyk7dmFyIEo9bmV3IEFiKDkwLDEsYixlKTtKLnVwLnNldCgwLC0xLDApO0oubG9va0F0KG5ldyBnKDAsMCwtMSkpO3RoaXMuYWRkKEopO209bXx8e2Zvcm1hdDoxMDIyLG1hZ0ZpbHRlcjoxMDA2LG1pbkZpbHRlcjoxMDA2fTt0aGlzLnJlbmRlclRhcmdldD0KbmV3IGJjKGgsaCxtKTt0aGlzLnJlbmRlclRhcmdldC50ZXh0dXJlLm5hbWU9IkN1YmVDYW1lcmEiO3RoaXMudXBkYXRlPWZ1bmN0aW9uKFEsUyl7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7dmFyIFQ9US5nZXRSZW5kZXJUYXJnZXQoKSxXPXRoaXMucmVuZGVyVGFyZ2V0LFg9Vy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztXLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPSExO1Euc2V0UmVuZGVyVGFyZ2V0KFcsMCk7US5yZW5kZXIoUyx1KTtRLnNldFJlbmRlclRhcmdldChXLDEpO1EucmVuZGVyKFMsdyk7US5zZXRSZW5kZXJUYXJnZXQoVywyKTtRLnJlbmRlcihTLEEpO1Euc2V0UmVuZGVyVGFyZ2V0KFcsMyk7US5yZW5kZXIoUyxFKTtRLnNldFJlbmRlclRhcmdldChXLDQpO1EucmVuZGVyKFMsRyk7Vy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1YO1Euc2V0UmVuZGVyVGFyZ2V0KFcsNSk7US5yZW5kZXIoUyxKKTtRLnNldFJlbmRlclRhcmdldChUKX07CnRoaXMuY2xlYXI9ZnVuY3Rpb24oUSxTLFQsVyl7Zm9yKHZhciBYPVEuZ2V0UmVuZGVyVGFyZ2V0KCksaWE9dGhpcy5yZW5kZXJUYXJnZXQsaGE9MDs2PmhhO2hhKyspUS5zZXRSZW5kZXJUYXJnZXQoaWEsaGEpLFEuY2xlYXIoUyxULFcpO1Euc2V0UmVuZGVyVGFyZ2V0KFgpfX1mdW5jdGlvbiBiYyhiLGUsaCl7cC5jYWxsKHRoaXMsYixlLGgpfWZ1bmN0aW9uIEdiKGIsZSxoLG0sdSx3LEEsRSxHLEosUSxTKXtrLmNhbGwodGhpcyxudWxsLHcsQSxFLEcsSixtLHUsUSxTKTt0aGlzLmltYWdlPXtkYXRhOmIsd2lkdGg6ZSxoZWlnaHQ6aH07dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09Rz9HOjEwMDM7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09Sj9KOjEwMDM7dGhpcy5mbGlwWT10aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTt0aGlzLnVucGFja0FsaWdubWVudD0xfWZ1bmN0aW9uIFJiKGIsZSl7dGhpcy5ub3JtYWw9dm9pZCAwIT09Yj9iOm5ldyBnKDEsMCwwKTt0aGlzLmNvbnN0YW50PXZvaWQgMCE9PQplP2U6MH1mdW5jdGlvbiBFYyhiLGUsaCxtLHUsdyl7dGhpcy5wbGFuZXM9W3ZvaWQgMCE9PWI/YjpuZXcgUmIsdm9pZCAwIT09ZT9lOm5ldyBSYix2b2lkIDAhPT1oP2g6bmV3IFJiLHZvaWQgMCE9PW0/bTpuZXcgUmIsdm9pZCAwIT09dT91Om5ldyBSYix2b2lkIDAhPT13P3c6bmV3IFJiXX1mdW5jdGlvbiB4Yygpe2Z1bmN0aW9uIGIodSx3KXshMSE9PWgmJihtKHUsdyksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYikpfXZhciBlPW51bGwsaD0hMSxtPW51bGw7cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT1oJiZudWxsIT09bSYmKGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGIpLGg9ITApfSxzdG9wOmZ1bmN0aW9uKCl7aD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbih1KXttPXV9LHNldENvbnRleHQ6ZnVuY3Rpb24odSl7ZT11fX19ZnVuY3Rpb24gTWUoYil7ZnVuY3Rpb24gZSh1LHcpe3ZhciBBPXUuYXJyYXksRT11LmR5bmFtaWM/MzUwNDg6MzUwNDQsRz1iLmNyZWF0ZUJ1ZmZlcigpOwpiLmJpbmRCdWZmZXIodyxHKTtiLmJ1ZmZlckRhdGEodyxBLEUpO3Uub25VcGxvYWRDYWxsYmFjaygpO3c9NTEyNjtBIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P3c9NTEyNjpBIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpBIGluc3RhbmNlb2YgVWludDE2QXJyYXk/dz01MTIzOkEgaW5zdGFuY2VvZiBJbnQxNkFycmF5P3c9NTEyMjpBIGluc3RhbmNlb2YgVWludDMyQXJyYXk/dz01MTI1OkEgaW5zdGFuY2VvZiBJbnQzMkFycmF5P3c9NTEyNDpBIGluc3RhbmNlb2YgSW50OEFycmF5P3c9NTEyMDpBIGluc3RhbmNlb2YgVWludDhBcnJheSYmKHc9NTEyMSk7cmV0dXJue2J1ZmZlcjpHLHR5cGU6dyxieXRlc1BlckVsZW1lbnQ6QS5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOnUudmVyc2lvbn19ZnVuY3Rpb24gaCh1LHcsQSl7dmFyIEU9CncuYXJyYXksRz13LnVwZGF0ZVJhbmdlO2IuYmluZEJ1ZmZlcihBLHUpOyExPT09dy5keW5hbWljP2IuYnVmZmVyRGF0YShBLEUsMzUwNDQpOi0xPT09Ry5jb3VudD9iLmJ1ZmZlclN1YkRhdGEoQSwwLEUpOjA9PT1HLmNvdW50P2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMT2JqZWN0cy51cGRhdGVCdWZmZXI6IGR5bmFtaWMgVEhSRUUuQnVmZmVyQXR0cmlidXRlIG1hcmtlZCBhcyBuZWVkc1VwZGF0ZSBidXQgdXBkYXRlUmFuZ2UuY291bnQgaXMgMCwgZW5zdXJlIHlvdSBhcmUgdXNpbmcgc2V0IG1ldGhvZHMgb3IgdXBkYXRpbmcgbWFudWFsbHkuIik6KGIuYnVmZmVyU3ViRGF0YShBLEcub2Zmc2V0KkUuQllURVNfUEVSX0VMRU1FTlQsRS5zdWJhcnJheShHLm9mZnNldCxHLm9mZnNldCtHLmNvdW50KSksRy5jb3VudD0tMSl9dmFyIG09bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbih1KXt1LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJih1PXUuZGF0YSk7cmV0dXJuIG0uZ2V0KHUpfSwKcmVtb3ZlOmZ1bmN0aW9uKHUpe3UuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKHU9dS5kYXRhKTt2YXIgdz1tLmdldCh1KTt3JiYoYi5kZWxldGVCdWZmZXIody5idWZmZXIpLG0uZGVsZXRlKHUpKX0sdXBkYXRlOmZ1bmN0aW9uKHUsdyl7dS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYodT11LmRhdGEpO3ZhciBBPW0uZ2V0KHUpO3ZvaWQgMD09PUE/bS5zZXQodSxlKHUsdykpOkEudmVyc2lvbjx1LnZlcnNpb24mJihoKEEuYnVmZmVyLHUsdyksQS52ZXJzaW9uPXUudmVyc2lvbil9fX1mdW5jdGlvbiBpZShiLGUsaCxtKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDpiLGhlaWdodDplLHdpZHRoU2VnbWVudHM6aCxoZWlnaHRTZWdtZW50czptfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgdGQoYixlLGgsbSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIHRkKGIsZSxoLG0pe3hhLmNhbGwodGhpcyk7CnRoaXMudHlwZT0iUGxhbmVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDpiLGhlaWdodDplLHdpZHRoU2VnbWVudHM6aCxoZWlnaHRTZWdtZW50czptfTtiPWJ8fDE7ZT1lfHwxO3ZhciB1PWIvMix3PWUvMjtoPU1hdGguZmxvb3IoaCl8fDE7bT1NYXRoLmZsb29yKG0pfHwxO3ZhciBBPWgrMSxFPW0rMSxHPWIvaCxKPWUvbSxRPVtdLFM9W10sVD1bXSxXPVtdO2ZvcihiPTA7YjxFO2IrKyl7dmFyIFg9YipKLXc7Zm9yKGU9MDtlPEE7ZSsrKVMucHVzaChlKkctdSwtWCwwKSxULnB1c2goMCwwLDEpLFcucHVzaChlL2gpLFcucHVzaCgxLWIvbSl9Zm9yKGI9MDtiPG07YisrKWZvcihlPTA7ZTxoO2UrKyl1PWUrQSooYisxKSx3PWUrMStBKihiKzEpLEU9ZSsxK0EqYixRLnB1c2goZStBKmIsdSxFKSxRLnB1c2godSx3LEUpO3RoaXMuc2V0SW5kZXgoUSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEoUywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsCm5ldyBkYShULDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBkYShXLDIpKX1mdW5jdGlvbiBqZShiLGUsaCxtKXtmdW5jdGlvbiB1KFMsVCl7ZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKFMucixTLmcsUy5iLFQsbSl9dmFyIHc9bmV3IEkoMCksQT0wLEUsRyxKPW51bGwsUT0wO3JldHVybntnZXRDbGVhckNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHd9LHNldENsZWFyQ29sb3I6ZnVuY3Rpb24oUyxUKXt3LnNldChTKTtBPXZvaWQgMCE9PVQ/VDoxO3UodyxBKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBBfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKFMpe0E9Uzt1KHcsQSl9LHJlbmRlcjpmdW5jdGlvbihTLFQsVyxYKXtUPVQuYmFja2dyb3VuZDtXPWIudnI7KFc9Vy5nZXRTZXNzaW9uJiZXLmdldFNlc3Npb24oKSkmJiJhZGRpdGl2ZSI9PT1XLmVudmlyb25tZW50QmxlbmRNb2RlJiYoVD1udWxsKTtudWxsPT09VD8odSh3LEEpLEo9bnVsbCxRPTApOlQmJlQuaXNDb2xvciYmCih1KFQsMSksWD0hMCxKPW51bGwsUT0wKTsoYi5hdXRvQ2xlYXJ8fFgpJiZiLmNsZWFyKGIuYXV0b0NsZWFyQ29sb3IsYi5hdXRvQ2xlYXJEZXB0aCxiLmF1dG9DbGVhclN0ZW5jaWwpO2lmKFQmJihULmlzQ3ViZVRleHR1cmV8fFQuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUpKXt2b2lkIDA9PT1HJiYoRz1uZXcgeWEobmV3IFphKDEsMSwxKSxuZXcgdWIoe3R5cGU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOnpiKHVkLmN1YmUudW5pZm9ybXMpLHZlcnRleFNoYWRlcjp1ZC5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjp1ZC5jdWJlLmZyYWdtZW50U2hhZGVyLHNpZGU6MSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksRy5nZW9tZXRyeS5yZW1vdmVBdHRyaWJ1dGUoIm5vcm1hbCIpLEcuZ2VvbWV0cnkucmVtb3ZlQXR0cmlidXRlKCJ1diIpLEcub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oaWEsaGEsc2Epe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKHNhLm1hdHJpeFdvcmxkKX0sCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50Q3ViZS52YWx1ZX19KSxoLnVwZGF0ZShHKSk7WD1ULmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlP1QudGV4dHVyZTpUO0cubWF0ZXJpYWwudW5pZm9ybXMudEN1YmUudmFsdWU9WDtHLm1hdGVyaWFsLnVuaWZvcm1zLnRGbGlwLnZhbHVlPVQuaXNXZWJHTFJlbmRlclRhcmdldEN1YmU/MTotMTtpZihKIT09VHx8USE9PVgudmVyc2lvbilHLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLEo9VCxRPVgudmVyc2lvbjtTLnVuc2hpZnQoRyxHLmdlb21ldHJ5LEcubWF0ZXJpYWwsMCwwLG51bGwpfWVsc2UgaWYoVCYmVC5pc1RleHR1cmUpe3ZvaWQgMD09PUUmJihFPW5ldyB5YShuZXcgdGQoMiwyKSxuZXcgdWIoe3R5cGU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6emIodWQuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOnVkLmJhY2tncm91bmQudmVydGV4U2hhZGVyLApmcmFnbWVudFNoYWRlcjp1ZC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksRS5nZW9tZXRyeS5yZW1vdmVBdHRyaWJ1dGUoIm5vcm1hbCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWV9fSksaC51cGRhdGUoRSkpO0UubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlPVQ7ITA9PT1ULm1hdHJpeEF1dG9VcGRhdGUmJlQudXBkYXRlTWF0cml4KCk7RS5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFQubWF0cml4KTtpZihKIT09VHx8USE9PVQudmVyc2lvbilFLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLEo9VCxRPVQudmVyc2lvbjtTLnVuc2hpZnQoRSxFLmdlb21ldHJ5LEUubWF0ZXJpYWwsMCwwLG51bGwpfX19fWZ1bmN0aW9uIHVhKGIsZSxoLG0pe3ZhciB1O3RoaXMuc2V0TW9kZT0KZnVuY3Rpb24odyl7dT13fTt0aGlzLnJlbmRlcj1mdW5jdGlvbih3LEEpe2IuZHJhd0FycmF5cyh1LHcsQSk7aC51cGRhdGUoQSx1KX07dGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24odyxBLEUpe2lmKG0uaXNXZWJHTDIpe3ZhciBHPWI7dmFyIEo9ImRyYXdBcnJheXNJbnN0YW5jZWQifWVsc2UgaWYoRz1lLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLEo9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PUcpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1HW0pdKHUsQSxFLHcubWF4SW5zdGFuY2VkQ291bnQpO2gudXBkYXRlKEUsdSx3Lm1heEluc3RhbmNlZENvdW50KX19ZnVuY3Rpb24gJGIoYixlLGgpe2Z1bmN0aW9uIG0ocmEpe2lmKCJoaWdocCI9PT0KcmEpe2lmKDA8Yi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbiYmMDxiLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uKXJldHVybiJoaWdocCI7cmE9Im1lZGl1bXAifXJldHVybiJtZWRpdW1wIj09PXJhJiYwPGIuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM3KS5wcmVjaXNpb24mJjA8Yi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzcpLnByZWNpc2lvbj8ibWVkaXVtcCI6Imxvd3AifXZhciB1LHc9InVuZGVmaW5lZCIhPT10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYmYiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQsQT12b2lkIDAhPT1oLnByZWNpc2lvbj9oLnByZWNpc2lvbjoiaGlnaHAiLEU9bShBKTtFIT09QSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLEEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixFLCJpbnN0ZWFkLiIpLApBPUUpO2g9ITA9PT1oLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI7RT1iLmdldFBhcmFtZXRlcigzNDkzMCk7dmFyIEc9Yi5nZXRQYXJhbWV0ZXIoMzU2NjApLEo9Yi5nZXRQYXJhbWV0ZXIoMzM3OSksUT1iLmdldFBhcmFtZXRlcigzNDA3NiksUz1iLmdldFBhcmFtZXRlcigzNDkyMSksVD1iLmdldFBhcmFtZXRlcigzNjM0NyksVz1iLmdldFBhcmFtZXRlcigzNjM0OCksWD1iLmdldFBhcmFtZXRlcigzNjM0OSksaWE9MDxHLGhhPXd8fCEhZS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iiksc2E9aWEmJmhhLHFhPXc/Yi5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOncsZ2V0TWF4QW5pc290cm9weTpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXUpcmV0dXJuIHU7dmFyIHJhPWUuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtyZXR1cm4gdT1udWxsIT09cmE/Yi5nZXRQYXJhbWV0ZXIocmEuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowfSwKZ2V0TWF4UHJlY2lzaW9uOm0scHJlY2lzaW9uOkEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpoLG1heFRleHR1cmVzOkUsbWF4VmVydGV4VGV4dHVyZXM6RyxtYXhUZXh0dXJlU2l6ZTpKLG1heEN1YmVtYXBTaXplOlEsbWF4QXR0cmlidXRlczpTLG1heFZlcnRleFVuaWZvcm1zOlQsbWF4VmFyeWluZ3M6VyxtYXhGcmFnbWVudFVuaWZvcm1zOlgsdmVydGV4VGV4dHVyZXM6aWEsZmxvYXRGcmFnbWVudFRleHR1cmVzOmhhLGZsb2F0VmVydGV4VGV4dHVyZXM6c2EsbWF4U2FtcGxlczpxYX19ZnVuY3Rpb24gWmMoKXtmdW5jdGlvbiBiKCl7Si52YWx1ZSE9PW0mJihKLnZhbHVlPW0sSi5uZWVkc1VwZGF0ZT0wPHUpO2gubnVtUGxhbmVzPXU7aC5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiBlKFEsUyxULFcpe3ZhciBYPW51bGwhPT1RP1EubGVuZ3RoOjAsaWE9bnVsbDtpZigwIT09WCl7aWE9Si52YWx1ZTtpZighMCE9PVd8fG51bGw9PT1pYSl7Vz1UKzQqWDtTPVMubWF0cml4V29ybGRJbnZlcnNlOwpHLmdldE5vcm1hbE1hdHJpeChTKTtpZihudWxsPT09aWF8fGlhLmxlbmd0aDxXKWlhPW5ldyBGbG9hdDMyQXJyYXkoVyk7Zm9yKFc9MDtXIT09WDsrK1csVCs9NClFLmNvcHkoUVtXXSkuYXBwbHlNYXRyaXg0KFMsRyksRS5ub3JtYWwudG9BcnJheShpYSxUKSxpYVtUKzNdPUUuY29uc3RhbnR9Si52YWx1ZT1pYTtKLm5lZWRzVXBkYXRlPSEwfWgubnVtUGxhbmVzPVg7cmV0dXJuIGlhfXZhciBoPXRoaXMsbT1udWxsLHU9MCx3PSExLEE9ITEsRT1uZXcgUmIsRz1uZXcgbCxKPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTt0aGlzLnVuaWZvcm09Sjt0aGlzLm51bUludGVyc2VjdGlvbj10aGlzLm51bVBsYW5lcz0wO3RoaXMuaW5pdD1mdW5jdGlvbihRLFMsVCl7dmFyIFc9MCE9PVEubGVuZ3RofHxTfHwwIT09dXx8dzt3PVM7bT1lKFEsVCwwKTt1PVEubGVuZ3RoO3JldHVybiBXfTt0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe0E9ITA7ZShudWxsKX07dGhpcy5lbmRTaGFkb3dzPQpmdW5jdGlvbigpe0E9ITE7YigpfTt0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKFEsUyxULFcsWCxpYSl7aWYoIXd8fG51bGw9PT1RfHwwPT09US5sZW5ndGh8fEEmJiFUKUE/ZShudWxsKTpiKCk7ZWxzZXtUPUE/MDp1O3ZhciBoYT00KlQsc2E9WC5jbGlwcGluZ1N0YXRlfHxudWxsO0oudmFsdWU9c2E7c2E9ZShRLFcsaGEsaWEpO2ZvcihRPTA7USE9PWhhOysrUSlzYVtRXT1tW1FdO1guY2xpcHBpbmdTdGF0ZT1zYTt0aGlzLm51bUludGVyc2VjdGlvbj1TP3RoaXMubnVtUGxhbmVzOjA7dGhpcy5udW1QbGFuZXMrPVR9fX1mdW5jdGlvbiBMZChiKXt2YXIgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGgpe2lmKHZvaWQgMCE9PWVbaF0pcmV0dXJuIGVbaF07c3dpdGNoKGgpe2Nhc2UgIldFQkdMX2RlcHRoX3RleHR1cmUiOnZhciBtPWIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fGIuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxiLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTsKYnJlYWs7Y2FzZSAiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjptPWIuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8Yi5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8Yi5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlICJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6bT1iLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8Yi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxiLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjptPWIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8CmIuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDptPWIuZ2V0RXh0ZW5zaW9uKGgpfW51bGw9PT1tJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIraCsiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpO3JldHVybiBlW2hdPW19fX1mdW5jdGlvbiBrZShiLGUsaCl7ZnVuY3Rpb24gbShFKXt2YXIgRz1FLnRhcmdldDtFPXcuZ2V0KEcpO251bGwhPT1FLmluZGV4JiZlLnJlbW92ZShFLmluZGV4KTtmb3IodmFyIEogaW4gRS5hdHRyaWJ1dGVzKWUucmVtb3ZlKEUuYXR0cmlidXRlc1tKXSk7Ry5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixtKTt3LmRlbGV0ZShHKTtpZihKPUEuZ2V0KEUpKWUucmVtb3ZlKEopLEEuZGVsZXRlKEUpO2gubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiB1KEUpe3ZhciBHPVtdLEo9RS5pbmRleCxRPUUuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09Ckope3ZhciBTPUouYXJyYXk7Sj1KLnZlcnNpb247UT0wO2Zvcih2YXIgVD1TLmxlbmd0aDtRPFQ7USs9Myl7dmFyIFc9U1tRKzBdLFg9U1tRKzFdLGlhPVNbUSsyXTtHLnB1c2goVyxYLFgsaWEsaWEsVyl9fWVsc2UgZm9yKFM9US5hcnJheSxKPVEudmVyc2lvbixRPTAsVD1TLmxlbmd0aC8zLTE7UTxUO1ErPTMpVz1RKzAsWD1RKzEsaWE9USsyLEcucHVzaChXLFgsWCxpYSxpYSxXKTtHPW5ldyAoNjU1MzU8RmEoRyk/ZmE6YWEpKEcsMSk7Ry52ZXJzaW9uPUo7ZS51cGRhdGUoRywzNDk2Myk7KFM9QS5nZXQoRSkpJiZlLnJlbW92ZShTKTtBLnNldChFLEcpfXZhciB3PW5ldyBXZWFrTWFwLEE9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihFLEcpe3ZhciBKPXcuZ2V0KEcpO2lmKEopcmV0dXJuIEo7Ry5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixtKTtHLmlzQnVmZmVyR2VvbWV0cnk/Sj1HOkcuaXNHZW9tZXRyeSYmKHZvaWQgMD09PUcuX2J1ZmZlckdlb21ldHJ5JiYoRy5fYnVmZmVyR2VvbWV0cnk9CihuZXcgeGEpLnNldEZyb21PYmplY3QoRSkpLEo9Ry5fYnVmZmVyR2VvbWV0cnkpO3cuc2V0KEcsSik7aC5tZW1vcnkuZ2VvbWV0cmllcysrO3JldHVybiBKfSx1cGRhdGU6ZnVuY3Rpb24oRSl7dmFyIEc9RS5pbmRleCxKPUUuYXR0cmlidXRlcztudWxsIT09RyYmZS51cGRhdGUoRywzNDk2Myk7Zm9yKHZhciBRIGluIEopZS51cGRhdGUoSltRXSwzNDk2Mik7RT1FLm1vcnBoQXR0cmlidXRlcztmb3IoUSBpbiBFKXtHPUVbUV07Sj0wO2Zvcih2YXIgUz1HLmxlbmd0aDtKPFM7SisrKWUudXBkYXRlKEdbSl0sMzQ5NjIpfX0sZ2V0V2lyZWZyYW1lQXR0cmlidXRlOmZ1bmN0aW9uKEUpe3ZhciBHPUEuZ2V0KEUpO2lmKEcpe3ZhciBKPUUuaW5kZXg7bnVsbCE9PUomJkcudmVyc2lvbjxKLnZlcnNpb24mJnUoRSl9ZWxzZSB1KEUpO3JldHVybiBBLmdldChFKX19fWZ1bmN0aW9uIHFpKGIsZSxoLG0pe3ZhciB1LHcsQTt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oRSl7dT1FfTt0aGlzLnNldEluZGV4PQpmdW5jdGlvbihFKXt3PUUudHlwZTtBPUUuYnl0ZXNQZXJFbGVtZW50fTt0aGlzLnJlbmRlcj1mdW5jdGlvbihFLEcpe2IuZHJhd0VsZW1lbnRzKHUsRyx3LEUqQSk7aC51cGRhdGUoRyx1KX07dGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oRSxHLEope2lmKG0uaXNXZWJHTDIpe3ZhciBRPWI7dmFyIFM9ImRyYXdFbGVtZW50c0luc3RhbmNlZCJ9ZWxzZSBpZihRPWUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksUz0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1RKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufVFbU10odSxKLHcsRypBLEUubWF4SW5zdGFuY2VkQ291bnQpO2gudXBkYXRlKEosdSxFLm1heEluc3RhbmNlZENvdW50KX19CmZ1bmN0aW9uIE9xKCl7dmFyIGI9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmIscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24oKXtiLmZyYW1lKys7Yi5jYWxscz0wO2IudHJpYW5nbGVzPTA7Yi5wb2ludHM9MDtiLmxpbmVzPTB9LHVwZGF0ZTpmdW5jdGlvbihlLGgsbSl7bT1tfHwxO2IuY2FsbHMrKztzd2l0Y2goaCl7Y2FzZSA0OmIudHJpYW5nbGVzKz1lLzMqbTticmVhaztjYXNlIDU6Y2FzZSA2OmIudHJpYW5nbGVzKz1tKihlLTIpO2JyZWFrO2Nhc2UgMTpiLmxpbmVzKz1lLzIqbTticmVhaztjYXNlIDM6Yi5saW5lcys9bSooZS0xKTticmVhaztjYXNlIDI6Yi5saW5lcys9bSplO2JyZWFrO2Nhc2UgMDpiLnBvaW50cys9bSplO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLApoKX19fX1mdW5jdGlvbiBQcShiLGUpe3JldHVybiBNYXRoLmFicyhlWzFdKS1NYXRoLmFicyhiWzFdKX1mdW5jdGlvbiBRcShiKXt2YXIgZT17fSxoPW5ldyBGbG9hdDMyQXJyYXkoOCk7cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihtLHUsdyxBKXt2YXIgRT1tLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyxHPUUubGVuZ3RoO209ZVt1LmlkXTtpZih2b2lkIDA9PT1tKXttPVtdO2Zvcih2YXIgSj0wO0o8RztKKyspbVtKXT1bSiwwXTtlW3UuaWRdPW19dmFyIFE9dy5tb3JwaFRhcmdldHMmJnUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO3c9dy5tb3JwaE5vcm1hbHMmJnUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtmb3IoSj0wO0o8RztKKyspe3ZhciBTPW1bSl07MCE9PVNbMV0mJihRJiZ1LnJlbW92ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0opLHcmJnUucmVtb3ZlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrSikpfWZvcihKPTA7SjxHO0orKylTPW1bSl0sU1swXT1KLFNbMV09RVtKXTttLnNvcnQoUHEpOwpmb3IoSj0wOzg+SjtKKyspe2lmKFM9bVtKXSlpZihFPVNbMF0sRz1TWzFdKXtRJiZ1LmFkZEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0osUVtFXSk7dyYmdS5hZGRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitKLHdbRV0pO2hbSl09Rztjb250aW51ZX1oW0pdPTB9QS5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGIsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaCl9fX1mdW5jdGlvbiBScShiLGUpe3ZhciBoPXt9O3JldHVybnt1cGRhdGU6ZnVuY3Rpb24obSl7dmFyIHU9ZS5yZW5kZXIuZnJhbWUsdz1tLmdlb21ldHJ5LEE9Yi5nZXQobSx3KTtoW0EuaWRdIT09dSYmKHcuaXNHZW9tZXRyeSYmQS51cGRhdGVGcm9tT2JqZWN0KG0pLGIudXBkYXRlKEEpLGhbQS5pZF09dSk7cmV0dXJuIEF9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtoPXt9fX19ZnVuY3Rpb24gTWQoYixlLGgsbSx1LHcsQSxFLEcsSil7Yj12b2lkIDAhPT1iP2I6W107ay5jYWxsKHRoaXMsYix2b2lkIDAhPT1lP2U6MzAxLGgsbSx1LHcsCnZvaWQgMCE9PUE/QToxMDIyLEUsRyxKKTt0aGlzLmZsaXBZPSExfWZ1bmN0aW9uIENmKGIsZSxoLG0pe2suY2FsbCh0aGlzLG51bGwpO3RoaXMuaW1hZ2U9e2RhdGE6Yix3aWR0aDplLGhlaWdodDpoLGRlcHRoOm19O3RoaXMubWluRmlsdGVyPXRoaXMubWFnRmlsdGVyPTEwMDM7dGhpcy53cmFwUj0xMDAxO3RoaXMuZmxpcFk9dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZnVuY3Rpb24gRGYoYixlLGgsbSl7ay5jYWxsKHRoaXMsbnVsbCk7dGhpcy5pbWFnZT17ZGF0YTpiLHdpZHRoOmUsaGVpZ2h0OmgsZGVwdGg6bX07dGhpcy5taW5GaWx0ZXI9dGhpcy5tYWdGaWx0ZXI9MTAwMzt0aGlzLndyYXBSPTEwMDE7dGhpcy5mbGlwWT10aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1mdW5jdGlvbiBFZihiLGUsaCl7dmFyIG09YlswXTtpZigwPj1tfHwwPG0pcmV0dXJuIGI7dmFyIHU9ZSpoLHc9bG5bdV07dm9pZCAwPT09dyYmKHc9bmV3IEZsb2F0MzJBcnJheSh1KSxsblt1XT13KTtpZigwIT09ZSlmb3IobS50b0FycmF5KHcsCjApLG09MSx1PTA7bSE9PWU7KyttKXUrPWgsYlttXS50b0FycmF5KHcsdSk7cmV0dXJuIHd9ZnVuY3Rpb24gUWMoYixlKXtpZihiLmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaD0wLG09Yi5sZW5ndGg7aDxtO2grKylpZihiW2hdIT09ZVtoXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBJYyhiLGUpe2Zvcih2YXIgaD0wLG09ZS5sZW5ndGg7aDxtO2grKyliW2hdPWVbaF19ZnVuY3Rpb24gbW4oYixlKXt2YXIgaD1ubltlXTt2b2lkIDA9PT1oJiYoaD1uZXcgSW50MzJBcnJheShlKSxubltlXT1oKTtmb3IodmFyIG09MDttIT09ZTsrK20paFttXT1iLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gaH1mdW5jdGlvbiBTcShiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aFswXSE9PWUmJihiLnVuaWZvcm0xZih0aGlzLmFkZHIsZSksaFswXT1lKX1mdW5jdGlvbiBUcShiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KXtpZihoWzBdIT09ZS54fHxoWzFdIT09CmUueSliLnVuaWZvcm0yZih0aGlzLmFkZHIsZS54LGUueSksaFswXT1lLngsaFsxXT1lLnl9ZWxzZSBRYyhoLGUpfHwoYi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKSxJYyhoLGUpKX1mdW5jdGlvbiBVcShiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KXtpZihoWzBdIT09ZS54fHxoWzFdIT09ZS55fHxoWzJdIT09ZS56KWIudW5pZm9ybTNmKHRoaXMuYWRkcixlLngsZS55LGUueiksaFswXT1lLngsaFsxXT1lLnksaFsyXT1lLnp9ZWxzZSBpZih2b2lkIDAhPT1lLnIpe2lmKGhbMF0hPT1lLnJ8fGhbMV0hPT1lLmd8fGhbMl0hPT1lLmIpYi51bmlmb3JtM2YodGhpcy5hZGRyLGUucixlLmcsZS5iKSxoWzBdPWUucixoWzFdPWUuZyxoWzJdPWUuYn1lbHNlIFFjKGgsZSl8fChiLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpLEljKGgsZSkpfWZ1bmN0aW9uIFZxKGIsZSl7dmFyIGg9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT1lLngpe2lmKGhbMF0hPT1lLnh8fGhbMV0hPT1lLnl8fApoWzJdIT09ZS56fHxoWzNdIT09ZS53KWIudW5pZm9ybTRmKHRoaXMuYWRkcixlLngsZS55LGUueixlLncpLGhbMF09ZS54LGhbMV09ZS55LGhbMl09ZS56LGhbM109ZS53fWVsc2UgUWMoaCxlKXx8KGIudW5pZm9ybTRmdih0aGlzLmFkZHIsZSksSWMoaCxlKSl9ZnVuY3Rpb24gV3EoYixlKXt2YXIgaD10aGlzLmNhY2hlLG09ZS5lbGVtZW50czt2b2lkIDA9PT1tP1FjKGgsZSl8fChiLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLGUpLEljKGgsZSkpOlFjKGgsbSl8fChvbi5zZXQobSksYi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxvbiksSWMoaCxtKSl9ZnVuY3Rpb24gWHEoYixlKXt2YXIgaD10aGlzLmNhY2hlLG09ZS5lbGVtZW50czt2b2lkIDA9PT1tP1FjKGgsZSl8fChiLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpLEljKGgsZSkpOlFjKGgsbSl8fChwbi5zZXQobSksYi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxwbiksSWMoaCxtKSl9CmZ1bmN0aW9uIFlxKGIsZSl7dmFyIGg9dGhpcy5jYWNoZSxtPWUuZWxlbWVudHM7dm9pZCAwPT09bT9RYyhoLGUpfHwoYi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKSxJYyhoLGUpKTpRYyhoLG0pfHwocW4uc2V0KG0pLGIudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEscW4pLEljKGgsbSkpfWZ1bmN0aW9uIFpxKGIsZSxoKXt2YXIgbT10aGlzLmNhY2hlLHU9aC5hbGxvY2F0ZVRleHR1cmVVbml0KCk7bVswXSE9PXUmJihiLnVuaWZvcm0xaSh0aGlzLmFkZHIsdSksbVswXT11KTtoLnNhZmVTZXRUZXh0dXJlMkQoZXx8cm4sdSl9ZnVuY3Rpb24gJHEoYixlLGgpe3ZhciBtPXRoaXMuY2FjaGUsdT1oLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTttWzBdIT09dSYmKGIudW5pZm9ybTFpKHRoaXMuYWRkcix1KSxtWzBdPXUpO2guc2V0VGV4dHVyZTJEQXJyYXkoZXx8YXIsdSl9ZnVuY3Rpb24gYnIoYixlLGgpe3ZhciBtPXRoaXMuY2FjaGUsdT1oLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTsKbVswXSE9PXUmJihiLnVuaWZvcm0xaSh0aGlzLmFkZHIsdSksbVswXT11KTtoLnNldFRleHR1cmUzRChlfHxjcix1KX1mdW5jdGlvbiBkcihiLGUsaCl7dmFyIG09dGhpcy5jYWNoZSx1PWguYWxsb2NhdGVUZXh0dXJlVW5pdCgpO21bMF0hPT11JiYoYi51bmlmb3JtMWkodGhpcy5hZGRyLHUpLG1bMF09dSk7aC5zYWZlU2V0VGV4dHVyZUN1YmUoZXx8c24sdSl9ZnVuY3Rpb24gZXIoYixlKXt2YXIgaD10aGlzLmNhY2hlO2hbMF0hPT1lJiYoYi51bmlmb3JtMWkodGhpcy5hZGRyLGUpLGhbMF09ZSl9ZnVuY3Rpb24gZnIoYixlKXt2YXIgaD10aGlzLmNhY2hlO1FjKGgsZSl8fChiLnVuaWZvcm0yaXYodGhpcy5hZGRyLGUpLEljKGgsZSkpfWZ1bmN0aW9uIGdyKGIsZSl7dmFyIGg9dGhpcy5jYWNoZTtRYyhoLGUpfHwoYi51bmlmb3JtM2l2KHRoaXMuYWRkcixlKSxJYyhoLGUpKX1mdW5jdGlvbiBocihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7UWMoaCxlKXx8KGIudW5pZm9ybTRpdih0aGlzLmFkZHIsCmUpLEljKGgsZSkpfWZ1bmN0aW9uIGlyKGIpe3N3aXRjaChiKXtjYXNlIDUxMjY6cmV0dXJuIFNxO2Nhc2UgMzU2NjQ6cmV0dXJuIFRxO2Nhc2UgMzU2NjU6cmV0dXJuIFVxO2Nhc2UgMzU2NjY6cmV0dXJuIFZxO2Nhc2UgMzU2NzQ6cmV0dXJuIFdxO2Nhc2UgMzU2NzU6cmV0dXJuIFhxO2Nhc2UgMzU2NzY6cmV0dXJuIFlxO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpyZXR1cm4gWnE7Y2FzZSAzNTY3OTpyZXR1cm4gYnI7Y2FzZSAzNTY4MDpyZXR1cm4gZHI7Y2FzZSAzNjI4OTpyZXR1cm4gJHE7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGVyO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gZnI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBncjtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIGhyfX1mdW5jdGlvbiBqcihiLGUpe2IudW5pZm9ybTFmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24ga3IoYixlKXtiLnVuaWZvcm0xaXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIGxyKGIsCmUpe2IudW5pZm9ybTJpdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gbXIoYixlKXtiLnVuaWZvcm0zaXYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIG5yKGIsZSl7Yi51bmlmb3JtNGl2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBvcihiLGUpe2U9RWYoZSx0aGlzLnNpemUsMik7Yi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBwcihiLGUpe2U9RWYoZSx0aGlzLnNpemUsMyk7Yi51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBxcihiLGUpe2U9RWYoZSx0aGlzLnNpemUsNCk7Yi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBycihiLGUpe2U9RWYoZSx0aGlzLnNpemUsNCk7Yi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBzcihiLGUpe2U9RWYoZSx0aGlzLnNpemUsOSk7Yi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiB0cihiLGUpe2U9RWYoZSx0aGlzLnNpemUsMTYpO2IudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsCiExLGUpfWZ1bmN0aW9uIHVyKGIsZSxoKXt2YXIgbT1lLmxlbmd0aCx1PW1uKGgsbSk7Yi51bmlmb3JtMWl2KHRoaXMuYWRkcix1KTtmb3IoYj0wO2IhPT1tOysrYiloLnNhZmVTZXRUZXh0dXJlMkQoZVtiXXx8cm4sdVtiXSl9ZnVuY3Rpb24gdnIoYixlLGgpe3ZhciBtPWUubGVuZ3RoLHU9bW4oaCxtKTtiLnVuaWZvcm0xaXYodGhpcy5hZGRyLHUpO2ZvcihiPTA7YiE9PW07KytiKWguc2FmZVNldFRleHR1cmVDdWJlKGVbYl18fHNuLHVbYl0pfWZ1bmN0aW9uIHdyKGIpe3N3aXRjaChiKXtjYXNlIDUxMjY6cmV0dXJuIGpyO2Nhc2UgMzU2NjQ6cmV0dXJuIG9yO2Nhc2UgMzU2NjU6cmV0dXJuIHByO2Nhc2UgMzU2NjY6cmV0dXJuIHFyO2Nhc2UgMzU2NzQ6cmV0dXJuIHJyO2Nhc2UgMzU2NzU6cmV0dXJuIHNyO2Nhc2UgMzU2NzY6cmV0dXJuIHRyO2Nhc2UgMzU2Nzg6cmV0dXJuIHVyO2Nhc2UgMzU2ODA6cmV0dXJuIHZyO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBrcjtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIGxyOwpjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIG1yO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gbnJ9fWZ1bmN0aW9uIHhyKGIsZSxoKXt0aGlzLmlkPWI7dGhpcy5hZGRyPWg7dGhpcy5jYWNoZT1bXTt0aGlzLnNldFZhbHVlPWlyKGUudHlwZSl9ZnVuY3Rpb24gdG4oYixlLGgpe3RoaXMuaWQ9Yjt0aGlzLmFkZHI9aDt0aGlzLmNhY2hlPVtdO3RoaXMuc2l6ZT1lLnNpemU7dGhpcy5zZXRWYWx1ZT13cihlLnR5cGUpfWZ1bmN0aW9uIHVuKGIpe3RoaXMuaWQ9Yjt0aGlzLnNlcT1bXTt0aGlzLm1hcD17fX1mdW5jdGlvbiB2bihiLGUpe2Iuc2VxLnB1c2goZSk7Yi5tYXBbZS5pZF09ZX1mdW5jdGlvbiB5cihiLGUsaCl7dmFyIG09Yi5uYW1lLHU9bS5sZW5ndGg7Zm9yKG9rLmxhc3RJbmRleD0wOzspe3ZhciB3PW9rLmV4ZWMobSksQT1vay5sYXN0SW5kZXgsRT13WzFdLEc9d1szXTsiXSI9PT13WzJdJiYoRXw9MCk7aWYodm9pZCAwPT09R3x8IlsiPT09RyYmQSsyPT09dSl7dm4oaCwKdm9pZCAwPT09Rz9uZXcgeHIoRSxiLGUpOm5ldyB0bihFLGIsZSkpO2JyZWFrfWVsc2Ugdz1oLm1hcFtFXSx2b2lkIDA9PT13JiYodz1uZXcgdW4oRSksdm4oaCx3KSksaD13fX1mdW5jdGlvbiBsZShiLGUpe3RoaXMuc2VxPVtdO3RoaXMubWFwPXt9O2Zvcih2YXIgaD1iLmdldFByb2dyYW1QYXJhbWV0ZXIoZSwzNTcxOCksbT0wO208aDsrK20pe3ZhciB1PWIuZ2V0QWN0aXZlVW5pZm9ybShlLG0pO3lyKHUsYi5nZXRVbmlmb3JtTG9jYXRpb24oZSx1Lm5hbWUpLHRoaXMpfX1mdW5jdGlvbiB3bihiLGUsaCl7ZT1iLmNyZWF0ZVNoYWRlcihlKTtiLnNoYWRlclNvdXJjZShlLGgpO2IuY29tcGlsZVNoYWRlcihlKTtyZXR1cm4gZX1mdW5jdGlvbiB6cihiKXtiPWIuc3BsaXQoIlxuIik7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspYltlXT1lKzErIjogIitiW2VdO3JldHVybiBiLmpvaW4oIlxuIil9ZnVuY3Rpb24geG4oYil7c3dpdGNoKGIpe2Nhc2UgM0UzOnJldHVyblsiTGluZWFyIiwKIiggdmFsdWUgKSJdO2Nhc2UgMzAwMTpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtjYXNlIDMwMDI6cmV0dXJuWyJSR0JFIiwiKCB2YWx1ZSApIl07Y2FzZSAzMDA0OnJldHVyblsiUkdCTSIsIiggdmFsdWUsIDcuMCApIl07Y2FzZSAzMDA1OnJldHVyblsiUkdCTSIsIiggdmFsdWUsIDE2LjAgKSJdO2Nhc2UgMzAwNjpyZXR1cm5bIlJHQkQiLCIoIHZhbHVlLCAyNTYuMCApIl07Y2FzZSAzMDA3OnJldHVyblsiR2FtbWEiLCIoIHZhbHVlLCBmbG9hdCggR0FNTUFfRkFDVE9SICkgKSJdO2Nhc2UgMzAwMzpyZXR1cm5bIkxvZ0x1diIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6dGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIGVuY29kaW5nOiAiK2IpO319ZnVuY3Rpb24geW4oYixlLGgpe3ZhciBtPWIuZ2V0U2hhZGVyUGFyYW1ldGVyKGUsMzU3MTMpLHU9Yi5nZXRTaGFkZXJJbmZvTG9nKGUpLnRyaW0oKTtyZXR1cm4gbSYmIiI9PT11PyIiOiJUSFJFRS5XZWJHTFNoYWRlcjogZ2wuZ2V0U2hhZGVySW5mb0xvZygpICIrCmgrIlxuIit1K3pyKGIuZ2V0U2hhZGVyU291cmNlKGUpKX1mdW5jdGlvbiByaShiLGUpe2U9eG4oZSk7cmV0dXJuInZlYzQgIitiKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiAiK2VbMF0rIlRvTGluZWFyIitlWzFdKyI7IH0ifWZ1bmN0aW9uIEFyKGIsZSl7ZT14bihlKTtyZXR1cm4idmVjNCAiK2IrIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitlWzBdK2VbMV0rIjsgfSJ9ZnVuY3Rpb24gQnIoYixlKXtzd2l0Y2goZSl7Y2FzZSAxOmU9IkxpbmVhciI7YnJlYWs7Y2FzZSAyOmU9IlJlaW5oYXJkIjticmVhaztjYXNlIDM6ZT0iVW5jaGFydGVkMiI7YnJlYWs7Y2FzZSA0OmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA1OmU9IkFDRVNGaWxtaWMiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiAiK2UpO31yZXR1cm4idmVjMyAiK2IrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifQpmdW5jdGlvbiBDcihiLGUsaCl7Yj1ifHx7fTtyZXR1cm5bYi5kZXJpdmF0aXZlc3x8ZS5lbnZNYXBDdWJlVVZ8fGUuYnVtcE1hcHx8ZS50YW5nZW50U3BhY2VOb3JtYWxNYXB8fGUuY2xlYXJjb2F0Tm9ybWFsTWFwfHxlLmZsYXRTaGFkaW5nPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKGIuZnJhZ0RlcHRofHxlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZoLmdldCgiRVhUX2ZyYWdfZGVwdGgiKT8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsYi5kcmF3QnVmZmVycyYmaC5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwoYi5zaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcCkmJmguZ2V0KCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihaZykuam9pbigiXG4iKX0KZnVuY3Rpb24gRHIoYil7dmFyIGU9W10saDtmb3IoaCBpbiBiKXt2YXIgbT1iW2hdOyExIT09bSYmZS5wdXNoKCIjZGVmaW5lICIraCsiICIrbSl9cmV0dXJuIGUuam9pbigiXG4iKX1mdW5jdGlvbiBFcihiLGUpe2Zvcih2YXIgaD17fSxtPWIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLDM1NzIxKSx1PTA7dTxtO3UrKyl7dmFyIHc9Yi5nZXRBY3RpdmVBdHRyaWIoZSx1KS5uYW1lO2hbd109Yi5nZXRBdHRyaWJMb2NhdGlvbihlLHcpfXJldHVybiBofWZ1bmN0aW9uIFpnKGIpe3JldHVybiIiIT09Yn1mdW5jdGlvbiB6bihiLGUpe3JldHVybiBiLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csZS5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLGUubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyxlLm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csZS5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csCmUubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csZS5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyxlLm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csZS5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gQW4oYixlKXtyZXR1cm4gYi5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csZS5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csZS5udW1DbGlwcGluZ1BsYW5lcy1lLm51bUNsaXBJbnRlcnNlY3Rpb24pfWZ1bmN0aW9uIHBrKGIpe3JldHVybiBiLnJlcGxhY2UoL15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbSxmdW5jdGlvbihlLGgpe2U9d2JbaF07aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIFx4M2MiK2grIlx4M2UiKTtyZXR1cm4gcGsoZSl9KX0KZnVuY3Rpb24gQm4oYil7cmV0dXJuIGIucmVwbGFjZSgvI3ByYWdtYSB1bnJvbGxfbG9vcFtcc10rP2ZvciBcKCBpbnQgaSA9IChcZCspOyBpIDwgKFxkKyk7IGkgXCtcKyBcKSBceyhbXHNcU10rPykoPz1cfSlcfS9nLGZ1bmN0aW9uKGUsaCxtLHUpe2U9IiI7Zm9yKGg9cGFyc2VJbnQoaCk7aDxwYXJzZUludChtKTtoKyspZSs9dS5yZXBsYWNlKC9cWyBpIFxdL2csIlsgIitoKyIgXSIpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZyxoKTtyZXR1cm4gZX0pfWZ1bmN0aW9uIEZyKGIsZSxoLG0sdSx3LEEpe3ZhciBFPWIuZ2V0Q29udGV4dCgpLEc9bS5kZWZpbmVzLEo9dS52ZXJ0ZXhTaGFkZXIsUT11LmZyYWdtZW50U2hhZGVyLFM9IlNIQURPV01BUF9UWVBFX0JBU0lDIjsxPT09dy5zaGFkb3dNYXBUeXBlP1M9IlNIQURPV01BUF9UWVBFX1BDRiI6Mj09PXcuc2hhZG93TWFwVHlwZT9TPSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6Mz09PXcuc2hhZG93TWFwVHlwZSYmKFM9CiJTSEFET1dNQVBfVFlQRV9WU00iKTt2YXIgVD0iRU5WTUFQX1RZUEVfQ1VCRSIsVz0iRU5WTUFQX01PREVfUkVGTEVDVElPTiIsWD0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjtpZih3LmVudk1hcCl7c3dpdGNoKG0uZW52TWFwLm1hcHBpbmcpe2Nhc2UgMzAxOmNhc2UgMzAyOlQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgMzA2OmNhc2UgMzA3OlQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrO2Nhc2UgMzAzOmNhc2UgMzA0OlQ9IkVOVk1BUF9UWVBFX0VRVUlSRUMiO2JyZWFrO2Nhc2UgMzA1OlQ9IkVOVk1BUF9UWVBFX1NQSEVSRSJ9c3dpdGNoKG0uZW52TWFwLm1hcHBpbmcpe2Nhc2UgMzAyOmNhc2UgMzA0Olc9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXN3aXRjaChtLmNvbWJpbmUpe2Nhc2UgMDpYPSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgMTpYPSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIDI6WD0iRU5WTUFQX0JMRU5ESU5HX0FERCJ9fXZhciBpYT0KMDxiLmdhbW1hRmFjdG9yP2IuZ2FtbWFGYWN0b3I6MSxoYT1BLmlzV2ViR0wyPyIiOkNyKG0uZXh0ZW5zaW9ucyx3LGUpLHNhPURyKEcpLHFhPUUuY3JlYXRlUHJvZ3JhbSgpO20uaXNSYXdTaGFkZXJNYXRlcmlhbD8oRz1bc2FdLmZpbHRlcihaZykuam9pbigiXG4iKSwwPEcubGVuZ3RoJiYoRys9IlxuIiksZT1baGEsc2FdLmZpbHRlcihaZykuam9pbigiXG4iKSwwPGUubGVuZ3RoJiYoZSs9IlxuIikpOihHPVsicHJlY2lzaW9uICIrdy5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIit3LnByZWNpc2lvbisiIGludDsiLCJoaWdocCI9PT13LnByZWNpc2lvbj8iI2RlZmluZSBISUdIX1BSRUNJU0lPTiI6IiIsIiNkZWZpbmUgU0hBREVSX05BTUUgIit1Lm5hbWUsc2Esdy5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgR0FNTUFfRkFDVE9SICIraWEsIiNkZWZpbmUgTUFYX0JPTkVTICIrdy5tYXhCb25lcyx3LnVzZUZvZyYmCncuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHcudXNlRm9nJiZ3LmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHcubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHcuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHcuZW52TWFwPyIjZGVmaW5lICIrVzoiIix3LmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsdy5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHcuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIix3LmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHcubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHcubm9ybWFsTWFwJiZ3Lm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsdy5ub3JtYWxNYXAmJncudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHcuY2xlYXJjb2F0Tm9ybWFsTWFwPwoiI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsdy5kaXNwbGFjZW1lbnRNYXAmJncuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIix3LnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsdy5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsdy5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsdy5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHcudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHcudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsdy52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIix3LmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIix3LnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsdy51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6CiIiLHcubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLHcubW9ycGhOb3JtYWxzJiYhMT09PXcuZmxhdFNoYWRpbmc/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsdy5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLHcuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLHcuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIix3LnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitTOiIiLHcuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLHcubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLHcubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmKEEuaXNXZWJHTDJ8fGUuZ2V0KCJFWFRfZnJhZ19kZXB0aCIpKT8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwKInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCJcdGF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9DT0xPUiIsIlx0YXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsiLCJcdCNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsiLAoiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKFpnKS5qb2luKCJcbiIpLGU9W2hhLCJwcmVjaXNpb24gIit3LnByZWNpc2lvbisiIGZsb2F0OyIsInByZWNpc2lvbiAiK3cucHJlY2lzaW9uKyIgaW50OyIsImhpZ2hwIj09PXcucHJlY2lzaW9uPyIjZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIjoKIiIsIiNkZWZpbmUgU0hBREVSX05BTUUgIit1Lm5hbWUsc2Esdy5hbHBoYVRlc3Q/IiNkZWZpbmUgQUxQSEFURVNUICIrdy5hbHBoYVRlc3QrKHcuYWxwaGFUZXN0JTE/IiI6Ii4wIik6IiIsIiNkZWZpbmUgR0FNTUFfRkFDVE9SICIraWEsdy51c2VGb2cmJncuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHcudXNlRm9nJiZ3LmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHcubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHcubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLHcuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHcuZW52TWFwPyIjZGVmaW5lICIrVDoiIix3LmVudk1hcD8iI2RlZmluZSAiK1c6IiIsdy5lbnZNYXA/IiNkZWZpbmUgIitYOiIiLHcubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIix3LmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsdy5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLHcuYnVtcE1hcD8KIiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHcubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHcubm9ybWFsTWFwJiZ3Lm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsdy5ub3JtYWxNYXAmJncudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHcuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIix3LnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsdy5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsdy5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsdy5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHcuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIix3LnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoKIiIsdy52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIix3LnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHcuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIix3LmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIix3LmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsdy5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsdy5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLHcuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK1M6IiIsdy5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsdy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIix3LmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIix3LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJgooQS5pc1dlYkdMMnx8ZS5nZXQoIkVYVF9mcmFnX2RlcHRoIikpPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLChtLmV4dGVuc2lvbnMmJm0uZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9EfHx3LmVudk1hcCkmJihBLmlzV2ViR0wyfHxlLmdldCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpKT8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwwIT09dy50b25lTWFwcGluZz8iI2RlZmluZSBUT05FX01BUFBJTkciOiIiLDAhPT13LnRvbmVNYXBwaW5nP3diLnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsMCE9PXcudG9uZU1hcHBpbmc/QnIoInRvbmVNYXBwaW5nIix3LnRvbmVNYXBwaW5nKToiIix3LmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLHcub3V0cHV0RW5jb2Rpbmd8fHcubWFwRW5jb2Rpbmd8fHcubWF0Y2FwRW5jb2Rpbmd8fHcuZW52TWFwRW5jb2Rpbmd8fAp3LmVtaXNzaXZlTWFwRW5jb2Rpbmc/d2IuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IiIsdy5tYXBFbmNvZGluZz9yaSgibWFwVGV4ZWxUb0xpbmVhciIsdy5tYXBFbmNvZGluZyk6IiIsdy5tYXRjYXBFbmNvZGluZz9yaSgibWF0Y2FwVGV4ZWxUb0xpbmVhciIsdy5tYXRjYXBFbmNvZGluZyk6IiIsdy5lbnZNYXBFbmNvZGluZz9yaSgiZW52TWFwVGV4ZWxUb0xpbmVhciIsdy5lbnZNYXBFbmNvZGluZyk6IiIsdy5lbWlzc2l2ZU1hcEVuY29kaW5nP3JpKCJlbWlzc2l2ZU1hcFRleGVsVG9MaW5lYXIiLHcuZW1pc3NpdmVNYXBFbmNvZGluZyk6IiIsdy5vdXRwdXRFbmNvZGluZz9BcigibGluZWFyVG9PdXRwdXRUZXhlbCIsdy5vdXRwdXRFbmNvZGluZyk6IiIsdy5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK20uZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcihaZykuam9pbigiXG4iKSk7Sj1wayhKKTtKPXpuKEosdyk7Sj1BbihKLHcpO1E9cGsoUSk7UT16bihRLAp3KTtRPUFuKFEsdyk7Sj1CbihKKTtRPUJuKFEpO0EuaXNXZWJHTDImJiFtLmlzUmF3U2hhZGVyTWF0ZXJpYWwmJihBPSExLFM9L15ccyojdmVyc2lvblxzKzMwMFxzK2VzXHMqXG4vLG0uaXNTaGFkZXJNYXRlcmlhbCYmbnVsbCE9PUoubWF0Y2goUykmJm51bGwhPT1RLm1hdGNoKFMpJiYoQT0hMCxKPUoucmVwbGFjZShTLCIiKSxRPVEucmVwbGFjZShTLCIiKSksRz0iI3ZlcnNpb24gMzAwIGVzXG5cbiNkZWZpbmUgYXR0cmlidXRlIGluXG4jZGVmaW5lIHZhcnlpbmcgb3V0XG4jZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlXG4iK0csZT1bIiN2ZXJzaW9uIDMwMCBlc1xuXG4jZGVmaW5lIHZhcnlpbmcgaW4iLEE/IiI6Im91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLEE/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aFxuI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZVxuI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlXG4jZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2pcbiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2RcbiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZFxuI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kXG4jZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWRcbiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkXG4jZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrCiJcbiIrZSk7UT1lK1E7Sj13bihFLDM1NjMzLEcrSik7UT13bihFLDM1NjMyLFEpO0UuYXR0YWNoU2hhZGVyKHFhLEopO0UuYXR0YWNoU2hhZGVyKHFhLFEpO3ZvaWQgMCE9PW0uaW5kZXgwQXR0cmlidXRlTmFtZT9FLmJpbmRBdHRyaWJMb2NhdGlvbihxYSwwLG0uaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT13Lm1vcnBoVGFyZ2V0cyYmRS5iaW5kQXR0cmliTG9jYXRpb24ocWEsMCwicG9zaXRpb24iKTtFLmxpbmtQcm9ncmFtKHFhKTtpZihiLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtiPUUuZ2V0UHJvZ3JhbUluZm9Mb2cocWEpLnRyaW0oKTt3PUUuZ2V0U2hhZGVySW5mb0xvZyhKKS50cmltKCk7QT1FLmdldFNoYWRlckluZm9Mb2coUSkudHJpbSgpO1Q9Uz0hMDtpZighMT09PUUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihxYSwzNTcxNCkpUz0hMSxXPXluKEUsSiwidmVydGV4IiksWD15bihFLFEsImZyYWdtZW50IiksY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBzaGFkZXIgZXJyb3I6ICIsCkUuZ2V0RXJyb3IoKSwiMzU3MTUiLEUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihxYSwzNTcxNSksImdsLmdldFByb2dyYW1JbmZvTG9nIixiLFcsWCk7ZWxzZSBpZigiIiE9PWIpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IGdsLmdldFByb2dyYW1JbmZvTG9nKCkiLGIpO2Vsc2UgaWYoIiI9PT13fHwiIj09PUEpVD0hMTtUJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6UyxtYXRlcmlhbDptLHByb2dyYW1Mb2c6Yix2ZXJ0ZXhTaGFkZXI6e2xvZzp3LHByZWZpeDpHfSxmcmFnbWVudFNoYWRlcjp7bG9nOkEscHJlZml4OmV9fSl9RS5kZWxldGVTaGFkZXIoSik7RS5kZWxldGVTaGFkZXIoUSk7dmFyIHJhO3RoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT1yYSYmKHJhPW5ldyBsZShFLHFhKSk7cmV0dXJuIHJhfTt2YXIgd2E7dGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7dm9pZCAwPT09d2EmJih3YT1FcihFLHFhKSk7cmV0dXJuIHdhfTt0aGlzLmRlc3Ryb3k9CmZ1bmN0aW9uKCl7RS5kZWxldGVQcm9ncmFtKHFhKTt0aGlzLnByb2dyYW09dm9pZCAwfTt0aGlzLm5hbWU9dS5uYW1lO3RoaXMuaWQ9R3IrKzt0aGlzLmNvZGU9aDt0aGlzLnVzZWRUaW1lcz0xO3RoaXMucHJvZ3JhbT1xYTt0aGlzLnZlcnRleFNoYWRlcj1KO3RoaXMuZnJhZ21lbnRTaGFkZXI9UTtyZXR1cm4gdGhpc31mdW5jdGlvbiBIcihiLGUsaCl7ZnVuY3Rpb24gbShHKXtHPUcuc2tlbGV0b24uYm9uZXM7aWYoaC5mbG9hdFZlcnRleFRleHR1cmVzKXJldHVybiAxMDI0O3ZhciBKPU1hdGgubWluKE1hdGguZmxvb3IoKGgubWF4VmVydGV4VW5pZm9ybXMtMjApLzQpLEcubGVuZ3RoKTtyZXR1cm4gSjxHLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitHLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK0orIi4iKSwwKTpKfWZ1bmN0aW9uIHUoRyxKKXtpZihHKUcuaXNUZXh0dXJlP1E9Ry5lbmNvZGluZzpHLmlzV2ViR0xSZW5kZXJUYXJnZXQmJgooY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW1zLmdldFRleHR1cmVFbmNvZGluZ0Zyb21NYXA6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksUT1HLnRleHR1cmUuZW5jb2RpbmcpO2Vsc2UgdmFyIFE9M0UzOzNFMz09PVEmJkomJihRPTMwMDcpO3JldHVybiBRfXZhciB3PVtdLEE9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJwaG9uZyIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIiwKTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9LEU9InByZWNpc2lvbiBzdXBwb3J0c1ZlcnRleFRleHR1cmVzIG1hcCBtYXBFbmNvZGluZyBtYXRjYXAgbWF0Y2FwRW5jb2RpbmcgZW52TWFwIGVudk1hcE1vZGUgZW52TWFwRW5jb2RpbmcgbGlnaHRNYXAgYW9NYXAgZW1pc3NpdmVNYXAgZW1pc3NpdmVNYXBFbmNvZGluZyBidW1wTWFwIG5vcm1hbE1hcCBvYmplY3RTcGFjZU5vcm1hbE1hcCB0YW5nZW50U3BhY2VOb3JtYWxNYXAgY2xlYXJjb2F0Tm9ybWFsTWFwIGRpc3BsYWNlbWVudE1hcCBzcGVjdWxhck1hcCByb3VnaG5lc3NNYXAgbWV0YWxuZXNzTWFwIGdyYWRpZW50TWFwIGFscGhhTWFwIGNvbWJpbmUgdmVydGV4Q29sb3JzIHZlcnRleFRhbmdlbnRzIGZvZyB1c2VGb2cgZm9nRXhwMiBmbGF0U2hhZGluZyBzaXplQXR0ZW51YXRpb24gbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciBza2lubmluZyBtYXhCb25lcyB1c2VWZXJ0ZXhUZXh0dXJlIG1vcnBoVGFyZ2V0cyBtb3JwaE5vcm1hbHMgbWF4TW9ycGhUYXJnZXRzIG1heE1vcnBoTm9ybWFscyBwcmVtdWx0aXBsaWVkQWxwaGEgbnVtRGlyTGlnaHRzIG51bVBvaW50TGlnaHRzIG51bVNwb3RMaWdodHMgbnVtSGVtaUxpZ2h0cyBudW1SZWN0QXJlYUxpZ2h0cyBzaGFkb3dNYXBFbmFibGVkIHNoYWRvd01hcFR5cGUgdG9uZU1hcHBpbmcgcGh5c2ljYWxseUNvcnJlY3RMaWdodHMgYWxwaGFUZXN0IGRvdWJsZVNpZGVkIGZsaXBTaWRlZCBudW1DbGlwcGluZ1BsYW5lcyBudW1DbGlwSW50ZXJzZWN0aW9uIGRlcHRoUGFja2luZyBkaXRoZXJpbmcgc2hlZW4iLnNwbGl0KCIgIik7CnRoaXMuZ2V0UGFyYW1ldGVycz1mdW5jdGlvbihHLEosUSxTLFQsVyxYKXt2YXIgaWE9QVtHLnR5cGVdLGhhPVguaXNTa2lubmVkTWVzaD9tKFgpOjAsc2E9aC5wcmVjaXNpb247bnVsbCE9PUcucHJlY2lzaW9uJiYoc2E9aC5nZXRNYXhQcmVjaXNpb24oRy5wcmVjaXNpb24pLHNhIT09Ry5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixHLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHNhLCJpbnN0ZWFkLiIpKTt2YXIgcWE9Yi5nZXRSZW5kZXJUYXJnZXQoKTtyZXR1cm57c2hhZGVySUQ6aWEscHJlY2lzaW9uOnNhLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6aC52ZXJ0ZXhUZXh0dXJlcyxvdXRwdXRFbmNvZGluZzp1KHFhP3FhLnRleHR1cmU6bnVsbCxiLmdhbW1hT3V0cHV0KSxtYXA6ISFHLm1hcCxtYXBFbmNvZGluZzp1KEcubWFwLGIuZ2FtbWFJbnB1dCksbWF0Y2FwOiEhRy5tYXRjYXAsbWF0Y2FwRW5jb2Rpbmc6dShHLm1hdGNhcCwKYi5nYW1tYUlucHV0KSxlbnZNYXA6ISFHLmVudk1hcCxlbnZNYXBNb2RlOkcuZW52TWFwJiZHLmVudk1hcC5tYXBwaW5nLGVudk1hcEVuY29kaW5nOnUoRy5lbnZNYXAsYi5nYW1tYUlucHV0KSxlbnZNYXBDdWJlVVY6ISFHLmVudk1hcCYmKDMwNj09PUcuZW52TWFwLm1hcHBpbmd8fDMwNz09PUcuZW52TWFwLm1hcHBpbmcpLGxpZ2h0TWFwOiEhRy5saWdodE1hcCxhb01hcDohIUcuYW9NYXAsZW1pc3NpdmVNYXA6ISFHLmVtaXNzaXZlTWFwLGVtaXNzaXZlTWFwRW5jb2Rpbmc6dShHLmVtaXNzaXZlTWFwLGIuZ2FtbWFJbnB1dCksYnVtcE1hcDohIUcuYnVtcE1hcCxub3JtYWxNYXA6ISFHLm5vcm1hbE1hcCxvYmplY3RTcGFjZU5vcm1hbE1hcDoxPT09Ry5ub3JtYWxNYXBUeXBlLHRhbmdlbnRTcGFjZU5vcm1hbE1hcDowPT09Ry5ub3JtYWxNYXBUeXBlLGNsZWFyY29hdE5vcm1hbE1hcDohIUcuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUcuZGlzcGxhY2VtZW50TWFwLApyb3VnaG5lc3NNYXA6ISFHLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFHLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIUcuc3BlY3VsYXJNYXAsYWxwaGFNYXA6ISFHLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhRy5ncmFkaWVudE1hcCxzaGVlbjohIUcuc2hlZW4sY29tYmluZTpHLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6Ry5ub3JtYWxNYXAmJkcudmVydGV4VGFuZ2VudHMsdmVydGV4Q29sb3JzOkcudmVydGV4Q29sb3JzLHZlcnRleFV2czohIUcubWFwfHwhIUcuYnVtcE1hcHx8ISFHLm5vcm1hbE1hcHx8ISFHLnNwZWN1bGFyTWFwfHwhIUcuYWxwaGFNYXB8fCEhRy5lbWlzc2l2ZU1hcHx8ISFHLnJvdWdobmVzc01hcHx8ISFHLm1ldGFsbmVzc01hcHx8ISFHLmNsZWFyY29hdE5vcm1hbE1hcCxmb2c6ISFTLHVzZUZvZzpHLmZvZyxmb2dFeHAyOlMmJlMuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOkcuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOkcuc2l6ZUF0dGVudWF0aW9uLApsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixza2lubmluZzpHLnNraW5uaW5nJiYwPGhhLG1heEJvbmVzOmhhLHVzZVZlcnRleFRleHR1cmU6aC5mbG9hdFZlcnRleFRleHR1cmVzLG1vcnBoVGFyZ2V0czpHLm1vcnBoVGFyZ2V0cyxtb3JwaE5vcm1hbHM6Ry5tb3JwaE5vcm1hbHMsbWF4TW9ycGhUYXJnZXRzOmIubWF4TW9ycGhUYXJnZXRzLG1heE1vcnBoTm9ybWFsczpiLm1heE1vcnBoTm9ybWFscyxudW1EaXJMaWdodHM6Si5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6Si5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpKLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOkoucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6Si5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6Si5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6Si5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpKLnNwb3RTaGFkb3dNYXAubGVuZ3RoLApudW1DbGlwcGluZ1BsYW5lczpULG51bUNsaXBJbnRlcnNlY3Rpb246VyxkaXRoZXJpbmc6Ry5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpiLnNoYWRvd01hcC5lbmFibGVkJiZYLnJlY2VpdmVTaGFkb3cmJjA8US5sZW5ndGgsc2hhZG93TWFwVHlwZTpiLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOkcudG9uZU1hcHBlZD9iLnRvbmVNYXBwaW5nOjAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6Yi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6Ry5wcmVtdWx0aXBsaWVkQWxwaGEsYWxwaGFUZXN0OkcuYWxwaGFUZXN0LGRvdWJsZVNpZGVkOjI9PT1HLnNpZGUsZmxpcFNpZGVkOjE9PT1HLnNpZGUsZGVwdGhQYWNraW5nOnZvaWQgMCE9PUcuZGVwdGhQYWNraW5nP0cuZGVwdGhQYWNraW5nOiExfX07dGhpcy5nZXRQcm9ncmFtQ29kZT1mdW5jdGlvbihHLEope3ZhciBRPVtdO0ouc2hhZGVySUQ/US5wdXNoKEouc2hhZGVySUQpOihRLnB1c2goRy5mcmFnbWVudFNoYWRlciksClEucHVzaChHLnZlcnRleFNoYWRlcikpO2lmKHZvaWQgMCE9PUcuZGVmaW5lcylmb3IodmFyIFMgaW4gRy5kZWZpbmVzKVEucHVzaChTKSxRLnB1c2goRy5kZWZpbmVzW1NdKTtmb3IoUz0wO1M8RS5sZW5ndGg7UysrKVEucHVzaChKW0VbU11dKTtRLnB1c2goRy5vbkJlZm9yZUNvbXBpbGUudG9TdHJpbmcoKSk7US5wdXNoKGIuZ2FtbWFPdXRwdXQpO1EucHVzaChiLmdhbW1hRmFjdG9yKTtyZXR1cm4gUS5qb2luKCl9O3RoaXMuYWNxdWlyZVByb2dyYW09ZnVuY3Rpb24oRyxKLFEsUyl7Zm9yKHZhciBULFc9MCxYPXcubGVuZ3RoO1c8WDtXKyspe3ZhciBpYT13W1ddO2lmKGlhLmNvZGU9PT1TKXtUPWlhOysrVC51c2VkVGltZXM7YnJlYWt9fXZvaWQgMD09PVQmJihUPW5ldyBGcihiLGUsUyxHLEosUSxoKSx3LnB1c2goVCkpO3JldHVybiBUfTt0aGlzLnJlbGVhc2VQcm9ncmFtPWZ1bmN0aW9uKEcpezA9PT0tLUcudXNlZFRpbWVzJiYod1t3LmluZGV4T2YoRyldPXdbdy5sZW5ndGgtMV0sCncucG9wKCksRy5kZXN0cm95KCkpfTt0aGlzLnByb2dyYW1zPXd9ZnVuY3Rpb24gSXIoKXt2YXIgYj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUpe3ZhciBoPWIuZ2V0KGUpO3ZvaWQgMD09PWgmJihoPXt9LGIuc2V0KGUsaCkpO3JldHVybiBofSxyZW1vdmU6ZnVuY3Rpb24oZSl7Yi5kZWxldGUoZSl9LHVwZGF0ZTpmdW5jdGlvbihlLGgsbSl7Yi5nZXQoZSlbaF09bX0sZGlzcG9zZTpmdW5jdGlvbigpe2I9bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBKcihiLGUpe3JldHVybiBiLmdyb3VwT3JkZXIhPT1lLmdyb3VwT3JkZXI/Yi5ncm91cE9yZGVyLWUuZ3JvdXBPcmRlcjpiLnJlbmRlck9yZGVyIT09ZS5yZW5kZXJPcmRlcj9iLnJlbmRlck9yZGVyLWUucmVuZGVyT3JkZXI6Yi5wcm9ncmFtIT09ZS5wcm9ncmFtP2IucHJvZ3JhbS5pZC1lLnByb2dyYW0uaWQ6Yi5tYXRlcmlhbC5pZCE9PWUubWF0ZXJpYWwuaWQ/Yi5tYXRlcmlhbC5pZC1lLm1hdGVyaWFsLmlkOmIueiE9PQplLno/Yi56LWUuejpiLmlkLWUuaWR9ZnVuY3Rpb24gS3IoYixlKXtyZXR1cm4gYi5ncm91cE9yZGVyIT09ZS5ncm91cE9yZGVyP2IuZ3JvdXBPcmRlci1lLmdyb3VwT3JkZXI6Yi5yZW5kZXJPcmRlciE9PWUucmVuZGVyT3JkZXI/Yi5yZW5kZXJPcmRlci1lLnJlbmRlck9yZGVyOmIueiE9PWUuej9lLnotYi56OmIuaWQtZS5pZH1mdW5jdGlvbiBDbigpe2Z1bmN0aW9uIGIoQSxFLEcsSixRLFMpe3ZhciBUPWVbaF07dm9pZCAwPT09VD8oVD17aWQ6QS5pZCxvYmplY3Q6QSxnZW9tZXRyeTpFLG1hdGVyaWFsOkcscHJvZ3JhbTpHLnByb2dyYW18fHcsZ3JvdXBPcmRlcjpKLHJlbmRlck9yZGVyOkEucmVuZGVyT3JkZXIsejpRLGdyb3VwOlN9LGVbaF09VCk6KFQuaWQ9QS5pZCxULm9iamVjdD1BLFQuZ2VvbWV0cnk9RSxULm1hdGVyaWFsPUcsVC5wcm9ncmFtPUcucHJvZ3JhbXx8dyxULmdyb3VwT3JkZXI9SixULnJlbmRlck9yZGVyPUEucmVuZGVyT3JkZXIsVC56PVEsVC5ncm91cD1TKTsKaCsrO3JldHVybiBUfXZhciBlPVtdLGg9MCxtPVtdLHU9W10sdz17aWQ6LTF9O3JldHVybntvcGFxdWU6bSx0cmFuc3BhcmVudDp1LGluaXQ6ZnVuY3Rpb24oKXtoPTA7bS5sZW5ndGg9MDt1Lmxlbmd0aD0wfSxwdXNoOmZ1bmN0aW9uKEEsRSxHLEosUSxTKXtBPWIoQSxFLEcsSixRLFMpOyghMD09PUcudHJhbnNwYXJlbnQ/dTptKS5wdXNoKEEpfSx1bnNoaWZ0OmZ1bmN0aW9uKEEsRSxHLEosUSxTKXtBPWIoQSxFLEcsSixRLFMpOyghMD09PUcudHJhbnNwYXJlbnQ/dTptKS51bnNoaWZ0KEEpfSxzb3J0OmZ1bmN0aW9uKCl7MTxtLmxlbmd0aCYmbS5zb3J0KEpyKTsxPHUubGVuZ3RoJiZ1LnNvcnQoS3IpfX19ZnVuY3Rpb24gTHIoKXtmdW5jdGlvbiBiKGgpe2g9aC50YXJnZXQ7aC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixiKTtlLmRlbGV0ZShoKX12YXIgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGgsbSl7dmFyIHU9ZS5nZXQoaCk7aWYodm9pZCAwPT09CnUpe3ZhciB3PW5ldyBDbjtlLnNldChoLG5ldyBXZWFrTWFwKTtlLmdldChoKS5zZXQobSx3KTtoLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGIpfWVsc2Ugdz11LmdldChtKSx2b2lkIDA9PT13JiYodz1uZXcgQ24sdS5zZXQobSx3KSk7cmV0dXJuIHd9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtlPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gTXIoKXt2YXIgYj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9PWJbZS5pZF0pcmV0dXJuIGJbZS5pZF07c3dpdGNoKGUudHlwZSl7Y2FzZSAiRGlyZWN0aW9uYWxMaWdodCI6dmFyIGg9e2RpcmVjdGlvbjpuZXcgZyxjb2xvcjpuZXcgSSxzaGFkb3c6ITEsc2hhZG93QmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IGR9O2JyZWFrO2Nhc2UgIlNwb3RMaWdodCI6aD17cG9zaXRpb246bmV3IGcsZGlyZWN0aW9uOm5ldyBnLGNvbG9yOm5ldyBJLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MCwKc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBkfTticmVhaztjYXNlICJQb2ludExpZ2h0IjpoPXtwb3NpdGlvbjpuZXcgZyxjb2xvcjpuZXcgSSxkaXN0YW5jZTowLGRlY2F5OjAsc2hhZG93OiExLHNoYWRvd0JpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBkLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MUUzfTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOmg9e2RpcmVjdGlvbjpuZXcgZyxza3lDb2xvcjpuZXcgSSxncm91bmRDb2xvcjpuZXcgSX07YnJlYWs7Y2FzZSAiUmVjdEFyZWFMaWdodCI6aD17Y29sb3I6bmV3IEkscG9zaXRpb246bmV3IGcsaGFsZldpZHRoOm5ldyBnLGhhbGZIZWlnaHQ6bmV3IGd9fXJldHVybiBiW2UuaWRdPWh9fX1mdW5jdGlvbiBOcihiLGUpe3JldHVybihlLmNhc3RTaGFkb3c/MTowKS0oYi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gT3IoKXtmb3IodmFyIGI9Cm5ldyBNcixlPXt2ZXJzaW9uOjAsaGFzaDp7ZGlyZWN0aW9uYWxMZW5ndGg6LTEscG9pbnRMZW5ndGg6LTEsc3BvdExlbmd0aDotMSxyZWN0QXJlYUxlbmd0aDotMSxoZW1pTGVuZ3RoOi0xLG51bURpcmVjdGlvbmFsU2hhZG93czotMSxudW1Qb2ludFNoYWRvd3M6LTEsbnVtU3BvdFNoYWRvd3M6LTF9LGFtYmllbnQ6WzAsMCwwXSxwcm9iZTpbXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxwb2ludDpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdLG51bURpcmVjdGlvbmFsU2hhZG93czotMSxudW1Qb2ludFNoYWRvd3M6LTEsbnVtU3BvdFNoYWRvd3M6LTF9LGg9MDs5Pmg7aCsrKWUucHJvYmUucHVzaChuZXcgZyk7dmFyIG09bmV3IGcsdT1uZXcgcix3PW5ldyByO3JldHVybntzZXR1cDpmdW5jdGlvbihBLApFLEcpe2Zvcih2YXIgSj0wLFE9MCxTPTAsVD0wOzk+VDtUKyspZS5wcm9iZVtUXS5zZXQoMCwwLDApO3ZhciBXPUU9MCxYPTAsaWE9MCxoYT0wLHNhPTAscWE9MCxyYT0wO0c9Ry5tYXRyaXhXb3JsZEludmVyc2U7QS5zb3J0KE5yKTtUPTA7Zm9yKHZhciB3YT1BLmxlbmd0aDtUPHdhO1QrKyl7dmFyIHBhPUFbVF0sdmE9cGEuY29sb3IsQ2E9cGEuaW50ZW5zaXR5LFZhPXBhLmRpc3RhbmNlLFdhPXBhLnNoYWRvdyYmcGEuc2hhZG93Lm1hcD9wYS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihwYS5pc0FtYmllbnRMaWdodClKKz12YS5yKkNhLFErPXZhLmcqQ2EsUys9dmEuYipDYTtlbHNlIGlmKHBhLmlzTGlnaHRQcm9iZSlmb3IoV2E9MDs5PldhO1dhKyspZS5wcm9iZVtXYV0uYWRkU2NhbGVkVmVjdG9yKHBhLnNoLmNvZWZmaWNpZW50c1tXYV0sQ2EpO2Vsc2UgaWYocGEuaXNEaXJlY3Rpb25hbExpZ2h0KXt2YXIgRGE9Yi5nZXQocGEpO0RhLmNvbG9yLmNvcHkocGEuY29sb3IpLm11bHRpcGx5U2NhbGFyKHBhLmludGVuc2l0eSk7CkRhLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ocGEubWF0cml4V29ybGQpO20uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhLnRhcmdldC5tYXRyaXhXb3JsZCk7RGEuZGlyZWN0aW9uLnN1YihtKTtEYS5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKEcpO2lmKERhLnNoYWRvdz1wYS5jYXN0U2hhZG93KUNhPXBhLnNoYWRvdyxEYS5zaGFkb3dCaWFzPUNhLmJpYXMsRGEuc2hhZG93UmFkaXVzPUNhLnJhZGl1cyxEYS5zaGFkb3dNYXBTaXplPUNhLm1hcFNpemUsZS5kaXJlY3Rpb25hbFNoYWRvd01hcFtFXT1XYSxlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W0VdPXBhLnNoYWRvdy5tYXRyaXgsc2ErKztlLmRpcmVjdGlvbmFsW0VdPURhO0UrK31lbHNlIGlmKHBhLmlzU3BvdExpZ2h0KXtEYT1iLmdldChwYSk7RGEucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhLm1hdHJpeFdvcmxkKTtEYS5wb3NpdGlvbi5hcHBseU1hdHJpeDQoRyk7RGEuY29sb3IuY29weSh2YSkubXVsdGlwbHlTY2FsYXIoQ2EpOwpEYS5kaXN0YW5jZT1WYTtEYS5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhLm1hdHJpeFdvcmxkKTttLnNldEZyb21NYXRyaXhQb3NpdGlvbihwYS50YXJnZXQubWF0cml4V29ybGQpO0RhLmRpcmVjdGlvbi5zdWIobSk7RGEuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihHKTtEYS5jb25lQ29zPU1hdGguY29zKHBhLmFuZ2xlKTtEYS5wZW51bWJyYUNvcz1NYXRoLmNvcyhwYS5hbmdsZSooMS1wYS5wZW51bWJyYSkpO0RhLmRlY2F5PXBhLmRlY2F5O2lmKERhLnNoYWRvdz1wYS5jYXN0U2hhZG93KUNhPXBhLnNoYWRvdyxEYS5zaGFkb3dCaWFzPUNhLmJpYXMsRGEuc2hhZG93UmFkaXVzPUNhLnJhZGl1cyxEYS5zaGFkb3dNYXBTaXplPUNhLm1hcFNpemUsZS5zcG90U2hhZG93TWFwW1hdPVdhLGUuc3BvdFNoYWRvd01hdHJpeFtYXT1wYS5zaGFkb3cubWF0cml4LHJhKys7ZS5zcG90W1hdPURhO1grK31lbHNlIGlmKHBhLmlzUmVjdEFyZWFMaWdodClEYT1iLmdldChwYSksCkRhLmNvbG9yLmNvcHkodmEpLm11bHRpcGx5U2NhbGFyKENhKSxEYS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ocGEubWF0cml4V29ybGQpLERhLnBvc2l0aW9uLmFwcGx5TWF0cml4NChHKSx3LmlkZW50aXR5KCksdS5jb3B5KHBhLm1hdHJpeFdvcmxkKSx1LnByZW11bHRpcGx5KEcpLHcuZXh0cmFjdFJvdGF0aW9uKHUpLERhLmhhbGZXaWR0aC5zZXQoLjUqcGEud2lkdGgsMCwwKSxEYS5oYWxmSGVpZ2h0LnNldCgwLC41KnBhLmhlaWdodCwwKSxEYS5oYWxmV2lkdGguYXBwbHlNYXRyaXg0KHcpLERhLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHcpLGUucmVjdEFyZWFbaWFdPURhLGlhKys7ZWxzZSBpZihwYS5pc1BvaW50TGlnaHQpe0RhPWIuZ2V0KHBhKTtEYS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ocGEubWF0cml4V29ybGQpO0RhLnBvc2l0aW9uLmFwcGx5TWF0cml4NChHKTtEYS5jb2xvci5jb3B5KHBhLmNvbG9yKS5tdWx0aXBseVNjYWxhcihwYS5pbnRlbnNpdHkpOwpEYS5kaXN0YW5jZT1wYS5kaXN0YW5jZTtEYS5kZWNheT1wYS5kZWNheTtpZihEYS5zaGFkb3c9cGEuY2FzdFNoYWRvdylDYT1wYS5zaGFkb3csRGEuc2hhZG93Qmlhcz1DYS5iaWFzLERhLnNoYWRvd1JhZGl1cz1DYS5yYWRpdXMsRGEuc2hhZG93TWFwU2l6ZT1DYS5tYXBTaXplLERhLnNoYWRvd0NhbWVyYU5lYXI9Q2EuY2FtZXJhLm5lYXIsRGEuc2hhZG93Q2FtZXJhRmFyPUNhLmNhbWVyYS5mYXIsZS5wb2ludFNoYWRvd01hcFtXXT1XYSxlLnBvaW50U2hhZG93TWF0cml4W1ddPXBhLnNoYWRvdy5tYXRyaXgscWErKztlLnBvaW50W1ddPURhO1crK31lbHNlIHBhLmlzSGVtaXNwaGVyZUxpZ2h0JiYoRGE9Yi5nZXQocGEpLERhLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ocGEubWF0cml4V29ybGQpLERhLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oRyksRGEuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLERhLnNreUNvbG9yLmNvcHkocGEuY29sb3IpLm11bHRpcGx5U2NhbGFyKENhKSwKRGEuZ3JvdW5kQ29sb3IuY29weShwYS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoQ2EpLGUuaGVtaVtoYV09RGEsaGErKyl9ZS5hbWJpZW50WzBdPUo7ZS5hbWJpZW50WzFdPVE7ZS5hbWJpZW50WzJdPVM7QT1lLmhhc2g7aWYoQS5kaXJlY3Rpb25hbExlbmd0aCE9PUV8fEEucG9pbnRMZW5ndGghPT1XfHxBLnNwb3RMZW5ndGghPT1YfHxBLnJlY3RBcmVhTGVuZ3RoIT09aWF8fEEuaGVtaUxlbmd0aCE9PWhhfHxBLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PXNhfHxBLm51bVBvaW50U2hhZG93cyE9PXFhfHxBLm51bVNwb3RTaGFkb3dzIT09cmEpZS5kaXJlY3Rpb25hbC5sZW5ndGg9RSxlLnNwb3QubGVuZ3RoPVgsZS5yZWN0QXJlYS5sZW5ndGg9aWEsZS5wb2ludC5sZW5ndGg9VyxlLmhlbWkubGVuZ3RoPWhhLGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPXNhLGUucG9pbnRTaGFkb3dNYXAubGVuZ3RoPXFhLGUuc3BvdFNoYWRvd01hcC5sZW5ndGg9cmEsZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9CnNhLGUucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPXFhLGUuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9cmEsQS5kaXJlY3Rpb25hbExlbmd0aD1FLEEucG9pbnRMZW5ndGg9VyxBLnNwb3RMZW5ndGg9WCxBLnJlY3RBcmVhTGVuZ3RoPWlhLEEuaGVtaUxlbmd0aD1oYSxBLm51bURpcmVjdGlvbmFsU2hhZG93cz1zYSxBLm51bVBvaW50U2hhZG93cz1xYSxBLm51bVNwb3RTaGFkb3dzPXJhLGUudmVyc2lvbj1QcisrfSxzdGF0ZTplfX1mdW5jdGlvbiBEbigpe3ZhciBiPW5ldyBPcixlPVtdLGg9W107cmV0dXJue2luaXQ6ZnVuY3Rpb24oKXtlLmxlbmd0aD0wO2gubGVuZ3RoPTB9LHN0YXRlOntsaWdodHNBcnJheTplLHNoYWRvd3NBcnJheTpoLGxpZ2h0czpifSxzZXR1cExpZ2h0czpmdW5jdGlvbihtKXtiLnNldHVwKGUsaCxtKX0scHVzaExpZ2h0OmZ1bmN0aW9uKG0pe2UucHVzaChtKX0scHVzaFNoYWRvdzpmdW5jdGlvbihtKXtoLnB1c2gobSl9fX1mdW5jdGlvbiBRcigpe2Z1bmN0aW9uIGIoaCl7aD0KaC50YXJnZXQ7aC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixiKTtlLmRlbGV0ZShoKX12YXIgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGgsbSl7aWYoITE9PT1lLmhhcyhoKSl7dmFyIHU9bmV3IERuO2Uuc2V0KGgsbmV3IFdlYWtNYXApO2UuZ2V0KGgpLnNldChtLHUpO2guYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYil9ZWxzZSExPT09ZS5nZXQoaCkuaGFzKG0pPyh1PW5ldyBEbixlLmdldChoKS5zZXQobSx1KSk6dT1lLmdldChoKS5nZXQobSk7cmV0dXJuIHV9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtlPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gbWUoYil7TS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiO3RoaXMuZGVwdGhQYWNraW5nPTMyMDA7dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLmRpc3BsYWNlbWVudE1hcD10aGlzLmFscGhhTWFwPXRoaXMubWFwPW51bGw7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0KMTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIG5lKGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hEaXN0YW5jZU1hdGVyaWFsIjt0aGlzLnJlZmVyZW5jZVBvc2l0aW9uPW5ldyBnO3RoaXMubmVhckRpc3RhbmNlPTE7dGhpcy5mYXJEaXN0YW5jZT0xRTM7dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLmRpc3BsYWNlbWVudE1hcD10aGlzLmFscGhhTWFwPXRoaXMubWFwPW51bGw7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz0wO3RoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIEVuKGIsZSxoKXtmdW5jdGlvbiBtKHZhLENhKXt2YXIgVmE9ZS51cGRhdGUoc2EpO1gudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9CnZhLm1hcC50ZXh0dXJlO1gudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT12YS5tYXBTaXplO1gudW5pZm9ybXMucmFkaXVzLnZhbHVlPXZhLnJhZGl1cztiLnNldFJlbmRlclRhcmdldCh2YS5tYXBQYXNzKTtiLmNsZWFyKCk7Yi5yZW5kZXJCdWZmZXJEaXJlY3QoQ2EsbnVsbCxWYSxYLHNhLG51bGwpO2lhLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPXZhLm1hcFBhc3MudGV4dHVyZTtpYS51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPXZhLm1hcFNpemU7aWEudW5pZm9ybXMucmFkaXVzLnZhbHVlPXZhLnJhZGl1cztiLnNldFJlbmRlclRhcmdldCh2YS5tYXApO2IuY2xlYXIoKTtiLnJlbmRlckJ1ZmZlckRpcmVjdChDYSxudWxsLFZhLGlhLHNhLG51bGwpfWZ1bmN0aW9uIHUodmEsQ2EsVmEsV2EsRGEsSWEpe3ZhciBFYT12YS5nZW9tZXRyeTt2YXIgT2E9UTt2YXIgaGI9dmEuY3VzdG9tRGVwdGhNYXRlcmlhbDtWYS5pc1BvaW50TGlnaHQmJihPYT1TLGhiPXZhLmN1c3RvbURpc3RhbmNlTWF0ZXJpYWwpOwpoYj9PYT1oYjooaGI9ITEsQ2EubW9ycGhUYXJnZXRzJiYoRWEmJkVhLmlzQnVmZmVyR2VvbWV0cnk/aGI9RWEubW9ycGhBdHRyaWJ1dGVzJiZFYS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24mJjA8RWEubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDpFYSYmRWEuaXNHZW9tZXRyeSYmKGhiPUVhLm1vcnBoVGFyZ2V0cyYmMDxFYS5tb3JwaFRhcmdldHMubGVuZ3RoKSksdmEuaXNTa2lubmVkTWVzaCYmITE9PT1DYS5za2lubmluZyYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDogVEhSRUUuU2tpbm5lZE1lc2ggd2l0aCBtYXRlcmlhbC5za2lubmluZyBzZXQgdG8gZmFsc2U6Iix2YSksdmE9dmEuaXNTa2lubmVkTWVzaCYmQ2Euc2tpbm5pbmcsRWE9MCxoYiYmKEVhfD0xKSx2YSYmKEVhfD0yKSxPYT1PYVtFYV0pO2IubG9jYWxDbGlwcGluZ0VuYWJsZWQmJiEwPT09Q2EuY2xpcFNoYWRvd3MmJjAhPT1DYS5jbGlwcGluZ1BsYW5lcy5sZW5ndGgmJihFYT1PYS51dWlkLApoYj1DYS51dWlkLHZhPVRbRWFdLHZvaWQgMD09PXZhJiYodmE9e30sVFtFYV09dmEpLEVhPXZhW2hiXSx2b2lkIDA9PT1FYSYmKEVhPU9hLmNsb25lKCksdmFbaGJdPUVhKSxPYT1FYSk7T2EudmlzaWJsZT1DYS52aXNpYmxlO09hLndpcmVmcmFtZT1DYS53aXJlZnJhbWU7T2Euc2lkZT0zPT09SWE/bnVsbCE9Q2Euc2hhZG93U2lkZT9DYS5zaGFkb3dTaWRlOkNhLnNpZGU6bnVsbCE9Q2Euc2hhZG93U2lkZT9DYS5zaGFkb3dTaWRlOldbQ2Euc2lkZV07T2EuY2xpcFNoYWRvd3M9Q2EuY2xpcFNoYWRvd3M7T2EuY2xpcHBpbmdQbGFuZXM9Q2EuY2xpcHBpbmdQbGFuZXM7T2EuY2xpcEludGVyc2VjdGlvbj1DYS5jbGlwSW50ZXJzZWN0aW9uO09hLndpcmVmcmFtZUxpbmV3aWR0aD1DYS53aXJlZnJhbWVMaW5ld2lkdGg7T2EubGluZXdpZHRoPUNhLmxpbmV3aWR0aDtWYS5pc1BvaW50TGlnaHQmJk9hLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwmJihPYS5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVmEubWF0cml4V29ybGQpLApPYS5uZWFyRGlzdGFuY2U9V2EsT2EuZmFyRGlzdGFuY2U9RGEpO3JldHVybiBPYX1mdW5jdGlvbiB3KHZhLENhLFZhLFdhLERhKXtpZighMSE9PXZhLnZpc2libGUpe2lmKHZhLmxheWVycy50ZXN0KENhLmxheWVycykmJih2YS5pc01lc2h8fHZhLmlzTGluZXx8dmEuaXNQb2ludHMpJiYodmEuY2FzdFNoYWRvd3x8dmEucmVjZWl2ZVNoYWRvdyYmMz09PURhKSYmKCF2YS5mcnVzdHVtQ3VsbGVkfHxBLmludGVyc2VjdHNPYmplY3QodmEpKSl7dmEubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoVmEubWF0cml4V29ybGRJbnZlcnNlLHZhLm1hdHJpeFdvcmxkKTt2YXIgSWE9ZS51cGRhdGUodmEpLEVhPXZhLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoRWEpKWZvcih2YXIgT2E9SWEuZ3JvdXBzLGhiPTAseWI9T2EubGVuZ3RoO2hiPHliO2hiKyspe3ZhciBMYT1PYVtoYl0sZWI9RWFbTGEubWF0ZXJpYWxJbmRleF07ZWImJmViLnZpc2libGUmJihlYj11KHZhLGViLFdhLFZhLm5lYXIsClZhLmZhcixEYSksYi5yZW5kZXJCdWZmZXJEaXJlY3QoVmEsbnVsbCxJYSxlYix2YSxMYSkpfWVsc2UgRWEudmlzaWJsZSYmKGViPXUodmEsRWEsV2EsVmEubmVhcixWYS5mYXIsRGEpLGIucmVuZGVyQnVmZmVyRGlyZWN0KFZhLG51bGwsSWEsZWIsdmEsbnVsbCkpfXZhPXZhLmNoaWxkcmVuO0lhPTA7Zm9yKEVhPXZhLmxlbmd0aDtJYTxFYTtJYSsrKXcodmFbSWFdLENhLFZhLFdhLERhKX19dmFyIEE9bmV3IEVjLEU9bmV3IGQsRz1uZXcgZCxKPW5ldyBuLFE9QXJyYXkoNCksUz1BcnJheSg0KSxUPXt9LFc9ezA6MSwxOjAsMjoyfSxYPW5ldyB1Yih7ZGVmaW5lczp7U0FNUExFX1JBVEU6LjI1LEhBTEZfU0FNUExFX1JBVEU6LjEyNX0sdW5pZm9ybXM6e3NoYWRvd19wYXNzOnt2YWx1ZTpudWxsfSxyZXNvbHV0aW9uOnt2YWx1ZTpuZXcgZH0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOiJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uIFx4M2QgdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsCmZyYWdtZW50U2hhZGVyOiJ1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzcztcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgbWVhbiBceDNkIDAuMDtcbiAgZmxvYXQgc3F1YXJlZF9tZWFuIFx4M2QgMC4wO1xuICBcblx0ZmxvYXQgZGVwdGggXHgzZCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgICkgLyByZXNvbHV0aW9uICkgKTtcbiAgZm9yICggZmxvYXQgaSBceDNkIC0xLjA7IGkgXHgzYyAxLjAgOyBpICtceDNkIFNBTVBMRV9SQVRFKSB7XG4gICAgI2lmZGVmIEhPUklaT05BTF9QQVNTXG4gICAgICB2ZWMyIGRpc3RyaWJ1dGlvbiBceDNkIGRlY29kZUhhbGZSR0JBICggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCBpLCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG4gICAgICBtZWFuICtceDNkIGRpc3RyaWJ1dGlvbi54O1xuICAgICAgc3F1YXJlZF9tZWFuICtceDNkIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54O1xuICAgICNlbHNlXG4gICAgICBmbG9hdCBkZXB0aCBceDNkIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgIGkgKSAgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApO1xuICAgICAgbWVhbiArXHgzZCBkZXB0aDtcbiAgICAgIHNxdWFyZWRfbWVhbiArXHgzZCBkZXB0aCAqIGRlcHRoO1xuICAgICNlbmRpZlxuICB9XG4gIG1lYW4gXHgzZCBtZWFuICogSEFMRl9TQU1QTEVfUkFURTtcbiAgc3F1YXJlZF9tZWFuIFx4M2Qgc3F1YXJlZF9tZWFuICogSEFMRl9TQU1QTEVfUkFURTtcbiAgZmxvYXQgc3RkX2RldiBceDNkIHBvdyggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4sIDAuNSApO1xuICBnbF9GcmFnQ29sb3IgXHgzZCBlbmNvZGVIYWxmUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7XG59In0pLAppYT1YLmNsb25lKCk7aWEuZGVmaW5lcy5IT1JJWk9OQUxfUEFTUz0xO3ZhciBoYT1uZXcgeGE7aGEuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFIobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO3ZhciBzYT1uZXcgeWEoaGEsWCk7Zm9yKGhhPTA7NCE9PWhhOysraGEpe3ZhciBxYT0wIT09KGhhJjEpLHJhPTAhPT0oaGEmMiksd2E9bmV3IG1lKHtkZXB0aFBhY2tpbmc6MzIwMSxtb3JwaFRhcmdldHM6cWEsc2tpbm5pbmc6cmF9KTtRW2hhXT13YTtxYT1uZXcgbmUoe21vcnBoVGFyZ2V0czpxYSxza2lubmluZzpyYX0pO1NbaGFdPXFhfXZhciBwYT10aGlzO3RoaXMuZW5hYmxlZD0hMTt0aGlzLmF1dG9VcGRhdGU9ITA7dGhpcy5uZWVkc1VwZGF0ZT0hMTt0aGlzLnR5cGU9MTt0aGlzLnJlbmRlcj1mdW5jdGlvbih2YSxDYSxWYSl7aWYoITEhPT1wYS5lbmFibGVkJiYoITEhPT1wYS5hdXRvVXBkYXRlfHwhMSE9PXBhLm5lZWRzVXBkYXRlKSYmCjAhPT12YS5sZW5ndGgpe3ZhciBXYT1iLmdldFJlbmRlclRhcmdldCgpLERhPWIuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxJYT1iLmdldEFjdGl2ZU1pcG1hcExldmVsKCksRWE9Yi5zdGF0ZTtFYS5zZXRCbGVuZGluZygwKTtFYS5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpO0VhLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCk7RWEuc2V0U2Npc3NvclRlc3QoITEpO2Zvcih2YXIgT2E9MCxoYj12YS5sZW5ndGg7T2E8aGI7T2ErKyl7dmFyIHliPXZhW09hXSxMYT15Yi5zaGFkb3c7aWYodm9pZCAwPT09TGEpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLHliLCJoYXMgbm8gc2hhZG93LiIpO2Vsc2V7RS5jb3B5KExhLm1hcFNpemUpO3ZhciBlYj1MYS5nZXRGcmFtZUV4dGVudHMoKTtFLm11bHRpcGx5KGViKTtHLmNvcHkoTGEubWFwU2l6ZSk7aWYoRS54Pmh8fEUueT5oKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkb3dNYXA6Iix5YiwiaGFzIHNoYWRvdyBleGNlZWRpbmcgbWF4IHRleHR1cmUgc2l6ZSwgcmVkdWNpbmciKSwKRS54PmgmJihHLng9TWF0aC5mbG9vcihoL2ViLngpLEUueD1HLngqZWIueCxMYS5tYXBTaXplLng9Ry54KSxFLnk+aCYmKEcueT1NYXRoLmZsb29yKGgvZWIueSksRS55PUcueSplYi55LExhLm1hcFNpemUueT1HLnkpO251bGwhPT1MYS5tYXB8fExhLmlzUG9pbnRMaWdodFNoYWRvd3x8MyE9PXRoaXMudHlwZXx8KGViPXttaW5GaWx0ZXI6MTAwNixtYWdGaWx0ZXI6MTAwNixmb3JtYXQ6MTAyM30sTGEubWFwPW5ldyBwKEUueCxFLnksZWIpLExhLm1hcC50ZXh0dXJlLm5hbWU9eWIubmFtZSsiLnNoYWRvd01hcCIsTGEubWFwUGFzcz1uZXcgcChFLngsRS55LGViKSxMYS5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKTtudWxsPT09TGEubWFwJiYoZWI9e21pbkZpbHRlcjoxMDAzLG1hZ0ZpbHRlcjoxMDAzLGZvcm1hdDoxMDIzfSxMYS5tYXA9bmV3IHAoRS54LEUueSxlYiksTGEubWFwLnRleHR1cmUubmFtZT15Yi5uYW1lKyIuc2hhZG93TWFwIixMYS5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKTsKYi5zZXRSZW5kZXJUYXJnZXQoTGEubWFwKTtiLmNsZWFyKCk7ZWI9TGEuZ2V0Vmlld3BvcnRDb3VudCgpO2Zvcih2YXIgbmI9MDtuYjxlYjtuYisrKXt2YXIgTmI9TGEuZ2V0Vmlld3BvcnQobmIpO0ouc2V0KEcueCpOYi54LEcueSpOYi55LEcueCpOYi56LEcueSpOYi53KTtFYS52aWV3cG9ydChKKTtMYS51cGRhdGVNYXRyaWNlcyh5YixWYSxuYik7QT1MYS5nZXRGcnVzdHVtKCk7dyhDYSxWYSxMYS5jYW1lcmEseWIsdGhpcy50eXBlKX1MYS5pc1BvaW50TGlnaHRTaGFkb3d8fDMhPT10aGlzLnR5cGV8fG0oTGEsVmEpfX1wYS5uZWVkc1VwZGF0ZT0hMTtiLnNldFJlbmRlclRhcmdldChXYSxEYSxJYSl9fX1mdW5jdGlvbiBScihiLGUsaCxtKXtmdW5jdGlvbiB1KGthLEhhLE5hKXt2YXIgcmI9bmV3IFVpbnQ4QXJyYXkoNCksWGE9Yi5jcmVhdGVUZXh0dXJlKCk7Yi5iaW5kVGV4dHVyZShrYSxYYSk7Yi50ZXhQYXJhbWV0ZXJpKGthLDEwMjQxLDk3MjgpO2IudGV4UGFyYW1ldGVyaShrYSwKMTAyNDAsOTcyOCk7Zm9yKGthPTA7a2E8TmE7a2ErKyliLnRleEltYWdlMkQoSGEra2EsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxyYik7cmV0dXJuIFhhfWZ1bmN0aW9uIHcoa2EsSGEpe3NhW2thXT0xOzA9PT1xYVtrYV0mJihiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGthKSxxYVtrYV09MSk7cmFba2FdIT09SGEmJigobS5pc1dlYkdMMj9iOmUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpW20uaXNXZWJHTDI/InZlcnRleEF0dHJpYkRpdmlzb3IiOiJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiXShrYSxIYSkscmFba2FdPUhhKX1mdW5jdGlvbiBBKGthKXshMCE9PXdhW2thXSYmKGIuZW5hYmxlKGthKSx3YVtrYV09ITApfWZ1bmN0aW9uIEUoa2EpeyExIT09d2Fba2FdJiYoYi5kaXNhYmxlKGthKSx3YVtrYV09ITEpfWZ1bmN0aW9uIEcoa2EsSGEsTmEscmIsWGEsbWIsb2IsU2Epe2lmKDA9PT1rYSlDYSYmKEUoMzA0MiksQ2E9ITEpO2Vsc2UgaWYoQ2F8fChBKDMwNDIpLApDYT0hMCksNSE9PWthKXtpZihrYSE9PVZhfHxTYSE9PXliKXtpZigxMDAhPT1XYXx8MTAwIT09RWEpYi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxFYT1XYT0xMDA7aWYoU2Epc3dpdGNoKGthKXtjYXNlIDE6Yi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSAyOmIuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSAzOmIuYmxlbmRGdW5jU2VwYXJhdGUoMCwwLDc2OSw3NzEpO2JyZWFrO2Nhc2UgNDpiLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsa2EpfWVsc2Ugc3dpdGNoKGthKXtjYXNlIDE6Yi5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIDI6Yi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgMzpiLmJsZW5kRnVuYygwLDc2OSk7YnJlYWs7Y2FzZSA0OmIuYmxlbmRGdW5jKDAsNzY4KTticmVhazsKZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGthKX1oYj1PYT1JYT1EYT1udWxsO1ZhPWthO3liPVNhfX1lbHNle1hhPVhhfHxIYTttYj1tYnx8TmE7b2I9b2J8fHJiO2lmKEhhIT09V2F8fFhhIT09RWEpYi5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoaC5jb252ZXJ0KEhhKSxoLmNvbnZlcnQoWGEpKSxXYT1IYSxFYT1YYTtpZihOYSE9PURhfHxyYiE9PUlhfHxtYiE9PU9hfHxvYiE9PWhiKWIuYmxlbmRGdW5jU2VwYXJhdGUoaC5jb252ZXJ0KE5hKSxoLmNvbnZlcnQocmIpLGguY29udmVydChtYiksaC5jb252ZXJ0KG9iKSksRGE9TmEsSWE9cmIsT2E9bWIsaGI9b2I7VmE9a2E7eWI9bnVsbH19ZnVuY3Rpb24gSihrYSl7TGEhPT1rYSYmKGthP2IuZnJvbnRGYWNlKDIzMDQpOmIuZnJvbnRGYWNlKDIzMDUpLExhPWthKX1mdW5jdGlvbiBRKGthKXswIT09a2E/KEEoMjg4NCksa2EhPT1lYiYmKDE9PT1rYT9iLmN1bGxGYWNlKDEwMjkpOgoyPT09a2E/Yi5jdWxsRmFjZSgxMDI4KTpiLmN1bGxGYWNlKDEwMzIpKSk6RSgyODg0KTtlYj1rYX1mdW5jdGlvbiBTKGthLEhhLE5hKXtpZihrYSl7aWYoQSgzMjgyMyksTmIhPT1IYXx8RGIhPT1OYSliLnBvbHlnb25PZmZzZXQoSGEsTmEpLE5iPUhhLERiPU5hfWVsc2UgRSgzMjgyMyl9ZnVuY3Rpb24gVChrYSl7dm9pZCAwPT09a2EmJihrYT0zMzk4NCtqYS0xKTtBYSE9PWthJiYoYi5hY3RpdmVUZXh0dXJlKGthKSxBYT1rYSl9dmFyIFc9bmV3IGZ1bmN0aW9uKCl7dmFyIGthPSExLEhhPW5ldyBuLE5hPW51bGwscmI9bmV3IG4oMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oWGEpe05hPT09WGF8fGthfHwoYi5jb2xvck1hc2soWGEsWGEsWGEsWGEpLE5hPVhhKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFhhKXtrYT1YYX0sc2V0Q2xlYXI6ZnVuY3Rpb24oWGEsbWIsb2IsU2EsamIpeyEwPT09amImJihYYSo9U2EsbWIqPVNhLG9iKj1TYSk7SGEuc2V0KFhhLG1iLG9iLFNhKTsKITE9PT1yYi5lcXVhbHMoSGEpJiYoYi5jbGVhckNvbG9yKFhhLG1iLG9iLFNhKSxyYi5jb3B5KEhhKSl9LHJlc2V0OmZ1bmN0aW9uKCl7a2E9ITE7TmE9bnVsbDtyYi5zZXQoLTEsMCwwLDApfX19LFg9bmV3IGZ1bmN0aW9uKCl7dmFyIGthPSExLEhhPW51bGwsTmE9bnVsbCxyYj1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKFhhKXtYYT9BKDI5MjkpOkUoMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oWGEpe0hhPT09WGF8fGthfHwoYi5kZXB0aE1hc2soWGEpLEhhPVhhKX0sc2V0RnVuYzpmdW5jdGlvbihYYSl7aWYoTmEhPT1YYSl7aWYoWGEpc3dpdGNoKFhhKXtjYXNlIDA6Yi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIDE6Yi5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIDI6Yi5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIDM6Yi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIDQ6Yi5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIDU6Yi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIDY6Yi5kZXB0aEZ1bmMoNTE2KTsKYnJlYWs7Y2FzZSA3OmIuZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpiLmRlcHRoRnVuYyg1MTUpfWVsc2UgYi5kZXB0aEZ1bmMoNTE1KTtOYT1YYX19LHNldExvY2tlZDpmdW5jdGlvbihYYSl7a2E9WGF9LHNldENsZWFyOmZ1bmN0aW9uKFhhKXtyYiE9PVhhJiYoYi5jbGVhckRlcHRoKFhhKSxyYj1YYSl9LHJlc2V0OmZ1bmN0aW9uKCl7a2E9ITE7cmI9TmE9SGE9bnVsbH19fSxpYT1uZXcgZnVuY3Rpb24oKXt2YXIga2E9ITEsSGE9bnVsbCxOYT1udWxsLHJiPW51bGwsWGE9bnVsbCxtYj1udWxsLG9iPW51bGwsU2E9bnVsbCxqYj1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKHFiKXtrYXx8KHFiP0EoMjk2MCk6RSgyOTYwKSl9LHNldE1hc2s6ZnVuY3Rpb24ocWIpe0hhPT09cWJ8fGthfHwoYi5zdGVuY2lsTWFzayhxYiksSGE9cWIpfSxzZXRGdW5jOmZ1bmN0aW9uKHFiLHRiLHhiKXtpZihOYSE9PXFifHxyYiE9PXRifHxYYSE9PXhiKWIuc3RlbmNpbEZ1bmMocWIsdGIsCnhiKSxOYT1xYixyYj10YixYYT14Yn0sc2V0T3A6ZnVuY3Rpb24ocWIsdGIseGIpe2lmKG1iIT09cWJ8fG9iIT09dGJ8fFNhIT09eGIpYi5zdGVuY2lsT3AocWIsdGIseGIpLG1iPXFiLG9iPXRiLFNhPXhifSxzZXRMb2NrZWQ6ZnVuY3Rpb24ocWIpe2thPXFifSxzZXRDbGVhcjpmdW5jdGlvbihxYil7amIhPT1xYiYmKGIuY2xlYXJTdGVuY2lsKHFiKSxqYj1xYil9LHJlc2V0OmZ1bmN0aW9uKCl7a2E9ITE7amI9U2E9b2I9bWI9WGE9cmI9TmE9SGE9bnVsbH19fSxoYT1iLmdldFBhcmFtZXRlcigzNDkyMSksc2E9bmV3IFVpbnQ4QXJyYXkoaGEpLHFhPW5ldyBVaW50OEFycmF5KGhhKSxyYT1uZXcgVWludDhBcnJheShoYSksd2E9e30scGE9bnVsbCx2YT1udWxsLENhPW51bGwsVmE9bnVsbCxXYT1udWxsLERhPW51bGwsSWE9bnVsbCxFYT1udWxsLE9hPW51bGwsaGI9bnVsbCx5Yj0hMSxMYT1udWxsLGViPW51bGwsbmI9bnVsbCxOYj1udWxsLERiPW51bGwsamE9Yi5nZXRQYXJhbWV0ZXIoMzU2NjEpLApvYT0hMTtoYT0wO2hhPWIuZ2V0UGFyYW1ldGVyKDc5MzgpOy0xIT09aGEuaW5kZXhPZigiV2ViR0wiKT8oaGE9cGFyc2VGbG9hdCgvXldlYkdMIChbMC05XSkvLmV4ZWMoaGEpWzFdKSxvYT0xPD1oYSk6LTEhPT1oYS5pbmRleE9mKCJPcGVuR0wgRVMiKSYmKGhhPXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFswLTldKS8uZXhlYyhoYSlbMV0pLG9hPTI8PWhhKTt2YXIgQWE9bnVsbCxLYT17fSwkYT1uZXcgbixQYT1uZXcgbixmYj17fTtmYlszNTUzXT11KDM1NTMsMzU1MywxKTtmYlszNDA2N109dSgzNDA2NywzNDA2OSw2KTtXLnNldENsZWFyKDAsMCwwLDEpO1guc2V0Q2xlYXIoMSk7aWEuc2V0Q2xlYXIoMCk7QSgyOTI5KTtYLnNldEZ1bmMoMyk7SighMSk7USgxKTtBKDI4ODQpO0coMCk7cmV0dXJue2J1ZmZlcnM6e2NvbG9yOlcsZGVwdGg6WCxzdGVuY2lsOmlhfSxpbml0QXR0cmlidXRlczpmdW5jdGlvbigpe2Zvcih2YXIga2E9MCxIYT1zYS5sZW5ndGg7a2E8SGE7a2ErKylzYVtrYV09CjB9LGVuYWJsZUF0dHJpYnV0ZTpmdW5jdGlvbihrYSl7dyhrYSwwKX0sZW5hYmxlQXR0cmlidXRlQW5kRGl2aXNvcjp3LGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciBrYT0wLEhhPXFhLmxlbmd0aDtrYSE9PUhhOysra2EpcWFba2FdIT09c2Fba2FdJiYoYi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoa2EpLHFhW2thXT0wKX0sZW5hYmxlOkEsZGlzYWJsZTpFLGdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0czpmdW5jdGlvbigpe2lmKG51bGw9PT1wYSYmKHBhPVtdLGUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpfHxlLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSkpZm9yKHZhciBrYT1iLmdldFBhcmFtZXRlcigzNDQ2NyksSGE9MDtIYTxrYS5sZW5ndGg7SGErKylwYS5wdXNoKGthW0hhXSk7CnJldHVybiBwYX0sdXNlUHJvZ3JhbTpmdW5jdGlvbihrYSl7cmV0dXJuIHZhIT09a2E/KGIudXNlUHJvZ3JhbShrYSksdmE9a2EsITApOiExfSxzZXRCbGVuZGluZzpHLHNldE1hdGVyaWFsOmZ1bmN0aW9uKGthLEhhKXsyPT09a2Euc2lkZT9FKDI4ODQpOkEoMjg4NCk7dmFyIE5hPTE9PT1rYS5zaWRlO0hhJiYoTmE9IU5hKTtKKE5hKTsxPT09a2EuYmxlbmRpbmcmJiExPT09a2EudHJhbnNwYXJlbnQ/RygwKTpHKGthLmJsZW5kaW5nLGthLmJsZW5kRXF1YXRpb24sa2EuYmxlbmRTcmMsa2EuYmxlbmREc3Qsa2EuYmxlbmRFcXVhdGlvbkFscGhhLGthLmJsZW5kU3JjQWxwaGEsa2EuYmxlbmREc3RBbHBoYSxrYS5wcmVtdWx0aXBsaWVkQWxwaGEpO1guc2V0RnVuYyhrYS5kZXB0aEZ1bmMpO1guc2V0VGVzdChrYS5kZXB0aFRlc3QpO1guc2V0TWFzayhrYS5kZXB0aFdyaXRlKTtXLnNldE1hc2soa2EuY29sb3JXcml0ZSk7SGE9a2Euc3RlbmNpbFdyaXRlO2lhLnNldFRlc3QoSGEpO0hhJiYKKGlhLnNldEZ1bmMoa2Euc3RlbmNpbEZ1bmMsa2Euc3RlbmNpbFJlZixrYS5zdGVuY2lsTWFzayksaWEuc2V0T3Aoa2Euc3RlbmNpbEZhaWwsa2Euc3RlbmNpbFpGYWlsLGthLnN0ZW5jaWxaUGFzcykpO1Moa2EucG9seWdvbk9mZnNldCxrYS5wb2x5Z29uT2Zmc2V0RmFjdG9yLGthLnBvbHlnb25PZmZzZXRVbml0cyl9LHNldEZsaXBTaWRlZDpKLHNldEN1bGxGYWNlOlEsc2V0TGluZVdpZHRoOmZ1bmN0aW9uKGthKXtrYSE9PW5iJiYob2EmJmIubGluZVdpZHRoKGthKSxuYj1rYSl9LHNldFBvbHlnb25PZmZzZXQ6UyxzZXRTY2lzc29yVGVzdDpmdW5jdGlvbihrYSl7a2E/QSgzMDg5KTpFKDMwODkpfSxhY3RpdmVUZXh0dXJlOlQsYmluZFRleHR1cmU6ZnVuY3Rpb24oa2EsSGEpe251bGw9PT1BYSYmVCgpO3ZhciBOYT1LYVtBYV07dm9pZCAwPT09TmEmJihOYT17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LEthW0FhXT1OYSk7aWYoTmEudHlwZSE9PWthfHxOYS50ZXh0dXJlIT09CkhhKWIuYmluZFRleHR1cmUoa2EsSGF8fGZiW2thXSksTmEudHlwZT1rYSxOYS50ZXh0dXJlPUhhfSxjb21wcmVzc2VkVGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtiLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KGIsYXJndW1lbnRzKX1jYXRjaChrYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGthKX19LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7Yi50ZXhJbWFnZTJELmFwcGx5KGIsYXJndW1lbnRzKX1jYXRjaChrYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGthKX19LHRleEltYWdlM0Q6ZnVuY3Rpb24oKXt0cnl7Yi50ZXhJbWFnZTNELmFwcGx5KGIsYXJndW1lbnRzKX1jYXRjaChrYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGthKX19LHNjaXNzb3I6ZnVuY3Rpb24oa2EpeyExPT09JGEuZXF1YWxzKGthKSYmKGIuc2Npc3NvcihrYS54LGthLnksa2EueixrYS53KSwkYS5jb3B5KGthKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKGthKXshMT09PQpQYS5lcXVhbHMoa2EpJiYoYi52aWV3cG9ydChrYS54LGthLnksa2EueixrYS53KSxQYS5jb3B5KGthKSl9LHJlc2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBrYT0wO2thPHFhLmxlbmd0aDtrYSsrKTE9PT1xYVtrYV0mJihiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShrYSkscWFba2FdPTApO3dhPXt9O0FhPXBhPW51bGw7S2E9e307ZWI9TGE9VmE9dmE9bnVsbDtXLnJlc2V0KCk7WC5yZXNldCgpO2lhLnJlc2V0KCl9fX1mdW5jdGlvbiBTcihiLGUsaCxtLHUsdyxBKXtmdW5jdGlvbiBFKGphLG9hKXtyZXR1cm4gZWI/bmV3IE9mZnNjcmVlbkNhbnZhcyhqYSxvYSk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIil9ZnVuY3Rpb24gRyhqYSxvYSxBYSxLYSl7dmFyICRhPTE7aWYoamEud2lkdGg+S2F8fGphLmhlaWdodD5LYSkkYT1LYS9NYXRoLm1heChqYS53aWR0aCxqYS5oZWlnaHQpO2lmKDE+JGF8fCEwPT09b2Epe2lmKCJ1bmRlZmluZWQiIT09CnR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50JiZqYSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT09dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZqYSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHwidW5kZWZpbmVkIiE9PXR5cGVvZiBJbWFnZUJpdG1hcCYmamEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcClyZXR1cm4gS2E9b2E/bGIuZmxvb3JQb3dlck9mVHdvOk1hdGguZmxvb3Isb2E9S2EoJGEqamEud2lkdGgpLCRhPUthKCRhKmphLmhlaWdodCksdm9pZCAwPT09TGEmJihMYT1FKG9hLCRhKSksQWE9QWE/RShvYSwkYSk6TGEsQWEud2lkdGg9b2EsQWEuaGVpZ2h0PSRhLEFhLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGphLDAsMCxvYSwkYSksY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQgZnJvbSAoIitqYS53aWR0aCsieCIramEuaGVpZ2h0KyIpIHRvICgiK29hKyJ4IiskYSsiKS4iKSwKQWE7ImRhdGEiaW4gamEmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIitqYS53aWR0aCsieCIramEuaGVpZ2h0KyIpLiIpfXJldHVybiBqYX1mdW5jdGlvbiBKKGphKXtyZXR1cm4gbGIuaXNQb3dlck9mVHdvKGphLndpZHRoKSYmbGIuaXNQb3dlck9mVHdvKGphLmhlaWdodCl9ZnVuY3Rpb24gUShqYSl7cmV0dXJuIHUuaXNXZWJHTDI/ITE6MTAwMSE9PWphLndyYXBTfHwxMDAxIT09amEud3JhcFR8fDEwMDMhPT1qYS5taW5GaWx0ZXImJjEwMDYhPT1qYS5taW5GaWx0ZXJ9ZnVuY3Rpb24gUyhqYSxvYSl7cmV0dXJuIGphLmdlbmVyYXRlTWlwbWFwcyYmb2EmJjEwMDMhPT1qYS5taW5GaWx0ZXImJjEwMDYhPT1qYS5taW5GaWx0ZXJ9ZnVuY3Rpb24gVChqYSxvYSxBYSxLYSl7Yi5nZW5lcmF0ZU1pcG1hcChqYSk7bS5nZXQob2EpLl9fbWF4TWlwTGV2ZWw9TWF0aC5sb2coTWF0aC5tYXgoQWEsS2EpKSpNYXRoLkxPRzJFfQpmdW5jdGlvbiBXKGphLG9hKXtpZighdS5pc1dlYkdMMilyZXR1cm4gamE7dmFyIEFhPWphOzY0MDM9PT1qYSYmKDUxMjY9PT1vYSYmKEFhPTMzMzI2KSw1MTMxPT09b2EmJihBYT0zMzMyNSksNTEyMT09PW9hJiYoQWE9MzMzMjEpKTs2NDA3PT09amEmJig1MTI2PT09b2EmJihBYT0zNDgzNyksNTEzMT09PW9hJiYoQWE9MzQ4NDMpLDUxMjE9PT1vYSYmKEFhPTMyODQ5KSk7NjQwOD09PWphJiYoNTEyNj09PW9hJiYoQWE9MzQ4MzYpLDUxMzE9PT1vYSYmKEFhPTM0ODQyKSw1MTIxPT09b2EmJihBYT0zMjg1NikpOzMzMzI1PT09QWF8fDMzMzI2PT09QWF8fDM0ODQyPT09QWF8fDM0ODM2PT09QWE/ZS5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTooMzQ4NDM9PT1BYXx8MzQ4Mzc9PT1BYSkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMgd2l0aCBSR0IgZm9ybWF0IG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgUkdCQSBpbnN0ZWFkLiIpOwpyZXR1cm4gQWF9ZnVuY3Rpb24gWChqYSl7cmV0dXJuIDEwMDM9PT1qYXx8MTAwND09PWphfHwxMDA1PT09amE/OTcyODo5NzI5fWZ1bmN0aW9uIGlhKGphKXtqYT1qYS50YXJnZXQ7amEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsaWEpO3NhKGphKTtqYS5pc1ZpZGVvVGV4dHVyZSYmeWIuZGVsZXRlKGphKTtBLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIGhhKGphKXtqYT1qYS50YXJnZXQ7amEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsaGEpO3FhKGphKTtBLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIHNhKGphKXt2YXIgb2E9bS5nZXQoamEpO3ZvaWQgMCE9PW9hLl9fd2ViZ2xJbml0JiYoYi5kZWxldGVUZXh0dXJlKG9hLl9fd2ViZ2xUZXh0dXJlKSxtLnJlbW92ZShqYSkpfWZ1bmN0aW9uIHFhKGphKXt2YXIgb2E9bS5nZXQoamEpLEFhPW0uZ2V0KGphLnRleHR1cmUpO2lmKGphKXt2b2lkIDAhPT1BYS5fX3dlYmdsVGV4dHVyZSYmYi5kZWxldGVUZXh0dXJlKEFhLl9fd2ViZ2xUZXh0dXJlKTsKamEuZGVwdGhUZXh0dXJlJiZqYS5kZXB0aFRleHR1cmUuZGlzcG9zZSgpO2lmKGphLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlKWZvcihBYT0wOzY+QWE7QWErKyliLmRlbGV0ZUZyYW1lYnVmZmVyKG9hLl9fd2ViZ2xGcmFtZWJ1ZmZlcltBYV0pLG9hLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmYi5kZWxldGVSZW5kZXJidWZmZXIob2EuX193ZWJnbERlcHRoYnVmZmVyW0FhXSk7ZWxzZSBiLmRlbGV0ZUZyYW1lYnVmZmVyKG9hLl9fd2ViZ2xGcmFtZWJ1ZmZlciksb2EuX193ZWJnbERlcHRoYnVmZmVyJiZiLmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYS5fX3dlYmdsRGVwdGhidWZmZXIpO20ucmVtb3ZlKGphLnRleHR1cmUpO20ucmVtb3ZlKGphKX19ZnVuY3Rpb24gcmEoamEsb2Epe3ZhciBBYT1tLmdldChqYSk7amEuaXNWaWRlb1RleHR1cmUmJmhiKGphKTtpZigwPGphLnZlcnNpb24mJkFhLl9fdmVyc2lvbiE9PWphLnZlcnNpb24pe3ZhciBLYT1qYS5pbWFnZTtpZih2b2lkIDA9PT1LYSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpOwplbHNlIGlmKCExPT09S2EuY29tcGxldGUpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIik7ZWxzZXtWYShBYSxqYSxvYSk7cmV0dXJufX1oLmFjdGl2ZVRleHR1cmUoMzM5ODQrb2EpO2guYmluZFRleHR1cmUoMzU1MyxBYS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gd2EoamEsb2Epe2lmKDY9PT1qYS5pbWFnZS5sZW5ndGgpe3ZhciBBYT1tLmdldChqYSk7aWYoMDxqYS52ZXJzaW9uJiZBYS5fX3ZlcnNpb24hPT1qYS52ZXJzaW9uKXtDYShBYSxqYSk7aC5hY3RpdmVUZXh0dXJlKDMzOTg0K29hKTtoLmJpbmRUZXh0dXJlKDM0MDY3LEFhLl9fd2ViZ2xUZXh0dXJlKTtiLnBpeGVsU3RvcmVpKDM3NDQwLGphLmZsaXBZKTt2YXIgS2E9amEmJmphLmlzQ29tcHJlc3NlZFRleHR1cmU7b2E9amEuaW1hZ2VbMF0mJmphLmltYWdlWzBdLmlzRGF0YVRleHR1cmU7Zm9yKHZhciAkYT1bXSwKUGE9MDs2PlBhO1BhKyspJGFbUGFdPUthfHxvYT9vYT9qYS5pbWFnZVtQYV0uaW1hZ2U6amEuaW1hZ2VbUGFdOkcoamEuaW1hZ2VbUGFdLCExLCEwLHUubWF4Q3ViZW1hcFNpemUpO3ZhciBmYj0kYVswXSxrYT1KKGZiKXx8dS5pc1dlYkdMMixIYT13LmNvbnZlcnQoamEuZm9ybWF0KSxOYT13LmNvbnZlcnQoamEudHlwZSkscmI9VyhIYSxOYSk7dmEoMzQwNjcsamEsa2EpO2lmKEthKXtmb3IoUGE9MDs2PlBhO1BhKyspe3ZhciBYYT0kYVtQYV0ubWlwbWFwcztmb3IoS2E9MDtLYTxYYS5sZW5ndGg7S2ErKyl7dmFyIG1iPVhhW0thXTsxMDIzIT09amEuZm9ybWF0JiYxMDIyIT09amEuZm9ybWF0Py0xPGguZ2V0Q29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKCkuaW5kZXhPZihIYSk/aC5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStQYSxLYSxyYixtYi53aWR0aCxtYi5oZWlnaHQsMCxtYi5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6CmgudGV4SW1hZ2UyRCgzNDA2OStQYSxLYSxyYixtYi53aWR0aCxtYi5oZWlnaHQsMCxIYSxOYSxtYi5kYXRhKX19QWEuX19tYXhNaXBMZXZlbD1YYS5sZW5ndGgtMX1lbHNle1hhPWphLm1pcG1hcHM7Zm9yKFBhPTA7Nj5QYTtQYSsrKWlmKG9hKWZvcihoLnRleEltYWdlMkQoMzQwNjkrUGEsMCxyYiwkYVtQYV0ud2lkdGgsJGFbUGFdLmhlaWdodCwwLEhhLE5hLCRhW1BhXS5kYXRhKSxLYT0wO0thPFhhLmxlbmd0aDtLYSsrKW1iPVhhW0thXSxtYj1tYi5pbWFnZVtQYV0uaW1hZ2UsaC50ZXhJbWFnZTJEKDM0MDY5K1BhLEthKzEscmIsbWIud2lkdGgsbWIuaGVpZ2h0LDAsSGEsTmEsbWIuZGF0YSk7ZWxzZSBmb3IoaC50ZXhJbWFnZTJEKDM0MDY5K1BhLDAscmIsSGEsTmEsJGFbUGFdKSxLYT0wO0thPFhhLmxlbmd0aDtLYSsrKW1iPVhhW0thXSxoLnRleEltYWdlMkQoMzQwNjkrUGEsS2ErMSxyYixIYSxOYSxtYi5pbWFnZVtQYV0pO0FhLl9fbWF4TWlwTGV2ZWw9WGEubGVuZ3RofVMoamEsCmthKSYmVCgzNDA2NyxqYSxmYi53aWR0aCxmYi5oZWlnaHQpO0FhLl9fdmVyc2lvbj1qYS52ZXJzaW9uO2lmKGphLm9uVXBkYXRlKWphLm9uVXBkYXRlKGphKX1lbHNlIGguYWN0aXZlVGV4dHVyZSgzMzk4NCtvYSksaC5iaW5kVGV4dHVyZSgzNDA2NyxBYS5fX3dlYmdsVGV4dHVyZSl9fWZ1bmN0aW9uIHBhKGphLG9hKXtoLmFjdGl2ZVRleHR1cmUoMzM5ODQrb2EpO2guYmluZFRleHR1cmUoMzQwNjcsbS5nZXQoamEpLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiB2YShqYSxvYSxBYSl7QWE/KGIudGV4UGFyYW1ldGVyaShqYSwxMDI0Mix3LmNvbnZlcnQob2Eud3JhcFMpKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDMsdy5jb252ZXJ0KG9hLndyYXBUKSksMzI4NzkhPT1qYSYmMzU4NjYhPT1qYXx8Yi50ZXhQYXJhbWV0ZXJpKGphLDMyODgyLHcuY29udmVydChvYS53cmFwUikpLGIudGV4UGFyYW1ldGVyaShqYSwxMDI0MCx3LmNvbnZlcnQob2EubWFnRmlsdGVyKSksYi50ZXhQYXJhbWV0ZXJpKGphLAoxMDI0MSx3LmNvbnZlcnQob2EubWluRmlsdGVyKSkpOihiLnRleFBhcmFtZXRlcmkoamEsMTAyNDIsMzMwNzEpLGIudGV4UGFyYW1ldGVyaShqYSwxMDI0MywzMzA3MSksMzI4NzkhPT1qYSYmMzU4NjYhPT1qYXx8Yi50ZXhQYXJhbWV0ZXJpKGphLDMyODgyLDMzMDcxKSwxMDAxPT09b2Eud3JhcFMmJjEwMDE9PT1vYS53cmFwVHx8Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLGIudGV4UGFyYW1ldGVyaShqYSwxMDI0MCxYKG9hLm1hZ0ZpbHRlcikpLGIudGV4UGFyYW1ldGVyaShqYSwxMDI0MSxYKG9hLm1pbkZpbHRlcikpLDEwMDMhPT1vYS5taW5GaWx0ZXImJjEwMDYhPT1vYS5taW5GaWx0ZXImJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKTsKIShBYT1lLmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpfHwxMDE1PT09b2EudHlwZSYmbnVsbD09PWUuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8MTAxNj09PW9hLnR5cGUmJm51bGw9PT0odS5pc1dlYkdMMnx8ZS5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpfHwhKDE8b2EuYW5pc290cm9weXx8bS5nZXQob2EpLl9fY3VycmVudEFuaXNvdHJvcHkpfHwoYi50ZXhQYXJhbWV0ZXJmKGphLEFhLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKG9hLmFuaXNvdHJvcHksdS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxtLmdldChvYSkuX19jdXJyZW50QW5pc290cm9weT1vYS5hbmlzb3Ryb3B5KX1mdW5jdGlvbiBDYShqYSxvYSl7dm9pZCAwPT09amEuX193ZWJnbEluaXQmJihqYS5fX3dlYmdsSW5pdD0hMCxvYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixpYSksamEuX193ZWJnbFRleHR1cmU9Yi5jcmVhdGVUZXh0dXJlKCksCkEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIFZhKGphLG9hLEFhKXt2YXIgS2E9MzU1MztvYS5pc0RhdGFUZXh0dXJlMkRBcnJheSYmKEthPTM1ODY2KTtvYS5pc0RhdGFUZXh0dXJlM0QmJihLYT0zMjg3OSk7Q2EoamEsb2EpO2guYWN0aXZlVGV4dHVyZSgzMzk4NCtBYSk7aC5iaW5kVGV4dHVyZShLYSxqYS5fX3dlYmdsVGV4dHVyZSk7Yi5waXhlbFN0b3JlaSgzNzQ0MCxvYS5mbGlwWSk7Yi5waXhlbFN0b3JlaSgzNzQ0MSxvYS5wcmVtdWx0aXBseUFscGhhKTtiLnBpeGVsU3RvcmVpKDMzMTcsb2EudW5wYWNrQWxpZ25tZW50KTtBYT1RKG9hKSYmITE9PT1KKG9hLmltYWdlKTtBYT1HKG9hLmltYWdlLEFhLCExLHUubWF4VGV4dHVyZVNpemUpO3ZhciAkYT1KKEFhKXx8dS5pc1dlYkdMMixQYT13LmNvbnZlcnQob2EuZm9ybWF0KSxmYj13LmNvbnZlcnQob2EudHlwZSksa2E9VyhQYSxmYik7dmEoS2Esb2EsJGEpO3ZhciBIYT1vYS5taXBtYXBzO2lmKG9hLmlzRGVwdGhUZXh0dXJlKXtrYT0KNjQwMjtpZigxMDE1PT09b2EudHlwZSl7aWYoIXUuaXNXZWJHTDIpdGhyb3cgRXJyb3IoIkZsb2F0IERlcHRoIFRleHR1cmUgb25seSBzdXBwb3J0ZWQgaW4gV2ViR0wyLjAiKTtrYT0zNjAxMn1lbHNlIHUuaXNXZWJHTDImJihrYT0zMzE4OSk7MTAyNj09PW9hLmZvcm1hdCYmNjQwMj09PWthJiYxMDEyIT09b2EudHlwZSYmMTAxNCE9PW9hLnR5cGUmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxvYS50eXBlPTEwMTIsZmI9dy5jb252ZXJ0KG9hLnR5cGUpKTsxMDI3PT09b2EuZm9ybWF0JiYoa2E9MzQwNDEsMTAyMCE9PW9hLnR5cGUmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksb2EudHlwZT0xMDIwLGZiPQp3LmNvbnZlcnQob2EudHlwZSkpKTtoLnRleEltYWdlMkQoMzU1MywwLGthLEFhLndpZHRoLEFhLmhlaWdodCwwLFBhLGZiLG51bGwpfWVsc2UgaWYob2EuaXNEYXRhVGV4dHVyZSlpZigwPEhhLmxlbmd0aCYmJGEpe2Zvcih2YXIgTmE9MCxyYj1IYS5sZW5ndGg7TmE8cmI7TmErKylLYT1IYVtOYV0saC50ZXhJbWFnZTJEKDM1NTMsTmEsa2EsS2Eud2lkdGgsS2EuaGVpZ2h0LDAsUGEsZmIsS2EuZGF0YSk7b2EuZ2VuZXJhdGVNaXBtYXBzPSExO2phLl9fbWF4TWlwTGV2ZWw9SGEubGVuZ3RoLTF9ZWxzZSBoLnRleEltYWdlMkQoMzU1MywwLGthLEFhLndpZHRoLEFhLmhlaWdodCwwLFBhLGZiLEFhLmRhdGEpLGphLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKG9hLmlzQ29tcHJlc3NlZFRleHR1cmUpe05hPTA7Zm9yKHJiPUhhLmxlbmd0aDtOYTxyYjtOYSsrKUthPUhhW05hXSwxMDIzIT09b2EuZm9ybWF0JiYxMDIyIT09b2EuZm9ybWF0Py0xPGguZ2V0Q29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKCkuaW5kZXhPZihQYSk/CmguY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxOYSxrYSxLYS53aWR0aCxLYS5oZWlnaHQsMCxLYS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpoLnRleEltYWdlMkQoMzU1MyxOYSxrYSxLYS53aWR0aCxLYS5oZWlnaHQsMCxQYSxmYixLYS5kYXRhKTtqYS5fX21heE1pcExldmVsPUhhLmxlbmd0aC0xfWVsc2UgaWYob2EuaXNEYXRhVGV4dHVyZTJEQXJyYXkpaC50ZXhJbWFnZTNEKDM1ODY2LDAsa2EsQWEud2lkdGgsQWEuaGVpZ2h0LEFhLmRlcHRoLDAsUGEsZmIsQWEuZGF0YSksamEuX19tYXhNaXBMZXZlbD0wO2Vsc2UgaWYob2EuaXNEYXRhVGV4dHVyZTNEKWgudGV4SW1hZ2UzRCgzMjg3OSwwLGthLEFhLndpZHRoLEFhLmhlaWdodCxBYS5kZXB0aCwwLFBhLGZiLEFhLmRhdGEpLGphLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKDA8CkhhLmxlbmd0aCYmJGEpe05hPTA7Zm9yKHJiPUhhLmxlbmd0aDtOYTxyYjtOYSsrKUthPUhhW05hXSxoLnRleEltYWdlMkQoMzU1MyxOYSxrYSxQYSxmYixLYSk7b2EuZ2VuZXJhdGVNaXBtYXBzPSExO2phLl9fbWF4TWlwTGV2ZWw9SGEubGVuZ3RoLTF9ZWxzZSBoLnRleEltYWdlMkQoMzU1MywwLGthLFBhLGZiLEFhKSxqYS5fX21heE1pcExldmVsPTA7UyhvYSwkYSkmJlQoMzU1MyxvYSxBYS53aWR0aCxBYS5oZWlnaHQpO2phLl9fdmVyc2lvbj1vYS52ZXJzaW9uO2lmKG9hLm9uVXBkYXRlKW9hLm9uVXBkYXRlKG9hKX1mdW5jdGlvbiBXYShqYSxvYSxBYSxLYSl7dmFyICRhPXcuY29udmVydChvYS50ZXh0dXJlLmZvcm1hdCksUGE9dy5jb252ZXJ0KG9hLnRleHR1cmUudHlwZSksZmI9VygkYSxQYSk7aC50ZXhJbWFnZTJEKEthLDAsZmIsb2Eud2lkdGgsb2EuaGVpZ2h0LDAsJGEsUGEsbnVsbCk7Yi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsamEpO2IuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsCkFhLEthLG0uZ2V0KG9hLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLDApO2IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIERhKGphLG9hLEFhKXtiLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsamEpO2lmKG9hLmRlcHRoQnVmZmVyJiYhb2Euc3RlbmNpbEJ1ZmZlcilBYT8oQWE9T2Eob2EpLGIucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLEFhLDMzMTg5LG9hLndpZHRoLG9hLmhlaWdodCkpOmIucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzMzE4OSxvYS53aWR0aCxvYS5oZWlnaHQpLGIuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsamEpO2Vsc2UgaWYob2EuZGVwdGhCdWZmZXImJm9hLnN0ZW5jaWxCdWZmZXIpQWE/KEFhPU9hKG9hKSxiLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxBYSwzNTA1NixvYS53aWR0aCxvYS5oZWlnaHQpKTpiLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsMzQwNDEsCm9hLndpZHRoLG9hLmhlaWdodCksYi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzMzMwNiwzNjE2MSxqYSk7ZWxzZXtqYT13LmNvbnZlcnQob2EudGV4dHVyZS5mb3JtYXQpO3ZhciBLYT13LmNvbnZlcnQob2EudGV4dHVyZS50eXBlKTtqYT1XKGphLEthKTtBYT8oQWE9T2Eob2EpLGIucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLEFhLGphLG9hLndpZHRoLG9hLmhlaWdodCkpOmIucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxqYSxvYS53aWR0aCxvYS5oZWlnaHQpfWIuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBJYShqYSxvYSl7aWYob2EmJm9hLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlKXRocm93IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7Yi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsamEpO2lmKCFvYS5kZXB0aFRleHR1cmV8fCFvYS5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsKbS5nZXQob2EuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSYmb2EuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09b2Eud2lkdGgmJm9hLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9PT1vYS5oZWlnaHR8fChvYS5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9b2Eud2lkdGgsb2EuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1vYS5oZWlnaHQsb2EuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKTtyYShvYS5kZXB0aFRleHR1cmUsMCk7amE9bS5nZXQob2EuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZTtpZigxMDI2PT09b2EuZGVwdGhUZXh0dXJlLmZvcm1hdCliLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsamEsMCk7ZWxzZSBpZigxMDI3PT09b2EuZGVwdGhUZXh0dXJlLmZvcm1hdCliLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsamEsMCk7ZWxzZSB0aHJvdyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7Cn1mdW5jdGlvbiBFYShqYSl7dmFyIG9hPW0uZ2V0KGphKSxBYT0hMD09PWphLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlO2lmKGphLmRlcHRoVGV4dHVyZSl7aWYoQWEpdGhyb3cgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7SWEob2EuX193ZWJnbEZyYW1lYnVmZmVyLGphKX1lbHNlIGlmKEFhKWZvcihvYS5fX3dlYmdsRGVwdGhidWZmZXI9W10sQWE9MDs2PkFhO0FhKyspYi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsb2EuX193ZWJnbEZyYW1lYnVmZmVyW0FhXSksb2EuX193ZWJnbERlcHRoYnVmZmVyW0FhXT1iLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLERhKG9hLl9fd2ViZ2xEZXB0aGJ1ZmZlcltBYV0samEpO2Vsc2UgYi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsb2EuX193ZWJnbEZyYW1lYnVmZmVyKSxvYS5fX3dlYmdsRGVwdGhidWZmZXI9Yi5jcmVhdGVSZW5kZXJidWZmZXIoKSxEYShvYS5fX3dlYmdsRGVwdGhidWZmZXIsCmphKTtiLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBPYShqYSl7cmV0dXJuIHUuaXNXZWJHTDImJmphLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD9NYXRoLm1pbih1Lm1heFNhbXBsZXMsamEuc2FtcGxlcyk6MH1mdW5jdGlvbiBoYihqYSl7dmFyIG9hPUEucmVuZGVyLmZyYW1lO3liLmdldChqYSkhPT1vYSYmKHliLnNldChqYSxvYSksamEudXBkYXRlKCkpfXZhciB5Yj1uZXcgV2Vha01hcCxMYSxlYj0idW5kZWZpbmVkIiE9PXR5cGVvZiBPZmZzY3JlZW5DYW52YXMsbmI9MCxOYj0hMSxEYj0hMTt0aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXt2YXIgamE9bmI7amE+PXUubWF4VGV4dHVyZXMmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK2phKyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrdS5tYXhUZXh0dXJlcyk7bmIrPTE7cmV0dXJuIGphfTt0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPQpmdW5jdGlvbigpe25iPTB9O3RoaXMuc2V0VGV4dHVyZTJEPXJhO3RoaXMuc2V0VGV4dHVyZTJEQXJyYXk9ZnVuY3Rpb24oamEsb2Epe3ZhciBBYT1tLmdldChqYSk7MDxqYS52ZXJzaW9uJiZBYS5fX3ZlcnNpb24hPT1qYS52ZXJzaW9uP1ZhKEFhLGphLG9hKTooaC5hY3RpdmVUZXh0dXJlKDMzOTg0K29hKSxoLmJpbmRUZXh0dXJlKDM1ODY2LEFhLl9fd2ViZ2xUZXh0dXJlKSl9O3RoaXMuc2V0VGV4dHVyZTNEPWZ1bmN0aW9uKGphLG9hKXt2YXIgQWE9bS5nZXQoamEpOzA8amEudmVyc2lvbiYmQWEuX192ZXJzaW9uIT09amEudmVyc2lvbj9WYShBYSxqYSxvYSk6KGguYWN0aXZlVGV4dHVyZSgzMzk4NCtvYSksaC5iaW5kVGV4dHVyZSgzMjg3OSxBYS5fX3dlYmdsVGV4dHVyZSkpfTt0aGlzLnNldFRleHR1cmVDdWJlPXdhO3RoaXMuc2V0VGV4dHVyZUN1YmVEeW5hbWljPXBhO3RoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oamEpe3ZhciBvYT1tLmdldChqYSksQWE9bS5nZXQoamEudGV4dHVyZSk7CmphLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGhhKTtBYS5fX3dlYmdsVGV4dHVyZT1iLmNyZWF0ZVRleHR1cmUoKTtBLm1lbW9yeS50ZXh0dXJlcysrO3ZhciBLYT0hMD09PWphLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlLCRhPSEwPT09amEuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0LFBhPUooamEpfHx1LmlzV2ViR0wyO2lmKEthKWZvcihvYS5fX3dlYmdsRnJhbWVidWZmZXI9W10sJGE9MDs2PiRhOyRhKyspb2EuX193ZWJnbEZyYW1lYnVmZmVyWyRhXT1iLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ZWxzZSBpZihvYS5fX3dlYmdsRnJhbWVidWZmZXI9Yi5jcmVhdGVGcmFtZWJ1ZmZlcigpLCRhKWlmKHUuaXNXZWJHTDIpe29hLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1iLmNyZWF0ZUZyYW1lYnVmZmVyKCk7b2EuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPWIuY3JlYXRlUmVuZGVyYnVmZmVyKCk7Yi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG9hLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7CiRhPXcuY29udmVydChqYS50ZXh0dXJlLmZvcm1hdCk7dmFyIGZiPXcuY29udmVydChqYS50ZXh0dXJlLnR5cGUpOyRhPVcoJGEsZmIpO2ZiPU9hKGphKTtiLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxmYiwkYSxqYS53aWR0aCxqYS5oZWlnaHQpO2IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG9hLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcik7Yi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxvYS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2IuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKTtqYS5kZXB0aEJ1ZmZlciYmKG9hLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1iLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLERhKG9hLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcixqYSwhMCkpO2IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7CmlmKEthKXtoLmJpbmRUZXh0dXJlKDM0MDY3LEFhLl9fd2ViZ2xUZXh0dXJlKTt2YSgzNDA2NyxqYS50ZXh0dXJlLFBhKTtmb3IoJGE9MDs2PiRhOyRhKyspV2Eob2EuX193ZWJnbEZyYW1lYnVmZmVyWyRhXSxqYSwzNjA2NCwzNDA2OSskYSk7UyhqYS50ZXh0dXJlLFBhKSYmVCgzNDA2NyxqYS50ZXh0dXJlLGphLndpZHRoLGphLmhlaWdodCk7aC5iaW5kVGV4dHVyZSgzNDA2NyxudWxsKX1lbHNlIGguYmluZFRleHR1cmUoMzU1MyxBYS5fX3dlYmdsVGV4dHVyZSksdmEoMzU1MyxqYS50ZXh0dXJlLFBhKSxXYShvYS5fX3dlYmdsRnJhbWVidWZmZXIsamEsMzYwNjQsMzU1MyksUyhqYS50ZXh0dXJlLFBhKSYmVCgzNTUzLGphLnRleHR1cmUsamEud2lkdGgsamEuaGVpZ2h0KSxoLmJpbmRUZXh0dXJlKDM1NTMsbnVsbCk7amEuZGVwdGhCdWZmZXImJkVhKGphKX07dGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9ZnVuY3Rpb24oamEpe3ZhciBvYT1qYS50ZXh0dXJlLEFhPUooamEpfHwKdS5pc1dlYkdMMjtpZihTKG9hLEFhKSl7QWE9amEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmU/MzQwNjc6MzU1Mzt2YXIgS2E9bS5nZXQob2EpLl9fd2ViZ2xUZXh0dXJlO2guYmluZFRleHR1cmUoQWEsS2EpO1QoQWEsb2EsamEud2lkdGgsamEuaGVpZ2h0KTtoLmJpbmRUZXh0dXJlKEFhLG51bGwpfX07dGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1mdW5jdGlvbihqYSl7aWYoamEuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KWlmKHUuaXNXZWJHTDIpe3ZhciBvYT1tLmdldChqYSk7Yi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsb2EuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKTtiLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxvYS5fX3dlYmdsRnJhbWVidWZmZXIpO29hPWphLndpZHRoO3ZhciBBYT1qYS5oZWlnaHQsS2E9MTYzODQ7amEuZGVwdGhCdWZmZXImJihLYXw9MjU2KTtqYS5zdGVuY2lsQnVmZmVyJiYoS2F8PTEwMjQpO2IuYmxpdEZyYW1lYnVmZmVyKDAsCjAsb2EsQWEsMCwwLG9hLEFhLEthLDk3MjgpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9O3RoaXMuc2FmZVNldFRleHR1cmUyRD1mdW5jdGlvbihqYSxvYSl7amEmJmphLmlzV2ViR0xSZW5kZXJUYXJnZXQmJighMT09PU5iJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksTmI9ITApLGphPWphLnRleHR1cmUpO3JhKGphLG9hKX07dGhpcy5zYWZlU2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oamEsb2Epe2phJiZqYS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSYmKCExPT09RGImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksCkRiPSEwKSxqYT1qYS50ZXh0dXJlKTtqYSYmamEuaXNDdWJlVGV4dHVyZXx8QXJyYXkuaXNBcnJheShqYS5pbWFnZSkmJjY9PT1qYS5pbWFnZS5sZW5ndGg/d2EoamEsb2EpOnBhKGphLG9hKX19ZnVuY3Rpb24gRm4oYixlLGgpe3JldHVybntjb252ZXJ0OmZ1bmN0aW9uKG0pe2lmKDFFMz09PW0pcmV0dXJuIDEwNDk3O2lmKDEwMDE9PT1tKXJldHVybiAzMzA3MTtpZigxMDAyPT09bSlyZXR1cm4gMzM2NDg7aWYoMTAwMz09PW0pcmV0dXJuIDk3Mjg7aWYoMTAwND09PW0pcmV0dXJuIDk5ODQ7aWYoMTAwNT09PW0pcmV0dXJuIDk5ODY7aWYoMTAwNj09PW0pcmV0dXJuIDk3Mjk7aWYoMTAwNz09PW0pcmV0dXJuIDk5ODU7aWYoMTAwOD09PW0pcmV0dXJuIDk5ODc7aWYoMTAwOT09PW0pcmV0dXJuIDUxMjE7aWYoMTAxNz09PW0pcmV0dXJuIDMyODE5O2lmKDEwMTg9PT1tKXJldHVybiAzMjgyMDtpZigxMDE5PT09bSlyZXR1cm4gMzM2MzU7aWYoMTAxMD09PW0pcmV0dXJuIDUxMjA7aWYoMTAxMT09PQptKXJldHVybiA1MTIyO2lmKDEwMTI9PT1tKXJldHVybiA1MTIzO2lmKDEwMTM9PT1tKXJldHVybiA1MTI0O2lmKDEwMTQ9PT1tKXJldHVybiA1MTI1O2lmKDEwMTU9PT1tKXJldHVybiA1MTI2O2lmKDEwMTY9PT1tKXtpZihoLmlzV2ViR0wyKXJldHVybiA1MTMxO3ZhciB1PWUuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7aWYobnVsbCE9PXUpcmV0dXJuIHUuSEFMRl9GTE9BVF9PRVN9aWYoMTAyMT09PW0pcmV0dXJuIDY0MDY7aWYoMTAyMj09PW0pcmV0dXJuIDY0MDc7aWYoMTAyMz09PW0pcmV0dXJuIDY0MDg7aWYoMTAyND09PW0pcmV0dXJuIDY0MDk7aWYoMTAyNT09PW0pcmV0dXJuIDY0MTA7aWYoMTAyNj09PW0pcmV0dXJuIDY0MDI7aWYoMTAyNz09PW0pcmV0dXJuIDM0MDQxO2lmKDEwMjg9PT1tKXJldHVybiA2NDAzO2lmKDEwMD09PW0pcmV0dXJuIDMyNzc0O2lmKDEwMT09PW0pcmV0dXJuIDMyNzc4O2lmKDEwMj09PW0pcmV0dXJuIDMyNzc5O2lmKDIwMD09PW0pcmV0dXJuIDA7CmlmKDIwMT09PW0pcmV0dXJuIDE7aWYoMjAyPT09bSlyZXR1cm4gNzY4O2lmKDIwMz09PW0pcmV0dXJuIDc2OTtpZigyMDQ9PT1tKXJldHVybiA3NzA7aWYoMjA1PT09bSlyZXR1cm4gNzcxO2lmKDIwNj09PW0pcmV0dXJuIDc3MjtpZigyMDc9PT1tKXJldHVybiA3NzM7aWYoMjA4PT09bSlyZXR1cm4gNzc0O2lmKDIwOT09PW0pcmV0dXJuIDc3NTtpZigyMTA9PT1tKXJldHVybiA3NzY7aWYoMzM3NzY9PT1tfHwzMzc3Nz09PW18fDMzNzc4PT09bXx8MzM3Nzk9PT1tKWlmKHU9ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksbnVsbCE9PXUpe2lmKDMzNzc2PT09bSlyZXR1cm4gdS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKDMzNzc3PT09bSlyZXR1cm4gdS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZigzMzc3OD09PW0pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYoMzM3Nzk9PT1tKXJldHVybiB1LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWlmKDM1ODQwPT09Cm18fDM1ODQxPT09bXx8MzU4NDI9PT1tfHwzNTg0Mz09PW0paWYodT1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksbnVsbCE9PXUpe2lmKDM1ODQwPT09bSlyZXR1cm4gdS5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKDM1ODQxPT09bSlyZXR1cm4gdS5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKDM1ODQyPT09bSlyZXR1cm4gdS5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0Mz09PW0pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYoMzYxOTY9PT1tJiYodT1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09dSkpcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDtpZigzNzgwOD09PW18fDM3ODA5PT09bXx8Mzc4MTA9PT1tfHwzNzgxMT09PW18fDM3ODEyPT09bXx8Mzc4MTM9PT1tfHwzNzgxND09PW18fDM3ODE1PT09bXx8Mzc4MTY9PT0KbXx8Mzc4MTc9PT1tfHwzNzgxOD09PW18fDM3ODE5PT09bXx8Mzc4MjA9PT1tfHwzNzgyMT09PW0paWYodT1lLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxudWxsIT09dSlyZXR1cm4gbTtpZigxMDM9PT1tfHwxMDQ9PT1tKXtpZihoLmlzV2ViR0wyKXtpZigxMDM9PT1tKXJldHVybiAzMjc3NTtpZigxMDQ9PT1tKXJldHVybiAzMjc3Nn11PWUuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7aWYobnVsbCE9PXUpe2lmKDEwMz09PW0pcmV0dXJuIHUuTUlOX0VYVDtpZigxMDQ9PT1tKXJldHVybiB1Lk1BWF9FWFR9fWlmKDEwMjA9PT1tKXtpZihoLmlzV2ViR0wyKXJldHVybiAzNDA0Mjt1PWUuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7aWYobnVsbCE9PXUpcmV0dXJuIHUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0x9cmV0dXJuIDB9fX1mdW5jdGlvbiBGZigpe3kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ikdyb3VwIn1mdW5jdGlvbiAkZyhiKXtBYi5jYWxsKHRoaXMpOwp0aGlzLmNhbWVyYXM9Ynx8W119ZnVuY3Rpb24gR24oYixlLGgpe0huLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKTtJbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oaC5tYXRyaXhXb3JsZCk7dmFyIG09SG4uZGlzdGFuY2VUbyhJbiksdT1lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsdz1oLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsQT11WzE0XS8odVsxMF0tMSk7aD11WzE0XS8odVsxMF0rMSk7dmFyIEU9KHVbOV0rMSkvdVs1XSxHPSh1WzldLTEpL3VbNV0sSj0odVs4XS0xKS91WzBdLFE9KHdbOF0rMSkvd1swXTt1PUEqSjt3PUEqUTtRPW0vKC1KK1EpO0o9USotSjtlLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiLnBvc2l0aW9uLGIucXVhdGVybmlvbixiLnNjYWxlKTtiLnRyYW5zbGF0ZVgoSik7Yi50cmFuc2xhdGVaKFEpO2IubWF0cml4V29ybGQuY29tcG9zZShiLnBvc2l0aW9uLGIucXVhdGVybmlvbixiLnNjYWxlKTtiLm1hdHJpeFdvcmxkSW52ZXJzZS5nZXRJbnZlcnNlKGIubWF0cml4V29ybGQpOwplPUErUTtBPWgrUTtiLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKHUtSix3KyhtLUopLEUqaC9BKmUsRypoL0EqZSxlLEEpfWZ1bmN0aW9uIHFrKGIpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PUomJiEwPT09Si5pc1ByZXNlbnRpbmd9ZnVuY3Rpb24gaCgpe2lmKGUoKSl7dmFyIElhPUouZ2V0RXllUGFyYW1ldGVycygibGVmdCIpO0E9MipJYS5yZW5kZXJXaWR0aCppYTtFPUlhLnJlbmRlckhlaWdodCppYTtWYT1iLmdldFBpeGVsUmF0aW8oKTtiLmdldFNpemUoQ2EpO2Iuc2V0RHJhd2luZ0J1ZmZlclNpemUoQSxFLDEpO3dhLnZpZXdwb3J0LnNldCgwLDAsQS8yLEUpO3BhLnZpZXdwb3J0LnNldChBLzIsMCxBLzIsRSk7RGEuc3RhcnQoKTtHLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25zdGFydCJ9KX1lbHNlIEcuZW5hYmxlZCYmYi5zZXREcmF3aW5nQnVmZmVyU2l6ZShDYS53aWR0aCxDYS5oZWlnaHQsVmEpLERhLnN0b3AoKSxHLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9CmZ1bmN0aW9uIG0oSWEpe2Zvcih2YXIgRWE9bmF2aWdhdG9yLmdldEdhbWVwYWRzJiZuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKSxPYT0wLGhiPTAseWI9RWEubGVuZ3RoO09hPHliO09hKyspe3ZhciBMYT1FYVtPYV07aWYoTGEmJigiRGF5ZHJlYW0gQ29udHJvbGxlciI9PT1MYS5pZHx8IkdlYXIgVlIgQ29udHJvbGxlciI9PT1MYS5pZHx8Ik9jdWx1cyBHbyBDb250cm9sbGVyIj09PUxhLmlkfHwiT3BlblZSIEdhbWVwYWQiPT09TGEuaWR8fExhLmlkLnN0YXJ0c1dpdGgoIk9jdWx1cyBUb3VjaCIpfHxMYS5pZC5zdGFydHNXaXRoKCJIVEMgVml2ZSBGb2N1cyIpfHxMYS5pZC5zdGFydHNXaXRoKCJTcGF0aWFsIENvbnRyb2xsZXIiKSkpe2lmKGhiPT09SWEpcmV0dXJuIExhO2hiKyt9fX1mdW5jdGlvbiB1KCl7Zm9yKHZhciBJYT0wO0lhPFQubGVuZ3RoO0lhKyspe3ZhciBFYT1UW0lhXSxPYT1tKElhKTtpZih2b2lkIDAhPT1PYSYmdm9pZCAwIT09T2EucG9zZSl7aWYobnVsbD09PU9hLnBvc2UpYnJlYWs7CnZhciBoYj1PYS5wb3NlOyExPT09aGIuaGFzUG9zaXRpb24mJkVhLnBvc2l0aW9uLnNldCguMiwtLjYsLS4wNSk7bnVsbCE9PWhiLnBvc2l0aW9uJiZFYS5wb3NpdGlvbi5mcm9tQXJyYXkoaGIucG9zaXRpb24pO251bGwhPT1oYi5vcmllbnRhdGlvbiYmRWEucXVhdGVybmlvbi5mcm9tQXJyYXkoaGIub3JpZW50YXRpb24pO0VhLm1hdHJpeC5jb21wb3NlKEVhLnBvc2l0aW9uLEVhLnF1YXRlcm5pb24sRWEuc2NhbGUpO0VhLm1hdHJpeC5wcmVtdWx0aXBseShXKTtFYS5tYXRyaXguZGVjb21wb3NlKEVhLnBvc2l0aW9uLEVhLnF1YXRlcm5pb24sRWEuc2NhbGUpO0VhLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITA7RWEudmlzaWJsZT0hMDtoYj0iRGF5ZHJlYW0gQ29udHJvbGxlciI9PT1PYS5pZD8wOjE7dm9pZCAwPT09V2FbSWFdJiYoV2FbSWFdPSExKTtXYVtJYV0hPT1PYS5idXR0b25zW2hiXS5wcmVzc2VkJiYoV2FbSWFdPU9hLmJ1dHRvbnNbaGJdLnByZXNzZWQsITA9PT1XYVtJYV0/CkVhLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlbGVjdHN0YXJ0In0pOihFYS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZWxlY3RlbmQifSksRWEuZGlzcGF0Y2hFdmVudCh7dHlwZToic2VsZWN0In0pKSl9ZWxzZSBFYS52aXNpYmxlPSExfX1mdW5jdGlvbiB3KElhLEVhKXtudWxsIT09RWEmJjQ9PT1FYS5sZW5ndGgmJklhLnNldChFYVswXSpBLEVhWzFdKkUsRWFbMl0qQSxFYVszXSpFKX12YXIgQSxFLEc9dGhpcyxKPW51bGwsUT1udWxsLFM9bnVsbCxUPVtdLFc9bmV3IHIsWD1uZXcgcixpYT0xLGhhPSJsb2NhbC1mbG9vciI7InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93JiYiVlJGcmFtZURhdGEiaW4gd2luZG93JiYoUT1uZXcgd2luZG93LlZSRnJhbWVEYXRhLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIixoLCExKSk7dmFyIHNhPW5ldyByLHFhPW5ldyBmLHJhPW5ldyBnLHdhPW5ldyBBYjt3YS52aWV3cG9ydD1uZXcgbjt3YS5sYXllcnMuZW5hYmxlKDEpOwp2YXIgcGE9bmV3IEFiO3BhLnZpZXdwb3J0PW5ldyBuO3BhLmxheWVycy5lbmFibGUoMik7dmFyIHZhPW5ldyAkZyhbd2EscGFdKTt2YS5sYXllcnMuZW5hYmxlKDEpO3ZhLmxheWVycy5lbmFibGUoMik7dmFyIENhPW5ldyBkLFZhLFdhPVtdO3RoaXMuZW5hYmxlZD0hMTt0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24oSWEpe3ZhciBFYT1UW0lhXTt2b2lkIDA9PT1FYSYmKEVhPW5ldyBGZixFYS5tYXRyaXhBdXRvVXBkYXRlPSExLEVhLnZpc2libGU9ITEsVFtJYV09RWEpO3JldHVybiBFYX07dGhpcy5nZXREZXZpY2U9ZnVuY3Rpb24oKXtyZXR1cm4gSn07dGhpcy5zZXREZXZpY2U9ZnVuY3Rpb24oSWEpe3ZvaWQgMCE9PUlhJiYoSj1JYSk7RGEuc2V0Q29udGV4dChJYSl9O3RoaXMuc2V0RnJhbWVidWZmZXJTY2FsZUZhY3Rvcj1mdW5jdGlvbihJYSl7aWE9SWF9O3RoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKElhKXtoYT1JYX07dGhpcy5zZXRQb3NlVGFyZ2V0PWZ1bmN0aW9uKElhKXt2b2lkIDAhPT0KSWEmJihTPUlhKX07dGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oSWEpe3ZhciBFYT0ibG9jYWwtZmxvb3IiPT09aGE/MS42OjA7aWYoITE9PT1lKCkpcmV0dXJuIElhLnBvc2l0aW9uLnNldCgwLEVhLDApLElhLnJvdGF0aW9uLnNldCgwLDAsMCksSWE7Si5kZXB0aE5lYXI9SWEubmVhcjtKLmRlcHRoRmFyPUlhLmZhcjtKLmdldEZyYW1lRGF0YShRKTtpZigibG9jYWwtZmxvb3IiPT09aGEpe3ZhciBPYT1KLnN0YWdlUGFyYW1ldGVycztPYT9XLmZyb21BcnJheShPYS5zaXR0aW5nVG9TdGFuZGluZ1RyYW5zZm9ybSk6Vy5tYWtlVHJhbnNsYXRpb24oMCxFYSwwKX1FYT1RLnBvc2U7T2E9bnVsbCE9PVM/UzpJYTtPYS5tYXRyaXguY29weShXKTtPYS5tYXRyaXguZGVjb21wb3NlKE9hLnBvc2l0aW9uLE9hLnF1YXRlcm5pb24sT2Euc2NhbGUpO251bGwhPT1FYS5vcmllbnRhdGlvbiYmKHFhLmZyb21BcnJheShFYS5vcmllbnRhdGlvbiksT2EucXVhdGVybmlvbi5tdWx0aXBseShxYSkpO251bGwhPT0KRWEucG9zaXRpb24mJihxYS5zZXRGcm9tUm90YXRpb25NYXRyaXgoVykscmEuZnJvbUFycmF5KEVhLnBvc2l0aW9uKSxyYS5hcHBseVF1YXRlcm5pb24ocWEpLE9hLnBvc2l0aW9uLmFkZChyYSkpO09hLnVwZGF0ZU1hdHJpeFdvcmxkKCk7d2EubmVhcj1JYS5uZWFyO3BhLm5lYXI9SWEubmVhcjt3YS5mYXI9SWEuZmFyO3BhLmZhcj1JYS5mYXI7d2EubWF0cml4V29ybGRJbnZlcnNlLmZyb21BcnJheShRLmxlZnRWaWV3TWF0cml4KTtwYS5tYXRyaXhXb3JsZEludmVyc2UuZnJvbUFycmF5KFEucmlnaHRWaWV3TWF0cml4KTtYLmdldEludmVyc2UoVyk7ImxvY2FsLWZsb29yIj09PWhhJiYod2EubWF0cml4V29ybGRJbnZlcnNlLm11bHRpcGx5KFgpLHBhLm1hdHJpeFdvcmxkSW52ZXJzZS5tdWx0aXBseShYKSk7SWE9T2EucGFyZW50O251bGwhPT1JYSYmKHNhLmdldEludmVyc2UoSWEubWF0cml4V29ybGQpLHdhLm1hdHJpeFdvcmxkSW52ZXJzZS5tdWx0aXBseShzYSkscGEubWF0cml4V29ybGRJbnZlcnNlLm11bHRpcGx5KHNhKSk7CndhLm1hdHJpeFdvcmxkLmdldEludmVyc2Uod2EubWF0cml4V29ybGRJbnZlcnNlKTtwYS5tYXRyaXhXb3JsZC5nZXRJbnZlcnNlKHBhLm1hdHJpeFdvcmxkSW52ZXJzZSk7d2EucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoUS5sZWZ0UHJvamVjdGlvbk1hdHJpeCk7cGEucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoUS5yaWdodFByb2plY3Rpb25NYXRyaXgpO0duKHZhLHdhLHBhKTtJYT1KLmdldExheWVycygpO0lhLmxlbmd0aCYmKElhPUlhWzBdLHcod2Eudmlld3BvcnQsSWEubGVmdEJvdW5kcyksdyhwYS52aWV3cG9ydCxJYS5yaWdodEJvdW5kcykpO3UoKTtyZXR1cm4gdmF9O3RoaXMuZ2V0U3RhbmRpbmdNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gV307dGhpcy5pc1ByZXNlbnRpbmc9ZTt2YXIgRGE9bmV3IHhjO3RoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihJYSl7RGEuc2V0QW5pbWF0aW9uTG9vcChJYSk7ZSgpJiZEYS5zdGFydCgpfTt0aGlzLnN1Ym1pdEZyYW1lPQpmdW5jdGlvbigpe2UoKSYmSi5zdWJtaXRGcmFtZSgpfTt0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIixoKX07dGhpcy5zZXRGcmFtZU9mUmVmZXJlbmNlVHlwZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViVlJNYW5hZ2VyOiBzZXRGcmFtZU9mUmVmZXJlbmNlVHlwZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIil9fWZ1bmN0aW9uIEpuKGIsZSl7ZnVuY3Rpb24gaCgpe3JldHVybiBudWxsIT09RyYmbnVsbCE9PUp9ZnVuY3Rpb24gbShyYSl7Zm9yKHZhciB3YT0wO3dhPFQubGVuZ3RoO3dhKyspV1t3YV09PT1yYS5pbnB1dFNvdXJjZSYmVFt3YV0uZGlzcGF0Y2hFdmVudCh7dHlwZTpyYS50eXBlfSl9ZnVuY3Rpb24gdSgpe2Iuc2V0RnJhbWVidWZmZXIobnVsbCk7Yi5zZXRSZW5kZXJUYXJnZXQoYi5nZXRSZW5kZXJUYXJnZXQoKSk7CnFhLnN0b3AoKTtFLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9ZnVuY3Rpb24gdyhyYSl7Sj1yYTtxYS5zZXRDb250ZXh0KEcpO3FhLnN0YXJ0KCk7RS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9ZnVuY3Rpb24gQShyYSx3YSl7bnVsbD09PXdhP3JhLm1hdHJpeFdvcmxkLmNvcHkocmEubWF0cml4KTpyYS5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHdhLm1hdHJpeFdvcmxkLHJhLm1hdHJpeCk7cmEubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UocmEubWF0cml4V29ybGQpfXZhciBFPXRoaXMsRz1udWxsLEo9bnVsbCxRPSJsb2NhbC1mbG9vciIsUz1udWxsLFQ9W10sVz1bXSxYPW5ldyBBYjtYLmxheWVycy5lbmFibGUoMSk7WC52aWV3cG9ydD1uZXcgbjt2YXIgaWE9bmV3IEFiO2lhLmxheWVycy5lbmFibGUoMik7aWEudmlld3BvcnQ9bmV3IG47dmFyIGhhPW5ldyAkZyhbWCxpYV0pO2hhLmxheWVycy5lbmFibGUoMSk7aGEubGF5ZXJzLmVuYWJsZSgyKTsKdGhpcy5lbmFibGVkPSExO3RoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihyYSl7dmFyIHdhPVRbcmFdO3ZvaWQgMD09PXdhJiYod2E9bmV3IEZmLHdhLm1hdHJpeEF1dG9VcGRhdGU9ITEsd2EudmlzaWJsZT0hMSxUW3JhXT13YSk7cmV0dXJuIHdhfTt0aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXt9O3RoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKHJhKXtRPXJhfTt0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gR307dGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKHJhKXtHPXJhO251bGwhPT1HJiYoRy5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLG0pLEcuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLG0pLEcuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZW5kIixtKSxHLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsdSksRy51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOm5ldyBYUldlYkdMTGF5ZXIoRyxlKX0pLEcucmVxdWVzdFJlZmVyZW5jZVNwYWNlKFEpLnRoZW4odyksClc9Ry5pbnB1dFNvdXJjZXMsRy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLGZ1bmN0aW9uKCl7Vz1HLmlucHV0U291cmNlcztjb25zb2xlLmxvZyhXKTtmb3IodmFyIHdhPTA7d2E8VC5sZW5ndGg7d2ErKylUW3dhXS51c2VyRGF0YS5pbnB1dFNvdXJjZT1XW3dhXX0pKX07dGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24ocmEpe2lmKGgoKSl7dmFyIHdhPXJhLnBhcmVudCxwYT1oYS5jYW1lcmFzO0EoaGEsd2EpO2Zvcih2YXIgdmE9MDt2YTxwYS5sZW5ndGg7dmErKylBKHBhW3ZhXSx3YSk7cmEubWF0cml4V29ybGQuY29weShoYS5tYXRyaXhXb3JsZCk7cmE9cmEuY2hpbGRyZW47dmE9MDtmb3Iod2E9cmEubGVuZ3RoO3ZhPHdhO3ZhKyspcmFbdmFdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtHbihoYSxYLGlhKTtyZXR1cm4gaGF9cmV0dXJuIHJhfTt0aGlzLmlzUHJlc2VudGluZz1oO3ZhciBzYT1udWxsLHFhPW5ldyB4YztxYS5zZXRBbmltYXRpb25Mb29wKGZ1bmN0aW9uKHJhLAp3YSl7Uz13YS5nZXRWaWV3ZXJQb3NlKEopO2lmKG51bGwhPT1TKXt2YXIgcGE9Uy52aWV3cyx2YT1HLnJlbmRlclN0YXRlLmJhc2VMYXllcjtiLnNldEZyYW1lYnVmZmVyKHZhLmZyYW1lYnVmZmVyKTtmb3IodmFyIENhPTA7Q2E8cGEubGVuZ3RoO0NhKyspe3ZhciBWYT1wYVtDYV0sV2E9dmEuZ2V0Vmlld3BvcnQoVmEpLERhPWhhLmNhbWVyYXNbQ2FdO0RhLm1hdHJpeC5mcm9tQXJyYXkoVmEudHJhbnNmb3JtLmludmVyc2UubWF0cml4KS5nZXRJbnZlcnNlKERhLm1hdHJpeCk7RGEucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoVmEucHJvamVjdGlvbk1hdHJpeCk7RGEudmlld3BvcnQuc2V0KFdhLngsV2EueSxXYS53aWR0aCxXYS5oZWlnaHQpOzA9PT1DYSYmaGEubWF0cml4LmNvcHkoRGEubWF0cml4KX19Zm9yKENhPTA7Q2E8VC5sZW5ndGg7Q2ErKyl7cGE9VFtDYV07aWYodmE9V1tDYV0paWYodmE9d2EuZ2V0UG9zZSh2YS50YXJnZXRSYXlTcGFjZSxKKSxudWxsIT09dmEpe3BhLm1hdHJpeC5mcm9tQXJyYXkodmEudHJhbnNmb3JtLm1hdHJpeCk7CnBhLm1hdHJpeC5kZWNvbXBvc2UocGEucG9zaXRpb24scGEucm90YXRpb24scGEuc2NhbGUpO3BhLnZpc2libGU9ITA7Y29udGludWV9cGEudmlzaWJsZT0hMX1zYSYmc2EocmEpfSk7dGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKHJhKXtzYT1yYX07dGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7fTt0aGlzLmdldFN0YW5kaW5nTWF0cml4PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IGdldFN0YW5kaW5nTWF0cml4KCkgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKTtyZXR1cm4gbmV3IHJ9O3RoaXMuZ2V0RGV2aWNlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IGdldERldmljZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIil9O3RoaXMuc2V0RGV2aWNlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IHNldERldmljZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIil9O3RoaXMuc2V0RnJhbWVPZlJlZmVyZW5jZVR5cGU9CmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IHNldEZyYW1lT2ZSZWZlcmVuY2VUeXBlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4iKX07dGhpcy5zdWJtaXRGcmFtZT1mdW5jdGlvbigpe319ZnVuY3Rpb24gcmsoYil7dmFyIGU7ZnVuY3Rpb24gaCgpe3JldHVybiBudWxsPT09bWI/eWM6MX1mdW5jdGlvbiBtKCl7WWI9bmV3IExkKFRhKTt6Yz1uZXcgJGIoVGEsWWIsYik7emMuaXNXZWJHTDJ8fChZYi5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxZYi5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0IiksWWIuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksWWIuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLFliLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksWWIuZ2V0KCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksWWIuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpO1liLmdldCgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7CnZkPW5ldyBGbihUYSxZYix6Yyk7RWI9bmV3IFJyKFRhLFliLHZkLHpjKTtFYi5zY2lzc29yKGljLmNvcHkoR2YpLm11bHRpcGx5U2NhbGFyKHljKS5mbG9vcigpKTtFYi52aWV3cG9ydChXYi5jb3B5KEhmKS5tdWx0aXBseVNjYWxhcih5YykuZmxvb3IoKSk7b2U9bmV3IE9xKFRhKTtBYz1uZXcgSXI7d2Q9bmV3IFNyKFRhLFliLEViLEFjLHpjLHZkLG9lKTtzaT1uZXcgTWUoVGEpO3NrPW5ldyBrZShUYSxzaSxvZSk7SWY9bmV3IFJxKHNrLG9lKTtLbj1uZXcgUXEoVGEpO05lPW5ldyBIcihrYSxZYix6Yyk7dGk9bmV3IExyO0pmPW5ldyBRcjtwZT1uZXcgamUoa2EsRWIsSWYsb2EpO0xuPW5ldyB1YShUYSxZYixvZSx6Yyk7TW49bmV3IHFpKFRhLFliLG9lLHpjKTtvZS5wcm9ncmFtcz1OZS5wcm9ncmFtcztrYS5jYXBhYmlsaXRpZXM9emM7a2EuZXh0ZW5zaW9ucz1ZYjtrYS5wcm9wZXJ0aWVzPUFjO2thLnJlbmRlckxpc3RzPXRpO2thLnN0YXRlPUViO2thLmluZm89b2V9ZnVuY3Rpb24gdShWKXtWLnByZXZlbnREZWZhdWx0KCk7CmNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIik7SGE9ITB9ZnVuY3Rpb24gdygpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpO0hhPSExO20oKX1mdW5jdGlvbiBBKFYpe1Y9Vi50YXJnZXQ7Vi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixBKTtFKFYpfWZ1bmN0aW9uIEUoVil7RyhWKTtBYy5yZW1vdmUoVil9ZnVuY3Rpb24gRyhWKXt2YXIgZWE9QWMuZ2V0KFYpLnByb2dyYW07Vi5wcm9ncmFtPXZvaWQgMDt2b2lkIDAhPT1lYSYmTmUucmVsZWFzZVByb2dyYW0oZWEpfWZ1bmN0aW9uIEooVixlYSl7Vi5yZW5kZXIoZnVuY3Rpb24obmEpe2thLnJlbmRlckJ1ZmZlckltbWVkaWF0ZShuYSxlYSl9KX1mdW5jdGlvbiBRKFYsZWEsbmEpe2lmKG5hJiZuYS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiYhemMuaXNXZWJHTDImJm51bGw9PT1ZYi5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldHVwVmVydGV4QXR0cmlidXRlczogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7CmVsc2V7RWIuaW5pdEF0dHJpYnV0ZXMoKTt2YXIgSmE9bmEuYXR0cmlidXRlcztlYT1lYS5nZXRBdHRyaWJ1dGVzKCk7Vj1WLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKHZhciBRYSBpbiBlYSl7dmFyIGRiPWVhW1FhXTtpZigwPD1kYil7dmFyIFJhPUphW1FhXTtpZih2b2lkIDAhPT1SYSl7dmFyIGtiPVJhLm5vcm1hbGl6ZWQsSmI9UmEuaXRlbVNpemUsc2I9c2kuZ2V0KFJhKTtpZih2b2lkIDAhPT1zYil7dmFyIGJiPXNiLmJ1ZmZlcix4ZD1zYi50eXBlO3NiPXNiLmJ5dGVzUGVyRWxlbWVudDtpZihSYS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXt2YXIgJGM9UmEuZGF0YSxLZj0kYy5zdHJpZGU7UmE9UmEub2Zmc2V0OyRjJiYkYy5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPyhFYi5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKGRiLCRjLm1lc2hQZXJBdHRyaWJ1dGUpLHZvaWQgMD09PW5hLm1heEluc3RhbmNlZENvdW50JiYobmEubWF4SW5zdGFuY2VkQ291bnQ9CiRjLm1lc2hQZXJBdHRyaWJ1dGUqJGMuY291bnQpKTpFYi5lbmFibGVBdHRyaWJ1dGUoZGIpO1RhLmJpbmRCdWZmZXIoMzQ5NjIsYmIpO1RhLnZlcnRleEF0dHJpYlBvaW50ZXIoZGIsSmIseGQsa2IsS2Yqc2IsUmEqc2IpfWVsc2UgUmEuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU/KEViLmVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoZGIsUmEubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09bmEubWF4SW5zdGFuY2VkQ291bnQmJihuYS5tYXhJbnN0YW5jZWRDb3VudD1SYS5tZXNoUGVyQXR0cmlidXRlKlJhLmNvdW50KSk6RWIuZW5hYmxlQXR0cmlidXRlKGRiKSxUYS5iaW5kQnVmZmVyKDM0OTYyLGJiKSxUYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGRiLEpiLHhkLGtiLDAsMCl9fWVsc2UgaWYodm9pZCAwIT09ViYmKGtiPVZbUWFdLHZvaWQgMCE9PWtiKSlzd2l0Y2goa2IubGVuZ3RoKXtjYXNlIDI6VGEudmVydGV4QXR0cmliMmZ2KGRiLGtiKTticmVhaztjYXNlIDM6VGEudmVydGV4QXR0cmliM2Z2KGRiLAprYik7YnJlYWs7Y2FzZSA0OlRhLnZlcnRleEF0dHJpYjRmdihkYixrYik7YnJlYWs7ZGVmYXVsdDpUYS52ZXJ0ZXhBdHRyaWIxZnYoZGIsa2IpfX19RWIuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKX19ZnVuY3Rpb24gUyhWLGVhLG5hLEphKXtpZighMSE9PVYudmlzaWJsZSl7aWYoVi5sYXllcnMudGVzdChlYS5sYXllcnMpKWlmKFYuaXNHcm91cCluYT1WLnJlbmRlck9yZGVyO2Vsc2UgaWYoVi5pc0xPRCkhMD09PVYuYXV0b1VwZGF0ZSYmVi51cGRhdGUoZWEpO2Vsc2UgaWYoVi5pc0xpZ2h0KWZiLnB1c2hMaWdodChWKSxWLmNhc3RTaGFkb3cmJmZiLnB1c2hTaGFkb3coVik7ZWxzZSBpZihWLmlzU3ByaXRlKXtpZighVi5mcnVzdHVtQ3VsbGVkfHx0ay5pbnRlcnNlY3RzU3ByaXRlKFYpKXtKYSYmcWUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFYubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChhaCk7dmFyIFFhPUlmLnVwZGF0ZShWKSxkYj1WLm1hdGVyaWFsO2RiLnZpc2libGUmJlBhLnB1c2goViwKUWEsZGIsbmEscWUueixudWxsKX19ZWxzZSBpZihWLmlzSW1tZWRpYXRlUmVuZGVyT2JqZWN0KUphJiZxZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oVi5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KGFoKSxQYS5wdXNoKFYsbnVsbCxWLm1hdGVyaWFsLG5hLHFlLnosbnVsbCk7ZWxzZSBpZihWLmlzTWVzaHx8Vi5pc0xpbmV8fFYuaXNQb2ludHMpaWYoVi5pc1NraW5uZWRNZXNoJiZWLnNrZWxldG9uLnVwZGF0ZSgpLCFWLmZydXN0dW1DdWxsZWR8fHRrLmludGVyc2VjdHNPYmplY3QoVikpaWYoSmEmJnFlLnNldEZyb21NYXRyaXhQb3NpdGlvbihWLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoYWgpLFFhPUlmLnVwZGF0ZShWKSxkYj1WLm1hdGVyaWFsLEFycmF5LmlzQXJyYXkoZGIpKWZvcih2YXIgUmE9UWEuZ3JvdXBzLGtiPTAsSmI9UmEubGVuZ3RoO2tiPEpiO2tiKyspe3ZhciBzYj1SYVtrYl0sYmI9ZGJbc2IubWF0ZXJpYWxJbmRleF07YmImJmJiLnZpc2libGUmJlBhLnB1c2goViwKUWEsYmIsbmEscWUueixzYil9ZWxzZSBkYi52aXNpYmxlJiZQYS5wdXNoKFYsUWEsZGIsbmEscWUueixudWxsKTtWPVYuY2hpbGRyZW47a2I9MDtmb3IoSmI9Vi5sZW5ndGg7a2I8SmI7a2IrKylTKFZba2JdLGVhLG5hLEphKX19ZnVuY3Rpb24gVChWLGVhLG5hLEphKXtmb3IodmFyIFFhPTAsZGI9Vi5sZW5ndGg7UWE8ZGI7UWErKyl7dmFyIFJhPVZbUWFdLGtiPVJhLm9iamVjdCxKYj1SYS5nZW9tZXRyeSxzYj12b2lkIDA9PT1KYT9SYS5tYXRlcmlhbDpKYTtSYT1SYS5ncm91cDtpZihuYS5pc0FycmF5Q2FtZXJhKXt4Yj1uYTtmb3IodmFyIGJiPW5hLmNhbWVyYXMseGQ9MCwkYz1iYi5sZW5ndGg7eGQ8JGM7eGQrKyl7dmFyIEtmPWJiW3hkXTtrYi5sYXllcnMudGVzdChLZi5sYXllcnMpJiYoRWIudmlld3BvcnQoV2IuY29weShLZi52aWV3cG9ydCkpLGZiLnNldHVwTGlnaHRzKEtmKSxXKGtiLGVhLEtmLEpiLHNiLFJhKSl9fWVsc2UgeGI9bnVsbCxXKGtiLGVhLG5hLEpiLHNiLFJhKX19CmZ1bmN0aW9uIFcoVixlYSxuYSxKYSxRYSxkYil7Vi5vbkJlZm9yZVJlbmRlcihrYSxlYSxuYSxKYSxRYSxkYik7ZmI9SmYuZ2V0KGVhLHhifHxuYSk7Vi5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhuYS5tYXRyaXhXb3JsZEludmVyc2UsVi5tYXRyaXhXb3JsZCk7Vi5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KFYubW9kZWxWaWV3TWF0cml4KTtWLmlzSW1tZWRpYXRlUmVuZGVyT2JqZWN0PyhFYi5zZXRNYXRlcmlhbChRYSksSmE9aWEobmEsZWEuZm9nLFFhLFYpLGpiPWU9bnVsbCxxYj0hMSxKKFYsSmEpKTprYS5yZW5kZXJCdWZmZXJEaXJlY3QobmEsZWEuZm9nLEphLFFhLFYsZGIpO2ZiPUpmLmdldChlYSx4Ynx8bmEpfWZ1bmN0aW9uIFgoVixlYSxuYSl7dmFyIEphPUFjLmdldChWKSxRYT1mYi5zdGF0ZS5saWdodHMsZGI9UWEuc3RhdGUudmVyc2lvbjtuYT1OZS5nZXRQYXJhbWV0ZXJzKFYsUWEuc3RhdGUsZmIuc3RhdGUuc2hhZG93c0FycmF5LGVhLGFkLm51bVBsYW5lcywKYWQubnVtSW50ZXJzZWN0aW9uLG5hKTt2YXIgUmE9TmUuZ2V0UHJvZ3JhbUNvZGUoVixuYSksa2I9SmEucHJvZ3JhbSxKYj0hMDtpZih2b2lkIDA9PT1rYilWLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEEpO2Vsc2UgaWYoa2IuY29kZSE9PVJhKUcoVik7ZWxzZXtpZihKYS5saWdodHNTdGF0ZVZlcnNpb24hPT1kYilKYS5saWdodHNTdGF0ZVZlcnNpb249ZGI7ZWxzZSBpZih2b2lkIDAhPT1uYS5zaGFkZXJJRClyZXR1cm47SmI9ITF9SmImJihuYS5zaGFkZXJJRD8oUmE9dWRbbmEuc2hhZGVySURdLEphLnNoYWRlcj17bmFtZTpWLnR5cGUsdW5pZm9ybXM6emIoUmEudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpSYS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6UmEuZnJhZ21lbnRTaGFkZXJ9KTpKYS5zaGFkZXI9e25hbWU6Vi50eXBlLHVuaWZvcm1zOlYudW5pZm9ybXMsdmVydGV4U2hhZGVyOlYudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlYuZnJhZ21lbnRTaGFkZXJ9LApSYT1OZS5nZXRQcm9ncmFtQ29kZShWLG5hKSxrYj1OZS5hY3F1aXJlUHJvZ3JhbShWLEphLnNoYWRlcixuYSxSYSksSmEucHJvZ3JhbT1rYixWLnByb2dyYW09a2IpO25hPWtiLmdldEF0dHJpYnV0ZXMoKTtpZihWLm1vcnBoVGFyZ2V0cylmb3IoUmE9Vi5udW1TdXBwb3J0ZWRNb3JwaFRhcmdldHM9MDtSYTxrYS5tYXhNb3JwaFRhcmdldHM7UmErKykwPD1uYVsibW9ycGhUYXJnZXQiK1JhXSYmVi5udW1TdXBwb3J0ZWRNb3JwaFRhcmdldHMrKztpZihWLm1vcnBoTm9ybWFscylmb3IoUmE9Vi5udW1TdXBwb3J0ZWRNb3JwaE5vcm1hbHM9MDtSYTxrYS5tYXhNb3JwaE5vcm1hbHM7UmErKykwPD1uYVsibW9ycGhOb3JtYWwiK1JhXSYmVi5udW1TdXBwb3J0ZWRNb3JwaE5vcm1hbHMrKztuYT1KYS5zaGFkZXIudW5pZm9ybXM7aWYoIVYuaXNTaGFkZXJNYXRlcmlhbCYmIVYuaXNSYXdTaGFkZXJNYXRlcmlhbHx8ITA9PT1WLmNsaXBwaW5nKUphLm51bUNsaXBwaW5nUGxhbmVzPWFkLm51bVBsYW5lcywKSmEubnVtSW50ZXJzZWN0aW9uPWFkLm51bUludGVyc2VjdGlvbixuYS5jbGlwcGluZ1BsYW5lcz1hZC51bmlmb3JtO0phLmZvZz1lYTtKYS5saWdodHNTdGF0ZVZlcnNpb249ZGI7Vi5saWdodHMmJihuYS5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1RYS5zdGF0ZS5hbWJpZW50LG5hLmxpZ2h0UHJvYmUudmFsdWU9UWEuc3RhdGUucHJvYmUsbmEuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9UWEuc3RhdGUuZGlyZWN0aW9uYWwsbmEuc3BvdExpZ2h0cy52YWx1ZT1RYS5zdGF0ZS5zcG90LG5hLnJlY3RBcmVhTGlnaHRzLnZhbHVlPVFhLnN0YXRlLnJlY3RBcmVhLG5hLnBvaW50TGlnaHRzLnZhbHVlPVFhLnN0YXRlLnBvaW50LG5hLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9UWEuc3RhdGUuaGVtaSxuYS5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1RYS5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxuYS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1RYS5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCwKbmEuc3BvdFNoYWRvd01hcC52YWx1ZT1RYS5zdGF0ZS5zcG90U2hhZG93TWFwLG5hLnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9UWEuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxuYS5wb2ludFNoYWRvd01hcC52YWx1ZT1RYS5zdGF0ZS5wb2ludFNoYWRvd01hcCxuYS5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1RYS5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7Vj1KYS5wcm9ncmFtLmdldFVuaWZvcm1zKCk7Vj1sZS5zZXFXaXRoVmFsdWUoVi5zZXEsbmEpO0phLnVuaWZvcm1zTGlzdD1WfWZ1bmN0aW9uIGlhKFYsZWEsbmEsSmEpe3dkLnJlc2V0VGV4dHVyZVVuaXRzKCk7dmFyIFFhPUFjLmdldChuYSksZGI9ZmIuc3RhdGUubGlnaHRzO3VpJiYodWt8fFYhPT10YikmJmFkLnNldFN0YXRlKG5hLmNsaXBwaW5nUGxhbmVzLG5hLmNsaXBJbnRlcnNlY3Rpb24sbmEuY2xpcFNoYWRvd3MsVixRYSxWPT09dGImJm5hLmlkPT09U2EpOyExPT09bmEubmVlZHNVcGRhdGUmJih2b2lkIDA9PT1RYS5wcm9ncmFtPwpuYS5uZWVkc1VwZGF0ZT0hMDpuYS5mb2cmJlFhLmZvZyE9PWVhP25hLm5lZWRzVXBkYXRlPSEwOm5hLmxpZ2h0cyYmUWEubGlnaHRzU3RhdGVWZXJzaW9uIT09ZGIuc3RhdGUudmVyc2lvbj9uYS5uZWVkc1VwZGF0ZT0hMDp2b2lkIDA9PT1RYS5udW1DbGlwcGluZ1BsYW5lc3x8UWEubnVtQ2xpcHBpbmdQbGFuZXM9PT1hZC5udW1QbGFuZXMmJlFhLm51bUludGVyc2VjdGlvbj09PWFkLm51bUludGVyc2VjdGlvbnx8KG5hLm5lZWRzVXBkYXRlPSEwKSk7bmEubmVlZHNVcGRhdGUmJihYKG5hLGVhLEphKSxuYS5uZWVkc1VwZGF0ZT0hMSk7dmFyIFJhPSExLGtiPWRiPSExLEpiPVFhLnByb2dyYW0sc2I9SmIuZ2V0VW5pZm9ybXMoKSxiYj1RYS5zaGFkZXIudW5pZm9ybXM7RWIudXNlUHJvZ3JhbShKYi5wcm9ncmFtKSYmKGtiPWRiPVJhPSEwKTtuYS5pZCE9PVNhJiYoU2E9bmEuaWQsZGI9ITApO2lmKFJhfHx0YiE9PVYpe3NiLnNldFZhbHVlKFRhLCJwcm9qZWN0aW9uTWF0cml4IixWLnByb2plY3Rpb25NYXRyaXgpOwp6Yy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzYi5zZXRWYWx1ZShUYSwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coVi5mYXIrMSkvTWF0aC5MTjIpKTt0YiE9PVYmJih0Yj1WLGtiPWRiPSEwKTtpZihuYS5pc1NoYWRlck1hdGVyaWFsfHxuYS5pc01lc2hQaG9uZ01hdGVyaWFsfHxuYS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxuYS5lbnZNYXApUmE9c2IubWFwLmNhbWVyYVBvc2l0aW9uLHZvaWQgMCE9PVJhJiZSYS5zZXRWYWx1ZShUYSxxZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oVi5tYXRyaXhXb3JsZCkpOyhuYS5pc01lc2hQaG9uZ01hdGVyaWFsfHxuYS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fG5hLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG5hLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fG5hLmlzU2hhZGVyTWF0ZXJpYWx8fG5hLnNraW5uaW5nKSYmc2Iuc2V0VmFsdWUoVGEsInZpZXdNYXRyaXgiLFYubWF0cml4V29ybGRJbnZlcnNlKX1pZihuYS5za2lubmluZyYmKHNiLnNldE9wdGlvbmFsKFRhLApKYSwiYmluZE1hdHJpeCIpLHNiLnNldE9wdGlvbmFsKFRhLEphLCJiaW5kTWF0cml4SW52ZXJzZSIpLFY9SmEuc2tlbGV0b24pKWlmKFJhPVYuYm9uZXMsemMuZmxvYXRWZXJ0ZXhUZXh0dXJlcyl7aWYodm9pZCAwPT09Vi5ib25lVGV4dHVyZSl7UmE9TWF0aC5zcXJ0KDQqUmEubGVuZ3RoKTtSYT1sYi5jZWlsUG93ZXJPZlR3byhSYSk7UmE9TWF0aC5tYXgoUmEsNCk7dmFyIHhkPW5ldyBGbG9hdDMyQXJyYXkoUmEqUmEqNCk7eGQuc2V0KFYuYm9uZU1hdHJpY2VzKTt2YXIgJGM9bmV3IEdiKHhkLFJhLFJhLDEwMjMsMTAxNSk7JGMubmVlZHNVcGRhdGU9ITA7Vi5ib25lTWF0cmljZXM9eGQ7Vi5ib25lVGV4dHVyZT0kYztWLmJvbmVUZXh0dXJlU2l6ZT1SYX1zYi5zZXRWYWx1ZShUYSwiYm9uZVRleHR1cmUiLFYuYm9uZVRleHR1cmUsd2QpO3NiLnNldFZhbHVlKFRhLCJib25lVGV4dHVyZVNpemUiLFYuYm9uZVRleHR1cmVTaXplKX1lbHNlIHNiLnNldE9wdGlvbmFsKFRhLFYsImJvbmVNYXRyaWNlcyIpOwpkYiYmKHNiLnNldFZhbHVlKFRhLCJ0b25lTWFwcGluZ0V4cG9zdXJlIixrYS50b25lTWFwcGluZ0V4cG9zdXJlKSxzYi5zZXRWYWx1ZShUYSwidG9uZU1hcHBpbmdXaGl0ZVBvaW50IixrYS50b25lTWFwcGluZ1doaXRlUG9pbnQpLG5hLmxpZ2h0cyYmeWIoYmIsa2IpLGVhJiZuYS5mb2cmJnBhKGJiLGVhKSxuYS5pc01lc2hCYXNpY01hdGVyaWFsP2hhKGJiLG5hKTpuYS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGhhKGJiLG5hKSx2YShiYixuYSkpOm5hLmlzTWVzaFBob25nTWF0ZXJpYWw/KGhhKGJiLG5hKSxuYS5pc01lc2hUb29uTWF0ZXJpYWw/VmEoYmIsbmEpOkNhKGJiLG5hKSk6bmEuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD8oaGEoYmIsbmEpLG5hLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/RGEoYmIsbmEpOldhKGJiLG5hKSk6bmEuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KGhhKGJiLG5hKSxJYShiYixuYSkpOm5hLmlzTWVzaERlcHRoTWF0ZXJpYWw/KGhhKGJiLG5hKSxFYShiYiwKbmEpKTpuYS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhoYShiYixuYSksT2EoYmIsbmEpKTpuYS5pc01lc2hOb3JtYWxNYXRlcmlhbD8oaGEoYmIsbmEpLGhiKGJiLG5hKSk6bmEuaXNMaW5lQmFzaWNNYXRlcmlhbD8oc2EoYmIsbmEpLG5hLmlzTGluZURhc2hlZE1hdGVyaWFsJiZxYShiYixuYSkpOm5hLmlzUG9pbnRzTWF0ZXJpYWw/cmEoYmIsbmEpOm5hLmlzU3ByaXRlTWF0ZXJpYWw/d2EoYmIsbmEpOm5hLmlzU2hhZG93TWF0ZXJpYWwmJihiYi5jb2xvci52YWx1ZS5jb3B5KG5hLmNvbG9yKSxiYi5vcGFjaXR5LnZhbHVlPW5hLm9wYWNpdHkpLHZvaWQgMCE9PWJiLmx0Y18xJiYoYmIubHRjXzEudmFsdWU9WWEuTFRDXzEpLHZvaWQgMCE9PWJiLmx0Y18yJiYoYmIubHRjXzIudmFsdWU9WWEuTFRDXzIpLGxlLnVwbG9hZChUYSxRYS51bmlmb3Jtc0xpc3QsYmIsd2QpKTtuYS5pc1NoYWRlck1hdGVyaWFsJiYhMD09PW5hLnVuaWZvcm1zTmVlZFVwZGF0ZSYmKGxlLnVwbG9hZChUYSxRYS51bmlmb3Jtc0xpc3QsCmJiLHdkKSxuYS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpO25hLmlzU3ByaXRlTWF0ZXJpYWwmJnNiLnNldFZhbHVlKFRhLCJjZW50ZXIiLEphLmNlbnRlcik7c2Iuc2V0VmFsdWUoVGEsIm1vZGVsVmlld01hdHJpeCIsSmEubW9kZWxWaWV3TWF0cml4KTtzYi5zZXRWYWx1ZShUYSwibm9ybWFsTWF0cml4IixKYS5ub3JtYWxNYXRyaXgpO3NiLnNldFZhbHVlKFRhLCJtb2RlbE1hdHJpeCIsSmEubWF0cml4V29ybGQpO3JldHVybiBKYn1mdW5jdGlvbiBoYShWLGVhKXtWLm9wYWNpdHkudmFsdWU9ZWEub3BhY2l0eTtlYS5jb2xvciYmVi5kaWZmdXNlLnZhbHVlLmNvcHkoZWEuY29sb3IpO2VhLmVtaXNzaXZlJiZWLmVtaXNzaXZlLnZhbHVlLmNvcHkoZWEuZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKGVhLmVtaXNzaXZlSW50ZW5zaXR5KTtlYS5tYXAmJihWLm1hcC52YWx1ZT1lYS5tYXApO2VhLmFscGhhTWFwJiYoVi5hbHBoYU1hcC52YWx1ZT1lYS5hbHBoYU1hcCk7ZWEuc3BlY3VsYXJNYXAmJgooVi5zcGVjdWxhck1hcC52YWx1ZT1lYS5zcGVjdWxhck1hcCk7ZWEuZW52TWFwJiYoVi5lbnZNYXAudmFsdWU9ZWEuZW52TWFwLFYuZmxpcEVudk1hcC52YWx1ZT1lYS5lbnZNYXAuaXNDdWJlVGV4dHVyZT8tMToxLFYucmVmbGVjdGl2aXR5LnZhbHVlPWVhLnJlZmxlY3Rpdml0eSxWLnJlZnJhY3Rpb25SYXRpby52YWx1ZT1lYS5yZWZyYWN0aW9uUmF0aW8sVi5tYXhNaXBMZXZlbC52YWx1ZT1BYy5nZXQoZWEuZW52TWFwKS5fX21heE1pcExldmVsKTtlYS5saWdodE1hcCYmKFYubGlnaHRNYXAudmFsdWU9ZWEubGlnaHRNYXAsVi5saWdodE1hcEludGVuc2l0eS52YWx1ZT1lYS5saWdodE1hcEludGVuc2l0eSk7ZWEuYW9NYXAmJihWLmFvTWFwLnZhbHVlPWVhLmFvTWFwLFYuYW9NYXBJbnRlbnNpdHkudmFsdWU9ZWEuYW9NYXBJbnRlbnNpdHkpO2lmKGVhLm1hcCl2YXIgbmE9ZWEubWFwO2Vsc2UgZWEuc3BlY3VsYXJNYXA/bmE9ZWEuc3BlY3VsYXJNYXA6ZWEuZGlzcGxhY2VtZW50TWFwPwpuYT1lYS5kaXNwbGFjZW1lbnRNYXA6ZWEubm9ybWFsTWFwP25hPWVhLm5vcm1hbE1hcDplYS5idW1wTWFwP25hPWVhLmJ1bXBNYXA6ZWEucm91Z2huZXNzTWFwP25hPWVhLnJvdWdobmVzc01hcDplYS5tZXRhbG5lc3NNYXA/bmE9ZWEubWV0YWxuZXNzTWFwOmVhLmFscGhhTWFwP25hPWVhLmFscGhhTWFwOmVhLmVtaXNzaXZlTWFwJiYobmE9ZWEuZW1pc3NpdmVNYXApO3ZvaWQgMCE9PW5hJiYobmEuaXNXZWJHTFJlbmRlclRhcmdldCYmKG5hPW5hLnRleHR1cmUpLCEwPT09bmEubWF0cml4QXV0b1VwZGF0ZSYmbmEudXBkYXRlTWF0cml4KCksVi51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KG5hLm1hdHJpeCkpfWZ1bmN0aW9uIHNhKFYsZWEpe1YuZGlmZnVzZS52YWx1ZS5jb3B5KGVhLmNvbG9yKTtWLm9wYWNpdHkudmFsdWU9ZWEub3BhY2l0eX1mdW5jdGlvbiBxYShWLGVhKXtWLmRhc2hTaXplLnZhbHVlPWVhLmRhc2hTaXplO1YudG90YWxTaXplLnZhbHVlPWVhLmRhc2hTaXplK2VhLmdhcFNpemU7ClYuc2NhbGUudmFsdWU9ZWEuc2NhbGV9ZnVuY3Rpb24gcmEoVixlYSl7Vi5kaWZmdXNlLnZhbHVlLmNvcHkoZWEuY29sb3IpO1Yub3BhY2l0eS52YWx1ZT1lYS5vcGFjaXR5O1Yuc2l6ZS52YWx1ZT1lYS5zaXplKnljO1Yuc2NhbGUudmFsdWU9LjUqYmQ7Vi5tYXAudmFsdWU9ZWEubWFwO251bGwhPT1lYS5tYXAmJighMD09PWVhLm1hcC5tYXRyaXhBdXRvVXBkYXRlJiZlYS5tYXAudXBkYXRlTWF0cml4KCksVi51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGVhLm1hcC5tYXRyaXgpKX1mdW5jdGlvbiB3YShWLGVhKXtWLmRpZmZ1c2UudmFsdWUuY29weShlYS5jb2xvcik7Vi5vcGFjaXR5LnZhbHVlPWVhLm9wYWNpdHk7Vi5yb3RhdGlvbi52YWx1ZT1lYS5yb3RhdGlvbjtWLm1hcC52YWx1ZT1lYS5tYXA7bnVsbCE9PWVhLm1hcCYmKCEwPT09ZWEubWFwLm1hdHJpeEF1dG9VcGRhdGUmJmVhLm1hcC51cGRhdGVNYXRyaXgoKSxWLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoZWEubWFwLm1hdHJpeCkpfQpmdW5jdGlvbiBwYShWLGVhKXtWLmZvZ0NvbG9yLnZhbHVlLmNvcHkoZWEuY29sb3IpO2VhLmlzRm9nPyhWLmZvZ05lYXIudmFsdWU9ZWEubmVhcixWLmZvZ0Zhci52YWx1ZT1lYS5mYXIpOmVhLmlzRm9nRXhwMiYmKFYuZm9nRGVuc2l0eS52YWx1ZT1lYS5kZW5zaXR5KX1mdW5jdGlvbiB2YShWLGVhKXtlYS5lbWlzc2l2ZU1hcCYmKFYuZW1pc3NpdmVNYXAudmFsdWU9ZWEuZW1pc3NpdmVNYXApfWZ1bmN0aW9uIENhKFYsZWEpe1Yuc3BlY3VsYXIudmFsdWUuY29weShlYS5zcGVjdWxhcik7Vi5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoZWEuc2hpbmluZXNzLDFFLTQpO2VhLmVtaXNzaXZlTWFwJiYoVi5lbWlzc2l2ZU1hcC52YWx1ZT1lYS5lbWlzc2l2ZU1hcCk7ZWEuYnVtcE1hcCYmKFYuYnVtcE1hcC52YWx1ZT1lYS5idW1wTWFwLFYuYnVtcFNjYWxlLnZhbHVlPWVhLmJ1bXBTY2FsZSwxPT09ZWEuc2lkZSYmKFYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpO2VhLm5vcm1hbE1hcCYmKFYubm9ybWFsTWFwLnZhbHVlPQplYS5ub3JtYWxNYXAsVi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGVhLm5vcm1hbFNjYWxlKSwxPT09ZWEuc2lkZSYmVi5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSk7ZWEuZGlzcGxhY2VtZW50TWFwJiYoVi5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZWEuZGlzcGxhY2VtZW50TWFwLFYuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZWEuZGlzcGxhY2VtZW50U2NhbGUsVi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWVhLmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIFZhKFYsZWEpe0NhKFYsZWEpO2VhLmdyYWRpZW50TWFwJiYoVi5ncmFkaWVudE1hcC52YWx1ZT1lYS5ncmFkaWVudE1hcCl9ZnVuY3Rpb24gV2EoVixlYSl7Vi5yb3VnaG5lc3MudmFsdWU9ZWEucm91Z2huZXNzO1YubWV0YWxuZXNzLnZhbHVlPWVhLm1ldGFsbmVzcztlYS5yb3VnaG5lc3NNYXAmJihWLnJvdWdobmVzc01hcC52YWx1ZT1lYS5yb3VnaG5lc3NNYXApO2VhLm1ldGFsbmVzc01hcCYmKFYubWV0YWxuZXNzTWFwLnZhbHVlPQplYS5tZXRhbG5lc3NNYXApO2VhLmVtaXNzaXZlTWFwJiYoVi5lbWlzc2l2ZU1hcC52YWx1ZT1lYS5lbWlzc2l2ZU1hcCk7ZWEuYnVtcE1hcCYmKFYuYnVtcE1hcC52YWx1ZT1lYS5idW1wTWFwLFYuYnVtcFNjYWxlLnZhbHVlPWVhLmJ1bXBTY2FsZSwxPT09ZWEuc2lkZSYmKFYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpO2VhLm5vcm1hbE1hcCYmKFYubm9ybWFsTWFwLnZhbHVlPWVhLm5vcm1hbE1hcCxWLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZWEubm9ybWFsU2NhbGUpLDE9PT1lYS5zaWRlJiZWLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKTtlYS5kaXNwbGFjZW1lbnRNYXAmJihWLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lYS5kaXNwbGFjZW1lbnRNYXAsVi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lYS5kaXNwbGFjZW1lbnRTY2FsZSxWLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZWEuZGlzcGxhY2VtZW50Qmlhcyk7ZWEuZW52TWFwJiYoVi5lbnZNYXBJbnRlbnNpdHkudmFsdWU9CmVhLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gRGEoVixlYSl7V2EoVixlYSk7Vi5yZWZsZWN0aXZpdHkudmFsdWU9ZWEucmVmbGVjdGl2aXR5O1YuY2xlYXJjb2F0LnZhbHVlPWVhLmNsZWFyY29hdDtWLmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT1lYS5jbGVhcmNvYXRSb3VnaG5lc3M7ZWEuc2hlZW4mJlYuc2hlZW4udmFsdWUuY29weShlYS5zaGVlbik7ZWEuY2xlYXJjb2F0Tm9ybWFsTWFwJiYoVi5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KGVhLmNsZWFyY29hdE5vcm1hbFNjYWxlKSxWLmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT1lYS5jbGVhcmNvYXROb3JtYWxNYXAsMT09PWVhLnNpZGUmJlYuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpO1YudHJhbnNwYXJlbmN5LnZhbHVlPWVhLnRyYW5zcGFyZW5jeX1mdW5jdGlvbiBJYShWLGVhKXtlYS5tYXRjYXAmJihWLm1hdGNhcC52YWx1ZT1lYS5tYXRjYXApO2VhLmJ1bXBNYXAmJihWLmJ1bXBNYXAudmFsdWU9CmVhLmJ1bXBNYXAsVi5idW1wU2NhbGUudmFsdWU9ZWEuYnVtcFNjYWxlLDE9PT1lYS5zaWRlJiYoVi5idW1wU2NhbGUudmFsdWUqPS0xKSk7ZWEubm9ybWFsTWFwJiYoVi5ub3JtYWxNYXAudmFsdWU9ZWEubm9ybWFsTWFwLFYubm9ybWFsU2NhbGUudmFsdWUuY29weShlYS5ub3JtYWxTY2FsZSksMT09PWVhLnNpZGUmJlYubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpO2VhLmRpc3BsYWNlbWVudE1hcCYmKFYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWVhLmRpc3BsYWNlbWVudE1hcCxWLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWVhLmRpc3BsYWNlbWVudFNjYWxlLFYuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lYS5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBFYShWLGVhKXtlYS5kaXNwbGFjZW1lbnRNYXAmJihWLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1lYS5kaXNwbGFjZW1lbnRNYXAsVi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1lYS5kaXNwbGFjZW1lbnRTY2FsZSxWLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9CmVhLmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIE9hKFYsZWEpe2VhLmRpc3BsYWNlbWVudE1hcCYmKFYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWVhLmRpc3BsYWNlbWVudE1hcCxWLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWVhLmRpc3BsYWNlbWVudFNjYWxlLFYuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lYS5kaXNwbGFjZW1lbnRCaWFzKTtWLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoZWEucmVmZXJlbmNlUG9zaXRpb24pO1YubmVhckRpc3RhbmNlLnZhbHVlPWVhLm5lYXJEaXN0YW5jZTtWLmZhckRpc3RhbmNlLnZhbHVlPWVhLmZhckRpc3RhbmNlfWZ1bmN0aW9uIGhiKFYsZWEpe2VhLmJ1bXBNYXAmJihWLmJ1bXBNYXAudmFsdWU9ZWEuYnVtcE1hcCxWLmJ1bXBTY2FsZS52YWx1ZT1lYS5idW1wU2NhbGUsMT09PWVhLnNpZGUmJihWLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKTtlYS5ub3JtYWxNYXAmJihWLm5vcm1hbE1hcC52YWx1ZT1lYS5ub3JtYWxNYXAsVi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGVhLm5vcm1hbFNjYWxlKSwKMT09PWVhLnNpZGUmJlYubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpO2VhLmRpc3BsYWNlbWVudE1hcCYmKFYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWVhLmRpc3BsYWNlbWVudE1hcCxWLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWVhLmRpc3BsYWNlbWVudFNjYWxlLFYuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1lYS5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiB5YihWLGVhKXtWLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPWVhO1YubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZT1lYTtWLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWVhO1YucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9ZWE7Vi5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWVhO1YucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9ZWE7Vi5oZW1pc3BoZXJlTGlnaHRzLm5lZWRzVXBkYXRlPWVhfWI9Ynx8e307dmFyIExhPXZvaWQgMCE9PWIuY2FudmFzP2IuY2FudmFzOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsCiJjYW52YXMiKSxlYj12b2lkIDAhPT1iLmNvbnRleHQ/Yi5jb250ZXh0Om51bGwsbmI9dm9pZCAwIT09Yi5hbHBoYT9iLmFscGhhOiExLE5iPXZvaWQgMCE9PWIuZGVwdGg/Yi5kZXB0aDohMCxEYj12b2lkIDAhPT1iLnN0ZW5jaWw/Yi5zdGVuY2lsOiEwLGphPXZvaWQgMCE9PWIuYW50aWFsaWFzP2IuYW50aWFsaWFzOiExLG9hPXZvaWQgMCE9PWIucHJlbXVsdGlwbGllZEFscGhhP2IucHJlbXVsdGlwbGllZEFscGhhOiEwLEFhPXZvaWQgMCE9PWIucHJlc2VydmVEcmF3aW5nQnVmZmVyP2IucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLEthPXZvaWQgMCE9PWIucG93ZXJQcmVmZXJlbmNlP2IucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0IiwkYT12b2lkIDAhPT1iLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ/Yi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLFBhPW51bGwsZmI9bnVsbDt0aGlzLmRvbUVsZW1lbnQ9TGE7dGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9Owp0aGlzLnNvcnRPYmplY3RzPXRoaXMuYXV0b0NsZWFyU3RlbmNpbD10aGlzLmF1dG9DbGVhckRlcHRoPXRoaXMuYXV0b0NsZWFyQ29sb3I9dGhpcy5hdXRvQ2xlYXI9ITA7dGhpcy5jbGlwcGluZ1BsYW5lcz1bXTt0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkPSExO3RoaXMuZ2FtbWFGYWN0b3I9Mjt0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPXRoaXMuZ2FtbWFPdXRwdXQ9dGhpcy5nYW1tYUlucHV0PSExO3RoaXMudG9uZU1hcHBpbmdXaGl0ZVBvaW50PXRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT10aGlzLnRvbmVNYXBwaW5nPTE7dGhpcy5tYXhNb3JwaFRhcmdldHM9ODt0aGlzLm1heE1vcnBoTm9ybWFscz00O3ZhciBrYT10aGlzLEhhPSExLE5hPW51bGwscmI9MCxYYT0wLG1iPW51bGwsb2I9bnVsbCxTYT0tMTt2YXIgamI9ZT1udWxsO3ZhciBxYj0hMTt2YXIgdGI9bnVsbCx4Yj1udWxsLFdiPW5ldyBuLGljPW5ldyBuLEpjPW51bGwseWQ9TGEud2lkdGgsYmQ9TGEuaGVpZ2h0LAp5Yz0xLEhmPW5ldyBuKDAsMCx5ZCxiZCksR2Y9bmV3IG4oMCwwLHlkLGJkKSx2az0hMSx0az1uZXcgRWMsYWQ9bmV3IFpjLHVpPSExLHVrPSExLGFoPW5ldyByLHFlPW5ldyBnO3RyeXtuYj17YWxwaGE6bmIsZGVwdGg6TmIsc3RlbmNpbDpEYixhbnRpYWxpYXM6amEscHJlbXVsdGlwbGllZEFscGhhOm9hLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpBYSxwb3dlclByZWZlcmVuY2U6S2EsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDokYSx4ckNvbXBhdGlibGU6ITB9O0xhLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHUsITEpO0xhLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIix3LCExKTt2YXIgVGE9ZWJ8fExhLmdldENvbnRleHQoIndlYmdsIixuYil8fExhLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbmIpO2lmKG51bGw9PT1UYSl7aWYobnVsbCE9PUxhLmdldENvbnRleHQoIndlYmdsIikpdGhyb3cgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik7CnRocm93IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpO312b2lkIDA9PT1UYS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQmJihUYS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKFYpe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrVi5tZXNzYWdlKSxWO312YXIgWWIsemMsRWIsb2UsQWMsd2Qsc2ksc2ssSWYsTmUsdGksSmYscGUsS24sTG4sTW4sdmQ7bSgpO3ZhciBOZD0idW5kZWZpbmVkIiE9PXR5cGVvZiBuYXZpZ2F0b3ImJiJ4ciJpbiBuYXZpZ2F0b3ImJiJzdXBwb3J0c1Nlc3Npb24iaW4gbmF2aWdhdG9yLnhyP25ldyBKbihrYSxUYSk6bmV3IHFrKGthKTt0aGlzLnZyPU5kO3ZhciBObj1uZXcgRW4oa2EsSWYsemMubWF4VGV4dHVyZVNpemUpO3RoaXMuc2hhZG93TWFwPU5uO3RoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBUYX07CnRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gVGEuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX07dGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7dmFyIFY9WWIuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtWJiZWLmxvc2VDb250ZXh0KCl9O3RoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe3ZhciBWPVliLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7ViYmVi5yZXN0b3JlQ29udGV4dCgpfTt0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4geWN9O3RoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3ZhciBWPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO3ZvaWQgMCE9PVYmJih5Yz1WLHRoaXMuc2V0U2l6ZSh5ZCxiZCwhMSkpfTt0aGlzLmdldFNpemU9ZnVuY3Rpb24oVil7dm9pZCAwPT09ViYmKGNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogLmdldHNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksClY9bmV3IGQpO3JldHVybiBWLnNldCh5ZCxiZCl9O3RoaXMuc2V0U2l6ZT1mdW5jdGlvbihWLGVhLG5hKXtOZC5pc1ByZXNlbnRpbmcoKT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOih5ZD1WLGJkPWVhLExhLndpZHRoPU1hdGguZmxvb3IoVip5YyksTGEuaGVpZ2h0PU1hdGguZmxvb3IoZWEqeWMpLCExIT09bmEmJihMYS5zdHlsZS53aWR0aD1WKyJweCIsTGEuc3R5bGUuaGVpZ2h0PWVhKyJweCIpLHRoaXMuc2V0Vmlld3BvcnQoVixlYSkpfTt0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKFYpe3ZvaWQgMD09PVYmJihjb25zb2xlLndhcm4oIldlYkdMUmVuZGVyZXI6IC5nZXRkcmF3aW5nQnVmZmVyU2l6ZSgpIG5vdyByZXF1aXJlcyBhIFZlY3RvcjIgYXMgYW4gYXJndW1lbnQiKSxWPW5ldyBkKTtyZXR1cm4gVi5zZXQoeWQqeWMsYmQqeWMpLmZsb29yKCl9Owp0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKFYsZWEsbmEpe3lkPVY7YmQ9ZWE7eWM9bmE7TGEud2lkdGg9TWF0aC5mbG9vcihWKm5hKTtMYS5oZWlnaHQ9TWF0aC5mbG9vcihlYSpuYSk7dGhpcy5zZXRWaWV3cG9ydChWLGVhKX07dGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oVil7dm9pZCAwPT09ViYmKGNvbnNvbGUud2FybigiV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRWaWV3cG9ydCgpIG5vdyByZXF1aXJlcyBhIFZlY3RvcjQgYXMgYW4gYXJndW1lbnQiKSxWPW5ldyBuKTtyZXR1cm4gVi5jb3B5KFdiKX07dGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihWKXtyZXR1cm4gVi5jb3B5KEhmKX07dGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihWLGVhKXsoMCkuaXNWZWN0b3I0P0hmLnNldCgoMCkueCwoMCkueSwoMCkueiwoMCkudyk6SGYuc2V0KDAsMCxWLGVhKTtFYi52aWV3cG9ydChXYi5jb3B5KEhmKS5tdWx0aXBseVNjYWxhcih5YykuZmxvb3IoKSl9Owp0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oVil7cmV0dXJuIFYuY29weShHZil9O3RoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihWLGVhLG5hLEphKXtWLmlzVmVjdG9yND9HZi5zZXQoVi54LFYueSxWLnosVi53KTpHZi5zZXQoVixlYSxuYSxKYSk7RWIuc2Npc3NvcihpYy5jb3B5KEdmKS5tdWx0aXBseVNjYWxhcih5YykuZmxvb3IoKSl9O3RoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdmt9O3RoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oVil7RWIuc2V0U2Npc3NvclRlc3Qodms9Vil9O3RoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe3JldHVybiBwZS5nZXRDbGVhckNvbG9yKCl9O3RoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe3BlLnNldENsZWFyQ29sb3IuYXBwbHkocGUsYXJndW1lbnRzKX07dGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIHBlLmdldENsZWFyQWxwaGEoKX07dGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cGUuc2V0Q2xlYXJBbHBoYS5hcHBseShwZSwKYXJndW1lbnRzKX07dGhpcy5jbGVhcj1mdW5jdGlvbihWLGVhLG5hKXt2YXIgSmE9MDtpZih2b2lkIDA9PT1WfHxWKUphfD0xNjM4NDtpZih2b2lkIDA9PT1lYXx8ZWEpSmF8PTI1NjtpZih2b2lkIDA9PT1uYXx8bmEpSmF8PTEwMjQ7VGEuY2xlYXIoSmEpfTt0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX07dGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9O3RoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9O3RoaXMuZGlzcG9zZT1mdW5jdGlvbigpe0xhLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHUsITEpO0xhLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIix3LCExKTt0aS5kaXNwb3NlKCk7SmYuZGlzcG9zZSgpO0FjLmRpc3Bvc2UoKTtJZi5kaXNwb3NlKCk7TmQuZGlzcG9zZSgpO3ZpLnN0b3AoKX07dGhpcy5yZW5kZXJCdWZmZXJJbW1lZGlhdGU9CmZ1bmN0aW9uKFYsZWEpe0ViLmluaXRBdHRyaWJ1dGVzKCk7dmFyIG5hPUFjLmdldChWKTtWLmhhc1Bvc2l0aW9ucyYmIW5hLnBvc2l0aW9uJiYobmEucG9zaXRpb249VGEuY3JlYXRlQnVmZmVyKCkpO1YuaGFzTm9ybWFscyYmIW5hLm5vcm1hbCYmKG5hLm5vcm1hbD1UYS5jcmVhdGVCdWZmZXIoKSk7Vi5oYXNVdnMmJiFuYS51diYmKG5hLnV2PVRhLmNyZWF0ZUJ1ZmZlcigpKTtWLmhhc0NvbG9ycyYmIW5hLmNvbG9yJiYobmEuY29sb3I9VGEuY3JlYXRlQnVmZmVyKCkpO2VhPWVhLmdldEF0dHJpYnV0ZXMoKTtWLmhhc1Bvc2l0aW9ucyYmKFRhLmJpbmRCdWZmZXIoMzQ5NjIsbmEucG9zaXRpb24pLFRhLmJ1ZmZlckRhdGEoMzQ5NjIsVi5wb3NpdGlvbkFycmF5LDM1MDQ4KSxFYi5lbmFibGVBdHRyaWJ1dGUoZWEucG9zaXRpb24pLFRhLnZlcnRleEF0dHJpYlBvaW50ZXIoZWEucG9zaXRpb24sMyw1MTI2LCExLDAsMCkpO1YuaGFzTm9ybWFscyYmKFRhLmJpbmRCdWZmZXIoMzQ5NjIsbmEubm9ybWFsKSwKVGEuYnVmZmVyRGF0YSgzNDk2MixWLm5vcm1hbEFycmF5LDM1MDQ4KSxFYi5lbmFibGVBdHRyaWJ1dGUoZWEubm9ybWFsKSxUYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGVhLm5vcm1hbCwzLDUxMjYsITEsMCwwKSk7Vi5oYXNVdnMmJihUYS5iaW5kQnVmZmVyKDM0OTYyLG5hLnV2KSxUYS5idWZmZXJEYXRhKDM0OTYyLFYudXZBcnJheSwzNTA0OCksRWIuZW5hYmxlQXR0cmlidXRlKGVhLnV2KSxUYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGVhLnV2LDIsNTEyNiwhMSwwLDApKTtWLmhhc0NvbG9ycyYmKFRhLmJpbmRCdWZmZXIoMzQ5NjIsbmEuY29sb3IpLFRhLmJ1ZmZlckRhdGEoMzQ5NjIsVi5jb2xvckFycmF5LDM1MDQ4KSxFYi5lbmFibGVBdHRyaWJ1dGUoZWEuY29sb3IpLFRhLnZlcnRleEF0dHJpYlBvaW50ZXIoZWEuY29sb3IsMyw1MTI2LCExLDAsMCkpO0ViLmRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzKCk7VGEuZHJhd0FycmF5cyg0LDAsVi5jb3VudCk7Vi5jb3VudD0wfTt0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD0KZnVuY3Rpb24oVixlYSxuYSxKYSxRYSxkYil7RWIuc2V0TWF0ZXJpYWwoSmEsUWEuaXNNZXNoJiYwPlFhLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCkpO3ZhciBSYT1pYShWLGVhLEphLFFhKSxrYj0hMTtpZihlIT09bmEuaWR8fGpiIT09UmEuaWR8fHFiIT09KCEwPT09SmEud2lyZWZyYW1lKSllPW5hLmlkLGpiPVJhLmlkLHFiPSEwPT09SmEud2lyZWZyYW1lLGtiPSEwO1FhLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKEtuLnVwZGF0ZShRYSxuYSxKYSxSYSksa2I9ITApO3ZhciBKYj1uYS5pbmRleCxzYj1uYS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2VhPTE7ITA9PT1KYS53aXJlZnJhbWUmJihKYj1zay5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUobmEpLGVhPTIpO1Y9TG47aWYobnVsbCE9PUpiKXt2YXIgYmI9c2kuZ2V0KEpiKTtWPU1uO1Yuc2V0SW5kZXgoYmIpfWtiJiYoUShKYSxSYSxuYSksbnVsbCE9PUpiJiZUYS5iaW5kQnVmZmVyKDM0OTYzLGJiLmJ1ZmZlcikpO2JiPUluZmluaXR5OwpudWxsIT09SmI/YmI9SmIuY291bnQ6dm9pZCAwIT09c2ImJihiYj1zYi5jb3VudCk7c2I9bmEuZHJhd1JhbmdlLnN0YXJ0KmVhO1JhPW51bGwhPT1kYj9kYi5zdGFydCplYTowO0piPU1hdGgubWF4KHNiLFJhKTtkYj1NYXRoLm1heCgwLE1hdGgubWluKGJiLHNiK25hLmRyYXdSYW5nZS5jb3VudCplYSxSYSsobnVsbCE9PWRiP2RiLmNvdW50KmVhOkluZmluaXR5KSktMS1KYisxKTtpZigwIT09ZGIpe2lmKFFhLmlzTWVzaClpZighMD09PUphLndpcmVmcmFtZSlFYi5zZXRMaW5lV2lkdGgoSmEud2lyZWZyYW1lTGluZXdpZHRoKmgoKSksVi5zZXRNb2RlKDEpO2Vsc2Ugc3dpdGNoKFFhLmRyYXdNb2RlKXtjYXNlIDA6Vi5zZXRNb2RlKDQpO2JyZWFrO2Nhc2UgMTpWLnNldE1vZGUoNSk7YnJlYWs7Y2FzZSAyOlYuc2V0TW9kZSg2KX1lbHNlIFFhLmlzTGluZT8oSmE9SmEubGluZXdpZHRoLHZvaWQgMD09PUphJiYoSmE9MSksRWIuc2V0TGluZVdpZHRoKEphKmgoKSksUWEuaXNMaW5lU2VnbWVudHM/ClYuc2V0TW9kZSgxKTpRYS5pc0xpbmVMb29wP1Yuc2V0TW9kZSgyKTpWLnNldE1vZGUoMykpOlFhLmlzUG9pbnRzP1Yuc2V0TW9kZSgwKTpRYS5pc1Nwcml0ZSYmVi5zZXRNb2RlKDQpO25hJiZuYS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PzA8bmEubWF4SW5zdGFuY2VkQ291bnQmJlYucmVuZGVySW5zdGFuY2VzKG5hLEpiLGRiKTpWLnJlbmRlcihKYixkYil9fTt0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oVixlYSl7ZmI9SmYuZ2V0KFYsZWEpO2ZiLmluaXQoKTtWLnRyYXZlcnNlKGZ1bmN0aW9uKG5hKXtuYS5pc0xpZ2h0JiYoZmIucHVzaExpZ2h0KG5hKSxuYS5jYXN0U2hhZG93JiZmYi5wdXNoU2hhZG93KG5hKSl9KTtmYi5zZXR1cExpZ2h0cyhlYSk7Vi50cmF2ZXJzZShmdW5jdGlvbihuYSl7aWYobmEubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheShuYS5tYXRlcmlhbCkpZm9yKHZhciBKYT0wO0phPG5hLm1hdGVyaWFsLmxlbmd0aDtKYSsrKVgobmEubWF0ZXJpYWxbSmFdLFYuZm9nLApuYSk7ZWxzZSBYKG5hLm1hdGVyaWFsLFYuZm9nLG5hKX0pfTt2YXIgd2s9bnVsbCx2aT1uZXcgeGM7dmkuc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihWKXtOZC5pc1ByZXNlbnRpbmcoKXx8d2smJndrKFYpfSk7InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93JiZ2aS5zZXRDb250ZXh0KHdpbmRvdyk7dGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKFYpe3drPVY7TmQuc2V0QW5pbWF0aW9uTG9vcChWKTt2aS5zdGFydCgpfTt0aGlzLnJlbmRlcj1mdW5jdGlvbihWLGVhLG5hLEphKXtpZih2b2lkIDAhPT1uYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcigpOiB0aGUgcmVuZGVyVGFyZ2V0IGFyZ3VtZW50IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgaW5zdGVhZC4iKTt2YXIgUWE9bmF9aWYodm9pZCAwIT09SmEpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXIoKTogdGhlIGZvcmNlQ2xlYXIgYXJndW1lbnQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5jbGVhcigpIGluc3RlYWQuIik7CnZhciBkYj1KYX1lYSYmZWEuaXNDYW1lcmE/SGF8fChqYj1lPW51bGwscWI9ITEsU2E9LTEsdGI9bnVsbCwhMD09PVYuYXV0b1VwZGF0ZSYmVi51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1lYS5wYXJlbnQmJmVhLnVwZGF0ZU1hdHJpeFdvcmxkKCksTmQuZW5hYmxlZCYmKGVhPU5kLmdldENhbWVyYShlYSkpLGZiPUpmLmdldChWLGVhKSxmYi5pbml0KCksVi5vbkJlZm9yZVJlbmRlcihrYSxWLGVhLFFhfHxtYiksYWgubXVsdGlwbHlNYXRyaWNlcyhlYS5wcm9qZWN0aW9uTWF0cml4LGVhLm1hdHJpeFdvcmxkSW52ZXJzZSksdGsuc2V0RnJvbU1hdHJpeChhaCksdWs9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCx1aT1hZC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsdWssZWEpLFBhPXRpLmdldChWLGVhKSxQYS5pbml0KCksUyhWLGVhLDAsa2Euc29ydE9iamVjdHMpLCEwPT09a2Euc29ydE9iamVjdHMmJlBhLnNvcnQoKSx1aSYmYWQuYmVnaW5TaGFkb3dzKCksTm4ucmVuZGVyKGZiLnN0YXRlLnNoYWRvd3NBcnJheSwKVixlYSksZmIuc2V0dXBMaWdodHMoZWEpLHVpJiZhZC5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldCYmdGhpcy5pbmZvLnJlc2V0KCksdm9pZCAwIT09UWEmJnRoaXMuc2V0UmVuZGVyVGFyZ2V0KFFhKSxwZS5yZW5kZXIoUGEsVixlYSxkYiksbmE9UGEub3BhcXVlLEphPVBhLnRyYW5zcGFyZW50LFYub3ZlcnJpZGVNYXRlcmlhbD8oUWE9Vi5vdmVycmlkZU1hdGVyaWFsLG5hLmxlbmd0aCYmVChuYSxWLGVhLFFhKSxKYS5sZW5ndGgmJlQoSmEsVixlYSxRYSkpOihuYS5sZW5ndGgmJlQobmEsVixlYSksSmEubGVuZ3RoJiZUKEphLFYsZWEpKSxudWxsIT09bWImJih3ZC51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAobWIpLHdkLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KG1iKSksRWIuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxFYi5idWZmZXJzLmRlcHRoLnNldE1hc2soITApLEViLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksRWIuc2V0UG9seWdvbk9mZnNldCghMSksCk5kLmVuYWJsZWQmJk5kLnN1Ym1pdEZyYW1lKCksZmI9UGE9bnVsbCk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpfTt0aGlzLnNldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKFYpe05hIT09ViYmVGEuYmluZEZyYW1lYnVmZmVyKDM2MTYwLFYpO05hPVZ9O3RoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcmJ9O3RoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gWGF9O3RoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG1ifTt0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihWLGVhLG5hKXttYj1WO3JiPWVhO1hhPW5hO1YmJnZvaWQgMD09PUFjLmdldChWKS5fX3dlYmdsRnJhbWVidWZmZXImJndkLnNldHVwUmVuZGVyVGFyZ2V0KFYpO3ZhciBKYT1OYSxRYT0hMTtWPyhKYT1BYy5nZXQoVikuX193ZWJnbEZyYW1lYnVmZmVyLApWLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlPyhKYT1KYVtlYXx8MF0sUWE9ITApOkphPVYuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0P0FjLmdldChWKS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI6SmEsV2IuY29weShWLnZpZXdwb3J0KSxpYy5jb3B5KFYuc2Npc3NvciksSmM9Vi5zY2lzc29yVGVzdCk6KFdiLmNvcHkoSGYpLm11bHRpcGx5U2NhbGFyKHljKS5mbG9vcigpLGljLmNvcHkoR2YpLm11bHRpcGx5U2NhbGFyKHljKS5mbG9vcigpLEpjPXZrKTtvYiE9PUphJiYoVGEuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEphKSxvYj1KYSk7RWIudmlld3BvcnQoV2IpO0ViLnNjaXNzb3IoaWMpO0ViLnNldFNjaXNzb3JUZXN0KEpjKTtRYSYmKFY9QWMuZ2V0KFYudGV4dHVyZSksVGEuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrKGVhfHwwKSxWLl9fd2ViZ2xUZXh0dXJlLG5hfHwwKSl9O3RoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihWLAplYSxuYSxKYSxRYSxkYixSYSl7aWYoViYmVi5pc1dlYkdMUmVuZGVyVGFyZ2V0KXt2YXIga2I9QWMuZ2V0KFYpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtWLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlJiZ2b2lkIDAhPT1SYSYmKGtiPWtiW1JhXSk7aWYoa2Ipe1JhPSExO2tiIT09b2ImJihUYS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsa2IpLFJhPSEwKTt0cnl7dmFyIEpiPVYudGV4dHVyZSxzYj1KYi5mb3JtYXQsYmI9SmIudHlwZTsxMDIzIT09c2ImJnZkLmNvbnZlcnQoc2IpIT09VGEuZ2V0UGFyYW1ldGVyKDM1NzM5KT9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKToxMDA5PT09YmJ8fHZkLmNvbnZlcnQoYmIpPT09VGEuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8MTAxNT09PWJiJiYoemMuaXNXZWJHTDJ8fFliLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKXx8ClliLmdldCgiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHwxMDE2PT09YmImJih6Yy5pc1dlYkdMMj9ZYi5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTpZYi5nZXQoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpKT8zNjA1Mz09PVRhLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPzA8PWVhJiZlYTw9Vi53aWR0aC1KYSYmMDw9bmEmJm5hPD1WLmhlaWdodC1RYSYmVGEucmVhZFBpeGVscyhlYSxuYSxKYSxRYSx2ZC5jb252ZXJ0KHNiKSx2ZC5jb252ZXJ0KGJiKSxkYik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKX1maW5hbGx5e1JhJiYKVGEuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG9iKX19fWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpfTt0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihWLGVhLG5hKXt2YXIgSmE9ZWEuaW1hZ2Uud2lkdGgsUWE9ZWEuaW1hZ2UuaGVpZ2h0LGRiPXZkLmNvbnZlcnQoZWEuZm9ybWF0KTt3ZC5zZXRUZXh0dXJlMkQoZWEsMCk7VGEuY29weVRleEltYWdlMkQoMzU1MyxuYXx8MCxkYixWLngsVi55LEphLFFhLDApfTt0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKFYsZWEsbmEsSmEpe3ZhciBRYT1lYS5pbWFnZS53aWR0aCxkYj1lYS5pbWFnZS5oZWlnaHQsUmE9dmQuY29udmVydChuYS5mb3JtYXQpLGtiPXZkLmNvbnZlcnQobmEudHlwZSk7d2Quc2V0VGV4dHVyZTJEKG5hLDApO2VhLmlzRGF0YVRleHR1cmU/ClRhLnRleFN1YkltYWdlMkQoMzU1MyxKYXx8MCxWLngsVi55LFFhLGRiLFJhLGtiLGVhLmltYWdlLmRhdGEpOlRhLnRleFN1YkltYWdlMkQoMzU1MyxKYXx8MCxWLngsVi55LFJhLGtiLGVhLmltYWdlKX07InVuZGVmaW5lZCIhPT10eXBlb2YgX19USFJFRV9ERVZUT09MU19fJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1mdW5jdGlvbiB3aShiLGUpe3RoaXMubmFtZT0iIjt0aGlzLmNvbG9yPW5ldyBJKGIpO3RoaXMuZGVuc2l0eT12b2lkIDAhPT1lP2U6Mi41RS00fWZ1bmN0aW9uIHhpKGIsZSxoKXt0aGlzLm5hbWU9IiI7dGhpcy5jb2xvcj1uZXcgSShiKTt0aGlzLm5lYXI9dm9pZCAwIT09ZT9lOjE7dGhpcy5mYXI9dm9pZCAwIT09aD9oOjFFM31mdW5jdGlvbiBPZShiLGUpe3RoaXMuYXJyYXk9Yjt0aGlzLnN0cmlkZT1lO3RoaXMuY291bnQ9dm9pZCAwIT09Yj9iLmxlbmd0aC9lOjA7dGhpcy5keW5hbWljPQohMTt0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX07dGhpcy52ZXJzaW9uPTB9ZnVuY3Rpb24gYmgoYixlLGgsbSl7dGhpcy5kYXRhPWI7dGhpcy5pdGVtU2l6ZT1lO3RoaXMub2Zmc2V0PWg7dGhpcy5ub3JtYWxpemVkPSEwPT09bX1mdW5jdGlvbiByZShiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTcHJpdGVNYXRlcmlhbCI7dGhpcy5jb2xvcj1uZXcgSSgxNjc3NzIxNSk7dGhpcy5tYXA9bnVsbDt0aGlzLnJvdGF0aW9uPTA7dGhpcy5zaXplQXR0ZW51YXRpb249ITA7dGhpcy5saWdodHM9ITE7dGhpcy50cmFuc3BhcmVudD0hMDt0aGlzLnNldFZhbHVlcyhiKX1mdW5jdGlvbiBjaChiKXt5LmNhbGwodGhpcyk7dGhpcy50eXBlPSJTcHJpdGUiO2lmKHZvaWQgMD09PUxmKXtMZj1uZXcgeGE7dmFyIGU9bmV3IE9lKG5ldyBGbG9hdDMyQXJyYXkoWy0uNSwtLjUsMCwwLDAsLjUsLS41LDAsMSwwLC41LC41LDAsMSwxLC0uNSwuNSwwLDAsMV0pLDUpO0xmLnNldEluZGV4KFswLAoxLDIsMCwyLDNdKTtMZi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmgoZSwzLDAsITEpKTtMZi5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmgoZSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PUxmO3RoaXMubWF0ZXJpYWw9dm9pZCAwIT09Yj9iOm5ldyByZTt0aGlzLmNlbnRlcj1uZXcgZCguNSwuNSl9ZnVuY3Rpb24geWkoYixlLGgsbSx1LHcpe01mLnN1YlZlY3RvcnMoYixoKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KG0pO3ZvaWQgMCE9PXU/KGRoLng9dypNZi54LXUqTWYueSxkaC55PXUqTWYueCt3Kk1mLnkpOmRoLmNvcHkoTWYpO2IuY29weShlKTtiLngrPWRoLng7Yi55Kz1kaC55O2IuYXBwbHlNYXRyaXg0KE9uKX1mdW5jdGlvbiBlaCgpe3kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxPRCI7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfX0pO3RoaXMuYXV0b1VwZGF0ZT0hMH1mdW5jdGlvbiBmaChiLGUpe2ImJmIuaXNHZW9tZXRyeSYmCmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7eWEuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJTa2lubmVkTWVzaCI7dGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiO3RoaXMuYmluZE1hdHJpeD1uZXcgcjt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyByfWZ1bmN0aW9uIHppKGIsZSl7Yj1ifHxbXTt0aGlzLmJvbmVzPWIuc2xpY2UoMCk7dGhpcy5ib25lTWF0cmljZXM9bmV3IEZsb2F0MzJBcnJheSgxNip0aGlzLmJvbmVzLmxlbmd0aCk7aWYodm9pZCAwPT09ZSl0aGlzLmNhbGN1bGF0ZUludmVyc2VzKCk7ZWxzZSBpZih0aGlzLmJvbmVzLmxlbmd0aD09PWUubGVuZ3RoKXRoaXMuYm9uZUludmVyc2VzPWUuc2xpY2UoMCk7ZWxzZSBmb3IoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbiBib25lSW52ZXJzZXMgaXMgdGhlIHdyb25nIGxlbmd0aC4iKSwKdGhpcy5ib25lSW52ZXJzZXM9W10sYj0wLGU9dGhpcy5ib25lcy5sZW5ndGg7YjxlO2IrKyl0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyByKX1mdW5jdGlvbiB4aygpe3kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkJvbmUifWZ1bmN0aW9uIE9iKGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBJKDE2Nzc3MjE1KTt0aGlzLmxpbmV3aWR0aD0xO3RoaXMubGluZWpvaW49dGhpcy5saW5lY2FwPSJyb3VuZCI7dGhpcy5saWdodHM9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gbWMoYixlLGgpezE9PT1oJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lOiBwYXJhbWV0ZXIgVEhSRUUuTGluZVBpZWNlcyBubyBsb25nZXIgc3VwcG9ydGVkLiBVc2UgVEhSRUUuTGluZVNlZ21lbnRzIGluc3RlYWQuIik7eS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGluZSI7dGhpcy5nZW9tZXRyeT12b2lkIDAhPT1iP2I6bmV3IHhhO3RoaXMubWF0ZXJpYWw9CnZvaWQgMCE9PWU/ZTpuZXcgT2Ioe2NvbG9yOjE2Nzc3MjE1Kk1hdGgucmFuZG9tKCl9KX1mdW5jdGlvbiBTYihiLGUpe21jLmNhbGwodGhpcyxiLGUpO3RoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1mdW5jdGlvbiBBaShiLGUpe21jLmNhbGwodGhpcyxiLGUpO3RoaXMudHlwZT0iTGluZUxvb3AifWZ1bmN0aW9uIGNkKGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBJKDE2Nzc3MjE1KTt0aGlzLm1hcD1udWxsO3RoaXMuc2l6ZT0xO3RoaXMuc2l6ZUF0dGVudWF0aW9uPSEwO3RoaXMubGlnaHRzPXRoaXMubW9ycGhUYXJnZXRzPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIE5mKGIsZSl7eS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9pbnRzIjt0aGlzLmdlb21ldHJ5PXZvaWQgMCE9PWI/YjpuZXcgeGE7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1lP2U6bmV3IGNkKHtjb2xvcjoxNjc3NzIxNSpNYXRoLnJhbmRvbSgpfSk7dGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX0KZnVuY3Rpb24geWsoYixlLGgsbSx1LHcsQSl7dmFyIEU9emsuZGlzdGFuY2VTcVRvUG9pbnQoYik7RTxoJiYoaD1uZXcgZyx6ay5jbG9zZXN0UG9pbnRUb1BvaW50KGIsaCksaC5hcHBseU1hdHJpeDQobSksYj11LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhoKSxiPHUubmVhcnx8Yj51LmZhcnx8dy5wdXNoKHtkaXN0YW5jZTpiLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KEUpLHBvaW50OmgsaW5kZXg6ZSxmYWNlOm51bGwsb2JqZWN0OkF9KSl9ZnVuY3Rpb24gQWsoYixlLGgsbSx1LHcsQSxFLEcpe2suY2FsbCh0aGlzLGIsZSxoLG0sdSx3LEEsRSxHKTt0aGlzLmZvcm1hdD12b2lkIDAhPT1BP0E6MTAyMjt0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT13P3c6MTAwNjt0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT11P3U6MTAwNjt0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1mdW5jdGlvbiBPZihiLGUsaCxtLHUsdyxBLEUsRyxKLFEsUyl7ay5jYWxsKHRoaXMsbnVsbCx3LEEsRSxHLEosbSx1LFEsClMpO3RoaXMuaW1hZ2U9e3dpZHRoOmUsaGVpZ2h0Omh9O3RoaXMubWlwbWFwcz1iO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPXRoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gZ2goYixlLGgsbSx1LHcsQSxFLEcpe2suY2FsbCh0aGlzLGIsZSxoLG0sdSx3LEEsRSxHKTt0aGlzLm5lZWRzVXBkYXRlPSEwfWZ1bmN0aW9uIGhoKGIsZSxoLG0sdSx3LEEsRSxHLEope0o9dm9pZCAwIT09Sj9KOjEwMjY7aWYoMTAyNiE9PUomJjEwMjchPT1KKXRocm93IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWgmJjEwMjY9PT1KJiYoaD0xMDEyKTt2b2lkIDA9PT1oJiYxMDI3PT09SiYmKGg9MTAyMCk7ay5jYWxsKHRoaXMsbnVsbCxtLHUsdyxBLEUsSixoLEcpO3RoaXMuaW1hZ2U9e3dpZHRoOmIsaGVpZ2h0OmV9O3RoaXMubWFnRmlsdGVyPXZvaWQgMCE9PUE/QToxMDAzO3RoaXMubWluRmlsdGVyPQp2b2lkIDAhPT1FP0U6MTAwMzt0aGlzLmdlbmVyYXRlTWlwbWFwcz10aGlzLmZsaXBZPSExfWZ1bmN0aW9uIFBmKGIpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJXaXJlZnJhbWVHZW9tZXRyeSI7dmFyIGU9W10saCxtLHUsdz1bMCwwXSxBPXt9LEU9WyJhIiwiYiIsImMiXTtpZihiJiZiLmlzR2VvbWV0cnkpe3ZhciBHPWIuZmFjZXM7dmFyIEo9MDtmb3IobT1HLmxlbmd0aDtKPG07SisrKXt2YXIgUT1HW0pdO2ZvcihoPTA7Mz5oO2grKyl7dmFyIFM9UVtFW2hdXTt2YXIgVD1RW0VbKGgrMSklM11dO3dbMF09TWF0aC5taW4oUyxUKTt3WzFdPU1hdGgubWF4KFMsVCk7Uz13WzBdKyIsIit3WzFdO3ZvaWQgMD09PUFbU10mJihBW1NdPXtpbmRleDE6d1swXSxpbmRleDI6d1sxXX0pfX1mb3IoUyBpbiBBKUo9QVtTXSxFPWIudmVydGljZXNbSi5pbmRleDFdLGUucHVzaChFLngsRS55LEUueiksRT1iLnZlcnRpY2VzW0ouaW5kZXgyXSxlLnB1c2goRS54LEUueSxFLnopfWVsc2UgaWYoYiYmCmIuaXNCdWZmZXJHZW9tZXRyeSlpZihFPW5ldyBnLG51bGwhPT1iLmluZGV4KXtHPWIuYXR0cmlidXRlcy5wb3NpdGlvbjtRPWIuaW5kZXg7dmFyIFc9Yi5ncm91cHM7MD09PVcubGVuZ3RoJiYoVz1be3N0YXJ0OjAsY291bnQ6US5jb3VudCxtYXRlcmlhbEluZGV4OjB9XSk7Yj0wO2Zvcih1PVcubGVuZ3RoO2I8dTsrK2IpZm9yKEo9V1tiXSxoPUouc3RhcnQsbT1KLmNvdW50LEo9aCxtPWgrbTtKPG07Sis9Mylmb3IoaD0wOzM+aDtoKyspUz1RLmdldFgoSitoKSxUPVEuZ2V0WChKKyhoKzEpJTMpLHdbMF09TWF0aC5taW4oUyxUKSx3WzFdPU1hdGgubWF4KFMsVCksUz13WzBdKyIsIit3WzFdLHZvaWQgMD09PUFbU10mJihBW1NdPXtpbmRleDE6d1swXSxpbmRleDI6d1sxXX0pO2ZvcihTIGluIEEpSj1BW1NdLEUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShHLEouaW5kZXgxKSxlLnB1c2goRS54LEUueSxFLnopLEUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShHLEouaW5kZXgyKSxlLnB1c2goRS54LApFLnksRS56KX1lbHNlIGZvcihHPWIuYXR0cmlidXRlcy5wb3NpdGlvbixKPTAsbT1HLmNvdW50LzM7SjxtO0orKylmb3IoaD0wOzM+aDtoKyspQT0zKkoraCxFLmZyb21CdWZmZXJBdHRyaWJ1dGUoRyxBKSxlLnB1c2goRS54LEUueSxFLnopLEE9MypKKyhoKzEpJTMsRS5mcm9tQnVmZmVyQXR0cmlidXRlKEcsQSksZS5wdXNoKEUueCxFLnksRS56KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShlLDMpKX1mdW5jdGlvbiBpaChiLGUsaCl7emEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBhcmFtZXRyaWNHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtmdW5jOmIsc2xpY2VzOmUsc3RhY2tzOmh9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBRZihiLGUsaCkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFFmKGIsZSxoKXt4YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGFyYW1ldHJpY0J1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2Z1bmM6YiwKc2xpY2VzOmUsc3RhY2tzOmh9O3ZhciBtPVtdLHU9W10sdz1bXSxBPVtdLEU9bmV3IGcsRz1uZXcgZyxKPW5ldyBnLFE9bmV3IGcsUz1uZXcgZyxULFc7Mz5iLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5OiBGdW5jdGlvbiBtdXN0IG5vdyBtb2RpZnkgYSBWZWN0b3IzIGFzIHRoaXJkIHBhcmFtZXRlci4iKTt2YXIgWD1lKzE7Zm9yKFQ9MDtUPD1oO1QrKyl7dmFyIGlhPVQvaDtmb3IoVz0wO1c8PWU7VysrKXt2YXIgaGE9Vy9lO2IoaGEsaWEsRyk7dS5wdXNoKEcueCxHLnksRy56KTswPD1oYS0xRS01PyhiKGhhLTFFLTUsaWEsSiksUS5zdWJWZWN0b3JzKEcsSikpOihiKGhhKzFFLTUsaWEsSiksUS5zdWJWZWN0b3JzKEosRykpOzA8PWlhLTFFLTU/KGIoaGEsaWEtMUUtNSxKKSxTLnN1YlZlY3RvcnMoRyxKKSk6KGIoaGEsaWErMUUtNSxKKSxTLnN1YlZlY3RvcnMoSixHKSk7RS5jcm9zc1ZlY3RvcnMoUSxTKS5ub3JtYWxpemUoKTt3LnB1c2goRS54LApFLnksRS56KTtBLnB1c2goaGEsaWEpfX1mb3IoVD0wO1Q8aDtUKyspZm9yKFc9MDtXPGU7VysrKWI9VCpYK1crMSxFPShUKzEpKlgrVysxLEc9KFQrMSkqWCtXLG0ucHVzaChUKlgrVyxiLEcpLG0ucHVzaChiLEUsRyk7dGhpcy5zZXRJbmRleChtKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYSh1LDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZGEodywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgZGEoQSwyKSl9ZnVuY3Rpb24gamgoYixlLGgsbSl7emEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczpiLGluZGljZXM6ZSxyYWRpdXM6aCxkZXRhaWw6bX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IEZjKGIsZSxoLG0pKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBGYyhiLGUsaCxtKXtmdW5jdGlvbiB1KFgsaWEsaGEsc2Epe3NhPU1hdGgucG93KDIsCnNhKTt2YXIgcWE9W10scmEsd2E7Zm9yKHJhPTA7cmE8PXNhO3JhKyspe3FhW3JhXT1bXTt2YXIgcGE9WC5jbG9uZSgpLmxlcnAoaGEscmEvc2EpLHZhPWlhLmNsb25lKCkubGVycChoYSxyYS9zYSksQ2E9c2EtcmE7Zm9yKHdhPTA7d2E8PUNhO3dhKyspcWFbcmFdW3dhXT0wPT09d2EmJnJhPT09c2E/cGE6cGEuY2xvbmUoKS5sZXJwKHZhLHdhL0NhKX1mb3IocmE9MDtyYTxzYTtyYSsrKWZvcih3YT0wO3dhPDIqKHNhLXJhKS0xO3dhKyspWD1NYXRoLmZsb29yKHdhLzIpLDA9PT13YSUyPyhBKHFhW3JhXVtYKzFdKSxBKHFhW3JhKzFdW1hdKSxBKHFhW3JhXVtYXSkpOihBKHFhW3JhXVtYKzFdKSxBKHFhW3JhKzFdW1grMV0pLEEocWFbcmErMV1bWF0pKX1mdW5jdGlvbiB3KCl7Zm9yKHZhciBYPTA7WDxXLmxlbmd0aDtYKz02KXt2YXIgaWE9V1tYKzBdLGhhPVdbWCsyXSxzYT1XW1grNF0scWE9TWF0aC5taW4oaWEsaGEsc2EpOy45PE1hdGgubWF4KGlhLGhhLHNhKSYmLjE+cWEmJiguMj4KaWEmJihXW1grMF0rPTEpLC4yPmhhJiYoV1tYKzJdKz0xKSwuMj5zYSYmKFdbWCs0XSs9MSkpfX1mdW5jdGlvbiBBKFgpe1QucHVzaChYLngsWC55LFgueil9ZnVuY3Rpb24gRShYLGlhKXtYKj0zO2lhLng9YltYKzBdO2lhLnk9YltYKzFdO2lhLno9YltYKzJdfWZ1bmN0aW9uIEcoKXtmb3IodmFyIFg9bmV3IGcsaWE9bmV3IGcsaGE9bmV3IGcsc2E9bmV3IGcscWE9bmV3IGQscmE9bmV3IGQsd2E9bmV3IGQscGE9MCx2YT0wO3BhPFQubGVuZ3RoO3BhKz05LHZhKz02KXtYLnNldChUW3BhKzBdLFRbcGErMV0sVFtwYSsyXSk7aWEuc2V0KFRbcGErM10sVFtwYSs0XSxUW3BhKzVdKTtoYS5zZXQoVFtwYSs2XSxUW3BhKzddLFRbcGErOF0pO3FhLnNldChXW3ZhKzBdLFdbdmErMV0pO3JhLnNldChXW3ZhKzJdLFdbdmErM10pO3dhLnNldChXW3ZhKzRdLFdbdmErNV0pO3NhLmNvcHkoWCkuYWRkKGlhKS5hZGQoaGEpLmRpdmlkZVNjYWxhcigzKTt2YXIgQ2E9UShzYSk7SihxYSx2YSswLFgsCkNhKTtKKHJhLHZhKzIsaWEsQ2EpO0ood2EsdmErNCxoYSxDYSl9fWZ1bmN0aW9uIEooWCxpYSxoYSxzYSl7MD5zYSYmMT09PVgueCYmKFdbaWFdPVgueC0xKTswPT09aGEueCYmMD09PWhhLnomJihXW2lhXT1zYS8yL01hdGguUEkrLjUpfWZ1bmN0aW9uIFEoWCl7cmV0dXJuIE1hdGguYXRhbjIoWC56LC1YLngpfWZ1bmN0aW9uIFMoWCl7cmV0dXJuIE1hdGguYXRhbjIoLVgueSxNYXRoLnNxcnQoWC54KlgueCtYLnoqWC56KSl9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczpiLGluZGljZXM6ZSxyYWRpdXM6aCxkZXRhaWw6bX07aD1ofHwxO209bXx8MDt2YXIgVD1bXSxXPVtdOyhmdW5jdGlvbihYKXtmb3IodmFyIGlhPW5ldyBnLGhhPW5ldyBnLHNhPW5ldyBnLHFhPTA7cWE8ZS5sZW5ndGg7cWErPTMpRShlW3FhKzBdLGlhKSxFKGVbcWErMV0saGEpLEUoZVtxYSsyXSxzYSksdShpYSxoYSxzYSwKWCl9KShtKTsoZnVuY3Rpb24oWCl7Zm9yKHZhciBpYT1uZXcgZyxoYT0wO2hhPFQubGVuZ3RoO2hhKz0zKWlhLng9VFtoYSswXSxpYS55PVRbaGErMV0saWEuej1UW2hhKzJdLGlhLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKFgpLFRbaGErMF09aWEueCxUW2hhKzFdPWlhLnksVFtoYSsyXT1pYS56fSkoaCk7KGZ1bmN0aW9uKCl7Zm9yKHZhciBYPW5ldyBnLGlhPTA7aWE8VC5sZW5ndGg7aWErPTMpe1gueD1UW2lhKzBdO1gueT1UW2lhKzFdO1guej1UW2lhKzJdO3ZhciBoYT1RKFgpLzIvTWF0aC5QSSsuNSxzYT1TKFgpL01hdGguUEkrLjU7Vy5wdXNoKGhhLDEtc2EpfUcoKTt3KCl9KSgpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKFQsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBkYShULnNsaWNlKCksMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGRhKFcsMikpOzA9PT1tP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKX0KZnVuY3Rpb24ga2goYixlKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YixkZXRhaWw6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFJmKGIsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFJmKGIsZSl7RmMuY2FsbCh0aGlzLFsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0sWzIsMSwwLDAsMywyLDEsMywwLDIsMywxXSxiLGUpO3RoaXMudHlwZT0iVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YixkZXRhaWw6ZX19ZnVuY3Rpb24gbGgoYixlKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iT2N0YWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgUGUoYixlKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUGUoYixlKXtGYy5jYWxsKHRoaXMsClsxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMSwwLDAsMCwxLDAsMCwtMV0sWzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXSxiLGUpO3RoaXMudHlwZT0iT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfX1mdW5jdGlvbiBtaChiLGUpe3phLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgU2YoYixlKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gU2YoYixlKXt2YXIgaD0oMStNYXRoLnNxcnQoNSkpLzI7RmMuY2FsbCh0aGlzLFstMSxoLDAsMSxoLDAsLTEsLWgsMCwxLC1oLDAsMCwtMSxoLDAsMSxoLDAsLTEsLWgsMCwxLC1oLGgsMCwtMSxoLDAsMSwtaCwwLC0xLC1oLDAsMV0sWzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwKMSw1LDksNSwxMSw0LDExLDEwLDIsMTAsNyw2LDcsMSw4LDMsOSw0LDMsNCwyLDMsMiw2LDMsNiw4LDMsOCw5LDQsOSw1LDIsNCwxMSw2LDIsMTAsOCw2LDcsOSw4LDFdLGIsZSk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfX1mdW5jdGlvbiBuaChiLGUpe3phLmNhbGwodGhpcyk7dGhpcy50eXBlPSJEb2RlY2FoZWRyb25HZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YixkZXRhaWw6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFRmKGIsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFRmKGIsZSl7dmFyIGg9KDErTWF0aC5zcXJ0KDUpKS8yLG09MS9oO0ZjLmNhbGwodGhpcyxbLTEsLTEsLTEsLTEsLTEsMSwtMSwxLC0xLC0xLDEsMSwxLC0xLC0xLDEsLTEsMSwxLDEsLTEsMSwxLDEsMCwtbSwtaCwwLC1tLGgsMCxtLC1oLDAsbSxoLC1tLC1oLDAsLW0saCwwLG0sCi1oLDAsbSxoLDAsLWgsMCwtbSxoLDAsLW0sLWgsMCxtLGgsMCxtXSxbMywxMSw3LDMsNywxNSwzLDE1LDEzLDcsMTksMTcsNywxNyw2LDcsNiwxNSwxNyw0LDgsMTcsOCwxMCwxNywxMCw2LDgsMCwxNiw4LDE2LDIsOCwyLDEwLDAsMTIsMSwwLDEsMTgsMCwxOCwxNiw2LDEwLDIsNiwyLDEzLDYsMTMsMTUsMiwxNiwxOCwyLDE4LDMsMiwzLDEzLDE4LDEsOSwxOCw5LDExLDE4LDExLDMsNCwxNCwxMiw0LDEyLDAsNCwwLDgsMTEsOSw1LDExLDUsMTksMTEsMTksNywxOSw1LDE0LDE5LDE0LDQsMTksNCwxNywxLDEyLDE0LDEsMTQsNSwxLDUsOV0sYixlKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfX1mdW5jdGlvbiBvaChiLGUsaCxtLHUsdyl7emEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwYXRoOmIsdHVidWxhclNlZ21lbnRzOmUscmFkaXVzOmgsCnJhZGlhbFNlZ21lbnRzOm0sY2xvc2VkOnV9O3ZvaWQgMCE9PXcmJmNvbnNvbGUud2FybigiVEhSRUUuVHViZUdlb21ldHJ5OiB0YXBlciBoYXMgYmVlbiByZW1vdmVkLiIpO2I9bmV3IFFlKGIsZSxoLG0sdSk7dGhpcy50YW5nZW50cz1iLnRhbmdlbnRzO3RoaXMubm9ybWFscz1iLm5vcm1hbHM7dGhpcy5iaW5vcm1hbHM9Yi5iaW5vcm1hbHM7dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkoYik7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gUWUoYixlLGgsbSx1KXtmdW5jdGlvbiB3KHJhKXtUPWIuZ2V0UG9pbnRBdChyYS9lLFQpO3ZhciB3YT1HLm5vcm1hbHNbcmFdO3JhPUcuYmlub3JtYWxzW3JhXTtmb3IoWD0wO1g8PW07WCsrKXt2YXIgcGE9WC9tKk1hdGguUEkqMix2YT1NYXRoLnNpbihwYSk7cGE9LU1hdGguY29zKHBhKTtRLng9cGEqd2EueCt2YSpyYS54O1EueT1wYSp3YS55K3ZhKnJhLnk7US56PXBhKndhLnordmEqcmEuejtRLm5vcm1hbGl6ZSgpO2hhLnB1c2goUS54LApRLnksUS56KTtKLng9VC54K2gqUS54O0oueT1ULnkraCpRLnk7Si56PVQueitoKlEuejtpYS5wdXNoKEoueCxKLnksSi56KX19ZnVuY3Rpb24gQSgpe2ZvcihYPTE7WDw9ZTtYKyspZm9yKFc9MTtXPD1tO1crKyl7dmFyIHJhPShtKzEpKlgrKFctMSksd2E9KG0rMSkqWCtXLHBhPShtKzEpKihYLTEpK1c7cWEucHVzaCgobSsxKSooWC0xKSsoVy0xKSxyYSxwYSk7cWEucHVzaChyYSx3YSxwYSl9fWZ1bmN0aW9uIEUoKXtmb3IoVz0wO1c8PWU7VysrKWZvcihYPTA7WDw9bTtYKyspUy54PVcvZSxTLnk9WC9tLHNhLnB1c2goUy54LFMueSl9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlR1YmVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwYXRoOmIsdHVidWxhclNlZ21lbnRzOmUscmFkaXVzOmgscmFkaWFsU2VnbWVudHM6bSxjbG9zZWQ6dX07ZT1lfHw2NDtoPWh8fDE7bT1tfHw4O3U9dXx8ITE7dmFyIEc9Yi5jb21wdXRlRnJlbmV0RnJhbWVzKGUsdSk7dGhpcy50YW5nZW50cz0KRy50YW5nZW50czt0aGlzLm5vcm1hbHM9Ry5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPUcuYmlub3JtYWxzO3ZhciBKPW5ldyBnLFE9bmV3IGcsUz1uZXcgZCxUPW5ldyBnLFcsWCxpYT1bXSxoYT1bXSxzYT1bXSxxYT1bXTsoZnVuY3Rpb24oKXtmb3IoVz0wO1c8ZTtXKyspdyhXKTt3KCExPT09dT9lOjApO0UoKTtBKCl9KSgpO3RoaXMuc2V0SW5kZXgocWEpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKGlhLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZGEoaGEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGRhKHNhLDIpKX1mdW5jdGlvbiBwaChiLGUsaCxtLHUsdyxBKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNLbm90R2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsdHViZTplLHR1YnVsYXJTZWdtZW50czpoLHJhZGlhbFNlZ21lbnRzOm0scDp1LHE6d307dm9pZCAwIT09QSYmY29uc29sZS53YXJuKCJUSFJFRS5Ub3J1c0tub3RHZW9tZXRyeTogaGVpZ2h0U2NhbGUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zY2FsZSggeCwgeSwgeiApIGluc3RlYWQuIik7CnRoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBVZihiLGUsaCxtLHUsdykpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFVmKGIsZSxoLG0sdSx3KXtmdW5jdGlvbiBBKHZhLENhLFZhLFdhLERhKXt2YXIgSWE9TWF0aC5zaW4odmEpO0NhPVZhL0NhKnZhO1ZhPU1hdGguY29zKENhKTtEYS54PVdhKigyK1ZhKSouNSpNYXRoLmNvcyh2YSk7RGEueT1XYSooMitWYSkqSWEqLjU7RGEuej1XYSpNYXRoLnNpbihDYSkqLjV9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLHR1YmU6ZSx0dWJ1bGFyU2VnbWVudHM6aCxyYWRpYWxTZWdtZW50czptLHA6dSxxOnd9O2I9Ynx8MTtlPWV8fC40O2g9TWF0aC5mbG9vcihoKXx8NjQ7bT1NYXRoLmZsb29yKG0pfHw4O3U9dXx8Mjt3PXd8fDM7dmFyIEU9W10sRz1bXSxKPVtdLFE9W10sUyxUPW5ldyBnLFc9bmV3IGcsWD1uZXcgZyxpYT1uZXcgZyxoYT1uZXcgZywKc2E9bmV3IGcscWE9bmV3IGc7Zm9yKFM9MDtTPD1oOysrUyl7dmFyIHJhPVMvaCp1Kk1hdGguUEkqMjtBKHJhLHUsdyxiLFgpO0EocmErLjAxLHUsdyxiLGlhKTtzYS5zdWJWZWN0b3JzKGlhLFgpO3FhLmFkZFZlY3RvcnMoaWEsWCk7aGEuY3Jvc3NWZWN0b3JzKHNhLHFhKTtxYS5jcm9zc1ZlY3RvcnMoaGEsc2EpO2hhLm5vcm1hbGl6ZSgpO3FhLm5vcm1hbGl6ZSgpO2ZvcihyYT0wO3JhPD1tOysrcmEpe3ZhciB3YT1yYS9tKk1hdGguUEkqMixwYT0tZSpNYXRoLmNvcyh3YSk7d2E9ZSpNYXRoLnNpbih3YSk7VC54PVgueCsocGEqcWEueCt3YSpoYS54KTtULnk9WC55KyhwYSpxYS55K3dhKmhhLnkpO1Quej1YLnorKHBhKnFhLnord2EqaGEueik7Ry5wdXNoKFQueCxULnksVC56KTtXLnN1YlZlY3RvcnMoVCxYKS5ub3JtYWxpemUoKTtKLnB1c2goVy54LFcueSxXLnopO1EucHVzaChTL2gpO1EucHVzaChyYS9tKX19Zm9yKHJhPTE7cmE8PWg7cmErKylmb3IoUz0xO1M8PW07UysrKWI9CihtKzEpKnJhKyhTLTEpLGU9KG0rMSkqcmErUyx1PShtKzEpKihyYS0xKStTLEUucHVzaCgobSsxKSoocmEtMSkrKFMtMSksYix1KSxFLnB1c2goYixlLHUpO3RoaXMuc2V0SW5kZXgoRSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEoRywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGRhKEosMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGRhKFEsMikpfWZ1bmN0aW9uIHFoKGIsZSxoLG0sdSl7emEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsdHViZTplLHJhZGlhbFNlZ21lbnRzOmgsdHVidWxhclNlZ21lbnRzOm0sYXJjOnV9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBWZihiLGUsaCxtLHUpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBWZihiLGUsaCxtLHUpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUb3J1c0J1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9CntyYWRpdXM6Yix0dWJlOmUscmFkaWFsU2VnbWVudHM6aCx0dWJ1bGFyU2VnbWVudHM6bSxhcmM6dX07Yj1ifHwxO2U9ZXx8LjQ7aD1NYXRoLmZsb29yKGgpfHw4O209TWF0aC5mbG9vcihtKXx8Njt1PXV8fDIqTWF0aC5QSTt2YXIgdz1bXSxBPVtdLEU9W10sRz1bXSxKPW5ldyBnLFE9bmV3IGcsUz1uZXcgZyxULFc7Zm9yKFQ9MDtUPD1oO1QrKylmb3IoVz0wO1c8PW07VysrKXt2YXIgWD1XL20qdSxpYT1UL2gqTWF0aC5QSSoyO1EueD0oYitlKk1hdGguY29zKGlhKSkqTWF0aC5jb3MoWCk7US55PShiK2UqTWF0aC5jb3MoaWEpKSpNYXRoLnNpbihYKTtRLno9ZSpNYXRoLnNpbihpYSk7QS5wdXNoKFEueCxRLnksUS56KTtKLng9YipNYXRoLmNvcyhYKTtKLnk9YipNYXRoLnNpbihYKTtTLnN1YlZlY3RvcnMoUSxKKS5ub3JtYWxpemUoKTtFLnB1c2goUy54LFMueSxTLnopO0cucHVzaChXL20pO0cucHVzaChUL2gpfWZvcihUPTE7VDw9aDtUKyspZm9yKFc9MTtXPD1tO1crKyliPShtKwoxKSooVC0xKStXLTEsZT0obSsxKSooVC0xKStXLHU9KG0rMSkqVCtXLHcucHVzaCgobSsxKSpUK1ctMSxiLHUpLHcucHVzaChiLGUsdSk7dGhpcy5zZXRJbmRleCh3KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShBLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZGEoRSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgZGEoRywyKSl9ZnVuY3Rpb24gUG4oYixlLGgsbSx1KXtpZih1PT09MDxUcihiLGUsaCxtKSlmb3IodT1lO3U8aDt1Kz1tKXZhciB3PVFuKHUsYlt1XSxiW3UrMV0sdyk7ZWxzZSBmb3IodT1oLW07dT49ZTt1LT1tKXc9UW4odSxiW3VdLGJbdSsxXSx3KTt3JiZSZSh3LHcubmV4dCkmJihyaCh3KSx3PXcubmV4dCk7cmV0dXJuIHd9ZnVuY3Rpb24gc2goYixlKXtpZighYilyZXR1cm4gYjtlfHwoZT1iKTtkb3t2YXIgaD0hMTtpZihiLnN0ZWluZXJ8fCFSZShiLGIubmV4dCkmJjAhPT1uYyhiLnByZXYsYixiLm5leHQpKWI9Yi5uZXh0OwplbHNle3JoKGIpO2I9ZT1iLnByZXY7aWYoYj09PWIubmV4dClicmVhaztoPSEwfX13aGlsZShofHxiIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gdGgoYixlLGgsbSx1LHcsQSl7aWYoYil7IUEmJncmJlVyKGIsbSx1LHcpO2Zvcih2YXIgRT1iLEcsSjtiLnByZXYhPT1iLm5leHQ7KWlmKEc9Yi5wcmV2LEo9Yi5uZXh0LHc/VnIoYixtLHUsdyk6V3IoYikpZS5wdXNoKEcuaS9oKSxlLnB1c2goYi5pL2gpLGUucHVzaChKLmkvaCkscmgoYiksRT1iPUoubmV4dDtlbHNlIGlmKGI9SixiPT09RSl7QT8xPT09QT8oYj1YcihiLGUsaCksdGgoYixlLGgsbSx1LHcsMikpOjI9PT1BJiZZcihiLGUsaCxtLHUsdyk6dGgoc2goYiksZSxoLG0sdSx3LDEpO2JyZWFrfX19ZnVuY3Rpb24gV3IoYil7dmFyIGU9Yi5wcmV2LGg9Yi5uZXh0O2lmKDA8PW5jKGUsYixoKSlyZXR1cm4hMTtmb3IodmFyIG09Yi5uZXh0Lm5leHQ7bSE9PWIucHJldjspe2lmKFdmKGUueCxlLnksYi54LGIueSxoLngsaC55LG0ueCwKbS55KSYmMDw9bmMobS5wcmV2LG0sbS5uZXh0KSlyZXR1cm4hMTttPW0ubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBWcihiLGUsaCxtKXt2YXIgdT1iLnByZXYsdz1iLm5leHQ7aWYoMDw9bmModSxiLHcpKXJldHVybiExO3ZhciBBPXUueD5iLng/dS54PncueD91Lng6dy54OmIueD53Lng/Yi54OncueCxFPXUueT5iLnk/dS55PncueT91Lnk6dy55OmIueT53Lnk/Yi55OncueSxHPUJrKHUueDxiLng/dS54PHcueD91Lng6dy54OmIueDx3Lng/Yi54OncueCx1Lnk8Yi55P3UueTx3Lnk/dS55OncueTpiLnk8dy55P2IueTp3LnksZSxoLG0pO2U9QmsoQSxFLGUsaCxtKTtoPWIucHJldlo7Zm9yKG09Yi5uZXh0WjtoJiZoLno+PUcmJm0mJm0uejw9ZTspe2lmKGghPT1iLnByZXYmJmghPT1iLm5leHQmJldmKHUueCx1LnksYi54LGIueSx3Lngsdy55LGgueCxoLnkpJiYwPD1uYyhoLnByZXYsaCxoLm5leHQpKXJldHVybiExO2g9aC5wcmV2WjtpZihtIT09Yi5wcmV2JiZtIT09Yi5uZXh0JiZXZih1LngsCnUueSxiLngsYi55LHcueCx3LnksbS54LG0ueSkmJjA8PW5jKG0ucHJldixtLG0ubmV4dCkpcmV0dXJuITE7bT1tLm5leHRafWZvcig7aCYmaC56Pj1HOyl7aWYoaCE9PWIucHJldiYmaCE9PWIubmV4dCYmV2YodS54LHUueSxiLngsYi55LHcueCx3LnksaC54LGgueSkmJjA8PW5jKGgucHJldixoLGgubmV4dCkpcmV0dXJuITE7aD1oLnByZXZafWZvcig7bSYmbS56PD1lOyl7aWYobSE9PWIucHJldiYmbSE9PWIubmV4dCYmV2YodS54LHUueSxiLngsYi55LHcueCx3LnksbS54LG0ueSkmJjA8PW5jKG0ucHJldixtLG0ubmV4dCkpcmV0dXJuITE7bT1tLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIFhyKGIsZSxoKXt2YXIgbT1iO2Rve3ZhciB1PW0ucHJldix3PW0ubmV4dC5uZXh0OyFSZSh1LHcpJiZSbih1LG0sbS5uZXh0LHcpJiZ1aCh1LHcpJiZ1aCh3LHUpJiYoZS5wdXNoKHUuaS9oKSxlLnB1c2gobS5pL2gpLGUucHVzaCh3LmkvaCkscmgobSkscmgobS5uZXh0KSxtPWI9dyk7bT1tLm5leHR9d2hpbGUobSE9PQpiKTtyZXR1cm4gbX1mdW5jdGlvbiBZcihiLGUsaCxtLHUsdyl7dmFyIEE9Yjtkb3tmb3IodmFyIEU9QS5uZXh0Lm5leHQ7RSE9PUEucHJldjspe2lmKEEuaSE9PUUuaSYmWnIoQSxFKSl7Yj1TbihBLEUpO0E9c2goQSxBLm5leHQpO2I9c2goYixiLm5leHQpO3RoKEEsZSxoLG0sdSx3KTt0aChiLGUsaCxtLHUsdyk7cmV0dXJufUU9RS5uZXh0fUE9QS5uZXh0fXdoaWxlKEEhPT1iKX1mdW5jdGlvbiAkcihiLGUsaCxtKXt2YXIgdT1bXSx3O3ZhciBBPTA7Zm9yKHc9ZS5sZW5ndGg7QTx3O0ErKyl7dmFyIEU9ZVtBXSptO3ZhciBHPUE8dy0xP2VbQSsxXSptOmIubGVuZ3RoO0U9UG4oYixFLEcsbSwhMSk7RT09PUUubmV4dCYmKEUuc3RlaW5lcj0hMCk7dS5wdXNoKGFzKEUpKX11LnNvcnQoYnMpO2ZvcihBPTA7QTx1Lmxlbmd0aDtBKyspY3ModVtBXSxoKSxoPXNoKGgsaC5uZXh0KTtyZXR1cm4gaH1mdW5jdGlvbiBicyhiLGUpe3JldHVybiBiLngtZS54fWZ1bmN0aW9uIGNzKGIsZSl7aWYoZT0KZHMoYixlKSliPVNuKGUsYiksc2goYixiLm5leHQpfWZ1bmN0aW9uIGRzKGIsZSl7dmFyIGg9ZSxtPWIueCx1PWIueSx3PS1JbmZpbml0eTtkb3tpZih1PD1oLnkmJnU+PWgubmV4dC55JiZoLm5leHQueSE9PWgueSl7dmFyIEE9aC54Kyh1LWgueSkqKGgubmV4dC54LWgueCkvKGgubmV4dC55LWgueSk7aWYoQTw9bSYmQT53KXt3PUE7aWYoQT09PW0pe2lmKHU9PT1oLnkpcmV0dXJuIGg7aWYodT09PWgubmV4dC55KXJldHVybiBoLm5leHR9dmFyIEU9aC54PGgubmV4dC54P2g6aC5uZXh0fX1oPWgubmV4dH13aGlsZShoIT09ZSk7aWYoIUUpcmV0dXJuIG51bGw7aWYobT09PXcpcmV0dXJuIEUucHJldjtlPUU7QT1FLng7dmFyIEc9RS55LEo9SW5maW5pdHk7Zm9yKGg9RS5uZXh0O2ghPT1lOyl7aWYobT49aC54JiZoLng+PUEmJm0hPT1oLngmJldmKHU8Rz9tOncsdSxBLEcsdTxHP3c6bSx1LGgueCxoLnkpKXt2YXIgUT1NYXRoLmFicyh1LWgueSkvKG0taC54KTsoUTxKfHxRPT09SiYmCmgueD5FLngpJiZ1aChoLGIpJiYoRT1oLEo9USl9aD1oLm5leHR9cmV0dXJuIEV9ZnVuY3Rpb24gVXIoYixlLGgsbSl7dmFyIHU9YjtkbyBudWxsPT09dS56JiYodS56PUJrKHUueCx1LnksZSxoLG0pKSx1LnByZXZaPXUucHJldix1PXUubmV4dFo9dS5uZXh0O3doaWxlKHUhPT1iKTt1LnByZXZaLm5leHRaPW51bGw7dS5wcmV2Wj1udWxsO2VzKHUpfWZ1bmN0aW9uIGVzKGIpe3ZhciBlLGgsbSx1LHc9MTtkb3t2YXIgQT1iO3ZhciBFPWI9bnVsbDtmb3IoaD0wO0E7KXtoKys7dmFyIEc9QTtmb3IoZT1tPTA7ZTx3JiYobSsrLEc9Ry5uZXh0WixHKTtlKyspO2Zvcih1PXc7MDxtfHwwPHUmJkc7KTAhPT1tJiYoMD09PXV8fCFHfHxBLno8PUcueik/KGU9QSxBPUEubmV4dFosbS0tKTooZT1HLEc9Ry5uZXh0Wix1LS0pLEU/RS5uZXh0Wj1lOmI9ZSxlLnByZXZaPUUsRT1lO0E9R31FLm5leHRaPW51bGw7dyo9Mn13aGlsZSgxPGgpO3JldHVybiBifWZ1bmN0aW9uIEJrKGIsZSxoLG0sdSl7Yj0KMzI3NjcqKGItaCkqdTtlPTMyNzY3KihlLW0pKnU7Yj0oYnxiPDw4KSYxNjcxMTkzNTtiPShifGI8PDQpJjI1MjY0NTEzNTtiPShifGI8PDIpJjg1ODk5MzQ1OTtlPShlfGU8PDgpJjE2NzExOTM1O2U9KGV8ZTw8NCkmMjUyNjQ1MTM1O2U9KGV8ZTw8MikmODU4OTkzNDU5O3JldHVybihifGI8PDEpJjE0MzE2NTU3NjV8KChlfGU8PDEpJjE0MzE2NTU3NjUpPDwxfWZ1bmN0aW9uIGFzKGIpe3ZhciBlPWIsaD1iO2Rve2lmKGUueDxoLnh8fGUueD09PWgueCYmZS55PGgueSloPWU7ZT1lLm5leHR9d2hpbGUoZSE9PWIpO3JldHVybiBofWZ1bmN0aW9uIFdmKGIsZSxoLG0sdSx3LEEsRSl7cmV0dXJuIDA8PSh1LUEpKihlLUUpLShiLUEpKih3LUUpJiYwPD0oYi1BKSoobS1FKS0oaC1BKSooZS1FKSYmMDw9KGgtQSkqKHctRSktKHUtQSkqKG0tRSl9ZnVuY3Rpb24gWnIoYixlKXtyZXR1cm4gYi5uZXh0LmkhPT1lLmkmJmIucHJldi5pIT09ZS5pJiYhZnMoYixlKSYmdWgoYixlKSYmdWgoZSxiKSYmCmdzKGIsZSl9ZnVuY3Rpb24gbmMoYixlLGgpe3JldHVybihlLnktYi55KSooaC54LWUueCktKGUueC1iLngpKihoLnktZS55KX1mdW5jdGlvbiBSZShiLGUpe3JldHVybiBiLng9PT1lLngmJmIueT09PWUueX1mdW5jdGlvbiBSbihiLGUsaCxtKXtyZXR1cm4gUmUoYixoKSYmUmUoZSxtKXx8UmUoYixtKSYmUmUoaCxlKT8hMDowPG5jKGIsZSxoKSE9PTA8bmMoYixlLG0pJiYwPG5jKGgsbSxiKSE9PTA8bmMoaCxtLGUpfWZ1bmN0aW9uIGZzKGIsZSl7dmFyIGg9Yjtkb3tpZihoLmkhPT1iLmkmJmgubmV4dC5pIT09Yi5pJiZoLmkhPT1lLmkmJmgubmV4dC5pIT09ZS5pJiZSbihoLGgubmV4dCxiLGUpKXJldHVybiEwO2g9aC5uZXh0fXdoaWxlKGghPT1iKTtyZXR1cm4hMX1mdW5jdGlvbiB1aChiLGUpe3JldHVybiAwPm5jKGIucHJldixiLGIubmV4dCk/MDw9bmMoYixlLGIubmV4dCkmJjA8PW5jKGIsYi5wcmV2LGUpOjA+bmMoYixlLGIucHJldil8fDA+bmMoYixiLm5leHQsZSl9ZnVuY3Rpb24gZ3MoYiwKZSl7dmFyIGg9YixtPSExLHU9KGIueCtlLngpLzI7ZT0oYi55K2UueSkvMjtkbyBoLnk+ZSE9PWgubmV4dC55PmUmJmgubmV4dC55IT09aC55JiZ1PChoLm5leHQueC1oLngpKihlLWgueSkvKGgubmV4dC55LWgueSkraC54JiYobT0hbSksaD1oLm5leHQ7d2hpbGUoaCE9PWIpO3JldHVybiBtfWZ1bmN0aW9uIFNuKGIsZSl7dmFyIGg9bmV3IENrKGIuaSxiLngsYi55KSxtPW5ldyBDayhlLmksZS54LGUueSksdT1iLm5leHQsdz1lLnByZXY7Yi5uZXh0PWU7ZS5wcmV2PWI7aC5uZXh0PXU7dS5wcmV2PWg7bS5uZXh0PWg7aC5wcmV2PW07dy5uZXh0PW07bS5wcmV2PXc7cmV0dXJuIG19ZnVuY3Rpb24gUW4oYixlLGgsbSl7Yj1uZXcgQ2soYixlLGgpO20/KGIubmV4dD1tLm5leHQsYi5wcmV2PW0sbS5uZXh0LnByZXY9YixtLm5leHQ9Yik6KGIucHJldj1iLGIubmV4dD1iKTtyZXR1cm4gYn1mdW5jdGlvbiByaChiKXtiLm5leHQucHJldj1iLnByZXY7Yi5wcmV2Lm5leHQ9Yi5uZXh0O2IucHJldlomJgooYi5wcmV2Wi5uZXh0Wj1iLm5leHRaKTtiLm5leHRaJiYoYi5uZXh0Wi5wcmV2Wj1iLnByZXZaKX1mdW5jdGlvbiBDayhiLGUsaCl7dGhpcy5pPWI7dGhpcy54PWU7dGhpcy55PWg7dGhpcy5uZXh0Wj10aGlzLnByZXZaPXRoaXMuej10aGlzLm5leHQ9dGhpcy5wcmV2PW51bGw7dGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIFRyKGIsZSxoLG0pe2Zvcih2YXIgdT0wLHc9aC1tO2U8aDtlKz1tKXUrPShiW3ddLWJbZV0pKihiW2UrMV0rYlt3KzFdKSx3PWU7cmV0dXJuIHV9ZnVuY3Rpb24gVG4oYil7dmFyIGU9Yi5sZW5ndGg7MjxlJiZiW2UtMV0uZXF1YWxzKGJbMF0pJiZiLnBvcCgpfWZ1bmN0aW9uIFVuKGIsZSl7Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKyspYi5wdXNoKGVbaF0ueCksYi5wdXNoKGVbaF0ueSl9ZnVuY3Rpb24gU2UoYixlKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iRXh0cnVkZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczpiLG9wdGlvbnM6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IHpkKGIsCmUpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiB6ZChiLGUpe2Z1bmN0aW9uIGgoRyl7ZnVuY3Rpb24gSihTYSxqYixxYil7amJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJuIGpiLmNsb25lKCkubXVsdGlwbHlTY2FsYXIocWIpLmFkZChTYSl9ZnVuY3Rpb24gUShTYSxqYixxYil7dmFyIHRiPVNhLngtamIueDt2YXIgeGI9U2EueS1qYi55O3ZhciBXYj1xYi54LVNhLng7dmFyIGljPXFiLnktU2EueSxKYz10Yip0Yit4Yip4YjtpZihNYXRoLmFicyh0YippYy14YipXYik+TnVtYmVyLkVQU0lMT04pe3ZhciB5ZD1NYXRoLnNxcnQoSmMpLGJkPU1hdGguc3FydChXYipXYitpYyppYyk7SmM9amIueC14Yi95ZDtqYj1qYi55K3RiL3lkO2ljPSgocWIueC1pYy9iZC1KYykqaWMtKHFiLnkrV2IvYmQtamIpKldiKS8odGIqaWMteGIqV2IpO1diPUpjK3RiKmljLVNhLng7dGI9amIreGIqaWMtU2EueTt4Yj1XYioKV2IrdGIqdGI7aWYoMj49eGIpcmV0dXJuIG5ldyBkKFdiLHRiKTt4Yj1NYXRoLnNxcnQoeGIvMil9ZWxzZSBTYT0hMSx0Yj5OdW1iZXIuRVBTSUxPTj9XYj5OdW1iZXIuRVBTSUxPTiYmKFNhPSEwKTp0YjwtTnVtYmVyLkVQU0lMT04/V2I8LU51bWJlci5FUFNJTE9OJiYoU2E9ITApOk1hdGguc2lnbih4Yik9PT1NYXRoLnNpZ24oaWMpJiYoU2E9ITApLFNhPyhXYj0teGIseGI9TWF0aC5zcXJ0KEpjKSk6KFdiPXRiLHRiPXhiLHhiPU1hdGguc3FydChKYy8yKSk7cmV0dXJuIG5ldyBkKFdiL3hiLHRiL3hiKX1mdW5jdGlvbiBTKFNhLGpiKXtmb3Ioa2E9U2EubGVuZ3RoOzA8PS0ta2E7KXt2YXIgcWI9a2E7dmFyIHRiPWthLTE7MD50YiYmKHRiPVNhLmxlbmd0aC0xKTt2YXIgeGIsV2I9cmErMipXYTtmb3IoeGI9MDt4YjxXYjt4YisrKXt2YXIgaWM9JGEqeGIsSmM9JGEqKHhiKzEpO1goamIrcWIraWMsamIrdGIraWMsamIrdGIrSmMsamIrcWIrSmMpfX19ZnVuY3Rpb24gVChTYSxqYixxYil7c2EucHVzaChTYSk7CnNhLnB1c2goamIpO3NhLnB1c2gocWIpfWZ1bmN0aW9uIFcoU2EsamIscWIpe2lhKFNhKTtpYShqYik7aWEocWIpO1NhPXUubGVuZ3RoLzM7U2E9SWEuZ2VuZXJhdGVUb3BVVihtLHUsU2EtMyxTYS0yLFNhLTEpO2hhKFNhWzBdKTtoYShTYVsxXSk7aGEoU2FbMl0pfWZ1bmN0aW9uIFgoU2EsamIscWIsdGIpe2lhKFNhKTtpYShqYik7aWEodGIpO2lhKGpiKTtpYShxYik7aWEodGIpO1NhPXUubGVuZ3RoLzM7U2E9SWEuZ2VuZXJhdGVTaWRlV2FsbFVWKG0sdSxTYS02LFNhLTMsU2EtMixTYS0xKTtoYShTYVswXSk7aGEoU2FbMV0pO2hhKFNhWzNdKTtoYShTYVsxXSk7aGEoU2FbMl0pO2hhKFNhWzNdKX1mdW5jdGlvbiBpYShTYSl7dS5wdXNoKHNhWzMqU2FdKTt1LnB1c2goc2FbMypTYSsxXSk7dS5wdXNoKHNhWzMqU2ErMl0pfWZ1bmN0aW9uIGhhKFNhKXt3LnB1c2goU2EueCk7dy5wdXNoKFNhLnkpfXZhciBzYT1bXSxxYT12b2lkIDAhPT1lLmN1cnZlU2VnbWVudHM/ZS5jdXJ2ZVNlZ21lbnRzOgoxMixyYT12b2lkIDAhPT1lLnN0ZXBzP2Uuc3RlcHM6MSx3YT12b2lkIDAhPT1lLmRlcHRoP2UuZGVwdGg6MTAwLHBhPXZvaWQgMCE9PWUuYmV2ZWxFbmFibGVkP2UuYmV2ZWxFbmFibGVkOiEwLHZhPXZvaWQgMCE9PWUuYmV2ZWxUaGlja25lc3M/ZS5iZXZlbFRoaWNrbmVzczo2LENhPXZvaWQgMCE9PWUuYmV2ZWxTaXplP2UuYmV2ZWxTaXplOnZhLTIsVmE9dm9pZCAwIT09ZS5iZXZlbE9mZnNldD9lLmJldmVsT2Zmc2V0OjAsV2E9dm9pZCAwIT09ZS5iZXZlbFNlZ21lbnRzP2UuYmV2ZWxTZWdtZW50czozLERhPWUuZXh0cnVkZVBhdGgsSWE9dm9pZCAwIT09ZS5VVkdlbmVyYXRvcj9lLlVWR2VuZXJhdG9yOmhzO3ZvaWQgMCE9PWUuYW1vdW50JiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLHdhPWUuYW1vdW50KTt2YXIgRWE9ITE7aWYoRGEpe3ZhciBPYT1EYS5nZXRTcGFjZWRQb2ludHMocmEpOwpFYT0hMDtwYT0hMTt2YXIgaGI9RGEuY29tcHV0ZUZyZW5ldEZyYW1lcyhyYSwhMSk7dmFyIHliPW5ldyBnO3ZhciBMYT1uZXcgZzt2YXIgZWI9bmV3IGd9cGF8fChWYT1DYT12YT1XYT0wKTt2YXIgbmI7cWE9Ry5leHRyYWN0UG9pbnRzKHFhKTtHPXFhLnNoYXBlO3ZhciBOYj1xYS5ob2xlcztpZighT2QuaXNDbG9ja1dpc2UoRykpe0c9Ry5yZXZlcnNlKCk7dmFyIERiPTA7Zm9yKG5iPU5iLmxlbmd0aDtEYjxuYjtEYisrKXt2YXIgamE9TmJbRGJdO09kLmlzQ2xvY2tXaXNlKGphKSYmKE5iW0RiXT1qYS5yZXZlcnNlKCkpfX12YXIgb2E9T2QudHJpYW5ndWxhdGVTaGFwZShHLE5iKSxBYT1HO0RiPTA7Zm9yKG5iPU5iLmxlbmd0aDtEYjxuYjtEYisrKWphPU5iW0RiXSxHPUcuY29uY2F0KGphKTt2YXIgS2EsJGE9Ry5sZW5ndGgsUGEsZmI9b2EubGVuZ3RoO3FhPVtdO3ZhciBrYT0wO3ZhciBIYT1BYS5sZW5ndGg7dmFyIE5hPUhhLTE7Zm9yKEthPWthKzE7a2E8SGE7a2ErKyxOYSsrLEthKyspTmE9PT0KSGEmJihOYT0wKSxLYT09PUhhJiYoS2E9MCkscWFba2FdPVEoQWFba2FdLEFhW05hXSxBYVtLYV0pO0RhPVtdO3ZhciByYj1xYS5jb25jYXQoKTtEYj0wO2ZvcihuYj1OYi5sZW5ndGg7RGI8bmI7RGIrKyl7amE9TmJbRGJdO3ZhciBYYT1bXTtrYT0wO0hhPWphLmxlbmd0aDtOYT1IYS0xO2ZvcihLYT1rYSsxO2thPEhhO2thKyssTmErKyxLYSsrKU5hPT09SGEmJihOYT0wKSxLYT09PUhhJiYoS2E9MCksWGFba2FdPVEoamFba2FdLGphW05hXSxqYVtLYV0pO0RhLnB1c2goWGEpO3JiPXJiLmNvbmNhdChYYSl9Zm9yKE5hPTA7TmE8V2E7TmErKyl7SGE9TmEvV2E7dmFyIG1iPXZhKk1hdGguY29zKEhhKk1hdGguUEkvMik7S2E9Q2EqTWF0aC5zaW4oSGEqTWF0aC5QSS8yKStWYTtrYT0wO2ZvcihIYT1BYS5sZW5ndGg7a2E8SGE7a2ErKyl7dmFyIG9iPUooQWFba2FdLHFhW2thXSxLYSk7VChvYi54LG9iLnksLW1iKX1EYj0wO2ZvcihuYj1OYi5sZW5ndGg7RGI8bmI7RGIrKylmb3IoamE9Ck5iW0RiXSxYYT1EYVtEYl0sa2E9MCxIYT1qYS5sZW5ndGg7a2E8SGE7a2ErKylvYj1KKGphW2thXSxYYVtrYV0sS2EpLFQob2IueCxvYi55LC1tYil9S2E9Q2ErVmE7Zm9yKGthPTA7a2E8JGE7a2ErKylvYj1wYT9KKEdba2FdLHJiW2thXSxLYSk6R1trYV0sRWE/KExhLmNvcHkoaGIubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIob2IueCkseWIuY29weShoYi5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKG9iLnkpLGViLmNvcHkoT2FbMF0pLmFkZChMYSkuYWRkKHliKSxUKGViLngsZWIueSxlYi56KSk6VChvYi54LG9iLnksMCk7Zm9yKEhhPTE7SGE8PXJhO0hhKyspZm9yKGthPTA7a2E8JGE7a2ErKylvYj1wYT9KKEdba2FdLHJiW2thXSxLYSk6R1trYV0sRWE/KExhLmNvcHkoaGIubm9ybWFsc1tIYV0pLm11bHRpcGx5U2NhbGFyKG9iLngpLHliLmNvcHkoaGIuYmlub3JtYWxzW0hhXSkubXVsdGlwbHlTY2FsYXIob2IueSksZWIuY29weShPYVtIYV0pLmFkZChMYSkuYWRkKHliKSwKVChlYi54LGViLnksZWIueikpOlQob2IueCxvYi55LHdhL3JhKkhhKTtmb3IoTmE9V2EtMTswPD1OYTtOYS0tKXtIYT1OYS9XYTttYj12YSpNYXRoLmNvcyhIYSpNYXRoLlBJLzIpO0thPUNhKk1hdGguc2luKEhhKk1hdGguUEkvMikrVmE7a2E9MDtmb3IoSGE9QWEubGVuZ3RoO2thPEhhO2thKyspb2I9SihBYVtrYV0scWFba2FdLEthKSxUKG9iLngsb2IueSx3YSttYik7RGI9MDtmb3IobmI9TmIubGVuZ3RoO0RiPG5iO0RiKyspZm9yKGphPU5iW0RiXSxYYT1EYVtEYl0sa2E9MCxIYT1qYS5sZW5ndGg7a2E8SGE7a2ErKylvYj1KKGphW2thXSxYYVtrYV0sS2EpLEVhP1Qob2IueCxvYi55K09hW3JhLTFdLnksT2FbcmEtMV0ueCttYik6VChvYi54LG9iLnksd2ErbWIpfShmdW5jdGlvbigpe3ZhciBTYT11Lmxlbmd0aC8zO2lmKHBhKXt2YXIgamI9MCokYTtmb3Ioa2E9MDtrYTxmYjtrYSsrKVBhPW9hW2thXSxXKFBhWzJdK2piLFBhWzFdK2piLFBhWzBdK2piKTtqYj0kYSoocmErMipXYSk7CmZvcihrYT0wO2thPGZiO2thKyspUGE9b2Fba2FdLFcoUGFbMF0ramIsUGFbMV0ramIsUGFbMl0ramIpfWVsc2V7Zm9yKGthPTA7a2E8ZmI7a2ErKylQYT1vYVtrYV0sVyhQYVsyXSxQYVsxXSxQYVswXSk7Zm9yKGthPTA7a2E8ZmI7a2ErKylQYT1vYVtrYV0sVyhQYVswXSskYSpyYSxQYVsxXSskYSpyYSxQYVsyXSskYSpyYSl9bS5hZGRHcm91cChTYSx1Lmxlbmd0aC8zLVNhLDApfSkoKTsoZnVuY3Rpb24oKXt2YXIgU2E9dS5sZW5ndGgvMyxqYj0wO1MoQWEsamIpO2piKz1BYS5sZW5ndGg7RGI9MDtmb3IobmI9TmIubGVuZ3RoO0RiPG5iO0RiKyspamE9TmJbRGJdLFMoamEsamIpLGpiKz1qYS5sZW5ndGg7bS5hZGRHcm91cChTYSx1Lmxlbmd0aC8zLVNhLDEpfSkoKX14YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iRXh0cnVkZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczpiLG9wdGlvbnM6ZX07Yj1BcnJheS5pc0FycmF5KGIpP2I6W2JdO2Zvcih2YXIgbT10aGlzLAp1PVtdLHc9W10sQT0wLEU9Yi5sZW5ndGg7QTxFO0ErKyloKGJbQV0pO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKHUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGRhKHcsMikpO3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKX1mdW5jdGlvbiBWbihiLGUsaCl7aC5zaGFwZXM9W107aWYoQXJyYXkuaXNBcnJheShiKSlmb3IodmFyIG09MCx1PWIubGVuZ3RoO208dTttKyspaC5zaGFwZXMucHVzaChiW21dLnV1aWQpO2Vsc2UgaC5zaGFwZXMucHVzaChiLnV1aWQpO3ZvaWQgMCE9PWUuZXh0cnVkZVBhdGgmJihoLm9wdGlvbnMuZXh0cnVkZVBhdGg9ZS5leHRydWRlUGF0aC50b0pTT04oKSk7cmV0dXJuIGh9ZnVuY3Rpb24gdmgoYixlKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVGV4dEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3RleHQ6YixwYXJhbWV0ZXJzOmV9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBYZihiLGUpKTt0aGlzLm1lcmdlVmVydGljZXMoKX0KZnVuY3Rpb24gWGYoYixlKXtlPWV8fHt9O3ZhciBoPWUuZm9udDtpZighaHx8IWguaXNGb250KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLG5ldyB6YTtiPWguZ2VuZXJhdGVTaGFwZXMoYixlLnNpemUpO2UuZGVwdGg9dm9pZCAwIT09ZS5oZWlnaHQ/ZS5oZWlnaHQ6NTA7dm9pZCAwPT09ZS5iZXZlbFRoaWNrbmVzcyYmKGUuYmV2ZWxUaGlja25lc3M9MTApO3ZvaWQgMD09PWUuYmV2ZWxTaXplJiYoZS5iZXZlbFNpemU9OCk7dm9pZCAwPT09ZS5iZXZlbEVuYWJsZWQmJihlLmJldmVsRW5hYmxlZD0hMSk7emQuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJUZXh0QnVmZmVyR2VvbWV0cnkifWZ1bmN0aW9uIHdoKGIsZSxoLG0sdSx3LEEpe3phLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTcGhlcmVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6Yix3aWR0aFNlZ21lbnRzOmUsCmhlaWdodFNlZ21lbnRzOmgscGhpU3RhcnQ6bSxwaGlMZW5ndGg6dSx0aGV0YVN0YXJ0OncsdGhldGFMZW5ndGg6QX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IHNlKGIsZSxoLG0sdSx3LEEpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBzZShiLGUsaCxtLHUsdyxBKXt4YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsd2lkdGhTZWdtZW50czplLGhlaWdodFNlZ21lbnRzOmgscGhpU3RhcnQ6bSxwaGlMZW5ndGg6dSx0aGV0YVN0YXJ0OncsdGhldGFMZW5ndGg6QX07Yj1ifHwxO2U9TWF0aC5tYXgoMyxNYXRoLmZsb29yKGUpfHw4KTtoPU1hdGgubWF4KDIsTWF0aC5mbG9vcihoKXx8Nik7bT12b2lkIDAhPT1tP206MDt1PXZvaWQgMCE9PXU/dToyKk1hdGguUEk7dz12b2lkIDAhPT13P3c6MDtBPXZvaWQgMCE9PUE/QTpNYXRoLlBJO3ZhciBFPU1hdGgubWluKHcrQSxNYXRoLlBJKSxHLApKLFE9MCxTPVtdLFQ9bmV3IGcsVz1uZXcgZyxYPVtdLGlhPVtdLGhhPVtdLHNhPVtdO2ZvcihKPTA7Sjw9aDtKKyspe3ZhciBxYT1bXSxyYT1KL2gsd2E9MDswPT1KJiYwPT13P3dhPS41L2U6Sj09aCYmRT09TWF0aC5QSSYmKHdhPS0uNS9lKTtmb3IoRz0wO0c8PWU7RysrKXt2YXIgcGE9Ry9lO1QueD0tYipNYXRoLmNvcyhtK3BhKnUpKk1hdGguc2luKHcrcmEqQSk7VC55PWIqTWF0aC5jb3ModytyYSpBKTtULno9YipNYXRoLnNpbihtK3BhKnUpKk1hdGguc2luKHcrcmEqQSk7aWEucHVzaChULngsVC55LFQueik7Vy5jb3B5KFQpLm5vcm1hbGl6ZSgpO2hhLnB1c2goVy54LFcueSxXLnopO3NhLnB1c2gocGErd2EsMS1yYSk7cWEucHVzaChRKyspfVMucHVzaChxYSl9Zm9yKEo9MDtKPGg7SisrKWZvcihHPTA7RzxlO0crKyliPVNbSl1bRysxXSxtPVNbSl1bR10sdT1TW0orMV1bR10sQT1TW0orMV1bRysxXSwoMCE9PUp8fDA8dykmJlgucHVzaChiLG0sQSksKEohPT1oLTF8fEU8TWF0aC5QSSkmJgpYLnB1c2gobSx1LEEpO3RoaXMuc2V0SW5kZXgoWCk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEoaWEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBkYShoYSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgZGEoc2EsMikpfWZ1bmN0aW9uIHhoKGIsZSxoLG0sdSx3KXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUmluZ0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2lubmVyUmFkaXVzOmIsb3V0ZXJSYWRpdXM6ZSx0aGV0YVNlZ21lbnRzOmgscGhpU2VnbWVudHM6bSx0aGV0YVN0YXJ0OnUsdGhldGFMZW5ndGg6d307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFlmKGIsZSxoLG0sdSx3KSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gWWYoYixlLGgsbSx1LHcpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJSaW5nQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6YixvdXRlclJhZGl1czplLHRoZXRhU2VnbWVudHM6aCwKcGhpU2VnbWVudHM6bSx0aGV0YVN0YXJ0OnUsdGhldGFMZW5ndGg6d307Yj1ifHwuNTtlPWV8fDE7dT12b2lkIDAhPT11P3U6MDt3PXZvaWQgMCE9PXc/dzoyKk1hdGguUEk7aD12b2lkIDAhPT1oP01hdGgubWF4KDMsaCk6ODttPXZvaWQgMCE9PW0/TWF0aC5tYXgoMSxtKToxO3ZhciBBPVtdLEU9W10sRz1bXSxKPVtdLFE9YixTPShlLWIpL20sVD1uZXcgZyxXPW5ldyBkLFgsaWE7Zm9yKFg9MDtYPD1tO1grKyl7Zm9yKGlhPTA7aWE8PWg7aWErKyliPXUraWEvaCp3LFQueD1RKk1hdGguY29zKGIpLFQueT1RKk1hdGguc2luKGIpLEUucHVzaChULngsVC55LFQueiksRy5wdXNoKDAsMCwxKSxXLng9KFQueC9lKzEpLzIsVy55PShULnkvZSsxKS8yLEoucHVzaChXLngsVy55KTtRKz1TfWZvcihYPTA7WDxtO1grKylmb3IoZT1YKihoKzEpLGlhPTA7aWE8aDtpYSsrKWI9aWErZSx1PWIraCsxLHc9YitoKzIsUT1iKzEsQS5wdXNoKGIsdSxRKSxBLnB1c2godSx3LFEpO3RoaXMuc2V0SW5kZXgoQSk7CnRoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKEUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBkYShHLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBkYShKLDIpKX1mdW5jdGlvbiB5aChiLGUsaCxtKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGF0aGVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwb2ludHM6YixzZWdtZW50czplLHBoaVN0YXJ0OmgscGhpTGVuZ3RoOm19O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBaZihiLGUsaCxtKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gWmYoYixlLGgsbSl7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxhdGhlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cG9pbnRzOmIsc2VnbWVudHM6ZSxwaGlTdGFydDpoLHBoaUxlbmd0aDptfTtlPU1hdGguZmxvb3IoZSl8fDEyO2g9aHx8MDttPW18fDIqTWF0aC5QSTttPWxiLmNsYW1wKG0sMCwyKk1hdGguUEkpO3ZhciB1PQpbXSx3PVtdLEE9W10sRT0xL2UsRz1uZXcgZyxKPW5ldyBkLFE7Zm9yKFE9MDtRPD1lO1ErKyl7dmFyIFM9aCtRKkUqbTt2YXIgVD1NYXRoLnNpbihTKSxXPU1hdGguY29zKFMpO2ZvcihTPTA7Uzw9Yi5sZW5ndGgtMTtTKyspRy54PWJbU10ueCpULEcueT1iW1NdLnksRy56PWJbU10ueCpXLHcucHVzaChHLngsRy55LEcueiksSi54PVEvZSxKLnk9Uy8oYi5sZW5ndGgtMSksQS5wdXNoKEoueCxKLnkpfWZvcihRPTA7UTxlO1ErKylmb3IoUz0wO1M8Yi5sZW5ndGgtMTtTKyspaD1TK1EqYi5sZW5ndGgsRT1oK2IubGVuZ3RoLEc9aCtiLmxlbmd0aCsxLEo9aCsxLHUucHVzaChoLEUsSiksdS5wdXNoKEUsRyxKKTt0aGlzLnNldEluZGV4KHUpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKHcsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGRhKEEsMikpO3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtpZihtPT09MipNYXRoLlBJKWZvcihtPXRoaXMuYXR0cmlidXRlcy5ub3JtYWwuYXJyYXksCnU9bmV3IGcsdz1uZXcgZyxBPW5ldyBnLGg9ZSpiLmxlbmd0aCozLFM9UT0wO1E8Yi5sZW5ndGg7USsrLFMrPTMpdS54PW1bUyswXSx1Lnk9bVtTKzFdLHUuej1tW1MrMl0sdy54PW1baCtTKzBdLHcueT1tW2grUysxXSx3Lno9bVtoK1MrMl0sQS5hZGRWZWN0b3JzKHUsdykubm9ybWFsaXplKCksbVtTKzBdPW1baCtTKzBdPUEueCxtW1MrMV09bVtoK1MrMV09QS55LG1bUysyXT1tW2grUysyXT1BLnp9ZnVuY3Rpb24gVGUoYixlKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSI7Im9iamVjdCI9PT10eXBlb2YgZSYmKGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGVHZW9tZXRyeTogT3B0aW9ucyBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZC4iKSxlPWUuY3VydmVTZWdtZW50cyk7dGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6YixjdXJ2ZVNlZ21lbnRzOmV9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBVZShiLGUpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBVZShiLAplKXtmdW5jdGlvbiBoKFEpe3ZhciBTLFQ9dS5sZW5ndGgvMztRPVEuZXh0cmFjdFBvaW50cyhlKTt2YXIgVz1RLnNoYXBlLFg9US5ob2xlczshMT09PU9kLmlzQ2xvY2tXaXNlKFcpJiYoVz1XLnJldmVyc2UoKSk7UT0wO2ZvcihTPVgubGVuZ3RoO1E8UztRKyspe3ZhciBpYT1YW1FdOyEwPT09T2QuaXNDbG9ja1dpc2UoaWEpJiYoWFtRXT1pYS5yZXZlcnNlKCkpfXZhciBoYT1PZC50cmlhbmd1bGF0ZVNoYXBlKFcsWCk7UT0wO2ZvcihTPVgubGVuZ3RoO1E8UztRKyspaWE9WFtRXSxXPVcuY29uY2F0KGlhKTtRPTA7Zm9yKFM9Vy5sZW5ndGg7UTxTO1ErKylpYT1XW1FdLHUucHVzaChpYS54LGlhLnksMCksdy5wdXNoKDAsMCwxKSxBLnB1c2goaWEueCxpYS55KTtRPTA7Zm9yKFM9aGEubGVuZ3RoO1E8UztRKyspVz1oYVtRXSxtLnB1c2goV1swXStULFdbMV0rVCxXWzJdK1QpLEcrPTN9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz0Ke3NoYXBlczpiLGN1cnZlU2VnbWVudHM6ZX07ZT1lfHwxMjt2YXIgbT1bXSx1PVtdLHc9W10sQT1bXSxFPTAsRz0wO2lmKCExPT09QXJyYXkuaXNBcnJheShiKSloKGIpO2Vsc2UgZm9yKHZhciBKPTA7SjxiLmxlbmd0aDtKKyspaChiW0pdKSx0aGlzLmFkZEdyb3VwKEUsRyxKKSxFKz1HLEc9MDt0aGlzLnNldEluZGV4KG0pO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKHUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBkYSh3LDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBkYShBLDIpKX1mdW5jdGlvbiBXbihiLGUpe2Uuc2hhcGVzPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBoPTAsbT1iLmxlbmd0aDtoPG07aCsrKWUuc2hhcGVzLnB1c2goYltoXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2goYi51dWlkKTtyZXR1cm4gZX1mdW5jdGlvbiAkZihiLGUpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJFZGdlc0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9Cnt0aHJlc2hvbGRBbmdsZTplfTt2YXIgaD1bXTtlPU1hdGguY29zKGxiLkRFRzJSQUQqKHZvaWQgMCE9PWU/ZToxKSk7dmFyIG09WzAsMF0sdT17fSx3PVsiYSIsImIiLCJjIl07aWYoYi5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgQT1uZXcgemE7QS5mcm9tQnVmZmVyR2VvbWV0cnkoYil9ZWxzZSBBPWIuY2xvbmUoKTtBLm1lcmdlVmVydGljZXMoKTtBLmNvbXB1dGVGYWNlTm9ybWFscygpO2I9QS52ZXJ0aWNlcztBPUEuZmFjZXM7Zm9yKHZhciBFPTAsRz1BLmxlbmd0aDtFPEc7RSsrKWZvcih2YXIgSj1BW0VdLFE9MDszPlE7USsrKXt2YXIgUz1KW3dbUV1dO3ZhciBUPUpbd1soUSsxKSUzXV07bVswXT1NYXRoLm1pbihTLFQpO21bMV09TWF0aC5tYXgoUyxUKTtTPW1bMF0rIiwiK21bMV07dm9pZCAwPT09dVtTXT91W1NdPXtpbmRleDE6bVswXSxpbmRleDI6bVsxXSxmYWNlMTpFLGZhY2UyOnZvaWQgMH06dVtTXS5mYWNlMj1FfWZvcihTIGluIHUpaWYobT11W1NdLHZvaWQgMD09PW0uZmFjZTJ8fApBW20uZmFjZTFdLm5vcm1hbC5kb3QoQVttLmZhY2UyXS5ub3JtYWwpPD1lKXc9YlttLmluZGV4MV0saC5wdXNoKHcueCx3Lnksdy56KSx3PWJbbS5pbmRleDJdLGgucHVzaCh3Lngsdy55LHcueik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEoaCwzKSl9ZnVuY3Rpb24gVmUoYixlLGgsbSx1LHcsQSxFKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ3lsaW5kZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXNUb3A6YixyYWRpdXNCb3R0b206ZSxoZWlnaHQ6aCxyYWRpYWxTZWdtZW50czptLGhlaWdodFNlZ21lbnRzOnUsb3BlbkVuZGVkOncsdGhldGFTdGFydDpBLHRoZXRhTGVuZ3RoOkV9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBQZChiLGUsaCxtLHUsdyxBLEUpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBQZChiLGUsaCxtLHUsdyxBLEUpe2Z1bmN0aW9uIEcocWEpe3ZhciByYSx3YT1uZXcgZCxwYT1uZXcgZyx2YT0wLENhPSEwPT09CnFhP2I6ZSxWYT0hMD09PXFhPzE6LTE7dmFyIFdhPVg7Zm9yKHJhPTE7cmE8PW07cmErKylTLnB1c2goMCxoYSpWYSwwKSxULnB1c2goMCxWYSwwKSxXLnB1c2goLjUsLjUpLFgrKzt2YXIgRGE9WDtmb3IocmE9MDtyYTw9bTtyYSsrKXt2YXIgSWE9cmEvbSpFK0EsRWE9TWF0aC5jb3MoSWEpO0lhPU1hdGguc2luKElhKTtwYS54PUNhKklhO3BhLnk9aGEqVmE7cGEuej1DYSpFYTtTLnB1c2gocGEueCxwYS55LHBhLnopO1QucHVzaCgwLFZhLDApO3dhLng9LjUqRWErLjU7d2EueT0uNSpJYSpWYSsuNTtXLnB1c2god2EueCx3YS55KTtYKyt9Zm9yKHJhPTA7cmE8bTtyYSsrKXdhPVdhK3JhLHBhPURhK3JhLCEwPT09cWE/US5wdXNoKHBhLHBhKzEsd2EpOlEucHVzaChwYSsxLHBhLHdhKSx2YSs9MztKLmFkZEdyb3VwKHNhLHZhLCEwPT09cWE/MToyKTtzYSs9dmF9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzVG9wOmIsCnJhZGl1c0JvdHRvbTplLGhlaWdodDpoLHJhZGlhbFNlZ21lbnRzOm0saGVpZ2h0U2VnbWVudHM6dSxvcGVuRW5kZWQ6dyx0aGV0YVN0YXJ0OkEsdGhldGFMZW5ndGg6RX07dmFyIEo9dGhpcztiPXZvaWQgMCE9PWI/YjoxO2U9dm9pZCAwIT09ZT9lOjE7aD1ofHwxO209TWF0aC5mbG9vcihtKXx8ODt1PU1hdGguZmxvb3IodSl8fDE7dz12b2lkIDAhPT13P3c6ITE7QT12b2lkIDAhPT1BP0E6MDtFPXZvaWQgMCE9PUU/RToyKk1hdGguUEk7dmFyIFE9W10sUz1bXSxUPVtdLFc9W10sWD0wLGlhPVtdLGhhPWgvMixzYT0wOyhmdW5jdGlvbigpe3ZhciBxYSxyYSx3YT1uZXcgZyxwYT1uZXcgZyx2YT0wLENhPShlLWIpL2g7Zm9yKHJhPTA7cmE8PXU7cmErKyl7dmFyIFZhPVtdLFdhPXJhL3UsRGE9V2EqKGUtYikrYjtmb3IocWE9MDtxYTw9bTtxYSsrKXt2YXIgSWE9cWEvbSxFYT1JYSpFK0EsT2E9TWF0aC5zaW4oRWEpO0VhPU1hdGguY29zKEVhKTtwYS54PURhKk9hO3BhLnk9LVdhKmgraGE7CnBhLno9RGEqRWE7Uy5wdXNoKHBhLngscGEueSxwYS56KTt3YS5zZXQoT2EsQ2EsRWEpLm5vcm1hbGl6ZSgpO1QucHVzaCh3YS54LHdhLnksd2Eueik7Vy5wdXNoKElhLDEtV2EpO1ZhLnB1c2goWCsrKX1pYS5wdXNoKFZhKX1mb3IocWE9MDtxYTxtO3FhKyspZm9yKHJhPTA7cmE8dTtyYSsrKXdhPWlhW3JhKzFdW3FhXSxwYT1pYVtyYSsxXVtxYSsxXSxDYT1pYVtyYV1bcWErMV0sUS5wdXNoKGlhW3JhXVtxYV0sd2EsQ2EpLFEucHVzaCh3YSxwYSxDYSksdmErPTY7Si5hZGRHcm91cChzYSx2YSwwKTtzYSs9dmF9KSgpOyExPT09dyYmKDA8YiYmRyghMCksMDxlJiZHKCExKSk7dGhpcy5zZXRJbmRleChRKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShTLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZGEoVCwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgZGEoVywyKSl9ZnVuY3Rpb24gemgoYixlLGgsbSx1LHcsQSl7VmUuY2FsbCh0aGlzLAowLGIsZSxoLG0sdSx3LEEpO3RoaXMudHlwZT0iQ29uZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGhlaWdodDplLHJhZGlhbFNlZ21lbnRzOmgsaGVpZ2h0U2VnbWVudHM6bSxvcGVuRW5kZWQ6dSx0aGV0YVN0YXJ0OncsdGhldGFMZW5ndGg6QX19ZnVuY3Rpb24gQWgoYixlLGgsbSx1LHcsQSl7UGQuY2FsbCh0aGlzLDAsYixlLGgsbSx1LHcsQSk7dGhpcy50eXBlPSJDb25lQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsaGVpZ2h0OmUscmFkaWFsU2VnbWVudHM6aCxoZWlnaHRTZWdtZW50czptLG9wZW5FbmRlZDp1LHRoZXRhU3RhcnQ6dyx0aGV0YUxlbmd0aDpBfX1mdW5jdGlvbiBCaChiLGUsaCxtKXt6YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmgsdGhldGFMZW5ndGg6bX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGFnKGIsCmUsaCxtKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gYWcoYixlLGgsbSl7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkNpcmNsZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLHNlZ21lbnRzOmUsdGhldGFTdGFydDpoLHRoZXRhTGVuZ3RoOm19O2I9Ynx8MTtlPXZvaWQgMCE9PWU/TWF0aC5tYXgoMyxlKTo4O2g9dm9pZCAwIT09aD9oOjA7bT12b2lkIDAhPT1tP206MipNYXRoLlBJO3ZhciB1PVtdLHc9W10sQT1bXSxFPVtdLEcsSj1uZXcgZyxRPW5ldyBkO3cucHVzaCgwLDAsMCk7QS5wdXNoKDAsMCwxKTtFLnB1c2goLjUsLjUpO3ZhciBTPTA7Zm9yKEc9MztTPD1lO1MrKyxHKz0zKXt2YXIgVD1oK1MvZSptO0oueD1iKk1hdGguY29zKFQpO0oueT1iKk1hdGguc2luKFQpO3cucHVzaChKLngsSi55LEoueik7QS5wdXNoKDAsMCwxKTtRLng9KHdbR10vYisxKS8yO1EueT0od1tHKzFdL2IrMSkvMjtFLnB1c2goUS54LFEueSl9Zm9yKEc9MTtHPD0KZTtHKyspdS5wdXNoKEcsRysxLDApO3RoaXMuc2V0SW5kZXgodSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEodywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGRhKEEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGRhKEUsMikpfWZ1bmN0aW9uIFdlKGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYWRvd01hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBJKDApO3RoaXMudHJhbnNwYXJlbnQ9ITA7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gYmcoYil7dWIuY2FsbCh0aGlzLGIpO3RoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifWZ1bmN0aW9uIEFkKGIpe00uY2FsbCh0aGlzKTt0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifTt0aGlzLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBJKDE2Nzc3MjE1KTt0aGlzLm1ldGFsbmVzcz10aGlzLnJvdWdobmVzcz0uNTt0aGlzLmxpZ2h0TWFwPXRoaXMubWFwPQpudWxsO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9MTt0aGlzLmFvTWFwPW51bGw7dGhpcy5hb01hcEludGVuc2l0eT0xO3RoaXMuZW1pc3NpdmU9bmV3IEkoMCk7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xO3RoaXMuYnVtcE1hcD10aGlzLmVtaXNzaXZlTWFwPW51bGw7dGhpcy5idW1wU2NhbGU9MTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsTWFwVHlwZT0wO3RoaXMubm9ybWFsU2NhbGU9bmV3IGQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMubWV0YWxuZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwPW51bGw7dGhpcy5lbnZNYXBJbnRlbnNpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0KInJvdW5kIjt0aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIFhlKGIpe0FkLmNhbGwodGhpcyk7dGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn07dGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCI7dGhpcy5yZWZsZWN0aXZpdHk9LjU7dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXQ9MDt0aGlzLnNoZWVuPW51bGw7dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgZCgxLDEpO3RoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGw7dGhpcy50cmFuc3BhcmVuY3k9MDt0aGlzLnNldFZhbHVlcyhiKX1mdW5jdGlvbiBkZChiKXtNLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCI7dGhpcy5jb2xvcj1uZXcgSSgxNjc3NzIxNSk7dGhpcy5zcGVjdWxhcj1uZXcgSSgxMTE4NDgxKTt0aGlzLnNoaW5pbmVzcz0zMDt0aGlzLmxpZ2h0TWFwPQp0aGlzLm1hcD1udWxsO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9MTt0aGlzLmFvTWFwPW51bGw7dGhpcy5hb01hcEludGVuc2l0eT0xO3RoaXMuZW1pc3NpdmU9bmV3IEkoMCk7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xO3RoaXMuYnVtcE1hcD10aGlzLmVtaXNzaXZlTWFwPW51bGw7dGhpcy5idW1wU2NhbGU9MTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsTWFwVHlwZT0wO3RoaXMubm9ybWFsU2NhbGU9bmV3IGQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9bnVsbDt0aGlzLmNvbWJpbmU9MDt0aGlzLnJlZmxlY3Rpdml0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPQoicm91bmQiO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gWWUoYil7ZGQuY2FsbCh0aGlzKTt0aGlzLmRlZmluZXM9e1RPT046IiJ9O3RoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCI7dGhpcy5ncmFkaWVudE1hcD1udWxsO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIFplKGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCI7dGhpcy5idW1wTWFwPW51bGw7dGhpcy5idW1wU2NhbGU9MTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsTWFwVHlwZT0wO3RoaXMubm9ybWFsU2NhbGU9bmV3IGQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPQp0aGlzLnNraW5uaW5nPXRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uICRlKGIpe00uY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hMYW1iZXJ0TWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEkoMTY3NzcyMTUpO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVtaXNzaXZlPW5ldyBJKDApO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MTt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9dGhpcy5lbWlzc2l2ZU1hcD1udWxsO3RoaXMuY29tYmluZT0wO3RoaXMucmVmbGVjdGl2aXR5PTE7dGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4O3RoaXMud2lyZWZyYW1lPSExO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPTE7dGhpcy53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIjsKdGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhiKX1mdW5jdGlvbiBhZihiKXtNLmNhbGwodGhpcyk7dGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9O3RoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBJKDE2Nzc3MjE1KTt0aGlzLmJ1bXBNYXA9dGhpcy5tYXA9dGhpcy5tYXRjYXA9bnVsbDt0aGlzLmJ1bXBTY2FsZT0xO3RoaXMubm9ybWFsTWFwPW51bGw7dGhpcy5ub3JtYWxNYXBUeXBlPTA7dGhpcy5ub3JtYWxTY2FsZT1uZXcgZCgxLDEpO3RoaXMuZGlzcGxhY2VtZW50TWFwPW51bGw7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz0wO3RoaXMuYWxwaGFNYXA9bnVsbDt0aGlzLmxpZ2h0cz10aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIGJmKGIpe09iLmNhbGwodGhpcyk7CnRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIjt0aGlzLnNjYWxlPTE7dGhpcy5kYXNoU2l6ZT0zO3RoaXMuZ2FwU2l6ZT0xO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIEtjKGIsZSxoLG0pe3RoaXMucGFyYW1ldGVyUG9zaXRpb25zPWI7dGhpcy5fY2FjaGVkSW5kZXg9MDt0aGlzLnJlc3VsdEJ1ZmZlcj12b2lkIDAhPT1tP206bmV3IGUuY29uc3RydWN0b3IoaCk7dGhpcy5zYW1wbGVWYWx1ZXM9ZTt0aGlzLnZhbHVlU2l6ZT1ofWZ1bmN0aW9uIEJpKGIsZSxoLG0pe0tjLmNhbGwodGhpcyxiLGUsaCxtKTt0aGlzLl9vZmZzZXROZXh0PXRoaXMuX3dlaWdodE5leHQ9dGhpcy5fb2Zmc2V0UHJldj10aGlzLl93ZWlnaHRQcmV2PS0wfWZ1bmN0aW9uIENoKGIsZSxoLG0pe0tjLmNhbGwodGhpcyxiLGUsaCxtKX1mdW5jdGlvbiBDaShiLGUsaCxtKXtLYy5jYWxsKHRoaXMsYixlLGgsbSl9ZnVuY3Rpb24gb2MoYixlLGgsbSl7aWYodm9pZCAwPT09Yil0aHJvdyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgbmFtZSBpcyB1bmRlZmluZWQiKTsKaWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBubyBrZXlmcmFtZXMgaW4gdHJhY2sgbmFtZWQgIitiKTt0aGlzLm5hbWU9Yjt0aGlzLnRpbWVzPWpjLmNvbnZlcnRBcnJheShlLHRoaXMuVGltZUJ1ZmZlclR5cGUpO3RoaXMudmFsdWVzPWpjLmNvbnZlcnRBcnJheShoLHRoaXMuVmFsdWVCdWZmZXJUeXBlKTt0aGlzLnNldEludGVycG9sYXRpb24obXx8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gRGkoYixlLGgpe29jLmNhbGwodGhpcyxiLGUsaCl9ZnVuY3Rpb24gRWkoYixlLGgsbSl7b2MuY2FsbCh0aGlzLGIsZSxoLG0pfWZ1bmN0aW9uIGNnKGIsZSxoLG0pe29jLmNhbGwodGhpcyxiLGUsaCxtKX1mdW5jdGlvbiBGaShiLGUsaCxtKXtLYy5jYWxsKHRoaXMsYixlLGgsbSl9ZnVuY3Rpb24gRGgoYixlLGgsbSl7b2MuY2FsbCh0aGlzLGIsZSxoLG0pfWZ1bmN0aW9uIEdpKGIsZSxoLG0pe29jLmNhbGwodGhpcywKYixlLGgsbSl9ZnVuY3Rpb24gZGcoYixlLGgsbSl7b2MuY2FsbCh0aGlzLGIsZSxoLG0pfWZ1bmN0aW9uIFJjKGIsZSxoKXt0aGlzLm5hbWU9Yjt0aGlzLnRyYWNrcz1oO3RoaXMuZHVyYXRpb249dm9pZCAwIT09ZT9lOi0xO3RoaXMudXVpZD1sYi5nZW5lcmF0ZVVVSUQoKTswPnRoaXMuZHVyYXRpb24mJnRoaXMucmVzZXREdXJhdGlvbigpfWZ1bmN0aW9uIGlzKGIpe3N3aXRjaChiLnRvTG93ZXJDYXNlKCkpe2Nhc2UgInNjYWxhciI6Y2FzZSAiZG91YmxlIjpjYXNlICJmbG9hdCI6Y2FzZSAibnVtYmVyIjpjYXNlICJpbnRlZ2VyIjpyZXR1cm4gY2c7Y2FzZSAidmVjdG9yIjpjYXNlICJ2ZWN0b3IyIjpjYXNlICJ2ZWN0b3IzIjpjYXNlICJ2ZWN0b3I0IjpyZXR1cm4gZGc7Y2FzZSAiY29sb3IiOnJldHVybiBFaTtjYXNlICJxdWF0ZXJuaW9uIjpyZXR1cm4gRGg7Y2FzZSAiYm9vbCI6Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIERpO2Nhc2UgInN0cmluZyI6cmV0dXJuIEdpfXRocm93IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIisKYik7fWZ1bmN0aW9uIGpzKGIpe2lmKHZvaWQgMD09PWIudHlwZSl0aHJvdyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTt2YXIgZT1pcyhiLnR5cGUpO2lmKHZvaWQgMD09PWIudGltZXMpe3ZhciBoPVtdLG09W107amMuZmxhdHRlbkpTT04oYi5rZXlzLGgsbSwidmFsdWUiKTtiLnRpbWVzPWg7Yi52YWx1ZXM9bX1yZXR1cm4gdm9pZCAwIT09ZS5wYXJzZT9lLnBhcnNlKGIpOm5ldyBlKGIubmFtZSxiLnRpbWVzLGIudmFsdWVzLGIuaW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gRGsoYixlLGgpe3ZhciBtPXRoaXMsdT0hMSx3PTAsQT0wLEU9dm9pZCAwO3RoaXMub25TdGFydD12b2lkIDA7dGhpcy5vbkxvYWQ9Yjt0aGlzLm9uUHJvZ3Jlc3M9ZTt0aGlzLm9uRXJyb3I9aDt0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihHKXtBKys7aWYoITE9PT11JiZ2b2lkIDAhPT1tLm9uU3RhcnQpbS5vblN0YXJ0KEcsdyxBKTt1PSEwfTsKdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKEcpe3crKztpZih2b2lkIDAhPT1tLm9uUHJvZ3Jlc3MpbS5vblByb2dyZXNzKEcsdyxBKTtpZih3PT09QSYmKHU9ITEsdm9pZCAwIT09bS5vbkxvYWQpKW0ub25Mb2FkKCl9O3RoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKEcpe2lmKHZvaWQgMCE9PW0ub25FcnJvciltLm9uRXJyb3IoRyl9O3RoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbihHKXtyZXR1cm4gRT9FKEcpOkd9O3RoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24oRyl7RT1HO3JldHVybiB0aGlzfX1mdW5jdGlvbiBLYihiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOlhuO3RoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyI7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5wYXRoPSIifWZ1bmN0aW9uIFNjKGIpe0tiLmNhbGwodGhpcyxiKX1mdW5jdGlvbiBFayhiKXtLYi5jYWxsKHRoaXMsYil9ZnVuY3Rpb24gRmsoYil7S2IuY2FsbCh0aGlzLGIpO3RoaXMuX3BhcnNlcj1udWxsfWZ1bmN0aW9uIEhpKGIpe0tiLmNhbGwodGhpcywKYik7dGhpcy5fcGFyc2VyPW51bGx9ZnVuY3Rpb24gZWcoYil7S2IuY2FsbCh0aGlzLGIpfWZ1bmN0aW9uIElpKGIpe0tiLmNhbGwodGhpcyxiKX1mdW5jdGlvbiBKaShiKXtLYi5jYWxsKHRoaXMsYil9ZnVuY3Rpb24gYWIoKXt0aGlzLnR5cGU9IkN1cnZlIjt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9ZnVuY3Rpb24gTGMoYixlLGgsbSx1LHcsQSxFKXthYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iRWxsaXBzZUN1cnZlIjt0aGlzLmFYPWJ8fDA7dGhpcy5hWT1lfHwwO3RoaXMueFJhZGl1cz1ofHwxO3RoaXMueVJhZGl1cz1tfHwxO3RoaXMuYVN0YXJ0QW5nbGU9dXx8MDt0aGlzLmFFbmRBbmdsZT13fHwyKk1hdGguUEk7dGhpcy5hQ2xvY2t3aXNlPUF8fCExO3RoaXMuYVJvdGF0aW9uPUV8fDB9ZnVuY3Rpb24gZmcoYixlLGgsbSx1LHcpe0xjLmNhbGwodGhpcyxiLGUsaCxoLG0sdSx3KTt0aGlzLnR5cGU9IkFyY0N1cnZlIn1mdW5jdGlvbiBHaygpe2Z1bmN0aW9uIGIodyxBLEUsCkcpe2U9dztoPUU7bT0tMyp3KzMqQS0yKkUtRzt1PTIqdy0yKkErRStHfXZhciBlPTAsaD0wLG09MCx1PTA7cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHcsQSxFLEcsSil7YihBLEUsSiooRS13KSxKKihHLUEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHcsQSxFLEcsSixRLFMpe2IoQSxFLCgoQS13KS9KLShFLXcpLyhKK1EpKyhFLUEpL1EpKlEsKChFLUEpL1EtKEctQSkvKFErUykrKEctRSkvUykqUSl9LGNhbGM6ZnVuY3Rpb24odyl7dmFyIEE9dyp3O3JldHVybiBlK2gqdyttKkErdSpBKnd9fX1mdW5jdGlvbiB1YyhiLGUsaCxtKXthYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyI7dGhpcy5wb2ludHM9Ynx8W107dGhpcy5jbG9zZWQ9ZXx8ITE7dGhpcy5jdXJ2ZVR5cGU9aHx8ImNlbnRyaXBldGFsIjt0aGlzLnRlbnNpb249bXx8LjV9ZnVuY3Rpb24gWW4oYixlLGgsbSx1KXtlPS41KihtLWUpO3U9LjUqKHUtaCk7dmFyIHc9CmIqYjtyZXR1cm4oMipoLTIqbStlK3UpKmIqdysoLTMqaCszKm0tMiplLXUpKncrZSpiK2h9ZnVuY3Rpb24ga3MoYixlKXtiPTEtYjtyZXR1cm4gYipiKmV9ZnVuY3Rpb24gbHMoYixlKXtyZXR1cm4gMiooMS1iKSpiKmV9ZnVuY3Rpb24gbXMoYixlKXtyZXR1cm4gYipiKmV9ZnVuY3Rpb24gRWgoYixlLGgsbSl7cmV0dXJuIGtzKGIsZSkrbHMoYixoKSttcyhiLG0pfWZ1bmN0aW9uIG5zKGIsZSl7Yj0xLWI7cmV0dXJuIGIqYipiKmV9ZnVuY3Rpb24gb3MoYixlKXt2YXIgaD0xLWI7cmV0dXJuIDMqaCpoKmIqZX1mdW5jdGlvbiBwcyhiLGUpe3JldHVybiAzKigxLWIpKmIqYiplfWZ1bmN0aW9uIHFzKGIsZSl7cmV0dXJuIGIqYipiKmV9ZnVuY3Rpb24gRmgoYixlLGgsbSx1KXtyZXR1cm4gbnMoYixlKStvcyhiLGgpK3BzKGIsbSkrcXMoYix1KX1mdW5jdGlvbiBlZChiLGUsaCxtKXthYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSI7dGhpcy52MD1ifHxuZXcgZDsKdGhpcy52MT1lfHxuZXcgZDt0aGlzLnYyPWh8fG5ldyBkO3RoaXMudjM9bXx8bmV3IGR9ZnVuY3Rpb24gQmQoYixlLGgsbSl7YWIuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIjt0aGlzLnYwPWJ8fG5ldyBnO3RoaXMudjE9ZXx8bmV3IGc7dGhpcy52Mj1ofHxuZXcgZzt0aGlzLnYzPW18fG5ldyBnfWZ1bmN0aW9uIEdjKGIsZSl7YWIuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmVDdXJ2ZSI7dGhpcy52MT1ifHxuZXcgZDt0aGlzLnYyPWV8fG5ldyBkfWZ1bmN0aW9uIGZkKGIsZSl7YWIuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpbmVDdXJ2ZTMiO3RoaXMudjE9Ynx8bmV3IGc7dGhpcy52Mj1lfHxuZXcgZ31mdW5jdGlvbiBnZChiLGUsaCl7YWIuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlIjt0aGlzLnYwPWJ8fG5ldyBkO3RoaXMudjE9ZXx8bmV3IGQ7dGhpcy52Mj1ofHxuZXcgZH1mdW5jdGlvbiBDZChiLGUsaCl7YWIuY2FsbCh0aGlzKTsKdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiO3RoaXMudjA9Ynx8bmV3IGc7dGhpcy52MT1lfHxuZXcgZzt0aGlzLnYyPWh8fG5ldyBnfWZ1bmN0aW9uIGhkKGIpe2FiLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSI7dGhpcy5wb2ludHM9Ynx8W119ZnVuY3Rpb24gUWQoKXthYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ3VydmVQYXRoIjt0aGlzLmN1cnZlcz1bXTt0aGlzLmF1dG9DbG9zZT0hMX1mdW5jdGlvbiBpZChiKXtRZC5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGF0aCI7dGhpcy5jdXJyZW50UG9pbnQ9bmV3IGQ7YiYmdGhpcy5zZXRGcm9tUG9pbnRzKGIpfWZ1bmN0aW9uIHRlKGIpe2lkLmNhbGwodGhpcyxiKTt0aGlzLnV1aWQ9bGIuZ2VuZXJhdGVVVUlEKCk7dGhpcy50eXBlPSJTaGFwZSI7dGhpcy5ob2xlcz1bXX1mdW5jdGlvbiBVYihiLGUpe3kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkxpZ2h0Ijt0aGlzLmNvbG9yPW5ldyBJKGIpO3RoaXMuaW50ZW5zaXR5PQp2b2lkIDAhPT1lP2U6MTt0aGlzLnJlY2VpdmVTaGFkb3c9dm9pZCAwfWZ1bmN0aW9uIEtpKGIsZSxoKXtVYi5jYWxsKHRoaXMsYixoKTt0aGlzLnR5cGU9IkhlbWlzcGhlcmVMaWdodCI7dGhpcy5jYXN0U2hhZG93PXZvaWQgMDt0aGlzLnBvc2l0aW9uLmNvcHkoeS5EZWZhdWx0VXApO3RoaXMudXBkYXRlTWF0cml4KCk7dGhpcy5ncm91bmRDb2xvcj1uZXcgSShlKX1mdW5jdGlvbiBEZChiKXt0aGlzLmNhbWVyYT1iO3RoaXMuYmlhcz0wO3RoaXMucmFkaXVzPTE7dGhpcy5tYXBTaXplPW5ldyBkKDUxMiw1MTIpO3RoaXMubWFwUGFzcz10aGlzLm1hcD1udWxsO3RoaXMubWF0cml4PW5ldyByO3RoaXMuX2ZydXN0dW09bmV3IEVjO3RoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgZCgxLDEpO3RoaXMuX3ZpZXdwb3J0Q291bnQ9MTt0aGlzLl92aWV3cG9ydHM9W25ldyBuKDAsMCwxLDEpXX1mdW5jdGlvbiBMaSgpe0RkLmNhbGwodGhpcyxuZXcgQWIoNTAsMSwuNSw1MDApKX1mdW5jdGlvbiBNaShiLAplLGgsbSx1LHcpe1ViLmNhbGwodGhpcyxiLGUpO3RoaXMudHlwZT0iU3BvdExpZ2h0Ijt0aGlzLnBvc2l0aW9uLmNvcHkoeS5EZWZhdWx0VXApO3RoaXMudXBkYXRlTWF0cml4KCk7dGhpcy50YXJnZXQ9bmV3IHk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInBvd2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbihBKXt0aGlzLmludGVuc2l0eT1BL01hdGguUEl9fSk7dGhpcy5kaXN0YW5jZT12b2lkIDAhPT1oP2g6MDt0aGlzLmFuZ2xlPXZvaWQgMCE9PW0/bTpNYXRoLlBJLzM7dGhpcy5wZW51bWJyYT12b2lkIDAhPT11P3U6MDt0aGlzLmRlY2F5PXZvaWQgMCE9PXc/dzoxO3RoaXMuc2hhZG93PW5ldyBMaX1mdW5jdGlvbiBIaygpe0RkLmNhbGwodGhpcyxuZXcgQWIoOTAsMSwuNSw1MDApKTt0aGlzLl9mcmFtZUV4dGVudHM9bmV3IGQoNCwyKTt0aGlzLl92aWV3cG9ydENvdW50PTY7dGhpcy5fdmlld3BvcnRzPVtuZXcgbigyLAoxLDEsMSksbmV3IG4oMCwxLDEsMSksbmV3IG4oMywxLDEsMSksbmV3IG4oMSwxLDEsMSksbmV3IG4oMywwLDEsMSksbmV3IG4oMSwwLDEsMSldO3RoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgZygxLDAsMCksbmV3IGcoLTEsMCwwKSxuZXcgZygwLDAsMSksbmV3IGcoMCwwLC0xKSxuZXcgZygwLDEsMCksbmV3IGcoMCwtMSwwKV07dGhpcy5fY3ViZVVwcz1bbmV3IGcoMCwxLDApLG5ldyBnKDAsMSwwKSxuZXcgZygwLDEsMCksbmV3IGcoMCwxLDApLG5ldyBnKDAsMCwxKSxuZXcgZygwLDAsLTEpXX1mdW5jdGlvbiBOaShiLGUsaCxtKXtVYi5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IlBvaW50TGlnaHQiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbih1KXt0aGlzLmludGVuc2l0eT11Lyg0Kk1hdGguUEkpfX0pO3RoaXMuZGlzdGFuY2U9dm9pZCAwIT09aD8KaDowO3RoaXMuZGVjYXk9dm9pZCAwIT09bT9tOjE7dGhpcy5zaGFkb3c9bmV3IEhrfWZ1bmN0aW9uIEdoKGIsZSxoLG0sdSx3KXtGYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIjt0aGlzLnpvb209MTt0aGlzLnZpZXc9bnVsbDt0aGlzLmxlZnQ9dm9pZCAwIT09Yj9iOi0xO3RoaXMucmlnaHQ9dm9pZCAwIT09ZT9lOjE7dGhpcy50b3A9dm9pZCAwIT09aD9oOjE7dGhpcy5ib3R0b209dm9pZCAwIT09bT9tOi0xO3RoaXMubmVhcj12b2lkIDAhPT11P3U6LjE7dGhpcy5mYXI9dm9pZCAwIT09dz93OjJFMzt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiBPaSgpe0RkLmNhbGwodGhpcyxuZXcgR2goLTUsNSw1LC01LC41LDUwMCkpfWZ1bmN0aW9uIFBpKGIsZSl7VWIuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Ijt0aGlzLnBvc2l0aW9uLmNvcHkoeS5EZWZhdWx0VXApO3RoaXMudXBkYXRlTWF0cml4KCk7CnRoaXMudGFyZ2V0PW5ldyB5O3RoaXMuc2hhZG93PW5ldyBPaX1mdW5jdGlvbiBRaShiLGUpe1ViLmNhbGwodGhpcyxiLGUpO3RoaXMudHlwZT0iQW1iaWVudExpZ2h0Ijt0aGlzLmNhc3RTaGFkb3c9dm9pZCAwfWZ1bmN0aW9uIFJpKGIsZSxoLG0pe1ViLmNhbGwodGhpcyxiLGUpO3RoaXMudHlwZT0iUmVjdEFyZWFMaWdodCI7dGhpcy53aWR0aD12b2lkIDAhPT1oP2g6MTA7dGhpcy5oZWlnaHQ9dm9pZCAwIT09bT9tOjEwfWZ1bmN0aW9uIFNpKGIpe0tiLmNhbGwodGhpcyxiKTt0aGlzLnRleHR1cmVzPXt9fWZ1bmN0aW9uIFRpKCl7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Ijt0aGlzLm1heEluc3RhbmNlZENvdW50PXZvaWQgMH1mdW5jdGlvbiBVaShiLGUsaCxtKXsibnVtYmVyIj09PXR5cGVvZiBoJiYobT1oLGg9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpOwpSLmNhbGwodGhpcyxiLGUsaCk7dGhpcy5tZXNoUGVyQXR0cmlidXRlPW18fDF9ZnVuY3Rpb24gVmkoYil7S2IuY2FsbCh0aGlzLGIpfWZ1bmN0aW9uIFdpKGIpe0tiLmNhbGwodGhpcyxiKX1mdW5jdGlvbiBJayhiKXsidW5kZWZpbmVkIj09PXR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpOyJ1bmRlZmluZWQiPT09dHlwZW9mIGZldGNoJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBmZXRjaCgpIG5vdCBzdXBwb3J0ZWQuIik7S2IuY2FsbCh0aGlzLGIpO3RoaXMub3B0aW9ucz12b2lkIDB9ZnVuY3Rpb24gSmsoKXt0aGlzLnR5cGU9IlNoYXBlUGF0aCI7dGhpcy5jb2xvcj1uZXcgSTt0aGlzLnN1YlBhdGhzPVtdO3RoaXMuY3VycmVudFBhdGg9bnVsbH1mdW5jdGlvbiBLayhiKXt0aGlzLnR5cGU9IkZvbnQiO3RoaXMuZGF0YT0KYn1mdW5jdGlvbiBycyhiLGUsaCl7Yj1BcnJheS5mcm9tP0FycmF5LmZyb20oYik6U3RyaW5nKGIpLnNwbGl0KCIiKTtlLz1oLnJlc29sdXRpb247Zm9yKHZhciBtPShoLmJvdW5kaW5nQm94LnlNYXgtaC5ib3VuZGluZ0JveC55TWluK2gudW5kZXJsaW5lVGhpY2tuZXNzKSplLHU9W10sdz0wLEE9MCxFPTA7RTxiLmxlbmd0aDtFKyspe3ZhciBHPWJbRV07IlxuIj09PUc/KHc9MCxBLT1tKTooRz1zcyhHLGUsdyxBLGgpLHcrPUcub2Zmc2V0WCx1LnB1c2goRy5wYXRoKSl9cmV0dXJuIHV9ZnVuY3Rpb24gc3MoYixlLGgsbSx1KXt2YXIgdz11LmdseXBoc1tiXXx8dS5nbHlwaHNbIj8iXTtpZih3KXtiPW5ldyBKaztpZih3Lm8pe3U9dy5fY2FjaGVkT3V0bGluZXx8KHcuX2NhY2hlZE91dGxpbmU9dy5vLnNwbGl0KCIgIikpO2Zvcih2YXIgQT0wLEU9dS5sZW5ndGg7QTxFOylzd2l0Y2godVtBKytdKXtjYXNlICJtIjp2YXIgRz11W0ErK10qZStoO3ZhciBKPXVbQSsrXSplK207Yi5tb3ZlVG8oRywKSik7YnJlYWs7Y2FzZSAibCI6Rz11W0ErK10qZStoO0o9dVtBKytdKmUrbTtiLmxpbmVUbyhHLEopO2JyZWFrO2Nhc2UgInEiOkc9dVtBKytdKmUraDtKPXVbQSsrXSplK207dmFyIFE9dVtBKytdKmUraDt2YXIgUz11W0ErK10qZSttO2IucXVhZHJhdGljQ3VydmVUbyhRLFMsRyxKKTticmVhaztjYXNlICJiIjpHPXVbQSsrXSplK2g7Sj11W0ErK10qZSttO1E9dVtBKytdKmUraDtTPXVbQSsrXSplK207dmFyIFQ9dVtBKytdKmUraDt2YXIgVz11W0ErK10qZSttO2IuYmV6aWVyQ3VydmVUbyhRLFMsVCxXLEcsSil9fXJldHVybntvZmZzZXRYOncuaGEqZSxwYXRoOmJ9fWNvbnNvbGUuZXJyb3IoJ1RIUkVFLkZvbnQ6IGNoYXJhY3RlciAiJytiKyciIGRvZXMgbm90IGV4aXN0cyBpbiBmb250IGZhbWlseSAnK3UuZmFtaWx5TmFtZSsiLiIpfWZ1bmN0aW9uIExrKGIpe0tiLmNhbGwodGhpcyxiKX1mdW5jdGlvbiBYaShiKXtLYi5jYWxsKHRoaXMsYil9ZnVuY3Rpb24gWWkoKXt0aGlzLmNvZWZmaWNpZW50cz0KW107Zm9yKHZhciBiPTA7OT5iO2IrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyBnKX1mdW5jdGlvbiBqZChiLGUpe1ViLmNhbGwodGhpcyx2b2lkIDAsZSk7dGhpcy5zaD12b2lkIDAhPT1iP2I6bmV3IFlpfWZ1bmN0aW9uIE1rKGIsZSxoKXtqZC5jYWxsKHRoaXMsdm9pZCAwLGgpO2I9KG5ldyBJKS5zZXQoYik7aD0obmV3IEkpLnNldChlKTtlPW5ldyBnKGIucixiLmcsYi5iKTtiPW5ldyBnKGgucixoLmcsaC5iKTtoPU1hdGguc3FydChNYXRoLlBJKTt2YXIgbT1oKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkoZSkuYWRkKGIpLm11bHRpcGx5U2NhbGFyKGgpO3RoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkoZSkuc3ViKGIpLm11bHRpcGx5U2NhbGFyKG0pfWZ1bmN0aW9uIE5rKGIsZSl7amQuY2FsbCh0aGlzLHZvaWQgMCxlKTtiPShuZXcgSSkuc2V0KGIpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLnNldChiLnIsYi5nLGIuYikubXVsdGlwbHlTY2FsYXIoMioKTWF0aC5zcXJ0KE1hdGguUEkpKX1mdW5jdGlvbiBabigpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIjt0aGlzLmFzcGVjdD0xO3RoaXMuZXllU2VwPS4wNjQ7dGhpcy5jYW1lcmFMPW5ldyBBYjt0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKTt0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmNhbWVyYVI9bmV3IEFiO3RoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpO3RoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fWZ1bmN0aW9uIE9rKGIpe3RoaXMuYXV0b1N0YXJ0PXZvaWQgMCE9PWI/YjohMDt0aGlzLmVsYXBzZWRUaW1lPXRoaXMub2xkVGltZT10aGlzLnN0YXJ0VGltZT0wO3RoaXMucnVubmluZz0hMX1mdW5jdGlvbiBQaygpe3kuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkF1ZGlvTGlzdGVuZXIiOwp0aGlzLmNvbnRleHQ9UWsuZ2V0Q29udGV4dCgpO3RoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO3RoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLnRpbWVEZWx0YT0wO3RoaXMuX2Nsb2NrPW5ldyBPa31mdW5jdGlvbiBnZyhiKXt5LmNhbGwodGhpcyk7dGhpcy50eXBlPSJBdWRpbyI7dGhpcy5saXN0ZW5lcj1iO3RoaXMuY29udGV4dD1iLmNvbnRleHQ7dGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7dGhpcy5nYWluLmNvbm5lY3QoYi5nZXRJbnB1dCgpKTt0aGlzLmF1dG9wbGF5PSExO3RoaXMuYnVmZmVyPW51bGw7dGhpcy5kZXR1bmU9MDt0aGlzLmxvb3A9ITE7dGhpcy5vZmZzZXQ9dGhpcy5zdGFydFRpbWU9MDt0aGlzLmR1cmF0aW9uPXZvaWQgMDt0aGlzLnBsYXliYWNrUmF0ZT0xO3RoaXMuaXNQbGF5aW5nPSExO3RoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwO3RoaXMuc291cmNlVHlwZT0KImVtcHR5Ijt0aGlzLmZpbHRlcnM9W119ZnVuY3Rpb24gUmsoYil7Z2cuY2FsbCh0aGlzLGIpO3RoaXMucGFubmVyPXRoaXMuY29udGV4dC5jcmVhdGVQYW5uZXIoKTt0aGlzLnBhbm5lci5wYW5uaW5nTW9kZWw9IkhSVEYiO3RoaXMucGFubmVyLmNvbm5lY3QodGhpcy5nYWluKX1mdW5jdGlvbiBTayhiLGUpe3RoaXMuYW5hbHlzZXI9Yi5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7dGhpcy5hbmFseXNlci5mZnRTaXplPXZvaWQgMCE9PWU/ZToyMDQ4O3RoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KTtiLmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9ZnVuY3Rpb24gVGsoYixlLGgpe3RoaXMuYmluZGluZz1iO3RoaXMudmFsdWVTaXplPWg7Yj1GbG9hdDY0QXJyYXk7c3dpdGNoKGUpe2Nhc2UgInF1YXRlcm5pb24iOmU9dGhpcy5fc2xlcnA7YnJlYWs7Y2FzZSAic3RyaW5nIjpjYXNlICJib29sIjpiPUFycmF5O2U9CnRoaXMuX3NlbGVjdDticmVhaztkZWZhdWx0OmU9dGhpcy5fbGVycH10aGlzLmJ1ZmZlcj1uZXcgYig0KmgpO3RoaXMuX21peEJ1ZmZlclJlZ2lvbj1lO3RoaXMucmVmZXJlbmNlQ291bnQ9dGhpcy51c2VDb3VudD10aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MH1mdW5jdGlvbiAkbihiLGUsaCl7aD1ofHx2Yy5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD1iO3RoaXMuX2JpbmRpbmdzPWIuc3Vic2NyaWJlXyhlLGgpfWZ1bmN0aW9uIHZjKGIsZSxoKXt0aGlzLnBhdGg9ZTt0aGlzLnBhcnNlZFBhdGg9aHx8dmMucGFyc2VUcmFja05hbWUoZSk7dGhpcy5ub2RlPXZjLmZpbmROb2RlKGIsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8Yjt0aGlzLnJvb3ROb2RlPWJ9ZnVuY3Rpb24gYW8oKXt0aGlzLnV1aWQ9bGIuZ2VuZXJhdGVVVUlEKCk7dGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3RoaXMubkNhY2hlZE9iamVjdHNfPTA7dmFyIGI9Cnt9O3RoaXMuX2luZGljZXNCeVVVSUQ9Yjtmb3IodmFyIGU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7ZSE9PWg7KytlKWJbYXJndW1lbnRzW2VdLnV1aWRdPWU7dGhpcy5fcGF0aHM9W107dGhpcy5fcGFyc2VkUGF0aHM9W107dGhpcy5fYmluZGluZ3M9W107dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoPXt9O3ZhciBtPXRoaXM7dGhpcy5zdGF0cz17b2JqZWN0czp7Z2V0IHRvdGFsKCl7cmV0dXJuIG0uX29iamVjdHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdGhpcy50b3RhbC1tLm5DYWNoZWRPYmplY3RzX319LGdldCBiaW5kaW5nc1Blck9iamVjdCgpe3JldHVybiBtLl9iaW5kaW5ncy5sZW5ndGh9fX1mdW5jdGlvbiBibyhiLGUsaCl7dGhpcy5fbWl4ZXI9Yjt0aGlzLl9jbGlwPWU7dGhpcy5fbG9jYWxSb290PWh8fG51bGw7Yj1lLnRyYWNrcztlPWIubGVuZ3RoO2g9QXJyYXkoZSk7Zm9yKHZhciBtPXtlbmRpbmdTdGFydDoyNDAwLGVuZGluZ0VuZDoyNDAwfSx1PTA7dSE9PQplOysrdSl7dmFyIHc9Ylt1XS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTtoW3VdPXc7dy5zZXR0aW5ncz1tfXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9bTt0aGlzLl9pbnRlcnBvbGFudHM9aDt0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPUFycmF5KGUpO3RoaXMuX3dlaWdodEludGVycG9sYW50PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PXRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9dGhpcy5fY2FjaGVJbmRleD1udWxsO3RoaXMubG9vcD0yMjAxO3RoaXMuX2xvb3BDb3VudD0tMTt0aGlzLl9zdGFydFRpbWU9bnVsbDt0aGlzLnRpbWU9MDt0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy53ZWlnaHQ9dGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMudGltZVNjYWxlPTE7dGhpcy5yZXBldGl0aW9ucz1JbmZpbml0eTt0aGlzLnBhdXNlZD0hMTt0aGlzLmVuYWJsZWQ9ITA7dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMTt0aGlzLnplcm9TbG9wZUF0RW5kPXRoaXMuemVyb1Nsb3BlQXRTdGFydD0KITB9ZnVuY3Rpb24gVWsoYil7dGhpcy5fcm9vdD1iO3RoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCk7dGhpcy50aW1lPXRoaXMuX2FjY3VJbmRleD0wO3RoaXMudGltZVNjYWxlPTF9ZnVuY3Rpb24gWmkoYixlKXsic3RyaW5nIj09PXR5cGVvZiBiJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLGI9ZSk7dGhpcy52YWx1ZT1ifWZ1bmN0aW9uIFZrKGIsZSxoKXtPZS5jYWxsKHRoaXMsYixlKTt0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aHx8MX1mdW5jdGlvbiBjbyhiLGUsaCxtKXt0aGlzLnJheT1uZXcgRChiLGUpO3RoaXMubmVhcj1ofHwwO3RoaXMuZmFyPW18fEluZmluaXR5O3RoaXMuY2FtZXJhPW51bGw7dGhpcy5wYXJhbXM9e01lc2g6e30sTGluZTp7fSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLnBhcmFtcyx7UG9pbnRDbG91ZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXI6IHBhcmFtcy5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gcGFyYW1zLlBvaW50cy4iKTsKcmV0dXJuIHRoaXMuUG9pbnRzfX19KX1mdW5jdGlvbiBlbyhiLGUpe3JldHVybiBiLmRpc3RhbmNlLWUuZGlzdGFuY2V9ZnVuY3Rpb24gV2soYixlLGgsbSl7aWYoITEhPT1iLnZpc2libGUmJihiLnJheWNhc3QoZSxoKSwhMD09PW0pKXtiPWIuY2hpbGRyZW47bT0wO2Zvcih2YXIgdT1iLmxlbmd0aDttPHU7bSsrKVdrKGJbbV0sZSxoLCEwKX19ZnVuY3Rpb24gZm8oYixlLGgpe3RoaXMucmFkaXVzPXZvaWQgMCE9PWI/YjoxO3RoaXMucGhpPXZvaWQgMCE9PWU/ZTowO3RoaXMudGhldGE9dm9pZCAwIT09aD9oOjA7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZ28oYixlLGgpe3RoaXMucmFkaXVzPXZvaWQgMCE9PWI/YjoxO3RoaXMudGhldGE9dm9pZCAwIT09ZT9lOjA7dGhpcy55PXZvaWQgMCE9PWg/aDowO3JldHVybiB0aGlzfWZ1bmN0aW9uIFhrKGIsZSl7dGhpcy5taW49dm9pZCAwIT09Yj9iOm5ldyBkKEluZmluaXR5LEluZmluaXR5KTt0aGlzLm1heD12b2lkIDAhPT1lP2U6bmV3IGQoLUluZmluaXR5LAotSW5maW5pdHkpfWZ1bmN0aW9uIFlrKGIsZSl7dGhpcy5zdGFydD12b2lkIDAhPT1iP2I6bmV3IGc7dGhpcy5lbmQ9dm9pZCAwIT09ZT9lOm5ldyBnfWZ1bmN0aW9uIEhoKGIpe3kuY2FsbCh0aGlzKTt0aGlzLm1hdGVyaWFsPWI7dGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIEloKGIsZSxoLG0pe3RoaXMub2JqZWN0PWI7dGhpcy5zaXplPXZvaWQgMCE9PWU/ZToxO2I9dm9pZCAwIT09aD9oOjE2NzExNjgwO209dm9pZCAwIT09bT9tOjE7ZT0wOyhoPXRoaXMub2JqZWN0Lmdlb21ldHJ5KSYmaC5pc0dlb21ldHJ5P2U9MypoLmZhY2VzLmxlbmd0aDpoJiZoLmlzQnVmZmVyR2VvbWV0cnkmJihlPWguYXR0cmlidXRlcy5ub3JtYWwuY291bnQpO2g9bmV3IHhhO2U9bmV3IGRhKDYqZSwzKTtoLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLGUpO1NiLmNhbGwodGhpcyxoLG5ldyBPYih7Y29sb3I6YixsaW5ld2lkdGg6bX0pKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dGhpcy51cGRhdGUoKX0KZnVuY3Rpb24gaGcoYixlKXt5LmNhbGwodGhpcyk7dGhpcy5saWdodD1iO3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTt0aGlzLm1hdHJpeD1iLm1hdHJpeFdvcmxkO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmNvbG9yPWU7Yj1uZXcgeGE7ZT1bMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDEsMCwwLDAsLTEsMCwxLDAsMCwwLDAsMSwxLDAsMCwwLDAsLTEsMV07Zm9yKHZhciBoPTAsbT0xOzMyPmg7aCsrLG0rKyl7dmFyIHU9aC8zMipNYXRoLlBJKjIsdz1tLzMyKk1hdGguUEkqMjtlLnB1c2goTWF0aC5jb3ModSksTWF0aC5zaW4odSksMSxNYXRoLmNvcyh3KSxNYXRoLnNpbih3KSwxKX1iLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShlLDMpKTtlPW5ldyBPYih7Zm9nOiExfSk7dGhpcy5jb25lPW5ldyBTYihiLGUpO3RoaXMuYWRkKHRoaXMuY29uZSk7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBobyhiKXt2YXIgZT1bXTtiJiZiLmlzQm9uZSYmZS5wdXNoKGIpOwpmb3IodmFyIGg9MDtoPGIuY2hpbGRyZW4ubGVuZ3RoO2grKyllLnB1c2guYXBwbHkoZSxobyhiLmNoaWxkcmVuW2hdKSk7cmV0dXJuIGV9ZnVuY3Rpb24gaWcoYil7Zm9yKHZhciBlPWhvKGIpLGg9bmV3IHhhLG09W10sdT1bXSx3PW5ldyBJKDAsMCwxKSxBPW5ldyBJKDAsMSwwKSxFPTA7RTxlLmxlbmd0aDtFKyspe3ZhciBHPWVbRV07Ry5wYXJlbnQmJkcucGFyZW50LmlzQm9uZSYmKG0ucHVzaCgwLDAsMCksbS5wdXNoKDAsMCwwKSx1LnB1c2gody5yLHcuZyx3LmIpLHUucHVzaChBLnIsQS5nLEEuYikpfWguYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKG0sMykpO2guYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IGRhKHUsMykpO209bmV3IE9iKHt2ZXJ0ZXhDb2xvcnM6MixkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0cmFuc3BhcmVudDohMH0pO1NiLmNhbGwodGhpcyxoLG0pO3RoaXMucm9vdD1iO3RoaXMuYm9uZXM9ZTt0aGlzLm1hdHJpeD1iLm1hdHJpeFdvcmxkO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0KITF9ZnVuY3Rpb24gamcoYixlLGgpe3RoaXMubGlnaHQ9Yjt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5jb2xvcj1oO2I9bmV3IHNlKGUsNCwyKTtlPW5ldyBMKHt3aXJlZnJhbWU6ITAsZm9nOiExfSk7eWEuY2FsbCh0aGlzLGIsZSk7dGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBrZyhiLGUpe3RoaXMudHlwZT0iUmVjdEFyZWFMaWdodEhlbHBlciI7dGhpcy5saWdodD1iO3RoaXMuY29sb3I9ZTtiPW5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShbMSwxLDAsLTEsMSwwLC0xLC0xLDAsMSwtMSwwLDEsMSwwXSwzKSk7Yi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtlPW5ldyBPYih7Zm9nOiExfSk7bWMuY2FsbCh0aGlzLGIsZSk7Yj1uZXcgeGE7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEoWzEsMSwwLC0xLDEsMCwtMSwtMSwwLAoxLDEsMCwtMSwtMSwwLDEsLTEsMF0sMykpO2IuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7dGhpcy5hZGQobmV3IHlhKGIsbmV3IEwoe3NpZGU6MSxmb2c6ITF9KSkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbGcoYixlLGgpe3kuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWI7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWIubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY29sb3I9aDtiPW5ldyBQZShlKTtiLnJvdGF0ZVkoLjUqTWF0aC5QSSk7dGhpcy5tYXRlcmlhbD1uZXcgTCh7d2lyZWZyYW1lOiEwLGZvZzohMX0pO3ZvaWQgMD09PXRoaXMuY29sb3ImJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0yKTtlPWIuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2IuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IFIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpKTt0aGlzLmFkZChuZXcgeWEoYix0aGlzLm1hdGVyaWFsKSk7CnRoaXMudXBkYXRlKCl9ZnVuY3Rpb24gbWcoYixlKXt0aGlzLmxpZ2h0UHJvYmU9Yjt0aGlzLnNpemU9ZTtiPW5ldyB1Yih7ZGVmaW5lczp7R0FNTUFfT1VUUFVUOiIifSx1bmlmb3Jtczp7c2g6e3ZhbHVlOnRoaXMubGlnaHRQcm9iZS5zaC5jb2VmZmljaWVudHN9LGludGVuc2l0eTp7dmFsdWU6dGhpcy5saWdodFByb2JlLmludGVuc2l0eX19LHZlcnRleFNoYWRlcjoidmFyeWluZyB2ZWMzIHZOb3JtYWw7XG52b2lkIG1haW4oKSB7XG5cdHZOb3JtYWwgXHgzZCBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuXHRnbF9Qb3NpdGlvbiBceDNkIHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59IixmcmFnbWVudFNoYWRlcjoiI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2XG52ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgbm9ybWFsLCBpbiBtYXQ0IG1hdHJpeCApIHtcblx0Ly8gbWF0cml4IGlzIGFzc3VtZWQgdG8gYmUgb3J0aG9nb25hbFxuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIG5vcm1hbCwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcbn1cbnZlYzMgbGluZWFyVG9PdXRwdXQoIGluIHZlYzMgYSApIHtcblx0I2lmZGVmIEdBTU1BX09VVFBVVFxuXHRcdHJldHVybiBwb3coIGEsIHZlYzMoIDEuMCAvIGZsb2F0KCBHQU1NQV9GQUNUT1IgKSApICk7XG5cdCNlbHNlXG5cdFx0cmV0dXJuIGE7XG5cdCNlbmRpZlxufVxuLy8gc291cmNlOiBodHRwczovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9wYXBlcnMvZW52bWFwL2Vudm1hcC5wZGZcbnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7XG5cdC8vIG5vcm1hbCBpcyBhc3N1bWVkIHRvIGhhdmUgdW5pdCBsZW5ndGhcblx0ZmxvYXQgeCBceDNkIG5vcm1hbC54LCB5IFx4M2Qgbm9ybWFsLnksIHogXHgzZCBub3JtYWwuejtcblx0Ly8gYmFuZCAwXG5cdHZlYzMgcmVzdWx0IFx4M2Qgc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3O1xuXHQvLyBiYW5kIDFcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0Ly8gYmFuZCAyXG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxudW5pZm9ybSB2ZWMzIHNoWyA5IF07IC8vIHNoIGNvZWZmaWNpZW50c1xudW5pZm9ybSBmbG9hdCBpbnRlbnNpdHk7IC8vIGxpZ2h0IHByb2JlIGludGVuc2l0eVxudmFyeWluZyB2ZWMzIHZOb3JtYWw7XG52b2lkIG1haW4oKSB7XG5cdHZlYzMgbm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB2Tm9ybWFsICk7XG5cdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlIFx4M2Qgc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBzaCApO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCBSRUNJUFJPQ0FMX1BJICogaXJyYWRpYW5jZSAqIGludGVuc2l0eTtcblx0b3V0Z29pbmdMaWdodCBceDNkIGxpbmVhclRvT3V0cHV0KCBvdXRnb2luZ0xpZ2h0ICk7XG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIG91dGdvaW5nTGlnaHQsIDEuMCApO1xufSJ9KTsKZT1uZXcgc2UoMSwzMiwxNik7eWEuY2FsbCh0aGlzLGUsYik7dGhpcy5vbkJlZm9yZVJlbmRlcigpfWZ1bmN0aW9uICRpKGIsZSxoLG0pe2I9Ynx8MTA7ZT1lfHwxMDtoPW5ldyBJKHZvaWQgMCE9PWg/aDo0NDczOTI0KTttPW5ldyBJKHZvaWQgMCE9PW0/bTo4OTQ3ODQ4KTt2YXIgdT1lLzIsdz1iL2UsQT1iLzI7Yj1bXTtmb3IodmFyIEU9W10sRz0wLEo9MCxRPS1BO0c8PWU7RysrLFErPXcpe2IucHVzaCgtQSwwLFEsQSwwLFEpO2IucHVzaChRLDAsLUEsUSwwLEEpO3ZhciBTPUc9PT11P2g6bTtTLnRvQXJyYXkoRSxKKTtKKz0zO1MudG9BcnJheShFLEopO0orPTM7Uy50b0FycmF5KEUsSik7Sis9MztTLnRvQXJyYXkoRSxKKTtKKz0zfWU9bmV3IHhhO2UuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKGIsMykpO2UuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IGRhKEUsMykpO2g9bmV3IE9iKHt2ZXJ0ZXhDb2xvcnM6Mn0pO1NiLmNhbGwodGhpcyxlLGgpfWZ1bmN0aW9uIGFqKGIsCmUsaCxtLHUsdyl7Yj1ifHwxMDtlPWV8fDE2O2g9aHx8ODttPW18fDY0O3U9bmV3IEkodm9pZCAwIT09dT91OjQ0NzM5MjQpO3c9bmV3IEkodm9pZCAwIT09dz93Ojg5NDc4NDgpO3ZhciBBPVtdLEU9W10sRztmb3IoRz0wO0c8PWU7RysrKXt2YXIgSj1HL2UqMipNYXRoLlBJO3ZhciBRPU1hdGguc2luKEopKmI7Sj1NYXRoLmNvcyhKKSpiO0EucHVzaCgwLDAsMCk7QS5wdXNoKFEsMCxKKTt2YXIgUz1HJjE/dTp3O0UucHVzaChTLnIsUy5nLFMuYik7RS5wdXNoKFMucixTLmcsUy5iKX1mb3IoRz0wO0c8PWg7RysrKXtTPUcmMT91Onc7dmFyIFQ9Yi1iL2gqRztmb3IoZT0wO2U8bTtlKyspSj1lL20qMipNYXRoLlBJLFE9TWF0aC5zaW4oSikqVCxKPU1hdGguY29zKEopKlQsQS5wdXNoKFEsMCxKKSxFLnB1c2goUy5yLFMuZyxTLmIpLEo9KGUrMSkvbSoyKk1hdGguUEksUT1NYXRoLnNpbihKKSpULEo9TWF0aC5jb3MoSikqVCxBLnB1c2goUSwwLEopLEUucHVzaChTLnIsUy5nLFMuYil9Yj0KbmV3IHhhO2IuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKEEsMykpO2IuYWRkQXR0cmlidXRlKCJjb2xvciIsbmV3IGRhKEUsMykpO0E9bmV3IE9iKHt2ZXJ0ZXhDb2xvcnM6Mn0pO1NiLmNhbGwodGhpcyxiLEEpfWZ1bmN0aW9uIG5nKGIsZSxoLG0pe3RoaXMuYXVkaW89Yjt0aGlzLnJhbmdlPWV8fDE7dGhpcy5kaXZpc2lvbnNJbm5lckFuZ2xlPWh8fDE2O3RoaXMuZGl2aXNpb25zT3V0ZXJBbmdsZT1tfHwyO2I9bmV3IHhhO2IuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFIobmV3IEZsb2F0MzJBcnJheSgzKigzKih0aGlzLmRpdmlzaW9uc0lubmVyQW5nbGUrMip0aGlzLmRpdmlzaW9uc091dGVyQW5nbGUpKzMpKSwzKSk7ZT1uZXcgT2Ioe2NvbG9yOjY1MjgwfSk7aD1uZXcgT2Ioe2NvbG9yOjE2Nzc2OTYwfSk7bWMuY2FsbCh0aGlzLGIsW2gsZV0pO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gSmgoYixlLGgsbSl7dGhpcy5vYmplY3Q9Yjt0aGlzLnNpemU9dm9pZCAwIT09CmU/ZToxO2I9dm9pZCAwIT09aD9oOjE2Nzc2OTYwO209dm9pZCAwIT09bT9tOjE7ZT0wOyhoPXRoaXMub2JqZWN0Lmdlb21ldHJ5KSYmaC5pc0dlb21ldHJ5P2U9aC5mYWNlcy5sZW5ndGg6Y29uc29sZS53YXJuKCJUSFJFRS5GYWNlTm9ybWFsc0hlbHBlcjogb25seSBUSFJFRS5HZW9tZXRyeSBpcyBzdXBwb3J0ZWQuIFVzZSBUSFJFRS5WZXJ0ZXhOb3JtYWxzSGVscGVyLCBpbnN0ZWFkLiIpO2g9bmV3IHhhO2U9bmV3IGRhKDYqZSwzKTtoLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLGUpO1NiLmNhbGwodGhpcyxoLG5ldyBPYih7Y29sb3I6YixsaW5ld2lkdGg6bX0pKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBvZyhiLGUsaCl7eS5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9Yjt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9Yi5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dGhpcy5jb2xvcj1oOwp2b2lkIDA9PT1lJiYoZT0xKTtiPW5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShbLWUsZSwwLGUsZSwwLGUsLWUsMCwtZSwtZSwwLC1lLGUsMF0sMykpO2U9bmV3IE9iKHtmb2c6ITF9KTt0aGlzLmxpZ2h0UGxhbmU9bmV3IG1jKGIsZSk7dGhpcy5hZGQodGhpcy5saWdodFBsYW5lKTtiPW5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShbMCwwLDAsMCwwLDFdLDMpKTt0aGlzLnRhcmdldExpbmU9bmV3IG1jKGIsZSk7dGhpcy5hZGQodGhpcy50YXJnZXRMaW5lKTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIEtoKGIpe2Z1bmN0aW9uIGUoVyxYLGlhKXtoKFcsaWEpO2goWCxpYSl9ZnVuY3Rpb24gaChXLFgpe3cucHVzaCgwLDAsMCk7QS5wdXNoKFgucixYLmcsWC5iKTt2b2lkIDA9PT1FW1ddJiYoRVtXXT1bXSk7RVtXXS5wdXNoKHcubGVuZ3RoLzMtMSl9dmFyIG09bmV3IHhhLHU9bmV3IE9iKHtjb2xvcjoxNjc3NzIxNSx2ZXJ0ZXhDb2xvcnM6MX0pLAp3PVtdLEE9W10sRT17fSxHPW5ldyBJKDE2NzU1MjAwKSxKPW5ldyBJKDE2NzExNjgwKSxRPW5ldyBJKDQzNzc1KSxTPW5ldyBJKDE2Nzc3MjE1KSxUPW5ldyBJKDMzNTU0NDMpO2UoIm4xIiwibjIiLEcpO2UoIm4yIiwibjQiLEcpO2UoIm40IiwibjMiLEcpO2UoIm4zIiwibjEiLEcpO2UoImYxIiwiZjIiLEcpO2UoImYyIiwiZjQiLEcpO2UoImY0IiwiZjMiLEcpO2UoImYzIiwiZjEiLEcpO2UoIm4xIiwiZjEiLEcpO2UoIm4yIiwiZjIiLEcpO2UoIm4zIiwiZjMiLEcpO2UoIm40IiwiZjQiLEcpO2UoInAiLCJuMSIsSik7ZSgicCIsIm4yIixKKTtlKCJwIiwibjMiLEopO2UoInAiLCJuNCIsSik7ZSgidTEiLCJ1MiIsUSk7ZSgidTIiLCJ1MyIsUSk7ZSgidTMiLCJ1MSIsUSk7ZSgiYyIsInQiLFMpO2UoInAiLCJjIixUKTtlKCJjbjEiLCJjbjIiLFQpO2UoImNuMyIsImNuNCIsVCk7ZSgiY2YxIiwiY2YyIixUKTtlKCJjZjMiLCJjZjQiLFQpO20uYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsCm5ldyBkYSh3LDMpKTttLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBkYShBLDMpKTtTYi5jYWxsKHRoaXMsbSx1KTt0aGlzLmNhbWVyYT1iO3RoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgmJnRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTt0aGlzLm1hdHJpeD1iLm1hdHJpeFdvcmxkO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnBvaW50TWFwPUU7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBlYyhiLGUsaCxtLHUsdyxBKXtiai5zZXQodSx3LEEpLnVucHJvamVjdChtKTtiPWVbYl07aWYodm9pZCAwIT09Yilmb3IoaD1oLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxlPTAsbT1iLmxlbmd0aDtlPG07ZSsrKWguc2V0WFlaKGJbZV0sYmoueCxiai55LGJqLnopfWZ1bmN0aW9uIFJkKGIsZSl7dGhpcy5vYmplY3Q9Yjt2b2lkIDA9PT1lJiYoZT0xNjc3Njk2MCk7Yj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LAo0LDAsNCwxLDUsMiw2LDMsN10pO3ZhciBoPW5ldyBGbG9hdDMyQXJyYXkoMjQpLG09bmV3IHhhO20uc2V0SW5kZXgobmV3IFIoYiwxKSk7bS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgUihoLDMpKTtTYi5jYWxsKHRoaXMsbSxuZXcgT2Ioe2NvbG9yOmV9KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gTGgoYixlKXt0aGlzLnR5cGU9IkJveDNIZWxwZXIiO3RoaXMuYm94PWI7ZT1lfHwxNjc3Njk2MDtiPW5ldyBVaW50MTZBcnJheShbMCwxLDEsMiwyLDMsMywwLDQsNSw1LDYsNiw3LDcsNCwwLDQsMSw1LDIsNiwzLDddKTt2YXIgaD1uZXcgeGE7aC5zZXRJbmRleChuZXcgUihiLDEpKTtoLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLDMpKTtTYi5jYWxsKHRoaXMsaCxuZXcgT2Ioe2NvbG9yOmV9KSk7dGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX0KZnVuY3Rpb24gTWgoYixlLGgpe3RoaXMudHlwZT0iUGxhbmVIZWxwZXIiO3RoaXMucGxhbmU9Yjt0aGlzLnNpemU9dm9pZCAwPT09ZT8xOmU7Yj12b2lkIDAhPT1oP2g6MTY3NzY5NjA7ZT1uZXcgeGE7ZS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEoWzEsLTEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLC0xLDEsMSwxLDEsMCwwLDEsMCwwLDBdLDMpKTtlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO21jLmNhbGwodGhpcyxlLG5ldyBPYih7Y29sb3I6Yn0pKTtlPW5ldyB4YTtlLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBkYShbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLDMpKTtlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3RoaXMuYWRkKG5ldyB5YShlLG5ldyBMKHtjb2xvcjpiLG9wYWNpdHk6LjIsdHJhbnNwYXJlbnQ6ITAsZGVwdGhXcml0ZTohMX0pKSl9ZnVuY3Rpb24gU2QoYixlLGgsbSx1LHcpe3kuY2FsbCh0aGlzKTsKdm9pZCAwPT09YiYmKGI9bmV3IGcoMCwwLDEpKTt2b2lkIDA9PT1lJiYoZT1uZXcgZygwLDAsMCkpO3ZvaWQgMD09PWgmJihoPTEpO3ZvaWQgMD09PW0mJihtPTE2Nzc2OTYwKTt2b2lkIDA9PT11JiYodT0uMipoKTt2b2lkIDA9PT13JiYodz0uMip1KTt2b2lkIDA9PT1jaiYmKGNqPW5ldyB4YSxjai5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEoWzAsMCwwLDAsMSwwXSwzKSksWms9bmV3IFBkKDAsLjUsMSw1LDEpLFprLnRyYW5zbGF0ZSgwLC0uNSwwKSk7dGhpcy5wb3NpdGlvbi5jb3B5KGUpO3RoaXMubGluZT1uZXcgbWMoY2osbmV3IE9iKHtjb2xvcjptfSkpO3RoaXMubGluZS5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuYWRkKHRoaXMubGluZSk7dGhpcy5jb25lPW5ldyB5YShaayxuZXcgTCh7Y29sb3I6bX0pKTt0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmFkZCh0aGlzLmNvbmUpO3RoaXMuc2V0RGlyZWN0aW9uKGIpO3RoaXMuc2V0TGVuZ3RoKGgsCnUsdyl9ZnVuY3Rpb24gTmgoYil7Yj1ifHwxO3ZhciBlPVswLDAsMCxiLDAsMCwwLDAsMCwwLGIsMCwwLDAsMCwwLDAsYl07Yj1uZXcgeGE7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZGEoZSwzKSk7Yi5hZGRBdHRyaWJ1dGUoImNvbG9yIixuZXcgZGEoWzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSwzKSk7ZT1uZXcgT2Ioe3ZlcnRleENvbG9yczoyfSk7U2IuY2FsbCh0aGlzLGIsZSl9ZnVuY3Rpb24gaW8oYil7Y29uc29sZS53YXJuKCJUSFJFRS5DbG9zZWRTcGxpbmVDdXJ2ZTMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKTt1Yy5jYWxsKHRoaXMsYik7dGhpcy50eXBlPSJjYXRtdWxscm9tIjt0aGlzLmNsb3NlZD0hMH1mdW5jdGlvbiBqbyhiKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpOwp1Yy5jYWxsKHRoaXMsYik7dGhpcy50eXBlPSJjYXRtdWxscm9tIn1mdW5jdGlvbiAkayhiKXtjb25zb2xlLndhcm4oIlRIUkVFLlNwbGluZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO3VjLmNhbGwodGhpcyxiKTt0aGlzLnR5cGU9ImNhdG11bGxyb20ifXZvaWQgMD09PU51bWJlci5FUFNJTE9OJiYoTnVtYmVyLkVQU0lMT049TWF0aC5wb3coMiwtNTIpKTt2b2lkIDA9PT1OdW1iZXIuaXNJbnRlZ2VyJiYoTnVtYmVyLmlzSW50ZWdlcj1mdW5jdGlvbihiKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBiJiZpc0Zpbml0ZShiKSYmTWF0aC5mbG9vcihiKT09PWJ9KTt2b2lkIDA9PT1NYXRoLnNpZ24mJihNYXRoLnNpZ249ZnVuY3Rpb24oYil7cmV0dXJuIDA+Yj8tMTowPGI/MTorYn0pOyExPT09Im5hbWUiaW4gRnVuY3Rpb24ucHJvdG90eXBlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJuYW1lIiwKe2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKCkubWF0Y2goL15ccypmdW5jdGlvblxzKihbXlwoXHNdKikvKVsxXX19KTt2b2lkIDA9PT1PYmplY3QuYXNzaWduJiYoT2JqZWN0LmFzc2lnbj1mdW5jdGlvbihiKXtpZih2b2lkIDA9PT1ifHxudWxsPT09Yil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIGU9T2JqZWN0KGIpLGg9MTtoPGFyZ3VtZW50cy5sZW5ndGg7aCsrKXt2YXIgbT1hcmd1bWVudHNbaF07aWYodm9pZCAwIT09bSYmbnVsbCE9PW0pZm9yKHZhciB1IGluIG0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sdSkmJihlW3VdPW1bdV0pfXJldHVybiBlfSk7T2JqZWN0LmFzc2lnbihjLnByb3RvdHlwZSx7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PXRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz17fSk7dmFyIGg9CnRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1oW2JdJiYoaFtiXT1bXSk7LTE9PT1oW2JdLmluZGV4T2YoZSkmJmhbYl0ucHVzaChlKX0saGFzRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihiLGUpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm4hMTt2YXIgaD10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIHZvaWQgMCE9PWhbYl0mJi0xIT09aFtiXS5pbmRleE9mKGUpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGIsZSl7dm9pZCAwIT09dGhpcy5fbGlzdGVuZXJzJiYoYj10aGlzLl9saXN0ZW5lcnNbYl0sdm9pZCAwIT09YiYmKGU9Yi5pbmRleE9mKGUpLC0xIT09ZSYmYi5zcGxpY2UoZSwxKSkpfSxkaXNwYXRjaEV2ZW50OmZ1bmN0aW9uKGIpe2lmKHZvaWQgMCE9PXRoaXMuX2xpc3RlbmVycyl7dmFyIGU9dGhpcy5fbGlzdGVuZXJzW2IudHlwZV07aWYodm9pZCAwIT09ZSl7Yi50YXJnZXQ9dGhpcztlPWUuc2xpY2UoMCk7Zm9yKHZhciBoPTAsbT1lLmxlbmd0aDtoPG07aCsrKWVbaF0uY2FsbCh0aGlzLApiKX19fX0pO2Zvcih2YXIgcGM9W10sT2g9MDsyNTY+T2g7T2grKylwY1tPaF09KDE2Pk9oPyIwIjoiIikrT2gudG9TdHJpbmcoMTYpO3ZhciBsYj17REVHMlJBRDpNYXRoLlBJLzE4MCxSQUQyREVHOjE4MC9NYXRoLlBJLGdlbmVyYXRlVVVJRDpmdW5jdGlvbigpe3ZhciBiPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGU9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsaD00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxtPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwO3JldHVybihwY1tiJjI1NV0rcGNbYj4+OCYyNTVdK3BjW2I+PjE2JjI1NV0rcGNbYj4+MjQmMjU1XSsiLSIrcGNbZSYyNTVdK3BjW2U+PjgmMjU1XSsiLSIrcGNbZT4+MTYmMTV8NjRdK3BjW2U+PjI0JjI1NV0rIi0iK3BjW2gmNjN8MTI4XStwY1toPj44JjI1NV0rIi0iK3BjW2g+PjE2JjI1NV0rcGNbaD4+MjQmMjU1XStwY1ttJjI1NV0rcGNbbT4+OCYyNTVdK3BjW20+PjE2JjI1NV0rcGNbbT4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX0sCmNsYW1wOmZ1bmN0aW9uKGIsZSxoKXtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbihoLGIpKX0sZXVjbGlkZWFuTW9kdWxvOmZ1bmN0aW9uKGIsZSl7cmV0dXJuKGIlZStlKSVlfSxtYXBMaW5lYXI6ZnVuY3Rpb24oYixlLGgsbSx1KXtyZXR1cm4gbSsoYi1lKSoodS1tKS8oaC1lKX0sbGVycDpmdW5jdGlvbihiLGUsaCl7cmV0dXJuKDEtaCkqYitoKmV9LHNtb290aHN0ZXA6ZnVuY3Rpb24oYixlLGgpe2lmKGI8PWUpcmV0dXJuIDA7aWYoYj49aClyZXR1cm4gMTtiPShiLWUpLyhoLWUpO3JldHVybiBiKmIqKDMtMipiKX0sc21vb3RoZXJzdGVwOmZ1bmN0aW9uKGIsZSxoKXtpZihiPD1lKXJldHVybiAwO2lmKGI+PWgpcmV0dXJuIDE7Yj0oYi1lKS8oaC1lKTtyZXR1cm4gYipiKmIqKGIqKDYqYi0xNSkrMTApfSxyYW5kSW50OmZ1bmN0aW9uKGIsZSl7cmV0dXJuIGIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihlLWIrMSkpfSxyYW5kRmxvYXQ6ZnVuY3Rpb24oYixlKXtyZXR1cm4gYisKTWF0aC5yYW5kb20oKSooZS1iKX0scmFuZEZsb2F0U3ByZWFkOmZ1bmN0aW9uKGIpe3JldHVybiBiKiguNS1NYXRoLnJhbmRvbSgpKX0sZGVnVG9SYWQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIqbGIuREVHMlJBRH0scmFkVG9EZWc6ZnVuY3Rpb24oYil7cmV0dXJuIGIqbGIuUkFEMkRFR30saXNQb3dlck9mVHdvOmZ1bmN0aW9uKGIpe3JldHVybiAwPT09KGImYi0xKSYmMCE9PWJ9LGNlaWxQb3dlck9mVHdvOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyhiKS9NYXRoLkxOMikpfSxmbG9vclBvd2VyT2ZUd286ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLkxOMikpfX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZC5wcm90b3R5cGUse3dpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy54PWJ9fSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LApzZXQ6ZnVuY3Rpb24oYil7dGhpcy55PWJ9fX0pO09iamVjdC5hc3NpZ24oZC5wcm90b3R5cGUse2lzVmVjdG9yMjohMCxzZXQ6ZnVuY3Rpb24oYixlKXt0aGlzLng9Yjt0aGlzLnk9ZTtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMueT10aGlzLng9YjtyZXR1cm4gdGhpc30sc2V0WDpmdW5jdGlvbihiKXt0aGlzLng9YjtyZXR1cm4gdGhpc30sc2V0WTpmdW5jdGlvbihiKXt0aGlzLnk9YjtyZXR1cm4gdGhpc30sc2V0Q29tcG9uZW50OmZ1bmN0aW9uKGIsZSl7c3dpdGNoKGIpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2IpO31yZXR1cm4gdGhpc30sZ2V0Q29tcG9uZW50OmZ1bmN0aW9uKGIpe3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrCmIpO319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMueD1iLng7dGhpcy55PWIueTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGIsZSl7aWYodm9pZCAwIT09ZSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKGIsZSk7dGhpcy54Kz1iLng7dGhpcy55Kz1iLnk7cmV0dXJuIHRoaXN9LGFkZFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngrPWI7dGhpcy55Kz1iO3JldHVybiB0aGlzfSxhZGRWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy54PWIueCtlLng7dGhpcy55PWIueStlLnk7cmV0dXJuIHRoaXN9LGFkZFNjYWxlZFZlY3RvcjpmdW5jdGlvbihiLGUpe3RoaXMueCs9Yi54KmU7dGhpcy55Kz1iLnkqZTtyZXR1cm4gdGhpc30sCnN1YjpmdW5jdGlvbihiLGUpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyhiLGUpO3RoaXMueC09Yi54O3RoaXMueS09Yi55O3JldHVybiB0aGlzfSxzdWJTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54LT1iO3RoaXMueS09YjtyZXR1cm4gdGhpc30sc3ViVmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngtZS54O3RoaXMueT1iLnktZS55O3JldHVybiB0aGlzfSxtdWx0aXBseTpmdW5jdGlvbihiKXt0aGlzLngqPWIueDt0aGlzLnkqPWIueTtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54Kj1iO3RoaXMueSo9YjtyZXR1cm4gdGhpc30sZGl2aWRlOmZ1bmN0aW9uKGIpe3RoaXMueC89Yi54O3RoaXMueS89Yi55O3JldHVybiB0aGlzfSxkaXZpZGVTY2FsYXI6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS8KYil9LGFwcGx5TWF0cml4MzpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnk7Yj1iLmVsZW1lbnRzO3RoaXMueD1iWzBdKmUrYlszXSpoK2JbNl07dGhpcy55PWJbMV0qZStiWzRdKmgrYls3XTtyZXR1cm4gdGhpc30sbWluOmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1pbih0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5taW4odGhpcy55LGIueSk7cmV0dXJuIHRoaXN9LG1heDpmdW5jdGlvbihiKXt0aGlzLng9TWF0aC5tYXgodGhpcy54LGIueCk7dGhpcy55PU1hdGgubWF4KHRoaXMueSxiLnkpO3JldHVybiB0aGlzfSxjbGFtcDpmdW5jdGlvbihiLGUpe3RoaXMueD1NYXRoLm1heChiLngsTWF0aC5taW4oZS54LHRoaXMueCkpO3RoaXMueT1NYXRoLm1heChiLnksTWF0aC5taW4oZS55LHRoaXMueSkpO3JldHVybiB0aGlzfSxjbGFtcFNjYWxhcjpmdW5jdGlvbihiLGUpe3RoaXMueD1NYXRoLm1heChiLE1hdGgubWluKGUsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGIsTWF0aC5taW4oZSwKdGhpcy55KSk7cmV0dXJuIHRoaXN9LGNsYW1wTGVuZ3RoOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaHx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgoYixNYXRoLm1pbihlLGgpKSl9LGZsb29yOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3JldHVybiB0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguY2VpbCh0aGlzLngpO3RoaXMueT1NYXRoLmNlaWwodGhpcy55KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpO3RoaXMueT1NYXRoLnJvdW5kKHRoaXMueSk7cmV0dXJuIHRoaXN9LHJvdW5kVG9aZXJvOmZ1bmN0aW9uKCl7dGhpcy54PTA+dGhpcy54P01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9MD50aGlzLnk/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpOwpyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7dGhpcy55PS10aGlzLnk7cmV0dXJuIHRoaXN9LGRvdDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy54KmIueCt0aGlzLnkqYi55fSxjcm9zczpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy54KmIueS10aGlzLnkqYi54fSxsZW5ndGhTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX0sbWFuaGF0dGFuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfSxhbmdsZTpmdW5jdGlvbigpe3ZhciBiPU1hdGguYXRhbjIodGhpcy55LHRoaXMueCk7MD5iJiYoYis9MipNYXRoLlBJKTtyZXR1cm4gYn0sCmRpc3RhbmNlVG86ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKGIpKX0sZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy54LWIueDtiPXRoaXMueS1iLnk7cmV0dXJuIGUqZStiKmJ9LG1hbmhhdHRhbkRpc3RhbmNlVG86ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGguYWJzKHRoaXMueC1iLngpK01hdGguYWJzKHRoaXMueS1iLnkpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoYil9LGxlcnA6ZnVuY3Rpb24oYixlKXt0aGlzLngrPShiLngtdGhpcy54KSplO3RoaXMueSs9KGIueS10aGlzLnkpKmU7cmV0dXJuIHRoaXN9LGxlcnBWZWN0b3JzOmZ1bmN0aW9uKGIsZSxoKXtyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKGUsYikubXVsdGlwbHlTY2FsYXIoaCkuYWRkKGIpfSxlcXVhbHM6ZnVuY3Rpb24oYil7cmV0dXJuIGIueD09PXRoaXMueCYmYi55PT09dGhpcy55fSwKZnJvbUFycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dGhpcy54PWJbZV07dGhpcy55PWJbZSsxXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWImJihiPVtdKTt2b2lkIDA9PT1lJiYoZT0wKTtiW2VdPXRoaXMueDtiW2UrMV09dGhpcy55O3JldHVybiBifSxmcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGIsZSxoKXt2b2lkIDAhPT1oJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTt0aGlzLng9Yi5nZXRYKGUpO3RoaXMueT1iLmdldFkoZSk7cmV0dXJuIHRoaXN9LHJvdGF0ZUFyb3VuZDpmdW5jdGlvbihiLGUpe3ZhciBoPU1hdGguY29zKGUpO2U9TWF0aC5zaW4oZSk7dmFyIG09dGhpcy54LWIueCx1PXRoaXMueS1iLnk7dGhpcy54PW0qaC11KmUrYi54O3RoaXMueT1tKmUrdSpoK2IueTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKGYsCntzbGVycDpmdW5jdGlvbihiLGUsaCxtKXtyZXR1cm4gaC5jb3B5KGIpLnNsZXJwKGUsbSl9LHNsZXJwRmxhdDpmdW5jdGlvbihiLGUsaCxtLHUsdyxBKXt2YXIgRT1oW20rMF0sRz1oW20rMV0sSj1oW20rMl07aD1oW20rM107bT11W3crMF07dmFyIFE9dVt3KzFdLFM9dVt3KzJdO3U9dVt3KzNdO2lmKGghPT11fHxFIT09bXx8RyE9PVF8fEohPT1TKXt3PTEtQTt2YXIgVD1FKm0rRypRK0oqUytoKnUsVz0wPD1UPzE6LTEsWD0xLVQqVDtYPk51bWJlci5FUFNJTE9OJiYoWD1NYXRoLnNxcnQoWCksVD1NYXRoLmF0YW4yKFgsVCpXKSx3PU1hdGguc2luKHcqVCkvWCxBPU1hdGguc2luKEEqVCkvWCk7Vyo9QTtFPUUqdyttKlc7Rz1HKncrUSpXO0o9Sip3K1MqVztoPWgqdyt1Klc7dz09PTEtQSYmKEE9MS9NYXRoLnNxcnQoRSpFK0cqRytKKkoraCpoKSxFKj1BLEcqPUEsSio9QSxoKj1BKX1iW2VdPUU7YltlKzFdPUc7YltlKzJdPUo7YltlKzNdPWh9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZi5wcm90b3R5cGUsCnt4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3g9Yjt0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9fSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3k9Yjt0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3o9Yjt0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9fSx3OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd30sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3c9Yjt0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9fX0pO09iamVjdC5hc3NpZ24oZi5wcm90b3R5cGUse2lzUXVhdGVybmlvbjohMCxzZXQ6ZnVuY3Rpb24oYixlLGgsbSl7dGhpcy5feD1iO3RoaXMuX3k9ZTt0aGlzLl96PWg7dGhpcy5fdz1tO3RoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCwKdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMuX3g9Yi54O3RoaXMuX3k9Yi55O3RoaXMuX3o9Yi56O3RoaXMuX3c9Yi53O3RoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbUV1bGVyOmZ1bmN0aW9uKGIsZSl7aWYoIWJ8fCFiLmlzRXVsZXIpdGhyb3cgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO3ZhciBoPWIuX3gsbT1iLl95LHU9Yi5fejtiPWIub3JkZXI7dmFyIHc9TWF0aC5jb3MsQT1NYXRoLnNpbixFPXcoaC8yKSxHPXcobS8yKTt3PXcodS8yKTtoPUEoaC8yKTttPUEobS8yKTt1PUEodS8yKTsiWFlaIj09PWI/KHRoaXMuX3g9aCpHKncrRSptKnUsdGhpcy5feT1FKm0qdy1oKkcqdSx0aGlzLl96PUUqRyp1K2gqbSp3LHRoaXMuX3c9RSpHKnctaCptKnUpOiJZWFoiPT09CmI/KHRoaXMuX3g9aCpHKncrRSptKnUsdGhpcy5feT1FKm0qdy1oKkcqdSx0aGlzLl96PUUqRyp1LWgqbSp3LHRoaXMuX3c9RSpHKncraCptKnUpOiJaWFkiPT09Yj8odGhpcy5feD1oKkcqdy1FKm0qdSx0aGlzLl95PUUqbSp3K2gqRyp1LHRoaXMuX3o9RSpHKnUraCptKncsdGhpcy5fdz1FKkcqdy1oKm0qdSk6IlpZWCI9PT1iPyh0aGlzLl94PWgqRyp3LUUqbSp1LHRoaXMuX3k9RSptKncraCpHKnUsdGhpcy5fej1FKkcqdS1oKm0qdyx0aGlzLl93PUUqRyp3K2gqbSp1KToiWVpYIj09PWI/KHRoaXMuX3g9aCpHKncrRSptKnUsdGhpcy5feT1FKm0qdytoKkcqdSx0aGlzLl96PUUqRyp1LWgqbSp3LHRoaXMuX3c9RSpHKnctaCptKnUpOiJYWlkiPT09YiYmKHRoaXMuX3g9aCpHKnctRSptKnUsdGhpcy5feT1FKm0qdy1oKkcqdSx0aGlzLl96PUUqRyp1K2gqbSp3LHRoaXMuX3c9RSpHKncraCptKnUpOyExIT09ZSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKGIsCmUpe2UvPTI7dmFyIGg9TWF0aC5zaW4oZSk7dGhpcy5feD1iLngqaDt0aGlzLl95PWIueSpoO3RoaXMuX3o9Yi56Kmg7dGhpcy5fdz1NYXRoLmNvcyhlKTt0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbihiKXt2YXIgZT1iLmVsZW1lbnRzLGg9ZVswXTtiPWVbNF07dmFyIG09ZVs4XSx1PWVbMV0sdz1lWzVdLEE9ZVs5XSxFPWVbMl0sRz1lWzZdO2U9ZVsxMF07dmFyIEo9aCt3K2U7MDxKPyhoPS41L01hdGguc3FydChKKzEpLHRoaXMuX3c9LjI1L2gsdGhpcy5feD0oRy1BKSpoLHRoaXMuX3k9KG0tRSkqaCx0aGlzLl96PSh1LWIpKmgpOmg+dyYmaD5lPyhoPTIqTWF0aC5zcXJ0KDEraC13LWUpLHRoaXMuX3c9KEctQSkvaCx0aGlzLl94PS4yNSpoLHRoaXMuX3k9KGIrdSkvaCx0aGlzLl96PShtK0UpL2gpOnc+ZT8oaD0yKk1hdGguc3FydCgxK3ctaC1lKSx0aGlzLl93PShtLUUpL2gsdGhpcy5feD0oYit1KS9oLAp0aGlzLl95PS4yNSpoLHRoaXMuX3o9KEErRykvaCk6KGg9MipNYXRoLnNxcnQoMStlLWgtdyksdGhpcy5fdz0odS1iKS9oLHRoaXMuX3g9KG0rRSkvaCx0aGlzLl95PShBK0cpL2gsdGhpcy5fej0uMjUqaCk7dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tVW5pdFZlY3RvcnM6ZnVuY3Rpb24oYixlKXt2YXIgaD1iLmRvdChlKSsxOzFFLTY+aD8oaD0wLE1hdGguYWJzKGIueCk+TWF0aC5hYnMoYi56KT8odGhpcy5feD0tYi55LHRoaXMuX3k9Yi54LHRoaXMuX3o9MCk6KHRoaXMuX3g9MCx0aGlzLl95PS1iLnosdGhpcy5fej1iLnkpKToodGhpcy5feD1iLnkqZS56LWIueiplLnksdGhpcy5feT1iLnoqZS54LWIueCplLnosdGhpcy5fej1iLngqZS55LWIueSplLngpO3RoaXMuX3c9aDtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKX0sYW5nbGVUbzpmdW5jdGlvbihiKXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMobGIuY2xhbXAodGhpcy5kb3QoYiksLTEsCjEpKSl9LHJvdGF0ZVRvd2FyZHM6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLmFuZ2xlVG8oYik7aWYoMD09PWgpcmV0dXJuIHRoaXM7dGhpcy5zbGVycChiLE1hdGgubWluKDEsZS9oKSk7cmV0dXJuIHRoaXN9LGludmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX0sY29uanVnYXRlOmZ1bmN0aW9uKCl7dGhpcy5feCo9LTE7dGhpcy5feSo9LTE7dGhpcy5feio9LTE7dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3gqYi5feCt0aGlzLl95KmIuX3krdGhpcy5feipiLl96K3RoaXMuX3cqYi5fd30sbGVuZ3RoU3E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feioKdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmxlbmd0aCgpOzA9PT1iPyh0aGlzLl96PXRoaXMuX3k9dGhpcy5feD0wLHRoaXMuX3c9MSk6KGI9MS9iLHRoaXMuX3gqPWIsdGhpcy5feSo9Yix0aGlzLl96Kj1iLHRoaXMuX3cqPWIpO3RoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYixlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYixlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsYil9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnMoYix0aGlzKX0sbXVsdGlwbHlRdWF0ZXJuaW9uczpmdW5jdGlvbihiLAplKXt2YXIgaD1iLl94LG09Yi5feSx1PWIuX3o7Yj1iLl93O3ZhciB3PWUuX3gsQT1lLl95LEU9ZS5fejtlPWUuX3c7dGhpcy5feD1oKmUrYip3K20qRS11KkE7dGhpcy5feT1tKmUrYipBK3Uqdy1oKkU7dGhpcy5fej11KmUrYipFK2gqQS1tKnc7dGhpcy5fdz1iKmUtaCp3LW0qQS11KkU7dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzbGVycDpmdW5jdGlvbihiLGUpe2lmKDA9PT1lKXJldHVybiB0aGlzO2lmKDE9PT1lKXJldHVybiB0aGlzLmNvcHkoYik7dmFyIGg9dGhpcy5feCxtPXRoaXMuX3ksdT10aGlzLl96LHc9dGhpcy5fdyxBPXcqYi5fdytoKmIuX3grbSpiLl95K3UqYi5fejswPkE/KHRoaXMuX3c9LWIuX3csdGhpcy5feD0tYi5feCx0aGlzLl95PS1iLl95LHRoaXMuX3o9LWIuX3osQT0tQSk6dGhpcy5jb3B5KGIpO2lmKDE8PUEpcmV0dXJuIHRoaXMuX3c9dyx0aGlzLl94PWgsdGhpcy5feT1tLHRoaXMuX3o9dSx0aGlzO2I9MS1BKkE7aWYoYjw9TnVtYmVyLkVQU0lMT04pcmV0dXJuIEE9CjEtZSx0aGlzLl93PUEqdytlKnRoaXMuX3csdGhpcy5feD1BKmgrZSp0aGlzLl94LHRoaXMuX3k9QSptK2UqdGhpcy5feSx0aGlzLl96PUEqdStlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpcztiPU1hdGguc3FydChiKTt2YXIgRT1NYXRoLmF0YW4yKGIsQSk7QT1NYXRoLnNpbigoMS1lKSpFKS9iO2U9TWF0aC5zaW4oZSpFKS9iO3RoaXMuX3c9dypBK3RoaXMuX3cqZTt0aGlzLl94PWgqQSt0aGlzLl94KmU7dGhpcy5feT1tKkErdGhpcy5feSplO3RoaXMuX3o9dSpBK3RoaXMuX3oqZTt0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5feD09PXRoaXMuX3gmJmIuX3k9PT10aGlzLl95JiZiLl96PT09dGhpcy5feiYmYi5fdz09PXRoaXMuX3d9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMuX3g9YltlXTt0aGlzLl95PWJbZSsxXTsKdGhpcy5fej1iW2UrMl07dGhpcy5fdz1iW2UrM107dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO2JbZV09dGhpcy5feDtiW2UrMV09dGhpcy5feTtiW2UrMl09dGhpcy5fejtiW2UrM109dGhpcy5fdztyZXR1cm4gYn0sX29uQ2hhbmdlOmZ1bmN0aW9uKGIpe3RoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9YjtyZXR1cm4gdGhpc30sX29uQ2hhbmdlQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9fSk7dmFyIGFsPW5ldyBnLGtvPW5ldyBmO09iamVjdC5hc3NpZ24oZy5wcm90b3R5cGUse2lzVmVjdG9yMzohMCxzZXQ6ZnVuY3Rpb24oYixlLGgpe3RoaXMueD1iO3RoaXMueT1lO3RoaXMuej1oO3JldHVybiB0aGlzfSxzZXRTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy56PXRoaXMueT10aGlzLng9YjtyZXR1cm4gdGhpc30sc2V0WDpmdW5jdGlvbihiKXt0aGlzLng9YjtyZXR1cm4gdGhpc30sCnNldFk6ZnVuY3Rpb24oYil7dGhpcy55PWI7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYil7dGhpcy56PWI7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihiLGUpe3N3aXRjaChiKXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYik7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYil7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIitiKTt9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy54PWIueDt0aGlzLnk9Yi55Owp0aGlzLno9Yi56O3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYixlKTt0aGlzLngrPWIueDt0aGlzLnkrPWIueTt0aGlzLnorPWIuejtyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMueCs9Yjt0aGlzLnkrPWI7dGhpcy56Kz1iO3JldHVybiB0aGlzfSxhZGRWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy54PWIueCtlLng7dGhpcy55PWIueStlLnk7dGhpcy56PWIueitlLno7cmV0dXJuIHRoaXN9LGFkZFNjYWxlZFZlY3RvcjpmdW5jdGlvbihiLGUpe3RoaXMueCs9Yi54KmU7dGhpcy55Kz1iLnkqZTt0aGlzLnorPWIueiplO3JldHVybiB0aGlzfSxzdWI6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSwKdGhpcy5zdWJWZWN0b3JzKGIsZSk7dGhpcy54LT1iLng7dGhpcy55LT1iLnk7dGhpcy56LT1iLno7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngtPWI7dGhpcy55LT1iO3RoaXMuei09YjtyZXR1cm4gdGhpc30sc3ViVmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngtZS54O3RoaXMueT1iLnktZS55O3RoaXMuej1iLnotZS56O3JldHVybiB0aGlzfSxtdWx0aXBseTpmdW5jdGlvbihiLGUpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyhiLGUpO3RoaXMueCo9Yi54O3RoaXMueSo9Yi55O3RoaXMueio9Yi56O3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngqPWI7dGhpcy55Kj1iO3RoaXMueio9CmI7cmV0dXJuIHRoaXN9LG11bHRpcGx5VmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngqZS54O3RoaXMueT1iLnkqZS55O3RoaXMuej1iLnoqZS56O3JldHVybiB0aGlzfSxhcHBseUV1bGVyOmZ1bmN0aW9uKGIpe2ImJmIuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihrby5zZXRGcm9tRXVsZXIoYikpfSxhcHBseUF4aXNBbmdsZTpmdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihrby5zZXRGcm9tQXhpc0FuZ2xlKGIsZSkpfSxhcHBseU1hdHJpeDM6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy54LGg9dGhpcy55LG09dGhpcy56O2I9Yi5lbGVtZW50czt0aGlzLng9YlswXSplK2JbM10qaCtiWzZdKm07dGhpcy55PWJbMV0qZStiWzRdKmgrYls3XSoKbTt0aGlzLno9YlsyXSplK2JbNV0qaCtiWzhdKm07cmV0dXJuIHRoaXN9LGFwcGx5TWF0cml4NDpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnksbT10aGlzLno7Yj1iLmVsZW1lbnRzO3ZhciB1PTEvKGJbM10qZStiWzddKmgrYlsxMV0qbStiWzE1XSk7dGhpcy54PShiWzBdKmUrYls0XSpoK2JbOF0qbStiWzEyXSkqdTt0aGlzLnk9KGJbMV0qZStiWzVdKmgrYls5XSptK2JbMTNdKSp1O3RoaXMuej0oYlsyXSplK2JbNl0qaCtiWzEwXSptK2JbMTRdKSp1O3JldHVybiB0aGlzfSxhcHBseVF1YXRlcm5pb246ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy54LGg9dGhpcy55LG09dGhpcy56LHU9Yi54LHc9Yi55LEE9Yi56O2I9Yi53O3ZhciBFPWIqZSt3Km0tQSpoLEc9YipoK0EqZS11Km0sSj1iKm0rdSpoLXcqZTtlPS11KmUtdypoLUEqbTt0aGlzLng9RSpiK2UqLXUrRyotQS1KKi13O3RoaXMueT1HKmIrZSotdytKKi11LUUqLUE7dGhpcy56PUoqYitlKi1BK0UqLXctRyotdTtyZXR1cm4gdGhpc30sCnByb2plY3Q6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGIubWF0cml4V29ybGRJbnZlcnNlKS5hcHBseU1hdHJpeDQoYi5wcm9qZWN0aW9uTWF0cml4KX0sdW5wcm9qZWN0OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NChiLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCl9LHRyYW5zZm9ybURpcmVjdGlvbjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnksbT10aGlzLno7Yj1iLmVsZW1lbnRzO3RoaXMueD1iWzBdKmUrYls0XSpoK2JbOF0qbTt0aGlzLnk9YlsxXSplK2JbNV0qaCtiWzldKm07dGhpcy56PWJbMl0qZStiWzZdKmgrYlsxMF0qbTtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKX0sZGl2aWRlOmZ1bmN0aW9uKGIpe3RoaXMueC89Yi54O3RoaXMueS89Yi55O3RoaXMuei89Yi56O3JldHVybiB0aGlzfSxkaXZpZGVTY2FsYXI6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS8KYil9LG1pbjpmdW5jdGlvbihiKXt0aGlzLng9TWF0aC5taW4odGhpcy54LGIueCk7dGhpcy55PU1hdGgubWluKHRoaXMueSxiLnkpO3RoaXMuej1NYXRoLm1pbih0aGlzLnosYi56KTtyZXR1cm4gdGhpc30sbWF4OmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1heCh0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGIueSk7dGhpcy56PU1hdGgubWF4KHRoaXMueixiLnopO3JldHVybiB0aGlzfSxjbGFtcDpmdW5jdGlvbihiLGUpe3RoaXMueD1NYXRoLm1heChiLngsTWF0aC5taW4oZS54LHRoaXMueCkpO3RoaXMueT1NYXRoLm1heChiLnksTWF0aC5taW4oZS55LHRoaXMueSkpO3RoaXMuej1NYXRoLm1heChiLnosTWF0aC5taW4oZS56LHRoaXMueikpO3JldHVybiB0aGlzfSxjbGFtcFNjYWxhcjpmdW5jdGlvbihiLGUpe3RoaXMueD1NYXRoLm1heChiLE1hdGgubWluKGUsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGIsTWF0aC5taW4oZSx0aGlzLnkpKTt0aGlzLno9TWF0aC5tYXgoYiwKTWF0aC5taW4oZSx0aGlzLnopKTtyZXR1cm4gdGhpc30sY2xhbXBMZW5ndGg6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihofHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heChiLE1hdGgubWluKGUsaCkpKX0sZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT1NYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PU1hdGguZmxvb3IodGhpcy56KTtyZXR1cm4gdGhpc30sY2VpbDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmNlaWwodGhpcy54KTt0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7dGhpcy56PU1hdGguY2VpbCh0aGlzLnopO3JldHVybiB0aGlzfSxyb3VuZDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLnJvdW5kKHRoaXMueCk7dGhpcy55PU1hdGgucm91bmQodGhpcy55KTt0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopO3JldHVybiB0aGlzfSxyb3VuZFRvWmVybzpmdW5jdGlvbigpe3RoaXMueD0KMD50aGlzLng/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT0wPnRoaXMueT9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PTA+dGhpcy56P01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7dGhpcy55PS10aGlzLnk7dGhpcy56PS10aGlzLno7cmV0dXJuIHRoaXN9LGRvdDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy54KmIueCt0aGlzLnkqYi55K3RoaXMueipiLnp9LGxlbmd0aFNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX0sbWFuaGF0dGFuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KSsKTWF0aC5hYnModGhpcy56KX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfSxzZXRMZW5ndGg6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoYil9LGxlcnA6ZnVuY3Rpb24oYixlKXt0aGlzLngrPShiLngtdGhpcy54KSplO3RoaXMueSs9KGIueS10aGlzLnkpKmU7dGhpcy56Kz0oYi56LXRoaXMueikqZTtyZXR1cm4gdGhpc30sbGVycFZlY3RvcnM6ZnVuY3Rpb24oYixlLGgpe3JldHVybiB0aGlzLnN1YlZlY3RvcnMoZSxiKS5tdWx0aXBseVNjYWxhcihoKS5hZGQoYil9LGNyb3NzOmZ1bmN0aW9uKGIsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyhiLGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLApiKX0sY3Jvc3NWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi54LG09Yi55O2I9Yi56O3ZhciB1PWUueCx3PWUueTtlPWUuejt0aGlzLng9bSplLWIqdzt0aGlzLnk9Yip1LWgqZTt0aGlzLno9aCp3LW0qdTtyZXR1cm4gdGhpc30scHJvamVjdE9uVmVjdG9yOmZ1bmN0aW9uKGIpe3ZhciBlPWIuZG90KHRoaXMpL2IubGVuZ3RoU3EoKTtyZXR1cm4gdGhpcy5jb3B5KGIpLm11bHRpcGx5U2NhbGFyKGUpfSxwcm9qZWN0T25QbGFuZTpmdW5jdGlvbihiKXthbC5jb3B5KHRoaXMpLnByb2plY3RPblZlY3RvcihiKTtyZXR1cm4gdGhpcy5zdWIoYWwpfSxyZWZsZWN0OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnN1YihhbC5jb3B5KGIpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QoYikpKX0sYW5nbGVUbzpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5hY29zKGxiLmNsYW1wKHRoaXMuZG90KGIpL01hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqYi5sZW5ndGhTcSgpKSwtMSwxKSl9LGRpc3RhbmNlVG86ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKGIpKX0sCmRpc3RhbmNlVG9TcXVhcmVkOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMueC1iLngsaD10aGlzLnktYi55O2I9dGhpcy56LWIuejtyZXR1cm4gZSplK2gqaCtiKmJ9LG1hbmhhdHRhbkRpc3RhbmNlVG86ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGguYWJzKHRoaXMueC1iLngpK01hdGguYWJzKHRoaXMueS1iLnkpK01hdGguYWJzKHRoaXMuei1iLnopfSxzZXRGcm9tU3BoZXJpY2FsOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHMoYi5yYWRpdXMsYi5waGksYi50aGV0YSl9LHNldEZyb21TcGhlcmljYWxDb29yZHM6ZnVuY3Rpb24oYixlLGgpe3ZhciBtPU1hdGguc2luKGUpKmI7dGhpcy54PW0qTWF0aC5zaW4oaCk7dGhpcy55PU1hdGguY29zKGUpKmI7dGhpcy56PW0qTWF0aC5jb3MoaCk7cmV0dXJuIHRoaXN9LHNldEZyb21DeWxpbmRyaWNhbDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHMoYi5yYWRpdXMsYi50aGV0YSwKYi55KX0sc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzOmZ1bmN0aW9uKGIsZSxoKXt0aGlzLng9YipNYXRoLnNpbihlKTt0aGlzLnk9aDt0aGlzLno9YipNYXRoLmNvcyhlKTtyZXR1cm4gdGhpc30sc2V0RnJvbU1hdHJpeFBvc2l0aW9uOmZ1bmN0aW9uKGIpe2I9Yi5lbGVtZW50czt0aGlzLng9YlsxMl07dGhpcy55PWJbMTNdO3RoaXMuej1iWzE0XTtyZXR1cm4gdGhpc30sc2V0RnJvbU1hdHJpeFNjYWxlOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihiLDApLmxlbmd0aCgpLGg9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGIsMSkubGVuZ3RoKCk7Yj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oYiwyKS5sZW5ndGgoKTt0aGlzLng9ZTt0aGlzLnk9aDt0aGlzLno9YjtyZXR1cm4gdGhpc30sc2V0RnJvbU1hdHJpeENvbHVtbjpmdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLmZyb21BcnJheShiLmVsZW1lbnRzLDQqZSl9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi54PT09CnRoaXMueCYmYi55PT09dGhpcy55JiZiLno9PT10aGlzLnp9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMueD1iW2VdO3RoaXMueT1iW2UrMV07dGhpcy56PWJbZSsyXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWImJihiPVtdKTt2b2lkIDA9PT1lJiYoZT0wKTtiW2VdPXRoaXMueDtiW2UrMV09dGhpcy55O2JbZSsyXT10aGlzLno7cmV0dXJuIGJ9LGZyb21CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe3ZvaWQgMCE9PWgmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3RoaXMueD1iLmdldFgoZSk7dGhpcy55PWIuZ2V0WShlKTt0aGlzLno9Yi5nZXRaKGUpO3JldHVybiB0aGlzfX0pO3ZhciBjZj1uZXcgZztPYmplY3QuYXNzaWduKGwucHJvdG90eXBlLHtpc01hdHJpeDM6ITAsc2V0OmZ1bmN0aW9uKGIsCmUsaCxtLHUsdyxBLEUsRyl7dmFyIEo9dGhpcy5lbGVtZW50cztKWzBdPWI7SlsxXT1tO0pbMl09QTtKWzNdPWU7Sls0XT11O0pbNV09RTtKWzZdPWg7Sls3XT13O0pbOF09RztyZXR1cm4gdGhpc30saWRlbnRpdHk6ZnVuY3Rpb24oKXt0aGlzLnNldCgxLDAsMCwwLDEsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9LGNvcHk6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cztiPWIuZWxlbWVudHM7ZVswXT1iWzBdO2VbMV09YlsxXTtlWzJdPWJbMl07ZVszXT1iWzNdO2VbNF09Yls0XTtlWzVdPWJbNV07ZVs2XT1iWzZdO2VbN109Yls3XTtlWzhdPWJbOF07cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg0OmZ1bmN0aW9uKGIpe2I9Yi5lbGVtZW50czt0aGlzLnNldChiWzBdLGJbNF0sYls4XSxiWzFdLGJbNV0sYls5XSxiWzJdLGJbNl0sYlsxMF0pO3JldHVybiB0aGlzfSwKYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihiKXtmb3IodmFyIGU9MCxoPWIuY291bnQ7ZTxoO2UrKyljZi54PWIuZ2V0WChlKSxjZi55PWIuZ2V0WShlKSxjZi56PWIuZ2V0WihlKSxjZi5hcHBseU1hdHJpeDModGhpcyksYi5zZXRYWVooZSxjZi54LGNmLnksY2Yueik7cmV0dXJuIGJ9LG11bHRpcGx5OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyxiKX0scHJlbXVsdGlwbHk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyhiLHRoaXMpfSxtdWx0aXBseU1hdHJpY2VzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5lbGVtZW50cyxtPWUuZWxlbWVudHM7ZT10aGlzLmVsZW1lbnRzO2I9aFswXTt2YXIgdT1oWzNdLHc9aFs2XSxBPWhbMV0sRT1oWzRdLEc9aFs3XSxKPWhbMl0sUT1oWzVdO2g9aFs4XTt2YXIgUz1tWzBdLFQ9bVszXSxXPW1bNl0sWD1tWzFdLGlhPW1bNF0saGE9bVs3XSxzYT1tWzJdLHFhPW1bNV07bT1tWzhdOwplWzBdPWIqUyt1KlgrdypzYTtlWzNdPWIqVCt1KmlhK3cqcWE7ZVs2XT1iKlcrdSpoYSt3Km07ZVsxXT1BKlMrRSpYK0cqc2E7ZVs0XT1BKlQrRSppYStHKnFhO2VbN109QSpXK0UqaGErRyptO2VbMl09SipTK1EqWCtoKnNhO2VbNV09SipUK1EqaWEraCpxYTtlWzhdPUoqVytRKmhhK2gqbTtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cztlWzBdKj1iO2VbM10qPWI7ZVs2XSo9YjtlWzFdKj1iO2VbNF0qPWI7ZVs3XSo9YjtlWzJdKj1iO2VbNV0qPWI7ZVs4XSo9YjtyZXR1cm4gdGhpc30sZGV0ZXJtaW5hbnQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmVsZW1lbnRzLGU9YlswXSxoPWJbMV0sbT1iWzJdLHU9YlszXSx3PWJbNF0sQT1iWzVdLEU9Yls2XSxHPWJbN107Yj1iWzhdO3JldHVybiBlKncqYi1lKkEqRy1oKnUqYitoKkEqRSttKnUqRy1tKncqRX0sZ2V0SW52ZXJzZTpmdW5jdGlvbihiLGUpe2ImJmIuaXNNYXRyaXg0JiYKY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBubyBsb25nZXIgdGFrZXMgYSBNYXRyaXg0IGFyZ3VtZW50LiIpO3ZhciBoPWIuZWxlbWVudHM7Yj10aGlzLmVsZW1lbnRzO3ZhciBtPWhbMF0sdT1oWzFdLHc9aFsyXSxBPWhbM10sRT1oWzRdLEc9aFs1XSxKPWhbNl0sUT1oWzddO2g9aFs4XTt2YXIgUz1oKkUtRypRLFQ9RypKLWgqQSxXPVEqQS1FKkosWD1tKlMrdSpUK3cqVztpZigwPT09WCl7aWYoITA9PT1lKXRocm93IEVycm9yKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50IGlzIDAiKTtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO3JldHVybiB0aGlzLmlkZW50aXR5KCl9ZT0xL1g7YlswXT1TKmU7YlsxXT0odypRLWgqdSkqZTtiWzJdPShHKnUtdypFKSplO2JbM109VCplO2JbNF09CihoKm0tdypKKSplO2JbNV09KHcqQS1HKm0pKmU7Yls2XT1XKmU7Yls3XT0odSpKLVEqbSkqZTtiWzhdPShFKm0tdSpBKSplO3JldHVybiB0aGlzfSx0cmFuc3Bvc2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmVsZW1lbnRzO3ZhciBlPWJbMV07YlsxXT1iWzNdO2JbM109ZTtlPWJbMl07YlsyXT1iWzZdO2JbNl09ZTtlPWJbNV07Yls1XT1iWzddO2JbN109ZTtyZXR1cm4gdGhpc30sZ2V0Tm9ybWFsTWF0cml4OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KGIpLmdldEludmVyc2UodGhpcykudHJhbnNwb3NlKCl9LHRyYW5zcG9zZUludG9BcnJheTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2JbMF09ZVswXTtiWzFdPWVbM107YlsyXT1lWzZdO2JbM109ZVsxXTtiWzRdPWVbNF07Yls1XT1lWzddO2JbNl09ZVsyXTtiWzddPWVbNV07Yls4XT1lWzhdO3JldHVybiB0aGlzfSxzZXRVdlRyYW5zZm9ybTpmdW5jdGlvbihiLGUsaCxtLHUsdyxBKXt2YXIgRT0KTWF0aC5jb3ModSk7dT1NYXRoLnNpbih1KTt0aGlzLnNldChoKkUsaCp1LC1oKihFKncrdSpBKSt3K2IsLW0qdSxtKkUsLW0qKC11KncrRSpBKStBK2UsMCwwLDEpfSxzY2FsZTpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuZWxlbWVudHM7aFswXSo9YjtoWzNdKj1iO2hbNl0qPWI7aFsxXSo9ZTtoWzRdKj1lO2hbN10qPWU7cmV0dXJuIHRoaXN9LHJvdGF0ZTpmdW5jdGlvbihiKXt2YXIgZT1NYXRoLmNvcyhiKTtiPU1hdGguc2luKGIpO3ZhciBoPXRoaXMuZWxlbWVudHMsbT1oWzBdLHU9aFszXSx3PWhbNl0sQT1oWzFdLEU9aFs0XSxHPWhbN107aFswXT1lKm0rYipBO2hbM109ZSp1K2IqRTtoWzZdPWUqdytiKkc7aFsxXT0tYiptK2UqQTtoWzRdPS1iKnUrZSpFO2hbN109LWIqdytlKkc7cmV0dXJuIHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuZWxlbWVudHM7aFswXSs9YipoWzJdO2hbM10rPWIqaFs1XTtoWzZdKz1iKmhbOF07aFsxXSs9ZSpoWzJdO2hbNF0rPQplKmhbNV07aFs3XSs9ZSpoWzhdO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cztiPWIuZWxlbWVudHM7Zm9yKHZhciBoPTA7OT5oO2grKylpZihlW2hdIT09YltoXSlyZXR1cm4hMTtyZXR1cm4hMH0sZnJvbUFycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7Zm9yKHZhciBoPTA7OT5oO2grKyl0aGlzLmVsZW1lbnRzW2hdPWJbaCtlXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWImJihiPVtdKTt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgaD10aGlzLmVsZW1lbnRzO2JbZV09aFswXTtiW2UrMV09aFsxXTtiW2UrMl09aFsyXTtiW2UrM109aFszXTtiW2UrNF09aFs0XTtiW2UrNV09aFs1XTtiW2UrNl09aFs2XTtiW2UrN109aFs3XTtiW2UrOF09aFs4XTtyZXR1cm4gYn19KTt2YXIgcGcsdWU9e2dldERhdGFVUkw6ZnVuY3Rpb24oYil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudClyZXR1cm4gYi5zcmM7CmlmKCEoYiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KSl7dm9pZCAwPT09cGcmJihwZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKSk7cGcud2lkdGg9Yi53aWR0aDtwZy5oZWlnaHQ9Yi5oZWlnaHQ7dmFyIGU9cGcuZ2V0Q29udGV4dCgiMmQiKTtiIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2UucHV0SW1hZ2VEYXRhKGIsMCwwKTplLmRyYXdJbWFnZShiLDAsMCxiLndpZHRoLGIuaGVpZ2h0KTtiPXBnfXJldHVybiAyMDQ4PGIud2lkdGh8fDIwNDg8Yi5oZWlnaHQ/Yi50b0RhdGFVUkwoImltYWdlL2pwZWciLC42KTpiLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9fSxKcT0wO2suREVGQVVMVF9JTUFHRT12b2lkIDA7ay5ERUZBVUxUX01BUFBJTkc9MzAwO2sucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmssaXNUZXh0dXJlOiEwLHVwZGF0ZU1hdHJpeDpmdW5jdGlvbigpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsCnRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5uYW1lPWIubmFtZTt0aGlzLmltYWdlPWIuaW1hZ2U7dGhpcy5taXBtYXBzPWIubWlwbWFwcy5zbGljZSgwKTt0aGlzLm1hcHBpbmc9Yi5tYXBwaW5nO3RoaXMud3JhcFM9Yi53cmFwUzt0aGlzLndyYXBUPWIud3JhcFQ7dGhpcy5tYWdGaWx0ZXI9Yi5tYWdGaWx0ZXI7dGhpcy5taW5GaWx0ZXI9Yi5taW5GaWx0ZXI7dGhpcy5hbmlzb3Ryb3B5PWIuYW5pc290cm9weTt0aGlzLmZvcm1hdD1iLmZvcm1hdDt0aGlzLnR5cGU9Yi50eXBlO3RoaXMub2Zmc2V0LmNvcHkoYi5vZmZzZXQpO3RoaXMucmVwZWF0LmNvcHkoYi5yZXBlYXQpO3RoaXMuY2VudGVyLmNvcHkoYi5jZW50ZXIpO3RoaXMucm90YXRpb249CmIucm90YXRpb247dGhpcy5tYXRyaXhBdXRvVXBkYXRlPWIubWF0cml4QXV0b1VwZGF0ZTt0aGlzLm1hdHJpeC5jb3B5KGIubWF0cml4KTt0aGlzLmdlbmVyYXRlTWlwbWFwcz1iLmdlbmVyYXRlTWlwbWFwczt0aGlzLnByZW11bHRpcGx5QWxwaGE9Yi5wcmVtdWx0aXBseUFscGhhO3RoaXMuZmxpcFk9Yi5mbGlwWTt0aGlzLnVucGFja0FsaWdubWVudD1iLnVucGFja0FsaWdubWVudDt0aGlzLmVuY29kaW5nPWIuZW5jb2Rpbmc7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihiKXt2YXIgZT12b2lkIDA9PT1ifHwic3RyaW5nIj09PXR5cGVvZiBiO2lmKCFlJiZ2b2lkIDAhPT1iLnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIGIudGV4dHVyZXNbdGhpcy51dWlkXTt2YXIgaD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZywKcmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSxjZW50ZXI6W3RoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueV0scm90YXRpb246dGhpcy5yb3RhdGlvbix3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLGZvcm1hdDp0aGlzLmZvcm1hdCx0eXBlOnRoaXMudHlwZSxlbmNvZGluZzp0aGlzLmVuY29kaW5nLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWSxwcmVtdWx0aXBseUFscGhhOnRoaXMucHJlbXVsdGlwbHlBbHBoYSx1bnBhY2tBbGlnbm1lbnQ6dGhpcy51bnBhY2tBbGlnbm1lbnR9O2lmKHZvaWQgMCE9PXRoaXMuaW1hZ2Upe3ZhciBtPXRoaXMuaW1hZ2U7dm9pZCAwPT09bS51dWlkJiYobS51dWlkPWxiLmdlbmVyYXRlVVVJRCgpKTtpZighZSYmdm9pZCAwPT09Yi5pbWFnZXNbbS51dWlkXSl7aWYoQXJyYXkuaXNBcnJheShtKSl7dmFyIHU9CltdO2Zvcih2YXIgdz0wLEE9bS5sZW5ndGg7dzxBO3crKyl1LnB1c2godWUuZ2V0RGF0YVVSTChtW3ddKSl9ZWxzZSB1PXVlLmdldERhdGFVUkwobSk7Yi5pbWFnZXNbbS51dWlkXT17dXVpZDptLnV1aWQsdXJsOnV9fWguaW1hZ2U9bS51dWlkfWV8fChiLnRleHR1cmVzW3RoaXMudXVpZF09aCk7cmV0dXJuIGh9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9LHRyYW5zZm9ybVV2OmZ1bmN0aW9uKGIpe2lmKDMwMCE9PXRoaXMubWFwcGluZylyZXR1cm4gYjtiLmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCk7aWYoMD5iLnh8fDE8Yi54KXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIDFFMzpiLngtPU1hdGguZmxvb3IoYi54KTticmVhaztjYXNlIDEwMDE6Yi54PTA+Yi54PzA6MTticmVhaztjYXNlIDEwMDI6Yi54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKGIueCklMik/TWF0aC5jZWlsKGIueCktYi54OmIueC1NYXRoLmZsb29yKGIueCl9aWYoMD4KYi55fHwxPGIueSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAxRTM6Yi55LT1NYXRoLmZsb29yKGIueSk7YnJlYWs7Y2FzZSAxMDAxOmIueT0wPmIueT8wOjE7YnJlYWs7Y2FzZSAxMDAyOmIueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcihiLnkpJTIpP01hdGguY2VpbChiLnkpLWIueTpiLnktTWF0aC5mbG9vcihiLnkpfXRoaXMuZmxpcFkmJihiLnk9MS1iLnkpO3JldHVybiBifX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24oYil7ITA9PT1iJiZ0aGlzLnZlcnNpb24rK319KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSx7d2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnp9LHNldDpmdW5jdGlvbihiKXt0aGlzLno9Yn19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud30sc2V0OmZ1bmN0aW9uKGIpe3RoaXMudz1ifX19KTtPYmplY3QuYXNzaWduKG4ucHJvdG90eXBlLAp7aXNWZWN0b3I0OiEwLHNldDpmdW5jdGlvbihiLGUsaCxtKXt0aGlzLng9Yjt0aGlzLnk9ZTt0aGlzLno9aDt0aGlzLnc9bTtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD1iO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKGIpe3RoaXMueD1iO3JldHVybiB0aGlzfSxzZXRZOmZ1bmN0aW9uKGIpe3RoaXMueT1iO3JldHVybiB0aGlzfSxzZXRaOmZ1bmN0aW9uKGIpe3RoaXMuej1iO3JldHVybiB0aGlzfSxzZXRXOmZ1bmN0aW9uKGIpe3RoaXMudz1iO3JldHVybiB0aGlzfSxzZXRDb21wb25lbnQ6ZnVuY3Rpb24oYixlKXtzd2l0Y2goYil7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7Y2FzZSAzOnRoaXMudz1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIitiKTt9cmV0dXJuIHRoaXN9LGdldENvbXBvbmVudDpmdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiB0aGlzLng7CmNhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIitiKTt9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMueD1iLng7dGhpcy55PWIueTt0aGlzLno9Yi56O3RoaXMudz12b2lkIDAhPT1iLnc/Yi53OjE7cmV0dXJuIHRoaXN9LGFkZDpmdW5jdGlvbihiLGUpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyhiLGUpO3RoaXMueCs9Yi54O3RoaXMueSs9Yi55O3RoaXMueis9Yi56O3RoaXMudys9Yi53O3JldHVybiB0aGlzfSwKYWRkU2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMueCs9Yjt0aGlzLnkrPWI7dGhpcy56Kz1iO3RoaXMudys9YjtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngrZS54O3RoaXMueT1iLnkrZS55O3RoaXMuej1iLnorZS56O3RoaXMudz1iLncrZS53O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYixlKXt0aGlzLngrPWIueCplO3RoaXMueSs9Yi55KmU7dGhpcy56Kz1iLnoqZTt0aGlzLncrPWIudyplO3JldHVybiB0aGlzfSxzdWI6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnMoYixlKTt0aGlzLngtPWIueDt0aGlzLnktPWIueTt0aGlzLnotPWIuejt0aGlzLnctPWIudztyZXR1cm4gdGhpc30sc3ViU2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMueC09CmI7dGhpcy55LT1iO3RoaXMuei09Yjt0aGlzLnctPWI7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYixlKXt0aGlzLng9Yi54LWUueDt0aGlzLnk9Yi55LWUueTt0aGlzLno9Yi56LWUuejt0aGlzLnc9Yi53LWUudztyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54Kj1iO3RoaXMueSo9Yjt0aGlzLnoqPWI7dGhpcy53Kj1iO3JldHVybiB0aGlzfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy54LGg9dGhpcy55LG09dGhpcy56LHU9dGhpcy53O2I9Yi5lbGVtZW50czt0aGlzLng9YlswXSplK2JbNF0qaCtiWzhdKm0rYlsxMl0qdTt0aGlzLnk9YlsxXSplK2JbNV0qaCtiWzldKm0rYlsxM10qdTt0aGlzLno9YlsyXSplK2JbNl0qaCtiWzEwXSptK2JbMTRdKnU7dGhpcy53PWJbM10qZStiWzddKmgrYlsxMV0qbStiWzE1XSp1O3JldHVybiB0aGlzfSxkaXZpZGVTY2FsYXI6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS8KYil9LHNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGIpe3RoaXMudz0yKk1hdGguYWNvcyhiLncpO3ZhciBlPU1hdGguc3FydCgxLWIudypiLncpOzFFLTQ+ZT8odGhpcy54PTEsdGhpcy56PXRoaXMueT0wKToodGhpcy54PWIueC9lLHRoaXMueT1iLnkvZSx0aGlzLno9Yi56L2UpO3JldHVybiB0aGlzfSxzZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oYil7Yj1iLmVsZW1lbnRzO3ZhciBlPWJbMF07dmFyIGg9Yls0XTt2YXIgbT1iWzhdLHU9YlsxXSx3PWJbNV0sQT1iWzldO3ZhciBFPWJbMl07dmFyIEc9Yls2XTt2YXIgSj1iWzEwXTtpZiguMDE+TWF0aC5hYnMoaC11KSYmLjAxPk1hdGguYWJzKG0tRSkmJi4wMT5NYXRoLmFicyhBLUcpKXtpZiguMT5NYXRoLmFicyhoK3UpJiYuMT5NYXRoLmFicyhtK0UpJiYuMT5NYXRoLmFicyhBK0cpJiYuMT5NYXRoLmFicyhlK3crSi0zKSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztiPU1hdGguUEk7CmU9KGUrMSkvMjt3PSh3KzEpLzI7Sj0oSisxKS8yO2g9KGgrdSkvNDttPShtK0UpLzQ7QT0oQStHKS80O2U+dyYmZT5KPy4wMT5lPyhHPTAsaD1FPS43MDcxMDY3ODEpOihHPU1hdGguc3FydChlKSxFPWgvRyxoPW0vRyk6dz5KPy4wMT53PyhHPS43MDcxMDY3ODEsRT0wLGg9LjcwNzEwNjc4MSk6KEU9TWF0aC5zcXJ0KHcpLEc9aC9FLGg9QS9FKTouMDE+Sj8oRT1HPS43MDcxMDY3ODEsaD0wKTooaD1NYXRoLnNxcnQoSiksRz1tL2gsRT1BL2gpO3RoaXMuc2V0KEcsRSxoLGIpO3JldHVybiB0aGlzfWI9TWF0aC5zcXJ0KChHLUEpKihHLUEpKyhtLUUpKihtLUUpKyh1LWgpKih1LWgpKTsuMDAxPk1hdGguYWJzKGIpJiYoYj0xKTt0aGlzLng9KEctQSkvYjt0aGlzLnk9KG0tRSkvYjt0aGlzLno9KHUtaCkvYjt0aGlzLnc9TWF0aC5hY29zKChlK3crSi0xKS8yKTtyZXR1cm4gdGhpc30sbWluOmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1pbih0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5taW4odGhpcy55LApiLnkpO3RoaXMuej1NYXRoLm1pbih0aGlzLnosYi56KTt0aGlzLnc9TWF0aC5taW4odGhpcy53LGIudyk7cmV0dXJuIHRoaXN9LG1heDpmdW5jdGlvbihiKXt0aGlzLng9TWF0aC5tYXgodGhpcy54LGIueCk7dGhpcy55PU1hdGgubWF4KHRoaXMueSxiLnkpO3RoaXMuej1NYXRoLm1heCh0aGlzLnosYi56KTt0aGlzLnc9TWF0aC5tYXgodGhpcy53LGIudyk7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIueCxNYXRoLm1pbihlLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGIueSxNYXRoLm1pbihlLnksdGhpcy55KSk7dGhpcy56PU1hdGgubWF4KGIueixNYXRoLm1pbihlLnosdGhpcy56KSk7dGhpcy53PU1hdGgubWF4KGIudyxNYXRoLm1pbihlLncsdGhpcy53KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIsTWF0aC5taW4oZSx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYixNYXRoLm1pbihlLAp0aGlzLnkpKTt0aGlzLno9TWF0aC5tYXgoYixNYXRoLm1pbihlLHRoaXMueikpO3RoaXMudz1NYXRoLm1heChiLE1hdGgubWluKGUsdGhpcy53KSk7cmV0dXJuIHRoaXN9LGNsYW1wTGVuZ3RoOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaHx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgoYixNYXRoLm1pbihlLGgpKSl9LGZsb29yOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpO3RoaXMuej1NYXRoLmZsb29yKHRoaXMueik7dGhpcy53PU1hdGguZmxvb3IodGhpcy53KTtyZXR1cm4gdGhpc30sY2VpbDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmNlaWwodGhpcy54KTt0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSk7dGhpcy56PU1hdGguY2VpbCh0aGlzLnopO3RoaXMudz1NYXRoLmNlaWwodGhpcy53KTtyZXR1cm4gdGhpc30scm91bmQ6ZnVuY3Rpb24oKXt0aGlzLng9Ck1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpO3RoaXMuej1NYXRoLnJvdW5kKHRoaXMueik7dGhpcy53PU1hdGgucm91bmQodGhpcy53KTtyZXR1cm4gdGhpc30scm91bmRUb1plcm86ZnVuY3Rpb24oKXt0aGlzLng9MD50aGlzLng/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT0wPnRoaXMueT9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSk7dGhpcy56PTA+dGhpcy56P01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KTt0aGlzLnc9MD50aGlzLnc/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLng9LXRoaXMueDt0aGlzLnk9LXRoaXMueTt0aGlzLno9LXRoaXMuejt0aGlzLnc9LXRoaXMudztyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLngqYi54K3RoaXMueSpiLnkrdGhpcy56KgpiLnordGhpcy53KmIud30sbGVuZ3RoU3E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud30sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX0sbWFuaGF0dGFuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9LG5vcm1hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX0sc2V0TGVuZ3RoOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKGIpfSxsZXJwOmZ1bmN0aW9uKGIsZSl7dGhpcy54Kz0oYi54LXRoaXMueCkqZTt0aGlzLnkrPShiLnktdGhpcy55KSplO3RoaXMueis9KGIuei0KdGhpcy56KSplO3RoaXMudys9KGIudy10aGlzLncpKmU7cmV0dXJuIHRoaXN9LGxlcnBWZWN0b3JzOmZ1bmN0aW9uKGIsZSxoKXtyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKGUsYikubXVsdGlwbHlTY2FsYXIoaCkuYWRkKGIpfSxlcXVhbHM6ZnVuY3Rpb24oYil7cmV0dXJuIGIueD09PXRoaXMueCYmYi55PT09dGhpcy55JiZiLno9PT10aGlzLnomJmIudz09PXRoaXMud30sZnJvbUFycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dGhpcy54PWJbZV07dGhpcy55PWJbZSsxXTt0aGlzLno9YltlKzJdO3RoaXMudz1iW2UrM107cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09ZSYmKGU9MCk7YltlXT10aGlzLng7YltlKzFdPXRoaXMueTtiW2UrMl09dGhpcy56O2JbZSszXT10aGlzLnc7cmV0dXJuIGJ9LGZyb21CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe3ZvaWQgMCE9PWgmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpOwp0aGlzLng9Yi5nZXRYKGUpO3RoaXMueT1iLmdldFkoZSk7dGhpcy56PWIuZ2V0WihlKTt0aGlzLnc9Yi5nZXRXKGUpO3JldHVybiB0aGlzfX0pO3AucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnAsaXNXZWJHTFJlbmRlclRhcmdldDohMCxzZXRTaXplOmZ1bmN0aW9uKGIsZSl7aWYodGhpcy53aWR0aCE9PWJ8fHRoaXMuaGVpZ2h0IT09ZSl0aGlzLndpZHRoPWIsdGhpcy5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9Yix0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy5kaXNwb3NlKCk7dGhpcy52aWV3cG9ydC5zZXQoMCwwLGIsZSk7dGhpcy5zY2lzc29yLnNldCgwLDAsYixlKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy53aWR0aD1iLndpZHRoO3RoaXMuaGVpZ2h0PWIuaGVpZ2h0O3RoaXMudmlld3BvcnQuY29weShiLnZpZXdwb3J0KTsKdGhpcy50ZXh0dXJlPWIudGV4dHVyZS5jbG9uZSgpO3RoaXMuZGVwdGhCdWZmZXI9Yi5kZXB0aEJ1ZmZlcjt0aGlzLnN0ZW5jaWxCdWZmZXI9Yi5zdGVuY2lsQnVmZmVyO3RoaXMuZGVwdGhUZXh0dXJlPWIuZGVwdGhUZXh0dXJlO3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO3EucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShwLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnEsaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0OiEwLGNvcHk6ZnVuY3Rpb24oYil7cC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5zYW1wbGVzPWIuc2FtcGxlcztyZXR1cm4gdGhpc319KTt2YXIgTWM9bmV3IGcsZmM9bmV3IHIsdHM9bmV3IGcoMCwwLDApLHVzPW5ldyBnKDEsMSwxKSx2ZT1uZXcgZyxkaj1uZXcgZyxCYz1uZXcgZztPYmplY3QuYXNzaWduKHIucHJvdG90eXBlLHtpc01hdHJpeDQ6ITAsCnNldDpmdW5jdGlvbihiLGUsaCxtLHUsdyxBLEUsRyxKLFEsUyxULFcsWCxpYSl7dmFyIGhhPXRoaXMuZWxlbWVudHM7aGFbMF09YjtoYVs0XT1lO2hhWzhdPWg7aGFbMTJdPW07aGFbMV09dTtoYVs1XT13O2hhWzldPUE7aGFbMTNdPUU7aGFbMl09RztoYVs2XT1KO2hhWzEwXT1RO2hhWzE0XT1TO2hhWzNdPVQ7aGFbN109VztoYVsxMV09WDtoYVsxNV09aWE7cmV0dXJuIHRoaXN9LGlkZW50aXR5OmZ1bmN0aW9uKCl7dGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyByKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9LGNvcHk6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cztiPWIuZWxlbWVudHM7ZVswXT1iWzBdO2VbMV09YlsxXTtlWzJdPWJbMl07ZVszXT1iWzNdO2VbNF09Yls0XTtlWzVdPWJbNV07ZVs2XT1iWzZdO2VbN109Yls3XTtlWzhdPWJbOF07ZVs5XT1iWzldO2VbMTBdPQpiWzEwXTtlWzExXT1iWzExXTtlWzEyXT1iWzEyXTtlWzEzXT1iWzEzXTtlWzE0XT1iWzE0XTtlWzE1XT1iWzE1XTtyZXR1cm4gdGhpc30sY29weVBvc2l0aW9uOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZWxlbWVudHM7Yj1iLmVsZW1lbnRzO2VbMTJdPWJbMTJdO2VbMTNdPWJbMTNdO2VbMTRdPWJbMTRdO3JldHVybiB0aGlzfSxleHRyYWN0QmFzaXM6ZnVuY3Rpb24oYixlLGgpe2Iuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApO2Uuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpO2guc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpO3JldHVybiB0aGlzfSxtYWtlQmFzaXM6ZnVuY3Rpb24oYixlLGgpe3RoaXMuc2V0KGIueCxlLngsaC54LDAsYi55LGUueSxoLnksMCxiLnosZS56LGgueiwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxleHRyYWN0Um90YXRpb246ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cyxoPWIuZWxlbWVudHMsbT0xL01jLnNldEZyb21NYXRyaXhDb2x1bW4oYiwKMCkubGVuZ3RoKCksdT0xL01jLnNldEZyb21NYXRyaXhDb2x1bW4oYiwxKS5sZW5ndGgoKTtiPTEvTWMuc2V0RnJvbU1hdHJpeENvbHVtbihiLDIpLmxlbmd0aCgpO2VbMF09aFswXSptO2VbMV09aFsxXSptO2VbMl09aFsyXSptO2VbM109MDtlWzRdPWhbNF0qdTtlWzVdPWhbNV0qdTtlWzZdPWhbNl0qdTtlWzddPTA7ZVs4XT1oWzhdKmI7ZVs5XT1oWzldKmI7ZVsxMF09aFsxMF0qYjtlWzExXT0wO2VbMTJdPTA7ZVsxM109MDtlWzE0XT0wO2VbMTVdPTE7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihiKXtiJiZiLmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGU9dGhpcy5lbGVtZW50cyxoPWIueCxtPWIueSx1PWIueix3PU1hdGguY29zKGgpO2g9TWF0aC5zaW4oaCk7CnZhciBBPU1hdGguY29zKG0pO209TWF0aC5zaW4obSk7dmFyIEU9TWF0aC5jb3ModSk7dT1NYXRoLnNpbih1KTtpZigiWFlaIj09PWIub3JkZXIpe2I9dypFO3ZhciBHPXcqdSxKPWgqRSxRPWgqdTtlWzBdPUEqRTtlWzRdPS1BKnU7ZVs4XT1tO2VbMV09RytKKm07ZVs1XT1iLVEqbTtlWzldPS1oKkE7ZVsyXT1RLWIqbTtlWzZdPUorRyptO2VbMTBdPXcqQX1lbHNlIllYWiI9PT1iLm9yZGVyPyhiPUEqRSxHPUEqdSxKPW0qRSxRPW0qdSxlWzBdPWIrUSpoLGVbNF09SipoLUcsZVs4XT13Km0sZVsxXT13KnUsZVs1XT13KkUsZVs5XT0taCxlWzJdPUcqaC1KLGVbNl09UStiKmgsZVsxMF09dypBKToiWlhZIj09PWIub3JkZXI/KGI9QSpFLEc9QSp1LEo9bSpFLFE9bSp1LGVbMF09Yi1RKmgsZVs0XT0tdyp1LGVbOF09SitHKmgsZVsxXT1HK0oqaCxlWzVdPXcqRSxlWzldPVEtYipoLGVbMl09LXcqbSxlWzZdPWgsZVsxMF09dypBKToiWllYIj09PWIub3JkZXI/KGI9dypFLEc9dyp1LEo9aCoKRSxRPWgqdSxlWzBdPUEqRSxlWzRdPUoqbS1HLGVbOF09YiptK1EsZVsxXT1BKnUsZVs1XT1RKm0rYixlWzldPUcqbS1KLGVbMl09LW0sZVs2XT1oKkEsZVsxMF09dypBKToiWVpYIj09PWIub3JkZXI/KGI9dypBLEc9dyptLEo9aCpBLFE9aCptLGVbMF09QSpFLGVbNF09US1iKnUsZVs4XT1KKnUrRyxlWzFdPXUsZVs1XT13KkUsZVs5XT0taCpFLGVbMl09LW0qRSxlWzZdPUcqdStKLGVbMTBdPWItUSp1KToiWFpZIj09PWIub3JkZXImJihiPXcqQSxHPXcqbSxKPWgqQSxRPWgqbSxlWzBdPUEqRSxlWzRdPS11LGVbOF09bSpFLGVbMV09Yip1K1EsZVs1XT13KkUsZVs5XT1HKnUtSixlWzJdPUoqdS1HLGVbNl09aCpFLGVbMTBdPVEqdStiKTtlWzNdPTA7ZVs3XT0wO2VbMTFdPTA7ZVsxMl09MDtlWzEzXT0wO2VbMTRdPTA7ZVsxNV09MTtyZXR1cm4gdGhpc30sbWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY29tcG9zZSh0cyxiLHVzKX0sbG9va0F0OmZ1bmN0aW9uKGIsCmUsaCl7dmFyIG09dGhpcy5lbGVtZW50cztCYy5zdWJWZWN0b3JzKGIsZSk7MD09PUJjLmxlbmd0aFNxKCkmJihCYy56PTEpO0JjLm5vcm1hbGl6ZSgpO3ZlLmNyb3NzVmVjdG9ycyhoLEJjKTswPT09dmUubGVuZ3RoU3EoKSYmKDE9PT1NYXRoLmFicyhoLnopP0JjLngrPTFFLTQ6QmMueis9MUUtNCxCYy5ub3JtYWxpemUoKSx2ZS5jcm9zc1ZlY3RvcnMoaCxCYykpO3ZlLm5vcm1hbGl6ZSgpO2RqLmNyb3NzVmVjdG9ycyhCYyx2ZSk7bVswXT12ZS54O21bNF09ZGoueDttWzhdPUJjLng7bVsxXT12ZS55O21bNV09ZGoueTttWzldPUJjLnk7bVsyXT12ZS56O21bNl09ZGouejttWzEwXT1CYy56O3JldHVybiB0aGlzfSxtdWx0aXBseTpmdW5jdGlvbihiLGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLAp0aGlzLm11bHRpcGx5TWF0cmljZXMoYixlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsYil9LHByZW11bHRpcGx5OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXMoYix0aGlzKX0sbXVsdGlwbHlNYXRyaWNlczpmdW5jdGlvbihiLGUpe3ZhciBoPWIuZWxlbWVudHMsbT1lLmVsZW1lbnRzO2U9dGhpcy5lbGVtZW50cztiPWhbMF07dmFyIHU9aFs0XSx3PWhbOF0sQT1oWzEyXSxFPWhbMV0sRz1oWzVdLEo9aFs5XSxRPWhbMTNdLFM9aFsyXSxUPWhbNl0sVz1oWzEwXSxYPWhbMTRdLGlhPWhbM10saGE9aFs3XSxzYT1oWzExXTtoPWhbMTVdO3ZhciBxYT1tWzBdLHJhPW1bNF0sd2E9bVs4XSxwYT1tWzEyXSx2YT1tWzFdLENhPW1bNV0sVmE9bVs5XSxXYT1tWzEzXSxEYT1tWzJdLElhPW1bNl0sRWE9bVsxMF0sT2E9bVsxNF0saGI9bVszXSx5Yj1tWzddLExhPW1bMTFdO209bVsxNV07ZVswXT1iKnFhK3UqdmErdypEYStBKmhiO2VbNF09YipyYSt1KkNhK3cqCklhK0EqeWI7ZVs4XT1iKndhK3UqVmErdypFYStBKkxhO2VbMTJdPWIqcGErdSpXYSt3Kk9hK0EqbTtlWzFdPUUqcWErRyp2YStKKkRhK1EqaGI7ZVs1XT1FKnJhK0cqQ2ErSipJYStRKnliO2VbOV09RSp3YStHKlZhK0oqRWErUSpMYTtlWzEzXT1FKnBhK0cqV2ErSipPYStRKm07ZVsyXT1TKnFhK1QqdmErVypEYStYKmhiO2VbNl09UypyYStUKkNhK1cqSWErWCp5YjtlWzEwXT1TKndhK1QqVmErVypFYStYKkxhO2VbMTRdPVMqcGErVCpXYStXKk9hK1gqbTtlWzNdPWlhKnFhK2hhKnZhK3NhKkRhK2gqaGI7ZVs3XT1pYSpyYStoYSpDYStzYSpJYStoKnliO2VbMTFdPWlhKndhK2hhKlZhK3NhKkVhK2gqTGE7ZVsxNV09aWEqcGEraGEqV2Erc2EqT2EraCptO3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2VbMF0qPWI7ZVs0XSo9YjtlWzhdKj1iO2VbMTJdKj1iO2VbMV0qPWI7ZVs1XSo9YjtlWzldKj1iO2VbMTNdKj1iO2VbMl0qPQpiO2VbNl0qPWI7ZVsxMF0qPWI7ZVsxNF0qPWI7ZVszXSo9YjtlWzddKj1iO2VbMTFdKj1iO2VbMTVdKj1iO3JldHVybiB0aGlzfSxhcHBseVRvQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT0wLGg9Yi5jb3VudDtlPGg7ZSsrKU1jLng9Yi5nZXRYKGUpLE1jLnk9Yi5nZXRZKGUpLE1jLno9Yi5nZXRaKGUpLE1jLmFwcGx5TWF0cml4NCh0aGlzKSxiLnNldFhZWihlLE1jLngsTWMueSxNYy56KTtyZXR1cm4gYn0sZGV0ZXJtaW5hbnQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmVsZW1lbnRzLGU9YlswXSxoPWJbNF0sbT1iWzhdLHU9YlsxMl0sdz1iWzFdLEE9Yls1XSxFPWJbOV0sRz1iWzEzXSxKPWJbMl0sUT1iWzZdLFM9YlsxMF0sVD1iWzE0XTtyZXR1cm4gYlszXSooK3UqRSpRLW0qRypRLXUqQSpTK2gqRypTK20qQSpULWgqRSpUKStiWzddKigrZSpFKlQtZSpHKlMrdSp3KlMtbSp3KlQrbSpHKkotdSpFKkopK2JbMTFdKigrZSpHKlEtZSpBKlQtdSp3KlEraCp3KlQrCnUqQSpKLWgqRypKKStiWzE1XSooLW0qQSpKLWUqRSpRK2UqQSpTK20qdypRLWgqdypTK2gqRSpKKX0sdHJhbnNwb3NlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50czt2YXIgZT1iWzFdO2JbMV09Yls0XTtiWzRdPWU7ZT1iWzJdO2JbMl09Yls4XTtiWzhdPWU7ZT1iWzZdO2JbNl09Yls5XTtiWzldPWU7ZT1iWzNdO2JbM109YlsxMl07YlsxMl09ZTtlPWJbN107Yls3XT1iWzEzXTtiWzEzXT1lO2U9YlsxMV07YlsxMV09YlsxNF07YlsxNF09ZTtyZXR1cm4gdGhpc30sc2V0UG9zaXRpb246ZnVuY3Rpb24oYixlLGgpe3ZhciBtPXRoaXMuZWxlbWVudHM7Yi5pc1ZlY3RvcjM/KG1bMTJdPWIueCxtWzEzXT1iLnksbVsxNF09Yi56KToobVsxMl09YixtWzEzXT1lLG1bMTRdPWgpO3JldHVybiB0aGlzfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5lbGVtZW50cyxtPWIuZWxlbWVudHM7Yj1tWzBdO3ZhciB1PW1bMV0sdz1tWzJdLEE9bVszXSxFPW1bNF0sRz1tWzVdLApKPW1bNl0sUT1tWzddLFM9bVs4XSxUPW1bOV0sVz1tWzEwXSxYPW1bMTFdLGlhPW1bMTJdLGhhPW1bMTNdLHNhPW1bMTRdO209bVsxNV07dmFyIHFhPVQqc2EqUS1oYSpXKlEraGEqSipYLUcqc2EqWC1UKkoqbStHKlcqbSxyYT1pYSpXKlEtUypzYSpRLWlhKkoqWCtFKnNhKlgrUypKKm0tRSpXKm0sd2E9UypoYSpRLWlhKlQqUStpYSpHKlgtRSpoYSpYLVMqRyptK0UqVCptLHBhPWlhKlQqSi1TKmhhKkotaWEqRypXK0UqaGEqVytTKkcqc2EtRSpUKnNhLHZhPWIqcWErdSpyYSt3KndhK0EqcGE7aWYoMD09PXZhKXtpZighMD09PWUpdGhyb3cgRXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7cmV0dXJuIHRoaXMuaWRlbnRpdHkoKX1lPTEvdmE7aFswXT0KcWEqZTtoWzFdPShoYSpXKkEtVCpzYSpBLWhhKncqWCt1KnNhKlgrVCp3Km0tdSpXKm0pKmU7aFsyXT0oRypzYSpBLWhhKkoqQStoYSp3KlEtdSpzYSpRLUcqdyptK3UqSiptKSplO2hbM109KFQqSipBLUcqVypBLVQqdypRK3UqVypRK0cqdypYLXUqSipYKSplO2hbNF09cmEqZTtoWzVdPShTKnNhKkEtaWEqVypBK2lhKncqWC1iKnNhKlgtUyp3Km0rYipXKm0pKmU7aFs2XT0oaWEqSipBLUUqc2EqQS1pYSp3KlErYipzYSpRK0UqdyptLWIqSiptKSplO2hbN109KEUqVypBLVMqSipBK1MqdypRLWIqVypRLUUqdypYK2IqSipYKSplO2hbOF09d2EqZTtoWzldPShpYSpUKkEtUypoYSpBLWlhKnUqWCtiKmhhKlgrUyp1Km0tYipUKm0pKmU7aFsxMF09KEUqaGEqQS1pYSpHKkEraWEqdSpRLWIqaGEqUS1FKnUqbStiKkcqbSkqZTtoWzExXT0oUypHKkEtRSpUKkEtUyp1KlErYipUKlErRSp1KlgtYipHKlgpKmU7aFsxMl09cGEqZTtoWzEzXT0oUypoYSp3LWlhKlQqdytpYSp1KlctYipoYSpXLQpTKnUqc2ErYipUKnNhKSplO2hbMTRdPShpYSpHKnctRSpoYSp3LWlhKnUqSitiKmhhKkorRSp1KnNhLWIqRypzYSkqZTtoWzE1XT0oRSpUKnctUypHKncrUyp1KkotYipUKkotRSp1KlcrYipHKlcpKmU7cmV0dXJuIHRoaXN9LHNjYWxlOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZWxlbWVudHMsaD1iLngsbT1iLnk7Yj1iLno7ZVswXSo9aDtlWzRdKj1tO2VbOF0qPWI7ZVsxXSo9aDtlWzVdKj1tO2VbOV0qPWI7ZVsyXSo9aDtlWzZdKj1tO2VbMTBdKj1iO2VbM10qPWg7ZVs3XSo9bTtlWzExXSo9YjtyZXR1cm4gdGhpc30sZ2V0TWF4U2NhbGVPbkF4aXM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmVsZW1lbnRzO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoYlswXSpiWzBdK2JbMV0qYlsxXStiWzJdKmJbMl0sYls0XSpiWzRdK2JbNV0qYls1XStiWzZdKmJbNl0sYls4XSpiWzhdK2JbOV0qYls5XStiWzEwXSpiWzEwXSkpfSxtYWtlVHJhbnNsYXRpb246ZnVuY3Rpb24oYixlLGgpe3RoaXMuc2V0KDEsCjAsMCxiLDAsMSwwLGUsMCwwLDEsaCwwLDAsMCwxKTtyZXR1cm4gdGhpc30sbWFrZVJvdGF0aW9uWDpmdW5jdGlvbihiKXt2YXIgZT1NYXRoLmNvcyhiKTtiPU1hdGguc2luKGIpO3RoaXMuc2V0KDEsMCwwLDAsMCxlLC1iLDAsMCxiLGUsMCwwLDAsMCwxKTtyZXR1cm4gdGhpc30sbWFrZVJvdGF0aW9uWTpmdW5jdGlvbihiKXt2YXIgZT1NYXRoLmNvcyhiKTtiPU1hdGguc2luKGIpO3RoaXMuc2V0KGUsMCxiLDAsMCwxLDAsMCwtYiwwLGUsMCwwLDAsMCwxKTtyZXR1cm4gdGhpc30sbWFrZVJvdGF0aW9uWjpmdW5jdGlvbihiKXt2YXIgZT1NYXRoLmNvcyhiKTtiPU1hdGguc2luKGIpO3RoaXMuc2V0KGUsLWIsMCwwLGIsZSwwLDAsMCwwLDEsMCwwLDAsMCwxKTtyZXR1cm4gdGhpc30sbWFrZVJvdGF0aW9uQXhpczpmdW5jdGlvbihiLGUpe3ZhciBoPU1hdGguY29zKGUpO2U9TWF0aC5zaW4oZSk7dmFyIG09MS1oLHU9Yi54LHc9Yi55O2I9Yi56O3ZhciBBPW0qdSxFPW0qdzt0aGlzLnNldChBKgp1K2gsQSp3LWUqYixBKmIrZSp3LDAsQSp3K2UqYixFKncraCxFKmItZSp1LDAsQSpiLWUqdyxFKmIrZSp1LG0qYipiK2gsMCwwLDAsMCwxKTtyZXR1cm4gdGhpc30sbWFrZVNjYWxlOmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnNldChiLDAsMCwwLDAsZSwwLDAsMCwwLGgsMCwwLDAsMCwxKTtyZXR1cm4gdGhpc30sbWFrZVNoZWFyOmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnNldCgxLGUsaCwwLGIsMSxoLDAsYixlLDEsMCwwLDAsMCwxKTtyZXR1cm4gdGhpc30sY29tcG9zZTpmdW5jdGlvbihiLGUsaCl7dmFyIG09dGhpcy5lbGVtZW50cyx1PWUuX3gsdz1lLl95LEE9ZS5feixFPWUuX3csRz11K3UsSj13K3csUT1BK0E7ZT11Kkc7dmFyIFM9dSpKO3UqPVE7dmFyIFQ9dypKO3cqPVE7QSo9UTtHKj1FO0oqPUU7RSo9UTtRPWgueDt2YXIgVz1oLnk7aD1oLno7bVswXT0oMS0oVCtBKSkqUTttWzFdPShTK0UpKlE7bVsyXT0odS1KKSpRO21bM109MDttWzRdPShTLUUpKlc7bVs1XT0oMS0oZStBKSkqClc7bVs2XT0odytHKSpXO21bN109MDttWzhdPSh1K0opKmg7bVs5XT0ody1HKSpoO21bMTBdPSgxLShlK1QpKSpoO21bMTFdPTA7bVsxMl09Yi54O21bMTNdPWIueTttWzE0XT1iLno7bVsxNV09MTtyZXR1cm4gdGhpc30sZGVjb21wb3NlOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbT10aGlzLmVsZW1lbnRzLHU9TWMuc2V0KG1bMF0sbVsxXSxtWzJdKS5sZW5ndGgoKSx3PU1jLnNldChtWzRdLG1bNV0sbVs2XSkubGVuZ3RoKCksQT1NYy5zZXQobVs4XSxtWzldLG1bMTBdKS5sZW5ndGgoKTswPnRoaXMuZGV0ZXJtaW5hbnQoKSYmKHU9LXUpO2IueD1tWzEyXTtiLnk9bVsxM107Yi56PW1bMTRdO2ZjLmNvcHkodGhpcyk7Yj0xL3U7bT0xL3c7dmFyIEU9MS9BO2ZjLmVsZW1lbnRzWzBdKj1iO2ZjLmVsZW1lbnRzWzFdKj1iO2ZjLmVsZW1lbnRzWzJdKj1iO2ZjLmVsZW1lbnRzWzRdKj1tO2ZjLmVsZW1lbnRzWzVdKj1tO2ZjLmVsZW1lbnRzWzZdKj1tO2ZjLmVsZW1lbnRzWzhdKj1FO2ZjLmVsZW1lbnRzWzldKj0KRTtmYy5lbGVtZW50c1sxMF0qPUU7ZS5zZXRGcm9tUm90YXRpb25NYXRyaXgoZmMpO2gueD11O2gueT13O2guej1BO3JldHVybiB0aGlzfSxtYWtlUGVyc3BlY3RpdmU6ZnVuY3Rpb24oYixlLGgsbSx1LHcpe3ZvaWQgMD09PXcmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO3ZhciBBPXRoaXMuZWxlbWVudHM7QVswXT0yKnUvKGUtYik7QVs0XT0wO0FbOF09KGUrYikvKGUtYik7QVsxMl09MDtBWzFdPTA7QVs1XT0yKnUvKGgtbSk7QVs5XT0oaCttKS8oaC1tKTtBWzEzXT0wO0FbMl09MDtBWzZdPTA7QVsxMF09LSh3K3UpLyh3LXUpO0FbMTRdPS0yKncqdS8ody11KTtBWzNdPTA7QVs3XT0wO0FbMTFdPS0xO0FbMTVdPTA7cmV0dXJuIHRoaXN9LG1ha2VPcnRob2dyYXBoaWM6ZnVuY3Rpb24oYixlLGgsbSx1LHcpe3ZhciBBPQp0aGlzLmVsZW1lbnRzLEU9MS8oZS1iKSxHPTEvKGgtbSksSj0xLyh3LXUpO0FbMF09MipFO0FbNF09MDtBWzhdPTA7QVsxMl09LSgoZStiKSpFKTtBWzFdPTA7QVs1XT0yKkc7QVs5XT0wO0FbMTNdPS0oKGgrbSkqRyk7QVsyXT0wO0FbNl09MDtBWzEwXT0tMipKO0FbMTRdPS0oKHcrdSkqSik7QVszXT0wO0FbN109MDtBWzExXT0wO0FbMTVdPTE7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2I9Yi5lbGVtZW50cztmb3IodmFyIGg9MDsxNj5oO2grKylpZihlW2hdIT09YltoXSlyZXR1cm4hMTtyZXR1cm4hMH0sZnJvbUFycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7Zm9yKHZhciBoPTA7MTY+aDtoKyspdGhpcy5lbGVtZW50c1toXT1iW2grZV07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09ZSYmKGU9MCk7dmFyIGg9dGhpcy5lbGVtZW50cztiW2VdPWhbMF07CmJbZSsxXT1oWzFdO2JbZSsyXT1oWzJdO2JbZSszXT1oWzNdO2JbZSs0XT1oWzRdO2JbZSs1XT1oWzVdO2JbZSs2XT1oWzZdO2JbZSs3XT1oWzddO2JbZSs4XT1oWzhdO2JbZSs5XT1oWzldO2JbZSsxMF09aFsxMF07YltlKzExXT1oWzExXTtiW2UrMTJdPWhbMTJdO2JbZSsxM109aFsxM107YltlKzE0XT1oWzE0XTtiW2UrMTVdPWhbMTVdO3JldHVybiBifX0pO3ZhciBsbz1uZXcgcixtbz1uZXcgZjt0LlJvdGF0aW9uT3JkZXJzPSJYWVogWVpYIFpYWSBYWlkgWVhaIFpZWCIuc3BsaXQoIiAiKTt0LkRlZmF1bHRPcmRlcj0iWFlaIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihiKXt0aGlzLl94PWI7dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihiKXt0aGlzLl95PWI7dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfX0sCno6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96fSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5fej1iO3RoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX19LG9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JkZXJ9LHNldDpmdW5jdGlvbihiKXt0aGlzLl9vcmRlcj1iO3RoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX19fSk7T2JqZWN0LmFzc2lnbih0LnByb3RvdHlwZSx7aXNFdWxlcjohMCxzZXQ6ZnVuY3Rpb24oYixlLGgsbSl7dGhpcy5feD1iO3RoaXMuX3k9ZTt0aGlzLl96PWg7dGhpcy5fb3JkZXI9bXx8dGhpcy5fb3JkZXI7dGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5feD1iLl94O3RoaXMuX3k9Yi5feTt0aGlzLl96PWIuX3o7dGhpcy5fb3JkZXI9Yi5fb3JkZXI7CnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKGIsZSxoKXt2YXIgbT1sYi5jbGFtcCx1PWIuZWxlbWVudHM7Yj11WzBdO3ZhciB3PXVbNF0sQT11WzhdLEU9dVsxXSxHPXVbNV0sSj11WzldLFE9dVsyXSxTPXVbNl07dT11WzEwXTtlPWV8fHRoaXMuX29yZGVyOyJYWVoiPT09ZT8odGhpcy5feT1NYXRoLmFzaW4obShBLC0xLDEpKSwuOTk5OTk5OT5NYXRoLmFicyhBKT8odGhpcy5feD1NYXRoLmF0YW4yKC1KLHUpLHRoaXMuX3o9TWF0aC5hdGFuMigtdyxiKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihTLEcpLHRoaXMuX3o9MCkpOiJZWFoiPT09ZT8odGhpcy5feD1NYXRoLmFzaW4oLW0oSiwtMSwxKSksLjk5OTk5OTk+TWF0aC5hYnMoSik/KHRoaXMuX3k9TWF0aC5hdGFuMihBLHUpLHRoaXMuX3o9TWF0aC5hdGFuMihFLEcpKToodGhpcy5feT1NYXRoLmF0YW4yKC1RLGIpLHRoaXMuX3o9MCkpOiJaWFkiPT09ZT8odGhpcy5feD0KTWF0aC5hc2luKG0oUywtMSwxKSksLjk5OTk5OTk+TWF0aC5hYnMoUyk/KHRoaXMuX3k9TWF0aC5hdGFuMigtUSx1KSx0aGlzLl96PU1hdGguYXRhbjIoLXcsRykpOih0aGlzLl95PTAsdGhpcy5fej1NYXRoLmF0YW4yKEUsYikpKToiWllYIj09PWU/KHRoaXMuX3k9TWF0aC5hc2luKC1tKFEsLTEsMSkpLC45OTk5OTk5Pk1hdGguYWJzKFEpPyh0aGlzLl94PU1hdGguYXRhbjIoUyx1KSx0aGlzLl96PU1hdGguYXRhbjIoRSxiKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLXcsRykpKToiWVpYIj09PWU/KHRoaXMuX3o9TWF0aC5hc2luKG0oRSwtMSwxKSksLjk5OTk5OTk+TWF0aC5hYnMoRSk/KHRoaXMuX3g9TWF0aC5hdGFuMigtSixHKSx0aGlzLl95PU1hdGguYXRhbjIoLVEsYikpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKEEsdSkpKToiWFpZIj09PWU/KHRoaXMuX3o9TWF0aC5hc2luKC1tKHcsLTEsMSkpLC45OTk5OTk5Pk1hdGguYWJzKHcpPyh0aGlzLl94PQpNYXRoLmF0YW4yKFMsRyksdGhpcy5feT1NYXRoLmF0YW4yKEEsYikpOih0aGlzLl94PU1hdGguYXRhbjIoLUosdSksdGhpcy5feT0wKSk6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGdpdmVuIHVuc3VwcG9ydGVkIG9yZGVyOiAiK2UpO3RoaXMuX29yZGVyPWU7ITEhPT1oJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHNldEZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGIsZSxoKXtsby5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihiKTtyZXR1cm4gdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgobG8sZSxoKX0sc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYixlKXtyZXR1cm4gdGhpcy5zZXQoYi54LGIueSxiLnosZXx8dGhpcy5fb3JkZXIpfSxyZW9yZGVyOmZ1bmN0aW9uKGIpe21vLnNldEZyb21FdWxlcih0aGlzKTtyZXR1cm4gdGhpcy5zZXRGcm9tUXVhdGVybmlvbihtbyxiKX0sZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLl94PT09CnRoaXMuX3gmJmIuX3k9PT10aGlzLl95JiZiLl96PT09dGhpcy5feiYmYi5fb3JkZXI9PT10aGlzLl9vcmRlcn0sZnJvbUFycmF5OmZ1bmN0aW9uKGIpe3RoaXMuX3g9YlswXTt0aGlzLl95PWJbMV07dGhpcy5fej1iWzJdO3ZvaWQgMCE9PWJbM10mJih0aGlzLl9vcmRlcj1iWzNdKTt0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09ZSYmKGU9MCk7YltlXT10aGlzLl94O2JbZSsxXT10aGlzLl95O2JbZSsyXT10aGlzLl96O2JbZSszXT10aGlzLl9vcmRlcjtyZXR1cm4gYn0sdG9WZWN0b3IzOmZ1bmN0aW9uKGIpe3JldHVybiBiP2Iuc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgZyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9LF9vbkNoYW5nZTpmdW5jdGlvbihiKXt0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPWI7cmV0dXJuIHRoaXN9LF9vbkNoYW5nZUNhbGxiYWNrOmZ1bmN0aW9uKCl7fX0pOwpPYmplY3QuYXNzaWduKHYucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYil7dGhpcy5tYXNrPTE8PGJ8MH0sZW5hYmxlOmZ1bmN0aW9uKGIpe3RoaXMubWFzaz10aGlzLm1hc2t8MTw8YnwwfSxlbmFibGVBbGw6ZnVuY3Rpb24oKXt0aGlzLm1hc2s9LTF9LHRvZ2dsZTpmdW5jdGlvbihiKXt0aGlzLm1hc2tePTE8PGJ8MH0sZGlzYWJsZTpmdW5jdGlvbihiKXt0aGlzLm1hc2smPX4oMTw8YnwwKX0sZGlzYWJsZUFsbDpmdW5jdGlvbigpe3RoaXMubWFzaz0wfSx0ZXN0OmZ1bmN0aW9uKGIpe3JldHVybiAwIT09KHRoaXMubWFzayZiLm1hc2spfX0pO3ZhciBLcT0wLG5vPW5ldyBnLHFnPW5ldyBmLFRkPW5ldyByLGVqPW5ldyBnLFBoPW5ldyBnLHZzPW5ldyBnLHdzPW5ldyBmLG9vPW5ldyBnKDEsMCwwKSxwbz1uZXcgZygwLDEsMCkscW89bmV3IGcoMCwwLDEpLHhzPXt0eXBlOiJhZGRlZCJ9LHlzPXt0eXBlOiJyZW1vdmVkIn07eS5EZWZhdWx0VXA9bmV3IGcoMCwxLDApO3kuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9CiEwO3kucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnksaXNPYmplY3QzRDohMCxvbkJlZm9yZVJlbmRlcjpmdW5jdGlvbigpe30sb25BZnRlclJlbmRlcjpmdW5jdGlvbigpe30sYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYil7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpO3RoaXMubWF0cml4LnByZW11bHRpcGx5KGIpO3RoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX0sYXBwbHlRdWF0ZXJuaW9uOmZ1bmN0aW9uKGIpe3RoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShiKTtyZXR1cm4gdGhpc30sc2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKGIsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoYixlKX0sc2V0Um90YXRpb25Gcm9tRXVsZXI6ZnVuY3Rpb24oYil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcihiLAohMCl9LHNldFJvdGF0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbihiKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KGIpfSxzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGIpe3RoaXMucXVhdGVybmlvbi5jb3B5KGIpfSxyb3RhdGVPbkF4aXM6ZnVuY3Rpb24oYixlKXtxZy5zZXRGcm9tQXhpc0FuZ2xlKGIsZSk7dGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KHFnKTtyZXR1cm4gdGhpc30scm90YXRlT25Xb3JsZEF4aXM6ZnVuY3Rpb24oYixlKXtxZy5zZXRGcm9tQXhpc0FuZ2xlKGIsZSk7dGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHFnKTtyZXR1cm4gdGhpc30scm90YXRlWDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMob28sYil9LHJvdGF0ZVk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHBvLGIpfSxyb3RhdGVaOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhxbyxiKX0sdHJhbnNsYXRlT25BeGlzOmZ1bmN0aW9uKGIsCmUpe25vLmNvcHkoYikuYXBwbHlRdWF0ZXJuaW9uKHRoaXMucXVhdGVybmlvbik7dGhpcy5wb3NpdGlvbi5hZGQobm8ubXVsdGlwbHlTY2FsYXIoZSkpO3JldHVybiB0aGlzfSx0cmFuc2xhdGVYOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhvbyxiKX0sdHJhbnNsYXRlWTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMocG8sYil9LHRyYW5zbGF0ZVo6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHFvLGIpfSxsb2NhbFRvV29ybGQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfSx3b3JsZFRvTG9jYWw6ZnVuY3Rpb24oYil7cmV0dXJuIGIuYXBwbHlNYXRyaXg0KFRkLmdldEludmVyc2UodGhpcy5tYXRyaXhXb3JsZCkpfSxsb29rQXQ6ZnVuY3Rpb24oYixlLGgpe2IuaXNWZWN0b3IzP2VqLmNvcHkoYik6ZWouc2V0KGIsZSxoKTtiPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsCiExKTtQaC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7dGhpcy5pc0NhbWVyYXx8dGhpcy5pc0xpZ2h0P1RkLmxvb2tBdChQaCxlaix0aGlzLnVwKTpUZC5sb29rQXQoZWosUGgsdGhpcy51cCk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChUZCk7YiYmKFRkLmV4dHJhY3RSb3RhdGlvbihiLm1hdHJpeFdvcmxkKSxxZy5zZXRGcm9tUm90YXRpb25NYXRyaXgoVGQpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShxZy5pbnZlcnNlKCkpKX0sYWRkOmZ1bmN0aW9uKGIpe2lmKDE8YXJndW1lbnRzLmxlbmd0aCl7Zm9yKHZhciBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0aGlzLmFkZChhcmd1bWVudHNbZV0pO3JldHVybiB0aGlzfWlmKGI9PT10aGlzKXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLGIpLHRoaXM7YiYmYi5pc09iamVjdDNEPwoobnVsbCE9PWIucGFyZW50JiZiLnBhcmVudC5yZW1vdmUoYiksYi5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2goYiksYi5kaXNwYXRjaEV2ZW50KHhzKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsYik7cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbihiKXtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe2Zvcih2YXIgZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpc31lPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihiKTstMSE9PWUmJihiLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW4uc3BsaWNlKGUsMSksYi5kaXNwYXRjaEV2ZW50KHlzKSk7cmV0dXJuIHRoaXN9LGF0dGFjaDpmdW5jdGlvbihiKXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtUZC5nZXRJbnZlcnNlKHRoaXMubWF0cml4V29ybGQpO251bGwhPT0KYi5wYXJlbnQmJihiLnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksVGQubXVsdGlwbHkoYi5wYXJlbnQubWF0cml4V29ybGQpKTtiLmFwcGx5TWF0cml4KFRkKTtiLnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKTt0aGlzLmFkZChiKTtyZXR1cm4gdGhpc30sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsYil9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIixiKX0sZ2V0T2JqZWN0QnlQcm9wZXJ0eTpmdW5jdGlvbihiLGUpe2lmKHRoaXNbYl09PT1lKXJldHVybiB0aGlzO2Zvcih2YXIgaD0wLG09dGhpcy5jaGlsZHJlbi5sZW5ndGg7aDxtO2grKyl7dmFyIHU9dGhpcy5jaGlsZHJlbltoXS5nZXRPYmplY3RCeVByb3BlcnR5KGIsZSk7aWYodm9pZCAwIT09dSlyZXR1cm4gdX19LGdldFdvcmxkUG9zaXRpb246ZnVuY3Rpb24oYil7dm9pZCAwPT09CmImJihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRQb3NpdGlvbigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBnKTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtyZXR1cm4gYi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9LGdldFdvcmxkUXVhdGVybmlvbjpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUXVhdGVybmlvbigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBmKTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShQaCxiLHZzKTtyZXR1cm4gYn0sZ2V0V29ybGRTY2FsZTpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkU2NhbGUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7CnRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKFBoLHdzLGIpO3JldHVybiBifSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkRGlyZWN0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3RoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3ZhciBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIGIuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9LHJheWNhc3Q6ZnVuY3Rpb24oKXt9LHRyYXZlcnNlOmZ1bmN0aW9uKGIpe2IodGhpcyk7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0wLG09ZS5sZW5ndGg7aDxtO2grKyllW2hdLnRyYXZlcnNlKGIpfSx0cmF2ZXJzZVZpc2libGU6ZnVuY3Rpb24oYil7aWYoITEhPT10aGlzLnZpc2libGUpe2IodGhpcyk7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0wLG09ZS5sZW5ndGg7aDxtO2grKyllW2hdLnRyYXZlcnNlVmlzaWJsZShiKX19LAp0cmF2ZXJzZUFuY2VzdG9yczpmdW5jdGlvbihiKXt2YXIgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKGIoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyhiKSl9LHVwZGF0ZU1hdHJpeDpmdW5jdGlvbigpe3RoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSk7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbihiKXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCk7aWYodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHxiKW51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLGI9ITA7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0KMCxtPWUubGVuZ3RoO2g8bTtoKyspZVtoXS51cGRhdGVNYXRyaXhXb3JsZChiKX0sdXBkYXRlV29ybGRNYXRyaXg6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLnBhcmVudDshMD09PWImJm51bGwhPT1oJiZoLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCk7bnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KTtpZighMD09PWUpZm9yKGI9dGhpcy5jaGlsZHJlbixlPTAsaD1iLmxlbmd0aDtlPGg7ZSsrKWJbZV0udXBkYXRlV29ybGRNYXRyaXgoITEsITApfSx0b0pTT046ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShRLFMpe3ZvaWQgMD09PVFbUy51dWlkXSYmKFFbUy51dWlkXT1TLnRvSlNPTihiKSk7cmV0dXJuIFMudXVpZH1mdW5jdGlvbiBoKFEpe3ZhciBTPQpbXSxUO2ZvcihUIGluIFEpe3ZhciBXPVFbVF07ZGVsZXRlIFcubWV0YWRhdGE7Uy5wdXNoKFcpfXJldHVybiBTfXZhciBtPXZvaWQgMD09PWJ8fCJzdHJpbmciPT09dHlwZW9mIGIsdT17fTttJiYoYj17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fX0sdS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTt2YXIgdz17fTt3LnV1aWQ9dGhpcy51dWlkO3cudHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJih3Lm5hbWU9dGhpcy5uYW1lKTshMD09PXRoaXMuY2FzdFNoYWRvdyYmKHcuY2FzdFNoYWRvdz0hMCk7ITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJih3LnJlY2VpdmVTaGFkb3c9ITApOyExPT09dGhpcy52aXNpYmxlJiYody52aXNpYmxlPSExKTshMT09PXRoaXMuZnJ1c3R1bUN1bGxlZCYmKHcuZnJ1c3R1bUN1bGxlZD0hMSk7MCE9PXRoaXMucmVuZGVyT3JkZXImJgoody5yZW5kZXJPcmRlcj10aGlzLnJlbmRlck9yZGVyKTsie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJih3LnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO3cubGF5ZXJzPXRoaXMubGF5ZXJzLm1hc2s7dy5tYXRyaXg9dGhpcy5tYXRyaXgudG9BcnJheSgpOyExPT09dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiYody5tYXRyaXhBdXRvVXBkYXRlPSExKTt0aGlzLmlzTWVzaCYmMCE9PXRoaXMuZHJhd01vZGUmJih3LmRyYXdNb2RlPXRoaXMuZHJhd01vZGUpO2lmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7dy5nZW9tZXRyeT1lKGIuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTt2YXIgQT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09QSYmdm9pZCAwIT09QS5zaGFwZXMpaWYoQT1BLnNoYXBlcyxBcnJheS5pc0FycmF5KEEpKWZvcih2YXIgRT0wLEc9QS5sZW5ndGg7RTxHO0UrKyllKGIuc2hhcGVzLEFbRV0pO2Vsc2UgZShiLnNoYXBlcywKQSl9aWYodm9pZCAwIT09dGhpcy5tYXRlcmlhbClpZihBcnJheS5pc0FycmF5KHRoaXMubWF0ZXJpYWwpKXtBPVtdO0U9MDtmb3IoRz10aGlzLm1hdGVyaWFsLmxlbmd0aDtFPEc7RSsrKUEucHVzaChlKGIubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbRV0pKTt3Lm1hdGVyaWFsPUF9ZWxzZSB3Lm1hdGVyaWFsPWUoYi5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYoMDx0aGlzLmNoaWxkcmVuLmxlbmd0aClmb3Iody5jaGlsZHJlbj1bXSxFPTA7RTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtFKyspdy5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bRV0udG9KU09OKGIpLm9iamVjdCk7aWYobSl7bT1oKGIuZ2VvbWV0cmllcyk7RT1oKGIubWF0ZXJpYWxzKTtHPWgoYi50ZXh0dXJlcyk7dmFyIEo9aChiLmltYWdlcyk7QT1oKGIuc2hhcGVzKTswPG0ubGVuZ3RoJiYodS5nZW9tZXRyaWVzPW0pOzA8RS5sZW5ndGgmJih1Lm1hdGVyaWFscz1FKTswPEcubGVuZ3RoJiYodS50ZXh0dXJlcz1HKTsKMDxKLmxlbmd0aCYmKHUuaW1hZ2VzPUopOzA8QS5sZW5ndGgmJih1LnNoYXBlcz1BKX11Lm9iamVjdD13O3JldHVybiB1fSxjbG9uZTpmdW5jdGlvbihiKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyxiKX0sY29weTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPSEwKTt0aGlzLm5hbWU9Yi5uYW1lO3RoaXMudXAuY29weShiLnVwKTt0aGlzLnBvc2l0aW9uLmNvcHkoYi5wb3NpdGlvbik7dGhpcy5xdWF0ZXJuaW9uLmNvcHkoYi5xdWF0ZXJuaW9uKTt0aGlzLnNjYWxlLmNvcHkoYi5zY2FsZSk7dGhpcy5tYXRyaXguY29weShiLm1hdHJpeCk7dGhpcy5tYXRyaXhXb3JsZC5jb3B5KGIubWF0cml4V29ybGQpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT1iLm1hdHJpeEF1dG9VcGRhdGU7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPWIubWF0cml4V29ybGROZWVkc1VwZGF0ZTt0aGlzLmxheWVycy5tYXNrPWIubGF5ZXJzLm1hc2s7dGhpcy52aXNpYmxlPWIudmlzaWJsZTsKdGhpcy5jYXN0U2hhZG93PWIuY2FzdFNoYWRvdzt0aGlzLnJlY2VpdmVTaGFkb3c9Yi5yZWNlaXZlU2hhZG93O3RoaXMuZnJ1c3R1bUN1bGxlZD1iLmZydXN0dW1DdWxsZWQ7dGhpcy5yZW5kZXJPcmRlcj1iLnJlbmRlck9yZGVyO3RoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShiLnVzZXJEYXRhKSk7aWYoITA9PT1lKWZvcihlPTA7ZTxiLmNoaWxkcmVuLmxlbmd0aDtlKyspdGhpcy5hZGQoYi5jaGlsZHJlbltlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc319KTt6LnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp6LGlzU2NlbmU6ITAsY29weTpmdW5jdGlvbihiLGUpe3kucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIsZSk7bnVsbCE9PWIuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD1iLmJhY2tncm91bmQuY2xvbmUoKSk7bnVsbCE9PWIuZm9nJiYodGhpcy5mb2c9Yi5mb2cuY2xvbmUoKSk7Cm51bGwhPT1iLm92ZXJyaWRlTWF0ZXJpYWwmJih0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9Yi5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCkpO3RoaXMuYXV0b1VwZGF0ZT1iLmF1dG9VcGRhdGU7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPWIubWF0cml4QXV0b1VwZGF0ZTtyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKGIpe3ZhciBlPXkucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYik7bnVsbCE9PXRoaXMuYmFja2dyb3VuZCYmKGUub2JqZWN0LmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTihiKSk7bnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKTtyZXR1cm4gZX0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTt2YXIgVWQ9W25ldyBnLG5ldyBnLG5ldyBnLG5ldyBnLG5ldyBnLG5ldyBnLG5ldyBnLG5ldyBnXSxFZD1uZXcgZyxyZz1uZXcgZyxzZz1uZXcgZyx0Zz1uZXcgZywKd2U9bmV3IGcseGU9bmV3IGcsZGY9bmV3IGcsUWg9bmV3IGcsZmo9bmV3IGcsZ2o9bmV3IGcsSWU9bmV3IGc7T2JqZWN0LmFzc2lnbih4LnByb3RvdHlwZSx7aXNCb3gzOiEwLHNldDpmdW5jdGlvbihiLGUpe3RoaXMubWluLmNvcHkoYik7dGhpcy5tYXguY29weShlKTtyZXR1cm4gdGhpc30sc2V0RnJvbUFycmF5OmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1JbmZpbml0eSxoPUluZmluaXR5LG09SW5maW5pdHksdT0tSW5maW5pdHksdz0tSW5maW5pdHksQT0tSW5maW5pdHksRT0wLEc9Yi5sZW5ndGg7RTxHO0UrPTMpe3ZhciBKPWJbRV0sUT1iW0UrMV0sUz1iW0UrMl07SjxlJiYoZT1KKTtRPGgmJihoPVEpO1M8bSYmKG09Uyk7Sj51JiYodT1KKTtRPncmJih3PVEpO1M+QSYmKEE9Uyl9dGhpcy5taW4uc2V0KGUsaCxtKTt0aGlzLm1heC5zZXQodSx3LEEpO3JldHVybiB0aGlzfSxzZXRGcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1JbmZpbml0eSxoPUluZmluaXR5LAptPUluZmluaXR5LHU9LUluZmluaXR5LHc9LUluZmluaXR5LEE9LUluZmluaXR5LEU9MCxHPWIuY291bnQ7RTxHO0UrKyl7dmFyIEo9Yi5nZXRYKEUpLFE9Yi5nZXRZKEUpLFM9Yi5nZXRaKEUpO0o8ZSYmKGU9Sik7UTxoJiYoaD1RKTtTPG0mJihtPVMpO0o+dSYmKHU9Sik7UT53JiYodz1RKTtTPkEmJihBPVMpfXRoaXMubWluLnNldChlLGgsbSk7dGhpcy5tYXguc2V0KHUsdyxBKTtyZXR1cm4gdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbihiKXt0aGlzLm1ha2VFbXB0eSgpO2Zvcih2YXIgZT0wLGg9Yi5sZW5ndGg7ZTxoO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQoYltlXSk7cmV0dXJuIHRoaXN9LHNldEZyb21DZW50ZXJBbmRTaXplOmZ1bmN0aW9uKGIsZSl7ZT1FZC5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTt0aGlzLm1pbi5jb3B5KGIpLnN1YihlKTt0aGlzLm1heC5jb3B5KGIpLmFkZChlKTtyZXR1cm4gdGhpc30sc2V0RnJvbU9iamVjdDpmdW5jdGlvbihiKXt0aGlzLm1ha2VFbXB0eSgpOwpyZXR1cm4gdGhpcy5leHBhbmRCeU9iamVjdChiKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5taW4uY29weShiLm1pbik7dGhpcy5tYXguY29weShiLm1heCk7cmV0dXJuIHRoaXN9LG1ha2VFbXB0eTpmdW5jdGlvbigpe3RoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PUluZmluaXR5O3RoaXMubWF4Lng9dGhpcy5tYXgueT10aGlzLm1heC56PS1JbmZpbml0eTtyZXR1cm4gdGhpc30saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fSxnZXRDZW50ZXI6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBnKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/CmIuc2V0KDAsMCwwKTpiLmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX0sZ2V0U2l6ZTpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0U2l6ZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBnKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/Yi5zZXQoMCwwLDApOmIuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9LGV4cGFuZEJ5UG9pbnQ6ZnVuY3Rpb24oYil7dGhpcy5taW4ubWluKGIpO3RoaXMubWF4Lm1heChiKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlWZWN0b3I6ZnVuY3Rpb24oYil7dGhpcy5taW4uc3ViKGIpO3RoaXMubWF4LmFkZChiKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy5taW4uYWRkU2NhbGFyKC1iKTt0aGlzLm1heC5hZGRTY2FsYXIoYik7cmV0dXJuIHRoaXN9LGV4cGFuZEJ5T2JqZWN0OmZ1bmN0aW9uKGIpe3ZhciBlO2IudXBkYXRlV29ybGRNYXRyaXgoITEsCiExKTt2YXIgaD1iLmdlb21ldHJ5O2lmKHZvaWQgMCE9PWgpaWYoaC5pc0dlb21ldHJ5KXt2YXIgbT1oLnZlcnRpY2VzO2g9MDtmb3IoZT1tLmxlbmd0aDtoPGU7aCsrKUVkLmNvcHkobVtoXSksRWQuYXBwbHlNYXRyaXg0KGIubWF0cml4V29ybGQpLHRoaXMuZXhwYW5kQnlQb2ludChFZCl9ZWxzZSBpZihoLmlzQnVmZmVyR2VvbWV0cnkmJihtPWguYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1tKSlmb3IoaD0wLGU9bS5jb3VudDtoPGU7aCsrKUVkLmZyb21CdWZmZXJBdHRyaWJ1dGUobSxoKS5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KEVkKTtiPWIuY2hpbGRyZW47aD0wO2ZvcihlPWIubGVuZ3RoO2g8ZTtoKyspdGhpcy5leHBhbmRCeU9iamVjdChiW2hdKTtyZXR1cm4gdGhpc30sY29udGFpbnNQb2ludDpmdW5jdGlvbihiKXtyZXR1cm4gYi54PHRoaXMubWluLnh8fGIueD50aGlzLm1heC54fHxiLnk8dGhpcy5taW4ueXx8Yi55PnRoaXMubWF4Lnl8fApiLno8dGhpcy5taW4uenx8Yi56PnRoaXMubWF4Lno/ITE6ITB9LGNvbnRhaW5zQm94OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm1pbi54PD1iLm1pbi54JiZiLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1iLm1pbi55JiZiLm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD1iLm1pbi56JiZiLm1heC56PD10aGlzLm1heC56fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0UGFyYW1ldGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGcpO3JldHVybiBlLnNldCgoYi54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLChiLnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKGIuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIubWF4Lng8dGhpcy5taW4ueHx8CmIubWluLng+dGhpcy5tYXgueHx8Yi5tYXgueTx0aGlzLm1pbi55fHxiLm1pbi55PnRoaXMubWF4Lnl8fGIubWF4Lno8dGhpcy5taW4uenx8Yi5taW4uej50aGlzLm1heC56PyExOiEwfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGIpe3RoaXMuY2xhbXBQb2ludChiLmNlbnRlcixFZCk7cmV0dXJuIEVkLmRpc3RhbmNlVG9TcXVhcmVkKGIuY2VudGVyKTw9Yi5yYWRpdXMqYi5yYWRpdXN9LGludGVyc2VjdHNQbGFuZTpmdW5jdGlvbihiKXtpZigwPGIubm9ybWFsLngpe3ZhciBlPWIubm9ybWFsLngqdGhpcy5taW4ueDt2YXIgaD1iLm5vcm1hbC54KnRoaXMubWF4Lnh9ZWxzZSBlPWIubm9ybWFsLngqdGhpcy5tYXgueCxoPWIubm9ybWFsLngqdGhpcy5taW4ueDswPGIubm9ybWFsLnk/KGUrPWIubm9ybWFsLnkqdGhpcy5taW4ueSxoKz1iLm5vcm1hbC55KnRoaXMubWF4LnkpOihlKz1iLm5vcm1hbC55KnRoaXMubWF4LnksaCs9Yi5ub3JtYWwueSp0aGlzLm1pbi55KTswPGIubm9ybWFsLno/CihlKz1iLm5vcm1hbC56KnRoaXMubWluLnosaCs9Yi5ub3JtYWwueip0aGlzLm1heC56KTooZSs9Yi5ub3JtYWwueip0aGlzLm1heC56LGgrPWIubm9ybWFsLnoqdGhpcy5taW4ueik7cmV0dXJuIGU8PS1iLmNvbnN0YW50JiZoPj0tYi5jb25zdGFudH0saW50ZXJzZWN0c1RyaWFuZ2xlOmZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiExO3RoaXMuZ2V0Q2VudGVyKFFoKTtmai5zdWJWZWN0b3JzKHRoaXMubWF4LFFoKTtyZy5zdWJWZWN0b3JzKGIuYSxRaCk7c2cuc3ViVmVjdG9ycyhiLmIsUWgpO3RnLnN1YlZlY3RvcnMoYi5jLFFoKTt3ZS5zdWJWZWN0b3JzKHNnLHJnKTt4ZS5zdWJWZWN0b3JzKHRnLHNnKTtkZi5zdWJWZWN0b3JzKHJnLHRnKTtiPVswLC13ZS56LHdlLnksMCwteGUueix4ZS55LDAsLWRmLnosZGYueSx3ZS56LDAsLXdlLngseGUueiwwLC14ZS54LGRmLnosMCwtZGYueCwtd2UueSx3ZS54LDAsLXhlLnkseGUueCwwLC1kZi55LGRmLngsMF07aWYoIUMoYiwKcmcsc2csdGcsZmopKXJldHVybiExO2I9WzEsMCwwLDAsMSwwLDAsMCwxXTtpZighQyhiLHJnLHNnLHRnLGZqKSlyZXR1cm4hMTtnai5jcm9zc1ZlY3RvcnMod2UseGUpO2I9W2dqLngsZ2oueSxnai56XTtyZXR1cm4gQyhiLHJnLHNnLHRnLGZqKX0sY2xhbXBQb2ludDpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jbGFtcFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGcpO3JldHVybiBlLmNvcHkoYikuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfSxkaXN0YW5jZVRvUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIEVkLmNvcHkoYikuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1YihiKS5sZW5ndGgoKX0sZ2V0Qm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmY29uc29sZS5lcnJvcigiVEhSRUUuQm94MzogLmdldEJvdW5kaW5nU3BoZXJlKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpO3RoaXMuZ2V0Q2VudGVyKGIuY2VudGVyKTsKYi5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKEVkKS5sZW5ndGgoKTtyZXR1cm4gYn0saW50ZXJzZWN0OmZ1bmN0aW9uKGIpe3RoaXMubWluLm1heChiLm1pbik7dGhpcy5tYXgubWluKGIubWF4KTt0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKTtyZXR1cm4gdGhpc30sdW5pb246ZnVuY3Rpb24oYil7dGhpcy5taW4ubWluKGIubWluKTt0aGlzLm1heC5tYXgoYi5tYXgpO3JldHVybiB0aGlzfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oYil7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIHRoaXM7VWRbMF0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7VWRbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7VWRbMl0uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoYik7VWRbM10uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoYik7ClVkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KGIpO1VkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGIpO1VkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KGIpO1VkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGIpO3RoaXMuc2V0RnJvbVBvaW50cyhVZCk7cmV0dXJuIHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbihiKXt0aGlzLm1pbi5hZGQoYik7dGhpcy5tYXguYWRkKGIpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYil7cmV0dXJuIGIubWluLmVxdWFscyh0aGlzLm1pbikmJmIubWF4LmVxdWFscyh0aGlzLm1heCl9fSk7dmFyIHpzPW5ldyB4O09iamVjdC5hc3NpZ24oRi5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUpe3RoaXMuY2VudGVyLmNvcHkoYik7dGhpcy5yYWRpdXM9CmU7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLmNlbnRlcjt2b2lkIDAhPT1lP2guY29weShlKTp6cy5zZXRGcm9tUG9pbnRzKGIpLmdldENlbnRlcihoKTtmb3IodmFyIG09ZT0wLHU9Yi5sZW5ndGg7bTx1O20rKyllPU1hdGgubWF4KGUsaC5kaXN0YW5jZVRvU3F1YXJlZChiW21dKSk7dGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLmNlbnRlci5jb3B5KGIuY2VudGVyKTt0aGlzLnJhZGl1cz1iLnJhZGl1cztyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD49dGhpcy5yYWRpdXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGIpe3JldHVybiBiLmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLQp0aGlzLnJhZGl1c30saW50ZXJzZWN0c1NwaGVyZTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLnJhZGl1cytiLnJhZGl1cztyZXR1cm4gYi5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLmFicyhiLmRpc3RhbmNlVG9Qb2ludCh0aGlzLmNlbnRlcikpPD10aGlzLnJhZGl1c30sY2xhbXBQb2ludDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKGIpO3ZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmNsYW1wUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgZyk7ZS5jb3B5KGIpO2g+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSk7CnJldHVybiBlfSxnZXRCb3VuZGluZ0JveDpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5nZXRCb3VuZGluZ0JveCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyB4KTtiLnNldCh0aGlzLmNlbnRlcix0aGlzLmNlbnRlcik7Yi5leHBhbmRCeVNjYWxhcih0aGlzLnJhZGl1cyk7cmV0dXJuIGJ9LGFwcGx5TWF0cml4NDpmdW5jdGlvbihiKXt0aGlzLmNlbnRlci5hcHBseU1hdHJpeDQoYik7dGhpcy5yYWRpdXMqPWIuZ2V0TWF4U2NhbGVPbkF4aXMoKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMuY2VudGVyLmFkZChiKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZiLnJhZGl1cz09PXRoaXMucmFkaXVzfX0pO3ZhciBWZD1uZXcgZyxibD1uZXcgZyxoaj1uZXcgZyx5ZT1uZXcgZyxjbD1uZXcgZyxpaj1uZXcgZyxkbD1uZXcgZzsKT2JqZWN0LmFzc2lnbihELnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIsZSl7dGhpcy5vcmlnaW4uY29weShiKTt0aGlzLmRpcmVjdGlvbi5jb3B5KGUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm9yaWdpbi5jb3B5KGIub3JpZ2luKTt0aGlzLmRpcmVjdGlvbi5jb3B5KGIuZGlyZWN0aW9uKTtyZXR1cm4gdGhpc30sYXQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5hdCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBnKTtyZXR1cm4gZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy5vcmlnaW4pfSxsb29rQXQ6ZnVuY3Rpb24oYil7dGhpcy5kaXJlY3Rpb24uY29weShiKS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxyZWNhc3Q6ZnVuY3Rpb24oYil7dGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KGIsClZkKSk7cmV0dXJuIHRoaXN9LGNsb3Nlc3RQb2ludFRvUG9pbnQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5jbG9zZXN0UG9pbnRUb1BvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGcpO2Uuc3ViVmVjdG9ycyhiLHRoaXMub3JpZ2luKTtiPWUuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gMD5iP2UuY29weSh0aGlzLm9yaWdpbik6ZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy5vcmlnaW4pfSxkaXN0YW5jZVRvUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KGIpKX0sZGlzdGFuY2VTcVRvUG9pbnQ6ZnVuY3Rpb24oYil7dmFyIGU9VmQuc3ViVmVjdG9ycyhiLHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA+ZSlyZXR1cm4gdGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQoYik7VmQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKTsKcmV0dXJuIFZkLmRpc3RhbmNlVG9TcXVhcmVkKGIpfSxkaXN0YW5jZVNxVG9TZWdtZW50OmZ1bmN0aW9uKGIsZSxoLG0pe2JsLmNvcHkoYikuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KTtoai5jb3B5KGUpLnN1YihiKS5ub3JtYWxpemUoKTt5ZS5jb3B5KHRoaXMub3JpZ2luKS5zdWIoYmwpO3ZhciB1PS41KmIuZGlzdGFuY2VUbyhlKSx3PS10aGlzLmRpcmVjdGlvbi5kb3QoaGopLEE9eWUuZG90KHRoaXMuZGlyZWN0aW9uKSxFPS15ZS5kb3QoaGopLEc9eWUubGVuZ3RoU3EoKSxKPU1hdGguYWJzKDEtdyp3KTtpZigwPEope2I9dypFLUE7ZT13KkEtRTt2YXIgUT11Kko7MDw9Yj9lPj0tUT9lPD1RPyh1PTEvSixiKj11LGUqPXUsdz1iKihiK3cqZSsyKkEpK2UqKHcqYitlKzIqRSkrRyk6KGU9dSxiPU1hdGgubWF4KDAsLSh3KmUrQSkpLHc9LWIqYitlKihlKzIqRSkrRyk6KGU9LXUsYj1NYXRoLm1heCgwLC0odyplK0EpKSx3PS1iKmIrZSooZSsyKkUpK0cpOmU8PS1RPyhiPU1hdGgubWF4KDAsCi0oLXcqdStBKSksZT0wPGI/LXU6TWF0aC5taW4oTWF0aC5tYXgoLXUsLUUpLHUpLHc9LWIqYitlKihlKzIqRSkrRyk6ZTw9UT8oYj0wLGU9TWF0aC5taW4oTWF0aC5tYXgoLXUsLUUpLHUpLHc9ZSooZSsyKkUpK0cpOihiPU1hdGgubWF4KDAsLSh3KnUrQSkpLGU9MDxiP3U6TWF0aC5taW4oTWF0aC5tYXgoLXUsLUUpLHUpLHc9LWIqYitlKihlKzIqRSkrRyl9ZWxzZSBlPTA8dz8tdTp1LGI9TWF0aC5tYXgoMCwtKHcqZStBKSksdz0tYipiK2UqKGUrMipFKStHO2gmJmguY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoYikuYWRkKHRoaXMub3JpZ2luKTttJiZtLmNvcHkoaGopLm11bHRpcGx5U2NhbGFyKGUpLmFkZChibCk7cmV0dXJuIHd9LGludGVyc2VjdFNwaGVyZTpmdW5jdGlvbihiLGUpe1ZkLnN1YlZlY3RvcnMoYi5jZW50ZXIsdGhpcy5vcmlnaW4pO3ZhciBoPVZkLmRvdCh0aGlzLmRpcmVjdGlvbiksbT1WZC5kb3QoVmQpLWgqaDtiPWIucmFkaXVzKmIucmFkaXVzOwppZihtPmIpcmV0dXJuIG51bGw7Yj1NYXRoLnNxcnQoYi1tKTttPWgtYjtoKz1iO3JldHVybiAwPm0mJjA+aD9udWxsOjA+bT90aGlzLmF0KGgsZSk6dGhpcy5hdChtLGUpfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KGIuY2VudGVyKTw9Yi5yYWRpdXMqYi5yYWRpdXN9LGRpc3RhbmNlVG9QbGFuZTpmdW5jdGlvbihiKXt2YXIgZT1iLm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09Yi5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtiPS0odGhpcy5vcmlnaW4uZG90KGIubm9ybWFsKStiLmNvbnN0YW50KS9lO3JldHVybiAwPD1iP2I6bnVsbH0saW50ZXJzZWN0UGxhbmU6ZnVuY3Rpb24oYixlKXtiPXRoaXMuZGlzdGFuY2VUb1BsYW5lKGIpO3JldHVybiBudWxsPT09Yj9udWxsOnRoaXMuYXQoYixlKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGIpe3ZhciBlPWIuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTsKcmV0dXJuIDA9PT1lfHwwPmIubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZT8hMDohMX0saW50ZXJzZWN0Qm94OmZ1bmN0aW9uKGIsZSl7dmFyIGg9MS90aGlzLmRpcmVjdGlvbi54O3ZhciBtPTEvdGhpcy5kaXJlY3Rpb24ueTt2YXIgdT0xL3RoaXMuZGlyZWN0aW9uLnosdz10aGlzLm9yaWdpbjtpZigwPD1oKXt2YXIgQT0oYi5taW4ueC13LngpKmg7aCo9Yi5tYXgueC13Lnh9ZWxzZSBBPShiLm1heC54LXcueCkqaCxoKj1iLm1pbi54LXcueDtpZigwPD1tKXt2YXIgRT0oYi5taW4ueS13LnkpKm07bSo9Yi5tYXgueS13Lnl9ZWxzZSBFPShiLm1heC55LXcueSkqbSxtKj1iLm1pbi55LXcueTtpZihBPm18fEU+aClyZXR1cm4gbnVsbDtpZihFPkF8fEEhPT1BKUE9RTtpZihtPGh8fGghPT1oKWg9bTswPD11PyhFPShiLm1pbi56LXcueikqdSxiPShiLm1heC56LXcueikqdSk6KEU9KGIubWF4Lnotdy56KSp1LGI9KGIubWluLnotdy56KSp1KTtpZihBPmJ8fEU+aClyZXR1cm4gbnVsbDsKaWYoRT5BfHxBIT09QSlBPUU7aWYoYjxofHxoIT09aCloPWI7cmV0dXJuIDA+aD9udWxsOnRoaXMuYXQoMDw9QT9BOmgsZSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveChiLFZkKX0saW50ZXJzZWN0VHJpYW5nbGU6ZnVuY3Rpb24oYixlLGgsbSx1KXtjbC5zdWJWZWN0b3JzKGUsYik7aWouc3ViVmVjdG9ycyhoLGIpO2RsLmNyb3NzVmVjdG9ycyhjbCxpaik7ZT10aGlzLmRpcmVjdGlvbi5kb3QoZGwpO2lmKDA8ZSl7aWYobSlyZXR1cm4gbnVsbDttPTF9ZWxzZSBpZigwPmUpbT0tMSxlPS1lO2Vsc2UgcmV0dXJuIG51bGw7eWUuc3ViVmVjdG9ycyh0aGlzLm9yaWdpbixiKTtiPW0qdGhpcy5kaXJlY3Rpb24uZG90KGlqLmNyb3NzVmVjdG9ycyh5ZSxpaikpO2lmKDA+YilyZXR1cm4gbnVsbDtoPW0qdGhpcy5kaXJlY3Rpb24uZG90KGNsLmNyb3NzKHllKSk7aWYoMD5ofHxiK2g+ZSlyZXR1cm4gbnVsbDtiPS1tKnllLmRvdChkbCk7CnJldHVybiAwPmI/bnVsbDp0aGlzLmF0KGIvZSx1KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGIpe3RoaXMub3JpZ2luLmFwcGx5TWF0cml4NChiKTt0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oYik7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmYi5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX19KTt2YXIga2Q9bmV3IGcsV2Q9bmV3IGcsZWw9bmV3IGcsWGQ9bmV3IGcsdWc9bmV3IGcsdmc9bmV3IGcscm89bmV3IGcsZmw9bmV3IGcsZ2w9bmV3IGcsaGw9bmV3IGc7T2JqZWN0LmFzc2lnbihCLHtnZXROb3JtYWw6ZnVuY3Rpb24oYixlLGgsbSl7dm9pZCAwPT09bSYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXROb3JtYWwoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksbT1uZXcgZyk7bS5zdWJWZWN0b3JzKGgsZSk7a2Quc3ViVmVjdG9ycyhiLGUpO20uY3Jvc3Moa2QpOwpiPW0ubGVuZ3RoU3EoKTtyZXR1cm4gMDxiP20ubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQoYikpOm0uc2V0KDAsMCwwKX0sZ2V0QmFyeWNvb3JkOmZ1bmN0aW9uKGIsZSxoLG0sdSl7a2Quc3ViVmVjdG9ycyhtLGUpO1dkLnN1YlZlY3RvcnMoaCxlKTtlbC5zdWJWZWN0b3JzKGIsZSk7Yj1rZC5kb3Qoa2QpO2U9a2QuZG90KFdkKTtoPWtkLmRvdChlbCk7dmFyIHc9V2QuZG90KFdkKTttPVdkLmRvdChlbCk7dmFyIEE9Yip3LWUqZTt2b2lkIDA9PT11JiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldEJhcnljb29yZCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSx1PW5ldyBnKTtpZigwPT09QSlyZXR1cm4gdS5zZXQoLTIsLTEsLTEpO0E9MS9BO3c9KHcqaC1lKm0pKkE7Yj0oYiptLWUqaCkqQTtyZXR1cm4gdS5zZXQoMS13LWIsYix3KX0sY29udGFpbnNQb2ludDpmdW5jdGlvbihiLGUsaCxtKXtCLmdldEJhcnljb29yZChiLGUsaCxtLFhkKTtyZXR1cm4gMDw9WGQueCYmCjA8PVhkLnkmJjE+PVhkLngrWGQueX0sZ2V0VVY6ZnVuY3Rpb24oYixlLGgsbSx1LHcsQSxFKXt0aGlzLmdldEJhcnljb29yZChiLGUsaCxtLFhkKTtFLnNldCgwLDApO0UuYWRkU2NhbGVkVmVjdG9yKHUsWGQueCk7RS5hZGRTY2FsZWRWZWN0b3IodyxYZC55KTtFLmFkZFNjYWxlZFZlY3RvcihBLFhkLnopO3JldHVybiBFfSxpc0Zyb250RmFjaW5nOmZ1bmN0aW9uKGIsZSxoLG0pe2tkLnN1YlZlY3RvcnMoaCxlKTtXZC5zdWJWZWN0b3JzKGIsZSk7cmV0dXJuIDA+a2QuY3Jvc3MoV2QpLmRvdChtKT8hMDohMX19KTtPYmplY3QuYXNzaWduKEIucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYixlLGgpe3RoaXMuYS5jb3B5KGIpO3RoaXMuYi5jb3B5KGUpO3RoaXMuYy5jb3B5KGgpO3JldHVybiB0aGlzfSxzZXRGcm9tUG9pbnRzQW5kSW5kaWNlczpmdW5jdGlvbihiLGUsaCxtKXt0aGlzLmEuY29weShiW2VdKTt0aGlzLmIuY29weShiW2hdKTt0aGlzLmMuY29weShiW21dKTtyZXR1cm4gdGhpc30sCmNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMuYS5jb3B5KGIuYSk7dGhpcy5iLmNvcHkoYi5iKTt0aGlzLmMuY29weShiLmMpO3JldHVybiB0aGlzfSxnZXRBcmVhOmZ1bmN0aW9uKCl7a2Quc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKTtXZC5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpO3JldHVybi41KmtkLmNyb3NzKFdkKS5sZW5ndGgoKX0sZ2V0TWlkcG9pbnQ6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRNaWRwb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBnKTtyZXR1cm4gYi5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9LGdldE5vcm1hbDpmdW5jdGlvbihiKXtyZXR1cm4gQi5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsYil9LGdldFBsYW5lOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PQpiJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmdldFBsYW5lKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3JldHVybiBiLnNldEZyb21Db3BsYW5hclBvaW50cyh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LGdldEJhcnljb29yZDpmdW5jdGlvbihiLGUpe3JldHVybiBCLmdldEJhcnljb29yZChiLHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUpfSxnZXRVVjpmdW5jdGlvbihiLGUsaCxtLHUpe3JldHVybiBCLmdldFVWKGIsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxoLG0sdSl9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIEIuY29udGFpbnNQb2ludChiLHRoaXMuYSx0aGlzLmIsdGhpcy5jKX0saXNGcm9udEZhY2luZzpmdW5jdGlvbihiKXtyZXR1cm4gQi5pc0Zyb250RmFjaW5nKHRoaXMuYSx0aGlzLmIsdGhpcy5jLGIpfSxpbnRlcnNlY3RzQm94OmZ1bmN0aW9uKGIpe3JldHVybiBiLmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX0sY2xvc2VzdFBvaW50VG9Qb2ludDpmdW5jdGlvbihiLAplKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmNsb3Nlc3RQb2ludFRvUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgZyk7dmFyIGg9dGhpcy5hLG09dGhpcy5iLHU9dGhpcy5jO3VnLnN1YlZlY3RvcnMobSxoKTt2Zy5zdWJWZWN0b3JzKHUsaCk7Zmwuc3ViVmVjdG9ycyhiLGgpO3ZhciB3PXVnLmRvdChmbCksQT12Zy5kb3QoZmwpO2lmKDA+PXcmJjA+PUEpcmV0dXJuIGUuY29weShoKTtnbC5zdWJWZWN0b3JzKGIsbSk7dmFyIEU9dWcuZG90KGdsKSxHPXZnLmRvdChnbCk7aWYoMDw9RSYmRzw9RSlyZXR1cm4gZS5jb3B5KG0pO3ZhciBKPXcqRy1FKkE7aWYoMD49SiYmMDw9dyYmMD49RSlyZXR1cm4gbT13Lyh3LUUpLGUuY29weShoKS5hZGRTY2FsZWRWZWN0b3IodWcsbSk7aGwuc3ViVmVjdG9ycyhiLHUpO2I9dWcuZG90KGhsKTt2YXIgUT12Zy5kb3QoaGwpO2lmKDA8PVEmJmI8PVEpcmV0dXJuIGUuY29weSh1KTt3PWIqQS0KdypRO2lmKDA+PXcmJjA8PUEmJjA+PVEpcmV0dXJuIEo9QS8oQS1RKSxlLmNvcHkoaCkuYWRkU2NhbGVkVmVjdG9yKHZnLEopO0E9RSpRLWIqRztpZigwPj1BJiYwPD1HLUUmJjA8PWItUSlyZXR1cm4gcm8uc3ViVmVjdG9ycyh1LG0pLEo9KEctRSkvKEctRSsoYi1RKSksZS5jb3B5KG0pLmFkZFNjYWxlZFZlY3RvcihybyxKKTt1PTEvKEErdytKKTttPXcqdTtKKj11O3JldHVybiBlLmNvcHkoaCkuYWRkU2NhbGVkVmVjdG9yKHVnLG0pLmFkZFNjYWxlZFZlY3Rvcih2ZyxKKX0sZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLmEuZXF1YWxzKHRoaXMuYSkmJmIuYi5lcXVhbHModGhpcy5iKSYmYi5jLmVxdWFscyh0aGlzLmMpfX0pO3ZhciBBcz17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSwKYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LApkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsCmxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NywKbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LApyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LEhjPXtoOjAsCnM6MCxsOjB9LGpqPXtoOjAsczowLGw6MH07T2JqZWN0LmFzc2lnbihJLnByb3RvdHlwZSx7aXNDb2xvcjohMCxyOjEsZzoxLGI6MSxzZXQ6ZnVuY3Rpb24oYil7YiYmYi5pc0NvbG9yP3RoaXMuY29weShiKToibnVtYmVyIj09PXR5cGVvZiBiP3RoaXMuc2V0SGV4KGIpOiJzdHJpbmciPT09dHlwZW9mIGImJnRoaXMuc2V0U3R5bGUoYik7cmV0dXJuIHRoaXN9LHNldFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLmI9dGhpcy5nPXRoaXMucj1iO3JldHVybiB0aGlzfSxzZXRIZXg6ZnVuY3Rpb24oYil7Yj1NYXRoLmZsb29yKGIpO3RoaXMucj0oYj4+MTYmMjU1KS8yNTU7dGhpcy5nPShiPj44JjI1NSkvMjU1O3RoaXMuYj0oYiYyNTUpLzI1NTtyZXR1cm4gdGhpc30sc2V0UkdCOmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnI9Yjt0aGlzLmc9ZTt0aGlzLmI9aDtyZXR1cm4gdGhpc30sc2V0SFNMOmZ1bmN0aW9uKGIsZSxoKXtiPWxiLmV1Y2xpZGVhbk1vZHVsbyhiLDEpO2U9bGIuY2xhbXAoZSwwLAoxKTtoPWxiLmNsYW1wKGgsMCwxKTswPT09ZT90aGlzLnI9dGhpcy5nPXRoaXMuYj1oOihlPS41Pj1oP2gqKDErZSk6aCtlLWgqZSxoPTIqaC1lLHRoaXMucj1PKGgsZSxiKzEvMyksdGhpcy5nPU8oaCxlLGIpLHRoaXMuYj1PKGgsZSxiLTEvMykpO3JldHVybiB0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbihiKXtmdW5jdGlvbiBlKEEpe3ZvaWQgMCE9PUEmJjE+cGFyc2VGbG9hdChBKSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrYisiIHdpbGwgYmUgaWdub3JlZC4iKX12YXIgaDtpZihoPS9eKCg/OnJnYnxoc2wpYT8pXChccyooW15cKV0qKVwpLy5leGVjKGIpKXt2YXIgbT1oWzJdO3N3aXRjaChoWzFdKXtjYXNlICJyZ2IiOmNhc2UgInJnYmEiOmlmKGg9L14oXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKigsXHMqKFswLTldKlwuP1swLTldKylccyopPyQvLmV4ZWMobSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoaFsxXSwKMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChoWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQoaFszXSwxMCkpLzI1NSxlKGhbNV0pLHRoaXM7aWYoaD0vXihcZCspJVxzKixccyooXGQrKSVccyosXHMqKFxkKyklXHMqKCxccyooWzAtOV0qXC4/WzAtOV0rKVxzKik/JC8uZXhlYyhtKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChoWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoaFsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KGhbM10sMTApKS8xMDAsZShoWzVdKSx0aGlzO2JyZWFrO2Nhc2UgImhzbCI6Y2FzZSAiaHNsYSI6aWYoaD0vXihbMC05XSpcLj9bMC05XSspXHMqLFxzKihcZCspJVxzKixccyooXGQrKSVccyooLFxzKihbMC05XSpcLj9bMC05XSspXHMqKT8kLy5leGVjKG0pKXttPXBhcnNlRmxvYXQoaFsxXSkvMzYwO3ZhciB1PXBhcnNlSW50KGhbMl0sCjEwKS8xMDAsdz1wYXJzZUludChoWzNdLDEwKS8xMDA7ZShoWzVdKTtyZXR1cm4gdGhpcy5zZXRIU0wobSx1LHcpfX19ZWxzZSBpZihoPS9eIyhbQS1GYS1mMC05XSspJC8uZXhlYyhiKSl7aD1oWzFdO209aC5sZW5ndGg7aWYoMz09PW0pcmV0dXJuIHRoaXMucj1wYXJzZUludChoLmNoYXJBdCgwKStoLmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChoLmNoYXJBdCgxKStoLmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludChoLmNoYXJBdCgyKStoLmNoYXJBdCgyKSwxNikvMjU1LHRoaXM7aWYoNj09PW0pcmV0dXJuIHRoaXMucj1wYXJzZUludChoLmNoYXJBdCgwKStoLmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChoLmNoYXJBdCgyKStoLmNoYXJBdCgzKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludChoLmNoYXJBdCg0KStoLmNoYXJBdCg1KSwxNikvMjU1LHRoaXN9YiYmMDxiLmxlbmd0aCYmKGg9QXNbYl0sdm9pZCAwIT09aD90aGlzLnNldEhleChoKToKY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK2IpKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMucj1iLnI7dGhpcy5nPWIuZzt0aGlzLmI9Yi5iO3JldHVybiB0aGlzfSxjb3B5R2FtbWFUb0xpbmVhcjpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTIpO3RoaXMucj1NYXRoLnBvdyhiLnIsZSk7dGhpcy5nPU1hdGgucG93KGIuZyxlKTt0aGlzLmI9TWF0aC5wb3coYi5iLGUpO3JldHVybiB0aGlzfSxjb3B5TGluZWFyVG9HYW1tYTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTIpO2U9MDxlPzEvZToxO3RoaXMucj1NYXRoLnBvdyhiLnIsZSk7dGhpcy5nPU1hdGgucG93KGIuZyxlKTt0aGlzLmI9TWF0aC5wb3coYi5iLGUpO3JldHVybiB0aGlzfSxjb252ZXJ0R2FtbWFUb0xpbmVhcjpmdW5jdGlvbihiKXt0aGlzLmNvcHlHYW1tYVRvTGluZWFyKHRoaXMsCmIpO3JldHVybiB0aGlzfSxjb252ZXJ0TGluZWFyVG9HYW1tYTpmdW5jdGlvbihiKXt0aGlzLmNvcHlMaW5lYXJUb0dhbW1hKHRoaXMsYik7cmV0dXJuIHRoaXN9LGNvcHlTUkdCVG9MaW5lYXI6ZnVuY3Rpb24oYil7dGhpcy5yPVAoYi5yKTt0aGlzLmc9UChiLmcpO3RoaXMuYj1QKGIuYik7cmV0dXJuIHRoaXN9LGNvcHlMaW5lYXJUb1NSR0I6ZnVuY3Rpb24oYil7dGhpcy5yPUgoYi5yKTt0aGlzLmc9SChiLmcpO3RoaXMuYj1IKGIuYik7cmV0dXJuIHRoaXN9LGNvbnZlcnRTUkdCVG9MaW5lYXI6ZnVuY3Rpb24oKXt0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyk7cmV0dXJuIHRoaXN9LGNvbnZlcnRMaW5lYXJUb1NSR0I6ZnVuY3Rpb24oKXt0aGlzLmNvcHlMaW5lYXJUb1NSR0IodGhpcyk7cmV0dXJuIHRoaXN9LGdldEhleDpmdW5jdGlvbigpe3JldHVybiAyNTUqdGhpcy5yPDwxNl4yNTUqdGhpcy5nPDw4XjI1NSp0aGlzLmI8PDB9LGdldEhleFN0cmluZzpmdW5jdGlvbigpe3JldHVybigiMDAwMDAwIisKdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX0sZ2V0SFNMOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiAuZ2V0SFNMKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9e2g6MCxzOjAsbDowfSk7dmFyIGU9dGhpcy5yLGg9dGhpcy5nLG09dGhpcy5iLHU9TWF0aC5tYXgoZSxoLG0pLHc9TWF0aC5taW4oZSxoLG0pLEEsRT0odyt1KS8yO2lmKHc9PT11KXc9QT0wO2Vsc2V7dmFyIEc9dS13O3c9LjU+PUU/Ry8odSt3KTpHLygyLXUtdyk7c3dpdGNoKHUpe2Nhc2UgZTpBPShoLW0pL0crKGg8bT82OjApO2JyZWFrO2Nhc2UgaDpBPShtLWUpL0crMjticmVhaztjYXNlIG06QT0oZS1oKS9HKzR9QS89Nn1iLmg9QTtiLnM9dztiLmw9RTtyZXR1cm4gYn0sZ2V0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9LG9mZnNldEhTTDpmdW5jdGlvbihiLAplLGgpe3RoaXMuZ2V0SFNMKEhjKTtIYy5oKz1iO0hjLnMrPWU7SGMubCs9aDt0aGlzLnNldEhTTChIYy5oLEhjLnMsSGMubCk7cmV0dXJuIHRoaXN9LGFkZDpmdW5jdGlvbihiKXt0aGlzLnIrPWIucjt0aGlzLmcrPWIuZzt0aGlzLmIrPWIuYjtyZXR1cm4gdGhpc30sYWRkQ29sb3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy5yPWIucitlLnI7dGhpcy5nPWIuZytlLmc7dGhpcy5iPWIuYitlLmI7cmV0dXJuIHRoaXN9LGFkZFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLnIrPWI7dGhpcy5nKz1iO3RoaXMuYis9YjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGIpe3RoaXMucj1NYXRoLm1heCgwLHRoaXMuci1iLnIpO3RoaXMuZz1NYXRoLm1heCgwLHRoaXMuZy1iLmcpO3RoaXMuYj1NYXRoLm1heCgwLHRoaXMuYi1iLmIpO3JldHVybiB0aGlzfSxtdWx0aXBseTpmdW5jdGlvbihiKXt0aGlzLnIqPWIucjt0aGlzLmcqPWIuZzt0aGlzLmIqPWIuYjtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy5yKj0KYjt0aGlzLmcqPWI7dGhpcy5iKj1iO3JldHVybiB0aGlzfSxsZXJwOmZ1bmN0aW9uKGIsZSl7dGhpcy5yKz0oYi5yLXRoaXMucikqZTt0aGlzLmcrPShiLmctdGhpcy5nKSplO3RoaXMuYis9KGIuYi10aGlzLmIpKmU7cmV0dXJuIHRoaXN9LGxlcnBIU0w6ZnVuY3Rpb24oYixlKXt0aGlzLmdldEhTTChIYyk7Yi5nZXRIU0woamopO2I9bGIubGVycChIYy5oLGpqLmgsZSk7dmFyIGg9bGIubGVycChIYy5zLGpqLnMsZSk7ZT1sYi5sZXJwKEhjLmwsamoubCxlKTt0aGlzLnNldEhTTChiLGgsZSk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5yPT09dGhpcy5yJiZiLmc9PT10aGlzLmcmJmIuYj09PXRoaXMuYn0sZnJvbUFycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dGhpcy5yPWJbZV07dGhpcy5nPWJbZSsxXTt0aGlzLmI9YltlKzJdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PQplJiYoZT0wKTtiW2VdPXRoaXMucjtiW2UrMV09dGhpcy5nO2JbZSsyXT10aGlzLmI7cmV0dXJuIGJ9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEhleCgpfX0pO09iamVjdC5hc3NpZ24oSy5wcm90b3R5cGUse2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMuYT1iLmE7dGhpcy5iPWIuYjt0aGlzLmM9Yi5jO3RoaXMubm9ybWFsLmNvcHkoYi5ub3JtYWwpO3RoaXMuY29sb3IuY29weShiLmNvbG9yKTt0aGlzLm1hdGVyaWFsSW5kZXg9Yi5tYXRlcmlhbEluZGV4O2Zvcih2YXIgZT0wLGg9Yi52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDtlPGg7ZSsrKXRoaXMudmVydGV4Tm9ybWFsc1tlXT1iLnZlcnRleE5vcm1hbHNbZV0uY2xvbmUoKTtlPTA7Zm9yKGg9Yi52ZXJ0ZXhDb2xvcnMubGVuZ3RoO2U8aDtlKyspdGhpcy52ZXJ0ZXhDb2xvcnNbZV09Yi52ZXJ0ZXhDb2xvcnNbZV0uY2xvbmUoKTsKcmV0dXJuIHRoaXN9fSk7dmFyIExxPTA7TS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TSxpc01hdGVyaWFsOiEwLG9uQmVmb3JlQ29tcGlsZTpmdW5jdGlvbigpe30sc2V0VmFsdWVzOmZ1bmN0aW9uKGIpe2lmKHZvaWQgMCE9PWIpZm9yKHZhciBlIGluIGIpe3ZhciBoPWJbZV07aWYodm9pZCAwPT09aCljb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAnIitlKyInIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuIik7ZWxzZSBpZigic2hhZGluZyI9PT1lKWNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PWg/ITA6ITE7ZWxzZXt2YXIgbT10aGlzW2VdO3ZvaWQgMD09PW0/Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIik6Cm0mJm0uaXNDb2xvcj9tLnNldChoKTptJiZtLmlzVmVjdG9yMyYmaCYmaC5pc1ZlY3RvcjM/bS5jb3B5KGgpOnRoaXNbZV09aH19fSx0b0pTT046ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZSh1KXt2YXIgdz1bXSxBO2ZvcihBIGluIHUpe3ZhciBFPXVbQV07ZGVsZXRlIEUubWV0YWRhdGE7dy5wdXNoKEUpfXJldHVybiB3fXZhciBoPXZvaWQgMD09PWJ8fCJzdHJpbmciPT09dHlwZW9mIGI7aCYmKGI9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO3ZhciBtPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O20udXVpZD10aGlzLnV1aWQ7bS50eXBlPXRoaXMudHlwZTsiIiE9PXRoaXMubmFtZSYmKG0ubmFtZT10aGlzLm5hbWUpO3RoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKG0uY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSk7dm9pZCAwIT09dGhpcy5yb3VnaG5lc3MmJihtLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyk7CnZvaWQgMCE9PXRoaXMubWV0YWxuZXNzJiYobS5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpO3RoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG0uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSk7dGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihtLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpO3RoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKG0uc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSk7dm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihtLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyk7dm9pZCAwIT09dGhpcy5jbGVhcmNvYXQmJihtLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCk7dm9pZCAwIT09dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MmJihtLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyk7dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJgp0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihtLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04oYikudXVpZCxtLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKTt0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobS5tYXA9dGhpcy5tYXAudG9KU09OKGIpLnV1aWQpO3RoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihtLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04oYikudXVpZCk7dGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihtLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKGIpLnV1aWQpO3RoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobS5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTihiKS51dWlkKTt0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKG0uYW9NYXA9dGhpcy5hb01hcC50b0pTT04oYikudXVpZCwKbS5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KTt0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihtLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTihiKS51dWlkLG0uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKTt0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobS5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKGIpLnV1aWQsbS5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxtLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKTt0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobS5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKGIpLnV1aWQsbS5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpO3RoaXMucm91Z2huZXNzTWFwJiYKdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKGIpLnV1aWQpO3RoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihtLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04oYikudXVpZCk7dGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihtLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKGIpLnV1aWQpO3RoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYobS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTihiKS51dWlkKTt0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobS5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKGIpLnV1aWQsbS5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHksbS5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8sCnZvaWQgMCE9PXRoaXMuY29tYmluZSYmKG0uY29tYmluZT10aGlzLmNvbWJpbmUpLHZvaWQgMCE9PXRoaXMuZW52TWFwSW50ZW5zaXR5JiYobS5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpKTt0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKG0uZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04oYikudXVpZCk7dm9pZCAwIT09dGhpcy5zaXplJiYobS5zaXplPXRoaXMuc2l6ZSk7dm9pZCAwIT09dGhpcy5zaXplQXR0ZW51YXRpb24mJihtLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbik7MSE9PXRoaXMuYmxlbmRpbmcmJihtLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpOyEwPT09dGhpcy5mbGF0U2hhZGluZyYmKG0uZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyk7MCE9PXRoaXMuc2lkZSYmKG0uc2lkZT10aGlzLnNpZGUpOzAhPT10aGlzLnZlcnRleENvbG9ycyYmKG0udmVydGV4Q29sb3JzPQp0aGlzLnZlcnRleENvbG9ycyk7MT50aGlzLm9wYWNpdHkmJihtLm9wYWNpdHk9dGhpcy5vcGFjaXR5KTshMD09PXRoaXMudHJhbnNwYXJlbnQmJihtLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpO20uZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jO20uZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0O20uZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGU7bS5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGU7bS5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jO20uc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWY7bS5zdGVuY2lsTWFzaz10aGlzLnN0ZW5jaWxNYXNrO20uc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbDttLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbDttLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzczt0aGlzLnJvdGF0aW9uJiYwIT09dGhpcy5yb3RhdGlvbiYmKG0ucm90YXRpb249dGhpcy5yb3RhdGlvbik7ITA9PT10aGlzLnBvbHlnb25PZmZzZXQmJgoobS5wb2x5Z29uT2Zmc2V0PSEwKTswIT09dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yJiYobS5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3Rvcik7MCE9PXRoaXMucG9seWdvbk9mZnNldFVuaXRzJiYobS5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpO3RoaXMubGluZXdpZHRoJiYxIT09dGhpcy5saW5ld2lkdGgmJihtLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCk7dm9pZCAwIT09dGhpcy5kYXNoU2l6ZSYmKG0uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSk7dm9pZCAwIT09dGhpcy5nYXBTaXplJiYobS5nYXBTaXplPXRoaXMuZ2FwU2l6ZSk7dm9pZCAwIT09dGhpcy5zY2FsZSYmKG0uc2NhbGU9dGhpcy5zY2FsZSk7ITA9PT10aGlzLmRpdGhlcmluZyYmKG0uZGl0aGVyaW5nPSEwKTswPHRoaXMuYWxwaGFUZXN0JiYobS5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpOyEwPT09dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEmJihtLnByZW11bHRpcGxpZWRBbHBoYT0KdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpOyEwPT09dGhpcy53aXJlZnJhbWUmJihtLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSk7MTx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aCYmKG0ud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKTsicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lY2FwJiYobS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCk7InJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWpvaW4mJihtLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pOyEwPT09dGhpcy5tb3JwaFRhcmdldHMmJihtLm1vcnBoVGFyZ2V0cz0hMCk7ITA9PT10aGlzLm1vcnBoTm9ybWFscyYmKG0ubW9ycGhOb3JtYWxzPSEwKTshMD09PXRoaXMuc2tpbm5pbmcmJihtLnNraW5uaW5nPSEwKTshMT09PXRoaXMudmlzaWJsZSYmKG0udmlzaWJsZT0hMSk7ITE9PT10aGlzLnRvbmVNYXBwZWQmJihtLnRvbmVNYXBwZWQ9ITEpOwoie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihtLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO2gmJihoPWUoYi50ZXh0dXJlcyksYj1lKGIuaW1hZ2VzKSwwPGgubGVuZ3RoJiYobS50ZXh0dXJlcz1oKSwwPGIubGVuZ3RoJiYobS5pbWFnZXM9YikpO3JldHVybiBtfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm5hbWU9Yi5uYW1lO3RoaXMuZm9nPWIuZm9nO3RoaXMubGlnaHRzPWIubGlnaHRzO3RoaXMuYmxlbmRpbmc9Yi5ibGVuZGluZzt0aGlzLnNpZGU9Yi5zaWRlO3RoaXMuZmxhdFNoYWRpbmc9Yi5mbGF0U2hhZGluZzt0aGlzLnZlcnRleENvbG9ycz1iLnZlcnRleENvbG9yczt0aGlzLm9wYWNpdHk9Yi5vcGFjaXR5O3RoaXMudHJhbnNwYXJlbnQ9Yi50cmFuc3BhcmVudDt0aGlzLmJsZW5kU3JjPWIuYmxlbmRTcmM7dGhpcy5ibGVuZERzdD1iLmJsZW5kRHN0O3RoaXMuYmxlbmRFcXVhdGlvbj0KYi5ibGVuZEVxdWF0aW9uO3RoaXMuYmxlbmRTcmNBbHBoYT1iLmJsZW5kU3JjQWxwaGE7dGhpcy5ibGVuZERzdEFscGhhPWIuYmxlbmREc3RBbHBoYTt0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1iLmJsZW5kRXF1YXRpb25BbHBoYTt0aGlzLmRlcHRoRnVuYz1iLmRlcHRoRnVuYzt0aGlzLmRlcHRoVGVzdD1iLmRlcHRoVGVzdDt0aGlzLmRlcHRoV3JpdGU9Yi5kZXB0aFdyaXRlO3RoaXMuc3RlbmNpbFdyaXRlPWIuc3RlbmNpbFdyaXRlO3RoaXMuc3RlbmNpbEZ1bmM9Yi5zdGVuY2lsRnVuYzt0aGlzLnN0ZW5jaWxSZWY9Yi5zdGVuY2lsUmVmO3RoaXMuc3RlbmNpbE1hc2s9Yi5zdGVuY2lsTWFzazt0aGlzLnN0ZW5jaWxGYWlsPWIuc3RlbmNpbEZhaWw7dGhpcy5zdGVuY2lsWkZhaWw9Yi5zdGVuY2lsWkZhaWw7dGhpcy5zdGVuY2lsWlBhc3M9Yi5zdGVuY2lsWlBhc3M7dGhpcy5jb2xvcldyaXRlPWIuY29sb3JXcml0ZTt0aGlzLnByZWNpc2lvbj1iLnByZWNpc2lvbjt0aGlzLnBvbHlnb25PZmZzZXQ9CmIucG9seWdvbk9mZnNldDt0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9Yi5wb2x5Z29uT2Zmc2V0RmFjdG9yO3RoaXMucG9seWdvbk9mZnNldFVuaXRzPWIucG9seWdvbk9mZnNldFVuaXRzO3RoaXMuZGl0aGVyaW5nPWIuZGl0aGVyaW5nO3RoaXMuYWxwaGFUZXN0PWIuYWxwaGFUZXN0O3RoaXMucHJlbXVsdGlwbGllZEFscGhhPWIucHJlbXVsdGlwbGllZEFscGhhO3RoaXMudmlzaWJsZT1iLnZpc2libGU7dGhpcy50b25lTWFwcGVkPWIudG9uZU1hcHBlZDt0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYi51c2VyRGF0YSkpO3RoaXMuY2xpcFNoYWRvd3M9Yi5jbGlwU2hhZG93czt0aGlzLmNsaXBJbnRlcnNlY3Rpb249Yi5jbGlwSW50ZXJzZWN0aW9uO3ZhciBlPWIuY2xpcHBpbmdQbGFuZXMsaD1udWxsO2lmKG51bGwhPT1lKXt2YXIgbT1lLmxlbmd0aDtoPUFycmF5KG0pO2Zvcih2YXIgdT0wO3UhPT1tOysrdSloW3VdPWVbdV0uY2xvbmUoKX10aGlzLmNsaXBwaW5nUGxhbmVzPQpoO3RoaXMuc2hhZG93U2lkZT1iLnNoYWRvd1NpZGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7TC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7TC5wcm90b3R5cGUuY29uc3RydWN0b3I9TDtMLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO0wucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7TS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMubWFwPWIubWFwO3RoaXMubGlnaHRNYXA9Yi5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PWIubGlnaHRNYXBJbnRlbnNpdHk7dGhpcy5hb01hcD1iLmFvTWFwO3RoaXMuYW9NYXBJbnRlbnNpdHk9Yi5hb01hcEludGVuc2l0eTt0aGlzLnNwZWN1bGFyTWFwPWIuc3BlY3VsYXJNYXA7dGhpcy5hbHBoYU1hcD1iLmFscGhhTWFwO3RoaXMuZW52TWFwPWIuZW52TWFwOwp0aGlzLmNvbWJpbmU9Yi5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWIucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWIucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWIud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWIud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1iLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1iLndpcmVmcmFtZUxpbmVqb2luO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0cztyZXR1cm4gdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihiKXshMD09PWImJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oUi5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldEFycmF5OmZ1bmN0aW9uKGIpe2lmKEFycmF5LmlzQXJyYXkoYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTsKdGhpcy5jb3VudD12b2lkIDAhPT1iP2IubGVuZ3RoL3RoaXMuaXRlbVNpemU6MDt0aGlzLmFycmF5PWI7cmV0dXJuIHRoaXN9LHNldER5bmFtaWM6ZnVuY3Rpb24oYil7dGhpcy5keW5hbWljPWI7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5uYW1lPWIubmFtZTt0aGlzLmFycmF5PW5ldyBiLmFycmF5LmNvbnN0cnVjdG9yKGIuYXJyYXkpO3RoaXMuaXRlbVNpemU9Yi5pdGVtU2l6ZTt0aGlzLmNvdW50PWIuY291bnQ7dGhpcy5ub3JtYWxpemVkPWIubm9ybWFsaXplZDt0aGlzLmR5bmFtaWM9Yi5keW5hbWljO3JldHVybiB0aGlzfSxjb3B5QXQ6ZnVuY3Rpb24oYixlLGgpe2IqPXRoaXMuaXRlbVNpemU7aCo9ZS5pdGVtU2l6ZTtmb3IodmFyIG09MCx1PXRoaXMuaXRlbVNpemU7bTx1O20rKyl0aGlzLmFycmF5W2IrbV09ZS5hcnJheVtoK21dO3JldHVybiB0aGlzfSxjb3B5QXJyYXk6ZnVuY3Rpb24oYil7dGhpcy5hcnJheS5zZXQoYik7cmV0dXJuIHRoaXN9LGNvcHlDb2xvcnNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9CnRoaXMuYXJyYXksaD0wLG09MCx1PWIubGVuZ3RoO208dTttKyspe3ZhciB3PWJbbV07dm9pZCAwPT09dyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLG0pLHc9bmV3IEkpO2VbaCsrXT13LnI7ZVtoKytdPXcuZztlW2grK109dy5ifXJldHVybiB0aGlzfSxjb3B5VmVjdG9yMnNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbT0wLHU9Yi5sZW5ndGg7bTx1O20rKyl7dmFyIHc9YlttXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbSksdz1uZXcgZCk7ZVtoKytdPXcueDtlW2grK109dy55fXJldHVybiB0aGlzfSxjb3B5VmVjdG9yM3NBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbT0wLHU9Yi5sZW5ndGg7bTx1O20rKyl7dmFyIHc9CmJbbV07dm9pZCAwPT09dyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLG0pLHc9bmV3IGcpO2VbaCsrXT13Lng7ZVtoKytdPXcueTtlW2grK109dy56fXJldHVybiB0aGlzfSxjb3B5VmVjdG9yNHNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbT0wLHU9Yi5sZW5ndGg7bTx1O20rKyl7dmFyIHc9YlttXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbSksdz1uZXcgbik7ZVtoKytdPXcueDtlW2grK109dy55O2VbaCsrXT13Lno7ZVtoKytdPXcud31yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dGhpcy5hcnJheS5zZXQoYixlKTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hcnJheVtiKgp0aGlzLml0ZW1TaXplXX0sc2V0WDpmdW5jdGlvbihiLGUpe3RoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplXT1lO3JldHVybiB0aGlzfSxnZXRZOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmFycmF5W2IqdGhpcy5pdGVtU2l6ZSsxXX0sc2V0WTpmdW5jdGlvbihiLGUpe3RoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplKzFdPWU7cmV0dXJuIHRoaXN9LGdldFo6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplKzJdfSxzZXRaOmZ1bmN0aW9uKGIsZSl7dGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemUrMl09ZTtyZXR1cm4gdGhpc30sZ2V0VzpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemUrM119LHNldFc6ZnVuY3Rpb24oYixlKXt0aGlzLmFycmF5W2IqdGhpcy5pdGVtU2l6ZSszXT1lO3JldHVybiB0aGlzfSxzZXRYWTpmdW5jdGlvbihiLGUsaCl7Yio9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2IrMF09ZTt0aGlzLmFycmF5W2IrCjFdPWg7cmV0dXJuIHRoaXN9LHNldFhZWjpmdW5jdGlvbihiLGUsaCxtKXtiKj10aGlzLml0ZW1TaXplO3RoaXMuYXJyYXlbYiswXT1lO3RoaXMuYXJyYXlbYisxXT1oO3RoaXMuYXJyYXlbYisyXT1tO3JldHVybiB0aGlzfSxzZXRYWVpXOmZ1bmN0aW9uKGIsZSxoLG0sdSl7Yio9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2IrMF09ZTt0aGlzLmFycmF5W2IrMV09aDt0aGlzLmFycmF5W2IrMl09bTt0aGlzLmFycmF5W2IrM109dTtyZXR1cm4gdGhpc30sb25VcGxvYWQ6ZnVuY3Rpb24oYil7dGhpcy5vblVwbG9hZENhbGxiYWNrPWI7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksdGhpcy5pdGVtU2l6ZSkpLmNvcHkodGhpcyl9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLApub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fSk7VS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSk7VS5wcm90b3R5cGUuY29uc3RydWN0b3I9VTtZLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKTtZLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ZO2JhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKTtiYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YmE7bWEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUpO21hLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tYTthYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSk7YWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWFhO2NhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKTtjYS5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2E7ZmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUpO2ZhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1mYTsKZGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUpO2RhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kYTtsYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSk7bGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWxhO09iamVjdC5hc3NpZ24oWi5wcm90b3R5cGUse2NvbXB1dGVHcm91cHM6ZnVuY3Rpb24oYil7dmFyIGU9W10saD12b2lkIDA7Yj1iLmZhY2VzO2Zvcih2YXIgbT0wO208Yi5sZW5ndGg7bSsrKXt2YXIgdT1iW21dO2lmKHUubWF0ZXJpYWxJbmRleCE9PWgpe2g9dS5tYXRlcmlhbEluZGV4O3ZvaWQgMCE9PXcmJih3LmNvdW50PTMqbS13LnN0YXJ0LGUucHVzaCh3KSk7dmFyIHc9e3N0YXJ0OjMqbSxtYXRlcmlhbEluZGV4Omh9fX12b2lkIDAhPT13JiYody5jb3VudD0zKm0tdy5zdGFydCxlLnB1c2godykpO3RoaXMuZ3JvdXBzPWV9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihiKXt2YXIgZT1iLmZhY2VzLGg9Yi52ZXJ0aWNlcyxtPWIuZmFjZVZlcnRleFV2cywKdT1tWzBdJiYwPG1bMF0ubGVuZ3RoLHc9bVsxXSYmMDxtWzFdLmxlbmd0aCxBPWIubW9ycGhUYXJnZXRzLEU9QS5sZW5ndGg7aWYoMDxFKXt2YXIgRz1bXTtmb3IodmFyIEo9MDtKPEU7SisrKUdbSl09e25hbWU6QVtKXS5uYW1lLGRhdGE6W119O3RoaXMubW9ycGhUYXJnZXRzLnBvc2l0aW9uPUd9dmFyIFE9Yi5tb3JwaE5vcm1hbHMsUz1RLmxlbmd0aDtpZigwPFMpe3ZhciBUPVtdO2ZvcihKPTA7SjxTO0orKylUW0pdPXtuYW1lOlFbSl0ubmFtZSxkYXRhOltdfTt0aGlzLm1vcnBoVGFyZ2V0cy5ub3JtYWw9VH12YXIgVz1iLnNraW5JbmRpY2VzLFg9Yi5za2luV2VpZ2h0cyxpYT1XLmxlbmd0aD09PWgubGVuZ3RoLGhhPVgubGVuZ3RoPT09aC5sZW5ndGg7MDxoLmxlbmd0aCYmMD09PWUubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUSFJFRS5EaXJlY3RHZW9tZXRyeTogRmFjZWxlc3MgZ2VvbWV0cmllcyBhcmUgbm90IHN1cHBvcnRlZC4iKTtmb3IoSj0wO0o8ZS5sZW5ndGg7SisrKXt2YXIgc2E9CmVbSl07dGhpcy52ZXJ0aWNlcy5wdXNoKGhbc2EuYV0saFtzYS5iXSxoW3NhLmNdKTt2YXIgcWE9c2EudmVydGV4Tm9ybWFsczszPT09cWEubGVuZ3RoP3RoaXMubm9ybWFscy5wdXNoKHFhWzBdLHFhWzFdLHFhWzJdKToocWE9c2Eubm9ybWFsLHRoaXMubm9ybWFscy5wdXNoKHFhLHFhLHFhKSk7cWE9c2EudmVydGV4Q29sb3JzOzM9PT1xYS5sZW5ndGg/dGhpcy5jb2xvcnMucHVzaChxYVswXSxxYVsxXSxxYVsyXSk6KHFhPXNhLmNvbG9yLHRoaXMuY29sb3JzLnB1c2gocWEscWEscWEpKTshMD09PXUmJihxYT1tWzBdW0pdLHZvaWQgMCE9PXFhP3RoaXMudXZzLnB1c2gocWFbMF0scWFbMV0scWFbMl0pOihjb25zb2xlLndhcm4oIlRIUkVFLkRpcmVjdEdlb21ldHJ5LmZyb21HZW9tZXRyeSgpOiBVbmRlZmluZWQgdmVydGV4VXYgIixKKSx0aGlzLnV2cy5wdXNoKG5ldyBkLG5ldyBkLG5ldyBkKSkpOyEwPT09dyYmKHFhPW1bMV1bSl0sdm9pZCAwIT09cWE/dGhpcy51dnMyLnB1c2gocWFbMF0sCnFhWzFdLHFhWzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2MiAiLEopLHRoaXMudXZzMi5wdXNoKG5ldyBkLG5ldyBkLG5ldyBkKSkpO2ZvcihxYT0wO3FhPEU7cWErKyl7dmFyIHJhPUFbcWFdLnZlcnRpY2VzO0dbcWFdLmRhdGEucHVzaChyYVtzYS5hXSxyYVtzYS5iXSxyYVtzYS5jXSl9Zm9yKHFhPTA7cWE8UztxYSsrKXJhPVFbcWFdLnZlcnRleE5vcm1hbHNbSl0sVFtxYV0uZGF0YS5wdXNoKHJhLmEscmEuYixyYS5jKTtpYSYmdGhpcy5za2luSW5kaWNlcy5wdXNoKFdbc2EuYV0sV1tzYS5iXSxXW3NhLmNdKTtoYSYmdGhpcy5za2luV2VpZ2h0cy5wdXNoKFhbc2EuYV0sWFtzYS5iXSxYW3NhLmNdKX10aGlzLmNvbXB1dGVHcm91cHMoYik7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9Yi52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT1iLm5vcm1hbHNOZWVkVXBkYXRlOwp0aGlzLmNvbG9yc05lZWRVcGRhdGU9Yi5jb2xvcnNOZWVkVXBkYXRlO3RoaXMudXZzTmVlZFVwZGF0ZT1iLnV2c05lZWRVcGRhdGU7dGhpcy5ncm91cHNOZWVkVXBkYXRlPWIuZ3JvdXBzTmVlZFVwZGF0ZTtudWxsIT09Yi5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9Yi5ib3VuZGluZ1NwaGVyZS5jbG9uZSgpKTtudWxsIT09Yi5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9Yi5ib3VuZGluZ0JveC5jbG9uZSgpKTtyZXR1cm4gdGhpc319KTt2YXIgTXE9MSxGZD1uZXcgcixpbD1uZXcgeSxraj1uZXcgZyxlZj1uZXcgeCxqbD1uZXcgeCxsZD1uZXcgZzt4YS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eGEsaXNCdWZmZXJHZW9tZXRyeTohMCxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4fSxzZXRJbmRleDpmdW5jdGlvbihiKXt0aGlzLmluZGV4PUFycmF5LmlzQXJyYXkoYik/Cm5ldyAoNjU1MzU8RmEoYik/ZmE6YWEpKGIsMSk6Yn0sYWRkQXR0cmlidXRlOmZ1bmN0aW9uKGIsZSxoKXtpZighKGUmJmUuaXNCdWZmZXJBdHRyaWJ1dGV8fGUmJmUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSkpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLiIpLHRoaXMuYWRkQXR0cmlidXRlKGIsbmV3IFIoZSxoKSk7aWYoImluZGV4Ij09PWIpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4iKSx0aGlzLnNldEluZGV4KGUpLHRoaXM7dGhpcy5hdHRyaWJ1dGVzW2JdPWU7cmV0dXJuIHRoaXN9LGdldEF0dHJpYnV0ZTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2JdfSxyZW1vdmVBdHRyaWJ1dGU6ZnVuY3Rpb24oYil7ZGVsZXRlIHRoaXMuYXR0cmlidXRlc1tiXTsKcmV0dXJuIHRoaXN9LGFkZEdyb3VwOmZ1bmN0aW9uKGIsZSxoKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDpiLGNvdW50OmUsbWF0ZXJpYWxJbmRleDp2b2lkIDAhPT1oP2g6MH0pfSxjbGVhckdyb3VwczpmdW5jdGlvbigpe3RoaXMuZ3JvdXBzPVtdfSxzZXREcmF3UmFuZ2U6ZnVuY3Rpb24oYixlKXt0aGlzLmRyYXdSYW5nZS5zdGFydD1iO3RoaXMuZHJhd1JhbmdlLmNvdW50PWV9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjt2b2lkIDAhPT1lJiYoYi5hcHBseVRvQnVmZmVyQXR0cmlidXRlKGUpLGUubmVlZHNVcGRhdGU9ITApO3ZhciBoPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7dm9pZCAwIT09aCYmKGU9KG5ldyBsKS5nZXROb3JtYWxNYXRyaXgoYiksZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlKGgpLGgubmVlZHNVcGRhdGU9ITApO2g9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7dm9pZCAwIT09aCYmKGU9KG5ldyBsKS5nZXROb3JtYWxNYXRyaXgoYiksCmUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShoKSxoLm5lZWRzVXBkYXRlPSEwKTtudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTtudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtyZXR1cm4gdGhpc30scm90YXRlWDpmdW5jdGlvbihiKXtGZC5tYWtlUm90YXRpb25YKGIpO3RoaXMuYXBwbHlNYXRyaXgoRmQpO3JldHVybiB0aGlzfSxyb3RhdGVZOmZ1bmN0aW9uKGIpe0ZkLm1ha2VSb3RhdGlvblkoYik7dGhpcy5hcHBseU1hdHJpeChGZCk7cmV0dXJuIHRoaXN9LHJvdGF0ZVo6ZnVuY3Rpb24oYil7RmQubWFrZVJvdGF0aW9uWihiKTt0aGlzLmFwcGx5TWF0cml4KEZkKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIsZSxoKXtGZC5tYWtlVHJhbnNsYXRpb24oYixlLGgpO3RoaXMuYXBwbHlNYXRyaXgoRmQpO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihiLGUsaCl7RmQubWFrZVNjYWxlKGIsCmUsaCk7dGhpcy5hcHBseU1hdHJpeChGZCk7cmV0dXJuIHRoaXN9LGxvb2tBdDpmdW5jdGlvbihiKXtpbC5sb29rQXQoYik7aWwudXBkYXRlTWF0cml4KCk7dGhpcy5hcHBseU1hdHJpeChpbC5tYXRyaXgpO3JldHVybiB0aGlzfSxjZW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO3RoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKGtqKS5uZWdhdGUoKTt0aGlzLnRyYW5zbGF0ZShrai54LGtqLnksa2oueik7cmV0dXJuIHRoaXN9LHNldEZyb21PYmplY3Q6ZnVuY3Rpb24oYil7dmFyIGU9Yi5nZW9tZXRyeTtpZihiLmlzUG9pbnRzfHxiLmlzTGluZSl7Yj1uZXcgZGEoMyplLnZlcnRpY2VzLmxlbmd0aCwzKTt2YXIgaD1uZXcgZGEoMyplLmNvbG9ycy5sZW5ndGgsMyk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixiLmNvcHlWZWN0b3Izc0FycmF5KGUudmVydGljZXMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgiY29sb3IiLGguY29weUNvbG9yc0FycmF5KGUuY29sb3JzKSk7CmUubGluZURpc3RhbmNlcyYmZS5saW5lRGlzdGFuY2VzLmxlbmd0aD09PWUudmVydGljZXMubGVuZ3RoJiYoYj1uZXcgZGEoZS5saW5lRGlzdGFuY2VzLmxlbmd0aCwxKSx0aGlzLmFkZEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixiLmNvcHlBcnJheShlLmxpbmVEaXN0YW5jZXMpKSk7bnVsbCE9PWUuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWUuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7bnVsbCE9PWUuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWUuYm91bmRpbmdCb3guY2xvbmUoKSl9ZWxzZSBiLmlzTWVzaCYmZSYmZS5pc0dlb21ldHJ5JiZ0aGlzLmZyb21HZW9tZXRyeShlKTtyZXR1cm4gdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbihiKXtmb3IodmFyIGU9W10saD0wLG09Yi5sZW5ndGg7aDxtO2grKyl7dmFyIHU9YltoXTtlLnB1c2godS54LHUueSx1Lnp8fDApfXRoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGRhKGUsMykpOwpyZXR1cm4gdGhpc30sdXBkYXRlRnJvbU9iamVjdDpmdW5jdGlvbihiKXt2YXIgZT1iLmdlb21ldHJ5O2lmKGIuaXNNZXNoKXt2YXIgaD1lLl9fZGlyZWN0R2VvbWV0cnk7ITA9PT1lLmVsZW1lbnRzTmVlZFVwZGF0ZSYmKGg9dm9pZCAwLGUuZWxlbWVudHNOZWVkVXBkYXRlPSExKTtpZih2b2lkIDA9PT1oKXJldHVybiB0aGlzLmZyb21HZW9tZXRyeShlKTtoLnZlcnRpY2VzTmVlZFVwZGF0ZT1lLnZlcnRpY2VzTmVlZFVwZGF0ZTtoLm5vcm1hbHNOZWVkVXBkYXRlPWUubm9ybWFsc05lZWRVcGRhdGU7aC5jb2xvcnNOZWVkVXBkYXRlPWUuY29sb3JzTmVlZFVwZGF0ZTtoLnV2c05lZWRVcGRhdGU9ZS51dnNOZWVkVXBkYXRlO2guZ3JvdXBzTmVlZFVwZGF0ZT1lLmdyb3Vwc05lZWRVcGRhdGU7ZS52ZXJ0aWNlc05lZWRVcGRhdGU9ITE7ZS5ub3JtYWxzTmVlZFVwZGF0ZT0hMTtlLmNvbG9yc05lZWRVcGRhdGU9ITE7ZS51dnNOZWVkVXBkYXRlPSExO2UuZ3JvdXBzTmVlZFVwZGF0ZT0hMTsKZT1ofSEwPT09ZS52ZXJ0aWNlc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1oJiYoaC5jb3B5VmVjdG9yM3NBcnJheShlLnZlcnRpY2VzKSxoLm5lZWRzVXBkYXRlPSEwKSxlLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMSk7ITA9PT1lLm5vcm1hbHNOZWVkVXBkYXRlJiYoaD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLHZvaWQgMCE9PWgmJihoLmNvcHlWZWN0b3Izc0FycmF5KGUubm9ybWFscyksaC5uZWVkc1VwZGF0ZT0hMCksZS5ub3JtYWxzTmVlZFVwZGF0ZT0hMSk7ITA9PT1lLmNvbG9yc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5jb2xvcix2b2lkIDAhPT1oJiYoaC5jb3B5Q29sb3JzQXJyYXkoZS5jb2xvcnMpLGgubmVlZHNVcGRhdGU9ITApLGUuY29sb3JzTmVlZFVwZGF0ZT0hMSk7ZS51dnNOZWVkVXBkYXRlJiYoaD10aGlzLmF0dHJpYnV0ZXMudXYsdm9pZCAwIT09aCYmKGguY29weVZlY3RvcjJzQXJyYXkoZS51dnMpLGgubmVlZHNVcGRhdGU9CiEwKSxlLnV2c05lZWRVcGRhdGU9ITEpO2UubGluZURpc3RhbmNlc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2Usdm9pZCAwIT09aCYmKGguY29weUFycmF5KGUubGluZURpc3RhbmNlcyksaC5uZWVkc1VwZGF0ZT0hMCksZS5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0hMSk7ZS5ncm91cHNOZWVkVXBkYXRlJiYoZS5jb21wdXRlR3JvdXBzKGIuZ2VvbWV0cnkpLHRoaXMuZ3JvdXBzPWUuZ3JvdXBzLGUuZ3JvdXBzTmVlZFVwZGF0ZT0hMSk7cmV0dXJuIHRoaXN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihiKXtiLl9fZGlyZWN0R2VvbWV0cnk9KG5ldyBaKS5mcm9tR2VvbWV0cnkoYik7cmV0dXJuIHRoaXMuZnJvbURpcmVjdEdlb21ldHJ5KGIuX19kaXJlY3RHZW9tZXRyeSl9LGZyb21EaXJlY3RHZW9tZXRyeTpmdW5jdGlvbihiKXt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLChuZXcgUihuZXcgRmxvYXQzMkFycmF5KDMqYi52ZXJ0aWNlcy5sZW5ndGgpLAozKSkuY29weVZlY3RvcjNzQXJyYXkoYi52ZXJ0aWNlcykpOzA8Yi5ub3JtYWxzLmxlbmd0aCYmdGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsKG5ldyBSKG5ldyBGbG9hdDMyQXJyYXkoMypiLm5vcm1hbHMubGVuZ3RoKSwzKSkuY29weVZlY3RvcjNzQXJyYXkoYi5ub3JtYWxzKSk7MDxiLmNvbG9ycy5sZW5ndGgmJnRoaXMuYWRkQXR0cmlidXRlKCJjb2xvciIsKG5ldyBSKG5ldyBGbG9hdDMyQXJyYXkoMypiLmNvbG9ycy5sZW5ndGgpLDMpKS5jb3B5Q29sb3JzQXJyYXkoYi5jb2xvcnMpKTswPGIudXZzLmxlbmd0aCYmdGhpcy5hZGRBdHRyaWJ1dGUoInV2IiwobmV3IFIobmV3IEZsb2F0MzJBcnJheSgyKmIudXZzLmxlbmd0aCksMikpLmNvcHlWZWN0b3Iyc0FycmF5KGIudXZzKSk7MDxiLnV2czIubGVuZ3RoJiZ0aGlzLmFkZEF0dHJpYnV0ZSgidXYyIiwobmV3IFIobmV3IEZsb2F0MzJBcnJheSgyKmIudXZzMi5sZW5ndGgpLDIpKS5jb3B5VmVjdG9yMnNBcnJheShiLnV2czIpKTsKdGhpcy5ncm91cHM9Yi5ncm91cHM7Zm9yKHZhciBlIGluIGIubW9ycGhUYXJnZXRzKXtmb3IodmFyIGg9W10sbT1iLm1vcnBoVGFyZ2V0c1tlXSx1PTAsdz1tLmxlbmd0aDt1PHc7dSsrKXt2YXIgQT1tW3VdLEU9bmV3IGRhKDMqQS5kYXRhLmxlbmd0aCwzKTtFLm5hbWU9QS5uYW1lO2gucHVzaChFLmNvcHlWZWN0b3Izc0FycmF5KEEuZGF0YSkpfXRoaXMubW9ycGhBdHRyaWJ1dGVzW2VdPWh9MDxiLnNraW5JbmRpY2VzLmxlbmd0aCYmKGU9bmV3IGRhKDQqYi5za2luSW5kaWNlcy5sZW5ndGgsNCksdGhpcy5hZGRBdHRyaWJ1dGUoInNraW5JbmRleCIsZS5jb3B5VmVjdG9yNHNBcnJheShiLnNraW5JbmRpY2VzKSkpOzA8Yi5za2luV2VpZ2h0cy5sZW5ndGgmJihlPW5ldyBkYSg0KmIuc2tpbldlaWdodHMubGVuZ3RoLDQpLHRoaXMuYWRkQXR0cmlidXRlKCJza2luV2VpZ2h0IixlLmNvcHlWZWN0b3I0c0FycmF5KGIuc2tpbldlaWdodHMpKSk7bnVsbCE9PWIuYm91bmRpbmdTcGhlcmUmJgoodGhpcy5ib3VuZGluZ1NwaGVyZT1iLmJvdW5kaW5nU3BoZXJlLmNsb25lKCkpO251bGwhPT1iLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1iLmJvdW5kaW5nQm94LmNsb25lKCkpO3JldHVybiB0aGlzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHgpO3ZhciBiPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHZvaWQgMCE9PWIpe2lmKHRoaXMuYm91bmRpbmdCb3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShiKSxlKXtiPTA7Zm9yKHZhciBoPWUubGVuZ3RoO2I8aDtiKyspZWYuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW2JdKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoZWYubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoZWYubWF4KX19ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOwooaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveDogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9LGNvbXB1dGVCb3VuZGluZ1NwaGVyZTpmdW5jdGlvbigpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgRik7dmFyIGI9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYoYil7dmFyIGg9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7ZWYuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShiKTtpZihlKWZvcih2YXIgbT0wLHU9ZS5sZW5ndGg7bTx1O20rKyl7dmFyIHc9CmVbbV07amwuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh3KTtlZi5leHBhbmRCeVBvaW50KGpsLm1pbik7ZWYuZXhwYW5kQnlQb2ludChqbC5tYXgpfWVmLmdldENlbnRlcihoKTt2YXIgQT0wO209MDtmb3IodT1iLmNvdW50O208dTttKyspbGQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShiLG0pLEE9TWF0aC5tYXgoQSxoLmRpc3RhbmNlVG9TcXVhcmVkKGxkKSk7aWYoZSlmb3IobT0wLHU9ZS5sZW5ndGg7bTx1O20rKyl7dz1lW21dO2I9MDtmb3IodmFyIEU9dy5jb3VudDtiPEU7YisrKWxkLmZyb21CdWZmZXJBdHRyaWJ1dGUodyxiKSxBPU1hdGgubWF4KEEsaC5kaXN0YW5jZVRvU3F1YXJlZChsZCkpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChBKTtpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLAp0aGlzKX19LGNvbXB1dGVGYWNlTm9ybWFsczpmdW5jdGlvbigpe30sY29tcHV0ZVZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmluZGV4LGU9dGhpcy5hdHRyaWJ1dGVzO2lmKGUucG9zaXRpb24pe3ZhciBoPWUucG9zaXRpb24uYXJyYXk7aWYodm9pZCAwPT09ZS5ub3JtYWwpdGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IFIobmV3IEZsb2F0MzJBcnJheShoLmxlbmd0aCksMykpO2Vsc2UgZm9yKHZhciBtPWUubm9ybWFsLmFycmF5LHU9MCx3PW0ubGVuZ3RoO3U8dzt1KyspbVt1XT0wO209ZS5ub3JtYWwuYXJyYXk7dmFyIEE9bmV3IGcsRT1uZXcgZyxHPW5ldyBnLEo9bmV3IGcsUT1uZXcgZztpZihiKXt2YXIgUz1iLmFycmF5O3U9MDtmb3Iodz1iLmNvdW50O3U8dzt1Kz0zKXtiPTMqU1t1KzBdO3ZhciBUPTMqU1t1KzFdO3ZhciBXPTMqU1t1KzJdO0EuZnJvbUFycmF5KGgsYik7RS5mcm9tQXJyYXkoaCxUKTtHLmZyb21BcnJheShoLFcpO0ouc3ViVmVjdG9ycyhHLApFKTtRLnN1YlZlY3RvcnMoQSxFKTtKLmNyb3NzKFEpO21bYl0rPUoueDttW2IrMV0rPUoueTttW2IrMl0rPUouejttW1RdKz1KLng7bVtUKzFdKz1KLnk7bVtUKzJdKz1KLno7bVtXXSs9Si54O21bVysxXSs9Si55O21bVysyXSs9Si56fX1lbHNlIGZvcih1PTAsdz1oLmxlbmd0aDt1PHc7dSs9OSlBLmZyb21BcnJheShoLHUpLEUuZnJvbUFycmF5KGgsdSszKSxHLmZyb21BcnJheShoLHUrNiksSi5zdWJWZWN0b3JzKEcsRSksUS5zdWJWZWN0b3JzKEEsRSksSi5jcm9zcyhRKSxtW3VdPUoueCxtW3UrMV09Si55LG1bdSsyXT1KLnosbVt1KzNdPUoueCxtW3UrNF09Si55LG1bdSs1XT1KLnosbVt1KzZdPUoueCxtW3UrN109Si55LG1bdSs4XT1KLno7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7ZS5ub3JtYWwubmVlZHNVcGRhdGU9ITB9fSxtZXJnZTpmdW5jdGlvbihiLGUpe2lmKGImJmIuaXNCdWZmZXJHZW9tZXRyeSl7dm9pZCAwPT09ZSYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXRceDNkMC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTsKdmFyIGg9dGhpcy5hdHRyaWJ1dGVzLG07Zm9yKG0gaW4gaClpZih2b2lkIDAhPT1iLmF0dHJpYnV0ZXNbbV0pe3ZhciB1PWhbbV0uYXJyYXksdz1iLmF0dHJpYnV0ZXNbbV0sQT13LmFycmF5LEU9dy5pdGVtU2l6ZSplO3c9TWF0aC5taW4oQS5sZW5ndGgsdS5sZW5ndGgtRSk7Zm9yKHZhciBHPTA7Rzx3O0crKyxFKyspdVtFXT1BW0ddfXJldHVybiB0aGlzfWNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLGIpfSxub3JtYWxpemVOb3JtYWxzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuYXR0cmlidXRlcy5ub3JtYWwsZT0wLGg9Yi5jb3VudDtlPGg7ZSsrKWxkLng9Yi5nZXRYKGUpLGxkLnk9Yi5nZXRZKGUpLGxkLno9Yi5nZXRaKGUpLGxkLm5vcm1hbGl6ZSgpLGIuc2V0WFlaKGUsbGQueCxsZC55LGxkLnopfSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKFEsClMpe3ZhciBUPVEuYXJyYXk7UT1RLml0ZW1TaXplO2Zvcih2YXIgVz1uZXcgVC5jb25zdHJ1Y3RvcihTLmxlbmd0aCpRKSxYLGlhPTAsaGE9MCxzYT1TLmxlbmd0aDtoYTxzYTtoYSsrKXtYPVNbaGFdKlE7Zm9yKHZhciBxYT0wO3FhPFE7cWErKylXW2lhKytdPVRbWCsrXX1yZXR1cm4gbmV3IFIoVyxRKX1pZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO3ZhciBlPW5ldyB4YSxoPXRoaXMuaW5kZXguYXJyYXksbT10aGlzLmF0dHJpYnV0ZXMsdTtmb3IodSBpbiBtKXt2YXIgdz1tW3VdO3c9Yih3LGgpO2UuYWRkQXR0cmlidXRlKHUsdyl9dmFyIEE9dGhpcy5tb3JwaEF0dHJpYnV0ZXM7Zm9yKHUgaW4gQSl7dmFyIEU9W10sRz1BW3VdO209MDtmb3IodmFyIEo9Ry5sZW5ndGg7bTxKO20rKyl3PUdbbV0sdz1iKHcsaCksRS5wdXNoKHcpOwplLm1vcnBoQXR0cmlidXRlc1t1XT1FfWg9dGhpcy5ncm91cHM7bT0wO2Zvcih1PWgubGVuZ3RoO208dTttKyspdz1oW21dLGUuYWRkR3JvdXAody5zdGFydCx3LmNvdW50LHcubWF0ZXJpYWxJbmRleCk7cmV0dXJuIGV9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBiPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2IudXVpZD10aGlzLnV1aWQ7Yi50eXBlPXRoaXMudHlwZTsiIiE9PXRoaXMubmFtZSYmKGIubmFtZT10aGlzLm5hbWUpOzA8T2JqZWN0LmtleXModGhpcy51c2VyRGF0YSkubGVuZ3RoJiYoYi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtpZih2b2lkIDAhPT10aGlzLnBhcmFtZXRlcnMpe3ZhciBlPXRoaXMucGFyYW1ldGVycztmb3IoSiBpbiBlKXZvaWQgMCE9PWVbSl0mJihiW0pdPWVbSl0pO3JldHVybiBifWIuZGF0YT17YXR0cmlidXRlczp7fX07ZT10aGlzLmluZGV4O251bGwhPT0KZSYmKGIuZGF0YS5pbmRleD17dHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSl9KTt2YXIgaD10aGlzLmF0dHJpYnV0ZXM7Zm9yKEogaW4gaCl7ZT1oW0pdO3ZhciBtPWUudG9KU09OKCk7IiIhPT1lLm5hbWUmJihtLm5hbWU9ZS5uYW1lKTtiLmRhdGEuYXR0cmlidXRlc1tKXT1tfWg9e307dmFyIHU9ITE7Zm9yKEogaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2Zvcih2YXIgdz10aGlzLm1vcnBoQXR0cmlidXRlc1tKXSxBPVtdLEU9MCxHPXcubGVuZ3RoO0U8RztFKyspZT13W0VdLG09ZS50b0pTT04oKSwiIiE9PWUubmFtZSYmKG0ubmFtZT1lLm5hbWUpLEEucHVzaChtKTswPEEubGVuZ3RoJiYoaFtKXT1BLHU9ITApfXUmJihiLmRhdGEubW9ycGhBdHRyaWJ1dGVzPWgpO3ZhciBKPXRoaXMuZ3JvdXBzOzA8Si5sZW5ndGgmJihiLmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoSikpKTtKPQp0aGlzLmJvdW5kaW5nU3BoZXJlO251bGwhPT1KJiYoYi5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6Si5jZW50ZXIudG9BcnJheSgpLHJhZGl1czpKLnJhZGl1c30pO3JldHVybiBifSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgeGEpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dmFyIGU7dGhpcy5pbmRleD1udWxsO3RoaXMuYXR0cmlidXRlcz17fTt0aGlzLm1vcnBoQXR0cmlidXRlcz17fTt0aGlzLmdyb3Vwcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLm5hbWU9Yi5uYW1lO3ZhciBoPWIuaW5kZXg7bnVsbCE9PWgmJnRoaXMuc2V0SW5kZXgoaC5jbG9uZSgpKTtoPWIuYXR0cmlidXRlcztmb3IoQSBpbiBoKXRoaXMuYWRkQXR0cmlidXRlKEEsaFtBXS5jbG9uZSgpKTt2YXIgbT1iLm1vcnBoQXR0cmlidXRlcztmb3IoQSBpbiBtKXt2YXIgdT1bXSx3PW1bQV07aD0wO2ZvcihlPXcubGVuZ3RoO2g8ZTtoKyspdS5wdXNoKHdbaF0uY2xvbmUoKSk7CnRoaXMubW9ycGhBdHRyaWJ1dGVzW0FdPXV9dmFyIEE9Yi5ncm91cHM7aD0wO2ZvcihlPUEubGVuZ3RoO2g8ZTtoKyspbT1BW2hdLHRoaXMuYWRkR3JvdXAobS5zdGFydCxtLmNvdW50LG0ubWF0ZXJpYWxJbmRleCk7QT1iLmJvdW5kaW5nQm94O251bGwhPT1BJiYodGhpcy5ib3VuZGluZ0JveD1BLmNsb25lKCkpO0E9Yi5ib3VuZGluZ1NwaGVyZTtudWxsIT09QSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9QS5jbG9uZSgpKTt0aGlzLmRyYXdSYW5nZS5zdGFydD1iLmRyYXdSYW5nZS5zdGFydDt0aGlzLmRyYXdSYW5nZS5jb3VudD1iLmRyYXdSYW5nZS5jb3VudDt0aGlzLnVzZXJEYXRhPWIudXNlckRhdGE7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7dmFyIHNvPW5ldyByLGZmPW5ldyBELGtsPW5ldyBGLEplPW5ldyBnLEtlPW5ldyBnLExlPW5ldyBnLGhuPW5ldyBnLGpuPW5ldyBnLGtuPW5ldyBnLGxrPQpuZXcgZyxtaz1uZXcgZyxuaz1uZXcgZyx6Zj1uZXcgZCxBZj1uZXcgZCxCZj1uZXcgZCxZZz1uZXcgZyxwaT1uZXcgZzt5YS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHkucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eWEsaXNNZXNoOiEwLHNldERyYXdNb2RlOmZ1bmN0aW9uKGIpe3RoaXMuZHJhd01vZGU9Yn0sY29weTpmdW5jdGlvbihiKXt5LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmRyYXdNb2RlPWIuZHJhd01vZGU7dm9pZCAwIT09Yi5tb3JwaFRhcmdldEluZmx1ZW5jZXMmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1iLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpKTt2b2lkIDAhPT1iLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSYmKHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PU9iamVjdC5hc3NpZ24oe30sYi5tb3JwaFRhcmdldERpY3Rpb25hcnkpKTtyZXR1cm4gdGhpc30sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7dmFyIGI9CnRoaXMuZ2VvbWV0cnk7aWYoYi5pc0J1ZmZlckdlb21ldHJ5KXtiPWIubW9ycGhBdHRyaWJ1dGVzO3ZhciBlPU9iamVjdC5rZXlzKGIpO2lmKDA8ZS5sZW5ndGgpe3ZhciBoPWJbZVswXV07aWYodm9pZCAwIT09aClmb3IodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e30sYj0wLGU9aC5sZW5ndGg7YjxlO2IrKyl7dmFyIG09aFtiXS5uYW1lfHxTdHJpbmcoYik7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKTt0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVttXT1ifX19ZWxzZSBiPWIubW9ycGhUYXJnZXRzLHZvaWQgMCE9PWImJjA8Yi5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX0scmF5Y2FzdDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuZ2VvbWV0cnksCm09dGhpcy5tYXRlcmlhbCx1PXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09bSYmKG51bGw9PT1oLmJvdW5kaW5nU3BoZXJlJiZoLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGtsLmNvcHkoaC5ib3VuZGluZ1NwaGVyZSksa2wuYXBwbHlNYXRyaXg0KHUpLCExIT09Yi5yYXkuaW50ZXJzZWN0c1NwaGVyZShrbCkmJihzby5nZXRJbnZlcnNlKHUpLGZmLmNvcHkoYi5yYXkpLmFwcGx5TWF0cml4NChzbyksbnVsbD09PWguYm91bmRpbmdCb3h8fCExIT09ZmYuaW50ZXJzZWN0c0JveChoLmJvdW5kaW5nQm94KSkpKWlmKGguaXNCdWZmZXJHZW9tZXRyeSl7dmFyIHc9aC5pbmRleDt1PWguYXR0cmlidXRlcy5wb3NpdGlvbjt2YXIgQT1oLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixFPWguYXR0cmlidXRlcy51dixHPWguYXR0cmlidXRlcy51djIsSj1oLmdyb3VwcyxRPWguZHJhd1JhbmdlLFMsVDtpZihudWxsIT09dylpZihBcnJheS5pc0FycmF5KG0pKXt2YXIgVz0wO2ZvcihTPUoubGVuZ3RoO1c8ClM7VysrKXt2YXIgWD1KW1ddO3ZhciBpYT1tW1gubWF0ZXJpYWxJbmRleF07dmFyIGhhPU1hdGgubWF4KFguc3RhcnQsUS5zdGFydCk7Zm9yKFQ9aD1NYXRoLm1pbihYLnN0YXJ0K1guY291bnQsUS5zdGFydCtRLmNvdW50KTtoYTxUO2hhKz0zKXtoPXcuZ2V0WChoYSk7dmFyIHNhPXcuZ2V0WChoYSsxKTt2YXIgcWE9dy5nZXRYKGhhKzIpO2lmKGg9R2EodGhpcyxpYSxiLGZmLHUsQSxFLEcsaCxzYSxxYSkpaC5mYWNlSW5kZXg9TWF0aC5mbG9vcihoYS8zKSxoLmZhY2UubWF0ZXJpYWxJbmRleD1YLm1hdGVyaWFsSW5kZXgsZS5wdXNoKGgpfX19ZWxzZSBmb3IoaGE9TWF0aC5tYXgoMCxRLnN0YXJ0KSxoPU1hdGgubWluKHcuY291bnQsUS5zdGFydCtRLmNvdW50KSxXPWhhLFM9aDtXPFM7Vys9Myl7aWYoaD13LmdldFgoVyksc2E9dy5nZXRYKFcrMSkscWE9dy5nZXRYKFcrMiksaD1HYSh0aGlzLG0sYixmZix1LEEsRSxHLGgsc2EscWEpKWguZmFjZUluZGV4PU1hdGguZmxvb3IoVy8zKSwKZS5wdXNoKGgpfWVsc2UgaWYodm9pZCAwIT09dSlpZihBcnJheS5pc0FycmF5KG0pKWZvcihXPTAsUz1KLmxlbmd0aDtXPFM7VysrKWZvcihYPUpbV10saWE9bVtYLm1hdGVyaWFsSW5kZXhdLGhhPU1hdGgubWF4KFguc3RhcnQsUS5zdGFydCksVD1oPU1hdGgubWluKFguc3RhcnQrWC5jb3VudCxRLnN0YXJ0K1EuY291bnQpO2hhPFQ7aGErPTMpe2lmKGg9aGEsc2E9aGErMSxxYT1oYSsyLGg9R2EodGhpcyxpYSxiLGZmLHUsQSxFLEcsaCxzYSxxYSkpaC5mYWNlSW5kZXg9TWF0aC5mbG9vcihoYS8zKSxoLmZhY2UubWF0ZXJpYWxJbmRleD1YLm1hdGVyaWFsSW5kZXgsZS5wdXNoKGgpfWVsc2UgZm9yKGhhPU1hdGgubWF4KDAsUS5zdGFydCksaD1NYXRoLm1pbih1LmNvdW50LFEuc3RhcnQrUS5jb3VudCksVz1oYSxTPWg7VzxTO1crPTMpaWYoaD1XLHNhPVcrMSxxYT1XKzIsaD1HYSh0aGlzLG0sYixmZix1LEEsRSxHLGgsc2EscWEpKWguZmFjZUluZGV4PU1hdGguZmxvb3IoVy8zKSxlLnB1c2goaCl9ZWxzZSBpZihoLmlzR2VvbWV0cnkpZm9yKHU9CkFycmF5LmlzQXJyYXkobSksQT1oLnZlcnRpY2VzLEU9aC5mYWNlcyxoPWguZmFjZVZlcnRleFV2c1swXSwwPGgubGVuZ3RoJiYodz1oKSxXPTAsUz1FLmxlbmd0aDtXPFM7VysrKWlmKFg9RVtXXSxoPXU/bVtYLm1hdGVyaWFsSW5kZXhdOm0sdm9pZCAwIT09aCYmKEc9QVtYLmFdLEo9QVtYLmJdLFE9QVtYLmNdLGg9QmEodGhpcyxoLGIsZmYsRyxKLFEsWWcpKSl3JiZ3W1ddJiYoaWE9d1tXXSx6Zi5jb3B5KGlhWzBdKSxBZi5jb3B5KGlhWzFdKSxCZi5jb3B5KGlhWzJdKSxoLnV2PUIuZ2V0VVYoWWcsRyxKLFEsemYsQWYsQmYsbmV3IGQpKSxoLmZhY2U9WCxoLmZhY2VJbmRleD1XLGUucHVzaChoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5nZW9tZXRyeSx0aGlzLm1hdGVyaWFsKSkuY29weSh0aGlzKX19KTt2YXIgTnE9MCxHZD1uZXcgcixsbD1uZXcgeSxsaj1uZXcgZzt6YS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKSwKe2NvbnN0cnVjdG9yOnphLGlzR2VvbWV0cnk6ITAsYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPShuZXcgbCkuZ2V0Tm9ybWFsTWF0cml4KGIpLGg9MCxtPXRoaXMudmVydGljZXMubGVuZ3RoO2g8bTtoKyspdGhpcy52ZXJ0aWNlc1toXS5hcHBseU1hdHJpeDQoYik7aD0wO2ZvcihtPXRoaXMuZmFjZXMubGVuZ3RoO2g8bTtoKyspe2I9dGhpcy5mYWNlc1toXTtiLm5vcm1hbC5hcHBseU1hdHJpeDMoZSkubm9ybWFsaXplKCk7Zm9yKHZhciB1PTAsdz1iLnZlcnRleE5vcm1hbHMubGVuZ3RoO3U8dzt1KyspYi52ZXJ0ZXhOb3JtYWxzW3VdLmFwcGx5TWF0cml4MyhlKS5ub3JtYWxpemUoKX1udWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTtudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPSEwO3JldHVybiB0aGlzfSwKcm90YXRlWDpmdW5jdGlvbihiKXtHZC5tYWtlUm90YXRpb25YKGIpO3RoaXMuYXBwbHlNYXRyaXgoR2QpO3JldHVybiB0aGlzfSxyb3RhdGVZOmZ1bmN0aW9uKGIpe0dkLm1ha2VSb3RhdGlvblkoYik7dGhpcy5hcHBseU1hdHJpeChHZCk7cmV0dXJuIHRoaXN9LHJvdGF0ZVo6ZnVuY3Rpb24oYil7R2QubWFrZVJvdGF0aW9uWihiKTt0aGlzLmFwcGx5TWF0cml4KEdkKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIsZSxoKXtHZC5tYWtlVHJhbnNsYXRpb24oYixlLGgpO3RoaXMuYXBwbHlNYXRyaXgoR2QpO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihiLGUsaCl7R2QubWFrZVNjYWxlKGIsZSxoKTt0aGlzLmFwcGx5TWF0cml4KEdkKTtyZXR1cm4gdGhpc30sbG9va0F0OmZ1bmN0aW9uKGIpe2xsLmxvb2tBdChiKTtsbC51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGxsLm1hdHJpeCk7cmV0dXJuIHRoaXN9LGZyb21CdWZmZXJHZW9tZXRyeTpmdW5jdGlvbihiKXtmdW5jdGlvbiBlKFcsClgsaWEsaGEpe3ZhciBzYT12b2lkIDA9PT1FP1tdOltoLmNvbG9yc1tXXS5jbG9uZSgpLGguY29sb3JzW1hdLmNsb25lKCksaC5jb2xvcnNbaWFdLmNsb25lKCldLHFhPXZvaWQgMD09PUE/W106WyhuZXcgZykuZnJvbUFycmF5KEEsMypXKSwobmV3IGcpLmZyb21BcnJheShBLDMqWCksKG5ldyBnKS5mcm9tQXJyYXkoQSwzKmlhKV07aGE9bmV3IEsoVyxYLGlhLHFhLHNhLGhhKTtoLmZhY2VzLnB1c2goaGEpO3ZvaWQgMCE9PUcmJmguZmFjZVZlcnRleFV2c1swXS5wdXNoKFsobmV3IGQpLmZyb21BcnJheShHLDIqVyksKG5ldyBkKS5mcm9tQXJyYXkoRywyKlgpLChuZXcgZCkuZnJvbUFycmF5KEcsMippYSldKTt2b2lkIDAhPT1KJiZoLmZhY2VWZXJ0ZXhVdnNbMV0ucHVzaChbKG5ldyBkKS5mcm9tQXJyYXkoSiwyKlcpLChuZXcgZCkuZnJvbUFycmF5KEosMipYKSwobmV3IGQpLmZyb21BcnJheShKLDIqaWEpXSl9dmFyIGg9dGhpcyxtPW51bGwhPT1iLmluZGV4P2IuaW5kZXguYXJyYXk6CnZvaWQgMCx1PWIuYXR0cmlidXRlcyx3PXUucG9zaXRpb24uYXJyYXksQT12b2lkIDAhPT11Lm5vcm1hbD91Lm5vcm1hbC5hcnJheTp2b2lkIDAsRT12b2lkIDAhPT11LmNvbG9yP3UuY29sb3IuYXJyYXk6dm9pZCAwLEc9dm9pZCAwIT09dS51dj91LnV2LmFycmF5OnZvaWQgMCxKPXZvaWQgMCE9PXUudXYyP3UudXYyLmFycmF5OnZvaWQgMDt2b2lkIDAhPT1KJiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPVtdKTtmb3IodT0wO3U8dy5sZW5ndGg7dSs9MyloLnZlcnRpY2VzLnB1c2goKG5ldyBnKS5mcm9tQXJyYXkodyx1KSksdm9pZCAwIT09RSYmaC5jb2xvcnMucHVzaCgobmV3IEkpLmZyb21BcnJheShFLHUpKTt2YXIgUT1iLmdyb3VwcztpZigwPFEubGVuZ3RoKWZvcih1PTA7dTxRLmxlbmd0aDt1Kyspe3c9UVt1XTt2YXIgUz13LnN0YXJ0LFQ9Uztmb3IoUys9dy5jb3VudDtUPFM7VCs9Myl2b2lkIDAhPT1tP2UobVtUXSxtW1QrMV0sbVtUKzJdLHcubWF0ZXJpYWxJbmRleCk6ZShULApUKzEsVCsyLHcubWF0ZXJpYWxJbmRleCl9ZWxzZSBpZih2b2lkIDAhPT1tKWZvcih1PTA7dTxtLmxlbmd0aDt1Kz0zKWUobVt1XSxtW3UrMV0sbVt1KzJdKTtlbHNlIGZvcih1PTA7dTx3Lmxlbmd0aC8zO3UrPTMpZSh1LHUrMSx1KzIpO3RoaXMuY29tcHV0ZUZhY2VOb3JtYWxzKCk7bnVsbCE9PWIuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWIuYm91bmRpbmdCb3guY2xvbmUoKSk7bnVsbCE9PWIuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7cmV0dXJuIHRoaXN9LGNlbnRlcjpmdW5jdGlvbigpe3RoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIobGopLm5lZ2F0ZSgpO3RoaXMudHJhbnNsYXRlKGxqLngsbGoueSxsai56KTtyZXR1cm4gdGhpc30sbm9ybWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt2YXIgYj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlciwKZT10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cztlPTA9PT1lPzE6MS9lO3ZhciBoPW5ldyByO2guc2V0KGUsMCwwLC1lKmIueCwwLGUsMCwtZSpiLnksMCwwLGUsLWUqYi56LDAsMCwwLDEpO3RoaXMuYXBwbHlNYXRyaXgoaCk7cmV0dXJuIHRoaXN9LGNvbXB1dGVGYWNlTm9ybWFsczpmdW5jdGlvbigpe2Zvcih2YXIgYj1uZXcgZyxlPW5ldyBnLGg9MCxtPXRoaXMuZmFjZXMubGVuZ3RoO2g8bTtoKyspe3ZhciB1PXRoaXMuZmFjZXNbaF0sdz10aGlzLnZlcnRpY2VzW3UuYV0sQT10aGlzLnZlcnRpY2VzW3UuYl07Yi5zdWJWZWN0b3JzKHRoaXMudmVydGljZXNbdS5jXSxBKTtlLnN1YlZlY3RvcnModyxBKTtiLmNyb3NzKGUpO2Iubm9ybWFsaXplKCk7dS5ub3JtYWwuY29weShiKX19LGNvbXB1dGVWZXJ0ZXhOb3JtYWxzOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihiPSEwKTt2YXIgZTt2YXIgaD1BcnJheSh0aGlzLnZlcnRpY2VzLmxlbmd0aCk7dmFyIG09MDtmb3IoZT10aGlzLnZlcnRpY2VzLmxlbmd0aDttPAplO20rKyloW21dPW5ldyBnO2lmKGIpe3ZhciB1PW5ldyBnLHc9bmV3IGc7Yj0wO2ZvcihtPXRoaXMuZmFjZXMubGVuZ3RoO2I8bTtiKyspe2U9dGhpcy5mYWNlc1tiXTt2YXIgQT10aGlzLnZlcnRpY2VzW2UuYV07dmFyIEU9dGhpcy52ZXJ0aWNlc1tlLmJdO3ZhciBHPXRoaXMudmVydGljZXNbZS5jXTt1LnN1YlZlY3RvcnMoRyxFKTt3LnN1YlZlY3RvcnMoQSxFKTt1LmNyb3NzKHcpO2hbZS5hXS5hZGQodSk7aFtlLmJdLmFkZCh1KTtoW2UuY10uYWRkKHUpfX1lbHNlIGZvcih0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpLGI9MCxtPXRoaXMuZmFjZXMubGVuZ3RoO2I8bTtiKyspZT10aGlzLmZhY2VzW2JdLGhbZS5hXS5hZGQoZS5ub3JtYWwpLGhbZS5iXS5hZGQoZS5ub3JtYWwpLGhbZS5jXS5hZGQoZS5ub3JtYWwpO209MDtmb3IoZT10aGlzLnZlcnRpY2VzLmxlbmd0aDttPGU7bSsrKWhbbV0ubm9ybWFsaXplKCk7Yj0wO2ZvcihtPXRoaXMuZmFjZXMubGVuZ3RoO2I8bTtiKyspZT0KdGhpcy5mYWNlc1tiXSxBPWUudmVydGV4Tm9ybWFscywzPT09QS5sZW5ndGg/KEFbMF0uY29weShoW2UuYV0pLEFbMV0uY29weShoW2UuYl0pLEFbMl0uY29weShoW2UuY10pKTooQVswXT1oW2UuYV0uY2xvbmUoKSxBWzFdPWhbZS5iXS5jbG9uZSgpLEFbMl09aFtlLmNdLmNsb25lKCkpOzA8dGhpcy5mYWNlcy5sZW5ndGgmJih0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPSEwKX0sY29tcHV0ZUZsYXRWZXJ0ZXhOb3JtYWxzOmZ1bmN0aW9uKCl7dmFyIGI7dGhpcy5jb21wdXRlRmFjZU5vcm1hbHMoKTt2YXIgZT0wO2ZvcihiPXRoaXMuZmFjZXMubGVuZ3RoO2U8YjtlKyspe3ZhciBoPXRoaXMuZmFjZXNbZV07dmFyIG09aC52ZXJ0ZXhOb3JtYWxzOzM9PT1tLmxlbmd0aD8obVswXS5jb3B5KGgubm9ybWFsKSxtWzFdLmNvcHkoaC5ub3JtYWwpLG1bMl0uY29weShoLm5vcm1hbCkpOihtWzBdPWgubm9ybWFsLmNsb25lKCksbVsxXT1oLm5vcm1hbC5jbG9uZSgpLG1bMl09aC5ub3JtYWwuY2xvbmUoKSl9MDwKdGhpcy5mYWNlcy5sZW5ndGgmJih0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPSEwKX0sY29tcHV0ZU1vcnBoTm9ybWFsczpmdW5jdGlvbigpe3ZhciBiLGU7dmFyIGg9MDtmb3IoZT10aGlzLmZhY2VzLmxlbmd0aDtoPGU7aCsrKXt2YXIgbT10aGlzLmZhY2VzW2hdO20uX19vcmlnaW5hbEZhY2VOb3JtYWw/bS5fX29yaWdpbmFsRmFjZU5vcm1hbC5jb3B5KG0ubm9ybWFsKTptLl9fb3JpZ2luYWxGYWNlTm9ybWFsPW0ubm9ybWFsLmNsb25lKCk7bS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc3x8KG0uX19vcmlnaW5hbFZlcnRleE5vcm1hbHM9W10pO3ZhciB1PTA7Zm9yKGI9bS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDt1PGI7dSsrKW0uX19vcmlnaW5hbFZlcnRleE5vcm1hbHNbdV0/bS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1t1XS5jb3B5KG0udmVydGV4Tm9ybWFsc1t1XSk6bS5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1t1XT1tLnZlcnRleE5vcm1hbHNbdV0uY2xvbmUoKX12YXIgdz1uZXcgemE7CncuZmFjZXM9dGhpcy5mYWNlczt1PTA7Zm9yKGI9dGhpcy5tb3JwaFRhcmdldHMubGVuZ3RoO3U8Yjt1Kyspe2lmKCF0aGlzLm1vcnBoTm9ybWFsc1t1XSl7dGhpcy5tb3JwaE5vcm1hbHNbdV09e307dGhpcy5tb3JwaE5vcm1hbHNbdV0uZmFjZU5vcm1hbHM9W107dGhpcy5tb3JwaE5vcm1hbHNbdV0udmVydGV4Tm9ybWFscz1bXTttPXRoaXMubW9ycGhOb3JtYWxzW3VdLmZhY2VOb3JtYWxzO3ZhciBBPXRoaXMubW9ycGhOb3JtYWxzW3VdLnZlcnRleE5vcm1hbHM7aD0wO2ZvcihlPXRoaXMuZmFjZXMubGVuZ3RoO2g8ZTtoKyspe3ZhciBFPW5ldyBnO3ZhciBHPXthOm5ldyBnLGI6bmV3IGcsYzpuZXcgZ307bS5wdXNoKEUpO0EucHVzaChHKX19QT10aGlzLm1vcnBoTm9ybWFsc1t1XTt3LnZlcnRpY2VzPXRoaXMubW9ycGhUYXJnZXRzW3VdLnZlcnRpY2VzO3cuY29tcHV0ZUZhY2VOb3JtYWxzKCk7dy5jb21wdXRlVmVydGV4Tm9ybWFscygpO2g9MDtmb3IoZT10aGlzLmZhY2VzLmxlbmd0aDtoPAplO2grKyltPXRoaXMuZmFjZXNbaF0sRT1BLmZhY2VOb3JtYWxzW2hdLEc9QS52ZXJ0ZXhOb3JtYWxzW2hdLEUuY29weShtLm5vcm1hbCksRy5hLmNvcHkobS52ZXJ0ZXhOb3JtYWxzWzBdKSxHLmIuY29weShtLnZlcnRleE5vcm1hbHNbMV0pLEcuYy5jb3B5KG0udmVydGV4Tm9ybWFsc1syXSl9aD0wO2ZvcihlPXRoaXMuZmFjZXMubGVuZ3RoO2g8ZTtoKyspbT10aGlzLmZhY2VzW2hdLG0ubm9ybWFsPW0uX19vcmlnaW5hbEZhY2VOb3JtYWwsbS52ZXJ0ZXhOb3JtYWxzPW0uX19vcmlnaW5hbFZlcnRleE5vcm1hbHN9LGNvbXB1dGVCb3VuZGluZ0JveDpmdW5jdGlvbigpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgeCk7dGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tUG9pbnRzKHRoaXMudmVydGljZXMpfSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9Cm5ldyBGKTt0aGlzLmJvdW5kaW5nU3BoZXJlLnNldEZyb21Qb2ludHModGhpcy52ZXJ0aWNlcyl9LG1lcmdlOmZ1bmN0aW9uKGIsZSxoKXtpZihiJiZiLmlzR2VvbWV0cnkpe3ZhciBtLHU9dGhpcy52ZXJ0aWNlcy5sZW5ndGgsdz10aGlzLnZlcnRpY2VzLEE9Yi52ZXJ0aWNlcyxFPXRoaXMuZmFjZXMsRz1iLmZhY2VzLEo9dGhpcy5jb2xvcnMsUT1iLmNvbG9yczt2b2lkIDA9PT1oJiYoaD0wKTt2b2lkIDAhPT1lJiYobT0obmV3IGwpLmdldE5vcm1hbE1hdHJpeChlKSk7Zm9yKHZhciBTPTAsVD1BLmxlbmd0aDtTPFQ7UysrKXt2YXIgVz1BW1NdLmNsb25lKCk7dm9pZCAwIT09ZSYmVy5hcHBseU1hdHJpeDQoZSk7dy5wdXNoKFcpfVM9MDtmb3IoVD1RLmxlbmd0aDtTPFQ7UysrKUoucHVzaChRW1NdLmNsb25lKCkpO1M9MDtmb3IoVD1HLmxlbmd0aDtTPFQ7UysrKXtBPUdbU107dmFyIFg9QS52ZXJ0ZXhOb3JtYWxzO1E9QS52ZXJ0ZXhDb2xvcnM7Sj1uZXcgSyhBLmErdSxBLmIrdSxBLmMrCnUpO0oubm9ybWFsLmNvcHkoQS5ub3JtYWwpO3ZvaWQgMCE9PW0mJkoubm9ybWFsLmFwcGx5TWF0cml4MyhtKS5ub3JtYWxpemUoKTtlPTA7Zm9yKHc9WC5sZW5ndGg7ZTx3O2UrKylXPVhbZV0uY2xvbmUoKSx2b2lkIDAhPT1tJiZXLmFwcGx5TWF0cml4MyhtKS5ub3JtYWxpemUoKSxKLnZlcnRleE5vcm1hbHMucHVzaChXKTtKLmNvbG9yLmNvcHkoQS5jb2xvcik7ZT0wO2Zvcih3PVEubGVuZ3RoO2U8dztlKyspVz1RW2VdLEoudmVydGV4Q29sb3JzLnB1c2goVy5jbG9uZSgpKTtKLm1hdGVyaWFsSW5kZXg9QS5tYXRlcmlhbEluZGV4K2g7RS5wdXNoKEopfVM9MDtmb3IoVD1iLmZhY2VWZXJ0ZXhVdnMubGVuZ3RoO1M8VDtTKyspZm9yKGg9Yi5mYWNlVmVydGV4VXZzW1NdLHZvaWQgMD09PXRoaXMuZmFjZVZlcnRleFV2c1tTXSYmKHRoaXMuZmFjZVZlcnRleFV2c1tTXT1bXSksZT0wLHc9aC5sZW5ndGg7ZTx3O2UrKyl7bT1oW2VdO3U9W107RT0wO2ZvcihHPW0ubGVuZ3RoO0U8RztFKyspdS5wdXNoKG1bRV0uY2xvbmUoKSk7CnRoaXMuZmFjZVZlcnRleFV2c1tTXS5wdXNoKHUpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5HZW9tZXRyeS4iLGIpfSxtZXJnZU1lc2g6ZnVuY3Rpb24oYil7YiYmYi5pc01lc2g/KGIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSx0aGlzLm1lcmdlKGIuZ2VvbWV0cnksYi5tYXRyaXgpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeS5tZXJnZU1lc2goKTogbWVzaCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuTWVzaC4iLGIpfSxtZXJnZVZlcnRpY2VzOmZ1bmN0aW9uKCl7dmFyIGI9e30sZT1bXSxoPVtdLG09TWF0aC5wb3coMTAsNCksdTt2YXIgdz0wO2Zvcih1PXRoaXMudmVydGljZXMubGVuZ3RoO3c8dTt3Kyspe3ZhciBBPXRoaXMudmVydGljZXNbd107QT1NYXRoLnJvdW5kKEEueCptKSsiXyIrTWF0aC5yb3VuZChBLnkqbSkrIl8iK01hdGgucm91bmQoQS56KgptKTt2b2lkIDA9PT1iW0FdPyhiW0FdPXcsZS5wdXNoKHRoaXMudmVydGljZXNbd10pLGhbd109ZS5sZW5ndGgtMSk6aFt3XT1oW2JbQV1dfWI9W107dz0wO2Zvcih1PXRoaXMuZmFjZXMubGVuZ3RoO3c8dTt3KyspZm9yKG09dGhpcy5mYWNlc1t3XSxtLmE9aFttLmFdLG0uYj1oW20uYl0sbS5jPWhbbS5jXSxtPVttLmEsbS5iLG0uY10sQT0wOzM+QTtBKyspaWYobVtBXT09PW1bKEErMSklM10pe2IucHVzaCh3KTticmVha31mb3Iodz1iLmxlbmd0aC0xOzA8PXc7dy0tKWZvcihtPWJbd10sdGhpcy5mYWNlcy5zcGxpY2UobSwxKSxoPTAsdT10aGlzLmZhY2VWZXJ0ZXhVdnMubGVuZ3RoO2g8dTtoKyspdGhpcy5mYWNlVmVydGV4VXZzW2hdLnNwbGljZShtLDEpO3c9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtZS5sZW5ndGg7dGhpcy52ZXJ0aWNlcz1lO3JldHVybiB3fSxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKGIpe3RoaXMudmVydGljZXM9W107Zm9yKHZhciBlPTAsaD1iLmxlbmd0aDtlPGg7ZSsrKXt2YXIgbT0KYltlXTt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGcobS54LG0ueSxtLnp8fDApKX1yZXR1cm4gdGhpc30sc29ydEZhY2VzQnlNYXRlcmlhbEluZGV4OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuZmFjZXMsZT1iLmxlbmd0aCxoPTA7aDxlO2grKyliW2hdLl9pZD1oO2Iuc29ydChmdW5jdGlvbihHLEope3JldHVybiBHLm1hdGVyaWFsSW5kZXgtSi5tYXRlcmlhbEluZGV4fSk7dmFyIG09dGhpcy5mYWNlVmVydGV4VXZzWzBdLHU9dGhpcy5mYWNlVmVydGV4VXZzWzFdLHcsQTttJiZtLmxlbmd0aD09PWUmJih3PVtdKTt1JiZ1Lmxlbmd0aD09PWUmJihBPVtdKTtmb3IoaD0wO2g8ZTtoKyspe3ZhciBFPWJbaF0uX2lkO3cmJncucHVzaChtW0VdKTtBJiZBLnB1c2godVtFXSl9dyYmKHRoaXMuZmFjZVZlcnRleFV2c1swXT13KTtBJiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPUEpfSx0b0pTT046ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKHBhLHZhLENhKXtyZXR1cm4gQ2E/cGF8MTw8dmE6cGEmCn4oMTw8dmEpfWZ1bmN0aW9uIGUocGEpe3ZhciB2YT1wYS54LnRvU3RyaW5nKCkrcGEueS50b1N0cmluZygpK3BhLnoudG9TdHJpbmcoKTtpZih2b2lkIDAhPT1KW3ZhXSlyZXR1cm4gSlt2YV07Slt2YV09Ry5sZW5ndGgvMztHLnB1c2gocGEueCxwYS55LHBhLnopO3JldHVybiBKW3ZhXX1mdW5jdGlvbiBoKHBhKXt2YXIgdmE9cGEuci50b1N0cmluZygpK3BhLmcudG9TdHJpbmcoKStwYS5iLnRvU3RyaW5nKCk7aWYodm9pZCAwIT09U1t2YV0pcmV0dXJuIFNbdmFdO1NbdmFdPVEubGVuZ3RoO1EucHVzaChwYS5nZXRIZXgoKSk7cmV0dXJuIFNbdmFdfWZ1bmN0aW9uIG0ocGEpe3ZhciB2YT1wYS54LnRvU3RyaW5nKCkrcGEueS50b1N0cmluZygpO2lmKHZvaWQgMCE9PVdbdmFdKXJldHVybiBXW3ZhXTtXW3ZhXT1ULmxlbmd0aC8yO1QucHVzaChwYS54LHBhLnkpO3JldHVybiBXW3ZhXX12YXIgdT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ikdlb21ldHJ5IixnZW5lcmF0b3I6Ikdlb21ldHJ5LnRvSlNPTiJ9fTsKdS51dWlkPXRoaXMudXVpZDt1LnR5cGU9dGhpcy50eXBlOyIiIT09dGhpcy5uYW1lJiYodS5uYW1lPXRoaXMubmFtZSk7aWYodm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXt2YXIgdz10aGlzLnBhcmFtZXRlcnMsQTtmb3IoQSBpbiB3KXZvaWQgMCE9PXdbQV0mJih1W0FdPXdbQV0pO3JldHVybiB1fXc9W107Zm9yKEE9MDtBPHRoaXMudmVydGljZXMubGVuZ3RoO0ErKyl7dmFyIEU9dGhpcy52ZXJ0aWNlc1tBXTt3LnB1c2goRS54LEUueSxFLnopfUU9W107dmFyIEc9W10sSj17fSxRPVtdLFM9e30sVD1bXSxXPXt9O2ZvcihBPTA7QTx0aGlzLmZhY2VzLmxlbmd0aDtBKyspe3ZhciBYPXRoaXMuZmFjZXNbQV0saWE9dm9pZCAwIT09dGhpcy5mYWNlVmVydGV4VXZzWzBdW0FdLGhhPTA8WC5ub3JtYWwubGVuZ3RoKCksc2E9MDxYLnZlcnRleE5vcm1hbHMubGVuZ3RoLHFhPTEhPT1YLmNvbG9yLnJ8fDEhPT1YLmNvbG9yLmd8fDEhPT1YLmNvbG9yLmIscmE9MDxYLnZlcnRleENvbG9ycy5sZW5ndGgsCndhPTA7d2E9Yih3YSwwLDApO3dhPWIod2EsMSwhMCk7d2E9Yih3YSwyLCExKTt3YT1iKHdhLDMsaWEpO3dhPWIod2EsNCxoYSk7d2E9Yih3YSw1LHNhKTt3YT1iKHdhLDYscWEpO3dhPWIod2EsNyxyYSk7RS5wdXNoKHdhKTtFLnB1c2goWC5hLFguYixYLmMpO0UucHVzaChYLm1hdGVyaWFsSW5kZXgpO2lhJiYoaWE9dGhpcy5mYWNlVmVydGV4VXZzWzBdW0FdLEUucHVzaChtKGlhWzBdKSxtKGlhWzFdKSxtKGlhWzJdKSkpO2hhJiZFLnB1c2goZShYLm5vcm1hbCkpO3NhJiYoaGE9WC52ZXJ0ZXhOb3JtYWxzLEUucHVzaChlKGhhWzBdKSxlKGhhWzFdKSxlKGhhWzJdKSkpO3FhJiZFLnB1c2goaChYLmNvbG9yKSk7cmEmJihYPVgudmVydGV4Q29sb3JzLEUucHVzaChoKFhbMF0pLGgoWFsxXSksaChYWzJdKSkpfXUuZGF0YT17fTt1LmRhdGEudmVydGljZXM9dzt1LmRhdGEubm9ybWFscz1HOzA8US5sZW5ndGgmJih1LmRhdGEuY29sb3JzPVEpOzA8VC5sZW5ndGgmJih1LmRhdGEudXZzPQpbVF0pO3UuZGF0YS5mYWNlcz1FO3JldHVybiB1fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgemEpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dmFyIGUsaCxtO3RoaXMudmVydGljZXM9W107dGhpcy5jb2xvcnM9W107dGhpcy5mYWNlcz1bXTt0aGlzLmZhY2VWZXJ0ZXhVdnM9W1tdXTt0aGlzLm1vcnBoVGFyZ2V0cz1bXTt0aGlzLm1vcnBoTm9ybWFscz1bXTt0aGlzLnNraW5XZWlnaHRzPVtdO3RoaXMuc2tpbkluZGljZXM9W107dGhpcy5saW5lRGlzdGFuY2VzPVtdO3RoaXMuYm91bmRpbmdTcGhlcmU9dGhpcy5ib3VuZGluZ0JveD1udWxsO3RoaXMubmFtZT1iLm5hbWU7dmFyIHU9Yi52ZXJ0aWNlczt2YXIgdz0wO2ZvcihlPXUubGVuZ3RoO3c8ZTt3KyspdGhpcy52ZXJ0aWNlcy5wdXNoKHVbd10uY2xvbmUoKSk7dT1iLmNvbG9yczt3PTA7Zm9yKGU9dS5sZW5ndGg7dzxlO3crKyl0aGlzLmNvbG9ycy5wdXNoKHVbd10uY2xvbmUoKSk7dT1iLmZhY2VzO3c9MDtmb3IoZT0KdS5sZW5ndGg7dzxlO3crKyl0aGlzLmZhY2VzLnB1c2godVt3XS5jbG9uZSgpKTt3PTA7Zm9yKGU9Yi5mYWNlVmVydGV4VXZzLmxlbmd0aDt3PGU7dysrKXt2YXIgQT1iLmZhY2VWZXJ0ZXhVdnNbd107dm9pZCAwPT09dGhpcy5mYWNlVmVydGV4VXZzW3ddJiYodGhpcy5mYWNlVmVydGV4VXZzW3ddPVtdKTt1PTA7Zm9yKGg9QS5sZW5ndGg7dTxoO3UrKyl7dmFyIEU9QVt1XSxHPVtdO3ZhciBKPTA7Zm9yKG09RS5sZW5ndGg7SjxtO0orKylHLnB1c2goRVtKXS5jbG9uZSgpKTt0aGlzLmZhY2VWZXJ0ZXhVdnNbd10ucHVzaChHKX19Sj1iLm1vcnBoVGFyZ2V0czt3PTA7Zm9yKGU9Si5sZW5ndGg7dzxlO3crKyl7bT17fTttLm5hbWU9Slt3XS5uYW1lO2lmKHZvaWQgMCE9PUpbd10udmVydGljZXMpZm9yKG0udmVydGljZXM9W10sdT0wLGg9Slt3XS52ZXJ0aWNlcy5sZW5ndGg7dTxoO3UrKyltLnZlcnRpY2VzLnB1c2goSlt3XS52ZXJ0aWNlc1t1XS5jbG9uZSgpKTtpZih2b2lkIDAhPT1KW3ddLm5vcm1hbHMpZm9yKG0ubm9ybWFscz0KW10sdT0wLGg9Slt3XS5ub3JtYWxzLmxlbmd0aDt1PGg7dSsrKW0ubm9ybWFscy5wdXNoKEpbd10ubm9ybWFsc1t1XS5jbG9uZSgpKTt0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKG0pfUo9Yi5tb3JwaE5vcm1hbHM7dz0wO2ZvcihlPUoubGVuZ3RoO3c8ZTt3Kyspe209e307aWYodm9pZCAwIT09Slt3XS52ZXJ0ZXhOb3JtYWxzKWZvcihtLnZlcnRleE5vcm1hbHM9W10sdT0wLGg9Slt3XS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDt1PGg7dSsrKUE9Slt3XS52ZXJ0ZXhOb3JtYWxzW3VdLEU9e30sRS5hPUEuYS5jbG9uZSgpLEUuYj1BLmIuY2xvbmUoKSxFLmM9QS5jLmNsb25lKCksbS52ZXJ0ZXhOb3JtYWxzLnB1c2goRSk7aWYodm9pZCAwIT09Slt3XS5mYWNlTm9ybWFscylmb3IobS5mYWNlTm9ybWFscz1bXSx1PTAsaD1KW3ddLmZhY2VOb3JtYWxzLmxlbmd0aDt1PGg7dSsrKW0uZmFjZU5vcm1hbHMucHVzaChKW3ddLmZhY2VOb3JtYWxzW3VdLmNsb25lKCkpO3RoaXMubW9ycGhOb3JtYWxzLnB1c2gobSl9dT0KYi5za2luV2VpZ2h0czt3PTA7Zm9yKGU9dS5sZW5ndGg7dzxlO3crKyl0aGlzLnNraW5XZWlnaHRzLnB1c2godVt3XS5jbG9uZSgpKTt1PWIuc2tpbkluZGljZXM7dz0wO2ZvcihlPXUubGVuZ3RoO3c8ZTt3KyspdGhpcy5za2luSW5kaWNlcy5wdXNoKHVbd10uY2xvbmUoKSk7dT1iLmxpbmVEaXN0YW5jZXM7dz0wO2ZvcihlPXUubGVuZ3RoO3c8ZTt3KyspdGhpcy5saW5lRGlzdGFuY2VzLnB1c2godVt3XSk7dz1iLmJvdW5kaW5nQm94O251bGwhPT13JiYodGhpcy5ib3VuZGluZ0JveD13LmNsb25lKCkpO3c9Yi5ib3VuZGluZ1NwaGVyZTtudWxsIT09dyYmKHRoaXMuYm91bmRpbmdTcGhlcmU9dy5jbG9uZSgpKTt0aGlzLmVsZW1lbnRzTmVlZFVwZGF0ZT1iLmVsZW1lbnRzTmVlZFVwZGF0ZTt0aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZT1iLnZlcnRpY2VzTmVlZFVwZGF0ZTt0aGlzLnV2c05lZWRVcGRhdGU9Yi51dnNOZWVkVXBkYXRlO3RoaXMubm9ybWFsc05lZWRVcGRhdGU9Yi5ub3JtYWxzTmVlZFVwZGF0ZTsKdGhpcy5jb2xvcnNOZWVkVXBkYXRlPWIuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlPWIubGluZURpc3RhbmNlc05lZWRVcGRhdGU7dGhpcy5ncm91cHNOZWVkVXBkYXRlPWIuZ3JvdXBzTmVlZFVwZGF0ZTtyZXR1cm4gdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTtVYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO1VhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VYTtaYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO1phLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1aYTt2YXIgQnM9e2Nsb25lOnpiLG1lcmdlOklifTt1Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7dWIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXViO3ViLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ViLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe00ucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLApiKTt0aGlzLmZyYWdtZW50U2hhZGVyPWIuZnJhZ21lbnRTaGFkZXI7dGhpcy52ZXJ0ZXhTaGFkZXI9Yi52ZXJ0ZXhTaGFkZXI7dGhpcy51bmlmb3Jtcz16YihiLnVuaWZvcm1zKTt0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSxiLmRlZmluZXMpO3RoaXMud2lyZWZyYW1lPWIud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWIud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMubGlnaHRzPWIubGlnaHRzO3RoaXMuY2xpcHBpbmc9Yi5jbGlwcGluZzt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9Yi5tb3JwaE5vcm1hbHM7dGhpcy5leHRlbnNpb25zPWIuZXh0ZW5zaW9ucztyZXR1cm4gdGhpc307dWIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbihiKXt2YXIgZT1NLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGIpO2UudW5pZm9ybXM9e307Zm9yKHZhciBoIGluIHRoaXMudW5pZm9ybXMpe3ZhciBtPQp0aGlzLnVuaWZvcm1zW2hdLnZhbHVlO2UudW5pZm9ybXNbaF09bSYmbS5pc1RleHR1cmU/e3R5cGU6InQiLHZhbHVlOm0udG9KU09OKGIpLnV1aWR9Om0mJm0uaXNDb2xvcj97dHlwZToiYyIsdmFsdWU6bS5nZXRIZXgoKX06bSYmbS5pc1ZlY3RvcjI/e3R5cGU6InYyIix2YWx1ZTptLnRvQXJyYXkoKX06bSYmbS5pc1ZlY3RvcjM/e3R5cGU6InYzIix2YWx1ZTptLnRvQXJyYXkoKX06bSYmbS5pc1ZlY3RvcjQ/e3R5cGU6InY0Iix2YWx1ZTptLnRvQXJyYXkoKX06bSYmbS5pc01hdHJpeDM/e3R5cGU6Im0zIix2YWx1ZTptLnRvQXJyYXkoKX06bSYmbS5pc01hdHJpeDQ/e3R5cGU6Im00Iix2YWx1ZTptLnRvQXJyYXkoKX06e3ZhbHVlOm19fTA8T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGgmJihlLmRlZmluZXM9dGhpcy5kZWZpbmVzKTtlLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcjtlLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7Yj17fTtmb3IodmFyIHUgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09CnRoaXMuZXh0ZW5zaW9uc1t1XSYmKGJbdV09ITApOzA8T2JqZWN0LmtleXMoYikubGVuZ3RoJiYoZS5leHRlbnNpb25zPWIpO3JldHVybiBlfTtGYi5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHkucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RmIsaXNDYW1lcmE6ITAsY29weTpmdW5jdGlvbihiLGUpe3kucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIsZSk7dGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weShiLm1hdHJpeFdvcmxkSW52ZXJzZSk7dGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkoYi5wcm9qZWN0aW9uTWF0cml4KTt0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkoYi5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSk7cmV0dXJuIHRoaXN9LGdldFdvcmxkRGlyZWN0aW9uOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihjb25zb2xlLndhcm4oIlRIUkVFLkNhbWVyYTogLmdldFdvcmxkRGlyZWN0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLApiPW5ldyBnKTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTt2YXIgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiBiLnNldCgtZVs4XSwtZVs5XSwtZVsxMF0pLm5vcm1hbGl6ZSgpfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbihiKXt5LnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsYik7dGhpcy5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZSh0aGlzLm1hdHJpeFdvcmxkKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7QWIucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShGYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpBYixpc1BlcnNwZWN0aXZlQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYixlKXtGYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYixlKTt0aGlzLmZvdj1iLmZvdjt0aGlzLnpvb209Yi56b29tO3RoaXMubmVhcj1iLm5lYXI7dGhpcy5mYXI9CmIuZmFyO3RoaXMuZm9jdXM9Yi5mb2N1czt0aGlzLmFzcGVjdD1iLmFzcGVjdDt0aGlzLnZpZXc9bnVsbD09PWIudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sYi52aWV3KTt0aGlzLmZpbG1HYXVnZT1iLmZpbG1HYXVnZTt0aGlzLmZpbG1PZmZzZXQ9Yi5maWxtT2Zmc2V0O3JldHVybiB0aGlzfSxzZXRGb2NhbExlbmd0aDpmdW5jdGlvbihiKXt0aGlzLmZvdj0yKmxiLlJBRDJERUcqTWF0aC5hdGFuKC41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL2IpO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSxnZXRGb2NhbExlbmd0aDpmdW5jdGlvbigpe3JldHVybi41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL01hdGgudGFuKC41KmxiLkRFRzJSQUQqdGhpcy5mb3YpfSxnZXRFZmZlY3RpdmVGT1Y6ZnVuY3Rpb24oKXtyZXR1cm4gMipsYi5SQUQyREVHKk1hdGguYXRhbihNYXRoLnRhbiguNSpsYi5ERUcyUkFEKnRoaXMuZm92KS90aGlzLnpvb20pfSxnZXRGaWxtV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqCk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfSxnZXRGaWxtSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlL01hdGgubWF4KHRoaXMuYXNwZWN0LDEpfSxzZXRWaWV3T2Zmc2V0OmZ1bmN0aW9uKGIsZSxoLG0sdSx3KXt0aGlzLmFzcGVjdD1iL2U7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSk7dGhpcy52aWV3LmVuYWJsZWQ9ITA7dGhpcy52aWV3LmZ1bGxXaWR0aD1iO3RoaXMudmlldy5mdWxsSGVpZ2h0PWU7dGhpcy52aWV3Lm9mZnNldFg9aDt0aGlzLnZpZXcub2Zmc2V0WT1tO3RoaXMudmlldy53aWR0aD11O3RoaXMudmlldy5oZWlnaHQ9dzt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sY2xlYXJWaWV3T2Zmc2V0OmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKTt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sCnVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5lYXIsZT1iKk1hdGgudGFuKC41KmxiLkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSxoPTIqZSxtPXRoaXMuYXNwZWN0KmgsdT0tLjUqbSx3PXRoaXMudmlldztpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7dmFyIEE9dy5mdWxsV2lkdGgsRT13LmZ1bGxIZWlnaHQ7dSs9dy5vZmZzZXRYKm0vQTtlLT13Lm9mZnNldFkqaC9FO20qPXcud2lkdGgvQTtoKj13LmhlaWdodC9FfXc9dGhpcy5maWxtT2Zmc2V0OzAhPT13JiYodSs9Yip3L3RoaXMuZ2V0RmlsbVdpZHRoKCkpO3RoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUodSx1K20sZSxlLWgsYix0aGlzLmZhcik7dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5nZXRJbnZlcnNlKHRoaXMucHJvamVjdGlvbk1hdHJpeCl9LHRvSlNPTjpmdW5jdGlvbihiKXtiPXkucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsCmIpO2Iub2JqZWN0LmZvdj10aGlzLmZvdjtiLm9iamVjdC56b29tPXRoaXMuem9vbTtiLm9iamVjdC5uZWFyPXRoaXMubmVhcjtiLm9iamVjdC5mYXI9dGhpcy5mYXI7Yi5vYmplY3QuZm9jdXM9dGhpcy5mb2N1cztiLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3Q7bnVsbCE9PXRoaXMudmlldyYmKGIub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKTtiLm9iamVjdC5maWxtR2F1Z2U9dGhpcy5maWxtR2F1Z2U7Yi5vYmplY3QuZmlsbU9mZnNldD10aGlzLmZpbG1PZmZzZXQ7cmV0dXJuIGJ9fSk7UGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpO1BiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QYjtiYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShwLnByb3RvdHlwZSk7YmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJjO2JjLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT0hMDtiYy5wcm90b3R5cGUuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmU9CmZ1bmN0aW9uKGIsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlO3RoaXMudGV4dHVyZS5mb3JtYXQ9ZS5mb3JtYXQ7dGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2Rpbmc7dmFyIGg9bmV3IHosbT1uZXcgdWIoe3R5cGU6IkN1YmVtYXBGcm9tRXF1aXJlY3QiLHVuaWZvcm1zOnpiKHt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSksdmVydGV4U2hhZGVyOiJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xudmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7XG59XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiBceDNkIHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcbn0iLApmcmFnbWVudFNoYWRlcjoidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTRcbnZvaWQgbWFpbigpIHtcblx0dmVjMyBkaXJlY3Rpb24gXHgzZCBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWO1xuXHRzYW1wbGVVVi55IFx4M2QgYXNpbiggY2xhbXAoIGRpcmVjdGlvbi55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XG5cdHNhbXBsZVVWLnggXHgzZCBhdGFuKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcbn0iLHNpZGU6MSxibGVuZGluZzowfSk7bS51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9ZTsKZT1uZXcgeWEobmV3IFphKDUsNSw1KSxtKTtoLmFkZChlKTttPW5ldyBQYigxLDEwLDEpO20ucmVuZGVyVGFyZ2V0PXRoaXM7bS5yZW5kZXJUYXJnZXQudGV4dHVyZS5uYW1lPSJDdWJlQ2FtZXJhVGV4dHVyZSI7bS51cGRhdGUoYixoKTtlLmdlb21ldHJ5LmRpc3Bvc2UoKTtlLm1hdGVyaWFsLmRpc3Bvc2UoKTtyZXR1cm4gdGhpc307R2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpO0diLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HYjtHYi5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgbWw9bmV3IGcsQ3M9bmV3IGcsRHM9bmV3IGw7T2JqZWN0LmFzc2lnbihSYi5wcm90b3R5cGUse2lzUGxhbmU6ITAsc2V0OmZ1bmN0aW9uKGIsZSl7dGhpcy5ub3JtYWwuY29weShiKTt0aGlzLmNvbnN0YW50PWU7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudHM6ZnVuY3Rpb24oYixlLGgsbSl7dGhpcy5ub3JtYWwuc2V0KGIsZSxoKTt0aGlzLmNvbnN0YW50PW07cmV0dXJuIHRoaXN9LApzZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludDpmdW5jdGlvbihiLGUpe3RoaXMubm9ybWFsLmNvcHkoYik7dGhpcy5jb25zdGFudD0tZS5kb3QodGhpcy5ub3JtYWwpO3JldHVybiB0aGlzfSxzZXRGcm9tQ29wbGFuYXJQb2ludHM6ZnVuY3Rpb24oYixlLGgpe2U9bWwuc3ViVmVjdG9ycyhoLGUpLmNyb3NzKENzLnN1YlZlY3RvcnMoYixlKSkubm9ybWFsaXplKCk7dGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChlLGIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm5vcm1hbC5jb3B5KGIubm9ybWFsKTt0aGlzLmNvbnN0YW50PWIuY29uc3RhbnQ7cmV0dXJuIHRoaXN9LG5vcm1hbGl6ZTpmdW5jdGlvbigpe3ZhciBiPTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7dGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIoYik7dGhpcy5jb25zdGFudCo9YjtyZXR1cm4gdGhpc30sCm5lZ2F0ZTpmdW5jdGlvbigpe3RoaXMuY29uc3RhbnQqPS0xO3RoaXMubm9ybWFsLm5lZ2F0ZSgpO3JldHVybiB0aGlzfSxkaXN0YW5jZVRvUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubm9ybWFsLmRvdChiKSt0aGlzLmNvbnN0YW50fSxkaXN0YW5jZVRvU3BoZXJlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludChiLmNlbnRlciktYi5yYWRpdXN9LHByb2plY3RQb2ludDpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAucHJvamVjdFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGcpO3JldHVybiBlLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludChiKSkuYWRkKGIpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pbnRlcnNlY3RMaW5lKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLAplPW5ldyBnKTt2YXIgaD1iLmRlbHRhKG1sKSxtPXRoaXMubm9ybWFsLmRvdChoKTtpZigwPT09bSl7aWYoMD09PXRoaXMuZGlzdGFuY2VUb1BvaW50KGIuc3RhcnQpKXJldHVybiBlLmNvcHkoYi5zdGFydCl9ZWxzZSBpZihtPS0oYi5zdGFydC5kb3QodGhpcy5ub3JtYWwpK3RoaXMuY29uc3RhbnQpL20sISgwPm18fDE8bSkpcmV0dXJuIGUuY29weShoKS5tdWx0aXBseVNjYWxhcihtKS5hZGQoYi5zdGFydCl9LGludGVyc2VjdHNMaW5lOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KGIuc3RhcnQpO2I9dGhpcy5kaXN0YW5jZVRvUG9pbnQoYi5lbmQpO3JldHVybiAwPmUmJjA8Ynx8MD5iJiYwPGV9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGIpe3JldHVybiBiLmludGVyc2VjdHNQbGFuZSh0aGlzKX0sY29wbGFuYXJQb2ludDpmdW5jdGlvbihiKXt2b2lkIDA9PT0KYiYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5jb3BsYW5hclBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3JldHVybiBiLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGIsZSl7ZT1lfHxEcy5nZXROb3JtYWxNYXRyaXgoYik7Yj10aGlzLmNvcGxhbmFyUG9pbnQobWwpLmFwcGx5TWF0cml4NChiKTtlPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhlKS5ub3JtYWxpemUoKTt0aGlzLmNvbnN0YW50PS1iLmRvdChlKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMuY29uc3RhbnQtPWIuZG90KHRoaXMubm9ybWFsKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZiLmNvbnN0YW50PT09dGhpcy5jb25zdGFudH19KTt2YXIgd2c9bmV3IEYsbWo9bmV3IGc7T2JqZWN0LmFzc2lnbihFYy5wcm90b3R5cGUsCntzZXQ6ZnVuY3Rpb24oYixlLGgsbSx1LHcpe3ZhciBBPXRoaXMucGxhbmVzO0FbMF0uY29weShiKTtBWzFdLmNvcHkoZSk7QVsyXS5jb3B5KGgpO0FbM10uY29weShtKTtBWzRdLmNvcHkodSk7QVs1XS5jb3B5KHcpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5wbGFuZXMsaD0wOzY+aDtoKyspZVtoXS5jb3B5KGIucGxhbmVzW2hdKTtyZXR1cm4gdGhpc30sc2V0RnJvbU1hdHJpeDpmdW5jdGlvbihiKXt2YXIgZT10aGlzLnBsYW5lcyxoPWIuZWxlbWVudHM7Yj1oWzBdO3ZhciBtPWhbMV0sdT1oWzJdLHc9aFszXSxBPWhbNF0sRT1oWzVdLEc9aFs2XSxKPWhbN10sUT1oWzhdLFM9aFs5XSxUPWhbMTBdLFc9aFsxMV0sWD1oWzEyXSxpYT1oWzEzXSxoYT1oWzE0XTtoPWhbMTVdO2VbMF0uc2V0Q29tcG9uZW50cyh3LWIsSi1BLFctUSxoLVgpLm5vcm1hbGl6ZSgpOwplWzFdLnNldENvbXBvbmVudHModytiLEorQSxXK1EsaCtYKS5ub3JtYWxpemUoKTtlWzJdLnNldENvbXBvbmVudHModyttLEorRSxXK1MsaCtpYSkubm9ybWFsaXplKCk7ZVszXS5zZXRDb21wb25lbnRzKHctbSxKLUUsVy1TLGgtaWEpLm5vcm1hbGl6ZSgpO2VbNF0uc2V0Q29tcG9uZW50cyh3LXUsSi1HLFctVCxoLWhhKS5ub3JtYWxpemUoKTtlWzVdLnNldENvbXBvbmVudHModyt1LEorRyxXK1QsaCtoYSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXN9LGludGVyc2VjdHNPYmplY3Q6ZnVuY3Rpb24oYil7dmFyIGU9Yi5nZW9tZXRyeTtudWxsPT09ZS5ib3VuZGluZ1NwaGVyZSYmZS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt3Zy5jb3B5KGUuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHdnKX0saW50ZXJzZWN0c1Nwcml0ZTpmdW5jdGlvbihiKXt3Zy5jZW50ZXIuc2V0KDAsMCwwKTt3Zy5yYWRpdXM9Ci43MDcxMDY3ODExODY1NDc2O3dnLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKHdnKX0saW50ZXJzZWN0c1NwaGVyZTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLnBsYW5lcyxoPWIuY2VudGVyO2I9LWIucmFkaXVzO2Zvcih2YXIgbT0wOzY+bTttKyspaWYoZVttXS5kaXN0YW5jZVRvUG9pbnQoaCk8YilyZXR1cm4hMTtyZXR1cm4hMH0saW50ZXJzZWN0c0JveDpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5wbGFuZXMsaD0wOzY+aDtoKyspe3ZhciBtPWVbaF07bWoueD0wPG0ubm9ybWFsLng/Yi5tYXgueDpiLm1pbi54O21qLnk9MDxtLm5vcm1hbC55P2IubWF4Lnk6Yi5taW4ueTttai56PTA8bS5ub3JtYWwuej9iLm1heC56OmIubWluLno7aWYoMD5tLmRpc3RhbmNlVG9Qb2ludChtaikpcmV0dXJuITF9cmV0dXJuITB9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPXRoaXMucGxhbmVzLGg9MDs2Pmg7aCsrKWlmKDA+CmVbaF0uZGlzdGFuY2VUb1BvaW50KGIpKXJldHVybiExO3JldHVybiEwfX0pO3ZhciB3Yj17YWxwaGFtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0ZGlmZnVzZUNvbG9yLmEgKlx4M2QgdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZztcbiNlbmRpZiIsYWxwaGFtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcbiNlbmRpZiIsYWxwaGF0ZXN0X2ZyYWdtZW50OiIjaWZkZWYgQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgXHgzYyBBTFBIQVRFU1QgKSBkaXNjYXJkO1xuI2VuZGlmIixhb21hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHRmbG9hdCBhbWJpZW50T2NjbHVzaW9uIFx4M2QgKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqXHgzZCBhbWJpZW50T2NjbHVzaW9uO1xuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIFx4MjZceDI2IGRlZmluZWQoIFNUQU5EQVJEIClcblx0XHRmbG9hdCBkb3ROViBceDNkIHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciAqXHgzZCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGRvdE5WLCBhbWJpZW50T2NjbHVzaW9uLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsCmFvbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQU9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XG5cdHVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGJlZ2luX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZCBceDNkIHZlYzMoIHBvc2l0aW9uICk7IixiZWdpbm5vcm1hbF92ZXJ0ZXg6InZlYzMgb2JqZWN0Tm9ybWFsIFx4M2QgdmVjMyggbm9ybWFsICk7XG4jaWZkZWYgVVNFX1RBTkdFTlRcblx0dmVjMyBvYmplY3RUYW5nZW50IFx4M2QgdmVjMyggdGFuZ2VudC54eXogKTtcbiNlbmRpZiIsYnNkZnM6InZlYzIgaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCB2ZWM0IGMwIFx4M2QgdmVjNCggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcblx0Y29uc3QgdmVjNCBjMSBceDNkIHZlYzQoIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7XG5cdHZlYzQgciBceDNkIHJvdWdobmVzcyAqIGMwICsgYzE7XG5cdGZsb2F0IGEwMDQgXHgzZCBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55O1xuXHRyZXR1cm4gdmVjMiggLTEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xufVxuZmxvYXQgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7XG4jaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKVxuXHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgXHgzZCAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdGlmKCBjdXRvZmZEaXN0YW5jZSBceDNlIDAuMCApIHtcblx0XHRkaXN0YW5jZUZhbGxvZmYgKlx4M2QgcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTtcblx0fVxuXHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuI2Vsc2Vcblx0aWYoIGN1dG9mZkRpc3RhbmNlIFx4M2UgMC4wIFx4MjZceDI2IGRlY2F5RXhwb25lbnQgXHgzZSAwLjAgKSB7XG5cdFx0cmV0dXJuIHBvdyggc2F0dXJhdGUoIC1saWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApO1xuXHR9XG5cdHJldHVybiAxLjA7XG4jZW5kaWZcbn1cbnZlYzMgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IGRvdExIICkge1xuXHRmbG9hdCBmcmVzbmVsIFx4M2QgZXhwMiggKCAtNS41NTQ3MyAqIGRvdExIIC0gNi45ODMxNiApICogZG90TEggKTtcblx0cmV0dXJuICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogZnJlc25lbCArIHNwZWN1bGFyQ29sb3I7XG59XG52ZWMzIEZfU2NobGlja19Sb3VnaG5lc3NEZXBlbmRlbnQoIGNvbnN0IGluIHZlYzMgRjAsIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGZyZXNuZWwgXHgzZCBleHAyKCAoIC01LjU1NDczICogZG90TlYgLSA2Ljk4MzE2ICkgKiBkb3ROViApO1xuXHR2ZWMzIEZyIFx4M2QgbWF4KCB2ZWMzKCAxLjAgLSByb3VnaG5lc3MgKSwgRjAgKSAtIEYwO1xuXHRyZXR1cm4gRnIgKiBmcmVzbmVsICsgRjA7XG59XG5mbG9hdCBHX0dHWF9TbWl0aCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHtcblx0ZmxvYXQgYTIgXHgzZCBwb3cyKCBhbHBoYSApO1xuXHRmbG9hdCBnbCBceDNkIGRvdE5MICsgc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdGZsb2F0IGd2IFx4M2QgZG90TlYgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0cmV0dXJuIDEuMCAvICggZ2wgKiBndiApO1xufVxuZmxvYXQgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiBceDNkIHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGd2IFx4M2QgZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcblx0ZmxvYXQgZ2wgXHgzZCBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xuXHRyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7XG59XG5mbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhMiBceDNkIHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGRlbm9tIFx4M2QgcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfR0dYKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGluY2lkZW50TGlnaHQsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSBceDNkIHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgXHgzZCBub3JtYWxpemUoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCBceDNkIHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKSApO1xuXHRmbG9hdCBkb3ROViBceDNkIHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IIFx4M2Qgc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggXHgzZCBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiBceDNkIEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyBceDNkIEdfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApO1xuXHRmbG9hdCBEIFx4M2QgRF9HR1goIGFscGhhLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRjb25zdCBmbG9hdCBMVVRfU0laRSAgXHgzZCA2NC4wO1xuXHRjb25zdCBmbG9hdCBMVVRfU0NBTEUgXHgzZCAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTtcblx0Y29uc3QgZmxvYXQgTFVUX0JJQVMgIFx4M2QgMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgXHgzZCB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgXHgzZCB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCBceDNkIGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCBceDNkIGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgXHgzZCBhYnMoIHggKTtcblx0ZmxvYXQgYSBceDNkIDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiBceDNkIDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiBceDNkIGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSBceDNkICggeCBceDNlIDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxIFx4M2QgcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyIFx4M2QgcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsIFx4M2QgY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIFx4M2MgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgXHgzZCBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgXHgzZCAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCBceDNkIG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSBceDNkIG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSBceDNkIG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSBceDNkIG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSBceDNkIG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSBceDNkIG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gXHgzZCBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdIFx4M2Qgbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSBceDNkIG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yIFx4M2QgdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgK1x4M2QgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArXHgzZCBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICtceDNkIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgK1x4M2QgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0IFx4M2QgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1hfRW52aXJvbm1lbnQoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBkb3ROViBceDNkIHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdHZlYzIgYnJkZiBceDNkIGludGVncmF0ZVNwZWN1bGFyQlJERiggZG90TlYsIHJvdWdobmVzcyApO1xuXHRyZXR1cm4gc3BlY3VsYXJDb2xvciAqIGJyZGYueCArIGJyZGYueTtcbn1cbnZvaWQgQlJERl9TcGVjdWxhcl9NdWx0aXNjYXR0ZXJpbmdfRW52aXJvbm1lbnQoIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBpbm91dCB2ZWMzIHNpbmdsZVNjYXR0ZXIsIGlub3V0IHZlYzMgbXVsdGlTY2F0dGVyICkge1xuXHRmbG9hdCBkb3ROViBceDNkIHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdHZlYzMgRiBceDNkIEZfU2NobGlja19Sb3VnaG5lc3NEZXBlbmRlbnQoIHNwZWN1bGFyQ29sb3IsIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0dmVjMiBicmRmIFx4M2QgaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHZlYzMgRnNzRXNzIFx4M2QgRiAqIGJyZGYueCArIGJyZGYueTtcblx0ZmxvYXQgRXNzIFx4M2QgYnJkZi54ICsgYnJkZi55O1xuXHRmbG9hdCBFbXMgXHgzZCAxLjAgLSBFc3M7XG5cdHZlYzMgRmF2ZyBceDNkIHNwZWN1bGFyQ29sb3IgKyAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIDAuMDQ3NjE5O1x0dmVjMyBGbXMgXHgzZCBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7XG5cdHNpbmdsZVNjYXR0ZXIgK1x4M2QgRnNzRXNzO1xuXHRtdWx0aVNjYXR0ZXIgK1x4M2QgRm1zICogRW1zO1xufVxuZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHtcblx0cmV0dXJuIDAuMjU7XG59XG5mbG9hdCBEX0JsaW5uUGhvbmcoIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdHJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgaW5jaWRlbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MgKSB7XG5cdHZlYzMgaGFsZkRpciBceDNkIG5vcm1hbGl6ZSggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKyBnZW9tZXRyeS52aWV3RGlyICk7XG5cdGZsb2F0IGRvdE5IIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90TEggXHgzZCBzYXR1cmF0ZSggZG90KCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiwgaGFsZkRpciApICk7XG5cdHZlYzMgRiBceDNkIEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgZG90TEggKTtcblx0ZmxvYXQgRyBceDNkIEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCBceDNkIERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbmZsb2F0IEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggY29uc3QgaW4gZmxvYXQgZ2d4Um91Z2huZXNzICkge1xuXHRyZXR1cm4gKCAyLjAgLyBwb3cyKCBnZ3hSb3VnaG5lc3MgKyAwLjAwMDEgKSAtIDIuMCApO1xufVxuZmxvYXQgQmxpbm5FeHBvbmVudFRvR0dYUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCBibGlubkV4cG9uZW50ICkge1xuXHRyZXR1cm4gc3FydCggMi4wIC8gKCBibGlubkV4cG9uZW50ICsgMi4wICkgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKGZsb2F0IHJvdWdobmVzcywgZmxvYXQgTm9IKSB7XG5cdGZsb2F0IGludkFscGhhICBceDNkIDEuMCAvIHJvdWdobmVzcztcblx0ZmxvYXQgY29zMmggXHgzZCBOb0ggKiBOb0g7XG5cdGZsb2F0IHNpbjJoIFx4M2QgbWF4KDEuMCAtIGNvczJoLCAwLjAwNzgxMjUpO1x0cmV0dXJuICgyLjAgKyBpbnZBbHBoYSkgKiBwb3coc2luMmgsIGludkFscGhhICogMC41KSAvICgyLjAgKiBQSSk7XG59XG5mbG9hdCBWX05ldWJlbHQoZmxvYXQgTm9WLCBmbG9hdCBOb0wpIHtcblx0cmV0dXJuIHNhdHVyYXRlKDEuMCAvICg0LjAgKiAoTm9MICsgTm9WIC0gTm9MICogTm9WKSkpO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX1NoZWVuKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgTCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgdmVjMyBzcGVjdWxhckNvbG9yICkge1xuXHR2ZWMzIE4gXHgzZCBnZW9tZXRyeS5ub3JtYWw7XG5cdHZlYzMgViBceDNkIGdlb21ldHJ5LnZpZXdEaXI7XG5cdHZlYzMgSCBceDNkIG5vcm1hbGl6ZSggViArIEwgKTtcblx0ZmxvYXQgZG90TkggXHgzZCBzYXR1cmF0ZSggZG90KCBOLCBIICkgKTtcblx0cmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBEX0NoYXJsaWUoIHJvdWdobmVzcywgZG90TkggKSAqIFZfTmV1YmVsdCggZG90KE4sIFYpLCBkb3QoTiwgTCkgKTtcbn1cbiNlbmRpZiIsCmJ1bXBtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9CVU1QTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7XG5cdHVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlO1xuXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcblx0XHR2ZWMyIGRTVGR4IFx4M2QgZEZkeCggdlV2ICk7XG5cdFx0dmVjMiBkU1RkeSBceDNkIGRGZHkoIHZVdiApO1xuXHRcdGZsb2F0IEhsbCBceDNkIGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcblx0XHRmbG9hdCBkQnggXHgzZCBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcblx0XHRmbG9hdCBkQnkgXHgzZCBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcblx0XHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcblx0fVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5ICkge1xuXHRcdHZlYzMgdlNpZ21hWCBceDNkIHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZTaWdtYVkgXHgzZCB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2TiBceDNkIHN1cmZfbm9ybTtcblx0XHR2ZWMzIFIxIFx4M2QgY3Jvc3MoIHZTaWdtYVksIHZOICk7XG5cdFx0dmVjMyBSMiBceDNkIGNyb3NzKCB2TiwgdlNpZ21hWCApO1xuXHRcdGZsb2F0IGZEZXQgXHgzZCBkb3QoIHZTaWdtYVgsIFIxICk7XG5cdFx0ZkRldCAqXHgzZCAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0dmVjMyB2R3JhZCBceDNkIHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLApjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTIFx4M2UgMFxuXHR2ZWM0IHBsYW5lO1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRwbGFuZSBceDNkIGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApIFx4M2UgcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyBceDNjIE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgXHgzZCB0cnVlO1xuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0XHRmb3IgKCBpbnQgaSBceDNkIFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSBceDNjIE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0XHRwbGFuZSBceDNkIGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0XHRjbGlwcGVkIFx4M2QgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApIFx4M2UgcGxhbmUudyApIFx4MjZceDI2IGNsaXBwZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xpcHBlZCApIGRpc2NhcmQ7XG5cdCNlbmRpZlxuI2VuZGlmIiwKY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTIFx4M2UgMFxuXHQjaWYgISBkZWZpbmVkKCBTVEFOREFSRCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdFx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5cdCNlbmRpZlxuXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyBceDNlIDAgXHgyNlx4MjYgISBkZWZpbmVkKCBTVEFOREFSRCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyBceDNlIDAgXHgyNlx4MjYgISBkZWZpbmVkKCBTVEFOREFSRCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdHZWaWV3UG9zaXRpb24gXHgzZCAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmIiwKY29sb3JfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0ZGlmZnVzZUNvbG9yLnJnYiAqXHgzZCB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogXHgzZCBjb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU5XG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE4XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ5XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIExPRzIgMS40NDI2OTVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiBceDNkIHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSBceDNkIDEyLjk4OTgsIGIgXHgzZCA3OC4yMzMsIGMgXHgzZCA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCBceDNkIGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuIFx4M2QgbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbiNpZmRlZiBISUdIX1BSRUNJU0lPTlxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfVxuI2Vsc2Vcblx0ZmxvYXQgbWF4MyggdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9XG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHtcblx0XHRmbG9hdCBtYXhDb21wb25lbnQgXHgzZCBtYXgzKCBhYnMoIHYgKSApO1xuXHRcdHJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDtcblx0fVxuI2VuZGlmXG5zdHJ1Y3QgSW5jaWRlbnRMaWdodCB7XG5cdHZlYzMgY29sb3I7XG5cdHZlYzMgZGlyZWN0aW9uO1xuXHRib29sIHZpc2libGU7XG59O1xuc3RydWN0IFJlZmxlY3RlZExpZ2h0IHtcblx0dmVjMyBkaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGRpcmVjdFNwZWN1bGFyO1xuXHR2ZWMzIGluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBpbmRpcmVjdFNwZWN1bGFyO1xufTtcbnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHtcblx0dmVjMyBwb3NpdGlvbjtcblx0dmVjMyBub3JtYWw7XG5cdHZlYzMgdmlld0RpcjtcbiNpZmRlZiBDTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbn07XG52ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcbn1cbnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTtcbn1cbnZlYzMgcHJvamVjdE9uUGxhbmUoaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdGZsb2F0IGRpc3RhbmNlIFx4M2QgZG90KCBwbGFuZU5vcm1hbCwgcG9pbnQgLSBwb2ludE9uUGxhbmUgKTtcblx0cmV0dXJuIC0gZGlzdGFuY2UgKiBwbGFuZU5vcm1hbCArIHBvaW50O1xufVxuZmxvYXQgc2lkZU9mUGxhbmUoIGluIHZlYzMgcG9pbnQsIGluIHZlYzMgcG9pbnRPblBsYW5lLCBpbiB2ZWMzIHBsYW5lTm9ybWFsICkge1xuXHRyZXR1cm4gc2lnbiggZG90KCBwb2ludCAtIHBvaW50T25QbGFuZSwgcGxhbmVOb3JtYWwgKSApO1xufVxudmVjMyBsaW5lUGxhbmVJbnRlcnNlY3QoIGluIHZlYzMgcG9pbnRPbkxpbmUsIGluIHZlYzMgbGluZURpcmVjdGlvbiwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBsaW5lRGlyZWN0aW9uICogKCBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludE9uUGxhbmUgLSBwb2ludE9uTGluZSApIC8gZG90KCBwbGFuZU5vcm1hbCwgbGluZURpcmVjdGlvbiApICkgKyBwb2ludE9uTGluZTtcbn1cbm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkge1xuXHRtYXQzIHRtcDtcblx0dG1wWyAwIF0gXHgzZCB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XG5cdHRtcFsgMSBdIFx4M2QgdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApO1xuXHR0bXBbIDIgXSBceDNkIHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcblx0cmV0dXJuIHRtcDtcbn1cbmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7XG5cdHZlYzMgd2VpZ2h0cyBceDNkIHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTtcblx0cmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7XG59IiwKY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuI2RlZmluZSBjdWJlVVZfdGV4dHVyZVNpemUgKDEwMjQuMClcbmludCBnZXRGYWNlRnJvbURpcmVjdGlvbih2ZWMzIGRpcmVjdGlvbikge1xuXHR2ZWMzIGFic0RpcmVjdGlvbiBceDNkIGFicyhkaXJlY3Rpb24pO1xuXHRpbnQgZmFjZSBceDNkIC0xO1xuXHRpZiggYWJzRGlyZWN0aW9uLnggXHgzZSBhYnNEaXJlY3Rpb24ueiApIHtcblx0XHRpZihhYnNEaXJlY3Rpb24ueCBceDNlIGFic0RpcmVjdGlvbi55IClcblx0XHRcdGZhY2UgXHgzZCBkaXJlY3Rpb24ueCBceDNlIDAuMCA/IDAgOiAzO1xuXHRcdGVsc2Vcblx0XHRcdGZhY2UgXHgzZCBkaXJlY3Rpb24ueSBceDNlIDAuMCA/IDEgOiA0O1xuXHR9XG5cdGVsc2Uge1xuXHRcdGlmKGFic0RpcmVjdGlvbi56IFx4M2UgYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0ZmFjZSBceDNkIGRpcmVjdGlvbi56IFx4M2UgMC4wID8gMiA6IDU7XG5cdFx0ZWxzZVxuXHRcdFx0ZmFjZSBceDNkIGRpcmVjdGlvbi55IFx4M2UgMC4wID8gMSA6IDQ7XG5cdH1cblx0cmV0dXJuIGZhY2U7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMSAgKGxvZzIoY3ViZVVWX3RleHR1cmVTaXplKjAuMjUpIC0gMS4wKVxuI2RlZmluZSBjdWJlVVZfcmFuZ2VDbGFtcCAoZXhwMigoNi4wIC0gMS4wKSAqIDIuMCkpXG52ZWMyIE1pcExldmVsSW5mbyggdmVjMyB2ZWMsIGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IHNjYWxlIFx4M2QgZXhwMihjdWJlVVZfbWF4TG9kczEgLSByb3VnaG5lc3NMZXZlbCk7XG5cdGZsb2F0IGR4Um91Z2huZXNzIFx4M2QgZEZkeChyb3VnaG5lc3MpO1xuXHRmbG9hdCBkeVJvdWdobmVzcyBceDNkIGRGZHkocm91Z2huZXNzKTtcblx0dmVjMyBkeCBceDNkIGRGZHgoIHZlYyAqIHNjYWxlICogZHhSb3VnaG5lc3MgKTtcblx0dmVjMyBkeSBceDNkIGRGZHkoIHZlYyAqIHNjYWxlICogZHlSb3VnaG5lc3MgKTtcblx0ZmxvYXQgZCBceDNkIG1heCggZG90KCBkeCwgZHggKSwgZG90KCBkeSwgZHkgKSApO1xuXHRkIFx4M2QgY2xhbXAoZCwgMS4wLCBjdWJlVVZfcmFuZ2VDbGFtcCk7XG5cdGZsb2F0IG1pcExldmVsIFx4M2QgMC41ICogbG9nMihkKTtcblx0cmV0dXJuIHZlYzIoZmxvb3IobWlwTGV2ZWwpLCBmcmFjdChtaXBMZXZlbCkpO1xufVxuI2RlZmluZSBjdWJlVVZfbWF4TG9kczIgKGxvZzIoY3ViZVVWX3RleHR1cmVTaXplKjAuMjUpIC0gMi4wKVxuI2RlZmluZSBjdWJlVVZfcmNwVGV4dHVyZVNpemUgKDEuMCAvIGN1YmVVVl90ZXh0dXJlU2l6ZSlcbnZlYzIgZ2V0Q3ViZVVWKHZlYzMgZGlyZWN0aW9uLCBmbG9hdCByb3VnaG5lc3NMZXZlbCwgZmxvYXQgbWlwTGV2ZWwpIHtcblx0bWlwTGV2ZWwgXHgzZCByb3VnaG5lc3NMZXZlbCBceDNlIGN1YmVVVl9tYXhMb2RzMiAtIDMuMCA/IDAuMCA6IG1pcExldmVsO1xuXHRmbG9hdCBhIFx4M2QgMTYuMCAqIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZTtcblx0dmVjMiBleHAyX3BhY2tlZCBceDNkIGV4cDIoIHZlYzIoIHJvdWdobmVzc0xldmVsLCBtaXBMZXZlbCApICk7XG5cdHZlYzIgcmNwX2V4cDJfcGFja2VkIFx4M2QgdmVjMiggMS4wICkgLyBleHAyX3BhY2tlZDtcblx0ZmxvYXQgcG93U2NhbGUgXHgzZCBleHAyX3BhY2tlZC54ICogZXhwMl9wYWNrZWQueTtcblx0ZmxvYXQgc2NhbGUgXHgzZCByY3BfZXhwMl9wYWNrZWQueCAqIHJjcF9leHAyX3BhY2tlZC55ICogMC4yNTtcblx0ZmxvYXQgbWlwT2Zmc2V0IFx4M2QgMC43NSooMS4wIC0gcmNwX2V4cDJfcGFja2VkLnkpICogcmNwX2V4cDJfcGFja2VkLng7XG5cdGJvb2wgYlJlcyBceDNkIG1pcExldmVsIFx4M2RceDNkIDAuMDtcblx0c2NhbGUgXHgzZCAgYlJlcyBceDI2XHgyNiAoc2NhbGUgXHgzYyBhKSA/IGEgOiBzY2FsZTtcblx0dmVjMyByO1xuXHR2ZWMyIG9mZnNldDtcblx0aW50IGZhY2UgXHgzZCBnZXRGYWNlRnJvbURpcmVjdGlvbihkaXJlY3Rpb24pO1xuXHRmbG9hdCByY3BQb3dTY2FsZSBceDNkIDEuMCAvIHBvd1NjYWxlO1xuXHRpZiggZmFjZSBceDNkXHgzZCAwKSB7XG5cdFx0ciBceDNkIHZlYzMoZGlyZWN0aW9uLngsIC1kaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCBceDNkIHZlYzIoMC4wK21pcE9mZnNldCwwLjc1ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55IFx4M2QgYlJlcyBceDI2XHgyNiAob2Zmc2V0LnkgXHgzYyAyLjAqYSkgPyBhIDogb2Zmc2V0Lnk7XG5cdH1cblx0ZWxzZSBpZiggZmFjZSBceDNkXHgzZCAxKSB7XG5cdFx0ciBceDNkIHZlYzMoZGlyZWN0aW9uLnksIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueik7XG5cdFx0b2Zmc2V0IFx4M2QgdmVjMihzY2FsZSttaXBPZmZzZXQsIDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgXHgzZCBiUmVzIFx4MjZceDI2IChvZmZzZXQueSBceDNjIDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlIFx4M2RceDNkIDIpIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55KTtcblx0XHRvZmZzZXQgXHgzZCB2ZWMyKDIuMCpzY2FsZSttaXBPZmZzZXQsIDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgXHgzZCBiUmVzIFx4MjZceDI2IChvZmZzZXQueSBceDNjIDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlIFx4M2RceDNkIDMpIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55KTtcblx0XHRvZmZzZXQgXHgzZCB2ZWMyKDAuMCttaXBPZmZzZXQsMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55IFx4M2QgYlJlcyBceDI2XHgyNiAob2Zmc2V0LnkgXHgzYyAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlIFx4M2RceDNkIDQpIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIC1kaXJlY3Rpb24ueik7XG5cdFx0b2Zmc2V0IFx4M2QgdmVjMihzY2FsZSttaXBPZmZzZXQsIDAuNSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSBceDNkIGJSZXMgXHgyNlx4MjYgKG9mZnNldC55IFx4M2MgMi4wKmEpID8gMC4wIDogb2Zmc2V0Lnk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0ciBceDNkIHZlYzMoZGlyZWN0aW9uLnosIC1kaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCBceDNkIHZlYzIoMi4wKnNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55IFx4M2QgYlJlcyBceDI2XHgyNiAob2Zmc2V0LnkgXHgzYyAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRyIFx4M2Qgbm9ybWFsaXplKHIpO1xuXHRmbG9hdCB0ZXhlbE9mZnNldCBceDNkIDAuNSAqIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZTtcblx0dmVjMiBzIFx4M2QgKCByLnl6IC8gYWJzKCByLnggKSArIHZlYzIoIDEuMCApICkgKiAwLjU7XG5cdHZlYzIgYmFzZSBceDNkIG9mZnNldCArIHZlYzIoIHRleGVsT2Zmc2V0ICk7XG5cdHJldHVybiBiYXNlICsgcyAqICggc2NhbGUgLSAyLjAgKiB0ZXhlbE9mZnNldCApO1xufVxuI2RlZmluZSBjdWJlVVZfbWF4TG9kczMgKGxvZzIoY3ViZVVWX3RleHR1cmVTaXplKjAuMjUpIC0gMy4wKVxudmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHJlZmxlY3RlZERpcmVjdGlvbiwgZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCByb3VnaG5lc3NWYWwgXHgzZCByb3VnaG5lc3MqIGN1YmVVVl9tYXhMb2RzMztcblx0ZmxvYXQgcjEgXHgzZCBmbG9vcihyb3VnaG5lc3NWYWwpO1xuXHRmbG9hdCByMiBceDNkIHIxICsgMS4wO1xuXHRmbG9hdCB0IFx4M2QgZnJhY3Qocm91Z2huZXNzVmFsKTtcblx0dmVjMiBtaXBJbmZvIFx4M2QgTWlwTGV2ZWxJbmZvKHJlZmxlY3RlZERpcmVjdGlvbiwgcjEsIHJvdWdobmVzcyk7XG5cdGZsb2F0IHMgXHgzZCBtaXBJbmZvLnk7XG5cdGZsb2F0IGxldmVsMCBceDNkIG1pcEluZm8ueDtcblx0ZmxvYXQgbGV2ZWwxIFx4M2QgbGV2ZWwwICsgMS4wO1xuXHRsZXZlbDEgXHgzZCBsZXZlbDEgXHgzZSA1LjAgPyA1LjAgOiBsZXZlbDE7XG5cdGxldmVsMCArXHgzZCBtaW4oIGZsb29yKCBzICsgMC41ICksIDUuMCApO1xuXHR2ZWMyIHV2XzEwIFx4M2QgZ2V0Q3ViZVVWKHJlZmxlY3RlZERpcmVjdGlvbiwgcjEsIGxldmVsMCk7XG5cdHZlYzQgY29sb3IxMCBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIodGV4dHVyZTJEKGVudk1hcCwgdXZfMTApKTtcblx0dmVjMiB1dl8yMCBceDNkIGdldEN1YmVVVihyZWZsZWN0ZWREaXJlY3Rpb24sIHIyLCBsZXZlbDApO1xuXHR2ZWM0IGNvbG9yMjAgXHgzZCBlbnZNYXBUZXhlbFRvTGluZWFyKHRleHR1cmUyRChlbnZNYXAsIHV2XzIwKSk7XG5cdHZlYzQgcmVzdWx0IFx4M2QgbWl4KGNvbG9yMTAsIGNvbG9yMjAsIHQpO1xuXHRyZXR1cm4gdmVjNChyZXN1bHQucmdiLCAxLjApO1xufVxuI2VuZGlmIiwKZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6InZlYzMgdHJhbnNmb3JtZWROb3JtYWwgXHgzZCBub3JtYWxNYXRyaXggKiBvYmplY3ROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCBceDNkIC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCBceDNkIG5vcm1hbE1hdHJpeCAqIG9iamVjdFRhbmdlbnQ7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50IFx4M2QgLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArXHgzZCBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7XG4jZW5kaWYiLAplbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgXHgzZCB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0ZW1pc3NpdmVDb2xvci5yZ2IgXHgzZCBlbWlzc2l2ZU1hcFRleGVsVG9MaW5lYXIoIGVtaXNzaXZlQ29sb3IgKS5yZ2I7XG5cdHRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqXHgzZCBlbWlzc2l2ZUNvbG9yLnJnYjtcbiNlbmRpZiIsZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcbiNlbmRpZiIsZW5jb2RpbmdzX2ZyYWdtZW50OiJnbF9GcmFnQ29sb3IgXHgzZCBsaW5lYXJUb091dHB1dFRleGVsKCBnbF9GcmFnQ29sb3IgKTsiLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OiJcbnZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgR2FtbWFUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVybiB2ZWM0KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggZ2FtbWFGYWN0b3IgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IExpbmVhclRvR2FtbWEoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IGdhbW1hRmFjdG9yICkge1xuXHRyZXR1cm4gdmVjNCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDEuMCAvIGdhbW1hRmFjdG9yICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBzUkdCVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiICogMC45NDc4NjcyOTg2ICsgdmVjMyggMC4wNTIxMzI3MDE0ICksIHZlYzMoIDIuNCApICksIHZhbHVlLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IFJHQkVUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqIGV4cDIoIHZhbHVlLmEgKiAyNTUuMCAtIDEyOC4wICksIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQkUoIGluIHZlYzQgdmFsdWUgKSB7XG5cdGZsb2F0IG1heENvbXBvbmVudCBceDNkIG1heCggbWF4KCB2YWx1ZS5yLCB2YWx1ZS5nICksIHZhbHVlLmIgKTtcblx0ZmxvYXQgZkV4cCBceDNkIGNsYW1wKCBjZWlsKCBsb2cyKCBtYXhDb21wb25lbnQgKSApLCAtMTI4LjAsIDEyNy4wICk7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgLyBleHAyKCBmRXhwICksICggZkV4cCArIDEyOC4wICkgLyAyNTUuMCApO1xufVxudmVjNCBSR0JNVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogdmFsdWUuYSAqIG1heFJhbmdlLCAxLjAgKTtcbn1cbnZlYzQgTGluZWFyVG9SR0JNKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0ZmxvYXQgbWF4UkdCIFx4M2QgbWF4KCB2YWx1ZS5yLCBtYXgoIHZhbHVlLmcsIHZhbHVlLmIgKSApO1xuXHRmbG9hdCBNIFx4M2QgY2xhbXAoIG1heFJHQiAvIG1heFJhbmdlLCAwLjAsIDEuMCApO1xuXHRNIFx4M2QgY2VpbCggTSAqIDI1NS4wICkgLyAyNTUuMDtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvICggTSAqIG1heFJhbmdlICksIE0gKTtcbn1cbnZlYzQgUkdCRFRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBtYXhSYW5nZSApIHtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggKCBtYXhSYW5nZSAvIDI1NS4wICkgLyB2YWx1ZS5hICksIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQkQoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgXHgzZCBtYXgoIHZhbHVlLnIsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IEQgXHgzZCBtYXgoIG1heFJhbmdlIC8gbWF4UkdCLCAxLjAgKTtcblx0RCBceDNkIG1pbiggZmxvb3IoIEQgKSAvIDI1NS4wLCAxLjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAqICggRCAqICggMjU1LjAgLyBtYXhSYW5nZSApICksIEQgKTtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dk0gXHgzZCBtYXQzKCAwLjIyMDksIDAuMzM5MCwgMC40MTg0LCAwLjExMzgsIDAuNjc4MCwgMC43MzE5LCAwLjAxMDIsIDAuMTEzMCwgMC4yOTY5ICk7XG52ZWM0IExpbmVhclRvTG9nTHV2KCBpbiB2ZWM0IHZhbHVlICkgIHtcblx0dmVjMyBYcF9ZX1hZWnAgXHgzZCBjTG9nTHV2TSAqIHZhbHVlLnJnYjtcblx0WHBfWV9YWVpwIFx4M2QgbWF4KCBYcF9ZX1hZWnAsIHZlYzMoIDFlLTYsIDFlLTYsIDFlLTYgKSApO1xuXHR2ZWM0IHZSZXN1bHQ7XG5cdHZSZXN1bHQueHkgXHgzZCBYcF9ZX1hZWnAueHkgLyBYcF9ZX1hZWnAuejtcblx0ZmxvYXQgTGUgXHgzZCAyLjAgKiBsb2cyKFhwX1lfWFlacC55KSArIDEyNy4wO1xuXHR2UmVzdWx0LncgXHgzZCBmcmFjdCggTGUgKTtcblx0dlJlc3VsdC56IFx4M2QgKCBMZSAtICggZmxvb3IoIHZSZXN1bHQudyAqIDI1NS4wICkgKSAvIDI1NS4wICkgLyAyNTUuMDtcblx0cmV0dXJuIHZSZXN1bHQ7XG59XG5jb25zdCBtYXQzIGNMb2dMdXZJbnZlcnNlTSBceDNkIG1hdDMoIDYuMDAxNCwgLTIuNzAwOCwgLTEuNzk5NiwgLTEuMzMyMCwgMy4xMDI5LCAtNS43NzIxLCAwLjMwMDgsIC0xLjA4ODIsIDUuNjI2OCApO1xudmVjNCBMb2dMdXZUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgTGUgXHgzZCB2YWx1ZS56ICogMjU1LjAgKyB2YWx1ZS53O1xuXHR2ZWMzIFhwX1lfWFlacDtcblx0WHBfWV9YWVpwLnkgXHgzZCBleHAyKCAoIExlIC0gMTI3LjAgKSAvIDIuMCApO1xuXHRYcF9ZX1hZWnAueiBceDNkIFhwX1lfWFlacC55IC8gdmFsdWUueTtcblx0WHBfWV9YWVpwLnggXHgzZCB2YWx1ZS54ICogWHBfWV9YWVpwLno7XG5cdHZlYzMgdlJHQiBceDNkIGNMb2dMdXZJbnZlcnNlTSAqIFhwX1lfWFlacC5yZ2I7XG5cdHJldHVybiB2ZWM0KCBtYXgoIHZSR0IsIDAuMCApLCAxLjAgKTtcbn0iLAplbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4IFx4M2Qgbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCBceDNkIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgXHgzZCByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjIFx4M2QgcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgXHgzZCB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciBceDNkIHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9FUVVJUkVDIClcblx0XHR2ZWMyIHNhbXBsZVVWO1xuXHRcdHJlZmxlY3RWZWMgXHgzZCBub3JtYWxpemUoIHJlZmxlY3RWZWMgKTtcblx0XHRzYW1wbGVVVi55IFx4M2QgYXNpbiggY2xhbXAoIHJlZmxlY3RWZWMueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRcdHNhbXBsZVVWLnggXHgzZCBhdGFuKCByZWZsZWN0VmVjLnosIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0dmVjNCBlbnZDb2xvciBceDNkIHRleHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdHJlZmxlY3RWZWMgXHgzZCBub3JtYWxpemUoIHJlZmxlY3RWZWMgKTtcblx0XHR2ZWMzIHJlZmxlY3RWaWV3IFx4M2Qgbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwgMC4wLCAxLjAgKSApO1xuXHRcdHZlYzQgZW52Q29sb3IgXHgzZCB0ZXh0dXJlMkQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yIFx4M2QgdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHRlbnZDb2xvciBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcblx0XHRvdXRnb2luZ0xpZ2h0IFx4M2QgbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxuXHRcdG91dGdvaW5nTGlnaHQgXHgzZCBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcblx0XHRvdXRnb2luZ0xpZ2h0ICtceDNkIGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XG5cdCNlbmRpZlxuI2VuZGlmIiwKZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHR1bmlmb3JtIGludCBtYXhNaXBMZXZlbDtcblx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblx0I2Vsc2Vcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdCNlbmRpZlxuXHRcbiNlbmRpZiIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdHVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5O1xuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdCNkZWZpbmUgRU5WX1dPUkxEUE9TXG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WX1dPUkxEUE9TXG5cdFx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZWxzZVxuXHRcdHZhcnlpbmcgdmVjMyB2UmVmbGVjdDtcblx0I2VuZGlmXG4jZW5kaWYiLAplbnZtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HIClcblx0XHQjZGVmaW5lIEVOVl9XT1JMRFBPU1xuXHQjZW5kaWZcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdFxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKVxuXHQjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTlxuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCBceDNkIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGdlb21ldHJ5Lm5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjIFx4M2QgdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgXHgzZCB0ZXh0dXJlQ3ViZUxvZEVYVCggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgXHgzZCB0ZXh0dXJlQ3ViZSggZW52TWFwLCBxdWVyeVZlYywgZmxvYXQoIG1heE1JUExldmVsICkgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiIFx4M2QgZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0XHR2ZWMzIHF1ZXJ5VmVjIFx4M2QgdmVjMyggZmxpcEVudk1hcCAqIHdvcmxkTm9ybWFsLngsIHdvcmxkTm9ybWFsLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmVVViggZW52TWFwLCBxdWVyeVZlYywgMS4wICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgXHgzZCB2ZWM0KCAwLjAgKTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gUEkgKiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7XG5cdH1cblx0ZmxvYXQgZ2V0U3BlY3VsYXJNSVBMZXZlbCggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBpbnQgbWF4TUlQTGV2ZWwgKSB7XG5cdFx0ZmxvYXQgbWF4TUlQTGV2ZWxTY2FsYXIgXHgzZCBmbG9hdCggbWF4TUlQTGV2ZWwgKTtcblx0XHRmbG9hdCBzaWdtYSBceDNkIFBJICogcm91Z2huZXNzICogcm91Z2huZXNzIC8gKCAxLjAgKyByb3VnaG5lc3MgKTtcblx0XHRmbG9hdCBkZXNpcmVkTUlQTGV2ZWwgXHgzZCBtYXhNSVBMZXZlbFNjYWxhciArIGxvZzIoIHNpZ21hICk7XG5cdFx0cmV0dXJuIGNsYW1wKCBkZXNpcmVkTUlQTGV2ZWwsIDAuMCwgbWF4TUlQTGV2ZWxTY2FsYXIgKTtcblx0fVxuXHR2ZWMzIGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdCAgdmVjMyByZWZsZWN0VmVjIFx4M2QgcmVmbGVjdCggLXZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdCAgcmVmbGVjdFZlYyBceDNkIG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcblx0XHQjZWxzZVxuXHRcdCAgdmVjMyByZWZsZWN0VmVjIFx4M2QgcmVmcmFjdCggLXZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdFx0cmVmbGVjdFZlYyBceDNkIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRmbG9hdCBzcGVjdWxhck1JUExldmVsIFx4M2QgZ2V0U3BlY3VsYXJNSVBMZXZlbCggcm91Z2huZXNzLCBtYXhNSVBMZXZlbCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0XHR2ZWMzIHF1ZXJ5UmVmbGVjdFZlYyBceDNkIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmVDdWJlTG9kRVhUKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmVDdWJlKCBlbnZNYXAsIHF1ZXJ5UmVmbGVjdFZlYywgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgXHgzZCBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjIFx4M2QgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCByb3VnaG5lc3MgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9FUVVJUkVDIClcblx0XHRcdHZlYzIgc2FtcGxlVVY7XG5cdFx0XHRzYW1wbGVVVi55IFx4M2QgYXNpbiggY2xhbXAoIHJlZmxlY3RWZWMueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRcdFx0c2FtcGxlVVYueCBceDNkIGF0YW4oIHJlZmxlY3RWZWMueiwgcmVmbGVjdFZlYy54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmUyRExvZEVYVCggZW52TWFwLCBzYW1wbGVVViwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgXHgzZCBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdFx0dmVjMyByZWZsZWN0VmlldyBceDNkIG5vcm1hbGl6ZSggKCB2aWV3TWF0cml4ICogdmVjNCggcmVmbGVjdFZlYywgMC4wICkgKS54eXogKyB2ZWMzKCAwLjAsMC4wLDEuMCApICk7XG5cdFx0XHQjaWZkZWYgVEVYVFVSRV9MT0RfRVhUXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgXHgzZCB0ZXh0dXJlMkRMb2RFWFQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdHZlYzQgZW52TWFwQ29sb3IgXHgzZCB0ZXh0dXJlMkQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUsIHNwZWN1bGFyTUlQTGV2ZWwgKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0ZW52TWFwQ29sb3IucmdiIFx4M2QgZW52TWFwVGV4ZWxUb0xpbmVhciggZW52TWFwQ29sb3IgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0fVxuI2VuZGlmIiwKZW52bWFwX3ZlcnRleDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmZGVmIEVOVl9XT1JMRFBPU1xuXHRcdHZXb3JsZFBvc2l0aW9uIFx4M2Qgd29ybGRQb3NpdGlvbi54eXo7XG5cdCNlbHNlXG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleCBceDNkIG5vcm1hbGl6ZSggd29ybGRQb3NpdGlvbi54eXogLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2UmVmbGVjdCBceDNkIHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2UmVmbGVjdCBceDNkIHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixmb2dfdmVydGV4OiIjaWZkZWYgVVNFX0ZPR1xuXHRmb2dEZXB0aCBceDNkIC1tdlBvc2l0aW9uLno7XG4jZW5kaWYiLApmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG4jZW5kaWYiLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yIFx4M2QgMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciBceDNkIHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgXHgzZCBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZiIsZm9nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdHVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcblx0dmFyeWluZyBmbG9hdCBmb2dEZXB0aDtcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0Zhcjtcblx0I2VuZGlmXG4jZW5kaWYiLApncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVE9PTlxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcblx0dmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRcdGZsb2F0IGRvdE5MIFx4M2QgZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XG5cdFx0dmVjMiBjb29yZCBceDNkIHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTtcblx0XHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yZ2I7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiAoIGNvb3JkLnggXHgzYyAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIFBJICogdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIiwKbGlnaHRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDtcblx0dW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZiIsbGlnaHRzX2xhbWJlcnRfdmVydGV4OiJ2ZWMzIGRpZmZ1c2UgXHgzZCB2ZWMzKCAxLjAgKTtcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiBceDNkIG12UG9zaXRpb24ueHl6O1xuZ2VvbWV0cnkubm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuZ2VvbWV0cnkudmlld0RpciBceDNkIG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7XG5HZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTtcbmJhY2tHZW9tZXRyeS5wb3NpdGlvbiBceDNkIGdlb21ldHJ5LnBvc2l0aW9uO1xuYmFja0dlb21ldHJ5Lm5vcm1hbCBceDNkIC1nZW9tZXRyeS5ub3JtYWw7XG5iYWNrR2VvbWV0cnkudmlld0RpciBceDNkIGdlb21ldHJ5LnZpZXdEaXI7XG52TGlnaHRGcm9udCBceDNkIHZlYzMoIDAuMCApO1xudkluZGlyZWN0RnJvbnQgXHgzZCB2ZWMzKCAwLjAgKTtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dkxpZ2h0QmFjayBceDNkIHZlYzMoIDAuMCApO1xuXHR2SW5kaXJlY3RCYWNrIFx4M2QgdmVjMyggMC4wICk7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG5mbG9hdCBkb3ROTDtcbnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuI2lmIE5VTV9QT0lOVF9MSUdIVFMgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgXHgzZCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlIFx4M2QgUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArXHgzZCBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICtceDNkIHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTIFx4M2UgMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MIFx4M2QgZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSBceDNkIFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgK1x4M2Qgc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArXHgzZCBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTIFx4M2UgMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCBceDNkIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgXHgzZCBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICtceDNkIHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgK1x4M2Qgc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZJbmRpcmVjdEZyb250ICtceDNkIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICtceDNkIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsCmxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7XG51bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdO1xudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcblx0ZmxvYXQgeCBceDNkIG5vcm1hbC54LCB5IFx4M2Qgbm9ybWFsLnksIHogXHgzZCBub3JtYWwuejtcblx0dmVjMyByZXN1bHQgXHgzZCBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnkgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlIFx4M2Qgc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBhbWJpZW50TGlnaHRDb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0I2VuZGlmXG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuI2lmIE5VTV9ESVJfTElHSFRTIFx4M2UgMFxuXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0fTtcblx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdO1xuXHR2b2lkIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yIFx4M2QgZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gXHgzZCBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlIFx4M2QgdHJ1ZTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0c3RydWN0IFBvaW50TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0fTtcblx0dW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdHZvaWQgZ2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yIFx4M2QgcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiBceDNkIG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgXHgzZCBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciBceDNkIHBvaW50TGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKlx4M2QgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xuXHRcdGRpcmVjdExpZ2h0LnZpc2libGUgXHgzZCAoIGRpcmVjdExpZ2h0LmNvbG9yICFceDNkIHZlYzMoIDAuMCApICk7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyBceDNlIDBcblx0c3RydWN0IFNwb3RMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHRcdGZsb2F0IGNvbmVDb3M7XG5cdFx0ZmxvYXQgcGVudW1icmFDb3M7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICApIHtcblx0XHR2ZWMzIGxWZWN0b3IgXHgzZCBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gXHgzZCBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlIFx4M2QgbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgXHgzZCBkb3QoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgXHgzZSBzcG90TGlnaHQuY29uZUNvcyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgXHgzZCBzbW9vdGhzdGVwKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgXHgzZCBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciAqXHgzZCBzcG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgXHgzZCB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciBceDNkIHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSBceDNkIGZhbHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXHgzZSAwXG5cdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0O1xuXHR9O1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18yO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgXHgzZSAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCBceDNkIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgXHgzZCAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmIiwKbGlnaHRzX3Bob25nX2ZyYWdtZW50OiJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciBceDNkIHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgXHgzZCBzaGluaW5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoIFx4M2Qgc3BlY3VsYXJTdHJlbmd0aDsiLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdHZlYzNcdHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclNoaW5pbmVzcztcblx0ZmxvYXRcdHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmZGVmIFRPT05cblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2Vsc2Vcblx0XHRmbG9hdCBkb3ROTCBceDNkIHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjZW5kaWZcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgK1x4M2QgaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgK1x4M2QgaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKSIsCmxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciBceDNkIGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgXHgzZCBjbGFtcCggcm91Z2huZXNzRmFjdG9yLCAwLjA0LCAxLjAgKTtcbiNpZmRlZiBSRUZMRUNUSVZJVFlcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciBceDNkIG1peCggdmVjMyggTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAqIHBvdzIoIHJlZmxlY3Rpdml0eSApICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuI2Vsc2Vcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciBceDNkIG1peCggdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgXHgzZCBzYXR1cmF0ZSggY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgXHgzZCBjbGFtcCggY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA0LCAxLjAgKTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9TSEVFTlxuXHRtYXRlcmlhbC5zaGVlbkNvbG9yIFx4M2Qgc2hlZW47XG4jZW5kaWYiLApsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoic3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclJvdWdobmVzcztcblx0dmVjM1x0c3BlY3VsYXJDb2xvcjtcbiNpZmRlZiBDTEVBUkNPQVRcblx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dmVjMyBzaGVlbkNvbG9yO1xuI2VuZGlmXG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMTZcbiNkZWZpbmUgREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9hdCBjbGVhcmNvYXRESFJBcHByb3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsgKCAxLjAgLSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90TkwsIDUuMCApICogcG93KCAxLjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXHgzZSAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsIFx4M2QgZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciBceDNkIGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiBceDNkIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgXHgzZCByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoIFx4M2QgcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0IFx4M2QgcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciBceDNkIHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzIFx4M2QgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0Q29vcmRzWyA0IF07XG5cdFx0cmVjdENvb3Jkc1sgMCBdIFx4M2QgbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1x0XHRyZWN0Q29vcmRzWyAxIF0gXHgzZCBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMiBdIFx4M2QgbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDMgXSBceDNkIGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHR2ZWMyIHV2IFx4M2QgTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRcdHZlYzQgdDEgXHgzZCB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xuXHRcdHZlYzQgdDIgXHgzZCB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xuXHRcdG1hdDMgbUludiBceDNkIG1hdDMoXG5cdFx0XHR2ZWMzKCB0MS54LCAwLCB0MS55ICksXG5cdFx0XHR2ZWMzKCAgICAwLCAxLCAgICAwICksXG5cdFx0XHR2ZWMzKCB0MS56LCAwLCB0MS53IClcblx0XHQpO1xuXHRcdHZlYzMgZnJlc25lbCBceDNkICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICtceDNkIGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArXHgzZCBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSBceDNkIGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKlx4M2QgUEk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2NEb3ROTCBceDNkIHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMzIGNjSXJyYWRpYW5jZSBceDNkIGNjRG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHQjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFNcblx0XHRcdGNjSXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0XHQjZW5kaWZcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgXHgzZCBtYXRlcmlhbC5jbGVhcmNvYXQgKiBjbGVhcmNvYXRESFJBcHByb3goIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgY2NEb3ROTCApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICtceDNkIGNjSXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyY29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGNsZWFyY29hdERIUiBceDNkIDAuMDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArXHgzZCAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfU2hlZW4oXG5cdFx0XHRtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyxcblx0XHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbixcblx0XHRcdGdlb21ldHJ5LFxuXHRcdFx0bWF0ZXJpYWwuc2hlZW5Db2xvclxuXHRcdCk7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgK1x4M2QgKCAxLjAgLSBjbGVhcmNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MpO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArXHgzZCAoIDEuMCAtIGNsZWFyY29hdERIUiApICogaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgK1x4M2QgaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyY29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkge1xuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2NEb3ROViBceDNkIHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArXHgzZCBjbGVhcmNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyY29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XG5cdFx0ZmxvYXQgY2NEb3ROTCBceDNkIGNjRG90TlY7XG5cdFx0ZmxvYXQgY2xlYXJjb2F0REhSIFx4M2QgbWF0ZXJpYWwuY2xlYXJjb2F0ICogY2xlYXJjb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIGNjRG90TkwgKTtcblx0I2Vsc2Vcblx0XHRmbG9hdCBjbGVhcmNvYXRESFIgXHgzZCAwLjA7XG5cdCNlbmRpZlxuXHRmbG9hdCBjbGVhcmNvYXRJbnYgXHgzZCAxLjAgLSBjbGVhcmNvYXRESFI7XG5cdHZlYzMgc2luZ2xlU2NhdHRlcmluZyBceDNkIHZlYzMoIDAuMCApO1xuXHR2ZWMzIG11bHRpU2NhdHRlcmluZyBceDNkIHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSBceDNkIGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJO1xuXHRCUkRGX1NwZWN1bGFyX011bHRpc2NhdHRlcmluZ19FbnZpcm9ubWVudCggZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlIFx4M2QgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICtceDNkIGNsZWFyY29hdEludiAqIHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn0iLApsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uIFx4M2QgLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsIFx4M2Qgbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciBceDNkIG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIENMRUFSQ09BVFxuXHRnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgXHgzZCBjbGVhcmNvYXROb3JtYWw7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG4jaWYgKCBOVU1fUE9JTlRfTElHSFRTIFx4M2UgMCApIFx4MjZceDI2IGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdFBvaW50TGlnaHQgcG9pbnRMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgXHgzZCBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdGdldFBvaW50RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApIFx4MjZceDI2ICggVU5ST0xMRURfTE9PUF9JTkRFWCBceDNjIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIClcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqXHgzZCBhbGwoIGJ2ZWMyKCBwb2ludExpZ2h0LnNoYWRvdywgZGlyZWN0TGlnaHQudmlzaWJsZSApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyBceDNlIDAgKSBceDI2XHgyNiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgXHgzZCBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdERpcmVjdExpZ2h0SXJyYWRpYW5jZSggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApIFx4MjZceDI2ICggVU5ST0xMRURfTE9PUF9JTkRFWCBceDNjIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICpceDNkIGFsbCggYnZlYzIoIHNwb3RMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiAoIE5VTV9ESVJfTElHSFRTIFx4M2UgMCApIFx4MjZceDI2IGRlZmluZWQoIFJFX0RpcmVjdCApXG5cdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0IFx4M2QgZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRnZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SXJyYWRpYW5jZSggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSBceDI2XHgyNiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggXHgzYyBOVU1fRElSX0xJR0hUX1NIQURPV1MgKVxuXHRcdGRpcmVjdExpZ2h0LmNvbG9yICpceDNkIGFsbCggYnZlYzIoIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93LCBkaXJlY3RMaWdodC52aXNpYmxlICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTIFx4M2UgMCApIFx4MjZceDI2IGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApXG5cdFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHtcblx0XHRyZWN0QXJlYUxpZ2h0IFx4M2QgcmVjdEFyZWFMaWdodHNbIGkgXTtcblx0XHRSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0dmVjMyBpYmxJcnJhZGlhbmNlIFx4M2QgdmVjMyggMC4wICk7XG5cdHZlYzMgaXJyYWRpYW5jZSBceDNkIGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG5cdGlycmFkaWFuY2UgK1x4M2QgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5ICk7XG5cdCNpZiAoIE5VTV9IRU1JX0xJR0hUUyBceDNlIDAgKVxuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0XHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0XHRpcnJhZGlhbmNlICtceDNkIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHR9XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHZlYzMgcmFkaWFuY2UgXHgzZCB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjbGVhcmNvYXRSYWRpYW5jZSBceDNkIHZlYzMoIDAuMCApO1xuI2VuZGlmIiwKbGlnaHRzX2ZyYWdtZW50X21hcHM6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0dmVjMyBsaWdodE1hcElycmFkaWFuY2UgXHgzZCB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICkueHl6ICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKlx4M2QgUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArXHgzZCBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIFx4MjZceDI2IGRlZmluZWQoIFNUQU5EQVJEICkgXHgyNlx4MjYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArXHgzZCBnZXRMaWdodFByb2JlSW5kaXJlY3RJcnJhZGlhbmNlKCBnZW9tZXRyeSwgbWF4TWlwTGV2ZWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgXHgyNlx4MjYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICtceDNkIGdldExpZ2h0UHJvYmVJbmRpcmVjdFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzLCBtYXhNaXBMZXZlbCApO1xuXHQjaWZkZWYgQ0xFQVJDT0FUXG5cdFx0Y2xlYXJjb2F0UmFkaWFuY2UgK1x4M2QgZ2V0TGlnaHRQcm9iZUluZGlyZWN0UmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRpZiIsCmxpZ2h0c19mcmFnbWVudF9lbmQ6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHRSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaWJsSXJyYWRpYW5jZSwgY2xlYXJjb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSBceDI2XHgyNiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0Z2xfRnJhZ0RlcHRoRVhUIFx4M2QgbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApIFx4MjZceDI2IGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcbiNlbmRpZiIsCmxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0I2VuZGlmXG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggXHgzZCAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxuXHRcdGdsX1Bvc2l0aW9uLnogXHgzZCBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDtcblx0XHRnbF9Qb3NpdGlvbi56ICpceDNkIGdsX1Bvc2l0aW9uLnc7XG5cdCNlbmRpZlxuI2VuZGlmIixtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgdGV4ZWxDb2xvciBceDNkIHRleHR1cmUyRCggbWFwLCB2VXYgKTtcblx0dGV4ZWxDb2xvciBceDNkIG1hcFRleGVsVG9MaW5lYXIoIHRleGVsQ29sb3IgKTtcblx0ZGlmZnVzZUNvbG9yICpceDNkIHRleGVsQ29sb3I7XG4jZW5kaWYiLAptYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmIixtYXBfcGFydGljbGVfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzIgdXYgXHgzZCAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5O1xuXHR2ZWM0IG1hcFRleGVsIFx4M2QgdGV4dHVyZTJEKCBtYXAsIHV2ICk7XG5cdGRpZmZ1c2VDb2xvciAqXHgzZCBtYXBUZXhlbFRvTGluZWFyKCBtYXBUZXhlbCApO1xuI2VuZGlmIixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yIFx4M2QgbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyBceDNkIHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICpceDNkIHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLAptZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMCAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMSAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMiAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMyAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWYiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiLAptb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQwIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHR0cmFuc2Zvcm1lZCArXHgzZCAoIG1vcnBoVGFyZ2V0MSAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDIgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQzIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDQgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQ1IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHR0cmFuc2Zvcm1lZCArXHgzZCAoIG1vcnBoVGFyZ2V0NiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDcgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07XG5cdCNlbmRpZlxuI2VuZGlmIiwKbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiIjaWZkZWYgRkxBVF9TSEFERURcblx0dmVjMyBmZHggXHgzZCB2ZWMzKCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeCggdlZpZXdQb3NpdGlvbi55ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgZmR5IFx4M2QgdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIG5vcm1hbCBceDNkIG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTtcbiNlbHNlXG5cdHZlYzMgbm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB2Tm9ybWFsICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgXHgzZCBub3JtYWwgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50IFx4M2QgdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHRcdGJpdGFuZ2VudCBceDNkIGJpdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgXHgzZCBub3JtYWw7IiwKbm9ybWFsX2ZyYWdtZW50X21hcHM6IiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVBcblx0bm9ybWFsIFx4M2QgdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRub3JtYWwgXHgzZCAtIG5vcm1hbDtcblx0I2VuZGlmXG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgXHgzZCBub3JtYWwgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdCNlbmRpZlxuXHRub3JtYWwgXHgzZCBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG1hdDMgdlRCTiBceDNkIG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7XG5cdFx0dmVjMyBtYXBOIFx4M2QgdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0XHRtYXBOLnh5IFx4M2Qgbm9ybWFsU2NhbGUgKiBtYXBOLnh5O1xuXHRcdG5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgXHgzZCBwZXJ0dXJiTm9ybWFsMkFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbm9ybWFsU2NhbGUsIG5vcm1hbE1hcCApO1xuXHQjZW5kaWZcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsIFx4M2QgcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZiIsCm5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcbiNlbmRpZlxuI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4O1xuI2VuZGlmXG4jaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSBceDI2XHgyNiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIG5vcm1hbFNjYWxlLCBpbiBzYW1wbGVyMkQgbm9ybWFsTWFwICkge1xuXHRcdHZlYzMgcTAgXHgzZCB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMyBxMSBceDNkIHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTtcblx0XHR2ZWMyIHN0MCBceDNkIGRGZHgoIHZVdi5zdCApO1xuXHRcdHZlYzIgc3QxIFx4M2QgZEZkeSggdlV2LnN0ICk7XG5cdFx0ZmxvYXQgc2NhbGUgXHgzZCBzaWduKCBzdDEudCAqIHN0MC5zIC0gc3QwLnQgKiBzdDEucyApO1xuXHRcdHZlYzMgUyBceDNkIG5vcm1hbGl6ZSggKCBxMCAqIHN0MS50IC0gcTEgKiBzdDAudCApICogc2NhbGUgKTtcblx0XHR2ZWMzIFQgXHgzZCBub3JtYWxpemUoICggLSBxMCAqIHN0MS5zICsgcTEgKiBzdDAucyApICogc2NhbGUgKTtcblx0XHR2ZWMzIE4gXHgzZCBub3JtYWxpemUoIHN1cmZfbm9ybSApO1xuXHRcdHZlYzMgbWFwTiBceDNkIHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0bWFwTi54eSAqXHgzZCBub3JtYWxTY2FsZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2ZWMzIE5mcm9tU1QgXHgzZCBjcm9zcyggUywgVCApO1xuXHRcdFx0aWYoIGRvdCggTmZyb21TVCwgTiApIFx4M2UgMC4wICkge1xuXHRcdFx0XHRTICpceDNkIC0xLjA7XG5cdFx0XHRcdFQgKlx4M2QgLTEuMDtcblx0XHRcdH1cblx0XHQjZWxzZVxuXHRcdFx0bWFwTi54eSAqXHgzZCAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0I2VuZGlmXG5cdFx0bWF0MyB0c24gXHgzZCBtYXQzKCBTLCBULCBOICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggdHNuICogbWFwTiApO1xuXHR9XG4jZW5kaWYiLApjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiIjaWZkZWYgQ0xFQVJDT0FUXG5cdHZlYzMgY2xlYXJjb2F0Tm9ybWFsIFx4M2QgZ2VvbWV0cnlOb3JtYWw7XG4jZW5kaWYiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG1hdDMgdlRCTiBceDNkIG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgY2xlYXJjb2F0Tm9ybWFsICk7XG5cdFx0dmVjMyBtYXBOIFx4M2QgdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0XHRtYXBOLnh5IFx4M2QgY2xlYXJjb2F0Tm9ybWFsU2NhbGUgKiBtYXBOLnh5O1xuXHRcdGNsZWFyY29hdE5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRjbGVhcmNvYXROb3JtYWwgXHgzZCBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBjbGVhcmNvYXROb3JtYWwsIGNsZWFyY29hdE5vcm1hbFNjYWxlLCBjbGVhcmNvYXROb3JtYWxNYXAgKTtcblx0I2VuZGlmXG4jZW5kaWYiLApjbGVhcmNvYXRfbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTtcbiNlbmRpZiIscGFja2luZzoidmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTtcbn1cbnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkge1xuXHRyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDtcbn1cbmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlIFx4M2QgMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlIFx4M2QgMjU1LiAvIDI1Ni47XG5jb25zdCB2ZWMzIFBhY2tGYWN0b3JzIFx4M2QgdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgIDI1Ni4gKTtcbmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyBceDNkIFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApO1xuY29uc3QgZmxvYXQgU2hpZnRSaWdodDggXHgzZCAxLiAvIDI1Ni47XG52ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHtcblx0dmVjNCByIFx4M2QgdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7XG5cdHIueXp3IC1ceDNkIHIueHl6ICogU2hpZnRSaWdodDg7XHRyZXR1cm4gciAqIFBhY2tVcHNjYWxlO1xufVxuZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHtcblx0cmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApO1xufVxudmVjNCBlbmNvZGVIYWxmUkdCQSAoIHZlYzIgdiApIHtcblx0dmVjNCBlbmNvZGVkIFx4M2QgdmVjNCggMC4wICk7XG5cdGNvbnN0IHZlYzIgb2Zmc2V0IFx4M2QgdmVjMiggMS4wIC8gMjU1LjAsIDAuMCApO1xuXHRlbmNvZGVkLnh5IFx4M2QgdmVjMiggdi54LCBmcmFjdCggdi54ICogMjU1LjAgKSApO1xuXHRlbmNvZGVkLnh5IFx4M2QgZW5jb2RlZC54eSAtICggZW5jb2RlZC55eSAqIG9mZnNldCApO1xuXHRlbmNvZGVkLnp3IFx4M2QgdmVjMiggdi55LCBmcmFjdCggdi55ICogMjU1LjAgKSApO1xuXHRlbmNvZGVkLnp3IFx4M2QgZW5jb2RlZC56dyAtICggZW5jb2RlZC53dyAqIG9mZnNldCApO1xuXHRyZXR1cm4gZW5jb2RlZDtcbn1cbnZlYzIgZGVjb2RlSGFsZlJHQkEoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICgoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7XG59XG5mbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7XG59IiwKcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDoiI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEFcblx0Z2xfRnJhZ0NvbG9yLnJnYiAqXHgzZCBnbF9GcmFnQ29sb3IuYTtcbiNlbmRpZiIscHJvamVjdF92ZXJ0ZXg6InZlYzQgbXZQb3NpdGlvbiBceDNkIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcbmdsX1Bvc2l0aW9uIFx4M2QgcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247IixkaXRoZXJpbmdfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0Z2xfRnJhZ0NvbG9yLnJnYiBceDNkIGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDoiI2lmZGVmIERJVEhFUklOR1xuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uIFx4M2QgcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCIFx4M2QgdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCIFx4M2QgbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZiIsCnJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yIFx4M2Qgcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyBceDNkIHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICpceDNkIHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTIFx4M2UgMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXHgzZSAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXHgzZSAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcblx0ZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcblx0XHRyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTtcblx0fVxuXHR2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHtcblx0XHRyZXR1cm4gZGVjb2RlSGFsZlJHQkEoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7XG5cdH1cblx0ZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7XG5cdFx0ZmxvYXQgb2NjbHVzaW9uIFx4M2QgMS4wO1xuXHRcdHZlYzIgZGlzdHJpYnV0aW9uIFx4M2QgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7XG5cdFx0ZmxvYXQgaGFyZF9zaGFkb3cgXHgzZCBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTtcblx0XHRpZiAoaGFyZF9zaGFkb3cgIVx4M2QgMS4wICkge1xuXHRcdFx0ZmxvYXQgZGlzdGFuY2UgXHgzZCBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggO1xuXHRcdFx0ZmxvYXQgdmFyaWFuY2UgXHgzZCBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTtcblx0XHRcdGZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5IFx4M2QgdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7XHRcdFx0c29mdG5lc3NfcHJvYmFiaWxpdHkgXHgzZCBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7XHRcdFx0b2NjbHVzaW9uIFx4M2QgY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7XG5cdFx0fVxuXHRcdHJldHVybiBvY2NsdXNpb247XG5cdH1cblx0ZmxvYXQgdGV4dHVyZTJEU2hhZG93TGVycCggc2FtcGxlcjJEIGRlcHRocywgdmVjMiBzaXplLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkge1xuXHRcdGNvbnN0IHZlYzIgb2Zmc2V0IFx4M2QgdmVjMiggMC4wLCAxLjAgKTtcblx0XHR2ZWMyIHRleGVsU2l6ZSBceDNkIHZlYzIoIDEuMCApIC8gc2l6ZTtcblx0XHR2ZWMyIGNlbnRyb2lkVVYgXHgzZCAoIGZsb29yKCB1diAqIHNpemUgLSAwLjUgKSArIDAuNSApICogdGV4ZWxTaXplO1xuXHRcdGZsb2F0IGxiIFx4M2QgdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnh4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgbHQgXHgzZCB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueHksIGNvbXBhcmUgKTtcblx0XHRmbG9hdCByYiBceDNkIHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC55eCwgY29tcGFyZSApO1xuXHRcdGZsb2F0IHJ0IFx4M2QgdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnl5LCBjb21wYXJlICk7XG5cdFx0dmVjMiBmIFx4M2QgZnJhY3QoIHV2ICogc2l6ZSArIDAuNSApO1xuXHRcdGZsb2F0IGEgXHgzZCBtaXgoIGxiLCBsdCwgZi55ICk7XG5cdFx0ZmxvYXQgYiBceDNkIG1peCggcmIsIHJ0LCBmLnkgKTtcblx0XHRmbG9hdCBjIFx4M2QgbWl4KCBhLCBiLCBmLnggKTtcblx0XHRyZXR1cm4gYztcblx0fVxuXHRmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkge1xuXHRcdGZsb2F0IHNoYWRvdyBceDNkIDEuMDtcblx0XHRzaGFkb3dDb29yZC54eXogL1x4M2Qgc2hhZG93Q29vcmQudztcblx0XHRzaGFkb3dDb29yZC56ICtceDNkIHNoYWRvd0JpYXM7XG5cdFx0YnZlYzQgaW5GcnVzdHVtVmVjIFx4M2QgYnZlYzQgKCBzaGFkb3dDb29yZC54IFx4M2VceDNkIDAuMCwgc2hhZG93Q29vcmQueCBceDNjXHgzZCAxLjAsIHNoYWRvd0Nvb3JkLnkgXHgzZVx4M2QgMC4wLCBzaGFkb3dDb29yZC55IFx4M2NceDNkIDEuMCApO1xuXHRcdGJvb2wgaW5GcnVzdHVtIFx4M2QgYWxsKCBpbkZydXN0dW1WZWMgKTtcblx0XHRidmVjMiBmcnVzdHVtVGVzdFZlYyBceDNkIGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogXHgzY1x4M2QgMS4wICk7XG5cdFx0Ym9vbCBmcnVzdHVtVGVzdCBceDNkIGFsbCggZnJ1c3R1bVRlc3RWZWMgKTtcblx0XHRpZiAoIGZydXN0dW1UZXN0ICkge1xuXHRcdCNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgXHgzZCB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgXHgzZCAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwIFx4M2QgLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSBceDNkICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgXHgzZCArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgyIFx4M2QgZHgwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkyIFx4M2QgZHkwIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHgzIFx4M2QgZHgxIC8gMi4wO1xuXHRcdFx0ZmxvYXQgZHkzIFx4M2QgZHkxIC8gMi4wO1xuXHRcdFx0c2hhZG93IFx4M2QgKFxuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyAxNy4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKVxuXHRcdFx0dmVjMiB0ZXhlbFNpemUgXHgzZCB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7XG5cdFx0XHRmbG9hdCBkeDAgXHgzZCAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHkwIFx4M2QgLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR4MSBceDNkICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTEgXHgzZCArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0c2hhZG93IFx4M2QgKFxuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKVxuXHRcdFx0KSAqICggMS4wIC8gOS4wICk7XG5cdFx0I2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHNoYWRvdyBceDNkIFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbHNlXG5cdFx0XHRzaGFkb3cgXHgzZCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7XG5cdFx0I2VuZGlmXG5cdFx0fVxuXHRcdHJldHVybiBzaGFkb3c7XG5cdH1cblx0dmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkge1xuXHRcdHZlYzMgYWJzViBceDNkIGFicyggdiApO1xuXHRcdGZsb2F0IHNjYWxlVG9DdWJlIFx4M2QgMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApO1xuXHRcdGFic1YgKlx4M2Qgc2NhbGVUb0N1YmU7XG5cdFx0diAqXHgzZCBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApO1xuXHRcdHZlYzIgcGxhbmFyIFx4M2Qgdi54eTtcblx0XHRmbG9hdCBhbG1vc3RBVGV4ZWwgXHgzZCAxLjUgKiB0ZXhlbFNpemVZO1xuXHRcdGZsb2F0IGFsbW9zdE9uZSBceDNkIDEuMCAtIGFsbW9zdEFUZXhlbDtcblx0XHRpZiAoIGFic1YueiBceDNlXHgzZCBhbG1vc3RPbmUgKSB7XG5cdFx0XHRpZiAoIHYueiBceDNlIDAuMCApXG5cdFx0XHRcdHBsYW5hci54IFx4M2QgNC4wIC0gdi54O1xuXHRcdH0gZWxzZSBpZiAoIGFic1YueCBceDNlXHgzZCBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWduWCBceDNkIHNpZ24oIHYueCApO1xuXHRcdFx0cGxhbmFyLnggXHgzZCB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YO1xuXHRcdH0gZWxzZSBpZiAoIGFic1YueSBceDNlXHgzZCBhbG1vc3RPbmUgKSB7XG5cdFx0XHRmbG9hdCBzaWduWSBceDNkIHNpZ24oIHYueSApO1xuXHRcdFx0cGxhbmFyLnggXHgzZCB2LnggKyAyLjAgKiBzaWduWSArIDIuMDtcblx0XHRcdHBsYW5hci55IFx4M2Qgdi56ICogc2lnblkgLSAyLjA7XG5cdFx0fVxuXHRcdHJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTtcblx0fVxuXHRmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHtcblx0XHR2ZWMyIHRleGVsU2l6ZSBceDNkIHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApO1xuXHRcdHZlYzMgbGlnaHRUb1Bvc2l0aW9uIFx4M2Qgc2hhZG93Q29vcmQueHl6O1xuXHRcdGZsb2F0IGRwIFx4M2QgKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7XHRcdGRwICtceDNkIHNoYWRvd0JpYXM7XG5cdFx0dmVjMyBiZDNEIFx4M2Qgbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTtcblx0XHQjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKVxuXHRcdFx0dmVjMiBvZmZzZXQgXHgzZCB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55O1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwIClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmIiwKc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTIFx4M2UgMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIFx4M2UgMFxuXHRcdHVuaWZvcm0gbWF0NCBzcG90U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBceDNlIDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsCnNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gXHgzZCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gXHgzZCBzcG90U2hhZG93TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0dlBvaW50U2hhZG93Q29vcmRbIGkgXSBceDNkIHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuI2VuZGlmIiwKc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiJmbG9hdCBnZXRTaGFkb3dNYXNrKCkge1xuXHRmbG9hdCBzaGFkb3cgXHgzZCAxLjA7XG5cdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgXHgzZSAwXG5cdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCBceDNkIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07XG5cdFx0c2hhZG93ICpceDNkIGJvb2woIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93ICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBceDNlIDBcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCBceDNkIHNwb3RMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKlx4M2QgYm9vbCggc3BvdExpZ2h0LnNoYWRvdyApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBceDNlIDBcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHBvaW50TGlnaHQgXHgzZCBwb2ludExpZ2h0c1sgaSBdO1xuXHRcdHNoYWRvdyAqXHgzZCBib29sKCBwb2ludExpZ2h0LnNoYWRvdyApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHR9XG5cdCNlbmRpZlxuXHQjZW5kaWZcblx0cmV0dXJuIHNoYWRvdztcbn0iLApza2luYmFzZV92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0bWF0NCBib25lTWF0WCBceDNkIGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7XG5cdG1hdDQgYm9uZU1hdFkgXHgzZCBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueSApO1xuXHRtYXQ0IGJvbmVNYXRaIFx4M2QgZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTtcblx0bWF0NCBib25lTWF0VyBceDNkIGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7XG4jZW5kaWYiLHNraW5uaW5nX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeEludmVyc2U7XG5cdCNpZmRlZiBCT05FX1RFWFRVUkVcblx0XHR1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTtcblx0XHR1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0ZmxvYXQgaiBceDNkIGkgKiA0LjA7XG5cdFx0XHRmbG9hdCB4IFx4M2QgbW9kKCBqLCBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IHkgXHgzZCBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApO1xuXHRcdFx0ZmxvYXQgZHggXHgzZCAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHRmbG9hdCBkeSBceDNkIDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTtcblx0XHRcdHkgXHgzZCBkeSAqICggeSArIDAuNSApO1xuXHRcdFx0dmVjNCB2MSBceDNkIHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMC41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2MiBceDNkIHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMS41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2MyBceDNkIHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApO1xuXHRcdFx0dmVjNCB2NCBceDNkIHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMy41ICksIHkgKSApO1xuXHRcdFx0bWF0NCBib25lIFx4M2QgbWF0NCggdjEsIHYyLCB2MywgdjQgKTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2Vsc2Vcblx0XHR1bmlmb3JtIG1hdDQgYm9uZU1hdHJpY2VzWyBNQVhfQk9ORVMgXTtcblx0XHRtYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7XG5cdFx0XHRtYXQ0IGJvbmUgXHgzZCBib25lTWF0cmljZXNbIGludChpKSBdO1xuXHRcdFx0cmV0dXJuIGJvbmU7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsCnNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggXHgzZCBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgXHgzZCB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArXHgzZCBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgK1x4M2QgYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICtceDNkIGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArXHgzZCBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkIFx4M2QgKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCBceDNkIG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICtceDNkIHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICtceDNkIHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICtceDNkIHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICtceDNkIHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ICBceDNkIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIGJpbmRNYXRyaXg7XG5cdG9iamVjdE5vcm1hbCBceDNkIHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHRvYmplY3RUYW5nZW50IFx4M2QgdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xuXHQjZW5kaWZcbiNlbmRpZiIsCnNwZWN1bGFybWFwX2ZyYWdtZW50OiJmbG9hdCBzcGVjdWxhclN0cmVuZ3RoO1xuI2lmZGVmIFVTRV9TUEVDVUxBUk1BUFxuXHR2ZWM0IHRleGVsU3BlY3VsYXIgXHgzZCB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTtcblx0c3BlY3VsYXJTdHJlbmd0aCBceDNkIHRleGVsU3BlY3VsYXIucjtcbiNlbHNlXG5cdHNwZWN1bGFyU3RyZW5ndGggXHgzZCAxLjA7XG4jZW5kaWYiLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XG4jZW5kaWYiLHRvbmVtYXBwaW5nX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HIClcblx0Z2xfRnJhZ0NvbG9yLnJnYiBceDNkIHRvbmVNYXBwaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7XG4jZW5kaWYiLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZm5kZWYgc2F0dXJhdGVcblx0I2RlZmluZSBzYXR1cmF0ZShhKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7XG51bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nV2hpdGVQb2ludDtcbnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdHJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7XG59XG52ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICpceDNkIHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApO1xufVxuI2RlZmluZSBVbmNoYXJ0ZWQySGVscGVyKCB4ICkgbWF4KCAoICggeCAqICggMC4xNSAqIHggKyAwLjEwICogMC41MCApICsgMC4yMCAqIDAuMDIgKSAvICggeCAqICggMC4xNSAqIHggKyAwLjUwICkgKyAwLjIwICogMC4zMCApICkgLSAwLjAyIC8gMC4zMCwgdmVjMyggMC4wICkgKVxudmVjMyBVbmNoYXJ0ZWQyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICpceDNkIHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggVW5jaGFydGVkMkhlbHBlciggY29sb3IgKSAvIFVuY2hhcnRlZDJIZWxwZXIoIHZlYzMoIHRvbmVNYXBwaW5nV2hpdGVQb2ludCApICkgKTtcbn1cbnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICpceDNkIHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdGNvbG9yIFx4M2QgbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApO1xuXHRyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApO1xufVxudmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7XG5cdGNvbG9yICpceDNkIHRvbmVNYXBwaW5nRXhwb3N1cmU7XG5cdHJldHVybiBzYXR1cmF0ZSggKCBjb2xvciAqICggMi41MSAqIGNvbG9yICsgMC4wMyApICkgLyAoIGNvbG9yICogKCAyLjQzICogY29sb3IgKyAwLjU5ICkgKyAwLjE0ICkgKTtcbn0iLAp1dl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1VWXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiBceDNkICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyIFx4M2QgdXYyO1xuI2VuZGlmIiwKd29ybGRwb3NfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKVxuXHR2ZWM0IHdvcmxkUG9zaXRpb24gXHgzZCBtb2RlbE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcbiNlbmRpZiIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHR2ZWM0IHRleENvbG9yIFx4M2QgdGV4dHVyZTJEKCB0MkQsIHZVdiApO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xvciApO1xuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG59IixiYWNrZ3JvdW5kX3ZlcnQ6InZhcnlpbmcgdmVjMiB2VXY7XG51bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG52b2lkIG1haW4oKSB7XG5cdHZVdiBceDNkICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG5cdGdsX1Bvc2l0aW9uIFx4M2QgdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7XG59IiwKY3ViZV9mcmFnOiJ1bmlmb3JtIHNhbXBsZXJDdWJlIHRDdWJlO1xudW5pZm9ybSBmbG9hdCB0RmxpcDtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG52b2lkIG1haW4oKSB7XG5cdHZlYzQgdGV4Q29sb3IgXHgzZCB0ZXh0dXJlQ3ViZSggdEN1YmUsIHZlYzMoIHRGbGlwICogdldvcmxkRGlyZWN0aW9uLngsIHZXb3JsZERpcmVjdGlvbi55eiApICk7XG5cdGdsX0ZyYWdDb2xvciBceDNkIG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdGdsX0ZyYWdDb2xvci5hICpceDNkIG9wYWNpdHk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiBceDNkIHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0Z2xfUG9zaXRpb24ueiBceDNkIGdsX1Bvc2l0aW9uLnc7XG59IiwKZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgXHgzZFx4M2QgMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FscGhhbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19mcmFnbWVudFx4M2Vcblx0dmVjNCBkaWZmdXNlQ29sb3IgXHgzZCB2ZWM0KCAxLjAgKTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgXHgzZFx4M2QgMzIwMFxuXHRcdGRpZmZ1c2VDb2xvci5hIFx4M2Qgb3BhY2l0eTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhdGVzdF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaWYgREVQVEhfUEFDS0lORyBceDNkXHgzZCAzMjAwXG5cdFx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggdmVjMyggMS4wIC0gZ2xfRnJhZ0Nvb3JkLnogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HIFx4M2RceDNkIDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgXHgzZCBwYWNrRGVwdGhUb1JHQkEoIGdsX0ZyYWdDb29yZC56ICk7XG5cdCNlbmRpZlxufSIsCmRlcHRoX3ZlcnQ6IiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NraW5uaW5nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY3V2X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSBceDNjYmVnaW5ub3JtYWxfdmVydGV4XHgzZVxuXHRcdCNpbmNsdWRlIFx4M2Ntb3JwaG5vcm1hbF92ZXJ0ZXhceDNlXG5cdFx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjZW5kaWZcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5uaW5nX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG59IiwKZGlzdGFuY2VSR0JBX2ZyYWc6IiNkZWZpbmUgRElTVEFOQ0VcbnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjtcbnVuaWZvcm0gZmxvYXQgbmVhckRpc3RhbmNlO1xudW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTtcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FscGhhbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4gKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIDEuMCApO1xuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGFtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYXRlc3RfZnJhZ21lbnRceDNlXG5cdGZsb2F0IGRpc3QgXHgzZCBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTtcblx0ZGlzdCBceDNkICggZGlzdCAtIG5lYXJEaXN0YW5jZSApIC8gKCBmYXJEaXN0YW5jZSAtIG5lYXJEaXN0YW5jZSApO1xuXHRkaXN0IFx4M2Qgc2F0dXJhdGUoIGRpc3QgKTtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7XG59IiwKZGlzdGFuY2VSR0JBX3ZlcnQ6IiNkZWZpbmUgRElTVEFOQ0VcbnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NraW5uaW5nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY3V2X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0XHQjaW5jbHVkZSBceDNjYmVnaW5ub3JtYWxfdmVydGV4XHgzZVxuXHRcdCNpbmNsdWRlIFx4M2Ntb3JwaG5vcm1hbF92ZXJ0ZXhceDNlXG5cdFx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjZW5kaWZcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5uaW5nX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3dvcmxkcG9zX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdHZXb3JsZFBvc2l0aW9uIFx4M2Qgd29ybGRQb3NpdGlvbi54eXo7XG59IiwKZXF1aXJlY3RfZnJhZzoidW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG52b2lkIG1haW4oKSB7XG5cdHZlYzMgZGlyZWN0aW9uIFx4M2Qgbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcblx0dmVjMiBzYW1wbGVVVjtcblx0c2FtcGxlVVYueSBceDNkIGFzaW4oIGNsYW1wKCBkaXJlY3Rpb24ueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRzYW1wbGVVVi54IFx4M2QgYXRhbiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0dmVjNCB0ZXhDb2xvciBceDNkIHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCBtYXBUZXhlbFRvTGluZWFyKCB0ZXhDb2xvciApO1xuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG59IiwKZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiBceDNkIHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcbn0iLGxpbmVkYXNoZWRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIGZsb2F0IGRhc2hTaXplO1xudW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19mcmFnbWVudFx4M2Vcblx0aWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApIFx4M2UgZGFzaFNpemUgKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgXHgzZCB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX2ZyYWdtZW50XHgzZVxuXHRvdXRnb2luZ0xpZ2h0IFx4M2QgZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcbn0iLApsaW5lZGFzaGVkX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2NhbGU7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZURpc3RhbmNlO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY29sb3JfdmVydGV4XHgzZVxuXHR2TGluZURpc3RhbmNlIFx4M2Qgc2NhbGUgKiBsaW5lRGlzdGFuY2U7XG5cdHZlYzQgbXZQb3NpdGlvbiBceDNkIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblx0Z2xfUG9zaXRpb24gXHgzZCBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfdmVydGV4XHgzZVxufSIsCm1lc2hiYXNpY19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2Ml9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FscGhhbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYW9tYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NsaWdodG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2Vudm1hcF9jb21tb25fcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NlbnZtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjc3BlY3VsYXJtYXBfZnJhZ21lbnRceDNlXG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0IFx4M2QgUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgK1x4M2QgdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArXHgzZCB2ZWMzKCAxLjAgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIFx4M2Nhb21hcF9mcmFnbWVudFx4M2Vcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICpceDNkIGRpZmZ1c2VDb2xvci5yZ2I7XG5cdHZlYzMgb3V0Z29pbmdMaWdodCBceDNkIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0I2luY2x1ZGUgXHgzY2Vudm1hcF9mcmFnbWVudFx4M2Vcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcbn0iLAptZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2N1djJfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2N1dl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N1djJfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaW5jbHVkZSBceDNjYmVnaW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGhub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkZWZhdWx0bm9ybWFsX3ZlcnRleFx4M2Vcblx0I2VuZGlmXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3dvcmxkcG9zX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX3ZlcnRleFx4M2Vcbn0iLAptZXNobGFtYmVydF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY3BhY2tpbmdceDNlXG4jaW5jbHVkZSBceDNjZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2Ml9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FscGhhbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYW9tYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NsaWdodG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2VtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2Vudm1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2JzZGZzXHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0c19wYXJzX2JlZ2luXHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hc2tfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCBceDNkIFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSBceDNkIGVtaXNzaXZlO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjc3BlY3VsYXJtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9mcmFnbWVudFx4M2Vcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlIFx4M2QgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArXHgzZCAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgXHgzY2xpZ2h0bWFwX2ZyYWdtZW50XHgzZVxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKlx4M2QgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgXHgzZCAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSBceDNkIHZMaWdodEZyb250O1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqXHgzZCBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSBceDNjYW9tYXBfZnJhZ21lbnRceDNlXG5cdHZlYzMgb3V0Z29pbmdMaWdodCBceDNkIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfZnJhZ21lbnRceDNlXG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXRoZXJpbmdfZnJhZ21lbnRceDNlXG59IiwKbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2N1djJfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2JzZGZzXHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0c19wYXJzX2JlZ2luXHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjdXYyX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2JlZ2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGVmYXVsdG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbGlnaHRzX2xhbWJlcnRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2hhZG93bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaG1hdGNhcF9mcmFnOiIjZGVmaW5lIE1BVENBUFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7XG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NhbHBoYW1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2J1bXBtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nub3JtYWxtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGFtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYXRlc3RfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfYmVnaW5ceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfbWFwc1x4M2Vcblx0dmVjMyB2aWV3RGlyIFx4M2Qgbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5cdHZlYzMgeCBceDNkIG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTtcblx0dmVjMyB5IFx4M2QgY3Jvc3MoIHZpZXdEaXIsIHggKTtcblx0dmVjMiB1diBceDNkIHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41O1xuXHQjaWZkZWYgVVNFX01BVENBUFxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgXHgzZCB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTtcblx0XHRtYXRjYXBDb2xvciBceDNkIG1hdGNhcFRleGVsVG9MaW5lYXIoIG1hdGNhcENvbG9yICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBtYXRjYXBDb2xvciBceDNkIHZlYzQoIDEuMCApO1xuXHQjZW5kaWZcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcbn0iLAptZXNobWF0Y2FwX3ZlcnQ6IiNkZWZpbmUgTUFUQ0FQXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2N1dl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2luYmFzZV92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2RlZmF1bHRub3JtYWxfdmVydGV4XHgzZVxuXHQjaWZuZGVmIEZMQVRfU0hBREVEXG5cdFx0dk5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX3ZlcnRleFx4M2Vcblx0dlZpZXdQb3NpdGlvbiBceDNkIC0gbXZQb3NpdGlvbi54eXo7XG59IiwKbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY3BhY2tpbmdceDNlXG4jaW5jbHVkZSBceDNjZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2Ml9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FscGhhbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYW9tYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NsaWdodG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2VtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2Vudm1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2dyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYnNkZnNceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRzX3BhcnNfYmVnaW5ceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYnVtcG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY25vcm1hbG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3NwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19mcmFnbWVudFx4M2Vcblx0dmVjNCBkaWZmdXNlQ29sb3IgXHgzZCB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0IFx4M2QgUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlIFx4M2QgZW1pc3NpdmU7XG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY21hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGFtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYXRlc3RfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NzcGVjdWxhcm1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY25vcm1hbF9mcmFnbWVudF9iZWdpblx4M2Vcblx0I2luY2x1ZGUgXHgzY25vcm1hbF9mcmFnbWVudF9tYXBzXHgzZVxuXHQjaW5jbHVkZSBceDNjZW1pc3NpdmVtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NsaWdodHNfcGhvbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NsaWdodHNfZnJhZ21lbnRfYmVnaW5ceDNlXG5cdCNpbmNsdWRlIFx4M2NsaWdodHNfZnJhZ21lbnRfbWFwc1x4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9lbmRceDNlXG5cdCNpbmNsdWRlIFx4M2Nhb21hcF9mcmFnbWVudFx4M2Vcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgXHgzY2Vudm1hcF9mcmFnbWVudFx4M2Vcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3RvbmVtYXBwaW5nX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZW5jb2RpbmdzX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2RpdGhlcmluZ19mcmFnbWVudFx4M2Vcbn0iLAptZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuI2VuZGlmXG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3V2Ml9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjdXYyX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2JlZ2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGVmYXVsdG5vcm1hbF92ZXJ0ZXhceDNlXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgXHgzZCBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG4jZW5kaWZcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5uaW5nX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdHZWaWV3UG9zaXRpb24gXHgzZCAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSBceDNjd29ybGRwb3NfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZW52bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NoYWRvd21hcF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfdmVydGV4XHgzZVxufSIsCm1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBSRUZMRUNUSVZJVFlcblx0I2RlZmluZSBDTEVBUkNPQVRcblx0I2RlZmluZSBUUkFOU1BBUkVOQ1lcbiNlbmRpZlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcztcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmZGVmIFRSQU5TUEFSRU5DWVxuXHR1bmlmb3JtIGZsb2F0IHRyYW5zcGFyZW5jeTtcbiNlbmRpZlxuI2lmZGVmIFJFRkxFQ1RJVklUWVxuXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcbiNlbmRpZlxuI2lmZGVmIENMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuO1xuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbiNpbmNsdWRlIFx4M2NkaXRoZXJpbmdfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nhb21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nic2Rmc1x4M2VcbiNpbmNsdWRlIFx4M2NjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2Vudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0c19wYXJzX2JlZ2luXHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2J1bXBtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nub3JtYWxtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGVhcmNvYXRfbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjcm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19mcmFnbWVudFx4M2Vcblx0dmVjNCBkaWZmdXNlQ29sb3IgXHgzZCB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0IFx4M2QgUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdHZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlIFx4M2QgZW1pc3NpdmU7XG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY21hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGFtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYXRlc3RfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nyb3VnaG5lc3NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtZXRhbG5lc3NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfYmVnaW5ceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfbWFwc1x4M2Vcblx0I2luY2x1ZGUgXHgzY2NsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW5ceDNlXG5cdCNpbmNsdWRlIFx4M2NjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHNceDNlXG5cdCNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19waHlzaWNhbF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9iZWdpblx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9tYXBzXHgzZVxuXHQjaW5jbHVkZSBceDNjbGlnaHRzX2ZyYWdtZW50X2VuZFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FvbWFwX2ZyYWdtZW50XHgzZVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVFJBTlNQQVJFTkNZXG5cdFx0ZGlmZnVzZUNvbG9yLmEgKlx4M2Qgc2F0dXJhdGUoIDEuIC0gdHJhbnNwYXJlbmN5ICsgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICkgKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXRoZXJpbmdfZnJhZ21lbnRceDNlXG59IiwKbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2N1djJfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjdXYyX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2JlZ2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGVmYXVsdG5vcm1hbF92ZXJ0ZXhceDNlXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgXHgzZCBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50IFx4M2Qgbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50IFx4M2Qgbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0dlZpZXdQb3NpdGlvbiBceDNkIC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX3ZlcnRleFx4M2Vcbn0iLApub3JtYWxfZnJhZzoiI2RlZmluZSBOT1JNQUxcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2J1bXBtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nub3JtYWxtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfYmVnaW5ceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfbWFwc1x4M2Vcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggcGFja05vcm1hbFRvUkdCKCBub3JtYWwgKSwgb3BhY2l0eSApO1xufSIsCm5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjYmVnaW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGhub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkZWZhdWx0bm9ybWFsX3ZlcnRleFx4M2VcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgXHgzZCBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRpZlxuI2VuZGlmXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfdmVydGV4XHgzZVxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dlZpZXdQb3NpdGlvbiBceDNkIC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLApwb2ludHNfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19mcmFnbWVudFx4M2Vcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfcGFydGljbGVfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhdGVzdF9mcmFnbWVudFx4M2Vcblx0b3V0Z29pbmdMaWdodCBceDNkIGRpZmZ1c2VDb2xvci5yZ2I7XG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIFx4M2NwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG59IiwKcG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2Njb2xvcl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0Z2xfUG9pbnRTaXplIFx4M2Qgc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgXHgzZCAoIHByb2plY3Rpb25NYXRyaXhbIDIgXVsgMyBdIFx4M2RceDNkIC0gMS4wICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICpceDNkICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfdmVydGV4XHgzZVxufSIsCnNoYWRvd19mcmFnOiJ1bmlmb3JtIHZlYzMgY29sb3I7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY3BhY2tpbmdceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYnNkZnNceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRzX3BhcnNfYmVnaW5ceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFza19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTtcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcbn0iLHNoYWRvd192ZXJ0OiIjaW5jbHVkZSBceDNjZm9nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hcF9wYXJzX3ZlcnRleFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjd29ybGRwb3NfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2hhZG93bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKc3ByaXRlX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzMgb3V0Z29pbmdMaWdodCBceDNkIHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHRvdXRnb2luZ0xpZ2h0IFx4M2QgZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3RvbmVtYXBwaW5nX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZW5jb2RpbmdzX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX2ZyYWdtZW50XHgzZVxufSIsCnNwcml0ZV92ZXJ0OiJ1bmlmb3JtIGZsb2F0IHJvdGF0aW9uO1xudW5pZm9ybSB2ZWMyIGNlbnRlcjtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY3V2X3ZlcnRleFx4M2Vcblx0dmVjNCBtdlBvc2l0aW9uIFx4M2QgbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdHZlYzIgc2NhbGU7XG5cdHNjYWxlLnggXHgzZCBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApO1xuXHRzY2FsZS55IFx4M2QgbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTtcblx0I2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OXG5cdFx0Ym9vbCBpc1BlcnNwZWN0aXZlIFx4M2QgKCBwcm9qZWN0aW9uTWF0cml4WyAyIF1bIDMgXSBceDNkXHgzZCAtIDEuMCApO1xuXHRcdGlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICpceDNkIC0gbXZQb3NpdGlvbi56O1xuXHQjZW5kaWZcblx0dmVjMiBhbGlnbmVkUG9zaXRpb24gXHgzZCAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTtcblx0dmVjMiByb3RhdGVkUG9zaXRpb247XG5cdHJvdGF0ZWRQb3NpdGlvbi54IFx4M2QgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0cm90YXRlZFBvc2l0aW9uLnkgXHgzZCBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRtdlBvc2l0aW9uLnh5ICtceDNkIHJvdGF0ZWRQb3NpdGlvbjtcblx0Z2xfUG9zaXRpb24gXHgzZCBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfdmVydGV4XHgzZVxufSJ9LApZYT17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgSSgxNTY1ODczNCl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH0sbWF4TWlwTGV2ZWw6e3ZhbHVlOjB9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSwKbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBkKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyLjVFLTR9LGZvZ05lYXI6e3ZhbHVlOjF9LGZvZ0Zhcjp7dmFsdWU6MkUzfSxmb2dDb2xvcjp7dmFsdWU6bmV3IEkoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9LHNoYWRvdzp7fSxzaGFkb3dCaWFzOnt9LApzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fSxzaGFkb3c6e30sc2hhZG93Qmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9LHNoYWRvdzp7fSxzaGFkb3dCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0sCnBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX19LHBvaW50czp7ZGlmZnVzZTp7dmFsdWU6bmV3IEkoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGx9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBJKDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sY2VudGVyOnt2YWx1ZTpuZXcgZCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgbH19fSx1ZD0Ke2Jhc2ljOnt1bmlmb3JtczpJYihbWWEuY29tbW9uLFlhLnNwZWN1bGFybWFwLFlhLmVudm1hcCxZYS5hb21hcCxZYS5saWdodG1hcCxZYS5mb2ddKSx2ZXJ0ZXhTaGFkZXI6d2IubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6d2IubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOkliKFtZYS5jb21tb24sWWEuc3BlY3VsYXJtYXAsWWEuZW52bWFwLFlhLmFvbWFwLFlhLmxpZ2h0bWFwLFlhLmVtaXNzaXZlbWFwLFlhLmZvZyxZYS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSSgwKX19XSksdmVydGV4U2hhZGVyOndiLm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6d2IubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOkliKFtZYS5jb21tb24sWWEuc3BlY3VsYXJtYXAsWWEuZW52bWFwLFlhLmFvbWFwLFlhLmxpZ2h0bWFwLFlhLmVtaXNzaXZlbWFwLFlhLmJ1bXBtYXAsWWEubm9ybWFsbWFwLFlhLmRpc3BsYWNlbWVudG1hcCxZYS5ncmFkaWVudG1hcCwKWWEuZm9nLFlhLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBJKDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IEkoMTExODQ4MSl9LHNoaW5pbmVzczp7dmFsdWU6MzB9fV0pLHZlcnRleFNoYWRlcjp3Yi5tZXNocGhvbmdfdmVydCxmcmFnbWVudFNoYWRlcjp3Yi5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOkliKFtZYS5jb21tb24sWWEuZW52bWFwLFlhLmFvbWFwLFlhLmxpZ2h0bWFwLFlhLmVtaXNzaXZlbWFwLFlhLmJ1bXBtYXAsWWEubm9ybWFsbWFwLFlhLmRpc3BsYWNlbWVudG1hcCxZYS5yb3VnaG5lc3NtYXAsWWEubWV0YWxuZXNzbWFwLFlhLmZvZyxZYS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgSSgwKX0scm91Z2huZXNzOnt2YWx1ZTouNX0sbWV0YWxuZXNzOnt2YWx1ZTouNX0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6d2IubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6d2IubWVzaHBoeXNpY2FsX2ZyYWd9LAptYXRjYXA6e3VuaWZvcm1zOkliKFtZYS5jb21tb24sWWEuYnVtcG1hcCxZYS5ub3JtYWxtYXAsWWEuZGlzcGxhY2VtZW50bWFwLFlhLmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6d2IubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOndiLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpJYihbWWEucG9pbnRzLFlhLmZvZ10pLHZlcnRleFNoYWRlcjp3Yi5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjp3Yi5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpJYihbWWEuY29tbW9uLFlhLmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjp3Yi5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6d2IubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6SWIoW1lhLmNvbW1vbixZYS5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6d2IuZGVwdGhfdmVydCwKZnJhZ21lbnRTaGFkZXI6d2IuZGVwdGhfZnJhZ30sbm9ybWFsOnt1bmlmb3JtczpJYihbWWEuY29tbW9uLFlhLmJ1bXBtYXAsWWEubm9ybWFsbWFwLFlhLmRpc3BsYWNlbWVudG1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOndiLm5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOndiLm5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOkliKFtZYS5zcHJpdGUsWWEuZm9nXSksdmVydGV4U2hhZGVyOndiLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOndiLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBsfSx0MkQ6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6d2IuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOndiLmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6e3RDdWJlOnt2YWx1ZTpudWxsfSx0RmxpcDp7dmFsdWU6LTF9LG9wYWNpdHk6e3ZhbHVlOjF9fSx2ZXJ0ZXhTaGFkZXI6d2IuY3ViZV92ZXJ0LApmcmFnbWVudFNoYWRlcjp3Yi5jdWJlX2ZyYWd9LGVxdWlyZWN0Ont1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOndiLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6d2IuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3JtczpJYihbWWEuY29tbW9uLFlhLmRpc3BsYWNlbWVudG1hcCx7cmVmZXJlbmNlUG9zaXRpb246e3ZhbHVlOm5ldyBnfSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxRTN9fV0pLHZlcnRleFNoYWRlcjp3Yi5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjp3Yi5kaXN0YW5jZVJHQkFfZnJhZ30sc2hhZG93Ont1bmlmb3JtczpJYihbWWEubGlnaHRzLFlhLmZvZyx7Y29sb3I6e3ZhbHVlOm5ldyBJKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6d2Iuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6d2Iuc2hhZG93X2ZyYWd9fTt1ZC5waHlzaWNhbD0Ke3VuaWZvcm1zOkliKFt1ZC5zdGFuZGFyZC51bmlmb3Jtcyx7dHJhbnNwYXJlbmN5Ont2YWx1ZTowfSxjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzczp7dmFsdWU6MH0sc2hlZW46e3ZhbHVlOm5ldyBJKDApfSxjbGVhcmNvYXROb3JtYWxTY2FsZTp7dmFsdWU6bmV3IGQoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6d2IubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6d2IubWVzaHBoeXNpY2FsX2ZyYWd9O2llLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHphLnByb3RvdHlwZSk7aWUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWllO3RkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7dGQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXRkO01kLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGsucHJvdG90eXBlKTtNZC5wcm90b3R5cGUuY29uc3RydWN0b3I9TWQ7TWQucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9CiEwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShNZC5wcm90b3R5cGUsImltYWdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmltYWdlfSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5pbWFnZT1ifX0pO0NmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGsucHJvdG90eXBlKTtDZi5wcm90b3R5cGUuY29uc3RydWN0b3I9Q2Y7Q2YucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO0RmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGsucHJvdG90eXBlKTtEZi5wcm90b3R5cGUuY29uc3RydWN0b3I9RGY7RGYucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgcm49bmV3IGssYXI9bmV3IENmLGNyPW5ldyBEZixzbj1uZXcgTWQsbG49W10sbm49W10scW49bmV3IEZsb2F0MzJBcnJheSgxNikscG49bmV3IEZsb2F0MzJBcnJheSg5KSxvbj1uZXcgRmxvYXQzMkFycmF5KDQpO3RuLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihiKXt2YXIgZT10aGlzLmNhY2hlO2IgaW5zdGFuY2VvZgpGbG9hdDMyQXJyYXkmJmUubGVuZ3RoIT09Yi5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkoYi5sZW5ndGgpKTtJYyhlLGIpfTt1bi5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYixlLGgpe2Zvcih2YXIgbT10aGlzLnNlcSx1PTAsdz1tLmxlbmd0aDt1IT09dzsrK3Upe3ZhciBBPW1bdV07QS5zZXRWYWx1ZShiLGVbQS5pZF0saCl9fTt2YXIgb2s9LyhbXHdcZF9dKykoXF0pPyhcW3xcLik/L2c7bGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKGIsZSxoLG0pe2U9dGhpcy5tYXBbZV07dm9pZCAwIT09ZSYmZS5zZXRWYWx1ZShiLGgsbSl9O2xlLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihiLGUsaCl7ZT1lW2hdO3ZvaWQgMCE9PWUmJnRoaXMuc2V0VmFsdWUoYixoLGUpfTtsZS51cGxvYWQ9ZnVuY3Rpb24oYixlLGgsbSl7Zm9yKHZhciB1PTAsdz1lLmxlbmd0aDt1IT09dzsrK3Upe3ZhciBBPWVbdV0sRT1oW0EuaWRdOyExIT09RS5uZWVkc1VwZGF0ZSYmCkEuc2V0VmFsdWUoYixFLnZhbHVlLG0pfX07bGUuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPVtdLG09MCx1PWIubGVuZ3RoO20hPT11OysrbSl7dmFyIHc9YlttXTt3LmlkIGluIGUmJmgucHVzaCh3KX1yZXR1cm4gaH07dmFyIEdyPTAsUHI9MDttZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7bWUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW1lO21lLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO21lLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe00ucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZGVwdGhQYWNraW5nPWIuZGVwdGhQYWNraW5nO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0czt0aGlzLm1hcD1iLm1hcDt0aGlzLmFscGhhTWFwPWIuYWxwaGFNYXA7dGhpcy5kaXNwbGFjZW1lbnRNYXA9Yi5kaXNwbGFjZW1lbnRNYXA7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0KYi5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9Yi5kaXNwbGFjZW1lbnRCaWFzO3RoaXMud2lyZWZyYW1lPWIud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWIud2lyZWZyYW1lTGluZXdpZHRoO3JldHVybiB0aGlzfTtuZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7bmUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW5lO25lLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO25lLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe00ucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weShiLnJlZmVyZW5jZVBvc2l0aW9uKTt0aGlzLm5lYXJEaXN0YW5jZT1iLm5lYXJEaXN0YW5jZTt0aGlzLmZhckRpc3RhbmNlPWIuZmFyRGlzdGFuY2U7dGhpcy5za2lubmluZz1iLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzO3RoaXMubWFwPWIubWFwO3RoaXMuYWxwaGFNYXA9CmIuYWxwaGFNYXA7dGhpcy5kaXNwbGFjZW1lbnRNYXA9Yi5kaXNwbGFjZW1lbnRNYXA7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1iLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXM7cmV0dXJuIHRoaXN9O0ZmLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpGZixpc0dyb3VwOiEwfSk7JGcucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShBYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjokZyxpc0FycmF5Q2FtZXJhOiEwfSk7dmFyIEhuPW5ldyBnLEluPW5ldyBnO09iamVjdC5hc3NpZ24ocWsucHJvdG90eXBlLGMucHJvdG90eXBlKTtPYmplY3QuYXNzaWduKEpuLnByb3RvdHlwZSxjLnByb3RvdHlwZSk7T2JqZWN0LmFzc2lnbih3aS5wcm90b3R5cGUse2lzRm9nRXhwMjohMCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgd2kodGhpcy5jb2xvciwKdGhpcy5kZW5zaXR5KX0sdG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkZvZ0V4cDIiLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksZGVuc2l0eTp0aGlzLmRlbnNpdHl9fX0pO09iamVjdC5hc3NpZ24oeGkucHJvdG90eXBlLHtpc0ZvZzohMCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgeGkodGhpcy5jb2xvcix0aGlzLm5lYXIsdGhpcy5mYXIpfSx0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE9lLnByb3RvdHlwZSwibmVlZHNVcGRhdGUiLHtzZXQ6ZnVuY3Rpb24oYil7ITA9PT1iJiZ0aGlzLnZlcnNpb24rK319KTtPYmplY3QuYXNzaWduKE9lLnByb3RvdHlwZSx7aXNJbnRlcmxlYXZlZEJ1ZmZlcjohMCxvblVwbG9hZENhbGxiYWNrOmZ1bmN0aW9uKCl7fSxzZXRBcnJheTpmdW5jdGlvbihiKXtpZihBcnJheS5pc0FycmF5KGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7CnRoaXMuY291bnQ9dm9pZCAwIT09Yj9iLmxlbmd0aC90aGlzLnN0cmlkZTowO3RoaXMuYXJyYXk9YjtyZXR1cm4gdGhpc30sc2V0RHluYW1pYzpmdW5jdGlvbihiKXt0aGlzLmR5bmFtaWM9YjtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbihiKXt0aGlzLmFycmF5PW5ldyBiLmFycmF5LmNvbnN0cnVjdG9yKGIuYXJyYXkpO3RoaXMuY291bnQ9Yi5jb3VudDt0aGlzLnN0cmlkZT1iLnN0cmlkZTt0aGlzLmR5bmFtaWM9Yi5keW5hbWljO3JldHVybiB0aGlzfSxjb3B5QXQ6ZnVuY3Rpb24oYixlLGgpe2IqPXRoaXMuc3RyaWRlO2gqPWUuc3RyaWRlO2Zvcih2YXIgbT0wLHU9dGhpcy5zdHJpZGU7bTx1O20rKyl0aGlzLmFycmF5W2IrbV09ZS5hcnJheVtoK21dO3JldHVybiB0aGlzfSxzZXQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoZT0wKTt0aGlzLmFycmF5LnNldChiLGUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sCm9uVXBsb2FkOmZ1bmN0aW9uKGIpe3RoaXMub25VcGxvYWRDYWxsYmFjaz1iO3JldHVybiB0aGlzfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGJoLnByb3RvdHlwZSx7Y291bnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuY291bnR9fSxhcnJheTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX19fSk7T2JqZWN0LmFzc2lnbihiaC5wcm90b3R5cGUse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsc2V0WDpmdW5jdGlvbihiLGUpe3RoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdPWU7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYixlKXt0aGlzLmRhdGEuYXJyYXlbYip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWU7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYixlKXt0aGlzLmRhdGEuYXJyYXlbYip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPWU7cmV0dXJuIHRoaXN9LApzZXRXOmZ1bmN0aW9uKGIsZSl7dGhpcy5kYXRhLmFycmF5W2IqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lO3JldHVybiB0aGlzfSxnZXRYOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbYip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XX0sZ2V0WTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2IqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX0sZ2V0WjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2IqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX0sZ2V0VzpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2IqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXX0sc2V0WFk6ZnVuY3Rpb24oYixlLGgpe2I9Yip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O3RoaXMuZGF0YS5hcnJheVtiKzBdPWU7dGhpcy5kYXRhLmFycmF5W2IrMV09aDtyZXR1cm4gdGhpc30sc2V0WFlaOmZ1bmN0aW9uKGIsCmUsaCxtKXtiPWIqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYiswXT1lO3RoaXMuZGF0YS5hcnJheVtiKzFdPWg7dGhpcy5kYXRhLmFycmF5W2IrMl09bTtyZXR1cm4gdGhpc30sc2V0WFlaVzpmdW5jdGlvbihiLGUsaCxtLHUpe2I9Yip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O3RoaXMuZGF0YS5hcnJheVtiKzBdPWU7dGhpcy5kYXRhLmFycmF5W2IrMV09aDt0aGlzLmRhdGEuYXJyYXlbYisyXT1tO3RoaXMuZGF0YS5hcnJheVtiKzNdPXU7cmV0dXJuIHRoaXN9fSk7cmUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO3JlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yZTtyZS5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDtyZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtNLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5tYXA9Yi5tYXA7dGhpcy5yb3RhdGlvbj0KYi5yb3RhdGlvbjt0aGlzLnNpemVBdHRlbnVhdGlvbj1iLnNpemVBdHRlbnVhdGlvbjtyZXR1cm4gdGhpc307dmFyIExmLFJoPW5ldyBnLHhnPW5ldyBnLHlnPW5ldyBnLE1mPW5ldyBkLGRoPW5ldyBkLE9uPW5ldyByLG5qPW5ldyBnLFNoPW5ldyBnLG9qPW5ldyBnLHRvPW5ldyBkLG5sPW5ldyBkLHVvPW5ldyBkO2NoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpjaCxpc1Nwcml0ZTohMCxyYXljYXN0OmZ1bmN0aW9uKGIsZSl7bnVsbD09PWIuY2FtZXJhJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyk7eGcuc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpO09uLmNvcHkoYi5jYW1lcmEubWF0cml4V29ybGQpO3RoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoYi5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLAp0aGlzLm1hdHJpeFdvcmxkKTt5Zy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpO2IuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJiExPT09dGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb24mJnhnLm11bHRpcGx5U2NhbGFyKC15Zy56KTt2YXIgaD10aGlzLm1hdGVyaWFsLnJvdGF0aW9uO2lmKDAhPT1oKXt2YXIgbT1NYXRoLmNvcyhoKTt2YXIgdT1NYXRoLnNpbihoKX1oPXRoaXMuY2VudGVyO3lpKG5qLnNldCgtLjUsLS41LDApLHlnLGgseGcsdSxtKTt5aShTaC5zZXQoLjUsLS41LDApLHlnLGgseGcsdSxtKTt5aShvai5zZXQoLjUsLjUsMCkseWcsaCx4Zyx1LG0pO3RvLnNldCgwLDApO25sLnNldCgxLDApO3VvLnNldCgxLDEpO3ZhciB3PWIucmF5LmludGVyc2VjdFRyaWFuZ2xlKG5qLFNoLG9qLCExLFJoKTtpZihudWxsPT09dyYmKHlpKFNoLnNldCgtLjUsLjUsMCkseWcsaCx4Zyx1LG0pLG5sLnNldCgwLDEpLHc9Yi5yYXkuaW50ZXJzZWN0VHJpYW5nbGUobmosCm9qLFNoLCExLFJoKSxudWxsPT09dykpcmV0dXJuO3U9Yi5yYXkub3JpZ2luLmRpc3RhbmNlVG8oUmgpO3U8Yi5uZWFyfHx1PmIuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOnUscG9pbnQ6UmguY2xvbmUoKSx1djpCLmdldFVWKFJoLG5qLFNoLG9qLHRvLG5sLHVvLG5ldyBkKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7eS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dm9pZCAwIT09Yi5jZW50ZXImJnRoaXMuY2VudGVyLmNvcHkoYi5jZW50ZXIpO3JldHVybiB0aGlzfX0pO3ZhciBwaj1uZXcgZyx2bz1uZXcgZztlaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHkucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6ZWgsaXNMT0Q6ITAsY29weTpmdW5jdGlvbihiKXt5LnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYiwhMSk7Yj1iLmxldmVscztmb3IodmFyIGU9MCxoPWIubGVuZ3RoO2U8aDtlKyspe3ZhciBtPWJbZV07dGhpcy5hZGRMZXZlbChtLm9iamVjdC5jbG9uZSgpLG0uZGlzdGFuY2UpfXJldHVybiB0aGlzfSxhZGRMZXZlbDpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO2U9TWF0aC5hYnMoZSk7Zm9yKHZhciBoPXRoaXMubGV2ZWxzLG09MDttPGgubGVuZ3RoJiYhKGU8aFttXS5kaXN0YW5jZSk7bSsrKTtoLnNwbGljZShtLDAse2Rpc3RhbmNlOmUsb2JqZWN0OmJ9KTt0aGlzLmFkZChiKTtyZXR1cm4gdGhpc30sZ2V0T2JqZWN0Rm9yRGlzdGFuY2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPXRoaXMubGV2ZWxzLGg9MSxtPWUubGVuZ3RoO2g8bSYmIShiPGVbaF0uZGlzdGFuY2UpO2grKyk7cmV0dXJuIGVbaC0xXS5vYmplY3R9LHJheWNhc3Q6ZnVuY3Rpb24oYixlKXtwai5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShiLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhwaikpLnJheWNhc3QoYiwKZSl9LHVwZGF0ZTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmxldmVscztpZigxPGUubGVuZ3RoKXtwai5zZXRGcm9tTWF0cml4UG9zaXRpb24oYi5tYXRyaXhXb3JsZCk7dm8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO2I9cGouZGlzdGFuY2VUbyh2byk7ZVswXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodmFyIGg9MSxtPWUubGVuZ3RoO2g8bTtoKyspaWYoYj49ZVtoXS5kaXN0YW5jZSllW2gtMV0ub2JqZWN0LnZpc2libGU9ITEsZVtoXS5vYmplY3QudmlzaWJsZT0hMDtlbHNlIGJyZWFrO2Zvcig7aDxtO2grKyllW2hdLm9iamVjdC52aXNpYmxlPSExfX0sdG9KU09OOmZ1bmN0aW9uKGIpe2I9eS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtiLm9iamVjdC5sZXZlbHM9W107Zm9yKHZhciBlPXRoaXMubGV2ZWxzLGg9MCxtPWUubGVuZ3RoO2g8bTtoKyspe3ZhciB1PWVbaF07Yi5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDp1Lm9iamVjdC51dWlkLApkaXN0YW5jZTp1LmRpc3RhbmNlfSl9cmV0dXJuIGJ9fSk7ZmgucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh5YS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpmaCxpc1NraW5uZWRNZXNoOiEwLGJpbmQ6ZnVuY3Rpb24oYixlKXt0aGlzLnNrZWxldG9uPWI7dm9pZCAwPT09ZSYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxlPXRoaXMubWF0cml4V29ybGQpO3RoaXMuYmluZE1hdHJpeC5jb3B5KGUpO3RoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZShlKX0scG9zZTpmdW5jdGlvbigpe3RoaXMuc2tlbGV0b24ucG9zZSgpfSxub3JtYWxpemVTa2luV2VpZ2h0czpmdW5jdGlvbigpe2Zvcih2YXIgYj1uZXcgbixlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0LGg9MCxtPWUuY291bnQ7aDxtO2grKyl7Yi54PWUuZ2V0WChoKTtiLnk9ZS5nZXRZKGgpO2Iuej1lLmdldFooaCk7CmIudz1lLmdldFcoaCk7dmFyIHU9MS9iLm1hbmhhdHRhbkxlbmd0aCgpO0luZmluaXR5IT09dT9iLm11bHRpcGx5U2NhbGFyKHUpOmIuc2V0KDEsMCwwLDApO2Uuc2V0WFlaVyhoLGIueCxiLnksYi56LGIudyl9fSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbihiKXt5YS5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpOyJhdHRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZSh0aGlzLm1hdHJpeFdvcmxkKToiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5iaW5kTWF0cml4KTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7CnZhciB3bz1uZXcgcixFcz1uZXcgcjtPYmplY3QuYXNzaWduKHppLnByb3RvdHlwZSx7Y2FsY3VsYXRlSW52ZXJzZXM6ZnVuY3Rpb24oKXt0aGlzLmJvbmVJbnZlcnNlcz1bXTtmb3IodmFyIGI9MCxlPXRoaXMuYm9uZXMubGVuZ3RoO2I8ZTtiKyspe3ZhciBoPW5ldyByO3RoaXMuYm9uZXNbYl0mJmguZ2V0SW52ZXJzZSh0aGlzLmJvbmVzW2JdLm1hdHJpeFdvcmxkKTt0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKGgpfX0scG9zZTpmdW5jdGlvbigpe3ZhciBiLGU7dmFyIGg9MDtmb3IoZT10aGlzLmJvbmVzLmxlbmd0aDtoPGU7aCsrKShiPXRoaXMuYm9uZXNbaF0pJiZiLm1hdHJpeFdvcmxkLmdldEludmVyc2UodGhpcy5ib25lSW52ZXJzZXNbaF0pO2g9MDtmb3IoZT10aGlzLmJvbmVzLmxlbmd0aDtoPGU7aCsrKWlmKGI9dGhpcy5ib25lc1toXSliLnBhcmVudCYmYi5wYXJlbnQuaXNCb25lPyhiLm1hdHJpeC5nZXRJbnZlcnNlKGIucGFyZW50Lm1hdHJpeFdvcmxkKSxiLm1hdHJpeC5tdWx0aXBseShiLm1hdHJpeFdvcmxkKSk6CmIubWF0cml4LmNvcHkoYi5tYXRyaXhXb3JsZCksYi5tYXRyaXguZGVjb21wb3NlKGIucG9zaXRpb24sYi5xdWF0ZXJuaW9uLGIuc2NhbGUpfSx1cGRhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5ib25lcyxlPXRoaXMuYm9uZUludmVyc2VzLGg9dGhpcy5ib25lTWF0cmljZXMsbT10aGlzLmJvbmVUZXh0dXJlLHU9MCx3PWIubGVuZ3RoO3U8dzt1Kyspd28ubXVsdGlwbHlNYXRyaWNlcyhiW3VdP2JbdV0ubWF0cml4V29ybGQ6RXMsZVt1XSksd28udG9BcnJheShoLDE2KnUpO3ZvaWQgMCE9PW0mJihtLm5lZWRzVXBkYXRlPSEwKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHppKHRoaXMuYm9uZXMsdGhpcy5ib25lSW52ZXJzZXMpfSxnZXRCb25lQnlOYW1lOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT0wLGg9dGhpcy5ib25lcy5sZW5ndGg7ZTxoO2UrKyl7dmFyIG09dGhpcy5ib25lc1tlXTtpZihtLm5hbWU9PT1iKXJldHVybiBtfX19KTt4ay5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHkucHJvdG90eXBlKSwKe2NvbnN0cnVjdG9yOnhrLGlzQm9uZTohMH0pO09iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtPYi5wcm90b3R5cGUuY29uc3RydWN0b3I9T2I7T2IucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWw9ITA7T2IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7TS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMubGluZXdpZHRoPWIubGluZXdpZHRoO3RoaXMubGluZWNhcD1iLmxpbmVjYXA7dGhpcy5saW5lam9pbj1iLmxpbmVqb2luO3JldHVybiB0aGlzfTt2YXIgeG89bmV3IGcseW89bmV3IGcsem89bmV3IHIscWo9bmV3IEQsVGg9bmV3IEY7bWMucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh5LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm1jLGlzTGluZTohMCxjb21wdXRlTGluZURpc3RhbmNlczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2VvbWV0cnk7aWYoYi5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT0KYi5pbmRleCl7Zm9yKHZhciBlPWIuYXR0cmlidXRlcy5wb3NpdGlvbixoPVswXSxtPTEsdT1lLmNvdW50O208dTttKyspeG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0tMSkseW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLGhbbV09aFttLTFdLGhbbV0rPXhvLmRpc3RhbmNlVG8oeW8pO2IuYWRkQXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBkYShoLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSBpZihiLmlzR2VvbWV0cnkpZm9yKGU9Yi52ZXJ0aWNlcyxoPWIubGluZURpc3RhbmNlcyxoWzBdPTAsbT0xLHU9ZS5sZW5ndGg7bTx1O20rKyloW21dPWhbbS0xXSxoW21dKz1lW20tMV0uZGlzdGFuY2VUbyhlW21dKTtyZXR1cm4gdGhpc30scmF5Y2FzdDpmdW5jdGlvbihiLGUpe3ZhciBoPWIubGluZVByZWNpc2lvbiwKbT10aGlzLmdlb21ldHJ5LHU9dGhpcy5tYXRyaXhXb3JsZDtudWxsPT09bS5ib3VuZGluZ1NwaGVyZSYmbS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtUaC5jb3B5KG0uYm91bmRpbmdTcGhlcmUpO1RoLmFwcGx5TWF0cml4NCh1KTtUaC5yYWRpdXMrPWg7aWYoITEhPT1iLnJheS5pbnRlcnNlY3RzU3BoZXJlKFRoKSl7em8uZ2V0SW52ZXJzZSh1KTtxai5jb3B5KGIucmF5KS5hcHBseU1hdHJpeDQoem8pO2gvPSh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMztoKj1oO3ZhciB3PW5ldyBnLEE9bmV3IGc7dT1uZXcgZzt2YXIgRT1uZXcgZyxHPXRoaXMmJnRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKG0uaXNCdWZmZXJHZW9tZXRyeSl7dmFyIEo9bS5pbmRleCxRPW0uYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtpZihudWxsIT09Sil7Sj1KLmFycmF5O209MDtmb3IodmFyIFM9Si5sZW5ndGgtMTttPFM7bSs9Ryl7dmFyIFQ9SlttKzFdO3cuZnJvbUFycmF5KFEsCjMqSlttXSk7QS5mcm9tQXJyYXkoUSwzKlQpO1Q9cWouZGlzdGFuY2VTcVRvU2VnbWVudCh3LEEsRSx1KTtUPmh8fChFLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxUPWIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKEUpLFQ8Yi5uZWFyfHxUPmIuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOlQscG9pbnQ6dS5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDptLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pKX19ZWxzZSBmb3IobT0wLFM9US5sZW5ndGgvMy0xO208UzttKz1HKXcuZnJvbUFycmF5KFEsMyptKSxBLmZyb21BcnJheShRLDMqbSszKSxUPXFqLmRpc3RhbmNlU3FUb1NlZ21lbnQodyxBLEUsdSksVD5ofHwoRS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksVD1iLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhFKSxUPGIubmVhcnx8VD5iLmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTpULHBvaW50OnUuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksCmluZGV4Om0sZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfWVsc2UgaWYobS5pc0dlb21ldHJ5KWZvcih3PW0udmVydGljZXMsQT13Lmxlbmd0aCxtPTA7bTxBLTE7bSs9RylUPXFqLmRpc3RhbmNlU3FUb1NlZ21lbnQod1ttXSx3W20rMV0sRSx1KSxUPmh8fChFLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxUPWIucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKEUpLFQ8Yi5uZWFyfHxUPmIuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOlQscG9pbnQ6dS5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDptLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pKX19LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7dmFyIHJqPW5ldyBnLHNqPW5ldyBnO1NiLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWMucHJvdG90eXBlKSwKe2NvbnN0cnVjdG9yOlNiLGlzTGluZVNlZ21lbnRzOiEwLGNvbXB1dGVMaW5lRGlzdGFuY2VzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZW9tZXRyeTtpZihiLmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PWIuaW5kZXgpe2Zvcih2YXIgZT1iLmF0dHJpYnV0ZXMucG9zaXRpb24saD1bXSxtPTAsdT1lLmNvdW50O208dTttKz0yKXJqLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxtKSxzai5mcm9tQnVmZmVyQXR0cmlidXRlKGUsbSsxKSxoW21dPTA9PT1tPzA6aFttLTFdLGhbbSsxXT1oW21dK3JqLmRpc3RhbmNlVG8oc2opO2IuYWRkQXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBkYShoLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIGlmKGIuaXNHZW9tZXRyeSlmb3IoZT1iLnZlcnRpY2VzLGg9CmIubGluZURpc3RhbmNlcyxtPTAsdT1lLmxlbmd0aDttPHU7bSs9Milyai5jb3B5KGVbbV0pLHNqLmNvcHkoZVttKzFdKSxoW21dPTA9PT1tPzA6aFttLTFdLGhbbSsxXT1oW21dK3JqLmRpc3RhbmNlVG8oc2opO3JldHVybiB0aGlzfX0pO0FpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6QWksaXNMaW5lTG9vcDohMH0pO2NkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtjZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2Q7Y2QucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7Y2QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7TS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMubWFwPWIubWFwO3RoaXMuc2l6ZT1iLnNpemU7dGhpcy5zaXplQXR0ZW51YXRpb249Yi5zaXplQXR0ZW51YXRpb247dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7CnJldHVybiB0aGlzfTt2YXIgQW89bmV3IHIsems9bmV3IEQsVWg9bmV3IEYsdGo9bmV3IGc7TmYucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh5LnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk5mLGlzUG9pbnRzOiEwLHJheWNhc3Q6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLmdlb21ldHJ5LG09dGhpcy5tYXRyaXhXb3JsZCx1PWIucGFyYW1zLlBvaW50cy50aHJlc2hvbGQ7bnVsbD09PWguYm91bmRpbmdTcGhlcmUmJmguY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7VWguY29weShoLmJvdW5kaW5nU3BoZXJlKTtVaC5hcHBseU1hdHJpeDQobSk7VWgucmFkaXVzKz11O2lmKCExIT09Yi5yYXkuaW50ZXJzZWN0c1NwaGVyZShVaCkpaWYoQW8uZ2V0SW52ZXJzZShtKSx6ay5jb3B5KGIucmF5KS5hcHBseU1hdHJpeDQoQW8pLHUvPSh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyx1Kj11LGguaXNCdWZmZXJHZW9tZXRyeSl7dmFyIHc9aC5pbmRleDsKaD1oLmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7aWYobnVsbCE9PXcpe3ZhciBBPXcuYXJyYXk7dz0wO2Zvcih2YXIgRT1BLmxlbmd0aDt3PEU7dysrKXt2YXIgRz1BW3ddO3RqLmZyb21BcnJheShoLDMqRyk7eWsodGosRyx1LG0sYixlLHRoaXMpfX1lbHNlIGZvcih3PTAsQT1oLmxlbmd0aC8zO3c8QTt3KyspdGouZnJvbUFycmF5KGgsMyp3KSx5ayh0aix3LHUsbSxiLGUsdGhpcyl9ZWxzZSBmb3IoaD1oLnZlcnRpY2VzLHc9MCxBPWgubGVuZ3RoO3c8QTt3KyspeWsoaFt3XSx3LHUsbSxiLGUsdGhpcyl9LHVwZGF0ZU1vcnBoVGFyZ2V0czpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2VvbWV0cnk7aWYoYi5pc0J1ZmZlckdlb21ldHJ5KXtiPWIubW9ycGhBdHRyaWJ1dGVzO3ZhciBlPU9iamVjdC5rZXlzKGIpO2lmKDA8ZS5sZW5ndGgpe3ZhciBoPWJbZVswXV07aWYodm9pZCAwIT09aClmb3IodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9Cnt9LGI9MCxlPWgubGVuZ3RoO2I8ZTtiKyspe3ZhciBtPWhbYl0ubmFtZXx8U3RyaW5nKGIpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCk7dGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbbV09Yn19fWVsc2UgYj1iLm1vcnBoVGFyZ2V0cyx2b2lkIDAhPT1iJiYwPGIubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7QWsucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFrLGlzVmlkZW9UZXh0dXJlOiEwLHVwZGF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuaW1hZ2U7Yi5yZWFkeVN0YXRlPj0KYi5IQVZFX0NVUlJFTlRfREFUQSYmKHRoaXMubmVlZHNVcGRhdGU9ITApfX0pO09mLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGsucHJvdG90eXBlKTtPZi5wcm90b3R5cGUuY29uc3RydWN0b3I9T2Y7T2YucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7Z2gucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpO2doLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1naDtnaC5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO2hoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGsucHJvdG90eXBlKTtoaC5wcm90b3R5cGUuY29uc3RydWN0b3I9aGg7aGgucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO1BmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7UGYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVBmO2loLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHphLnByb3RvdHlwZSk7aWgucHJvdG90eXBlLmNvbnN0cnVjdG9yPWloO1FmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7ClFmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1RZjtqaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO2poLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1qaDtGYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO0ZjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GYztraC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO2toLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1raDtSZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShGYy5wcm90b3R5cGUpO1JmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SZjtsaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO2xoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1saDtQZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShGYy5wcm90b3R5cGUpO1BlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QZTttaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO21oLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KbWg7U2YucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRmMucHJvdG90eXBlKTtTZi5wcm90b3R5cGUuY29uc3RydWN0b3I9U2Y7bmgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemEucHJvdG90eXBlKTtuaC5wcm90b3R5cGUuY29uc3RydWN0b3I9bmg7VGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRmMucHJvdG90eXBlKTtUZi5wcm90b3R5cGUuY29uc3RydWN0b3I9VGY7b2gucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemEucHJvdG90eXBlKTtvaC5wcm90b3R5cGUuY29uc3RydWN0b3I9b2g7UWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtRZS5wcm90b3R5cGUuY29uc3RydWN0b3I9UWU7UWUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPXhhLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnBhdGg9dGhpcy5wYXJhbWV0ZXJzLnBhdGgudG9KU09OKCk7cmV0dXJuIGJ9O3BoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHphLnByb3RvdHlwZSk7CnBoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1waDtVZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO1VmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VZjtxaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO3FoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xaDtWZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO1ZmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WZjt2YXIgRnM9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKGIsZSxoKXtoPWh8fDI7dmFyIG09ZSYmZS5sZW5ndGgsdT1tP2VbMF0qaDpiLmxlbmd0aCx3PVBuKGIsMCx1LGgsITApLEE9W107aWYoIXd8fHcubmV4dD09PXcucHJldilyZXR1cm4gQTttJiYodz0kcihiLGUsdyxoKSk7aWYoYi5sZW5ndGg+ODAqaCl7dmFyIEU9ZT1iWzBdO3ZhciBHPW09YlsxXTtmb3IodmFyIEo9aDtKPHU7Sis9aCl7dmFyIFE9YltKXTt2YXIgUz1iW0orMV07UTxFJiYoRT1RKTtTPEcmJihHPVMpOwpRPmUmJihlPVEpO1M+bSYmKG09Uyl9UT1NYXRoLm1heChlLUUsbS1HKTtRPTAhPT1RPzEvUTowfXRoKHcsQSxoLEUsRyxRKTtyZXR1cm4gQX19LE9kPXthcmVhOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1iLmxlbmd0aCxoPTAsbT1lLTEsdT0wO3U8ZTttPXUrKyloKz1iW21dLngqYlt1XS55LWJbdV0ueCpiW21dLnk7cmV0dXJuLjUqaH0saXNDbG9ja1dpc2U6ZnVuY3Rpb24oYil7cmV0dXJuIDA+T2QuYXJlYShiKX0sdHJpYW5ndWxhdGVTaGFwZTpmdW5jdGlvbihiLGUpe3ZhciBoPVtdLG09W10sdT1bXTtUbihiKTtVbihoLGIpO3ZhciB3PWIubGVuZ3RoO2UuZm9yRWFjaChUbik7Zm9yKGI9MDtiPGUubGVuZ3RoO2IrKyltLnB1c2godyksdys9ZVtiXS5sZW5ndGgsVW4oaCxlW2JdKTtlPUZzLnRyaWFuZ3VsYXRlKGgsbSk7Zm9yKGI9MDtiPGUubGVuZ3RoO2IrPTMpdS5wdXNoKGUuc2xpY2UoYixiKzMpKTtyZXR1cm4gdX19O1NlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHphLnByb3RvdHlwZSk7ClNlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TZTtTZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9emEucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiBWbih0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLGIpfTt6ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO3pkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16ZDt6ZC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9eGEucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiBWbih0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLGIpfTt2YXIgaHM9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24oYixlLGgsbSx1KXtiPWVbMyptXTttPWVbMyptKzFdO3ZhciB3PWVbMyp1XTt1PWVbMyp1KzFdO3JldHVybltuZXcgZChlWzMqaF0sZVszKmgrMV0pLG5ldyBkKGIsbSksbmV3IGQodyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihiLAplLGgsbSx1LHcpe2I9ZVszKmhdO3ZhciBBPWVbMypoKzFdO2g9ZVszKmgrMl07dmFyIEU9ZVszKm1dLEc9ZVszKm0rMV07bT1lWzMqbSsyXTt2YXIgSj1lWzMqdV0sUT1lWzMqdSsxXTt1PWVbMyp1KzJdO3ZhciBTPWVbMyp3XSxUPWVbMyp3KzFdO2U9ZVszKncrMl07cmV0dXJuLjAxPk1hdGguYWJzKEEtRyk/W25ldyBkKGIsMS1oKSxuZXcgZChFLDEtbSksbmV3IGQoSiwxLXUpLG5ldyBkKFMsMS1lKV06W25ldyBkKEEsMS1oKSxuZXcgZChHLDEtbSksbmV3IGQoUSwxLXUpLG5ldyBkKFQsMS1lKV19fTt2aC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO3ZoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj12aDtYZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6ZC5wcm90b3R5cGUpO1hmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YZjt3aC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO3doLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj13aDtzZS5wcm90b3R5cGU9Ck9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtzZS5wcm90b3R5cGUuY29uc3RydWN0b3I9c2U7eGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemEucHJvdG90eXBlKTt4aC5wcm90b3R5cGUuY29uc3RydWN0b3I9eGg7WWYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtZZi5wcm90b3R5cGUuY29uc3RydWN0b3I9WWY7eWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemEucHJvdG90eXBlKTt5aC5wcm90b3R5cGUuY29uc3RydWN0b3I9eWg7WmYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtaZi5wcm90b3R5cGUuY29uc3RydWN0b3I9WmY7VGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemEucHJvdG90eXBlKTtUZS5wcm90b3R5cGUuY29uc3RydWN0b3I9VGU7VGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPXphLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gV24odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcywKYil9O1VlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7VWUucHJvdG90eXBlLmNvbnN0cnVjdG9yPVVlO1VlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj14YS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIFduKHRoaXMucGFyYW1ldGVycy5zaGFwZXMsYil9OyRmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7JGYucHJvdG90eXBlLmNvbnN0cnVjdG9yPSRmO1ZlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHphLnByb3RvdHlwZSk7VmUucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZlO1BkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7UGQucHJvdG90eXBlLmNvbnN0cnVjdG9yPVBkO3poLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFZlLnByb3RvdHlwZSk7emgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXpoO0FoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFBkLnByb3RvdHlwZSk7QWgucHJvdG90eXBlLmNvbnN0cnVjdG9yPQpBaDtCaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6YS5wcm90b3R5cGUpO0JoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CaDthZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO2FnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hZzt2YXIgQ2M9T2JqZWN0LmZyZWV6ZSh7V2lyZWZyYW1lR2VvbWV0cnk6UGYsUGFyYW1ldHJpY0dlb21ldHJ5OmloLFBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeTpRZixUZXRyYWhlZHJvbkdlb21ldHJ5OmtoLFRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnk6UmYsT2N0YWhlZHJvbkdlb21ldHJ5OmxoLE9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeTpQZSxJY29zYWhlZHJvbkdlb21ldHJ5Om1oLEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6U2YsRG9kZWNhaGVkcm9uR2VvbWV0cnk6bmgsRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VGYsUG9seWhlZHJvbkdlb21ldHJ5OmpoLFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTpGYyxUdWJlR2VvbWV0cnk6b2gsClR1YmVCdWZmZXJHZW9tZXRyeTpRZSxUb3J1c0tub3RHZW9tZXRyeTpwaCxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTpVZixUb3J1c0dlb21ldHJ5OnFoLFRvcnVzQnVmZmVyR2VvbWV0cnk6VmYsVGV4dEdlb21ldHJ5OnZoLFRleHRCdWZmZXJHZW9tZXRyeTpYZixTcGhlcmVHZW9tZXRyeTp3aCxTcGhlcmVCdWZmZXJHZW9tZXRyeTpzZSxSaW5nR2VvbWV0cnk6eGgsUmluZ0J1ZmZlckdlb21ldHJ5OllmLFBsYW5lR2VvbWV0cnk6aWUsUGxhbmVCdWZmZXJHZW9tZXRyeTp0ZCxMYXRoZUdlb21ldHJ5OnloLExhdGhlQnVmZmVyR2VvbWV0cnk6WmYsU2hhcGVHZW9tZXRyeTpUZSxTaGFwZUJ1ZmZlckdlb21ldHJ5OlVlLEV4dHJ1ZGVHZW9tZXRyeTpTZSxFeHRydWRlQnVmZmVyR2VvbWV0cnk6emQsRWRnZXNHZW9tZXRyeTokZixDb25lR2VvbWV0cnk6emgsQ29uZUJ1ZmZlckdlb21ldHJ5OkFoLEN5bGluZGVyR2VvbWV0cnk6VmUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTpQZCxDaXJjbGVHZW9tZXRyeTpCaCwKQ2lyY2xlQnVmZmVyR2VvbWV0cnk6YWcsQm94R2VvbWV0cnk6VWEsQm94QnVmZmVyR2VvbWV0cnk6WmF9KTtXZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7V2UucHJvdG90eXBlLmNvbnN0cnVjdG9yPVdlO1dlLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO1dlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe00ucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuY29sb3IuY29weShiLmNvbG9yKTtyZXR1cm4gdGhpc307YmcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodWIucHJvdG90eXBlKTtiZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Ymc7YmcucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7QWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTS5wcm90b3R5cGUpO0FkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BZDtBZC5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDtBZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtNLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYik7dGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn07dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMucm91Z2huZXNzPWIucm91Z2huZXNzO3RoaXMubWV0YWxuZXNzPWIubWV0YWxuZXNzO3RoaXMubWFwPWIubWFwO3RoaXMubGlnaHRNYXA9Yi5saWdodE1hcDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PWIubGlnaHRNYXBJbnRlbnNpdHk7dGhpcy5hb01hcD1iLmFvTWFwO3RoaXMuYW9NYXBJbnRlbnNpdHk9Yi5hb01hcEludGVuc2l0eTt0aGlzLmVtaXNzaXZlLmNvcHkoYi5lbWlzc2l2ZSk7dGhpcy5lbWlzc2l2ZU1hcD1iLmVtaXNzaXZlTWFwO3RoaXMuZW1pc3NpdmVJbnRlbnNpdHk9Yi5lbWlzc2l2ZUludGVuc2l0eTt0aGlzLmJ1bXBNYXA9Yi5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWIuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWIubm9ybWFsTWFwO3RoaXMubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGU7dGhpcy5ub3JtYWxTY2FsZS5jb3B5KGIubm9ybWFsU2NhbGUpOwp0aGlzLmRpc3BsYWNlbWVudE1hcD1iLmRpc3BsYWNlbWVudE1hcDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPWIuZGlzcGxhY2VtZW50U2NhbGU7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPWIuZGlzcGxhY2VtZW50Qmlhczt0aGlzLnJvdWdobmVzc01hcD1iLnJvdWdobmVzc01hcDt0aGlzLm1ldGFsbmVzc01hcD1iLm1ldGFsbmVzc01hcDt0aGlzLmFscGhhTWFwPWIuYWxwaGFNYXA7dGhpcy5lbnZNYXA9Yi5lbnZNYXA7dGhpcy5lbnZNYXBJbnRlbnNpdHk9Yi5lbnZNYXBJbnRlbnNpdHk7dGhpcy5yZWZyYWN0aW9uUmF0aW89Yi5yZWZyYWN0aW9uUmF0aW87dGhpcy53aXJlZnJhbWU9Yi53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9Yi53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy53aXJlZnJhbWVMaW5lY2FwPWIud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWIud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1iLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPQpiLm1vcnBoVGFyZ2V0czt0aGlzLm1vcnBoTm9ybWFscz1iLm1vcnBoTm9ybWFscztyZXR1cm4gdGhpc307WGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQWQucHJvdG90eXBlKTtYZS5wcm90b3R5cGUuY29uc3RydWN0b3I9WGU7WGUucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7WGUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7QWQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9O3RoaXMucmVmbGVjdGl2aXR5PWIucmVmbGVjdGl2aXR5O3RoaXMuY2xlYXJjb2F0PWIuY2xlYXJjb2F0O3RoaXMuY2xlYXJjb2F0Um91Z2huZXNzPWIuY2xlYXJjb2F0Um91Z2huZXNzO3RoaXMuc2hlZW49Yi5zaGVlbj8odGhpcy5zaGVlbnx8bmV3IEkpLmNvcHkoYi5zaGVlbik6bnVsbDt0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1iLmNsZWFyY29hdE5vcm1hbE1hcDt0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkoYi5jbGVhcmNvYXROb3JtYWxTY2FsZSk7CnRoaXMudHJhbnNwYXJlbmN5PWIudHJhbnNwYXJlbmN5O3JldHVybiB0aGlzfTtkZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7ZGQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRkO2RkLnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwO2RkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe00ucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuY29sb3IuY29weShiLmNvbG9yKTt0aGlzLnNwZWN1bGFyLmNvcHkoYi5zcGVjdWxhcik7dGhpcy5zaGluaW5lc3M9Yi5zaGluaW5lc3M7dGhpcy5tYXA9Yi5tYXA7dGhpcy5saWdodE1hcD1iLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9Yi5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWIuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShiLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWIuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT0KYi5lbWlzc2l2ZUludGVuc2l0eTt0aGlzLmJ1bXBNYXA9Yi5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWIuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWIubm9ybWFsTWFwO3RoaXMubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGU7dGhpcy5ub3JtYWxTY2FsZS5jb3B5KGIubm9ybWFsU2NhbGUpO3RoaXMuZGlzcGxhY2VtZW50TWFwPWIuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9Yi5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9Yi5kaXNwbGFjZW1lbnRCaWFzO3RoaXMuc3BlY3VsYXJNYXA9Yi5zcGVjdWxhck1hcDt0aGlzLmFscGhhTWFwPWIuYWxwaGFNYXA7dGhpcy5lbnZNYXA9Yi5lbnZNYXA7dGhpcy5jb21iaW5lPWIuY29tYmluZTt0aGlzLnJlZmxlY3Rpdml0eT1iLnJlZmxlY3Rpdml0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1iLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0KYi53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy53aXJlZnJhbWVMaW5lY2FwPWIud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWIud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1iLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWIubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtZZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkZC5wcm90b3R5cGUpO1llLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ZZTtZZS5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwO1llLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2RkLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmdyYWRpZW50TWFwPWIuZ3JhZGllbnRNYXA7cmV0dXJuIHRoaXN9O1plLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTtaZS5wcm90b3R5cGUuY29uc3RydWN0b3I9WmU7WmUucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPQohMDtaZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtNLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmJ1bXBNYXA9Yi5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWIuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWIubm9ybWFsTWFwO3RoaXMubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGU7dGhpcy5ub3JtYWxTY2FsZS5jb3B5KGIubm9ybWFsU2NhbGUpO3RoaXMuZGlzcGxhY2VtZW50TWFwPWIuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9Yi5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9Yi5kaXNwbGFjZW1lbnRCaWFzO3RoaXMud2lyZWZyYW1lPWIud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWIud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0czt0aGlzLm1vcnBoTm9ybWFscz1iLm1vcnBoTm9ybWFscztyZXR1cm4gdGhpc307CiRlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0ucHJvdG90eXBlKTskZS5wcm90b3R5cGUuY29uc3RydWN0b3I9JGU7JGUucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMDskZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtNLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5tYXA9Yi5tYXA7dGhpcy5saWdodE1hcD1iLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9Yi5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWIuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShiLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWIuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1iLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuc3BlY3VsYXJNYXA9Yi5zcGVjdWxhck1hcDt0aGlzLmFscGhhTWFwPWIuYWxwaGFNYXA7dGhpcy5lbnZNYXA9CmIuZW52TWFwO3RoaXMuY29tYmluZT1iLmNvbWJpbmU7dGhpcy5yZWZsZWN0aXZpdHk9Yi5yZWZsZWN0aXZpdHk7dGhpcy5yZWZyYWN0aW9uUmF0aW89Yi5yZWZyYWN0aW9uUmF0aW87dGhpcy53aXJlZnJhbWU9Yi53aXJlZnJhbWU7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9Yi53aXJlZnJhbWVMaW5ld2lkdGg7dGhpcy53aXJlZnJhbWVMaW5lY2FwPWIud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWIud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1iLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWIubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTthZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNLnByb3RvdHlwZSk7YWYucHJvdG90eXBlLmNvbnN0cnVjdG9yPWFmO2FmLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDthZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtNLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYik7dGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9O3RoaXMuY29sb3IuY29weShiLmNvbG9yKTt0aGlzLm1hdGNhcD1iLm1hdGNhcDt0aGlzLm1hcD1iLm1hcDt0aGlzLmJ1bXBNYXA9Yi5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWIuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWIubm9ybWFsTWFwO3RoaXMubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGU7dGhpcy5ub3JtYWxTY2FsZS5jb3B5KGIubm9ybWFsU2NhbGUpO3RoaXMuZGlzcGxhY2VtZW50TWFwPWIuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9Yi5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9Yi5kaXNwbGFjZW1lbnRCaWFzO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9Yi5tb3JwaE5vcm1hbHM7cmV0dXJuIHRoaXN9O2JmLnByb3RvdHlwZT0KT2JqZWN0LmNyZWF0ZShPYi5wcm90b3R5cGUpO2JmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iZjtiZi5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7YmYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7T2IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuc2NhbGU9Yi5zY2FsZTt0aGlzLmRhc2hTaXplPWIuZGFzaFNpemU7dGhpcy5nYXBTaXplPWIuZ2FwU2l6ZTtyZXR1cm4gdGhpc307dmFyIEdzPU9iamVjdC5mcmVlemUoe1NoYWRvd01hdGVyaWFsOldlLFNwcml0ZU1hdGVyaWFsOnJlLFJhd1NoYWRlck1hdGVyaWFsOmJnLFNoYWRlck1hdGVyaWFsOnViLFBvaW50c01hdGVyaWFsOmNkLE1lc2hQaHlzaWNhbE1hdGVyaWFsOlhlLE1lc2hTdGFuZGFyZE1hdGVyaWFsOkFkLE1lc2hQaG9uZ01hdGVyaWFsOmRkLE1lc2hUb29uTWF0ZXJpYWw6WWUsTWVzaE5vcm1hbE1hdGVyaWFsOlplLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6JGUsTWVzaERlcHRoTWF0ZXJpYWw6bWUsCk1lc2hEaXN0YW5jZU1hdGVyaWFsOm5lLE1lc2hCYXNpY01hdGVyaWFsOkwsTWVzaE1hdGNhcE1hdGVyaWFsOmFmLExpbmVEYXNoZWRNYXRlcmlhbDpiZixMaW5lQmFzaWNNYXRlcmlhbDpPYixNYXRlcmlhbDpNfSksamM9e2FycmF5U2xpY2U6ZnVuY3Rpb24oYixlLGgpe3JldHVybiBqYy5pc1R5cGVkQXJyYXkoYik/bmV3IGIuY29uc3RydWN0b3IoYi5zdWJhcnJheShlLHZvaWQgMCE9PWg/aDpiLmxlbmd0aCkpOmIuc2xpY2UoZSxoKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKGIsZSxoKXtyZXR1cm4hYnx8IWgmJmIuY29uc3RydWN0b3I9PT1lP2I6Im51bWJlciI9PT10eXBlb2YgZS5CWVRFU19QRVJfRUxFTUVOVD9uZXcgZShiKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKGIpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYikmJiEoYiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihiKXtmb3IodmFyIGU9CmIubGVuZ3RoLGg9QXJyYXkoZSksbT0wO20hPT1lOysrbSloW21dPW07aC5zb3J0KGZ1bmN0aW9uKHUsdyl7cmV0dXJuIGJbdV0tYlt3XX0pO3JldHVybiBofSxzb3J0ZWRBcnJheTpmdW5jdGlvbihiLGUsaCl7Zm9yKHZhciBtPWIubGVuZ3RoLHU9bmV3IGIuY29uc3RydWN0b3IobSksdz0wLEE9MDtBIT09bTsrK3cpZm9yKHZhciBFPWhbd10qZSxHPTA7RyE9PWU7KytHKXVbQSsrXT1iW0UrR107cmV0dXJuIHV9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKGIsZSxoLG0pe2Zvcih2YXIgdT0xLHc9YlswXTt2b2lkIDAhPT13JiZ2b2lkIDA9PT13W21dOyl3PWJbdSsrXTtpZih2b2lkIDAhPT13KXt2YXIgQT13W21dO2lmKHZvaWQgMCE9PUEpaWYoQXJyYXkuaXNBcnJheShBKSl7ZG8gQT13W21dLHZvaWQgMCE9PUEmJihlLnB1c2gody50aW1lKSxoLnB1c2guYXBwbHkoaCxBKSksdz1iW3UrK107d2hpbGUodm9pZCAwIT09dyl9ZWxzZSBpZih2b2lkIDAhPT1BLnRvQXJyYXkpe2RvIEE9d1ttXSwKdm9pZCAwIT09QSYmKGUucHVzaCh3LnRpbWUpLEEudG9BcnJheShoLGgubGVuZ3RoKSksdz1iW3UrK107d2hpbGUodm9pZCAwIT09dyl9ZWxzZXtkbyBBPXdbbV0sdm9pZCAwIT09QSYmKGUucHVzaCh3LnRpbWUpLGgucHVzaChBKSksdz1iW3UrK107d2hpbGUodm9pZCAwIT09dyl9fX19O09iamVjdC5hc3NpZ24oS2MucHJvdG90eXBlLHtldmFsdWF0ZTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxoPXRoaXMuX2NhY2hlZEluZGV4LG09ZVtoXSx1PWVbaC0xXTthOntiOntjOntkOmlmKCEoYjxtKSl7Zm9yKHZhciB3PWgrMjs7KXtpZih2b2lkIDA9PT1tKXtpZihiPHUpYnJlYWsgZDt0aGlzLl9jYWNoZWRJbmRleD1oPWUubGVuZ3RoO3JldHVybiB0aGlzLmFmdGVyRW5kXyhoLTEsYix1KX1pZihoPT09dylicmVhazt1PW07bT1lWysraF07aWYoYjxtKWJyZWFrIGJ9bT1lLmxlbmd0aDticmVhayBjfWlmKGI+PXUpYnJlYWsgYTtlbHNle3c9ZVsxXTtiPHcmJgooaD0yLHU9dyk7Zm9yKHc9aC0yOzspe2lmKHZvaWQgMD09PXUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxiLG0pO2lmKGg9PT13KWJyZWFrO209dTt1PWVbLS1oLTFdO2lmKGI+PXUpYnJlYWsgYn1tPWg7aD0wfX1mb3IoO2g8bTspdT1oK20+Pj4xLGI8ZVt1XT9tPXU6aD11KzE7bT1lW2hdO3U9ZVtoLTFdO2lmKHZvaWQgMD09PXUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxiLG0pO2lmKHZvaWQgMD09PW0pcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PWg9ZS5sZW5ndGgsdGhpcy5hZnRlckVuZF8oaC0xLHUsYil9dGhpcy5fY2FjaGVkSW5kZXg9aDt0aGlzLmludGVydmFsQ2hhbmdlZF8oaCx1LG0pfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhoLHUsYixtKX0sc2V0dGluZ3M6bnVsbCxEZWZhdWx0U2V0dGluZ3NfOnt9LGdldFNldHRpbmdzXzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldHRpbmdzfHwKdGhpcy5EZWZhdWx0U2V0dGluZ3NffSxjb3B5U2FtcGxlVmFsdWVfOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMucmVzdWx0QnVmZmVyLGg9dGhpcy5zYW1wbGVWYWx1ZXMsbT10aGlzLnZhbHVlU2l6ZTtiKj1tO2Zvcih2YXIgdT0wO3UhPT1tOysrdSllW3VdPWhbYit1XTtyZXR1cm4gZX0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIik7fSxpbnRlcnZhbENoYW5nZWRfOmZ1bmN0aW9uKCl7fX0pO09iamVjdC5hc3NpZ24oS2MucHJvdG90eXBlLHtiZWZvcmVTdGFydF86S2MucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sYWZ0ZXJFbmRfOktjLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVffSk7QmkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpCaSxEZWZhdWx0U2V0dGluZ3NfOntlbmRpbmdTdGFydDoyNDAwLGVuZGluZ0VuZDoyNDAwfSxpbnRlcnZhbENoYW5nZWRfOmZ1bmN0aW9uKGIsCmUsaCl7dmFyIG09dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsdT1iLTIsdz1iKzEsQT1tW3VdLEU9bVt3XTtpZih2b2lkIDA9PT1BKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIDI0MDE6dT1iO0E9MiplLWg7YnJlYWs7Y2FzZSAyNDAyOnU9bS5sZW5ndGgtMjtBPWUrbVt1XS1tW3UrMV07YnJlYWs7ZGVmYXVsdDp1PWIsQT1ofWlmKHZvaWQgMD09PUUpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIDI0MDE6dz1iO0U9MipoLWU7YnJlYWs7Y2FzZSAyNDAyOnc9MTtFPWgrbVsxXS1tWzBdO2JyZWFrO2RlZmF1bHQ6dz1iLTEsRT1lfWI9LjUqKGgtZSk7bT10aGlzLnZhbHVlU2l6ZTt0aGlzLl93ZWlnaHRQcmV2PWIvKGUtQSk7dGhpcy5fd2VpZ2h0TmV4dD1iLyhFLWgpO3RoaXMuX29mZnNldFByZXY9dSptO3RoaXMuX29mZnNldE5leHQ9dyptfSxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYixlLGgsbSl7dmFyIHU9dGhpcy5yZXN1bHRCdWZmZXIsCnc9dGhpcy5zYW1wbGVWYWx1ZXMsQT10aGlzLnZhbHVlU2l6ZTtiKj1BO3ZhciBFPWItQSxHPXRoaXMuX29mZnNldFByZXYsSj10aGlzLl9vZmZzZXROZXh0LFE9dGhpcy5fd2VpZ2h0UHJldixTPXRoaXMuX3dlaWdodE5leHQsVD0oaC1lKS8obS1lKTtoPVQqVDttPWgqVDtlPS1RKm0rMipRKmgtUSpUO1E9KDErUSkqbSsoLTEuNS0yKlEpKmgrKC0uNStRKSpUKzE7VD0oLTEtUykqbSsoMS41K1MpKmgrLjUqVDtTPVMqbS1TKmg7Zm9yKGg9MDtoIT09QTsrK2gpdVtoXT1lKndbRytoXStRKndbRStoXStUKndbYitoXStTKndbSitoXTtyZXR1cm4gdX19KTtDaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEtjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkNoLGludGVycG9sYXRlXzpmdW5jdGlvbihiLGUsaCxtKXt2YXIgdT10aGlzLnJlc3VsdEJ1ZmZlcix3PXRoaXMuc2FtcGxlVmFsdWVzLEE9dGhpcy52YWx1ZVNpemU7Yio9QTt2YXIgRT1iLUE7ZT0oaC1lKS8obS0KZSk7aD0xLWU7Zm9yKG09MDttIT09QTsrK20pdVttXT13W0UrbV0qaCt3W2IrbV0qZTtyZXR1cm4gdX19KTtDaS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEtjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkNpLGludGVycG9sYXRlXzpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jb3B5U2FtcGxlVmFsdWVfKGItMSl9fSk7T2JqZWN0LmFzc2lnbihvYyx7dG9KU09OOmZ1bmN0aW9uKGIpe3ZhciBlPWIuY29uc3RydWN0b3I7aWYodm9pZCAwIT09ZS50b0pTT04pZT1lLnRvSlNPTihiKTtlbHNle2U9e25hbWU6Yi5uYW1lLHRpbWVzOmpjLmNvbnZlcnRBcnJheShiLnRpbWVzLEFycmF5KSx2YWx1ZXM6amMuY29udmVydEFycmF5KGIudmFsdWVzLEFycmF5KX07dmFyIGg9Yi5nZXRJbnRlcnBvbGF0aW9uKCk7aCE9PWIuRGVmYXVsdEludGVycG9sYXRpb24mJihlLmludGVycG9sYXRpb249aCl9ZS50eXBlPWIuVmFsdWVUeXBlTmFtZTtyZXR1cm4gZX19KTtPYmplY3QuYXNzaWduKG9jLnByb3RvdHlwZSwKe2NvbnN0cnVjdG9yOm9jLFRpbWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxWYWx1ZUJ1ZmZlclR5cGU6RmxvYXQzMkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOjIzMDEsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBDaSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYil9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbihiKXtyZXR1cm4gbmV3IENoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSxiKX0sSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOmZ1bmN0aW9uKGIpe3JldHVybiBuZXcgQmkodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGIpfSxzZXRJbnRlcnBvbGF0aW9uOmZ1bmN0aW9uKGIpe3N3aXRjaChiKXtjYXNlIDIzMDA6dmFyIGU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTsKYnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7ZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrIiBrZXlmcmFtZSB0cmFjayBuYW1lZCAiK3RoaXMubmFtZTtpZih2b2lkIDA9PT10aGlzLmNyZWF0ZUludGVycG9sYW50KWlmKGIhPT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKTtlbHNlIHRocm93IEVycm9yKGUpO2NvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLGUpO3JldHVybiB0aGlzfXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9ZTtyZXR1cm4gdGhpc30sZ2V0SW50ZXJwb2xhdGlvbjpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIDIzMDA7CmNhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19LGdldFZhbHVlU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9LHNoaWZ0OmZ1bmN0aW9uKGIpe2lmKDAhPT1iKWZvcih2YXIgZT10aGlzLnRpbWVzLGg9MCxtPWUubGVuZ3RoO2ghPT1tOysraCllW2hdKz1iO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihiKXtpZigxIT09Yilmb3IodmFyIGU9dGhpcy50aW1lcyxoPTAsbT1lLmxlbmd0aDtoIT09bTsrK2gpZVtoXSo9YjtyZXR1cm4gdGhpc30sdHJpbTpmdW5jdGlvbihiLGUpe2Zvcih2YXIgaD10aGlzLnRpbWVzLG09aC5sZW5ndGgsdT0wLHc9bS0xO3UhPT1tJiZoW3VdPGI7KSsrdTtmb3IoOy0xIT09dyYmaFt3XT5lOyktLXc7Kyt3O2lmKDAhPT11fHx3IT09bSl1Pj13JiYodz1NYXRoLm1heCh3LAoxKSx1PXctMSksYj10aGlzLmdldFZhbHVlU2l6ZSgpLHRoaXMudGltZXM9amMuYXJyYXlTbGljZShoLHUsdyksdGhpcy52YWx1ZXM9amMuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyx1KmIsdypiKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgYj0hMCxlPXRoaXMuZ2V0VmFsdWVTaXplKCk7MCE9PWUtTWF0aC5mbG9vcihlKSYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLGI9ITEpO3ZhciBoPXRoaXMudGltZXM7ZT10aGlzLnZhbHVlczt2YXIgbT1oLmxlbmd0aDswPT09bSYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksYj0hMSk7Zm9yKHZhciB1PW51bGwsdz0wO3chPT1tO3crKyl7dmFyIEE9aFt3XTtpZigibnVtYmVyIj09PXR5cGVvZiBBJiZpc05hTihBKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIiwKdGhpcyx3LEEpO2I9ITE7YnJlYWt9aWYobnVsbCE9PXUmJnU+QSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLHcsQSx1KTtiPSExO2JyZWFrfXU9QX1pZih2b2lkIDAhPT1lJiZqYy5pc1R5cGVkQXJyYXkoZSkpZm9yKHc9MCxoPWUubGVuZ3RoO3chPT1oOysrdylpZihtPWVbd10saXNOYU4obSkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsdyxtKTtiPSExO2JyZWFrfXJldHVybiBifSxvcHRpbWl6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYj10aGlzLnRpbWVzLGU9dGhpcy52YWx1ZXMsaD10aGlzLmdldFZhbHVlU2l6ZSgpLG09MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLHU9MSx3PWIubGVuZ3RoLTEsQT0xO0E8dzsrK0Epe3ZhciBFPSExLEc9YltBXTtpZihHIT09YltBKzFdJiYoMSE9PUF8fEchPT1HWzBdKSlpZihtKUU9ITA7CmVsc2V7dmFyIEo9QSpoLFE9Si1oLFM9SitoO2ZvcihHPTA7RyE9PWg7KytHKXt2YXIgVD1lW0orR107aWYoVCE9PWVbUStHXXx8VCE9PWVbUytHXSl7RT0hMDticmVha319fWlmKEUpe2lmKEEhPT11KWZvcihiW3VdPWJbQV0sRT1BKmgsSj11KmgsRz0wO0chPT1oOysrRyllW0orR109ZVtFK0ddOysrdX19aWYoMDx3KXtiW3VdPWJbd107RT13Kmg7Sj11Kmg7Zm9yKEc9MDtHIT09aDsrK0cpZVtKK0ddPWVbRStHXTsrK3V9dSE9PWIubGVuZ3RoJiYodGhpcy50aW1lcz1qYy5hcnJheVNsaWNlKGIsMCx1KSx0aGlzLnZhbHVlcz1qYy5hcnJheVNsaWNlKGUsMCx1KmgpKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgYj1qYy5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1qYy5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApO2I9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5uYW1lLGIsZSk7Yi5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50O3JldHVybiBifX0pOwpEaS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG9jLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkRpLFZhbHVlVHlwZU5hbWU6ImJvb2wiLFZhbHVlQnVmZmVyVHlwZTpBcnJheSxEZWZhdWx0SW50ZXJwb2xhdGlvbjoyMzAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjp2b2lkIDAsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnZvaWQgMH0pO0VpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUob2MucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RWksVmFsdWVUeXBlTmFtZToiY29sb3IifSk7Y2cucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShvYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpjZyxWYWx1ZVR5cGVOYW1lOiJudW1iZXIifSk7RmkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpGaSxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYiwKZSxoLG0pe3ZhciB1PXRoaXMucmVzdWx0QnVmZmVyLHc9dGhpcy5zYW1wbGVWYWx1ZXMsQT10aGlzLnZhbHVlU2l6ZTtiKj1BO2U9KGgtZSkvKG0tZSk7Zm9yKGg9YitBO2IhPT1oO2IrPTQpZi5zbGVycEZsYXQodSwwLHcsYi1BLHcsYixlKTtyZXR1cm4gdX19KTtEaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG9jLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkRoLFZhbHVlVHlwZU5hbWU6InF1YXRlcm5pb24iLERlZmF1bHRJbnRlcnBvbGF0aW9uOjIzMDEsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOmZ1bmN0aW9uKGIpe3JldHVybiBuZXcgRmkodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGIpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg6dm9pZCAwfSk7R2kucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShvYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpHaSxWYWx1ZVR5cGVOYW1lOiJzdHJpbmciLApWYWx1ZUJ1ZmZlclR5cGU6QXJyYXksRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTtkZy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG9jLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmRnLFZhbHVlVHlwZU5hbWU6InZlY3RvciJ9KTtPYmplY3QuYXNzaWduKFJjLHtwYXJzZTpmdW5jdGlvbihiKXtmb3IodmFyIGU9W10saD1iLnRyYWNrcyxtPTEvKGIuZnBzfHwxKSx1PTAsdz1oLmxlbmd0aDt1IT09dzsrK3UpZS5wdXNoKGpzKGhbdV0pLnNjYWxlKG0pKTtyZXR1cm4gbmV3IFJjKGIubmFtZSxiLmR1cmF0aW9uLGUpfSx0b0pTT046ZnVuY3Rpb24oYil7dmFyIGU9W10saD1iLnRyYWNrcztiPXtuYW1lOmIubmFtZSxkdXJhdGlvbjpiLmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6Yi51dWlkfTtmb3IodmFyIG09MCx1PWgubGVuZ3RoO20hPT0KdTsrK20pZS5wdXNoKG9jLnRvSlNPTihoW21dKSk7cmV0dXJuIGJ9LENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlOmZ1bmN0aW9uKGIsZSxoLG0pe2Zvcih2YXIgdT1lLmxlbmd0aCx3PVtdLEE9MDtBPHU7QSsrKXt2YXIgRT1bXSxHPVtdO0UucHVzaCgoQSt1LTEpJXUsQSwoQSsxKSV1KTtHLnB1c2goMCwxLDApO3ZhciBKPWpjLmdldEtleWZyYW1lT3JkZXIoRSk7RT1qYy5zb3J0ZWRBcnJheShFLDEsSik7Rz1qYy5zb3J0ZWRBcnJheShHLDEsSik7bXx8MCE9PUVbMF18fChFLnB1c2godSksRy5wdXNoKEdbMF0pKTt3LnB1c2goKG5ldyBjZygiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1siK2VbQV0ubmFtZSsiXSIsRSxHKSkuc2NhbGUoMS9oKSl9cmV0dXJuIG5ldyBSYyhiLC0xLHcpfSxmaW5kQnlOYW1lOmZ1bmN0aW9uKGIsZSl7dmFyIGg9YjtBcnJheS5pc0FycmF5KGIpfHwoaD1iLmdlb21ldHJ5JiZiLmdlb21ldHJ5LmFuaW1hdGlvbnN8fGIuYW5pbWF0aW9ucyk7Zm9yKGI9CjA7YjxoLmxlbmd0aDtiKyspaWYoaFtiXS5uYW1lPT09ZSlyZXR1cm4gaFtiXTtyZXR1cm4gbnVsbH0sQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXM6ZnVuY3Rpb24oYixlLGgpe2Zvcih2YXIgbT17fSx1PS9eKFtcdy1dKj8pKFtcZF0rKSQvLHc9MCxBPWIubGVuZ3RoO3c8QTt3Kyspe3ZhciBFPWJbd10sRz1FLm5hbWUubWF0Y2godSk7aWYoRyYmMTxHLmxlbmd0aCl7dmFyIEo9R1sxXTsoRz1tW0pdKXx8KG1bSl09Rz1bXSk7Ry5wdXNoKEUpfX1iPVtdO2ZvcihKIGluIG0pYi5wdXNoKFJjLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKEosbVtKXSxlLGgpKTtyZXR1cm4gYn0scGFyc2VBbmltYXRpb246ZnVuY3Rpb24oYixlKXtmdW5jdGlvbiBoKGlhLGhhLHNhLHFhLHJhKXtpZigwIT09c2EubGVuZ3RoKXt2YXIgd2E9W10scGE9W107amMuZmxhdHRlbkpTT04oc2Esd2EscGEscWEpOzAhPT13YS5sZW5ndGgmJnJhLnB1c2gobmV3IGlhKGhhLHdhLHBhKSl9fQppZighYilyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO3ZhciBtPVtdLHU9Yi5uYW1lfHwiZGVmYXVsdCIsdz1iLmxlbmd0aHx8LTEsQT1iLmZwc3x8MzA7Yj1iLmhpZXJhcmNoeXx8W107Zm9yKHZhciBFPTA7RTxiLmxlbmd0aDtFKyspe3ZhciBHPWJbRV0ua2V5cztpZihHJiYwIT09Ry5sZW5ndGgpaWYoR1swXS5tb3JwaFRhcmdldHMpe3c9e307Zm9yKHZhciBKPTA7SjxHLmxlbmd0aDtKKyspaWYoR1tKXS5tb3JwaFRhcmdldHMpZm9yKHZhciBRPTA7UTxHW0pdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7USsrKXdbR1tKXS5tb3JwaFRhcmdldHNbUV1dPS0xO2Zvcih2YXIgUyBpbiB3KXt2YXIgVD1bXSxXPVtdO2ZvcihRPTA7USE9PUdbSl0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK1Epe3ZhciBYPUdbSl07VC5wdXNoKFgudGltZSk7Vy5wdXNoKFgubW9ycGhUYXJnZXQ9PT1TPzE6MCl9bS5wdXNoKG5ldyBjZygiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrClMrIl0iLFQsVykpfXc9dy5sZW5ndGgqKEF8fDEpfWVsc2UgSj0iLmJvbmVzWyIrZVtFXS5uYW1lKyJdIixoKGRnLEorIi5wb3NpdGlvbiIsRywicG9zIixtKSxoKERoLEorIi5xdWF0ZXJuaW9uIixHLCJyb3QiLG0pLGgoZGcsSisiLnNjYWxlIixHLCJzY2wiLG0pfXJldHVybiAwPT09bS5sZW5ndGg/bnVsbDpuZXcgUmModSx3LG0pfX0pO09iamVjdC5hc3NpZ24oUmMucHJvdG90eXBlLHtyZXNldER1cmF0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTAsZT0wLGg9dGhpcy50cmFja3MubGVuZ3RoO2UhPT1oOysrZSl7dmFyIG09dGhpcy50cmFja3NbZV07Yj1NYXRoLm1heChiLG0udGltZXNbbS50aW1lcy5sZW5ndGgtMV0pfXRoaXMuZHVyYXRpb249YjtyZXR1cm4gdGhpc30sdHJpbTpmdW5jdGlvbigpe2Zvcih2YXIgYj0wO2I8dGhpcy50cmFja3MubGVuZ3RoO2IrKyl0aGlzLnRyYWNrc1tiXS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPQohMCxlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKWI9YiYmdGhpcy50cmFja3NbZV0udmFsaWRhdGUoKTtyZXR1cm4gYn0sb3B0aW1pemU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHRoaXMudHJhY2tzLmxlbmd0aDtiKyspdGhpcy50cmFja3NbYl0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9W10sZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyliLnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyBSYyh0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbixiKX19KTt2YXIgZ2Y9e2VuYWJsZWQ6ITEsZmlsZXM6e30sYWRkOmZ1bmN0aW9uKGIsZSl7ITEhPT10aGlzLmVuYWJsZWQmJih0aGlzLmZpbGVzW2JdPWUpfSxnZXQ6ZnVuY3Rpb24oYil7aWYoITEhPT10aGlzLmVuYWJsZWQpcmV0dXJuIHRoaXMuZmlsZXNbYl19LHJlbW92ZTpmdW5jdGlvbihiKXtkZWxldGUgdGhpcy5maWxlc1tiXX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmZpbGVzPQp7fX19LFhuPW5ldyBEaztPYmplY3QuYXNzaWduKEtiLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbigpe30scGFyc2U6ZnVuY3Rpb24oKXt9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGIpe3RoaXMuY3Jvc3NPcmlnaW49YjtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc30sc2V0UmVzb3VyY2VQYXRoOmZ1bmN0aW9uKGIpe3RoaXMucmVzb3VyY2VQYXRoPWI7cmV0dXJuIHRoaXN9fSk7S2IuSGFuZGxlcnM9e2hhbmRsZXJzOltdLGFkZDpmdW5jdGlvbihiLGUpe3RoaXMuaGFuZGxlcnMucHVzaChiLGUpfSxnZXQ6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPXRoaXMuaGFuZGxlcnMsaD0wLG09ZS5sZW5ndGg7aDxtO2grPTIpe3ZhciB1PWVbaCsxXTtpZihlW2hdLnRlc3QoYikpcmV0dXJuIHV9cmV0dXJuIG51bGx9fTt2YXIgbWQ9e307U2MucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpTYywKbG9hZDpmdW5jdGlvbihiLGUsaCxtKXt2b2lkIDA9PT1iJiYoYj0iIik7dm9pZCAwIT09dGhpcy5wYXRoJiYoYj10aGlzLnBhdGgrYik7Yj10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTChiKTt2YXIgdT10aGlzLHc9Z2YuZ2V0KGIpO2lmKHZvaWQgMCE9PXcpcmV0dXJuIHUubWFuYWdlci5pdGVtU3RhcnQoYiksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUodyk7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LDApLHc7aWYodm9pZCAwIT09bWRbYl0pbWRbYl0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczpoLG9uRXJyb3I6bX0pO2Vsc2V7dmFyIEE9Yi5tYXRjaCgvXmRhdGE6KC4qPykoO2Jhc2U2NCk/LCguKikkLyk7aWYoQSl7aD1BWzFdO3ZhciBFPSEhQVsyXTtBPUFbM107QT1kZWNvZGVVUklDb21wb25lbnQoQSk7RSYmKEE9YXRvYihBKSk7dHJ5e3ZhciBHPSh0aGlzLnJlc3BvbnNlVHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKEcpe2Nhc2UgImFycmF5YnVmZmVyIjpjYXNlICJibG9iIjp2YXIgSj0KbmV3IFVpbnQ4QXJyYXkoQS5sZW5ndGgpO2ZvcihFPTA7RTxBLmxlbmd0aDtFKyspSltFXT1BLmNoYXJDb2RlQXQoRSk7dmFyIFE9ImJsb2IiPT09Rz9uZXcgQmxvYihbSi5idWZmZXJdLHt0eXBlOmh9KTpKLmJ1ZmZlcjticmVhaztjYXNlICJkb2N1bWVudCI6UT0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKEEsaCk7YnJlYWs7Y2FzZSAianNvbiI6UT1KU09OLnBhcnNlKEEpO2JyZWFrO2RlZmF1bHQ6UT1BfXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKFEpO3UubWFuYWdlci5pdGVtRW5kKGIpfSwwKX1jYXRjaChUKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bSYmbShUKTt1Lm1hbmFnZXIuaXRlbUVycm9yKGIpO3UubWFuYWdlci5pdGVtRW5kKGIpfSwwKX19ZWxzZXttZFtiXT1bXTttZFtiXS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmgsb25FcnJvcjptfSk7dmFyIFM9bmV3IFhNTEh0dHBSZXF1ZXN0O1Mub3BlbigiR0VUIixiLCEwKTtTLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLApmdW5jdGlvbihUKXt2YXIgVz10aGlzLnJlc3BvbnNlO2dmLmFkZChiLFcpO3ZhciBYPW1kW2JdO2RlbGV0ZSBtZFtiXTtpZigyMDA9PT10aGlzLnN0YXR1c3x8MD09PXRoaXMuc3RhdHVzKXswPT09dGhpcy5zdGF0dXMmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKTtmb3IodmFyIGlhPTAsaGE9WC5sZW5ndGg7aWE8aGE7aWErKyl7dmFyIHNhPVhbaWFdO2lmKHNhLm9uTG9hZClzYS5vbkxvYWQoVyl9fWVsc2V7aWE9MDtmb3IoaGE9WC5sZW5ndGg7aWE8aGE7aWErKylpZihzYT1YW2lhXSxzYS5vbkVycm9yKXNhLm9uRXJyb3IoVCk7dS5tYW5hZ2VyLml0ZW1FcnJvcihiKX11Lm1hbmFnZXIuaXRlbUVuZChiKX0sITEpO1MuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKFQpe2Zvcih2YXIgVz1tZFtiXSxYPTAsaWE9Vy5sZW5ndGg7WDxpYTtYKyspe3ZhciBoYT1XW1hdO2lmKGhhLm9uUHJvZ3Jlc3MpaGEub25Qcm9ncmVzcyhUKX19LAohMSk7Uy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oVCl7dmFyIFc9bWRbYl07ZGVsZXRlIG1kW2JdO2Zvcih2YXIgWD0wLGlhPVcubGVuZ3RoO1g8aWE7WCsrKXt2YXIgaGE9V1tYXTtpZihoYS5vbkVycm9yKWhhLm9uRXJyb3IoVCl9dS5tYW5hZ2VyLml0ZW1FcnJvcihiKTt1Lm1hbmFnZXIuaXRlbUVuZChiKX0sITEpO1MuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKFQpe3ZhciBXPW1kW2JdO2RlbGV0ZSBtZFtiXTtmb3IodmFyIFg9MCxpYT1XLmxlbmd0aDtYPGlhO1grKyl7dmFyIGhhPVdbWF07aWYoaGEub25FcnJvciloYS5vbkVycm9yKFQpfXUubWFuYWdlci5pdGVtRXJyb3IoYik7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LCExKTt2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKFMucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKTt2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKFMud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKTsKUy5vdmVycmlkZU1pbWVUeXBlJiZTLm92ZXJyaWRlTWltZVR5cGUodm9pZCAwIT09dGhpcy5taW1lVHlwZT90aGlzLm1pbWVUeXBlOiJ0ZXh0L3BsYWluIik7Zm9yKEUgaW4gdGhpcy5yZXF1ZXN0SGVhZGVyKVMuc2V0UmVxdWVzdEhlYWRlcihFLHRoaXMucmVxdWVzdEhlYWRlcltFXSk7Uy5zZW5kKG51bGwpfXUubWFuYWdlci5pdGVtU3RhcnQoYik7cmV0dXJuIFN9fSxzZXRSZXNwb25zZVR5cGU6ZnVuY3Rpb24oYil7dGhpcy5yZXNwb25zZVR5cGU9YjtyZXR1cm4gdGhpc30sc2V0V2l0aENyZWRlbnRpYWxzOmZ1bmN0aW9uKGIpe3RoaXMud2l0aENyZWRlbnRpYWxzPWI7cmV0dXJuIHRoaXN9LHNldE1pbWVUeXBlOmZ1bmN0aW9uKGIpe3RoaXMubWltZVR5cGU9YjtyZXR1cm4gdGhpc30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihiKXt0aGlzLnJlcXVlc3RIZWFkZXI9YjtyZXR1cm4gdGhpc319KTtFay5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEtiLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpFayxsb2FkOmZ1bmN0aW9uKGIsZSxoLG0pe3ZhciB1PXRoaXMsdz1uZXcgU2ModS5tYW5hZ2VyKTt3LnNldFBhdGgodS5wYXRoKTt3LmxvYWQoYixmdW5jdGlvbihBKXtlKHUucGFyc2UoSlNPTi5wYXJzZShBKSkpfSxoLG0pfSxwYXJzZTpmdW5jdGlvbihiKXtmb3IodmFyIGU9W10saD0wO2g8Yi5sZW5ndGg7aCsrKXt2YXIgbT1SYy5wYXJzZShiW2hdKTtlLnB1c2gobSl9cmV0dXJuIGV9fSk7RmsucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpGayxsb2FkOmZ1bmN0aW9uKGIsZSxoLG0pe2Z1bmN0aW9uIHUoVCl7Ry5sb2FkKGJbVF0sZnVuY3Rpb24oVyl7Vz13Ll9wYXJzZXIoVywhMCk7QVtUXT17d2lkdGg6Vy53aWR0aCxoZWlnaHQ6Vy5oZWlnaHQsZm9ybWF0OlcuZm9ybWF0LG1pcG1hcHM6Vy5taXBtYXBzfTtKKz0xOzY9PT1KJiYoMT09PVcubWlwbWFwQ291bnQmJihFLm1pbkZpbHRlcj0KMTAwNiksRS5mb3JtYXQ9Vy5mb3JtYXQsRS5uZWVkc1VwZGF0ZT0hMCxlJiZlKEUpKX0saCxtKX12YXIgdz10aGlzLEE9W10sRT1uZXcgT2Y7RS5pbWFnZT1BO3ZhciBHPW5ldyBTYyh0aGlzLm1hbmFnZXIpO0cuc2V0UGF0aCh0aGlzLnBhdGgpO0cuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBKPTAsUT0wLFM9Yi5sZW5ndGg7UTxTOysrUSl1KFEpO2Vsc2UgRy5sb2FkKGIsZnVuY3Rpb24oVCl7VD13Ll9wYXJzZXIoVCwhMCk7aWYoVC5pc0N1YmVtYXApZm9yKHZhciBXPVQubWlwbWFwcy5sZW5ndGgvVC5taXBtYXBDb3VudCxYPTA7WDxXO1grKyl7QVtYXT17bWlwbWFwczpbXX07Zm9yKHZhciBpYT0wO2lhPFQubWlwbWFwQ291bnQ7aWErKylBW1hdLm1pcG1hcHMucHVzaChULm1pcG1hcHNbWCpULm1pcG1hcENvdW50K2lhXSksQVtYXS5mb3JtYXQ9VC5mb3JtYXQsQVtYXS53aWR0aD1ULndpZHRoLEFbWF0uaGVpZ2h0PVQuaGVpZ2h0fWVsc2UgRS5pbWFnZS53aWR0aD0KVC53aWR0aCxFLmltYWdlLmhlaWdodD1ULmhlaWdodCxFLm1pcG1hcHM9VC5taXBtYXBzOzE9PT1ULm1pcG1hcENvdW50JiYoRS5taW5GaWx0ZXI9MTAwNik7RS5mb3JtYXQ9VC5mb3JtYXQ7RS5uZWVkc1VwZGF0ZT0hMDtlJiZlKEUpfSxoLG0pO3JldHVybiBFfX0pO0hpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SGksbG9hZDpmdW5jdGlvbihiLGUsaCxtKXt2YXIgdT10aGlzLHc9bmV3IEdiLEE9bmV3IFNjKHRoaXMubWFuYWdlcik7QS5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIik7QS5zZXRQYXRoKHRoaXMucGF0aCk7QS5sb2FkKGIsZnVuY3Rpb24oRSl7aWYoRT11Ll9wYXJzZXIoRSkpdm9pZCAwIT09RS5pbWFnZT93LmltYWdlPUUuaW1hZ2U6dm9pZCAwIT09RS5kYXRhJiYody5pbWFnZS53aWR0aD1FLndpZHRoLHcuaW1hZ2UuaGVpZ2h0PUUuaGVpZ2h0LHcuaW1hZ2UuZGF0YT1FLmRhdGEpLHcud3JhcFM9CnZvaWQgMCE9PUUud3JhcFM/RS53cmFwUzoxMDAxLHcud3JhcFQ9dm9pZCAwIT09RS53cmFwVD9FLndyYXBUOjEwMDEsdy5tYWdGaWx0ZXI9dm9pZCAwIT09RS5tYWdGaWx0ZXI/RS5tYWdGaWx0ZXI6MTAwNix3Lm1pbkZpbHRlcj12b2lkIDAhPT1FLm1pbkZpbHRlcj9FLm1pbkZpbHRlcjoxMDA4LHcuYW5pc290cm9weT12b2lkIDAhPT1FLmFuaXNvdHJvcHk/RS5hbmlzb3Ryb3B5OjEsdm9pZCAwIT09RS5mb3JtYXQmJih3LmZvcm1hdD1FLmZvcm1hdCksdm9pZCAwIT09RS50eXBlJiYody50eXBlPUUudHlwZSksdm9pZCAwIT09RS5taXBtYXBzJiYody5taXBtYXBzPUUubWlwbWFwcyksMT09PUUubWlwbWFwQ291bnQmJih3Lm1pbkZpbHRlcj0xMDA2KSx3Lm5lZWRzVXBkYXRlPSEwLGUmJmUodyxFKX0saCxtKTtyZXR1cm4gd319KTtlZy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEtiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmVnLGxvYWQ6ZnVuY3Rpb24oYiwKZSxoLG0pe2Z1bmN0aW9uIHUoKXtHLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHUsITEpO0cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHcsITEpO2dmLmFkZChiLHRoaXMpO2UmJmUodGhpcyk7QS5tYW5hZ2VyLml0ZW1FbmQoYil9ZnVuY3Rpb24gdyhKKXtHLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHUsITEpO0cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHcsITEpO20mJm0oSik7QS5tYW5hZ2VyLml0ZW1FcnJvcihiKTtBLm1hbmFnZXIuaXRlbUVuZChiKX12b2lkIDAhPT10aGlzLnBhdGgmJihiPXRoaXMucGF0aCtiKTtiPXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKGIpO3ZhciBBPXRoaXMsRT1nZi5nZXQoYik7aWYodm9pZCAwIT09RSlyZXR1cm4gQS5tYW5hZ2VyLml0ZW1TdGFydChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZShFKTtBLm1hbmFnZXIuaXRlbUVuZChiKX0sMCksRTt2YXIgRz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLAoiaW1nIik7Ry5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix1LCExKTtHLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix3LCExKTsiZGF0YToiIT09Yi5zdWJzdHIoMCw1KSYmdm9pZCAwIT09dGhpcy5jcm9zc09yaWdpbiYmKEcuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbik7QS5tYW5hZ2VyLml0ZW1TdGFydChiKTtHLnNyYz1iO3JldHVybiBHfX0pO0lpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SWksbG9hZDpmdW5jdGlvbihiLGUsaCxtKXtmdW5jdGlvbiB1KEcpe0EubG9hZChiW0ddLGZ1bmN0aW9uKEope3cuaW1hZ2VzW0ddPUo7RSsrOzY9PT1FJiYody5uZWVkc1VwZGF0ZT0hMCxlJiZlKHcpKX0sdm9pZCAwLG0pfXZhciB3PW5ldyBNZCxBPW5ldyBlZyh0aGlzLm1hbmFnZXIpO0Euc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7QS5zZXRQYXRoKHRoaXMucGF0aCk7dmFyIEU9MDtmb3IoaD0KMDtoPGIubGVuZ3RoOysraCl1KGgpO3JldHVybiB3fX0pO0ppLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SmksbG9hZDpmdW5jdGlvbihiLGUsaCxtKXt2YXIgdT1uZXcgayx3PW5ldyBlZyh0aGlzLm1hbmFnZXIpO3cuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7dy5zZXRQYXRoKHRoaXMucGF0aCk7dy5sb2FkKGIsZnVuY3Rpb24oQSl7dS5pbWFnZT1BO0E9MDxiLnNlYXJjaCgvXC5qcGU/ZygkfFw/KS9pKXx8MD09PWIuc2VhcmNoKC9eZGF0YTppbWFnZVwvanBlZy8pO3UuZm9ybWF0PUE/MTAyMjoxMDIzO3UubmVlZHNVcGRhdGU9ITA7dm9pZCAwIT09ZSYmZSh1KX0saCxtKTtyZXR1cm4gdX19KTtPYmplY3QuYXNzaWduKGFiLnByb3RvdHlwZSx7Z2V0UG9pbnQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIik7cmV0dXJuIG51bGx9LApnZXRQb2ludEF0OmZ1bmN0aW9uKGIsZSl7Yj10aGlzLmdldFV0b1RtYXBwaW5nKGIpO3JldHVybiB0aGlzLmdldFBvaW50KGIsZSl9LGdldFBvaW50czpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj01KTtmb3IodmFyIGU9W10saD0wO2g8PWI7aCsrKWUucHVzaCh0aGlzLmdldFBvaW50KGgvYikpO3JldHVybiBlfSxnZXRTcGFjZWRQb2ludHM6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGI9NSk7Zm9yKHZhciBlPVtdLGg9MDtoPD1iO2grKyllLnB1c2godGhpcy5nZXRQb2ludEF0KGgvYikpO3JldHVybiBlfSxnZXRMZW5ndGg6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gYltiLmxlbmd0aC0xXX0sZ2V0TGVuZ3RoczpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyk7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PWIrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzOwp0aGlzLm5lZWRzVXBkYXRlPSExO3ZhciBlPVtdLGg9dGhpcy5nZXRQb2ludCgwKSxtLHU9MDtlLnB1c2goMCk7Zm9yKG09MTttPD1iO20rKyl7dmFyIHc9dGhpcy5nZXRQb2ludChtL2IpO3UrPXcuZGlzdGFuY2VUbyhoKTtlLnB1c2godSk7aD13fXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lfSx1cGRhdGVBcmNMZW5ndGhzOmZ1bmN0aW9uKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMDt0aGlzLmdldExlbmd0aHMoKX0sZ2V0VXRvVG1hcHBpbmc6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLmdldExlbmd0aHMoKSxtPWgubGVuZ3RoO2U9ZT9lOmIqaFttLTFdO2Zvcih2YXIgdT0wLHc9bS0xLEE7dTw9dzspaWYoYj1NYXRoLmZsb29yKHUrKHctdSkvMiksQT1oW2JdLWUsMD5BKXU9YisxO2Vsc2UgaWYoMDxBKXc9Yi0xO2Vsc2V7dz1iO2JyZWFrfWI9dztpZihoW2JdPT09ZSlyZXR1cm4gYi8obS0xKTt1PWhbYl07cmV0dXJuKGIrKGUtdSkvKGhbYisxXS11KSkvKG0tMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24oYil7dmFyIGU9CmItMUUtNDtiKz0xRS00OzA+ZSYmKGU9MCk7MTxiJiYoYj0xKTtlPXRoaXMuZ2V0UG9pbnQoZSk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQoYikuY2xvbmUoKS5zdWIoZSkubm9ybWFsaXplKCl9LGdldFRhbmdlbnRBdDpmdW5jdGlvbihiKXtiPXRoaXMuZ2V0VXRvVG1hcHBpbmcoYik7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChiKX0sY29tcHV0ZUZyZW5ldEZyYW1lczpmdW5jdGlvbihiLGUpe3ZhciBoPW5ldyBnLG09W10sdT1bXSx3PVtdLEE9bmV3IGcsRT1uZXcgcixHO2ZvcihHPTA7Rzw9YjtHKyspe3ZhciBKPUcvYjttW0ddPXRoaXMuZ2V0VGFuZ2VudEF0KEopO21bR10ubm9ybWFsaXplKCl9dVswXT1uZXcgZzt3WzBdPW5ldyBnO0c9TnVtYmVyLk1BWF9WQUxVRTtKPU1hdGguYWJzKG1bMF0ueCk7dmFyIFE9TWF0aC5hYnMobVswXS55KSxTPU1hdGguYWJzKG1bMF0ueik7Sjw9RyYmKEc9SixoLnNldCgxLDAsMCkpO1E8PUcmJihHPVEsaC5zZXQoMCwxLDApKTtTPD1HJiZoLnNldCgwLAowLDEpO0EuY3Jvc3NWZWN0b3JzKG1bMF0saCkubm9ybWFsaXplKCk7dVswXS5jcm9zc1ZlY3RvcnMobVswXSxBKTt3WzBdLmNyb3NzVmVjdG9ycyhtWzBdLHVbMF0pO2ZvcihHPTE7Rzw9YjtHKyspdVtHXT11W0ctMV0uY2xvbmUoKSx3W0ddPXdbRy0xXS5jbG9uZSgpLEEuY3Jvc3NWZWN0b3JzKG1bRy0xXSxtW0ddKSxBLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OJiYoQS5ub3JtYWxpemUoKSxoPU1hdGguYWNvcyhsYi5jbGFtcChtW0ctMV0uZG90KG1bR10pLC0xLDEpKSx1W0ddLmFwcGx5TWF0cml4NChFLm1ha2VSb3RhdGlvbkF4aXMoQSxoKSkpLHdbR10uY3Jvc3NWZWN0b3JzKG1bR10sdVtHXSk7aWYoITA9PT1lKWZvcihoPU1hdGguYWNvcyhsYi5jbGFtcCh1WzBdLmRvdCh1W2JdKSwtMSwxKSksaC89YiwwPG1bMF0uZG90KEEuY3Jvc3NWZWN0b3JzKHVbMF0sdVtiXSkpJiYoaD0taCksRz0xO0c8PWI7RysrKXVbR10uYXBwbHlNYXRyaXg0KEUubWFrZVJvdGF0aW9uQXhpcyhtW0ddLApoKkcpKSx3W0ddLmNyb3NzVmVjdG9ycyhtW0ddLHVbR10pO3JldHVybnt0YW5nZW50czptLG5vcm1hbHM6dSxiaW5vcm1hbHM6d319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPWIuYXJjTGVuZ3RoRGl2aXNpb25zO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtiLmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucztiLnR5cGU9dGhpcy50eXBlO3JldHVybiBifSxmcm9tSlNPTjpmdW5jdGlvbihiKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz1iLmFyY0xlbmd0aERpdmlzaW9ucztyZXR1cm4gdGhpc319KTtMYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhYi5wcm90b3R5cGUpO0xjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KTGM7TGMucHJvdG90eXBlLmlzRWxsaXBzZUN1cnZlPSEwO0xjLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihiLGUpe2U9ZXx8bmV3IGQ7Zm9yKHZhciBoPTIqTWF0aC5QSSxtPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGUsdT1NYXRoLmFicyhtKTxOdW1iZXIuRVBTSUxPTjswPm07KW0rPWg7Zm9yKDttPmg7KW0tPWg7bTxOdW1iZXIuRVBTSUxPTiYmKG09dT8wOmgpOyEwIT09dGhpcy5hQ2xvY2t3aXNlfHx1fHwobT1tPT09aD8taDptLWgpO2g9dGhpcy5hU3RhcnRBbmdsZStiKm07Yj10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhoKTt2YXIgdz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihoKTswIT09dGhpcy5hUm90YXRpb24mJihoPU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxtPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSx1PWItdGhpcy5hWCx3LT10aGlzLmFZLGI9dSpoLXcqbSt0aGlzLmFYLHc9dSptK3cqaCt0aGlzLmFZKTtyZXR1cm4gZS5zZXQoYiwKdyl9O0xjLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmFYPWIuYVg7dGhpcy5hWT1iLmFZO3RoaXMueFJhZGl1cz1iLnhSYWRpdXM7dGhpcy55UmFkaXVzPWIueVJhZGl1czt0aGlzLmFTdGFydEFuZ2xlPWIuYVN0YXJ0QW5nbGU7dGhpcy5hRW5kQW5nbGU9Yi5hRW5kQW5nbGU7dGhpcy5hQ2xvY2t3aXNlPWIuYUNsb2Nrd2lzZTt0aGlzLmFSb3RhdGlvbj1iLmFSb3RhdGlvbjtyZXR1cm4gdGhpc307TGMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWFiLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLmFYPXRoaXMuYVg7Yi5hWT10aGlzLmFZO2IueFJhZGl1cz10aGlzLnhSYWRpdXM7Yi55UmFkaXVzPXRoaXMueVJhZGl1cztiLmFTdGFydEFuZ2xlPXRoaXMuYVN0YXJ0QW5nbGU7Yi5hRW5kQW5nbGU9dGhpcy5hRW5kQW5nbGU7Yi5hQ2xvY2t3aXNlPXRoaXMuYUNsb2Nrd2lzZTtiLmFSb3RhdGlvbj0KdGhpcy5hUm90YXRpb247cmV0dXJuIGJ9O0xjLnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbihiKXthYi5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLGIpO3RoaXMuYVg9Yi5hWDt0aGlzLmFZPWIuYVk7dGhpcy54UmFkaXVzPWIueFJhZGl1czt0aGlzLnlSYWRpdXM9Yi55UmFkaXVzO3RoaXMuYVN0YXJ0QW5nbGU9Yi5hU3RhcnRBbmdsZTt0aGlzLmFFbmRBbmdsZT1iLmFFbmRBbmdsZTt0aGlzLmFDbG9ja3dpc2U9Yi5hQ2xvY2t3aXNlO3RoaXMuYVJvdGF0aW9uPWIuYVJvdGF0aW9uO3JldHVybiB0aGlzfTtmZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShMYy5wcm90b3R5cGUpO2ZnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1mZztmZy5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDt2YXIgdWo9bmV3IGcsb2w9bmV3IEdrLHBsPW5ldyBHayxxbD1uZXcgR2s7dWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWIucHJvdG90eXBlKTt1Yy5wcm90b3R5cGUuY29uc3RydWN0b3I9dWM7CnVjLnByb3RvdHlwZS5pc0NhdG11bGxSb21DdXJ2ZTM9ITA7dWMucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGIsZSl7ZT1lfHxuZXcgZzt2YXIgaD10aGlzLnBvaW50cyxtPWgubGVuZ3RoO2IqPW0tKHRoaXMuY2xvc2VkPzA6MSk7dmFyIHU9TWF0aC5mbG9vcihiKTtiLT11O3RoaXMuY2xvc2VkP3UrPTA8dT8wOihNYXRoLmZsb29yKE1hdGguYWJzKHUpL20pKzEpKm06MD09PWImJnU9PT1tLTEmJih1PW0tMixiPTEpO2lmKHRoaXMuY2xvc2VkfHwwPHUpdmFyIHc9aFsodS0xKSVtXTtlbHNlIHVqLnN1YlZlY3RvcnMoaFswXSxoWzFdKS5hZGQoaFswXSksdz11ajt2YXIgQT1oW3UlbV07dmFyIEU9aFsodSsxKSVtXTt0aGlzLmNsb3NlZHx8dSsyPG0/aD1oWyh1KzIpJW1dOih1ai5zdWJWZWN0b3JzKGhbbS0xXSxoW20tMl0pLmFkZChoW20tMV0pLGg9dWopO2lmKCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe3ZhciBHPQoiY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZT8uNTouMjU7bT1NYXRoLnBvdyh3LmRpc3RhbmNlVG9TcXVhcmVkKEEpLEcpO3U9TWF0aC5wb3coQS5kaXN0YW5jZVRvU3F1YXJlZChFKSxHKTtHPU1hdGgucG93KEUuZGlzdGFuY2VUb1NxdWFyZWQoaCksRyk7MUUtND51JiYodT0xKTsxRS00Pm0mJihtPXUpOzFFLTQ+RyYmKEc9dSk7b2wuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKHcueCxBLngsRS54LGgueCxtLHUsRyk7cGwuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKHcueSxBLnksRS55LGgueSxtLHUsRyk7cWwuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKHcueixBLnosRS56LGgueixtLHUsRyl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMuY3VydmVUeXBlJiYob2wuaW5pdENhdG11bGxSb20ody54LEEueCxFLngsaC54LHRoaXMudGVuc2lvbikscGwuaW5pdENhdG11bGxSb20ody55LEEueSxFLnksaC55LHRoaXMudGVuc2lvbikscWwuaW5pdENhdG11bGxSb20ody56LEEueixFLnosCmgueix0aGlzLnRlbnNpb24pKTtlLnNldChvbC5jYWxjKGIpLHBsLmNhbGMoYikscWwuY2FsYyhiKSk7cmV0dXJuIGV9O3VjLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPWIucG9pbnRzLmxlbmd0aDtlPGg7ZSsrKXRoaXMucG9pbnRzLnB1c2goYi5wb2ludHNbZV0uY2xvbmUoKSk7dGhpcy5jbG9zZWQ9Yi5jbG9zZWQ7dGhpcy5jdXJ2ZVR5cGU9Yi5jdXJ2ZVR5cGU7dGhpcy50ZW5zaW9uPWIudGVuc2lvbjtyZXR1cm4gdGhpc307dWMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWFiLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPXRoaXMucG9pbnRzLmxlbmd0aDtlPGg7ZSsrKWIucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtiLmNsb3NlZD10aGlzLmNsb3NlZDtiLmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZTsKYi50ZW5zaW9uPXRoaXMudGVuc2lvbjtyZXR1cm4gYn07dWMucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy5wb2ludHM9W107Zm9yKHZhciBlPTAsaD1iLnBvaW50cy5sZW5ndGg7ZTxoO2UrKyl7dmFyIG09Yi5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3IGcpLmZyb21BcnJheShtKSl9dGhpcy5jbG9zZWQ9Yi5jbG9zZWQ7dGhpcy5jdXJ2ZVR5cGU9Yi5jdXJ2ZVR5cGU7dGhpcy50ZW5zaW9uPWIudGVuc2lvbjtyZXR1cm4gdGhpc307ZWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWIucHJvdG90eXBlKTtlZC5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWQ7ZWQucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDtlZC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkO3ZhciBoPXRoaXMudjAsbT10aGlzLnYxLHU9dGhpcy52Mix3PXRoaXMudjM7ZS5zZXQoRmgoYiwKaC54LG0ueCx1Lngsdy54KSxGaChiLGgueSxtLnksdS55LHcueSkpO3JldHVybiBlfTtlZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXthYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy52MC5jb3B5KGIudjApO3RoaXMudjEuY29weShiLnYxKTt0aGlzLnYyLmNvcHkoYi52Mik7dGhpcy52My5jb3B5KGIudjMpO3JldHVybiB0aGlzfTtlZC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9YWIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO2IudjA9dGhpcy52MC50b0FycmF5KCk7Yi52MT10aGlzLnYxLnRvQXJyYXkoKTtiLnYyPXRoaXMudjIudG9BcnJheSgpO2IudjM9dGhpcy52My50b0FycmF5KCk7cmV0dXJuIGJ9O2VkLnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbihiKXthYi5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLGIpO3RoaXMudjAuZnJvbUFycmF5KGIudjApO3RoaXMudjEuZnJvbUFycmF5KGIudjEpO3RoaXMudjIuZnJvbUFycmF5KGIudjIpOwp0aGlzLnYzLmZyb21BcnJheShiLnYzKTtyZXR1cm4gdGhpc307QmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWIucHJvdG90eXBlKTtCZC5wcm90b3R5cGUuY29uc3RydWN0b3I9QmQ7QmQucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7QmQucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGIsZSl7ZT1lfHxuZXcgZzt2YXIgaD10aGlzLnYwLG09dGhpcy52MSx1PXRoaXMudjIsdz10aGlzLnYzO2Uuc2V0KEZoKGIsaC54LG0ueCx1Lngsdy54KSxGaChiLGgueSxtLnksdS55LHcueSksRmgoYixoLnosbS56LHUueix3LnopKTtyZXR1cm4gZX07QmQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7YWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMudjAuY29weShiLnYwKTt0aGlzLnYxLmNvcHkoYi52MSk7dGhpcy52Mi5jb3B5KGIudjIpO3RoaXMudjMuY29weShiLnYzKTtyZXR1cm4gdGhpc307QmQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPQphYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7Yi52MD10aGlzLnYwLnRvQXJyYXkoKTtiLnYxPXRoaXMudjEudG9BcnJheSgpO2IudjI9dGhpcy52Mi50b0FycmF5KCk7Yi52Mz10aGlzLnYzLnRvQXJyYXkoKTtyZXR1cm4gYn07QmQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy52MC5mcm9tQXJyYXkoYi52MCk7dGhpcy52MS5mcm9tQXJyYXkoYi52MSk7dGhpcy52Mi5mcm9tQXJyYXkoYi52Mik7dGhpcy52My5mcm9tQXJyYXkoYi52Myk7cmV0dXJuIHRoaXN9O0djLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFiLnByb3RvdHlwZSk7R2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPUdjO0djLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDtHYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkOzE9PT1iP2UuY29weSh0aGlzLnYyKTooZS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSwKZS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy52MSkpO3JldHVybiBlfTtHYy5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLmdldFBvaW50KGIsZSl9O0djLnByb3RvdHlwZS5nZXRUYW5nZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudjIuY2xvbmUoKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCl9O0djLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnYxLmNvcHkoYi52MSk7dGhpcy52Mi5jb3B5KGIudjIpO3JldHVybiB0aGlzfTtHYy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9YWIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO2IudjE9dGhpcy52MS50b0FycmF5KCk7Yi52Mj10aGlzLnYyLnRvQXJyYXkoKTtyZXR1cm4gYn07R2MucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy52MS5mcm9tQXJyYXkoYi52MSk7CnRoaXMudjIuZnJvbUFycmF5KGIudjIpO3JldHVybiB0aGlzfTtmZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhYi5wcm90b3R5cGUpO2ZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1mZDtmZC5wcm90b3R5cGUuaXNMaW5lQ3VydmUzPSEwO2ZkLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihiLGUpe2U9ZXx8bmV3IGc7MT09PWI/ZS5jb3B5KHRoaXMudjIpOihlLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGUubXVsdGlwbHlTY2FsYXIoYikuYWRkKHRoaXMudjEpKTtyZXR1cm4gZX07ZmQucHJvdG90eXBlLmdldFBvaW50QXQ9ZnVuY3Rpb24oYixlKXtyZXR1cm4gdGhpcy5nZXRQb2ludChiLGUpfTtmZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXthYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy52MS5jb3B5KGIudjEpO3RoaXMudjIuY29weShiLnYyKTtyZXR1cm4gdGhpc307ZmQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWFiLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTsKYi52MT10aGlzLnYxLnRvQXJyYXkoKTtiLnYyPXRoaXMudjIudG9BcnJheSgpO3JldHVybiBifTtmZC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYil7YWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnYxLmZyb21BcnJheShiLnYxKTt0aGlzLnYyLmZyb21BcnJheShiLnYyKTtyZXR1cm4gdGhpc307Z2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWIucHJvdG90eXBlKTtnZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Z2Q7Z2QucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7Z2QucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGIsZSl7ZT1lfHxuZXcgZDt2YXIgaD10aGlzLnYwLG09dGhpcy52MSx1PXRoaXMudjI7ZS5zZXQoRWgoYixoLngsbS54LHUueCksRWgoYixoLnksbS55LHUueSkpO3JldHVybiBlfTtnZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXthYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy52MC5jb3B5KGIudjApOwp0aGlzLnYxLmNvcHkoYi52MSk7dGhpcy52Mi5jb3B5KGIudjIpO3JldHVybiB0aGlzfTtnZC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9YWIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO2IudjA9dGhpcy52MC50b0FycmF5KCk7Yi52MT10aGlzLnYxLnRvQXJyYXkoKTtiLnYyPXRoaXMudjIudG9BcnJheSgpO3JldHVybiBifTtnZC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYil7YWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnYwLmZyb21BcnJheShiLnYwKTt0aGlzLnYxLmZyb21BcnJheShiLnYxKTt0aGlzLnYyLmZyb21BcnJheShiLnYyKTtyZXR1cm4gdGhpc307Q2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWIucHJvdG90eXBlKTtDZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Q2Q7Q2QucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO0NkLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihiLGUpe2U9ZXx8Cm5ldyBnO3ZhciBoPXRoaXMudjAsbT10aGlzLnYxLHU9dGhpcy52MjtlLnNldChFaChiLGgueCxtLngsdS54KSxFaChiLGgueSxtLnksdS55KSxFaChiLGgueixtLnosdS56KSk7cmV0dXJuIGV9O0NkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnYwLmNvcHkoYi52MCk7dGhpcy52MS5jb3B5KGIudjEpO3RoaXMudjIuY29weShiLnYyKTtyZXR1cm4gdGhpc307Q2QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWFiLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnYwPXRoaXMudjAudG9BcnJheSgpO2IudjE9dGhpcy52MS50b0FycmF5KCk7Yi52Mj10aGlzLnYyLnRvQXJyYXkoKTtyZXR1cm4gYn07Q2QucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy52MC5mcm9tQXJyYXkoYi52MCk7dGhpcy52MS5mcm9tQXJyYXkoYi52MSk7CnRoaXMudjIuZnJvbUFycmF5KGIudjIpO3JldHVybiB0aGlzfTtoZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhYi5wcm90b3R5cGUpO2hkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oZDtoZC5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDtoZC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkO3ZhciBoPXRoaXMucG9pbnRzLG09KGgubGVuZ3RoLTEpKmI7Yj1NYXRoLmZsb29yKG0pO20tPWI7dmFyIHU9aFswPT09Yj9iOmItMV0sdz1oW2JdLEE9aFtiPmgubGVuZ3RoLTI/aC5sZW5ndGgtMTpiKzFdO2g9aFtiPmgubGVuZ3RoLTM/aC5sZW5ndGgtMTpiKzJdO2Uuc2V0KFluKG0sdS54LHcueCxBLngsaC54KSxZbihtLHUueSx3LnksQS55LGgueSkpO3JldHVybiBlfTtoZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXthYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5wb2ludHM9W107Zm9yKHZhciBlPTAsaD1iLnBvaW50cy5sZW5ndGg7ZTwKaDtlKyspdGhpcy5wb2ludHMucHVzaChiLnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc307aGQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWFiLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPXRoaXMucG9pbnRzLmxlbmd0aDtlPGg7ZSsrKWIucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gYn07aGQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy5wb2ludHM9W107Zm9yKHZhciBlPTAsaD1iLnBvaW50cy5sZW5ndGg7ZTxoO2UrKyl7dmFyIG09Yi5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3IGQpLmZyb21BcnJheShtKSl9cmV0dXJuIHRoaXN9O3ZhciBybD1PYmplY3QuZnJlZXplKHtBcmNDdXJ2ZTpmZyxDYXRtdWxsUm9tQ3VydmUzOnVjLEN1YmljQmV6aWVyQ3VydmU6ZWQsQ3ViaWNCZXppZXJDdXJ2ZTM6QmQsCkVsbGlwc2VDdXJ2ZTpMYyxMaW5lQ3VydmU6R2MsTGluZUN1cnZlMzpmZCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTpnZCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6Q2QsU3BsaW5lQ3VydmU6aGR9KTtRZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGFiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlFkLGFkZDpmdW5jdGlvbihiKXt0aGlzLmN1cnZlcy5wdXNoKGIpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKSxlPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTtiLmVxdWFscyhlKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgR2MoZSxiKSl9LGdldFBvaW50OmZ1bmN0aW9uKGIpe3ZhciBlPWIqdGhpcy5nZXRMZW5ndGgoKSxoPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7Zm9yKGI9MDtiPGgubGVuZ3RoOyl7aWYoaFtiXT49ZSlyZXR1cm4gZT1oW2JdLWUsYj10aGlzLmN1cnZlc1tiXSxoPQpiLmdldExlbmd0aCgpLGIuZ2V0UG9pbnRBdCgwPT09aD8wOjEtZS9oKTtiKyt9cmV0dXJuIG51bGx9LGdldExlbmd0aDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIGJbYi5sZW5ndGgtMV19LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwO3RoaXMuY2FjaGVMZW5ndGhzPW51bGw7dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX0sZ2V0Q3VydmVMZW5ndGhzOmZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZUxlbmd0aHMmJnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7Zm9yKHZhciBiPVtdLGU9MCxoPTAsbT10aGlzLmN1cnZlcy5sZW5ndGg7aDxtO2grKyllKz10aGlzLmN1cnZlc1toXS5nZXRMZW5ndGgoKSxiLnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPWJ9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihiKXt2b2lkIDA9PT0KYiYmKGI9NDApO2Zvcih2YXIgZT1bXSxoPTA7aDw9YjtoKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaC9iKSk7dGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKTtyZXR1cm4gZX0sZ2V0UG9pbnRzOmZ1bmN0aW9uKGIpe2I9Ynx8MTI7Zm9yKHZhciBlPVtdLGgsbT0wLHU9dGhpcy5jdXJ2ZXM7bTx1Lmxlbmd0aDttKyspe3ZhciB3PXVbbV07dz13LmdldFBvaW50cyh3JiZ3LmlzRWxsaXBzZUN1cnZlPzIqYjp3JiYody5pc0xpbmVDdXJ2ZXx8dy5pc0xpbmVDdXJ2ZTMpPzE6dyYmdy5pc1NwbGluZUN1cnZlP2Iqdy5wb2ludHMubGVuZ3RoOmIpO2Zvcih2YXIgQT0wO0E8dy5sZW5ndGg7QSsrKXt2YXIgRT13W0FdO2gmJmguZXF1YWxzKEUpfHwoZS5wdXNoKEUpLGg9RSl9fXRoaXMuYXV0b0Nsb3NlJiYxPGUubGVuZ3RoJiYhZVtlLmxlbmd0aC0xXS5lcXVhbHMoZVswXSkmJmUucHVzaChlWzBdKTtyZXR1cm4gZX0sY29weTpmdW5jdGlvbihiKXthYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmIpO3RoaXMuY3VydmVzPVtdO2Zvcih2YXIgZT0wLGg9Yi5jdXJ2ZXMubGVuZ3RoO2U8aDtlKyspdGhpcy5jdXJ2ZXMucHVzaChiLmN1cnZlc1tlXS5jbG9uZSgpKTt0aGlzLmF1dG9DbG9zZT1iLmF1dG9DbG9zZTtyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7dmFyIGI9YWIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO2IuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlO2IuY3VydmVzPVtdO2Zvcih2YXIgZT0wLGg9dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8aDtlKyspYi5jdXJ2ZXMucHVzaCh0aGlzLmN1cnZlc1tlXS50b0pTT04oKSk7cmV0dXJuIGJ9LGZyb21KU09OOmZ1bmN0aW9uKGIpe2FiLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy5hdXRvQ2xvc2U9Yi5hdXRvQ2xvc2U7dGhpcy5jdXJ2ZXM9W107Zm9yKHZhciBlPTAsaD1iLmN1cnZlcy5sZW5ndGg7ZTxoO2UrKyl7dmFyIG09Yi5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaCgobmV3IHJsW20udHlwZV0pLmZyb21KU09OKG0pKX1yZXR1cm4gdGhpc319KTsKaWQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShRZC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjppZCxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKGIpe3RoaXMubW92ZVRvKGJbMF0ueCxiWzBdLnkpO2Zvcih2YXIgZT0xLGg9Yi5sZW5ndGg7ZTxoO2UrKyl0aGlzLmxpbmVUbyhiW2VdLngsYltlXS55KX0sbW92ZVRvOmZ1bmN0aW9uKGIsZSl7dGhpcy5jdXJyZW50UG9pbnQuc2V0KGIsZSl9LGxpbmVUbzpmdW5jdGlvbihiLGUpe3ZhciBoPW5ldyBHYyh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBkKGIsZSkpO3RoaXMuY3VydmVzLnB1c2goaCk7dGhpcy5jdXJyZW50UG9pbnQuc2V0KGIsZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oYixlLGgsbSl7Yj1uZXcgZ2QodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgZChiLGUpLG5ldyBkKGgsbSkpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuc2V0KGgsbSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oYiwKZSxoLG0sdSx3KXtiPW5ldyBlZCh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBkKGIsZSksbmV3IGQoaCxtKSxuZXcgZCh1LHcpKTt0aGlzLmN1cnZlcy5wdXNoKGIpO3RoaXMuY3VycmVudFBvaW50LnNldCh1LHcpfSxzcGxpbmVUaHJ1OmZ1bmN0aW9uKGIpe3ZhciBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQoYik7ZT1uZXcgaGQoZSk7dGhpcy5jdXJ2ZXMucHVzaChlKTt0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGJbYi5sZW5ndGgtMV0pfSxhcmM6ZnVuY3Rpb24oYixlLGgsbSx1LHcpe3RoaXMuYWJzYXJjKGIrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaCxtLHUsdyl9LGFic2FyYzpmdW5jdGlvbihiLGUsaCxtLHUsdyl7dGhpcy5hYnNlbGxpcHNlKGIsZSxoLGgsbSx1LHcpfSxlbGxpcHNlOmZ1bmN0aW9uKGIsZSxoLG0sdSx3LEEsRSl7dGhpcy5hYnNlbGxpcHNlKGIrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksCmgsbSx1LHcsQSxFKX0sYWJzZWxsaXBzZTpmdW5jdGlvbihiLGUsaCxtLHUsdyxBLEUpe2I9bmV3IExjKGIsZSxoLG0sdSx3LEEsRSk7MDx0aGlzLmN1cnZlcy5sZW5ndGgmJihlPWIuZ2V0UG9pbnQoMCksZS5lcXVhbHModGhpcy5jdXJyZW50UG9pbnQpfHx0aGlzLmxpbmVUbyhlLngsZS55KSk7dGhpcy5jdXJ2ZXMucHVzaChiKTtiPWIuZ2V0UG9pbnQoMSk7dGhpcy5jdXJyZW50UG9pbnQuY29weShiKX0sY29weTpmdW5jdGlvbihiKXtRZC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jdXJyZW50UG9pbnQuY29weShiLmN1cnJlbnRQb2ludCk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBiPVFkLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCk7cmV0dXJuIGJ9LGZyb21KU09OOmZ1bmN0aW9uKGIpe1FkLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KGIuY3VycmVudFBvaW50KTsKcmV0dXJuIHRoaXN9fSk7dGUucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShpZC5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp0ZSxnZXRQb2ludHNIb2xlczpmdW5jdGlvbihiKXtmb3IodmFyIGU9W10saD0wLG09dGhpcy5ob2xlcy5sZW5ndGg7aDxtO2grKyllW2hdPXRoaXMuaG9sZXNbaF0uZ2V0UG9pbnRzKGIpO3JldHVybiBlfSxleHRyYWN0UG9pbnRzOmZ1bmN0aW9uKGIpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyhiKSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKGIpfX0sY29weTpmdW5jdGlvbihiKXtpZC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5ob2xlcz1bXTtmb3IodmFyIGU9MCxoPWIuaG9sZXMubGVuZ3RoO2U8aDtlKyspdGhpcy5ob2xlcy5wdXNoKGIuaG9sZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBiPWlkLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnV1aWQ9dGhpcy51dWlkOwpiLmhvbGVzPVtdO2Zvcih2YXIgZT0wLGg9dGhpcy5ob2xlcy5sZW5ndGg7ZTxoO2UrKyliLmhvbGVzLnB1c2godGhpcy5ob2xlc1tlXS50b0pTT04oKSk7cmV0dXJuIGJ9LGZyb21KU09OOmZ1bmN0aW9uKGIpe2lkLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy51dWlkPWIudXVpZDt0aGlzLmhvbGVzPVtdO2Zvcih2YXIgZT0wLGg9Yi5ob2xlcy5sZW5ndGg7ZTxoO2UrKyl7dmFyIG09Yi5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2goKG5ldyBpZCkuZnJvbUpTT04obSkpfXJldHVybiB0aGlzfX0pO1ViLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpVYixpc0xpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYil7eS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMuaW50ZW5zaXR5PWIuaW50ZW5zaXR5O3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYil7Yj0KeS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtiLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpO2Iub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eTt2b2lkIDAhPT10aGlzLmdyb3VuZENvbG9yJiYoYi5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSk7dm9pZCAwIT09dGhpcy5kaXN0YW5jZSYmKGIub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpO3ZvaWQgMCE9PXRoaXMuYW5nbGUmJihiLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKTt2b2lkIDAhPT10aGlzLmRlY2F5JiYoYi5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSk7dm9pZCAwIT09dGhpcy5wZW51bWJyYSYmKGIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpO3ZvaWQgMCE9PXRoaXMuc2hhZG93JiYoYi5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKTtyZXR1cm4gYn19KTtLaS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFViLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpLaSxpc0hlbWlzcGhlcmVMaWdodDohMCxjb3B5OmZ1bmN0aW9uKGIpe1ViLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmdyb3VuZENvbG9yLmNvcHkoYi5ncm91bmRDb2xvcik7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihEZC5wcm90b3R5cGUse19wcm9qU2NyZWVuTWF0cml4Om5ldyByLF9saWdodFBvc2l0aW9uV29ybGQ6bmV3IGcsX2xvb2tUYXJnZXQ6bmV3IGcsZ2V0Vmlld3BvcnRDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fSxnZXRGcnVzdHVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19LHVwZGF0ZU1hdHJpY2VzOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuY2FtZXJhLGg9dGhpcy5tYXRyaXgsbT10aGlzLl9wcm9qU2NyZWVuTWF0cml4LHU9dGhpcy5fbG9va1RhcmdldCx3PXRoaXMuX2xpZ2h0UG9zaXRpb25Xb3JsZDt3LnNldEZyb21NYXRyaXhQb3NpdGlvbihiLm1hdHJpeFdvcmxkKTsKZS5wb3NpdGlvbi5jb3B5KHcpO3Uuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGIudGFyZ2V0Lm1hdHJpeFdvcmxkKTtlLmxvb2tBdCh1KTtlLnVwZGF0ZU1hdHJpeFdvcmxkKCk7bS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSk7dGhpcy5fZnJ1c3R1bS5zZXRGcm9tTWF0cml4KG0pO2guc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpO2gubXVsdGlwbHkoZS5wcm9qZWN0aW9uTWF0cml4KTtoLm11bHRpcGx5KGUubWF0cml4V29ybGRJbnZlcnNlKX0sZ2V0Vmlld3BvcnQ6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1tiXX0sZ2V0RnJhbWVFeHRlbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c30sY29weTpmdW5jdGlvbihiKXt0aGlzLmNhbWVyYT1iLmNhbWVyYS5jbG9uZSgpO3RoaXMuYmlhcz1iLmJpYXM7dGhpcy5yYWRpdXM9Yi5yYWRpdXM7dGhpcy5tYXBTaXplLmNvcHkoYi5tYXBTaXplKTsKcmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSx0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj17fTswIT09dGhpcy5iaWFzJiYoYi5iaWFzPXRoaXMuYmlhcyk7MSE9PXRoaXMucmFkaXVzJiYoYi5yYWRpdXM9dGhpcy5yYWRpdXMpO2lmKDUxMiE9PXRoaXMubWFwU2l6ZS54fHw1MTIhPT10aGlzLm1hcFNpemUueSliLm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKTtiLmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdDtkZWxldGUgYi5jYW1lcmEubWF0cml4O3JldHVybiBifX0pO0xpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoRGQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TGksaXNTcG90TGlnaHRTaGFkb3c6ITAsdXBkYXRlTWF0cmljZXM6ZnVuY3Rpb24oYixlLGgpe3ZhciBtPXRoaXMuY2FtZXJhLHU9MipsYi5SQUQyREVHKmIuYW5nbGUsdz10aGlzLm1hcFNpemUud2lkdGgvCnRoaXMubWFwU2l6ZS5oZWlnaHQsQT1iLmRpc3RhbmNlfHxtLmZhcjtpZih1IT09bS5mb3Z8fHchPT1tLmFzcGVjdHx8QSE9PW0uZmFyKW0uZm92PXUsbS5hc3BlY3Q9dyxtLmZhcj1BLG0udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO0RkLnByb3RvdHlwZS51cGRhdGVNYXRyaWNlcy5jYWxsKHRoaXMsYixlLGgpfX0pO01pLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoVWIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6TWksaXNTcG90TGlnaHQ6ITAsY29weTpmdW5jdGlvbihiKXtVYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5kaXN0YW5jZT1iLmRpc3RhbmNlO3RoaXMuYW5nbGU9Yi5hbmdsZTt0aGlzLnBlbnVtYnJhPWIucGVudW1icmE7dGhpcy5kZWNheT1iLmRlY2F5O3RoaXMudGFyZ2V0PWIudGFyZ2V0LmNsb25lKCk7dGhpcy5zaGFkb3c9Yi5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTtIay5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERkLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpIayxpc1BvaW50TGlnaHRTaGFkb3c6ITAsdXBkYXRlTWF0cmljZXM6ZnVuY3Rpb24oYixlLGgpe2U9dGhpcy5jYW1lcmE7dmFyIG09dGhpcy5tYXRyaXgsdT10aGlzLl9saWdodFBvc2l0aW9uV29ybGQsdz10aGlzLl9sb29rVGFyZ2V0LEE9dGhpcy5fcHJvalNjcmVlbk1hdHJpeDt1LnNldEZyb21NYXRyaXhQb3NpdGlvbihiLm1hdHJpeFdvcmxkKTtlLnBvc2l0aW9uLmNvcHkodSk7dy5jb3B5KGUucG9zaXRpb24pO3cuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2hdKTtlLnVwLmNvcHkodGhpcy5fY3ViZVVwc1toXSk7ZS5sb29rQXQodyk7ZS51cGRhdGVNYXRyaXhXb3JsZCgpO20ubWFrZVRyYW5zbGF0aW9uKC11LngsLXUueSwtdS56KTtBLm11bHRpcGx5TWF0cmljZXMoZS5wcm9qZWN0aW9uTWF0cml4LGUubWF0cml4V29ybGRJbnZlcnNlKTt0aGlzLl9mcnVzdHVtLnNldEZyb21NYXRyaXgoQSl9fSk7TmkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShVYi5wcm90b3R5cGUpLAp7Y29uc3RydWN0b3I6TmksaXNQb2ludExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYil7VWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZGlzdGFuY2U9Yi5kaXN0YW5jZTt0aGlzLmRlY2F5PWIuZGVjYXk7dGhpcy5zaGFkb3c9Yi5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTtHaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEZiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkdoLGlzT3J0aG9ncmFwaGljQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYixlKXtGYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYixlKTt0aGlzLmxlZnQ9Yi5sZWZ0O3RoaXMucmlnaHQ9Yi5yaWdodDt0aGlzLnRvcD1iLnRvcDt0aGlzLmJvdHRvbT1iLmJvdHRvbTt0aGlzLm5lYXI9Yi5uZWFyO3RoaXMuZmFyPWIuZmFyO3RoaXMuem9vbT1iLnpvb207dGhpcy52aWV3PW51bGw9PT1iLnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LGIudmlldyk7cmV0dXJuIHRoaXN9LApzZXRWaWV3T2Zmc2V0OmZ1bmN0aW9uKGIsZSxoLG0sdSx3KXtudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KTt0aGlzLnZpZXcuZW5hYmxlZD0hMDt0aGlzLnZpZXcuZnVsbFdpZHRoPWI7dGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZTt0aGlzLnZpZXcub2Zmc2V0WD1oO3RoaXMudmlldy5vZmZzZXRZPW07dGhpcy52aWV3LndpZHRoPXU7dGhpcy52aWV3LmhlaWdodD13O3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSxjbGVhclZpZXdPZmZzZXQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7dmFyIGI9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLGU9KHRoaXMudG9wLQp0aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxoPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixtPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMix1PWgtYjtoKz1iO2I9bStlO2U9bS1lO2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtoPXRoaXMuem9vbS8odGhpcy52aWV3LndpZHRoL3RoaXMudmlldy5mdWxsV2lkdGgpO2U9dGhpcy56b29tLyh0aGlzLnZpZXcuaGVpZ2h0L3RoaXMudmlldy5mdWxsSGVpZ2h0KTt2YXIgdz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy53aWR0aDttPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmhlaWdodDt1Kz10aGlzLnZpZXcub2Zmc2V0WC9oKnc7aD11K3RoaXMudmlldy53aWR0aC9oKnc7Yi09dGhpcy52aWV3Lm9mZnNldFkvZSptO2U9Yi10aGlzLnZpZXcuaGVpZ2h0L2UqbX10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyh1LGgsYixlLHRoaXMubmVhcix0aGlzLmZhcik7dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5nZXRJbnZlcnNlKHRoaXMucHJvamVjdGlvbk1hdHJpeCl9LAp0b0pTT046ZnVuY3Rpb24oYil7Yj15LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGIpO2Iub2JqZWN0Lnpvb209dGhpcy56b29tO2Iub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0O2Iub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQ7Yi5vYmplY3QudG9wPXRoaXMudG9wO2Iub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbTtiLm9iamVjdC5uZWFyPXRoaXMubmVhcjtiLm9iamVjdC5mYXI9dGhpcy5mYXI7bnVsbCE9PXRoaXMudmlldyYmKGIub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKTtyZXR1cm4gYn19KTtPaS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERkLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk9pLGlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdzohMCx1cGRhdGVNYXRyaWNlczpmdW5jdGlvbihiLGUsaCl7RGQucHJvdG90eXBlLnVwZGF0ZU1hdHJpY2VzLmNhbGwodGhpcyxiLGUsaCl9fSk7UGkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShVYi5wcm90b3R5cGUpLAp7Y29uc3RydWN0b3I6UGksaXNEaXJlY3Rpb25hbExpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYil7VWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMudGFyZ2V0PWIudGFyZ2V0LmNsb25lKCk7dGhpcy5zaGFkb3c9Yi5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTtRaS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFViLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlFpLGlzQW1iaWVudExpZ2h0OiEwfSk7UmkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShVYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpSaSxpc1JlY3RBcmVhTGlnaHQ6ITAsY29weTpmdW5jdGlvbihiKXtVYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy53aWR0aD1iLndpZHRoO3RoaXMuaGVpZ2h0PWIuaGVpZ2h0O3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYil7Yj1VYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtiLm9iamVjdC53aWR0aD0KdGhpcy53aWR0aDtiLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQ7cmV0dXJuIGJ9fSk7U2kucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpTaSxsb2FkOmZ1bmN0aW9uKGIsZSxoLG0pe3ZhciB1PXRoaXMsdz1uZXcgU2ModS5tYW5hZ2VyKTt3LnNldFBhdGgodS5wYXRoKTt3LmxvYWQoYixmdW5jdGlvbihBKXtlKHUucGFyc2UoSlNPTi5wYXJzZShBKSkpfSxoLG0pfSxwYXJzZTpmdW5jdGlvbihiKXtmdW5jdGlvbiBlKEUpe3ZvaWQgMD09PWhbRV0mJmNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWxMb2FkZXI6IFVuZGVmaW5lZCB0ZXh0dXJlIixFKTtyZXR1cm4gaFtFXX12YXIgaD10aGlzLnRleHR1cmVzLG09bmV3IEdzW2IudHlwZV07dm9pZCAwIT09Yi51dWlkJiYobS51dWlkPWIudXVpZCk7dm9pZCAwIT09Yi5uYW1lJiYobS5uYW1lPWIubmFtZSk7dm9pZCAwIT09Yi5jb2xvciYmbS5jb2xvci5zZXRIZXgoYi5jb2xvcik7CnZvaWQgMCE9PWIucm91Z2huZXNzJiYobS5yb3VnaG5lc3M9Yi5yb3VnaG5lc3MpO3ZvaWQgMCE9PWIubWV0YWxuZXNzJiYobS5tZXRhbG5lc3M9Yi5tZXRhbG5lc3MpO3ZvaWQgMCE9PWIuZW1pc3NpdmUmJm0uZW1pc3NpdmUuc2V0SGV4KGIuZW1pc3NpdmUpO3ZvaWQgMCE9PWIuc3BlY3VsYXImJm0uc3BlY3VsYXIuc2V0SGV4KGIuc3BlY3VsYXIpO3ZvaWQgMCE9PWIuc2hpbmluZXNzJiYobS5zaGluaW5lc3M9Yi5zaGluaW5lc3MpO3ZvaWQgMCE9PWIuY2xlYXJjb2F0JiYobS5jbGVhcmNvYXQ9Yi5jbGVhcmNvYXQpO3ZvaWQgMCE9PWIuY2xlYXJjb2F0Um91Z2huZXNzJiYobS5jbGVhcmNvYXRSb3VnaG5lc3M9Yi5jbGVhcmNvYXRSb3VnaG5lc3MpO3ZvaWQgMCE9PWIudmVydGV4Q29sb3JzJiYobS52ZXJ0ZXhDb2xvcnM9Yi52ZXJ0ZXhDb2xvcnMpO3ZvaWQgMCE9PWIuZm9nJiYobS5mb2c9Yi5mb2cpO3ZvaWQgMCE9PWIuZmxhdFNoYWRpbmcmJihtLmZsYXRTaGFkaW5nPWIuZmxhdFNoYWRpbmcpOwp2b2lkIDAhPT1iLmJsZW5kaW5nJiYobS5ibGVuZGluZz1iLmJsZW5kaW5nKTt2b2lkIDAhPT1iLmNvbWJpbmUmJihtLmNvbWJpbmU9Yi5jb21iaW5lKTt2b2lkIDAhPT1iLnNpZGUmJihtLnNpZGU9Yi5zaWRlKTt2b2lkIDAhPT1iLm9wYWNpdHkmJihtLm9wYWNpdHk9Yi5vcGFjaXR5KTt2b2lkIDAhPT1iLnRyYW5zcGFyZW50JiYobS50cmFuc3BhcmVudD1iLnRyYW5zcGFyZW50KTt2b2lkIDAhPT1iLmFscGhhVGVzdCYmKG0uYWxwaGFUZXN0PWIuYWxwaGFUZXN0KTt2b2lkIDAhPT1iLmRlcHRoVGVzdCYmKG0uZGVwdGhUZXN0PWIuZGVwdGhUZXN0KTt2b2lkIDAhPT1iLmRlcHRoV3JpdGUmJihtLmRlcHRoV3JpdGU9Yi5kZXB0aFdyaXRlKTt2b2lkIDAhPT1iLmNvbG9yV3JpdGUmJihtLmNvbG9yV3JpdGU9Yi5jb2xvcldyaXRlKTt2b2lkIDAhPT1iLndpcmVmcmFtZSYmKG0ud2lyZWZyYW1lPWIud2lyZWZyYW1lKTt2b2lkIDAhPT1iLndpcmVmcmFtZUxpbmV3aWR0aCYmKG0ud2lyZWZyYW1lTGluZXdpZHRoPQpiLndpcmVmcmFtZUxpbmV3aWR0aCk7dm9pZCAwIT09Yi53aXJlZnJhbWVMaW5lY2FwJiYobS53aXJlZnJhbWVMaW5lY2FwPWIud2lyZWZyYW1lTGluZWNhcCk7dm9pZCAwIT09Yi53aXJlZnJhbWVMaW5lam9pbiYmKG0ud2lyZWZyYW1lTGluZWpvaW49Yi53aXJlZnJhbWVMaW5lam9pbik7dm9pZCAwIT09Yi5yb3RhdGlvbiYmKG0ucm90YXRpb249Yi5yb3RhdGlvbik7MSE9PWIubGluZXdpZHRoJiYobS5saW5ld2lkdGg9Yi5saW5ld2lkdGgpO3ZvaWQgMCE9PWIuZGFzaFNpemUmJihtLmRhc2hTaXplPWIuZGFzaFNpemUpO3ZvaWQgMCE9PWIuZ2FwU2l6ZSYmKG0uZ2FwU2l6ZT1iLmdhcFNpemUpO3ZvaWQgMCE9PWIuc2NhbGUmJihtLnNjYWxlPWIuc2NhbGUpO3ZvaWQgMCE9PWIucG9seWdvbk9mZnNldCYmKG0ucG9seWdvbk9mZnNldD1iLnBvbHlnb25PZmZzZXQpO3ZvaWQgMCE9PWIucG9seWdvbk9mZnNldEZhY3RvciYmKG0ucG9seWdvbk9mZnNldEZhY3Rvcj1iLnBvbHlnb25PZmZzZXRGYWN0b3IpOwp2b2lkIDAhPT1iLnBvbHlnb25PZmZzZXRVbml0cyYmKG0ucG9seWdvbk9mZnNldFVuaXRzPWIucG9seWdvbk9mZnNldFVuaXRzKTt2b2lkIDAhPT1iLnNraW5uaW5nJiYobS5za2lubmluZz1iLnNraW5uaW5nKTt2b2lkIDAhPT1iLm1vcnBoVGFyZ2V0cyYmKG0ubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzKTt2b2lkIDAhPT1iLm1vcnBoTm9ybWFscyYmKG0ubW9ycGhOb3JtYWxzPWIubW9ycGhOb3JtYWxzKTt2b2lkIDAhPT1iLmRpdGhlcmluZyYmKG0uZGl0aGVyaW5nPWIuZGl0aGVyaW5nKTt2b2lkIDAhPT1iLnZpc2libGUmJihtLnZpc2libGU9Yi52aXNpYmxlKTt2b2lkIDAhPT1iLnRvbmVNYXBwZWQmJihtLnRvbmVNYXBwZWQ9Yi50b25lTWFwcGVkKTt2b2lkIDAhPT1iLnVzZXJEYXRhJiYobS51c2VyRGF0YT1iLnVzZXJEYXRhKTtpZih2b2lkIDAhPT1iLnVuaWZvcm1zKWZvcih2YXIgdSBpbiBiLnVuaWZvcm1zKXt2YXIgdz1iLnVuaWZvcm1zW3VdO20udW5pZm9ybXNbdV09Cnt9O3N3aXRjaCh3LnR5cGUpe2Nhc2UgInQiOm0udW5pZm9ybXNbdV0udmFsdWU9ZSh3LnZhbHVlKTticmVhaztjYXNlICJjIjptLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgSSkuc2V0SGV4KHcudmFsdWUpO2JyZWFrO2Nhc2UgInYyIjptLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgZCkuZnJvbUFycmF5KHcudmFsdWUpO2JyZWFrO2Nhc2UgInYzIjptLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgZykuZnJvbUFycmF5KHcudmFsdWUpO2JyZWFrO2Nhc2UgInY0IjptLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgbikuZnJvbUFycmF5KHcudmFsdWUpO2JyZWFrO2Nhc2UgIm0zIjptLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgbCkuZnJvbUFycmF5KHcudmFsdWUpO2Nhc2UgIm00IjptLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgcikuZnJvbUFycmF5KHcudmFsdWUpO2JyZWFrO2RlZmF1bHQ6bS51bmlmb3Jtc1t1XS52YWx1ZT13LnZhbHVlfX12b2lkIDAhPT1iLmRlZmluZXMmJihtLmRlZmluZXM9Yi5kZWZpbmVzKTsKdm9pZCAwIT09Yi52ZXJ0ZXhTaGFkZXImJihtLnZlcnRleFNoYWRlcj1iLnZlcnRleFNoYWRlcik7dm9pZCAwIT09Yi5mcmFnbWVudFNoYWRlciYmKG0uZnJhZ21lbnRTaGFkZXI9Yi5mcmFnbWVudFNoYWRlcik7aWYodm9pZCAwIT09Yi5leHRlbnNpb25zKWZvcih2YXIgQSBpbiBiLmV4dGVuc2lvbnMpbS5leHRlbnNpb25zW0FdPWIuZXh0ZW5zaW9uc1tBXTt2b2lkIDAhPT1iLnNoYWRpbmcmJihtLmZsYXRTaGFkaW5nPTE9PT1iLnNoYWRpbmcpO3ZvaWQgMCE9PWIuc2l6ZSYmKG0uc2l6ZT1iLnNpemUpO3ZvaWQgMCE9PWIuc2l6ZUF0dGVudWF0aW9uJiYobS5zaXplQXR0ZW51YXRpb249Yi5zaXplQXR0ZW51YXRpb24pO3ZvaWQgMCE9PWIubWFwJiYobS5tYXA9ZShiLm1hcCkpO3ZvaWQgMCE9PWIubWF0Y2FwJiYobS5tYXRjYXA9ZShiLm1hdGNhcCkpO3ZvaWQgMCE9PWIuYWxwaGFNYXAmJihtLmFscGhhTWFwPWUoYi5hbHBoYU1hcCksbS50cmFuc3BhcmVudD0hMCk7dm9pZCAwIT09CmIuYnVtcE1hcCYmKG0uYnVtcE1hcD1lKGIuYnVtcE1hcCkpO3ZvaWQgMCE9PWIuYnVtcFNjYWxlJiYobS5idW1wU2NhbGU9Yi5idW1wU2NhbGUpO3ZvaWQgMCE9PWIubm9ybWFsTWFwJiYobS5ub3JtYWxNYXA9ZShiLm5vcm1hbE1hcCkpO3ZvaWQgMCE9PWIubm9ybWFsTWFwVHlwZSYmKG0ubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGUpO3ZvaWQgMCE9PWIubm9ybWFsU2NhbGUmJih1PWIubm9ybWFsU2NhbGUsITE9PT1BcnJheS5pc0FycmF5KHUpJiYodT1bdSx1XSksbS5ub3JtYWxTY2FsZT0obmV3IGQpLmZyb21BcnJheSh1KSk7dm9pZCAwIT09Yi5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcD1lKGIuZGlzcGxhY2VtZW50TWFwKSk7dm9pZCAwIT09Yi5kaXNwbGFjZW1lbnRTY2FsZSYmKG0uZGlzcGxhY2VtZW50U2NhbGU9Yi5kaXNwbGFjZW1lbnRTY2FsZSk7dm9pZCAwIT09Yi5kaXNwbGFjZW1lbnRCaWFzJiYobS5kaXNwbGFjZW1lbnRCaWFzPWIuZGlzcGxhY2VtZW50Qmlhcyk7CnZvaWQgMCE9PWIucm91Z2huZXNzTWFwJiYobS5yb3VnaG5lc3NNYXA9ZShiLnJvdWdobmVzc01hcCkpO3ZvaWQgMCE9PWIubWV0YWxuZXNzTWFwJiYobS5tZXRhbG5lc3NNYXA9ZShiLm1ldGFsbmVzc01hcCkpO3ZvaWQgMCE9PWIuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwPWUoYi5lbWlzc2l2ZU1hcCkpO3ZvaWQgMCE9PWIuZW1pc3NpdmVJbnRlbnNpdHkmJihtLmVtaXNzaXZlSW50ZW5zaXR5PWIuZW1pc3NpdmVJbnRlbnNpdHkpO3ZvaWQgMCE9PWIuc3BlY3VsYXJNYXAmJihtLnNwZWN1bGFyTWFwPWUoYi5zcGVjdWxhck1hcCkpO3ZvaWQgMCE9PWIuZW52TWFwJiYobS5lbnZNYXA9ZShiLmVudk1hcCkpO3ZvaWQgMCE9PWIuZW52TWFwSW50ZW5zaXR5JiYobS5lbnZNYXBJbnRlbnNpdHk9Yi5lbnZNYXBJbnRlbnNpdHkpO3ZvaWQgMCE9PWIucmVmbGVjdGl2aXR5JiYobS5yZWZsZWN0aXZpdHk9Yi5yZWZsZWN0aXZpdHkpO3ZvaWQgMCE9PWIucmVmcmFjdGlvblJhdGlvJiYobS5yZWZyYWN0aW9uUmF0aW89CmIucmVmcmFjdGlvblJhdGlvKTt2b2lkIDAhPT1iLmxpZ2h0TWFwJiYobS5saWdodE1hcD1lKGIubGlnaHRNYXApKTt2b2lkIDAhPT1iLmxpZ2h0TWFwSW50ZW5zaXR5JiYobS5saWdodE1hcEludGVuc2l0eT1iLmxpZ2h0TWFwSW50ZW5zaXR5KTt2b2lkIDAhPT1iLmFvTWFwJiYobS5hb01hcD1lKGIuYW9NYXApKTt2b2lkIDAhPT1iLmFvTWFwSW50ZW5zaXR5JiYobS5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5KTt2b2lkIDAhPT1iLmdyYWRpZW50TWFwJiYobS5ncmFkaWVudE1hcD1lKGIuZ3JhZGllbnRNYXApKTt2b2lkIDAhPT1iLmNsZWFyY29hdE5vcm1hbE1hcCYmKG0uY2xlYXJjb2F0Tm9ybWFsTWFwPWUoYi5jbGVhcmNvYXROb3JtYWxNYXApKTt2b2lkIDAhPT1iLmNsZWFyY29hdE5vcm1hbFNjYWxlJiYobS5jbGVhcmNvYXROb3JtYWxTY2FsZT0obmV3IGQpLmZyb21BcnJheShiLmNsZWFyY29hdE5vcm1hbFNjYWxlKSk7cmV0dXJuIG19LHNldFRleHR1cmVzOmZ1bmN0aW9uKGIpe3RoaXMudGV4dHVyZXM9CmI7cmV0dXJuIHRoaXN9fSk7dmFyIHNsPXtkZWNvZGVUZXh0OmZ1bmN0aW9uKGIpe2lmKCJ1bmRlZmluZWQiIT09dHlwZW9mIFRleHREZWNvZGVyKXJldHVybihuZXcgVGV4dERlY29kZXIpLmRlY29kZShiKTtmb3IodmFyIGU9IiIsaD0wLG09Yi5sZW5ndGg7aDxtO2grKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGJbaF0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2godSl7cmV0dXJuIGV9fSxleHRyYWN0VXJsQmFzZTpmdW5jdGlvbihiKXt2YXIgZT1iLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lPyIuLyI6Yi5zdWJzdHIoMCxlKzEpfX07VGkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpUaSxpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiEwLGNvcHk6ZnVuY3Rpb24oYil7eGEucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMubWF4SW5zdGFuY2VkQ291bnQ9CmIubWF4SW5zdGFuY2VkQ291bnQ7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSx0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj14YS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7Yi5tYXhJbnN0YW5jZWRDb3VudD10aGlzLm1heEluc3RhbmNlZENvdW50O2IuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDtyZXR1cm4gYn19KTtVaS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VWksaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6ITAsY29weTpmdW5jdGlvbihiKXtSLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9Yi5tZXNoUGVyQXR0cmlidXRlO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj1SLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLm1lc2hQZXJBdHRyaWJ1dGU9CnRoaXMubWVzaFBlckF0dHJpYnV0ZTtiLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3JldHVybiBifX0pO1ZpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VmksbG9hZDpmdW5jdGlvbihiLGUsaCxtKXt2YXIgdT10aGlzLHc9bmV3IFNjKHUubWFuYWdlcik7dy5zZXRQYXRoKHUucGF0aCk7dy5sb2FkKGIsZnVuY3Rpb24oQSl7ZSh1LnBhcnNlKEpTT04ucGFyc2UoQSkpKX0saCxtKX0scGFyc2U6ZnVuY3Rpb24oYil7dmFyIGU9Yi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5P25ldyBUaTpuZXcgeGEsaD1iLmRhdGEuaW5kZXg7aWYodm9pZCAwIT09aCl7dmFyIG09bmV3IHRsW2gudHlwZV0oaC5hcnJheSk7ZS5zZXRJbmRleChuZXcgUihtLDEpKX1oPWIuZGF0YS5hdHRyaWJ1dGVzO2Zvcih2YXIgdSBpbiBoKXt2YXIgdz1oW3VdO209bmV3IHRsW3cudHlwZV0ody5hcnJheSk7bT1uZXcgKHcuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU/ClVpOlIpKG0sdy5pdGVtU2l6ZSx3Lm5vcm1hbGl6ZWQpO3ZvaWQgMCE9PXcubmFtZSYmKG0ubmFtZT13Lm5hbWUpO2UuYWRkQXR0cmlidXRlKHUsbSl9dmFyIEE9Yi5kYXRhLm1vcnBoQXR0cmlidXRlcztpZihBKWZvcih1IGluIEEpe3ZhciBFPUFbdV0sRz1bXTtoPTA7Zm9yKHZhciBKPUUubGVuZ3RoO2g8SjtoKyspdz1FW2hdLG09bmV3IHRsW3cudHlwZV0ody5hcnJheSksbT1uZXcgUihtLHcuaXRlbVNpemUsdy5ub3JtYWxpemVkKSx2b2lkIDAhPT13Lm5hbWUmJihtLm5hbWU9dy5uYW1lKSxHLnB1c2gobSk7ZS5tb3JwaEF0dHJpYnV0ZXNbdV09R311PWIuZGF0YS5ncm91cHN8fGIuZGF0YS5kcmF3Y2FsbHN8fGIuZGF0YS5vZmZzZXRzO2lmKHZvaWQgMCE9PXUpZm9yKGg9MCx3PXUubGVuZ3RoO2ghPT13OysraCltPXVbaF0sZS5hZGRHcm91cChtLnN0YXJ0LG0uY291bnQsbS5tYXRlcmlhbEluZGV4KTtoPWIuZGF0YS5ib3VuZGluZ1NwaGVyZTt2b2lkIDAhPT1oJiYodT1uZXcgZywKdm9pZCAwIT09aC5jZW50ZXImJnUuZnJvbUFycmF5KGguY2VudGVyKSxlLmJvdW5kaW5nU3BoZXJlPW5ldyBGKHUsaC5yYWRpdXMpKTtiLm5hbWUmJihlLm5hbWU9Yi5uYW1lKTtiLnVzZXJEYXRhJiYoZS51c2VyRGF0YT1iLnVzZXJEYXRhKTtyZXR1cm4gZX19KTt2YXIgdGw9e0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5OiJ1bmRlZmluZWQiIT09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P1VpbnQ4Q2xhbXBlZEFycmF5OlVpbnQ4QXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXl9O1dpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6V2ksbG9hZDpmdW5jdGlvbihiLGUsaCxtKXt2YXIgdT10aGlzLHc9IiI9PT10aGlzLnBhdGg/c2wuZXh0cmFjdFVybEJhc2UoYik6dGhpcy5wYXRoO3RoaXMucmVzb3VyY2VQYXRoPQp0aGlzLnJlc291cmNlUGF0aHx8dzt3PW5ldyBTYyh1Lm1hbmFnZXIpO3cuc2V0UGF0aCh0aGlzLnBhdGgpO3cubG9hZChiLGZ1bmN0aW9uKEEpe3ZhciBFPW51bGw7dHJ5e0U9SlNPTi5wYXJzZShBKX1jYXRjaChHKXt2b2lkIDAhPT1tJiZtKEcpO2NvbnNvbGUuZXJyb3IoIlRIUkVFOk9iamVjdExvYWRlcjogQ2FuJ3QgcGFyc2UgIitiKyIuIixHLm1lc3NhZ2UpO3JldHVybn1BPUUubWV0YWRhdGE7dm9pZCAwPT09QXx8dm9pZCAwPT09QS50eXBlfHwiZ2VvbWV0cnkiPT09QS50eXBlLnRvTG93ZXJDYXNlKCk/Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrYik6dS5wYXJzZShFLGUpfSxoLG0pfSxwYXJzZTpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMucGFyc2VTaGFwZShiLnNoYXBlcyk7aD10aGlzLnBhcnNlR2VvbWV0cmllcyhiLmdlb21ldHJpZXMsaCk7dmFyIG09dGhpcy5wYXJzZUltYWdlcyhiLmltYWdlcyxmdW5jdGlvbigpe3ZvaWQgMCE9PQplJiZlKHUpfSk7bT10aGlzLnBhcnNlVGV4dHVyZXMoYi50ZXh0dXJlcyxtKTttPXRoaXMucGFyc2VNYXRlcmlhbHMoYi5tYXRlcmlhbHMsbSk7dmFyIHU9dGhpcy5wYXJzZU9iamVjdChiLm9iamVjdCxoLG0pO2IuYW5pbWF0aW9ucyYmKHUuYW5pbWF0aW9ucz10aGlzLnBhcnNlQW5pbWF0aW9ucyhiLmFuaW1hdGlvbnMpKTt2b2lkIDAhPT1iLmltYWdlcyYmMCE9PWIuaW1hZ2VzLmxlbmd0aHx8dm9pZCAwPT09ZXx8ZSh1KTtyZXR1cm4gdX0scGFyc2VTaGFwZTpmdW5jdGlvbihiKXt2YXIgZT17fTtpZih2b2lkIDAhPT1iKWZvcih2YXIgaD0wLG09Yi5sZW5ndGg7aDxtO2grKyl7dmFyIHU9KG5ldyB0ZSkuZnJvbUpTT04oYltoXSk7ZVt1LnV1aWRdPXV9cmV0dXJuIGV9LHBhcnNlR2VvbWV0cmllczpmdW5jdGlvbihiLGUpe3ZhciBoPXt9O2lmKHZvaWQgMCE9PWIpZm9yKHZhciBtPW5ldyBWaSx1PTAsdz1iLmxlbmd0aDt1PHc7dSsrKXt2YXIgQT1iW3VdO3N3aXRjaChBLnR5cGUpe2Nhc2UgIlBsYW5lR2VvbWV0cnkiOmNhc2UgIlBsYW5lQnVmZmVyR2VvbWV0cnkiOnZhciBFPQpuZXcgQ2NbQS50eXBlXShBLndpZHRoLEEuaGVpZ2h0LEEud2lkdGhTZWdtZW50cyxBLmhlaWdodFNlZ21lbnRzKTticmVhaztjYXNlICJCb3hHZW9tZXRyeSI6Y2FzZSAiQm94QnVmZmVyR2VvbWV0cnkiOmNhc2UgIkN1YmVHZW9tZXRyeSI6RT1uZXcgQ2NbQS50eXBlXShBLndpZHRoLEEuaGVpZ2h0LEEuZGVwdGgsQS53aWR0aFNlZ21lbnRzLEEuaGVpZ2h0U2VnbWVudHMsQS5kZXB0aFNlZ21lbnRzKTticmVhaztjYXNlICJDaXJjbGVHZW9tZXRyeSI6Y2FzZSAiQ2lyY2xlQnVmZmVyR2VvbWV0cnkiOkU9bmV3IENjW0EudHlwZV0oQS5yYWRpdXMsQS5zZWdtZW50cyxBLnRoZXRhU3RhcnQsQS50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiQ3lsaW5kZXJHZW9tZXRyeSI6Y2FzZSAiQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeSI6RT1uZXcgQ2NbQS50eXBlXShBLnJhZGl1c1RvcCxBLnJhZGl1c0JvdHRvbSxBLmhlaWdodCxBLnJhZGlhbFNlZ21lbnRzLEEuaGVpZ2h0U2VnbWVudHMsQS5vcGVuRW5kZWQsCkEudGhldGFTdGFydCxBLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJDb25lR2VvbWV0cnkiOmNhc2UgIkNvbmVCdWZmZXJHZW9tZXRyeSI6RT1uZXcgQ2NbQS50eXBlXShBLnJhZGl1cyxBLmhlaWdodCxBLnJhZGlhbFNlZ21lbnRzLEEuaGVpZ2h0U2VnbWVudHMsQS5vcGVuRW5kZWQsQS50aGV0YVN0YXJ0LEEudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIlNwaGVyZUdlb21ldHJ5IjpjYXNlICJTcGhlcmVCdWZmZXJHZW9tZXRyeSI6RT1uZXcgQ2NbQS50eXBlXShBLnJhZGl1cyxBLndpZHRoU2VnbWVudHMsQS5oZWlnaHRTZWdtZW50cyxBLnBoaVN0YXJ0LEEucGhpTGVuZ3RoLEEudGhldGFTdGFydCxBLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJEb2RlY2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiRG9kZWNhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOmNhc2UgIkljb3NhaGVkcm9uR2VvbWV0cnkiOmNhc2UgIkljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOmNhc2UgIk9jdGFoZWRyb25HZW9tZXRyeSI6Y2FzZSAiT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjpjYXNlICJUZXRyYWhlZHJvbkdlb21ldHJ5IjpjYXNlICJUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjpFPQpuZXcgQ2NbQS50eXBlXShBLnJhZGl1cyxBLmRldGFpbCk7YnJlYWs7Y2FzZSAiUmluZ0dlb21ldHJ5IjpjYXNlICJSaW5nQnVmZmVyR2VvbWV0cnkiOkU9bmV3IENjW0EudHlwZV0oQS5pbm5lclJhZGl1cyxBLm91dGVyUmFkaXVzLEEudGhldGFTZWdtZW50cyxBLnBoaVNlZ21lbnRzLEEudGhldGFTdGFydCxBLnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJUb3J1c0dlb21ldHJ5IjpjYXNlICJUb3J1c0J1ZmZlckdlb21ldHJ5IjpFPW5ldyBDY1tBLnR5cGVdKEEucmFkaXVzLEEudHViZSxBLnJhZGlhbFNlZ21lbnRzLEEudHVidWxhclNlZ21lbnRzLEEuYXJjKTticmVhaztjYXNlICJUb3J1c0tub3RHZW9tZXRyeSI6Y2FzZSAiVG9ydXNLbm90QnVmZmVyR2VvbWV0cnkiOkU9bmV3IENjW0EudHlwZV0oQS5yYWRpdXMsQS50dWJlLEEudHVidWxhclNlZ21lbnRzLEEucmFkaWFsU2VnbWVudHMsQS5wLEEucSk7YnJlYWs7Y2FzZSAiVHViZUdlb21ldHJ5IjpjYXNlICJUdWJlQnVmZmVyR2VvbWV0cnkiOkU9Cm5ldyBDY1tBLnR5cGVdKChuZXcgcmxbQS5wYXRoLnR5cGVdKS5mcm9tSlNPTihBLnBhdGgpLEEudHVidWxhclNlZ21lbnRzLEEucmFkaXVzLEEucmFkaWFsU2VnbWVudHMsQS5jbG9zZWQpO2JyZWFrO2Nhc2UgIkxhdGhlR2VvbWV0cnkiOmNhc2UgIkxhdGhlQnVmZmVyR2VvbWV0cnkiOkU9bmV3IENjW0EudHlwZV0oQS5wb2ludHMsQS5zZWdtZW50cyxBLnBoaVN0YXJ0LEEucGhpTGVuZ3RoKTticmVhaztjYXNlICJQb2x5aGVkcm9uR2VvbWV0cnkiOmNhc2UgIlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSI6RT1uZXcgQ2NbQS50eXBlXShBLnZlcnRpY2VzLEEuaW5kaWNlcyxBLnJhZGl1cyxBLmRldGFpbHMpO2JyZWFrO2Nhc2UgIlNoYXBlR2VvbWV0cnkiOmNhc2UgIlNoYXBlQnVmZmVyR2VvbWV0cnkiOkU9W107Zm9yKHZhciBHPTAsSj1BLnNoYXBlcy5sZW5ndGg7RzxKO0crKyl7dmFyIFE9ZVtBLnNoYXBlc1tHXV07RS5wdXNoKFEpfUU9bmV3IENjW0EudHlwZV0oRSxBLmN1cnZlU2VnbWVudHMpOwpicmVhaztjYXNlICJFeHRydWRlR2VvbWV0cnkiOmNhc2UgIkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeSI6RT1bXTtHPTA7Zm9yKEo9QS5zaGFwZXMubGVuZ3RoO0c8SjtHKyspUT1lW0Euc2hhcGVzW0ddXSxFLnB1c2goUSk7Rz1BLm9wdGlvbnMuZXh0cnVkZVBhdGg7dm9pZCAwIT09RyYmKEEub3B0aW9ucy5leHRydWRlUGF0aD0obmV3IHJsW0cudHlwZV0pLmZyb21KU09OKEcpKTtFPW5ldyBDY1tBLnR5cGVdKEUsQS5vcHRpb25zKTticmVhaztjYXNlICJCdWZmZXJHZW9tZXRyeSI6Y2FzZSAiSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiOkU9bS5wYXJzZShBKTticmVhaztjYXNlICJHZW9tZXRyeSI6IlRIUkVFImluIHdpbmRvdyYmIkxlZ2FjeUpTT05Mb2FkZXIiaW4gVEhSRUU/RT0obmV3IFRIUkVFLkxlZ2FjeUpTT05Mb2FkZXIpLnBhcnNlKEEsdGhpcy5yZXNvdXJjZVBhdGgpLmdlb21ldHJ5OmNvbnNvbGUuZXJyb3IoJ1RIUkVFLk9iamVjdExvYWRlcjogWW91IGhhdmUgdG8gaW1wb3J0IExlZ2FjeUpTT05Mb2FkZXIgaW4gb3JkZXIgbG9hZCBnZW9tZXRyeSBkYXRhIG9mIHR5cGUgIkdlb21ldHJ5Ii4nKTsKYnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJytBLnR5cGUrJyInKTtjb250aW51ZX1FLnV1aWQ9QS51dWlkO3ZvaWQgMCE9PUEubmFtZSYmKEUubmFtZT1BLm5hbWUpOyEwPT09RS5pc0J1ZmZlckdlb21ldHJ5JiZ2b2lkIDAhPT1BLnVzZXJEYXRhJiYoRS51c2VyRGF0YT1BLnVzZXJEYXRhKTtoW0EudXVpZF09RX1yZXR1cm4gaH0scGFyc2VNYXRlcmlhbHM6ZnVuY3Rpb24oYixlKXt2YXIgaD17fSxtPXt9O2lmKHZvaWQgMCE9PWIpe3ZhciB1PW5ldyBTaTt1LnNldFRleHR1cmVzKGUpO2U9MDtmb3IodmFyIHc9Yi5sZW5ndGg7ZTx3O2UrKyl7dmFyIEE9YltlXTtpZigiTXVsdGlNYXRlcmlhbCI9PT1BLnR5cGUpe2Zvcih2YXIgRT1bXSxHPTA7RzxBLm1hdGVyaWFscy5sZW5ndGg7RysrKXt2YXIgSj1BLm1hdGVyaWFsc1tHXTt2b2lkIDA9PT1oW0oudXVpZF0mJihoW0oudXVpZF09dS5wYXJzZShKKSk7CkUucHVzaChoW0oudXVpZF0pfW1bQS51dWlkXT1FfWVsc2Ugdm9pZCAwPT09aFtBLnV1aWRdJiYoaFtBLnV1aWRdPXUucGFyc2UoQSkpLG1bQS51dWlkXT1oW0EudXVpZF19fXJldHVybiBtfSxwYXJzZUFuaW1hdGlvbnM6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPVtdLGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIG09YltoXSx1PVJjLnBhcnNlKG0pO3ZvaWQgMCE9PW0udXVpZCYmKHUudXVpZD1tLnV1aWQpO2UucHVzaCh1KX1yZXR1cm4gZX0scGFyc2VJbWFnZXM6ZnVuY3Rpb24oYixlKXtmdW5jdGlvbiBoKFQpe20ubWFuYWdlci5pdGVtU3RhcnQoVCk7cmV0dXJuIHcubG9hZChULGZ1bmN0aW9uKCl7bS5tYW5hZ2VyLml0ZW1FbmQoVCl9LHZvaWQgMCxmdW5jdGlvbigpe20ubWFuYWdlci5pdGVtRXJyb3IoVCk7bS5tYW5hZ2VyLml0ZW1FbmQoVCl9KX12YXIgbT10aGlzLHU9e307aWYodm9pZCAwIT09YiYmMDxiLmxlbmd0aCl7ZT1uZXcgRGsoZSk7dmFyIHc9bmV3IGVnKGUpO3cuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7CmU9MDtmb3IodmFyIEE9Yi5sZW5ndGg7ZTxBO2UrKyl7dmFyIEU9YltlXSxHPUUudXJsO2lmKEFycmF5LmlzQXJyYXkoRykpe3VbRS51dWlkXT1bXTtmb3IodmFyIEo9MCxRPUcubGVuZ3RoO0o8UTtKKyspe3ZhciBTPUdbSl07Uz0vXihcL1wvKXwoW2Etel0rOihcL1wvKT8pL2kudGVzdChTKT9TOm0ucmVzb3VyY2VQYXRoK1M7dVtFLnV1aWRdLnB1c2goaChTKSl9fWVsc2UgUz0vXihcL1wvKXwoW2Etel0rOihcL1wvKT8pL2kudGVzdChFLnVybCk/RS51cmw6bS5yZXNvdXJjZVBhdGgrRS51cmwsdVtFLnV1aWRdPWgoUyl9fXJldHVybiB1fSxwYXJzZVRleHR1cmVzOmZ1bmN0aW9uKGIsZSl7ZnVuY3Rpb24gaChHLEope2lmKCJudW1iZXIiPT09dHlwZW9mIEcpcmV0dXJuIEc7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXIucGFyc2VUZXh0dXJlOiBDb25zdGFudCBzaG91bGQgYmUgaW4gbnVtZXJpYyBmb3JtLiIsRyk7cmV0dXJuIEpbR119dmFyIG09e307aWYodm9pZCAwIT09CmIpZm9yKHZhciB1PTAsdz1iLmxlbmd0aDt1PHc7dSsrKXt2YXIgQT1iW3VdO3ZvaWQgMD09PUEuaW1hZ2UmJmNvbnNvbGUud2FybignVEhSRUUuT2JqZWN0TG9hZGVyOiBObyAiaW1hZ2UiIHNwZWNpZmllZCBmb3InLEEudXVpZCk7dm9pZCAwPT09ZVtBLmltYWdlXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBpbWFnZSIsQS5pbWFnZSk7dmFyIEU9QXJyYXkuaXNBcnJheShlW0EuaW1hZ2VdKT9uZXcgTWQoZVtBLmltYWdlXSk6bmV3IGsoZVtBLmltYWdlXSk7RS5uZWVkc1VwZGF0ZT0hMDtFLnV1aWQ9QS51dWlkO3ZvaWQgMCE9PUEubmFtZSYmKEUubmFtZT1BLm5hbWUpO3ZvaWQgMCE9PUEubWFwcGluZyYmKEUubWFwcGluZz1oKEEubWFwcGluZyxIcykpO3ZvaWQgMCE9PUEub2Zmc2V0JiZFLm9mZnNldC5mcm9tQXJyYXkoQS5vZmZzZXQpO3ZvaWQgMCE9PUEucmVwZWF0JiZFLnJlcGVhdC5mcm9tQXJyYXkoQS5yZXBlYXQpO3ZvaWQgMCE9PUEuY2VudGVyJiYKRS5jZW50ZXIuZnJvbUFycmF5KEEuY2VudGVyKTt2b2lkIDAhPT1BLnJvdGF0aW9uJiYoRS5yb3RhdGlvbj1BLnJvdGF0aW9uKTt2b2lkIDAhPT1BLndyYXAmJihFLndyYXBTPWgoQS53cmFwWzBdLEJvKSxFLndyYXBUPWgoQS53cmFwWzFdLEJvKSk7dm9pZCAwIT09QS5mb3JtYXQmJihFLmZvcm1hdD1BLmZvcm1hdCk7dm9pZCAwIT09QS50eXBlJiYoRS50eXBlPUEudHlwZSk7dm9pZCAwIT09QS5lbmNvZGluZyYmKEUuZW5jb2Rpbmc9QS5lbmNvZGluZyk7dm9pZCAwIT09QS5taW5GaWx0ZXImJihFLm1pbkZpbHRlcj1oKEEubWluRmlsdGVyLENvKSk7dm9pZCAwIT09QS5tYWdGaWx0ZXImJihFLm1hZ0ZpbHRlcj1oKEEubWFnRmlsdGVyLENvKSk7dm9pZCAwIT09QS5hbmlzb3Ryb3B5JiYoRS5hbmlzb3Ryb3B5PUEuYW5pc290cm9weSk7dm9pZCAwIT09QS5mbGlwWSYmKEUuZmxpcFk9QS5mbGlwWSk7dm9pZCAwIT09QS5wcmVtdWx0aXBseUFscGhhJiYoRS5wcmVtdWx0aXBseUFscGhhPQpBLnByZW11bHRpcGx5QWxwaGEpO3ZvaWQgMCE9PUEudW5wYWNrQWxpZ25tZW50JiYoRS51bnBhY2tBbGlnbm1lbnQ9QS51bnBhY2tBbGlnbm1lbnQpO21bQS51dWlkXT1FfXJldHVybiBtfSxwYXJzZU9iamVjdDpmdW5jdGlvbihiLGUsaCl7ZnVuY3Rpb24gbShKKXt2b2lkIDA9PT1lW0pdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGdlb21ldHJ5IixKKTtyZXR1cm4gZVtKXX1mdW5jdGlvbiB1KEope2lmKHZvaWQgMCE9PUope2lmKEFycmF5LmlzQXJyYXkoSikpe2Zvcih2YXIgUT1bXSxTPTAsVD1KLmxlbmd0aDtTPFQ7UysrKXt2YXIgVz1KW1NdO3ZvaWQgMD09PWhbV10mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLFcpO1EucHVzaChoW1ddKX1yZXR1cm4gUX12b2lkIDA9PT1oW0pdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixKKTtyZXR1cm4gaFtKXX19CnN3aXRjaChiLnR5cGUpe2Nhc2UgIlNjZW5lIjp2YXIgdz1uZXcgejt2b2lkIDAhPT1iLmJhY2tncm91bmQmJk51bWJlci5pc0ludGVnZXIoYi5iYWNrZ3JvdW5kKSYmKHcuYmFja2dyb3VuZD1uZXcgSShiLmJhY2tncm91bmQpKTt2b2lkIDAhPT1iLmZvZyYmKCJGb2ciPT09Yi5mb2cudHlwZT93LmZvZz1uZXcgeGkoYi5mb2cuY29sb3IsYi5mb2cubmVhcixiLmZvZy5mYXIpOiJGb2dFeHAyIj09PWIuZm9nLnR5cGUmJih3LmZvZz1uZXcgd2koYi5mb2cuY29sb3IsYi5mb2cuZGVuc2l0eSkpKTticmVhaztjYXNlICJQZXJzcGVjdGl2ZUNhbWVyYSI6dz1uZXcgQWIoYi5mb3YsYi5hc3BlY3QsYi5uZWFyLGIuZmFyKTt2b2lkIDAhPT1iLmZvY3VzJiYody5mb2N1cz1iLmZvY3VzKTt2b2lkIDAhPT1iLnpvb20mJih3Lnpvb209Yi56b29tKTt2b2lkIDAhPT1iLmZpbG1HYXVnZSYmKHcuZmlsbUdhdWdlPWIuZmlsbUdhdWdlKTt2b2lkIDAhPT1iLmZpbG1PZmZzZXQmJih3LmZpbG1PZmZzZXQ9CmIuZmlsbU9mZnNldCk7dm9pZCAwIT09Yi52aWV3JiYody52aWV3PU9iamVjdC5hc3NpZ24oe30sYi52aWV3KSk7YnJlYWs7Y2FzZSAiT3J0aG9ncmFwaGljQ2FtZXJhIjp3PW5ldyBHaChiLmxlZnQsYi5yaWdodCxiLnRvcCxiLmJvdHRvbSxiLm5lYXIsYi5mYXIpO3ZvaWQgMCE9PWIuem9vbSYmKHcuem9vbT1iLnpvb20pO3ZvaWQgMCE9PWIudmlldyYmKHcudmlldz1PYmplY3QuYXNzaWduKHt9LGIudmlldykpO2JyZWFrO2Nhc2UgIkFtYmllbnRMaWdodCI6dz1uZXcgUWkoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiRGlyZWN0aW9uYWxMaWdodCI6dz1uZXcgUGkoYi5jb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiUG9pbnRMaWdodCI6dz1uZXcgTmkoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuZGVjYXkpO2JyZWFrO2Nhc2UgIlJlY3RBcmVhTGlnaHQiOnc9bmV3IFJpKGIuY29sb3IsYi5pbnRlbnNpdHksYi53aWR0aCxiLmhlaWdodCk7YnJlYWs7CmNhc2UgIlNwb3RMaWdodCI6dz1uZXcgTWkoYi5jb2xvcixiLmludGVuc2l0eSxiLmRpc3RhbmNlLGIuYW5nbGUsYi5wZW51bWJyYSxiLmRlY2F5KTticmVhaztjYXNlICJIZW1pc3BoZXJlTGlnaHQiOnc9bmV3IEtpKGIuY29sb3IsYi5ncm91bmRDb2xvcixiLmludGVuc2l0eSk7YnJlYWs7Y2FzZSAiU2tpbm5lZE1lc2giOmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlT2JqZWN0KCkgZG9lcyBub3Qgc3VwcG9ydCBTa2lubmVkTWVzaCB5ZXQuIik7Y2FzZSAiTWVzaCI6dz1tKGIuZ2VvbWV0cnkpO3ZhciBBPXUoYi5tYXRlcmlhbCk7dz13LmJvbmVzJiYwPHcuYm9uZXMubGVuZ3RoP25ldyBmaCh3LEEpOm5ldyB5YSh3LEEpO3ZvaWQgMCE9PWIuZHJhd01vZGUmJncuc2V0RHJhd01vZGUoYi5kcmF3TW9kZSk7YnJlYWs7Y2FzZSAiTE9EIjp3PW5ldyBlaDticmVhaztjYXNlICJMaW5lIjp3PW5ldyBtYyhtKGIuZ2VvbWV0cnkpLHUoYi5tYXRlcmlhbCksYi5tb2RlKTsKYnJlYWs7Y2FzZSAiTGluZUxvb3AiOnc9bmV3IEFpKG0oYi5nZW9tZXRyeSksdShiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiTGluZVNlZ21lbnRzIjp3PW5ldyBTYihtKGIuZ2VvbWV0cnkpLHUoYi5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UgIlBvaW50Q2xvdWQiOmNhc2UgIlBvaW50cyI6dz1uZXcgTmYobShiLmdlb21ldHJ5KSx1KGIubWF0ZXJpYWwpKTticmVhaztjYXNlICJTcHJpdGUiOnc9bmV3IGNoKHUoYi5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UgIkdyb3VwIjp3PW5ldyBGZjticmVhaztkZWZhdWx0Onc9bmV3IHl9dy51dWlkPWIudXVpZDt2b2lkIDAhPT1iLm5hbWUmJih3Lm5hbWU9Yi5uYW1lKTt2b2lkIDAhPT1iLm1hdHJpeD8ody5tYXRyaXguZnJvbUFycmF5KGIubWF0cml4KSx2b2lkIDAhPT1iLm1hdHJpeEF1dG9VcGRhdGUmJih3Lm1hdHJpeEF1dG9VcGRhdGU9Yi5tYXRyaXhBdXRvVXBkYXRlKSx3Lm1hdHJpeEF1dG9VcGRhdGUmJncubWF0cml4LmRlY29tcG9zZSh3LnBvc2l0aW9uLAp3LnF1YXRlcm5pb24sdy5zY2FsZSkpOih2b2lkIDAhPT1iLnBvc2l0aW9uJiZ3LnBvc2l0aW9uLmZyb21BcnJheShiLnBvc2l0aW9uKSx2b2lkIDAhPT1iLnJvdGF0aW9uJiZ3LnJvdGF0aW9uLmZyb21BcnJheShiLnJvdGF0aW9uKSx2b2lkIDAhPT1iLnF1YXRlcm5pb24mJncucXVhdGVybmlvbi5mcm9tQXJyYXkoYi5xdWF0ZXJuaW9uKSx2b2lkIDAhPT1iLnNjYWxlJiZ3LnNjYWxlLmZyb21BcnJheShiLnNjYWxlKSk7dm9pZCAwIT09Yi5jYXN0U2hhZG93JiYody5jYXN0U2hhZG93PWIuY2FzdFNoYWRvdyk7dm9pZCAwIT09Yi5yZWNlaXZlU2hhZG93JiYody5yZWNlaXZlU2hhZG93PWIucmVjZWl2ZVNoYWRvdyk7Yi5zaGFkb3cmJih2b2lkIDAhPT1iLnNoYWRvdy5iaWFzJiYody5zaGFkb3cuYmlhcz1iLnNoYWRvdy5iaWFzKSx2b2lkIDAhPT1iLnNoYWRvdy5yYWRpdXMmJih3LnNoYWRvdy5yYWRpdXM9Yi5zaGFkb3cucmFkaXVzKSx2b2lkIDAhPT1iLnNoYWRvdy5tYXBTaXplJiYKdy5zaGFkb3cubWFwU2l6ZS5mcm9tQXJyYXkoYi5zaGFkb3cubWFwU2l6ZSksdm9pZCAwIT09Yi5zaGFkb3cuY2FtZXJhJiYody5zaGFkb3cuY2FtZXJhPXRoaXMucGFyc2VPYmplY3QoYi5zaGFkb3cuY2FtZXJhKSkpO3ZvaWQgMCE9PWIudmlzaWJsZSYmKHcudmlzaWJsZT1iLnZpc2libGUpO3ZvaWQgMCE9PWIuZnJ1c3R1bUN1bGxlZCYmKHcuZnJ1c3R1bUN1bGxlZD1iLmZydXN0dW1DdWxsZWQpO3ZvaWQgMCE9PWIucmVuZGVyT3JkZXImJih3LnJlbmRlck9yZGVyPWIucmVuZGVyT3JkZXIpO3ZvaWQgMCE9PWIudXNlckRhdGEmJih3LnVzZXJEYXRhPWIudXNlckRhdGEpO3ZvaWQgMCE9PWIubGF5ZXJzJiYody5sYXllcnMubWFzaz1iLmxheWVycyk7aWYodm9pZCAwIT09Yi5jaGlsZHJlbil7QT1iLmNoaWxkcmVuO2Zvcih2YXIgRT0wO0U8QS5sZW5ndGg7RSsrKXcuYWRkKHRoaXMucGFyc2VPYmplY3QoQVtFXSxlLGgpKX1pZigiTE9EIj09PWIudHlwZSlmb3IoYj1iLmxldmVscyxBPQowO0E8Yi5sZW5ndGg7QSsrKXtFPWJbQV07dmFyIEc9dy5nZXRPYmplY3RCeVByb3BlcnR5KCJ1dWlkIixFLm9iamVjdCk7dm9pZCAwIT09RyYmdy5hZGRMZXZlbChHLEUuZGlzdGFuY2UpfXJldHVybiB3fX0pO3ZhciBIcz17VVZNYXBwaW5nOjMwMCxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6MzAxLEN1YmVSZWZyYWN0aW9uTWFwcGluZzozMDIsRXF1aXJlY3Rhbmd1bGFyUmVmbGVjdGlvbk1hcHBpbmc6MzAzLEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOjMwNCxTcGhlcmljYWxSZWZsZWN0aW9uTWFwcGluZzozMDUsQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc6MzA2LEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOjMwN30sQm89e1JlcGVhdFdyYXBwaW5nOjFFMyxDbGFtcFRvRWRnZVdyYXBwaW5nOjEwMDEsTWlycm9yZWRSZXBlYXRXcmFwcGluZzoxMDAyfSxDbz17TmVhcmVzdEZpbHRlcjoxMDAzLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOjEwMDQsTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlcjoxMDA1LApMaW5lYXJGaWx0ZXI6MTAwNixMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyOjEwMDcsTGluZWFyTWlwbWFwTGluZWFyRmlsdGVyOjEwMDh9O0lrLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoS2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6SWssc2V0T3B0aW9uczpmdW5jdGlvbihiKXt0aGlzLm9wdGlvbnM9YjtyZXR1cm4gdGhpc30sbG9hZDpmdW5jdGlvbihiLGUsaCxtKXt2b2lkIDA9PT1iJiYoYj0iIik7dm9pZCAwIT09dGhpcy5wYXRoJiYoYj10aGlzLnBhdGgrYik7Yj10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTChiKTt2YXIgdT10aGlzLHc9Z2YuZ2V0KGIpO2lmKHZvaWQgMCE9PXcpcmV0dXJuIHUubWFuYWdlci5pdGVtU3RhcnQoYiksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUodyk7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LDApLHc7ZmV0Y2goYikudGhlbihmdW5jdGlvbihBKXtyZXR1cm4gQS5ibG9iKCl9KS50aGVuKGZ1bmN0aW9uKEEpe3JldHVybiB2b2lkIDA9PT0KdS5vcHRpb25zP2NyZWF0ZUltYWdlQml0bWFwKEEpOmNyZWF0ZUltYWdlQml0bWFwKEEsdS5vcHRpb25zKX0pLnRoZW4oZnVuY3Rpb24oQSl7Z2YuYWRkKGIsQSk7ZSYmZShBKTt1Lm1hbmFnZXIuaXRlbUVuZChiKX0pLmNhdGNoKGZ1bmN0aW9uKEEpe20mJm0oQSk7dS5tYW5hZ2VyLml0ZW1FcnJvcihiKTt1Lm1hbmFnZXIuaXRlbUVuZChiKX0pO3UubWFuYWdlci5pdGVtU3RhcnQoYil9fSk7T2JqZWN0LmFzc2lnbihKay5wcm90b3R5cGUse21vdmVUbzpmdW5jdGlvbihiLGUpe3RoaXMuY3VycmVudFBhdGg9bmV3IGlkO3RoaXMuc3ViUGF0aHMucHVzaCh0aGlzLmN1cnJlbnRQYXRoKTt0aGlzLmN1cnJlbnRQYXRoLm1vdmVUbyhiLGUpfSxsaW5lVG86ZnVuY3Rpb24oYixlKXt0aGlzLmN1cnJlbnRQYXRoLmxpbmVUbyhiLGUpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGIsZSxoLG0pe3RoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyhiLGUsaCxtKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihiLAplLGgsbSx1LHcpe3RoaXMuY3VycmVudFBhdGguYmV6aWVyQ3VydmVUbyhiLGUsaCxtLHUsdyl9LHNwbGluZVRocnU6ZnVuY3Rpb24oYil7dGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KGIpfSx0b1NoYXBlczpmdW5jdGlvbihiLGUpe2Z1bmN0aW9uIGgoaGEpe2Zvcih2YXIgc2E9W10scWE9MCxyYT1oYS5sZW5ndGg7cWE8cmE7cWErKyl7dmFyIHdhPWhhW3FhXSxwYT1uZXcgdGU7cGEuY3VydmVzPXdhLmN1cnZlcztzYS5wdXNoKHBhKX1yZXR1cm4gc2F9ZnVuY3Rpb24gbShoYSxzYSl7Zm9yKHZhciBxYT1zYS5sZW5ndGgscmE9ITEsd2E9cWEtMSxwYT0wO3BhPHFhO3dhPXBhKyspe3ZhciB2YT1zYVt3YV0sQ2E9c2FbcGFdLFZhPUNhLngtdmEueCxXYT1DYS55LXZhLnk7aWYoTWF0aC5hYnMoV2EpPk51bWJlci5FUFNJTE9OKXtpZigwPldhJiYodmE9c2FbcGFdLFZhPS1WYSxDYT1zYVt3YV0sV2E9LVdhKSwhKGhhLnk8dmEueXx8aGEueT5DYS55KSlpZihoYS55PT09dmEueSl7aWYoaGEueD09PQp2YS54KXJldHVybiEwfWVsc2V7d2E9V2EqKGhhLngtdmEueCktVmEqKGhhLnktdmEueSk7aWYoMD09PXdhKXJldHVybiEwOzA+d2F8fChyYT0hcmEpfX1lbHNlIGlmKGhhLnk9PT12YS55JiYoQ2EueDw9aGEueCYmaGEueDw9dmEueHx8dmEueDw9aGEueCYmaGEueDw9Q2EueCkpcmV0dXJuITB9cmV0dXJuIHJhfXZhciB1PU9kLmlzQ2xvY2tXaXNlLHc9dGhpcy5zdWJQYXRocztpZigwPT09dy5sZW5ndGgpcmV0dXJuW107aWYoITA9PT1lKXJldHVybiBoKHcpO2U9W107aWYoMT09PXcubGVuZ3RoKXt2YXIgQT13WzBdO3ZhciBFPW5ldyB0ZTtFLmN1cnZlcz1BLmN1cnZlcztlLnB1c2goRSk7cmV0dXJuIGV9dmFyIEc9IXUod1swXS5nZXRQb2ludHMoKSk7Rz1iPyFHOkc7RT1bXTt2YXIgSj1bXSxRPVtdLFM9MDtKW1NdPXZvaWQgMDtRW1NdPVtdO2Zvcih2YXIgVD0wLFc9dy5sZW5ndGg7VDxXO1QrKyl7QT13W1RdO3ZhciBYPUEuZ2V0UG9pbnRzKCk7dmFyIGlhPXUoWCk7KGlhPWI/IWlhOgppYSk/KCFHJiZKW1NdJiZTKyssSltTXT17czpuZXcgdGUscDpYfSxKW1NdLnMuY3VydmVzPUEuY3VydmVzLEcmJlMrKyxRW1NdPVtdKTpRW1NdLnB1c2goe2g6QSxwOlhbMF19KX1pZighSlswXSlyZXR1cm4gaCh3KTtpZigxPEoubGVuZ3RoKXtUPSExO2I9W107dT0wO2Zvcih3PUoubGVuZ3RoO3U8dzt1KyspRVt1XT1bXTt1PTA7Zm9yKHc9Si5sZW5ndGg7dTx3O3UrKylmb3IoQT1RW3VdLGlhPTA7aWE8QS5sZW5ndGg7aWErKyl7Rz1BW2lhXTtTPSEwO2ZvcihYPTA7WDxKLmxlbmd0aDtYKyspbShHLnAsSltYXS5wKSYmKHUhPT1YJiZiLnB1c2goe2Zyb21zOnUsdG9zOlgsaG9sZTppYX0pLFM/KFM9ITEsRVtYXS5wdXNoKEcpKTpUPSEwKTtTJiZFW3VdLnB1c2goRyl9MDxiLmxlbmd0aCYmKFR8fChRPUUpKX1UPTA7Zm9yKHU9Si5sZW5ndGg7VDx1O1QrKylmb3IoRT1KW1RdLnMsZS5wdXNoKEUpLGI9UVtUXSx3PTAsQT1iLmxlbmd0aDt3PEE7dysrKUUuaG9sZXMucHVzaChiW3ddLmgpOwpyZXR1cm4gZX19KTtPYmplY3QuYXNzaWduKEtrLnByb3RvdHlwZSx7aXNGb250OiEwLGdlbmVyYXRlU2hhcGVzOmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MTAwKTt2YXIgaD1bXTtiPXJzKGIsZSx0aGlzLmRhdGEpO2U9MDtmb3IodmFyIG09Yi5sZW5ndGg7ZTxtO2UrKylBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShoLGJbZV0udG9TaGFwZXMoKSk7cmV0dXJuIGh9fSk7TGsucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpMayxsb2FkOmZ1bmN0aW9uKGIsZSxoLG0pe3ZhciB1PXRoaXMsdz1uZXcgU2ModGhpcy5tYW5hZ2VyKTt3LnNldFBhdGgodGhpcy5wYXRoKTt3LmxvYWQoYixmdW5jdGlvbihBKXt0cnl7dmFyIEU9SlNPTi5wYXJzZShBKX1jYXRjaChHKXtjb25zb2xlLndhcm4oIlRIUkVFLkZvbnRMb2FkZXI6IHR5cGVmYWNlLmpzIHN1cHBvcnQgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIHR5cGVmYWNlLmpzb24gaW5zdGVhZC4iKSwKRT1KU09OLnBhcnNlKEEuc3Vic3RyaW5nKDY1LEEubGVuZ3RoLTIpKX1BPXUucGFyc2UoRSk7ZSYmZShBKX0saCxtKX0scGFyc2U6ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBLayhiKX19KTt2YXIgdmosUWs9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXt2b2lkIDA9PT12aiYmKHZqPW5ldyAod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpO3JldHVybiB2an0sc2V0Q29udGV4dDpmdW5jdGlvbihiKXt2aj1ifX07WGkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShLYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpYaSxsb2FkOmZ1bmN0aW9uKGIsZSxoLG0pe3ZhciB1PW5ldyBTYyh0aGlzLm1hbmFnZXIpO3Uuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO3Uuc2V0UGF0aCh0aGlzLnBhdGgpO3UubG9hZChiLGZ1bmN0aW9uKHcpe3c9dy5zbGljZSgwKTtRay5nZXRDb250ZXh0KCkuZGVjb2RlQXVkaW9EYXRhKHcsZnVuY3Rpb24oQSl7ZShBKX0pfSwKaCxtKX19KTtPYmplY3QuYXNzaWduKFlpLnByb3RvdHlwZSx7aXNTcGhlcmljYWxIYXJtb25pY3MzOiEwLHNldDpmdW5jdGlvbihiKXtmb3IodmFyIGU9MDs5PmU7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmNvcHkoYltlXSk7cmV0dXJuIHRoaXN9LHplcm86ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDs5PmI7YisrKXRoaXMuY29lZmZpY2llbnRzW2JdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9LGdldEF0OmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi54LG09Yi55O2I9Yi56O3ZhciB1PXRoaXMuY29lZmZpY2llbnRzO2UuY29weSh1WzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KTtlLmFkZFNjYWxlKHVbMV0sLjQ4ODYwMyptKTtlLmFkZFNjYWxlKHVbMl0sLjQ4ODYwMypiKTtlLmFkZFNjYWxlKHVbM10sLjQ4ODYwMypoKTtlLmFkZFNjYWxlKHVbNF0sMS4wOTI1NDgqaCptKTtlLmFkZFNjYWxlKHVbNV0sMS4wOTI1NDgqbSpiKTtlLmFkZFNjYWxlKHVbNl0sLjMxNTM5MiooMypiKmItMSkpOwplLmFkZFNjYWxlKHVbN10sMS4wOTI1NDgqaCpiKTtlLmFkZFNjYWxlKHVbOF0sLjU0NjI3NCooaCpoLW0qbSkpO3JldHVybiBlfSxnZXRJcnJhZGlhbmNlQXQ6ZnVuY3Rpb24oYixlKXt2YXIgaD1iLngsbT1iLnk7Yj1iLno7dmFyIHU9dGhpcy5jb2VmZmljaWVudHM7ZS5jb3B5KHVbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpO2UuYWRkU2NhbGUodVsxXSwxLjAyMzMyOCptKTtlLmFkZFNjYWxlKHVbMl0sMS4wMjMzMjgqYik7ZS5hZGRTY2FsZSh1WzNdLDEuMDIzMzI4KmgpO2UuYWRkU2NhbGUodVs0XSwuODU4MDg2KmgqbSk7ZS5hZGRTY2FsZSh1WzVdLC44NTgwODYqbSpiKTtlLmFkZFNjYWxlKHVbNl0sLjc0MzEyNSpiKmItLjI0NzcwOCk7ZS5hZGRTY2FsZSh1WzddLC44NTgwODYqaCpiKTtlLmFkZFNjYWxlKHVbOF0sLjQyOTA0MyooaCpoLW0qbSkpO3JldHVybiBlfSxhZGQ6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPTA7OT5lO2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5hZGQoYi5jb2VmZmljaWVudHNbZV0pOwpyZXR1cm4gdGhpc30sc2NhbGU6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPTA7OT5lO2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcihiKTtyZXR1cm4gdGhpc30sbGVycDpmdW5jdGlvbihiLGUpe2Zvcih2YXIgaD0wOzk+aDtoKyspdGhpcy5jb2VmZmljaWVudHNbaF0ubGVycChiLmNvZWZmaWNpZW50c1toXSxlKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT0wOzk+ZTtlKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW2VdLmVxdWFscyhiLmNvZWZmaWNpZW50c1tlXSkpcmV0dXJuITE7cmV0dXJuITB9LGNvcHk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuc2V0KGIuY29lZmZpY2llbnRzKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO2Zvcih2YXIgaD10aGlzLmNvZWZmaWNpZW50cyxtPTA7OT5tO20rKyloW21dLmZyb21BcnJheShiLAplKzMqbSk7cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09ZSYmKGU9MCk7Zm9yKHZhciBoPXRoaXMuY29lZmZpY2llbnRzLG09MDs5Pm07bSsrKWhbbV0udG9BcnJheShiLGUrMyptKTtyZXR1cm4gYn19KTtPYmplY3QuYXNzaWduKFlpLHtnZXRCYXNpc0F0OmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi54LG09Yi55O2I9Yi56O2VbMF09LjI4MjA5NTtlWzFdPS40ODg2MDMqbTtlWzJdPS40ODg2MDMqYjtlWzNdPS40ODg2MDMqaDtlWzRdPTEuMDkyNTQ4KmgqbTtlWzVdPTEuMDkyNTQ4Km0qYjtlWzZdPS4zMTUzOTIqKDMqYipiLTEpO2VbN109MS4wOTI1NDgqaCpiO2VbOF09LjU0NjI3NCooaCpoLW0qbSl9fSk7amQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShVYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpqZCxpc0xpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbihiKXtVYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsCmIpO3RoaXMuc2guY29weShiLnNoKTt0aGlzLmludGVuc2l0eT1iLmludGVuc2l0eTtyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKGIpe3JldHVybiBVYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKX19KTtNay5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGpkLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk1rLGlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbihiKXtqZC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihiKXtyZXR1cm4gamQucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYil9fSk7TmsucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShqZC5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOayxpc0FtYmllbnRMaWdodFByb2JlOiEwLGNvcHk6ZnVuY3Rpb24oYil7amQucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYil7cmV0dXJuIGpkLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLApiKX19KTt2YXIgRG89bmV3IHIsRW89bmV3IHI7T2JqZWN0LmFzc2lnbihabi5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9jYWNoZTtpZihlLmZvY3VzIT09Yi5mb2N1c3x8ZS5mb3YhPT1iLmZvdnx8ZS5hc3BlY3QhPT1iLmFzcGVjdCp0aGlzLmFzcGVjdHx8ZS5uZWFyIT09Yi5uZWFyfHxlLmZhciE9PWIuZmFyfHxlLnpvb20hPT1iLnpvb218fGUuZXllU2VwIT09dGhpcy5leWVTZXApe2UuZm9jdXM9Yi5mb2N1cztlLmZvdj1iLmZvdjtlLmFzcGVjdD1iLmFzcGVjdCp0aGlzLmFzcGVjdDtlLm5lYXI9Yi5uZWFyO2UuZmFyPWIuZmFyO2Uuem9vbT1iLnpvb207ZS5leWVTZXA9dGhpcy5leWVTZXA7dmFyIGg9Yi5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCksbT1lLmV5ZVNlcC8yLHU9bSplLm5lYXIvZS5mb2N1cyx3PWUubmVhcipNYXRoLnRhbihsYi5ERUcyUkFEKmUuZm92Ki41KS9lLnpvb207RW8uZWxlbWVudHNbMTJdPS1tO0RvLmVsZW1lbnRzWzEyXT0KbTttPS13KmUuYXNwZWN0K3U7dmFyIEE9dyplLmFzcGVjdCt1O2guZWxlbWVudHNbMF09MiplLm5lYXIvKEEtbSk7aC5lbGVtZW50c1s4XT0oQSttKS8oQS1tKTt0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KGgpO209LXcqZS5hc3BlY3QtdTtBPXcqZS5hc3BlY3QtdTtoLmVsZW1lbnRzWzBdPTIqZS5uZWFyLyhBLW0pO2guZWxlbWVudHNbOF09KEErbSkvKEEtbSk7dGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weShoKX10aGlzLmNhbWVyYUwubWF0cml4V29ybGQuY29weShiLm1hdHJpeFdvcmxkKS5tdWx0aXBseShFbyk7dGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkoYi5tYXRyaXhXb3JsZCkubXVsdGlwbHkoRG8pfX0pO09iamVjdC5hc3NpZ24oT2sucHJvdG90eXBlLHtzdGFydDpmdW5jdGlvbigpe3RoaXMub2xkVGltZT10aGlzLnN0YXJ0VGltZT0oInVuZGVmaW5lZCI9PT10eXBlb2YgcGVyZm9ybWFuY2U/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCk7CnRoaXMuZWxhcHNlZFRpbWU9MDt0aGlzLnJ1bm5pbmc9ITB9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmdldEVsYXBzZWRUaW1lKCk7dGhpcy5hdXRvU3RhcnQ9dGhpcy5ydW5uaW5nPSExfSxnZXRFbGFwc2VkVGltZTpmdW5jdGlvbigpe3RoaXMuZ2V0RGVsdGEoKTtyZXR1cm4gdGhpcy5lbGFwc2VkVGltZX0sZ2V0RGVsdGE6ZnVuY3Rpb24oKXt2YXIgYj0wO2lmKHRoaXMuYXV0b1N0YXJ0JiYhdGhpcy5ydW5uaW5nKXJldHVybiB0aGlzLnN0YXJ0KCksMDtpZih0aGlzLnJ1bm5pbmcpe3ZhciBlPSgidW5kZWZpbmVkIj09PXR5cGVvZiBwZXJmb3JtYW5jZT9EYXRlOnBlcmZvcm1hbmNlKS5ub3coKTtiPShlLXRoaXMub2xkVGltZSkvMUUzO3RoaXMub2xkVGltZT1lO3RoaXMuZWxhcHNlZFRpbWUrPWJ9cmV0dXJuIGJ9fSk7dmFyIGhmPW5ldyBnLEZvPW5ldyBmLElzPW5ldyBnLGpmPW5ldyBnO1BrLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpLAp7Y29uc3RydWN0b3I6UGssZ2V0SW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWlufSxyZW1vdmVGaWx0ZXI6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5maWx0ZXImJih0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCk7cmV0dXJuIHRoaXN9LGdldEZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcn0sc2V0RmlsdGVyOmZ1bmN0aW9uKGIpe251bGwhPT10aGlzLmZpbHRlcj8odGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSk6dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTt0aGlzLmZpbHRlcj1iO3RoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKTsKdGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO3JldHVybiB0aGlzfSxnZXRNYXN0ZXJWb2x1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9LHNldE1hc3RlclZvbHVtZTpmdW5jdGlvbihiKXt0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUoYix0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKTtyZXR1cm4gdGhpc30sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24oYil7eS5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpO2I9dGhpcy5jb250ZXh0Lmxpc3RlbmVyO3ZhciBlPXRoaXMudXA7dGhpcy50aW1lRGVsdGE9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKTt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShoZixGbyxJcyk7amYuc2V0KDAsMCwtMSkuYXBwbHlRdWF0ZXJuaW9uKEZvKTtpZihiLnBvc2l0aW9uWCl7dmFyIGg9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMudGltZURlbHRhOwpiLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShoZi54LGgpO2IucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGhmLnksaCk7Yi5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoaGYueixoKTtiLmZvcndhcmRYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGpmLngsaCk7Yi5mb3J3YXJkWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShqZi55LGgpO2IuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoamYueixoKTtiLnVwWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShlLngsaCk7Yi51cFkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoZS55LGgpO2IudXBaLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGUueixoKX1lbHNlIGIuc2V0UG9zaXRpb24oaGYueCxoZi55LGhmLnopLGIuc2V0T3JpZW50YXRpb24oamYueCxqZi55LGpmLnosZS54LGUueSxlLnopfX0pO2dnLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpLAp7Y29uc3RydWN0b3I6Z2csZ2V0T3V0cHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbn0sc2V0Tm9kZVNvdXJjZTpmdW5jdGlvbihiKXt0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMTt0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSI7dGhpcy5zb3VyY2U9Yjt0aGlzLmNvbm5lY3QoKTtyZXR1cm4gdGhpc30sc2V0TWVkaWFFbGVtZW50U291cmNlOmZ1bmN0aW9uKGIpe3RoaXMuaGFzUGxheWJhY2tDb250cm9sPSExO3RoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIjt0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGIpO3RoaXMuY29ubmVjdCgpO3JldHVybiB0aGlzfSxzZXRCdWZmZXI6ZnVuY3Rpb24oYil7dGhpcy5idWZmZXI9Yjt0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciI7dGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCk7cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXtpZighMD09PXRoaXMuaXNQbGF5aW5nKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTsKZWxzZSBpZighMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKWNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7ZWxzZXt2YXIgYj10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7Yi5idWZmZXI9dGhpcy5idWZmZXI7Yi5sb29wPXRoaXMubG9vcDtiLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyk7dGhpcy5zdGFydFRpbWU9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO2Iuc3RhcnQodGhpcy5zdGFydFRpbWUsdGhpcy5vZmZzZXQsdGhpcy5kdXJhdGlvbik7dGhpcy5pc1BsYXlpbmc9ITA7dGhpcy5zb3VyY2U9Yjt0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSk7dGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpO3JldHVybiB0aGlzLmNvbm5lY3QoKX19LHBhdXNlOmZ1bmN0aW9uKCl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpOwplbHNlIHJldHVybiEwPT09dGhpcy5pc1BsYXlpbmcmJih0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMub2Zmc2V0Kz0odGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLXRoaXMuc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmlzUGxheWluZz0hMSksdGhpc30sc3RvcDpmdW5jdGlvbigpe2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtlbHNlIHJldHVybiB0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMub2Zmc2V0PTAsdGhpcy5pc1BsYXlpbmc9ITEsdGhpc30sY29ubmVjdDpmdW5jdGlvbigpe2lmKDA8dGhpcy5maWx0ZXJzLmxlbmd0aCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2Zvcih2YXIgYj0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDtiPGU7YisrKXRoaXMuZmlsdGVyc1tiLQoxXS5jb25uZWN0KHRoaXMuZmlsdGVyc1tiXSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXN9LGRpc2Nvbm5lY3Q6ZnVuY3Rpb24oKXtpZigwPHRoaXMuZmlsdGVycy5sZW5ndGgpe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IodmFyIGI9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7YjxlO2IrKyl0aGlzLmZpbHRlcnNbYi0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1tiXSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXN9LGdldEZpbHRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXJzfSxzZXRGaWx0ZXJzOmZ1bmN0aW9uKGIpe2J8fAooYj1bXSk7ITA9PT10aGlzLmlzUGxheWluZz8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPWIsdGhpcy5jb25uZWN0KCkpOnRoaXMuZmlsdGVycz1iO3JldHVybiB0aGlzfSxzZXREZXR1bmU6ZnVuY3Rpb24oYil7dGhpcy5kZXR1bmU9YjtpZih2b2lkIDAhPT10aGlzLnNvdXJjZS5kZXR1bmUpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfSxnZXREZXR1bmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXR1bmV9LGdldEZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX0sc2V0RmlsdGVyOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldEZpbHRlcnMoYj9bYl06W10pfSxzZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oYil7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpOwplbHNlIHJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT1iLCEwPT09dGhpcy5pc1BsYXlpbmcmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc30sZ2V0UGxheWJhY2tSYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfSxvbkVuZGVkOmZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITF9LGdldExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9LHNldExvb3A6ZnVuY3Rpb24oYil7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMubG9vcD0KYiwhMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9LGdldFZvbHVtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX0sc2V0Vm9sdW1lOmZ1bmN0aW9uKGIpe3RoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZShiLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpO3JldHVybiB0aGlzfX0pO3ZhciBrZj1uZXcgZyxHbz1uZXcgZixKcz1uZXcgZyxsZj1uZXcgZztSay5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGdnLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlJrLGdldE91dHB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lcn0sZ2V0UmVmRGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2V9LHNldFJlZkRpc3RhbmNlOmZ1bmN0aW9uKGIpe3RoaXMucGFubmVyLnJlZkRpc3RhbmNlPWI7cmV0dXJuIHRoaXN9LGdldFJvbGxvZmZGYWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcn0sCnNldFJvbGxvZmZGYWN0b3I6ZnVuY3Rpb24oYil7dGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcj1iO3JldHVybiB0aGlzfSxnZXREaXN0YW5jZU1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWx9LHNldERpc3RhbmNlTW9kZWw6ZnVuY3Rpb24oYil7dGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbD1iO3JldHVybiB0aGlzfSxnZXRNYXhEaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX0sc2V0TWF4RGlzdGFuY2U6ZnVuY3Rpb24oYil7dGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9YjtyZXR1cm4gdGhpc30sc2V0RGlyZWN0aW9uYWxDb25lOmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnBhbm5lci5jb25lSW5uZXJBbmdsZT1iO3RoaXMucGFubmVyLmNvbmVPdXRlckFuZ2xlPWU7dGhpcy5wYW5uZXIuY29uZU91dGVyR2Fpbj1oO3JldHVybiB0aGlzfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbihiKXt5LnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsCmIpO2lmKCEwIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2x8fCExIT09dGhpcy5pc1BsYXlpbmcpaWYodGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2Uoa2YsR28sSnMpLGxmLnNldCgwLDAsMSkuYXBwbHlRdWF0ZXJuaW9uKEdvKSxiPXRoaXMucGFubmVyLGIucG9zaXRpb25YKXt2YXIgZT10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7Yi5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoa2YueCxlKTtiLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShrZi55LGUpO2IucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGtmLnosZSk7Yi5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobGYueCxlKTtiLm9yaWVudGF0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShsZi55LGUpO2Iub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGxmLnosZSl9ZWxzZSBiLnNldFBvc2l0aW9uKGtmLngsCmtmLnksa2YueiksYi5zZXRPcmllbnRhdGlvbihsZi54LGxmLnksbGYueil9fSk7T2JqZWN0LmFzc2lnbihTay5wcm90b3R5cGUse2dldEZyZXF1ZW5jeURhdGE6ZnVuY3Rpb24oKXt0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuZGF0YX0sZ2V0QXZlcmFnZUZyZXF1ZW5jeTpmdW5jdGlvbigpe2Zvcih2YXIgYj0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCksaD0wO2g8ZS5sZW5ndGg7aCsrKWIrPWVbaF07cmV0dXJuIGIvZS5sZW5ndGh9fSk7T2JqZWN0LmFzc2lnbihUay5wcm90b3R5cGUse2FjY3VtdWxhdGU6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLmJ1ZmZlcixtPXRoaXMudmFsdWVTaXplO2I9YiptK207dmFyIHU9dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKDA9PT11KXtmb3IodT0wO3UhPT1tOysrdSloW2IrdV09aFt1XTt1PWV9ZWxzZSB1Kz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihoLGIsMCxlL3UsbSk7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PQp1fSxhcHBseTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLnZhbHVlU2l6ZSxoPXRoaXMuYnVmZmVyO2I9YiplK2U7dmFyIG09dGhpcy5jdW11bGF0aXZlV2VpZ2h0LHU9dGhpcy5iaW5kaW5nO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD0wOzE+bSYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGgsYiwzKmUsMS1tLGUpO209ZTtmb3IodmFyIHc9ZStlO20hPT13OysrbSlpZihoW21dIT09aFttK2VdKXt1LnNldFZhbHVlKGgsYik7YnJlYWt9fSxzYXZlT3JpZ2luYWxTdGF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuYnVmZmVyLGU9dGhpcy52YWx1ZVNpemUsaD0zKmU7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGIsaCk7Zm9yKHZhciBtPWU7bSE9PWg7KyttKWJbbV09YltoK20lZV07dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTB9LHJlc3RvcmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLDMqdGhpcy52YWx1ZVNpemUpfSxfc2VsZWN0OmZ1bmN0aW9uKGIsCmUsaCxtLHUpe2lmKC41PD1tKWZvcihtPTA7bSE9PXU7KyttKWJbZSttXT1iW2grbV19LF9zbGVycDpmdW5jdGlvbihiLGUsaCxtKXtmLnNsZXJwRmxhdChiLGUsYixlLGIsaCxtKX0sX2xlcnA6ZnVuY3Rpb24oYixlLGgsbSx1KXtmb3IodmFyIHc9MS1tLEE9MDtBIT09dTsrK0Epe3ZhciBFPWUrQTtiW0VdPWJbRV0qdytiW2grQV0qbX19fSk7dmFyIEtzPS9bXFtcXVwuOlwvXS9nLExzPSJbXiIrIlxcW1xcXVxcLjpcXC8iLnJlcGxhY2UoIlxcLiIsIiIpKyJdIixNcz0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLCJbXlxcW1xcXVxcLjpcXC9dIiksTnM9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsTHMpLE9zPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLCJbXlxcW1xcXVxcLjpcXC9dIiksUHM9L1wuKFdDKykoPzpcWyguKylcXSk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLCJbXlxcW1xcXVxcLjpcXC9dIiksUXM9Cm5ldyBSZWdFeHAoIl4iK01zK05zK09zK1BzKyIkIiksUnM9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07T2JqZWN0LmFzc2lnbigkbi5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKGIsZSl7dGhpcy5iaW5kKCk7dmFyIGg9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1oJiZoLmdldFZhbHVlKGIsZSl9LHNldFZhbHVlOmZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMuX2JpbmRpbmdzLG09dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHU9aC5sZW5ndGg7bSE9PXU7KyttKWhbbV0uc2V0VmFsdWUoYixlKX0sYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYj10aGlzLl9iaW5kaW5ncyxlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxoPWIubGVuZ3RoO2UhPT1oOysrZSliW2VdLmJpbmQoKX0sdW5iaW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuX2JpbmRpbmdzLGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLApoPWIubGVuZ3RoO2UhPT1oOysrZSliW2VdLnVuYmluZCgpfX0pO09iamVjdC5hc3NpZ24odmMse0NvbXBvc2l0ZTokbixjcmVhdGU6ZnVuY3Rpb24oYixlLGgpe3JldHVybiBiJiZiLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IHZjLkNvbXBvc2l0ZShiLGUsaCk6bmV3IHZjKGIsZSxoKX0sc2FuaXRpemVOb2RlTmFtZTpmdW5jdGlvbihiKXtyZXR1cm4gYi5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShLcywiIil9LHBhcnNlVHJhY2tOYW1lOmZ1bmN0aW9uKGIpe3ZhciBlPVFzLmV4ZWMoYik7aWYoIWUpdGhyb3cgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitiKTtlPXtub2RlTmFtZTplWzJdLG9iamVjdE5hbWU6ZVszXSxvYmplY3RJbmRleDplWzRdLHByb3BlcnR5TmFtZTplWzVdLHByb3BlcnR5SW5kZXg6ZVs2XX07dmFyIGg9ZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PWgmJi0xIT09Cmgpe3ZhciBtPWUubm9kZU5hbWUuc3Vic3RyaW5nKGgrMSk7LTEhPT1Scy5pbmRleE9mKG0pJiYoZS5ub2RlTmFtZT1lLm5vZGVOYW1lLnN1YnN0cmluZygwLGgpLGUub2JqZWN0TmFtZT1tKX1pZihudWxsPT09ZS5wcm9wZXJ0eU5hbWV8fDA9PT1lLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrYik7cmV0dXJuIGV9LGZpbmROb2RlOmZ1bmN0aW9uKGIsZSl7aWYoIWV8fCIiPT09ZXx8InJvb3QiPT09ZXx8Ii4iPT09ZXx8LTE9PT1lfHxlPT09Yi5uYW1lfHxlPT09Yi51dWlkKXJldHVybiBiO2lmKGIuc2tlbGV0b24pe3ZhciBoPWIuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZih2b2lkIDAhPT1oKXJldHVybiBofWlmKGIuY2hpbGRyZW4pe3ZhciBtPWZ1bmN0aW9uKHUpe2Zvcih2YXIgdz0wO3c8dS5sZW5ndGg7dysrKXt2YXIgQT11W3ddO2lmKEEubmFtZT09PQplfHxBLnV1aWQ9PT1lKXJldHVybiBBO2lmKEE9bShBLmNoaWxkcmVuKSlyZXR1cm4gQX1yZXR1cm4gbnVsbH07aWYoYj1tKGIuY2hpbGRyZW4pKXJldHVybiBifXJldHVybiBudWxsfX0pO09iamVjdC5hc3NpZ24odmMucHJvdG90eXBlLHtfZ2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LF9zZXRWYWx1ZV91bmF2YWlsYWJsZTpmdW5jdGlvbigpe30sQmluZGluZ1R5cGU6e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M30sVmVyc2lvbmluZzp7Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfSxHZXR0ZXJCeUJpbmRpbmdUeXBlOltmdW5jdGlvbihiLGUpe2JbZV09dGhpcy5ub2RlW3RoaXMucHJvcGVydHlOYW1lXX0sZnVuY3Rpb24oYixlKXtmb3IodmFyIGg9dGhpcy5yZXNvbHZlZFByb3BlcnR5LG09MCx1PWgubGVuZ3RoO20hPT11OysrbSliW2UrK109aFttXX0sZnVuY3Rpb24oYixlKXtiW2VdPQp0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShiLGUpfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbihiLGUpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1iW2VdfSxmdW5jdGlvbihiLGUpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1iW2VdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfSxmdW5jdGlvbihiLGUpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1iW2VdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XSxbZnVuY3Rpb24oYixlKXtmb3IodmFyIGg9dGhpcy5yZXNvbHZlZFByb3BlcnR5LG09MCx1PWgubGVuZ3RoO20hPT11OysrbSloW21dPWJbZSsrXX0sZnVuY3Rpb24oYixlKXtmb3IodmFyIGg9dGhpcy5yZXNvbHZlZFByb3BlcnR5LAptPTAsdT1oLmxlbmd0aDttIT09dTsrK20paFttXT1iW2UrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxtPTAsdT1oLmxlbmd0aDttIT09dTsrK20paFttXT1iW2UrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dLFtmdW5jdGlvbihiLGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWJbZV19LGZ1bmN0aW9uKGIsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09YltlXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1iW2VdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XSxbZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGIsCmUpfSxmdW5jdGlvbihiLGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYixlKTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGIsZSk7dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1dXSxnZXRWYWx1ZTpmdW5jdGlvbihiLGUpe3RoaXMuYmluZCgpO3RoaXMuZ2V0VmFsdWUoYixlKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYixlKXt0aGlzLmJpbmQoKTt0aGlzLnNldFZhbHVlKGIsZSl9LGJpbmQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5vZGUsZT10aGlzLnBhcnNlZFBhdGgsaD1lLm9iamVjdE5hbWUsbT1lLnByb3BlcnR5TmFtZSx1PWUucHJvcGVydHlJbmRleDtifHwodGhpcy5ub2RlPWI9dmMuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSk7dGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZTsKdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTtpZihiKXtpZihoKXt2YXIgdz1lLm9iamVjdEluZGV4O3N3aXRjaChoKXtjYXNlICJtYXRlcmlhbHMiOmlmKCFiLm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO3JldHVybn1pZighYi5tYXRlcmlhbC5tYXRlcmlhbHMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtyZXR1cm59Yj1iLm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlICJib25lcyI6aWYoIWIuc2tlbGV0b24pe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsCnRoaXMpO3JldHVybn1iPWIuc2tlbGV0b24uYm9uZXM7Zm9yKGg9MDtoPGIubGVuZ3RoO2grKylpZihiW2hdLm5hbWU9PT13KXt3PWg7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1iW2hdKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7cmV0dXJufWI9YltoXX1pZih2b2lkIDAhPT13KXtpZih2b2lkIDA9PT1iW3ddKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLGIpO3JldHVybn1iPWJbd119fXc9YlttXTtpZih2b2lkIDA9PT13KWNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrZS5ub2RlTmFtZSsiLiIrbSsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIiwKYik7ZWxzZXtlPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PWI7dm9pZCAwIT09Yi5uZWVkc1VwZGF0ZT9lPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp2b2lkIDAhPT1iLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUmJihlPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtoPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHZvaWQgMCE9PXUpe2lmKCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiPT09bSl7aWYoIWIuZ2VvbWV0cnkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7cmV0dXJufWlmKGIuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7aWYoIWIuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIiwKdGhpcyk7cmV0dXJufWZvcihoPTA7aDx0aGlzLm5vZGUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDtoKyspaWYoYi5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb25baF0ubmFtZT09PXUpe3U9aDticmVha319ZWxzZXtpZighYi5nZW9tZXRyeS5tb3JwaFRhcmdldHMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoVGFyZ2V0cy4iLHRoaXMpO3JldHVybn1mb3IoaD0wO2g8dGhpcy5ub2RlLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0cy5sZW5ndGg7aCsrKWlmKGIuZ2VvbWV0cnkubW9ycGhUYXJnZXRzW2hdLm5hbWU9PT11KXt1PWg7YnJlYWt9fX1oPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50O3RoaXMucmVzb2x2ZWRQcm9wZXJ0eT13O3RoaXMucHJvcGVydHlJbmRleD11fWVsc2Ugdm9pZCAwIT09CncuZnJvbUFycmF5JiZ2b2lkIDAhPT13LnRvQXJyYXk/KGg9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9dyk6QXJyYXkuaXNBcnJheSh3KT8oaD10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT13KTp0aGlzLnByb3BlcnR5TmFtZT1tO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2hdO3RoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1toXVtlXX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKX0sdW5iaW5kOmZ1bmN0aW9uKCl7dGhpcy5ub2RlPW51bGw7dGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kO3RoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19KTsKT2JqZWN0LmFzc2lnbih2Yy5wcm90b3R5cGUse19nZXRWYWx1ZV91bmJvdW5kOnZjLnByb3RvdHlwZS5nZXRWYWx1ZSxfc2V0VmFsdWVfdW5ib3VuZDp2Yy5wcm90b3R5cGUuc2V0VmFsdWV9KTtPYmplY3QuYXNzaWduKGFvLnByb3RvdHlwZSx7aXNBbmltYXRpb25PYmplY3RHcm91cDohMCxhZGQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxlPWIubGVuZ3RoLGg9dGhpcy5uQ2FjaGVkT2JqZWN0c18sbT10aGlzLl9pbmRpY2VzQnlVVUlELHU9dGhpcy5fcGF0aHMsdz10aGlzLl9wYXJzZWRQYXRocyxBPXRoaXMuX2JpbmRpbmdzLEU9QS5sZW5ndGgsRz12b2lkIDAsSj0wLFE9YXJndW1lbnRzLmxlbmd0aDtKIT09UTsrK0ope3ZhciBTPWFyZ3VtZW50c1tKXSxUPVMudXVpZCxXPW1bVF07aWYodm9pZCAwPT09Vyl7Vz1lKys7bVtUXT1XO2IucHVzaChTKTtUPTA7Zm9yKHZhciBYPUU7VCE9PVg7KytUKUFbVF0ucHVzaChuZXcgdmMoUyx1W1RdLHdbVF0pKX1lbHNlIGlmKFc8Cmgpe0c9YltXXTt2YXIgaWE9LS1oO1g9YltpYV07bVtYLnV1aWRdPVc7YltXXT1YO21bVF09aWE7YltpYV09UztUPTA7Zm9yKFg9RTtUIT09WDsrK1Qpe3ZhciBoYT1BW1RdLHNhPWhhW1ddO2hhW1ddPWhhW2lhXTt2b2lkIDA9PT1zYSYmKHNhPW5ldyB2YyhTLHVbVF0sd1tUXSkpO2hhW2lhXT1zYX19ZWxzZSBiW1ddIT09RyYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1ofSxyZW1vdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxlPXRoaXMubkNhY2hlZE9iamVjdHNfLGg9dGhpcy5faW5kaWNlc0J5VVVJRCxtPXRoaXMuX2JpbmRpbmdzLHU9bS5sZW5ndGgsdz0wLEE9YXJndW1lbnRzLmxlbmd0aDt3IT09CkE7Kyt3KXt2YXIgRT1hcmd1bWVudHNbd10sRz1FLnV1aWQsSj1oW0ddO2lmKHZvaWQgMCE9PUomJko+PWUpe3ZhciBRPWUrKyxTPWJbUV07aFtTLnV1aWRdPUo7YltKXT1TO2hbR109UTtiW1FdPUU7RT0wO2ZvcihHPXU7RSE9PUc7KytFKXtTPW1bRV07dmFyIFQ9U1tKXTtTW0pdPVNbUV07U1tRXT1UfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189ZX0sdW5jYWNoZTpmdW5jdGlvbigpe2Zvcih2YXIgYj10aGlzLl9vYmplY3RzLGU9Yi5sZW5ndGgsaD10aGlzLm5DYWNoZWRPYmplY3RzXyxtPXRoaXMuX2luZGljZXNCeVVVSUQsdT10aGlzLl9iaW5kaW5ncyx3PXUubGVuZ3RoLEE9MCxFPWFyZ3VtZW50cy5sZW5ndGg7QSE9PUU7KytBKXt2YXIgRz1hcmd1bWVudHNbQV0udXVpZCxKPW1bR107aWYodm9pZCAwIT09SilpZihkZWxldGUgbVtHXSxKPGgpe0c9LS1oO3ZhciBRPWJbR10sUz0tLWUsVD1iW1NdO21bUS51dWlkXT1KO2JbSl09UTttW1QudXVpZF09RztiW0ddPVQ7Yi5wb3AoKTtRPQowO2ZvcihUPXc7USE9PVQ7KytRKXt2YXIgVz11W1FdLFg9V1tTXTtXW0pdPVdbR107V1tHXT1YO1cucG9wKCl9fWVsc2UgZm9yKFM9LS1lLFQ9YltTXSxtW1QudXVpZF09SixiW0pdPVQsYi5wb3AoKSxRPTAsVD13O1EhPT1UOysrUSlXPXVbUV0sV1tKXT1XW1NdLFcucG9wKCl9dGhpcy5uQ2FjaGVkT2JqZWN0c189aH0sc3Vic2NyaWJlXzpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxtPWhbYl0sdT10aGlzLl9iaW5kaW5ncztpZih2b2lkIDAhPT1tKXJldHVybiB1W21dO3ZhciB3PXRoaXMuX3BhdGhzLEE9dGhpcy5fcGFyc2VkUGF0aHMsRT10aGlzLl9vYmplY3RzLEc9dGhpcy5uQ2FjaGVkT2JqZWN0c18sSj1BcnJheShFLmxlbmd0aCk7bT11Lmxlbmd0aDtoW2JdPW07dy5wdXNoKGIpO0EucHVzaChlKTt1LnB1c2goSik7aD1HO2ZvcihtPUUubGVuZ3RoO2ghPT1tOysraClKW2hdPW5ldyB2YyhFW2hdLGIsZSk7cmV0dXJuIEp9LHVuc3Vic2NyaWJlXzpmdW5jdGlvbihiKXt2YXIgZT0KdGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGg9ZVtiXTtpZih2b2lkIDAhPT1oKXt2YXIgbT10aGlzLl9wYXRocyx1PXRoaXMuX3BhcnNlZFBhdGhzLHc9dGhpcy5fYmluZGluZ3MsQT13Lmxlbmd0aC0xLEU9d1tBXTtlW2JbQV1dPWg7d1toXT1FO3cucG9wKCk7dVtoXT11W0FdO3UucG9wKCk7bVtoXT1tW0FdO20ucG9wKCl9fX0pO09iamVjdC5hc3NpZ24oYm8ucHJvdG90eXBlLHtwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpO3JldHVybiB0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyk7cmV0dXJuIHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnBhdXNlZD0hMTt0aGlzLmVuYWJsZWQ9ITA7dGhpcy50aW1lPTA7dGhpcy5fbG9vcENvdW50PS0xO3RoaXMuX3N0YXJ0VGltZT1udWxsO3JldHVybiB0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfSxpc1J1bm5pbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYKIXRoaXMucGF1c2VkJiYwIT09dGhpcy50aW1lU2NhbGUmJm51bGw9PT10aGlzLl9zdGFydFRpbWUmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0saXNTY2hlZHVsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfSxzdGFydEF0OmZ1bmN0aW9uKGIpe3RoaXMuX3N0YXJ0VGltZT1iO3JldHVybiB0aGlzfSxzZXRMb29wOmZ1bmN0aW9uKGIsZSl7dGhpcy5sb29wPWI7dGhpcy5yZXBldGl0aW9ucz1lO3JldHVybiB0aGlzfSxzZXRFZmZlY3RpdmVXZWlnaHQ6ZnVuY3Rpb24oYil7dGhpcy53ZWlnaHQ9Yjt0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP2I6MDtyZXR1cm4gdGhpcy5zdG9wRmFkaW5nKCl9LGdldEVmZmVjdGl2ZVdlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9LGZhZGVJbjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcoYiwwLDEpfSxmYWRlT3V0OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyhiLAoxLDApfSxjcm9zc0ZhZGVGcm9tOmZ1bmN0aW9uKGIsZSxoKXtiLmZhZGVPdXQoZSk7dGhpcy5mYWRlSW4oZSk7aWYoaCl7aD10aGlzLl9jbGlwLmR1cmF0aW9uO3ZhciBtPWIuX2NsaXAuZHVyYXRpb24sdT1oL207Yi53YXJwKDEsbS9oLGUpO3RoaXMud2FycCh1LDEsZSl9cmV0dXJuIHRoaXN9LGNyb3NzRmFkZVRvOmZ1bmN0aW9uKGIsZSxoKXtyZXR1cm4gYi5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxoKX0sc3RvcEZhZGluZzpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGwhPT1iJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQoYikpO3JldHVybiB0aGlzfSxzZXRFZmZlY3RpdmVUaW1lU2NhbGU6ZnVuY3Rpb24oYil7dGhpcy50aW1lU2NhbGU9Yjt0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDpiO3JldHVybiB0aGlzLnN0b3BXYXJwaW5nKCl9LGdldEVmZmVjdGl2ZVRpbWVTY2FsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9LApzZXREdXJhdGlvbjpmdW5jdGlvbihiKXt0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL2I7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0sc3luY1dpdGg6ZnVuY3Rpb24oYil7dGhpcy50aW1lPWIudGltZTt0aGlzLnRpbWVTY2FsZT1iLnRpbWVTY2FsZTtyZXR1cm4gdGhpcy5zdG9wV2FycGluZygpfSxoYWx0OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsYil9LHdhcnA6ZnVuY3Rpb24oYixlLGgpe3ZhciBtPXRoaXMuX21peGVyLHU9bS50aW1lLHc9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQsQT10aGlzLnRpbWVTY2FsZTtudWxsPT09dyYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PXc9bS5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpKTttPXcucGFyYW1ldGVyUG9zaXRpb25zO3c9dy5zYW1wbGVWYWx1ZXM7bVswXT11O21bMV09dStoO3dbMF09Yi9BO3dbMV09ZS9BO3JldHVybiB0aGlzfSxzdG9wV2FycGluZzpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09YiYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KGIpKTtyZXR1cm4gdGhpc30sZ2V0TWl4ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9LGdldENsaXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpcH0sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fSxfdXBkYXRlOmZ1bmN0aW9uKGIsZSxoLG0pe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHU9dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT11KXtlPShiLXUpKmg7aWYoMD5lfHwwPT09aClyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGw7ZSo9aH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUoYik7aD10aGlzLl91cGRhdGVUaW1lKGUpO2I9dGhpcy5fdXBkYXRlV2VpZ2h0KGIpO2lmKDA8Yil7ZT10aGlzLl9pbnRlcnBvbGFudHM7CnU9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztmb3IodmFyIHc9MCxBPWUubGVuZ3RoO3chPT1BOysrdyllW3ddLmV2YWx1YXRlKGgpLHVbd10uYWNjdW11bGF0ZShtLGIpfX1lbHNlIHRoaXMuX3VwZGF0ZVdlaWdodChiKX0sX3VwZGF0ZVdlaWdodDpmdW5jdGlvbihiKXt2YXIgZT0wO2lmKHRoaXMuZW5hYmxlZCl7ZT10aGlzLndlaWdodDt2YXIgaD10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtpZihudWxsIT09aCl7dmFyIG09aC5ldmFsdWF0ZShiKVswXTtlKj1tO2I+aC5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09bSYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWV9LF91cGRhdGVUaW1lU2NhbGU6ZnVuY3Rpb24oYil7dmFyIGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7dmFyIGg9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aWYobnVsbCE9PWgpe3ZhciBtPWguZXZhbHVhdGUoYilbMF07CmUqPW07Yj5oLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lfSxfdXBkYXRlVGltZTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLnRpbWUrYixoPXRoaXMuX2NsaXAuZHVyYXRpb24sbT10aGlzLmxvb3AsdT10aGlzLl9sb29wQ291bnQsdz0yMjAyPT09bTtpZigwPT09YilyZXR1cm4tMT09PXU/ZTp3JiYxPT09KHUmMSk/aC1lOmU7aWYoMjIwMD09PW0pYTp7aWYoLTE9PT11JiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpLGU+PWgpZT1oO2Vsc2UgaWYoMD5lKWU9MDtlbHNle3RoaXMudGltZT1lO2JyZWFrIGF9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITE7dGhpcy50aW1lPWU7dGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLAphY3Rpb246dGhpcyxkaXJlY3Rpb246MD5iPy0xOjF9KX1lbHNley0xPT09dSYmKDA8PWI/KHU9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLHcpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLHcpKTtpZihlPj1ofHwwPmUpe209TWF0aC5mbG9vcihlL2gpO2UtPWgqbTt1Kz1NYXRoLmFicyhtKTt2YXIgQT10aGlzLnJlcGV0aXRpb25zLXU7MD49QT8odGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPWU9MDxiP2g6MCx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOjA8Yj8xOi0xfSkpOigxPT09QT8oYj0wPmIsdGhpcy5fc2V0RW5kaW5ncyhiLCFiLHcpKTp0aGlzLl9zZXRFbmRpbmdzKCExLCExLHcpLHRoaXMuX2xvb3BDb3VudD11LHRoaXMudGltZT1lLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLAphY3Rpb246dGhpcyxsb29wRGVsdGE6bX0pKX1lbHNlIHRoaXMudGltZT1lO2lmKHcmJjE9PT0odSYxKSlyZXR1cm4gaC1lfXJldHVybiBlfSxfc2V0RW5kaW5nczpmdW5jdGlvbihiLGUsaCl7dmFyIG09dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztoPyhtLmVuZGluZ1N0YXJ0PTI0MDEsbS5lbmRpbmdFbmQ9MjQwMSk6KG0uZW5kaW5nU3RhcnQ9Yj90aGlzLnplcm9TbG9wZUF0U3RhcnQ/MjQwMToyNDAwOjI0MDIsbS5lbmRpbmdFbmQ9ZT90aGlzLnplcm9TbG9wZUF0RW5kPzI0MDE6MjQwMDoyNDAyKX0sX3NjaGVkdWxlRmFkaW5nOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbT10aGlzLl9taXhlcix1PW0udGltZSx3PXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT13JiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9dz1tLl9sZW5kQ29udHJvbEludGVycG9sYW50KCkpO209dy5wYXJhbWV0ZXJQb3NpdGlvbnM7dz13LnNhbXBsZVZhbHVlczttWzBdPXU7d1swXT1lO21bMV09dStiO3dbMV09Cmg7cmV0dXJuIHRoaXN9fSk7VWsucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlVrLF9iaW5kQWN0aW9uOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5fbG9jYWxSb290fHx0aGlzLl9yb290LG09Yi5fY2xpcC50cmFja3MsdT1tLmxlbmd0aCx3PWIuX3Byb3BlcnR5QmluZGluZ3M7Yj1iLl9pbnRlcnBvbGFudHM7dmFyIEE9aC51dWlkLEU9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLEc9RVtBXTt2b2lkIDA9PT1HJiYoRz17fSxFW0FdPUcpO2ZvcihFPTA7RSE9PXU7KytFKXt2YXIgSj1tW0VdLFE9Si5uYW1lLFM9R1tRXTtpZih2b2lkIDA9PT1TKXtTPXdbRV07aWYodm9pZCAwIT09Uyl7bnVsbD09PVMuX2NhY2hlSW5kZXgmJigrK1MucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKFMsQSxRKSk7Y29udGludWV9Uz1uZXcgVGsodmMuY3JlYXRlKGgsUSxlJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW0VdLmJpbmRpbmcucGFyc2VkUGF0aCksCkouVmFsdWVUeXBlTmFtZSxKLmdldFZhbHVlU2l6ZSgpKTsrK1MucmVmZXJlbmNlQ291bnQ7dGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKFMsQSxRKX13W0VdPVM7YltFXS5yZXN1bHRCdWZmZXI9Uy5idWZmZXJ9fSxfYWN0aXZhdGVBY3Rpb246ZnVuY3Rpb24oYil7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKGIpKXtpZihudWxsPT09Yi5fY2FjaGVJbmRleCl7dmFyIGU9KGIuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxoPWIuX2NsaXAudXVpZCxtPXRoaXMuX2FjdGlvbnNCeUNsaXBbaF07dGhpcy5fYmluZEFjdGlvbihiLG0mJm0ua25vd25BY3Rpb25zWzBdKTt0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihiLGgsZSl9ZT1iLl9wcm9wZXJ0eUJpbmRpbmdzO2g9MDtmb3IobT1lLmxlbmd0aDtoIT09bTsrK2gpe3ZhciB1PWVbaF07MD09PXUudXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKHUpLHUuc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbihiKX19LApfZGVhY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbihiKXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbihiKSl7Zm9yKHZhciBlPWIuX3Byb3BlcnR5QmluZGluZ3MsaD0wLG09ZS5sZW5ndGg7aCE9PW07KytoKXt2YXIgdT1lW2hdOzA9PT0tLXUudXNlQ291bnQmJih1LnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKHUpKX10aGlzLl90YWtlQmFja0FjdGlvbihiKX19LF9pbml0TWVtb3J5TWFuYWdlcjpmdW5jdGlvbigpe3RoaXMuX2FjdGlvbnM9W107dGhpcy5fbkFjdGl2ZUFjdGlvbnM9MDt0aGlzLl9hY3Rpb25zQnlDbGlwPXt9O3RoaXMuX2JpbmRpbmdzPVtdO3RoaXMuX25BY3RpdmVCaW5kaW5ncz0wO3RoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fTt0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdO3RoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7dmFyIGI9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gYi5fYWN0aW9ucy5sZW5ndGh9LApnZXQgaW5Vc2UoKXtyZXR1cm4gYi5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIGIuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIGIuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiBiLl9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIGIuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fSxfaXNBY3RpdmVBY3Rpb246ZnVuY3Rpb24oYil7Yj1iLl9jYWNoZUluZGV4O3JldHVybiBudWxsIT09YiYmYjx0aGlzLl9uQWN0aXZlQWN0aW9uc30sX2FkZEluYWN0aXZlQWN0aW9uOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbT10aGlzLl9hY3Rpb25zLHU9dGhpcy5fYWN0aW9uc0J5Q2xpcCx3PXVbZV07dm9pZCAwPT09dz8odz17a25vd25BY3Rpb25zOltiXSxhY3Rpb25CeVJvb3Q6e319LGIuX2J5Q2xpcENhY2hlSW5kZXg9MCx1W2VdPXcpOihlPQp3Lmtub3duQWN0aW9ucyxiLl9ieUNsaXBDYWNoZUluZGV4PWUubGVuZ3RoLGUucHVzaChiKSk7Yi5fY2FjaGVJbmRleD1tLmxlbmd0aDttLnB1c2goYik7dy5hY3Rpb25CeVJvb3RbaF09Yn0sX3JlbW92ZUluYWN0aXZlQWN0aW9uOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuX2FjdGlvbnMsaD1lW2UubGVuZ3RoLTFdLG09Yi5fY2FjaGVJbmRleDtoLl9jYWNoZUluZGV4PW07ZVttXT1oO2UucG9wKCk7Yi5fY2FjaGVJbmRleD1udWxsO2U9Yi5fY2xpcC51dWlkO2g9dGhpcy5fYWN0aW9uc0J5Q2xpcDttPWhbZV07dmFyIHU9bS5rbm93bkFjdGlvbnMsdz11W3UubGVuZ3RoLTFdLEE9Yi5fYnlDbGlwQ2FjaGVJbmRleDt3Ll9ieUNsaXBDYWNoZUluZGV4PUE7dVtBXT13O3UucG9wKCk7Yi5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2RlbGV0ZSBtLmFjdGlvbkJ5Um9vdFsoYi5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXTswPT09dS5sZW5ndGgmJmRlbGV0ZSBoW2VdO3RoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYil9LApfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbjpmdW5jdGlvbihiKXtiPWIuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKHZhciBlPTAsaD1iLmxlbmd0aDtlIT09aDsrK2Upe3ZhciBtPWJbZV07MD09PS0tbS5yZWZlcmVuY2VDb3VudCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG0pfX0sX2xlbmRBY3Rpb246ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fYWN0aW9ucyxoPWIuX2NhY2hlSW5kZXgsbT10aGlzLl9uQWN0aXZlQWN0aW9ucysrLHU9ZVttXTtiLl9jYWNoZUluZGV4PW07ZVttXT1iO3UuX2NhY2hlSW5kZXg9aDtlW2hdPXV9LF90YWtlQmFja0FjdGlvbjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9hY3Rpb25zLGg9Yi5fY2FjaGVJbmRleCxtPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsdT1lW21dO2IuX2NhY2hlSW5kZXg9bTtlW21dPWI7dS5fY2FjaGVJbmRleD1oO2VbaF09dX0sX2FkZEluYWN0aXZlQmluZGluZzpmdW5jdGlvbihiLGUsaCl7dmFyIG09dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLAp1PW1bZV0sdz10aGlzLl9iaW5kaW5nczt2b2lkIDA9PT11JiYodT17fSxtW2VdPXUpO3VbaF09YjtiLl9jYWNoZUluZGV4PXcubGVuZ3RoO3cucHVzaChiKX0sX3JlbW92ZUluYWN0aXZlQmluZGluZzpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9iaW5kaW5ncyxoPWIuYmluZGluZyxtPWgucm9vdE5vZGUudXVpZDtoPWgucGF0aDt2YXIgdT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdz11W21dLEE9ZVtlLmxlbmd0aC0xXTtiPWIuX2NhY2hlSW5kZXg7QS5fY2FjaGVJbmRleD1iO2VbYl09QTtlLnBvcCgpO2RlbGV0ZSB3W2hdOzA9PT1PYmplY3Qua2V5cyh3KS5sZW5ndGgmJmRlbGV0ZSB1W21dfSxfbGVuZEJpbmRpbmc6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fYmluZGluZ3MsaD1iLl9jYWNoZUluZGV4LG09dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKyssdT1lW21dO2IuX2NhY2hlSW5kZXg9bTtlW21dPWI7dS5fY2FjaGVJbmRleD1oO2VbaF09dX0sX3Rha2VCYWNrQmluZGluZzpmdW5jdGlvbihiKXt2YXIgZT0KdGhpcy5fYmluZGluZ3MsaD1iLl9jYWNoZUluZGV4LG09LS10aGlzLl9uQWN0aXZlQmluZGluZ3MsdT1lW21dO2IuX2NhY2hlSW5kZXg9bTtlW21dPWI7dS5fY2FjaGVJbmRleD1oO2VbaF09dX0sX2xlbmRDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGU9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKyxoPWJbZV07dm9pZCAwPT09aCYmKGg9bmV3IENoKG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLGguX19jYWNoZUluZGV4PWUsYltlXT1oKTtyZXR1cm4gaH0sX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaD1iLl9fY2FjaGVJbmRleCxtPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsdT1lW21dO2IuX19jYWNoZUluZGV4PQptO2VbbV09Yjt1Ll9fY2FjaGVJbmRleD1oO2VbaF09dX0sX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI6bmV3IEZsb2F0MzJBcnJheSgxKSxjbGlwQWN0aW9uOmZ1bmN0aW9uKGIsZSl7dmFyIGg9ZXx8dGhpcy5fcm9vdCxtPWgudXVpZDtoPSJzdHJpbmciPT09dHlwZW9mIGI/UmMuZmluZEJ5TmFtZShoLGIpOmI7Yj1udWxsIT09aD9oLnV1aWQ6Yjt2YXIgdT10aGlzLl9hY3Rpb25zQnlDbGlwW2JdLHc9bnVsbDtpZih2b2lkIDAhPT11KXt3PXUuYWN0aW9uQnlSb290W21dO2lmKHZvaWQgMCE9PXcpcmV0dXJuIHc7dz11Lmtub3duQWN0aW9uc1swXTtudWxsPT09aCYmKGg9dy5fY2xpcCl9aWYobnVsbD09PWgpcmV0dXJuIG51bGw7ZT1uZXcgYm8odGhpcyxoLGUpO3RoaXMuX2JpbmRBY3Rpb24oZSx3KTt0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihlLGIsbSk7cmV0dXJuIGV9LGV4aXN0aW5nQWN0aW9uOmZ1bmN0aW9uKGIsZSl7dmFyIGg9ZXx8dGhpcy5fcm9vdDtlPWgudXVpZDsKaD0ic3RyaW5nIj09PXR5cGVvZiBiP1JjLmZpbmRCeU5hbWUoaCxiKTpiO2I9dGhpcy5fYWN0aW9uc0J5Q2xpcFtoP2gudXVpZDpiXTtyZXR1cm4gdm9pZCAwIT09Yj9iLmFjdGlvbkJ5Um9vdFtlXXx8bnVsbDpudWxsfSxzdG9wQWxsQWN0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuX2FjdGlvbnMsZT10aGlzLl9uQWN0aXZlQWN0aW9ucyxoPXRoaXMuX2JpbmRpbmdzLG09dGhpcy5fbkFjdGl2ZUJpbmRpbmdzLHU9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPXRoaXMuX25BY3RpdmVBY3Rpb25zPTA7dSE9PWU7Kyt1KWJbdV0ucmVzZXQoKTtmb3IodT0wO3UhPT1tOysrdSloW3VdLnVzZUNvdW50PTA7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbihiKXtiKj10aGlzLnRpbWVTY2FsZTtmb3IodmFyIGU9dGhpcy5fYWN0aW9ucyxoPXRoaXMuX25BY3RpdmVBY3Rpb25zLG09dGhpcy50aW1lKz1iLHU9TWF0aC5zaWduKGIpLHc9dGhpcy5fYWNjdUluZGV4Xj0xLEE9MDtBIT09aDsrK0EpZVtBXS5fdXBkYXRlKG0sCmIsdSx3KTtiPXRoaXMuX2JpbmRpbmdzO2U9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihBPTA7QSE9PWU7KytBKWJbQV0uYXBwbHkodyk7cmV0dXJuIHRoaXN9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sdW5jYWNoZUNsaXA6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fYWN0aW9ucztiPWIudXVpZDt2YXIgaD10aGlzLl9hY3Rpb25zQnlDbGlwLG09aFtiXTtpZih2b2lkIDAhPT1tKXttPW0ua25vd25BY3Rpb25zO2Zvcih2YXIgdT0wLHc9bS5sZW5ndGg7dSE9PXc7Kyt1KXt2YXIgQT1tW3VdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oQSk7dmFyIEU9QS5fY2FjaGVJbmRleCxHPWVbZS5sZW5ndGgtMV07QS5fY2FjaGVJbmRleD1udWxsO0EuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbDtHLl9jYWNoZUluZGV4PUU7ZVtFXT1HO2UucG9wKCk7dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihBKX1kZWxldGUgaFtiXX19LHVuY2FjaGVSb290OmZ1bmN0aW9uKGIpe2I9CmIudXVpZDt2YXIgZT10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihtIGluIGUpe3ZhciBoPWVbbV0uYWN0aW9uQnlSb290W2JdO3ZvaWQgMCE9PWgmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGgpKX12YXIgbT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWVbYl07aWYodm9pZCAwIT09bSlmb3IodmFyIHUgaW4gbSliPW1bdV0sYi5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhiKX0sdW5jYWNoZUFjdGlvbjpmdW5jdGlvbihiLGUpe2I9dGhpcy5leGlzdGluZ0FjdGlvbihiLGUpO251bGwhPT1iJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihiKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihiKSl9fSk7WmkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaaSh2b2lkIDA9PT10aGlzLnZhbHVlLmNsb25lP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX07VmsucHJvdG90eXBlPQpPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2UucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VmssaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjohMCxjb3B5OmZ1bmN0aW9uKGIpe09lLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9Yi5tZXNoUGVyQXR0cmlidXRlO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oY28ucHJvdG90eXBlLHtsaW5lUHJlY2lzaW9uOjEsc2V0OmZ1bmN0aW9uKGIsZSl7dGhpcy5yYXkuc2V0KGIsZSl9LHNldEZyb21DYW1lcmE6ZnVuY3Rpb24oYixlKXtlJiZlLmlzUGVyc3BlY3RpdmVDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksdGhpcy5yYXkuZGlyZWN0aW9uLnNldChiLngsYi55LC41KS51bnByb2plY3QoZSkuc3ViKHRoaXMucmF5Lm9yaWdpbikubm9ybWFsaXplKCksdGhpcy5jYW1lcmE9ZSk6ZSYmZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT8KKHRoaXMucmF5Lm9yaWdpbi5zZXQoYi54LGIueSwoZS5uZWFyK2UuZmFyKS8oZS5uZWFyLWUuZmFyKSkudW5wcm9qZWN0KGUpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oZS5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9ZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZS4iKX0saW50ZXJzZWN0T2JqZWN0OmZ1bmN0aW9uKGIsZSxoKXtoPWh8fFtdO1drKGIsdGhpcyxoLGUpO2guc29ydChlbyk7cmV0dXJuIGh9LGludGVyc2VjdE9iamVjdHM6ZnVuY3Rpb24oYixlLGgpe2g9aHx8W107aWYoITE9PT1BcnJheS5pc0FycmF5KGIpKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3RzOiBvYmplY3RzIGlzIG5vdCBhbiBBcnJheS4iKSxoO2Zvcih2YXIgbT0wLHU9Yi5sZW5ndGg7bTx1O20rKylXayhiW21dLHRoaXMsaCxlKTtoLnNvcnQoZW8pO3JldHVybiBofX0pOwpPYmplY3QuYXNzaWduKGZvLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnJhZGl1cz1iO3RoaXMucGhpPWU7dGhpcy50aGV0YT1oO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLnJhZGl1cz1iLnJhZGl1czt0aGlzLnBoaT1iLnBoaTt0aGlzLnRoZXRhPWIudGhldGE7cmV0dXJuIHRoaXN9LG1ha2VTYWZlOmZ1bmN0aW9uKCl7dGhpcy5waGk9TWF0aC5tYXgoMUUtNixNYXRoLm1pbihNYXRoLlBJLTFFLTYsdGhpcy5waGkpKTtyZXR1cm4gdGhpc30sc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3JkcyhiLngsYi55LGIueil9LHNldEZyb21DYXJ0ZXNpYW5Db29yZHM6ZnVuY3Rpb24oYixlLGgpe3RoaXMucmFkaXVzPU1hdGguc3FydChiKmIrZSplK2gqaCk7MD09PXRoaXMucmFkaXVzP3RoaXMucGhpPQp0aGlzLnRoZXRhPTA6KHRoaXMudGhldGE9TWF0aC5hdGFuMihiLGgpLHRoaXMucGhpPU1hdGguYWNvcyhsYi5jbGFtcChlL3RoaXMucmFkaXVzLC0xLDEpKSk7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihnby5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUsaCl7dGhpcy5yYWRpdXM9Yjt0aGlzLnRoZXRhPWU7dGhpcy55PWg7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMucmFkaXVzPWIucmFkaXVzO3RoaXMudGhldGE9Yi50aGV0YTt0aGlzLnk9Yi55O3JldHVybiB0aGlzfSxzZXRGcm9tVmVjdG9yMzpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKGIueCxiLnksYi56KX0sc2V0RnJvbUNhcnRlc2lhbkNvb3JkczpmdW5jdGlvbihiLGUsaCl7dGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGIqYitoKmgpO3RoaXMudGhldGE9TWF0aC5hdGFuMihiLApoKTt0aGlzLnk9ZTtyZXR1cm4gdGhpc319KTt2YXIgSG89bmV3IGQ7T2JqZWN0LmFzc2lnbihYay5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUpe3RoaXMubWluLmNvcHkoYik7dGhpcy5tYXguY29weShlKTtyZXR1cm4gdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbihiKXt0aGlzLm1ha2VFbXB0eSgpO2Zvcih2YXIgZT0wLGg9Yi5sZW5ndGg7ZTxoO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQoYltlXSk7cmV0dXJuIHRoaXN9LHNldEZyb21DZW50ZXJBbmRTaXplOmZ1bmN0aW9uKGIsZSl7ZT1Iby5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTt0aGlzLm1pbi5jb3B5KGIpLnN1YihlKTt0aGlzLm1heC5jb3B5KGIpLmFkZChlKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5taW4uY29weShiLm1pbik7dGhpcy5tYXguY29weShiLm1heCk7cmV0dXJuIHRoaXN9LAptYWtlRW1wdHk6ZnVuY3Rpb24oKXt0aGlzLm1pbi54PXRoaXMubWluLnk9SW5maW5pdHk7dGhpcy5tYXgueD10aGlzLm1heC55PS1JbmZpbml0eTtyZXR1cm4gdGhpc30saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZCk7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP2Iuc2V0KDAsMCk6Yi5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9LGdldFNpemU6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldFNpemUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZCk7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP2Iuc2V0KDAsMCk6Yi5zdWJWZWN0b3JzKHRoaXMubWF4LAp0aGlzLm1pbil9LGV4cGFuZEJ5UG9pbnQ6ZnVuY3Rpb24oYil7dGhpcy5taW4ubWluKGIpO3RoaXMubWF4Lm1heChiKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlWZWN0b3I6ZnVuY3Rpb24oYil7dGhpcy5taW4uc3ViKGIpO3RoaXMubWF4LmFkZChiKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy5taW4uYWRkU2NhbGFyKC1iKTt0aGlzLm1heC5hZGRTY2FsYXIoYik7cmV0dXJuIHRoaXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIueDx0aGlzLm1pbi54fHxiLng+dGhpcy5tYXgueHx8Yi55PHRoaXMubWluLnl8fGIueT50aGlzLm1heC55PyExOiEwfSxjb250YWluc0JveDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5taW4ueDw9Yi5taW4ueCYmYi5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9Yi5taW4ueSYmYi5tYXgueTw9dGhpcy5tYXgueX0sZ2V0UGFyYW1ldGVyOmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldFBhcmFtZXRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSwKZT1uZXcgZCk7cmV0dXJuIGUuc2V0KChiLngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKGIueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIubWF4Lng8dGhpcy5taW4ueHx8Yi5taW4ueD50aGlzLm1heC54fHxiLm1heC55PHRoaXMubWluLnl8fGIubWluLnk+dGhpcy5tYXgueT8hMTohMH0sY2xhbXBQb2ludDpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jbGFtcFBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGQpO3JldHVybiBlLmNvcHkoYikuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfSxkaXN0YW5jZVRvUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIEhvLmNvcHkoYikuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1YihiKS5sZW5ndGgoKX0saW50ZXJzZWN0OmZ1bmN0aW9uKGIpe3RoaXMubWluLm1heChiLm1pbik7CnRoaXMubWF4Lm1pbihiLm1heCk7cmV0dXJuIHRoaXN9LHVuaW9uOmZ1bmN0aW9uKGIpe3RoaXMubWluLm1pbihiLm1pbik7dGhpcy5tYXgubWF4KGIubWF4KTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMubWluLmFkZChiKTt0aGlzLm1heC5hZGQoYik7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5taW4uZXF1YWxzKHRoaXMubWluKSYmYi5tYXguZXF1YWxzKHRoaXMubWF4KX19KTt2YXIgSW89bmV3IGcsd2o9bmV3IGc7T2JqZWN0LmFzc2lnbihZay5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUpe3RoaXMuc3RhcnQuY29weShiKTt0aGlzLmVuZC5jb3B5KGUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLnN0YXJ0LmNvcHkoYi5zdGFydCk7dGhpcy5lbmQuY29weShiLmVuZCk7cmV0dXJuIHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbihiKXt2b2lkIDA9PT0KYiYmKGNvbnNvbGUud2FybigiVEhSRUUuTGluZTM6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7cmV0dXJuIGIuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9LGRlbHRhOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuZGVsdGEoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7cmV0dXJuIGIuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KX0sZGlzdGFuY2VTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX0sZGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX0sYXQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmF0KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9Cm5ldyBnKTtyZXR1cm4gdGhpcy5kZWx0YShlKS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy5zdGFydCl9LGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6ZnVuY3Rpb24oYixlKXtJby5zdWJWZWN0b3JzKGIsdGhpcy5zdGFydCk7d2ouc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtiPXdqLmRvdChJbykvd2ouZG90KHdqKTtlJiYoYj1sYi5jbGFtcChiLDAsMSkpO3JldHVybiBifSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGIsZSxoKXtiPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcihiLGUpO3ZvaWQgMD09PWgmJihjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxoPW5ldyBnKTtyZXR1cm4gdGhpcy5kZWx0YShoKS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy5zdGFydCl9LGFwcGx5TWF0cml4NDpmdW5jdGlvbihiKXt0aGlzLnN0YXJ0LmFwcGx5TWF0cml4NChiKTsKdGhpcy5lbmQuYXBwbHlNYXRyaXg0KGIpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYil7cmV0dXJuIGIuc3RhcnQuZXF1YWxzKHRoaXMuc3RhcnQpJiZiLmVuZC5lcXVhbHModGhpcy5lbmQpfX0pO0hoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkucHJvdG90eXBlKTtIaC5wcm90b3R5cGUuY29uc3RydWN0b3I9SGg7SGgucHJvdG90eXBlLmlzSW1tZWRpYXRlUmVuZGVyT2JqZWN0PSEwO3ZhciBIZD1uZXcgZyxZZD1uZXcgZyx1bD1uZXcgbCxTcz1bImEiLCJiIiwiYyJdO0loLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSk7SWgucHJvdG90eXBlLmNvbnN0cnVjdG9yPUloO0loLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLm9iamVjdC51cGRhdGVNYXRyaXhXb3JsZCghMCk7dWwuZ2V0Tm9ybWFsTWF0cml4KHRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkKTt2YXIgYj10aGlzLm9iamVjdC5tYXRyaXhXb3JsZCxlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbiwKaD10aGlzLm9iamVjdC5nZW9tZXRyeTtpZihoJiZoLmlzR2VvbWV0cnkpZm9yKHZhciBtPWgudmVydGljZXMsdT1oLmZhY2VzLHc9aD0wLEE9dS5sZW5ndGg7dzxBO3crKylmb3IodmFyIEU9dVt3XSxHPTAsSj1FLnZlcnRleE5vcm1hbHMubGVuZ3RoO0c8SjtHKyspe3ZhciBRPUUudmVydGV4Tm9ybWFsc1tHXTtIZC5jb3B5KG1bRVtTc1tHXV1dKS5hcHBseU1hdHJpeDQoYik7WWQuY29weShRKS5hcHBseU1hdHJpeDModWwpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSkuYWRkKEhkKTtlLnNldFhZWihoLEhkLngsSGQueSxIZC56KTtoKz0xO2Uuc2V0WFlaKGgsWWQueCxZZC55LFlkLnopO2grPTF9ZWxzZSBpZihoJiZoLmlzQnVmZmVyR2VvbWV0cnkpZm9yKG09aC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHU9aC5hdHRyaWJ1dGVzLm5vcm1hbCxHPWg9MCxKPW0uY291bnQ7RzxKO0crKylIZC5zZXQobS5nZXRYKEcpLG0uZ2V0WShHKSxtLmdldFooRykpLmFwcGx5TWF0cml4NChiKSwKWWQuc2V0KHUuZ2V0WChHKSx1LmdldFkoRyksdS5nZXRaKEcpKSxZZC5hcHBseU1hdHJpeDModWwpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSkuYWRkKEhkKSxlLnNldFhZWihoLEhkLngsSGQueSxIZC56KSxoKz0xLGUuc2V0WFlaKGgsWWQueCxZZC55LFlkLnopLGgrPTE7ZS5uZWVkc1VwZGF0ZT0hMH07dmFyIEpvPW5ldyBnO2hnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkucHJvdG90eXBlKTtoZy5wcm90b3R5cGUuY29uc3RydWN0b3I9aGc7aGcucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmNvbmUuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY29uZS5tYXRlcmlhbC5kaXNwb3NlKCl9O2hnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dmFyIGI9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOjFFMyxlPWIqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7CnRoaXMuY29uZS5zY2FsZS5zZXQoZSxlLGIpO0pvLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7dGhpcy5jb25lLmxvb2tBdChKbyk7dm9pZCAwIT09dGhpcy5jb2xvcj90aGlzLmNvbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpOnRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfTt2YXIgemU9bmV3IGcseGo9bmV3IHIsdmw9bmV3IHI7aWcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU2IucHJvdG90eXBlKTtpZy5wcm90b3R5cGUuY29uc3RydWN0b3I9aWc7aWcucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkPWZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuYm9uZXMsaD10aGlzLmdlb21ldHJ5LG09aC5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7dmwuZ2V0SW52ZXJzZSh0aGlzLnJvb3QubWF0cml4V29ybGQpO2Zvcih2YXIgdT0wLHc9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIEE9ZVt1XTtBLnBhcmVudCYmCkEucGFyZW50LmlzQm9uZSYmKHhqLm11bHRpcGx5TWF0cmljZXModmwsQS5tYXRyaXhXb3JsZCksemUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHhqKSxtLnNldFhZWih3LHplLngsemUueSx6ZS56KSx4ai5tdWx0aXBseU1hdHJpY2VzKHZsLEEucGFyZW50Lm1hdHJpeFdvcmxkKSx6ZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oeGopLG0uc2V0WFlaKHcrMSx6ZS54LHplLnksemUueiksdys9Mil9aC5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITA7eS5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpfTtqZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5YS5wcm90b3R5cGUpO2pnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1qZztqZy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWwuZGlzcG9zZSgpfTtqZy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5jb2xvcj8KdGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfTtrZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtYy5wcm90b3R5cGUpO2tnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rZztrZy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZS5zZXQoLjUqdGhpcy5saWdodC53aWR0aCwuNSp0aGlzLmxpZ2h0LmhlaWdodCwxKTtpZih2b2lkIDAhPT10aGlzLmNvbG9yKXRoaXMubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpO2Vsc2V7dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpLm11bHRpcGx5U2NhbGFyKHRoaXMubGlnaHQuaW50ZW5zaXR5KTt2YXIgYj10aGlzLm1hdGVyaWFsLmNvbG9yLGU9TWF0aC5tYXgoYi5yLGIuZyxiLmIpOzE8ZSYmYi5tdWx0aXBseVNjYWxhcigxLwplKTt0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5tYXRlcmlhbC5jb2xvcil9fTtrZy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfTt2YXIgVHM9bmV3IGcsS289bmV3IEksTG89bmV3IEk7bGcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpO2xnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sZztsZy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfTtsZy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5jaGlsZHJlblswXTtpZih2b2lkIDAhPT10aGlzLmNvbG9yKXRoaXMubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpOwplbHNle3ZhciBlPWIuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO0tvLmNvcHkodGhpcy5saWdodC5jb2xvcik7TG8uY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTtmb3IodmFyIGg9MCxtPWUuY291bnQ7aDxtO2grKyl7dmFyIHU9aDxtLzI/S286TG87ZS5zZXRYWVooaCx1LnIsdS5nLHUuYil9ZS5uZWVkc1VwZGF0ZT0hMH1iLmxvb2tBdChUcy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCkubmVnYXRlKCkpfTttZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5YS5wcm90b3R5cGUpO21nLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tZzttZy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWwuZGlzcG9zZSgpfTttZy5wcm90b3R5cGUub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uLmNvcHkodGhpcy5saWdodFByb2JlLnBvc2l0aW9uKTt0aGlzLnNjYWxlLnNldCgxLAoxLDEpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSk7dGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5pbnRlbnNpdHkudmFsdWU9dGhpcy5saWdodFByb2JlLmludGVuc2l0eX07JGkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTYi5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjokaSxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmdlb21ldHJ5LmNvcHkoYi5nZW9tZXRyeSk7dGhpcy5tYXRlcmlhbC5jb3B5KGIubWF0ZXJpYWwpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19KTthai5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTYi5wcm90b3R5cGUpO2FqLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hajtuZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtYy5wcm90b3R5cGUpO25nLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uZztuZy5wcm90b3R5cGUudXBkYXRlPQpmdW5jdGlvbigpe2Z1bmN0aW9uIGIoWCxpYSxoYSxzYSl7aGE9KGlhLVgpL2hhO1cuc2V0WFlaKEcsMCwwLDApO0orKztmb3IoUT1YO1E8aWE7USs9aGEpUz1HK0osVy5zZXRYWVooUyxNYXRoLnNpbihRKSpoLDAsTWF0aC5jb3MoUSkqaCksVy5zZXRYWVooUysxLE1hdGguc2luKE1hdGgubWluKFEraGEsaWEpKSpoLDAsTWF0aC5jb3MoTWF0aC5taW4oUStoYSxpYSkpKmgpLFcuc2V0WFlaKFMrMiwwLDAsMCksSis9MztULmFkZEdyb3VwKEcsSixzYSk7Rys9SjtKPTB9dmFyIGU9dGhpcy5hdWRpbyxoPXRoaXMucmFuZ2UsbT10aGlzLmRpdmlzaW9uc0lubmVyQW5nbGUsdT10aGlzLmRpdmlzaW9uc091dGVyQW5nbGUsdz1sYi5kZWdUb1JhZChlLnBhbm5lci5jb25lSW5uZXJBbmdsZSk7ZT1sYi5kZWdUb1JhZChlLnBhbm5lci5jb25lT3V0ZXJBbmdsZSk7dmFyIEE9dy8yLEU9ZS8yLEc9MCxKPTAsUSxTLFQ9dGhpcy5nZW9tZXRyeSxXPVQuYXR0cmlidXRlcy5wb3NpdGlvbjtULmNsZWFyR3JvdXBzKCk7CmIoLUUsLUEsdSwwKTtiKC1BLEEsbSwxKTtiKEEsRSx1LDApO1cubmVlZHNVcGRhdGU9ITA7dz09PWUmJih0aGlzLm1hdGVyaWFsWzBdLnZpc2libGU9ITEpfTtuZy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWxbMF0uZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWxbMV0uZGlzcG9zZSgpfTt2YXIgVmg9bmV3IGcseWo9bmV3IGcsTW89bmV3IGw7SmgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU2IucHJvdG90eXBlKTtKaC5wcm90b3R5cGUuY29uc3RydWN0b3I9Smg7SmgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMub2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtNby5nZXROb3JtYWxNYXRyaXgodGhpcy5vYmplY3QubWF0cml4V29ybGQpO3ZhciBiPXRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkLGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGg9dGhpcy5vYmplY3QuZ2VvbWV0cnksbT0KaC52ZXJ0aWNlcztoPWguZmFjZXM7Zm9yKHZhciB1PTAsdz0wLEE9aC5sZW5ndGg7dzxBO3crKyl7dmFyIEU9aFt3XSxHPUUubm9ybWFsO1ZoLmNvcHkobVtFLmFdKS5hZGQobVtFLmJdKS5hZGQobVtFLmNdKS5kaXZpZGVTY2FsYXIoMykuYXBwbHlNYXRyaXg0KGIpO3lqLmNvcHkoRykuYXBwbHlNYXRyaXgzKE1vKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChWaCk7ZS5zZXRYWVoodSxWaC54LFZoLnksVmgueik7dSs9MTtlLnNldFhZWih1LHlqLngseWoueSx5ai56KTt1Kz0xfWUubmVlZHNVcGRhdGU9ITB9O3ZhciBObz1uZXcgZyx6aj1uZXcgZyxPbz1uZXcgZztvZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5LnByb3RvdHlwZSk7b2cucHJvdG90eXBlLmNvbnN0cnVjdG9yPW9nO29nLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5saWdodFBsYW5lLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuZGlzcG9zZSgpOwp0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9O29nLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtOby5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCk7emouc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKTtPby5zdWJWZWN0b3JzKHpqLE5vKTt0aGlzLmxpZ2h0UGxhbmUubG9va0F0KHpqKTt2b2lkIDAhPT10aGlzLmNvbG9yPyh0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcikpOih0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKSk7dGhpcy50YXJnZXRMaW5lLmxvb2tBdCh6aik7CnRoaXMudGFyZ2V0TGluZS5zY2FsZS56PU9vLmxlbmd0aCgpfTt2YXIgYmo9bmV3IGcsY2M9bmV3IEZiO0toLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSk7S2gucHJvdG90eXBlLmNvbnN0cnVjdG9yPUtoO0toLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmdlb21ldHJ5LGU9dGhpcy5wb2ludE1hcDtjYy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKTtlYygiYyIsZSxiLGNjLDAsMCwtMSk7ZWMoInQiLGUsYixjYywwLDAsMSk7ZWMoIm4xIixlLGIsY2MsLTEsLTEsLTEpO2VjKCJuMiIsZSxiLGNjLDEsLTEsLTEpO2VjKCJuMyIsZSxiLGNjLC0xLDEsLTEpO2VjKCJuNCIsZSxiLGNjLDEsMSwtMSk7ZWMoImYxIixlLGIsY2MsLTEsLTEsMSk7ZWMoImYyIixlLGIsY2MsMSwtMSwxKTtlYygiZjMiLGUsYixjYywtMSwxLDEpO2VjKCJmNCIsZSxiLGNjLDEsMSwxKTtlYygidTEiLAplLGIsY2MsLjcsMS4xLC0xKTtlYygidTIiLGUsYixjYywtLjcsMS4xLC0xKTtlYygidTMiLGUsYixjYywwLDIsLTEpO2VjKCJjZjEiLGUsYixjYywtMSwwLDEpO2VjKCJjZjIiLGUsYixjYywxLDAsMSk7ZWMoImNmMyIsZSxiLGNjLDAsLTEsMSk7ZWMoImNmNCIsZSxiLGNjLDAsMSwxKTtlYygiY24xIixlLGIsY2MsLTEsMCwtMSk7ZWMoImNuMiIsZSxiLGNjLDEsMCwtMSk7ZWMoImNuMyIsZSxiLGNjLDAsLTEsLTEpO2VjKCJjbjQiLGUsYixjYywwLDEsLTEpO2IuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfTt2YXIgQWo9bmV3IHg7UmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU2IucHJvdG90eXBlKTtSZC5wcm90b3R5cGUuY29uc3RydWN0b3I9UmQ7UmQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihiKXt2b2lkIDAhPT1iJiZjb25zb2xlLndhcm4oIlRIUkVFLkJveEhlbHBlcjogLnVwZGF0ZSgpIGhhcyBubyBsb25nZXIgYXJndW1lbnRzLiIpO3ZvaWQgMCE9PQp0aGlzLm9iamVjdCYmQWouc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCk7aWYoIUFqLmlzRW1wdHkoKSl7Yj1Bai5taW47dmFyIGU9QWoubWF4LGg9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLG09aC5hcnJheTttWzBdPWUueDttWzFdPWUueTttWzJdPWUuejttWzNdPWIueDttWzRdPWUueTttWzVdPWUuejttWzZdPWIueDttWzddPWIueTttWzhdPWUuejttWzldPWUueDttWzEwXT1iLnk7bVsxMV09ZS56O21bMTJdPWUueDttWzEzXT1lLnk7bVsxNF09Yi56O21bMTVdPWIueDttWzE2XT1lLnk7bVsxN109Yi56O21bMThdPWIueDttWzE5XT1iLnk7bVsyMF09Yi56O21bMjFdPWUueDttWzIyXT1iLnk7bVsyM109Yi56O2gubmVlZHNVcGRhdGU9ITA7dGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX19O1JkLnByb3RvdHlwZS5zZXRGcm9tT2JqZWN0PWZ1bmN0aW9uKGIpe3RoaXMub2JqZWN0PWI7dGhpcy51cGRhdGUoKTtyZXR1cm4gdGhpc307UmQucHJvdG90eXBlLmNvcHk9CmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLm9iamVjdD1iLm9iamVjdDtyZXR1cm4gdGhpc307UmQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfTtMaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTYi5wcm90b3R5cGUpO0xoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1MaDtMaC5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQ9ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5ib3g7ZS5pc0VtcHR5KCl8fChlLmdldENlbnRlcih0aGlzLnBvc2l0aW9uKSxlLmdldFNpemUodGhpcy5zY2FsZSksdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciguNSkseS5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpKX07TWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobWMucHJvdG90eXBlKTtNaC5wcm90b3R5cGUuY29uc3RydWN0b3I9TWg7TWgucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkPQpmdW5jdGlvbihiKXt2YXIgZT0tdGhpcy5wbGFuZS5jb25zdGFudDsxRS04Pk1hdGguYWJzKGUpJiYoZT0xRS04KTt0aGlzLnNjYWxlLnNldCguNSp0aGlzLnNpemUsLjUqdGhpcy5zaXplLGUpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuc2lkZT0wPmU/MTowO3RoaXMubG9va0F0KHRoaXMucGxhbmUubm9ybWFsKTt5LnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsYil9O3ZhciBQbz1uZXcgZyxjaixaaztTZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5LnByb3RvdHlwZSk7U2QucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNkO1NkLnByb3RvdHlwZS5zZXREaXJlY3Rpb249ZnVuY3Rpb24oYil7Ljk5OTk5PGIueT90aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpOi0uOTk5OTk+Yi55P3RoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk6KFBvLnNldChiLnosMCwtYi54KS5ub3JtYWxpemUoKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZShQbyxNYXRoLmFjb3MoYi55KSkpfTsKU2QucHJvdG90eXBlLnNldExlbmd0aD1mdW5jdGlvbihiLGUsaCl7dm9pZCAwPT09ZSYmKGU9LjIqYik7dm9pZCAwPT09aCYmKGg9LjIqZSk7dGhpcy5saW5lLnNjYWxlLnNldCgxLE1hdGgubWF4KDAsYi1lKSwxKTt0aGlzLmxpbmUudXBkYXRlTWF0cml4KCk7dGhpcy5jb25lLnNjYWxlLnNldChoLGUsaCk7dGhpcy5jb25lLnBvc2l0aW9uLnk9Yjt0aGlzLmNvbmUudXBkYXRlTWF0cml4KCl9O1NkLnByb3RvdHlwZS5zZXRDb2xvcj1mdW5jdGlvbihiKXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KGIpO3RoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQoYil9O1NkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe3kucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIsITEpO3RoaXMubGluZS5jb3B5KGIubGluZSk7dGhpcy5jb25lLmNvcHkoYi5jb25lKTtyZXR1cm4gdGhpc307U2QucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfTsKTmgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU2IucHJvdG90eXBlKTtOaC5wcm90b3R5cGUuY29uc3RydWN0b3I9Tmg7YWIuY3JlYXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKTtiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFiLnByb3RvdHlwZSk7Yi5wcm90b3R5cGUuY29uc3RydWN0b3I9YjtiLnByb3RvdHlwZS5nZXRQb2ludD1lO3JldHVybiBifTtPYmplY3QuYXNzaWduKFFkLnByb3RvdHlwZSx7Y3JlYXRlUG9pbnRzR2VvbWV0cnk6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZVBhdGg6IC5jcmVhdGVQb2ludHNHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuR2VvbWV0cnkoKS5zZXRGcm9tUG9pbnRzKCBwb2ludHMgKSBpbnN0ZWFkLiIpO2I9dGhpcy5nZXRQb2ludHMoYik7cmV0dXJuIHRoaXMuY3JlYXRlR2VvbWV0cnkoYil9LGNyZWF0ZVNwYWNlZFBvaW50c0dlb21ldHJ5OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQ3VydmVQYXRoOiAuY3JlYXRlU3BhY2VkUG9pbnRzR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkdlb21ldHJ5KCkuc2V0RnJvbVBvaW50cyggcG9pbnRzICkgaW5zdGVhZC4iKTsKYj10aGlzLmdldFNwYWNlZFBvaW50cyhiKTtyZXR1cm4gdGhpcy5jcmVhdGVHZW9tZXRyeShiKX0sY3JlYXRlR2VvbWV0cnk6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZVBhdGg6IC5jcmVhdGVHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuR2VvbWV0cnkoKS5zZXRGcm9tUG9pbnRzKCBwb2ludHMgKSBpbnN0ZWFkLiIpO2Zvcih2YXIgZT1uZXcgemEsaD0wLG09Yi5sZW5ndGg7aDxtO2grKyl7dmFyIHU9YltoXTtlLnZlcnRpY2VzLnB1c2gobmV3IGcodS54LHUueSx1Lnp8fDApKX1yZXR1cm4gZX19KTtPYmplY3QuYXNzaWduKGlkLnByb3RvdHlwZSx7ZnJvbVBvaW50czpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpO3RoaXMuc2V0RnJvbVBvaW50cyhiKX19KTtpby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1Yy5wcm90b3R5cGUpOwpqby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1Yy5wcm90b3R5cGUpOyRrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHVjLnByb3RvdHlwZSk7T2JqZWN0LmFzc2lnbigkay5wcm90b3R5cGUse2luaXRGcm9tQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5pbml0RnJvbUFycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sZ2V0Q29udHJvbFBvaW50c0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuZ2V0Q29udHJvbFBvaW50c0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scmVwYXJhbWV0cml6ZUJ5QXJjTGVuZ3RoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAucmVwYXJhbWV0cml6ZUJ5QXJjTGVuZ3RoKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTskaS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfTsKaWcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfTtPYmplY3QuYXNzaWduKEtiLnByb3RvdHlwZSx7ZXh0cmFjdFVybEJhc2U6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIik7cmV0dXJuIHNsLmV4dHJhY3RVcmxCYXNlKGIpfX0pO09iamVjdC5hc3NpZ24oV2kucHJvdG90eXBlLHtzZXRUZXh0dXJlUGF0aDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIik7cmV0dXJuIHRoaXMuc2V0UmVzb3VyY2VQYXRoKGIpfX0pO09iamVjdC5hc3NpZ24oWGsucHJvdG90eXBlLAp7Y2VudGVyOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpO3JldHVybiB0aGlzLmdldENlbnRlcihiKX0sZW1wdHk6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNCb3goYil9LHNpemU6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKTtyZXR1cm4gdGhpcy5nZXRTaXplKGIpfX0pO09iamVjdC5hc3NpZ24oeC5wcm90b3R5cGUsCntjZW50ZXI6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIik7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKGIpfSxlbXB0eTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpO3JldHVybiB0aGlzLmlzRW1wdHkoKX0saXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChiKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIik7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShiKX0sCnNpemU6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKTtyZXR1cm4gdGhpcy5nZXRTaXplKGIpfX0pO1lrLnByb3RvdHlwZS5jZW50ZXI9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpO3JldHVybiB0aGlzLmdldENlbnRlcihiKX07T2JqZWN0LmFzc2lnbihsYix7cmFuZG9tMTY6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGg6IC5yYW5kb20xNigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBNYXRoLnJhbmRvbSgpIGluc3RlYWQuIik7cmV0dXJuIE1hdGgucmFuZG9tKCl9LG5lYXJlc3RQb3dlck9mVHdvOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5lYXJlc3RQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZmxvb3JQb3dlck9mVHdvKCkuIik7CnJldHVybiBsYi5mbG9vclBvd2VyT2ZUd28oYil9LG5leHRQb3dlck9mVHdvOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0aDogLm5leHRQb3dlck9mVHdvKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY2VpbFBvd2VyT2ZUd28oKS4iKTtyZXR1cm4gbGIuY2VpbFBvd2VyT2ZUd28oYil9fSk7T2JqZWN0LmFzc2lnbihsLnByb3RvdHlwZSx7ZmxhdHRlblRvQXJyYXlPZmZzZXQ6ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIik7cmV0dXJuIHRoaXMudG9BcnJheShiLGUpfSxtdWx0aXBseVZlY3RvcjM6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIik7cmV0dXJuIGIuYXBwbHlNYXRyaXgzKHRoaXMpfSwKbXVsdGlwbHlWZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhcHBseVRvQnVmZmVyOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXIoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4LmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZShiKX0sYXBwbHlUb1ZlY3RvcjNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTtPYmplY3QuYXNzaWduKHIucHJvdG90eXBlLHtleHRyYWN0UG9zaXRpb246ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIik7CnJldHVybiB0aGlzLmNvcHlQb3NpdGlvbihiKX0sZmxhdHRlblRvQXJyYXlPZmZzZXQ6ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIik7cmV0dXJuIHRoaXMudG9BcnJheShiLGUpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybihuZXcgZykuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxzZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpOwpyZXR1cm4gdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihiKX0sbXVsdGlwbHlUb0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sbXVsdGlwbHlWZWN0b3IzOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBiLmFwcGx5TWF0cml4NCh0aGlzKX0sbXVsdGlwbHlWZWN0b3I0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBiLmFwcGx5TWF0cml4NCh0aGlzKX0sbXVsdGlwbHlWZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKcm90YXRlQXhpczpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpO2IudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSxjcm9zc1ZlY3RvcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBiLmFwcGx5TWF0cml4NCh0aGlzKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHJvdGF0ZVk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LApyb3RhdGVaOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVCeUF4aXM6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoYil9LGFwcGx5VG9WZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LG1ha2VGcnVzdHVtOmZ1bmN0aW9uKGIsZSxoLG0sdSx3KXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIik7CnJldHVybiB0aGlzLm1ha2VQZXJzcGVjdGl2ZShiLGUsbSxoLHUsdyl9fSk7UmIucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzTGluZShiKX07Zi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIik7cmV0dXJuIGIuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtPYmplY3QuYXNzaWduKEQucHJvdG90eXBlLHtpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpOwpyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGIpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNQbGFuZShiKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGIpfX0pO09iamVjdC5hc3NpZ24oQi5wcm90b3R5cGUse2FyZWE6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKTtyZXR1cm4gdGhpcy5nZXRBcmVhKCl9LGJhcnljb29yZEZyb21Qb2ludDpmdW5jdGlvbihiLAplKXtjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIik7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKGIsZSl9LG1pZHBvaW50OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIik7cmV0dXJuIHRoaXMuZ2V0TWlkcG9pbnQoYil9LG5vcm1hbDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIik7cmV0dXJuIHRoaXMuZ2V0Tm9ybWFsKGIpfSxwbGFuZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpO3JldHVybiB0aGlzLmdldFBsYW5lKGIpfX0pO09iamVjdC5hc3NpZ24oQiwKe2Jhcnljb29yZEZyb21Qb2ludDpmdW5jdGlvbihiLGUsaCxtLHUpe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKTtyZXR1cm4gQi5nZXRCYXJ5Y29vcmQoYixlLGgsbSx1KX0sbm9ybWFsOmZ1bmN0aW9uKGIsZSxoLG0pe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKTtyZXR1cm4gQi5nZXROb3JtYWwoYixlLGgsbSl9fSk7T2JqZWN0LmFzc2lnbih0ZS5wcm90b3R5cGUse2V4dHJhY3RBbGxQb2ludHM6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmV4dHJhY3RQb2ludHMoYil9LGV4dHJ1ZGU6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKTsKcmV0dXJuIG5ldyBTZSh0aGlzLGIpfSxtYWtlR2VvbWV0cnk6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IFRlKHRoaXMsYil9fSk7T2JqZWN0LmFzc2lnbihkLnByb3RvdHlwZSx7ZnJvbUF0dHJpYnV0ZTpmdW5jdGlvbihiLGUsaCl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTtyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGIsZSxoKX0sZGlzdGFuY2VUb01hbmhhdHRhbjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpO3JldHVybiB0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oYil9LApsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKTtyZXR1cm4gdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KTtPYmplY3QuYXNzaWduKGcucHJvdG90eXBlLHtzZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfSxzZXRFdWxlckZyb21RdWF0ZXJuaW9uOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfSxnZXRQb3NpdGlvbkZyb21NYXRyaXg6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIik7CnJldHVybiB0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihiKX0sZ2V0U2NhbGVGcm9tTWF0cml4OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpO3JldHVybiB0aGlzLnNldEZyb21NYXRyaXhTY2FsZShiKX0sZ2V0Q29sdW1uRnJvbU1hdHJpeDpmdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIik7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihlLGIpfSxhcHBseVByb2plY3Rpb246ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5TWF0cml4NChiKX0sCmZyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShiLGUsaCl9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKTtyZXR1cm4gdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKGIpfSxsZW5ndGhNYW5oYXR0YW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKTtyZXR1cm4gdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX19KTtPYmplY3QuYXNzaWduKG4ucHJvdG90eXBlLAp7ZnJvbUF0dHJpYnV0ZTpmdW5jdGlvbihiLGUsaCl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTtyZXR1cm4gdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGIsZSxoKX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIik7cmV0dXJuIHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9fSk7T2JqZWN0LmFzc2lnbih6YS5wcm90b3R5cGUse2NvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sY29tcHV0ZUxpbmVEaXN0YW5jZXM6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeTogLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBpbnN0ZWFkLiIpfX0pOwpPYmplY3QuYXNzaWduKHkucHJvdG90eXBlLHtnZXRDaGlsZEJ5TmFtZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKTtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeU5hbWUoYil9LHJlbmRlckRlcHRoOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LHRyYW5zbGF0ZTpmdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhlLGIpfSxnZXRXb3JsZFJvdGF0aW9uOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX19KTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIik7cmV0dXJuIHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpO3RoaXMucm90YXRpb24ub3JkZXI9Yn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pOwpPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlaC5wcm90b3R5cGUse29iamVjdHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTE9EOiAub2JqZWN0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5sZXZlbHMuIik7cmV0dXJuIHRoaXMubGV2ZWxzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoemkucHJvdG90eXBlLCJ1c2VWZXJ0ZXhUZXh0dXJlIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogdXNlVmVydGV4VGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7ZmgucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWIucHJvdG90eXBlLAoiX19hcmNMZW5ndGhEaXZpc2lvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuX19hcmNMZW5ndGhEaXZpc2lvbnMgaXMgbm93IC5hcmNMZW5ndGhEaXZpc2lvbnMuIik7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpO3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPWJ9fSk7QWIucHJvdG90eXBlLnNldExlbnM9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLnNldExlbnMgaXMgZGVwcmVjYXRlZC4gVXNlIC5zZXRGb2NhbExlbmd0aCBhbmQgLmZpbG1HYXVnZSBmb3IgYSBwaG90b2dyYXBoaWMgc2V0dXAuIik7dm9pZCAwIT09ZSYmKHRoaXMuZmlsbUdhdWdlPWUpO3RoaXMuc2V0Rm9jYWxMZW5ndGgoYil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFViLnByb3RvdHlwZSwKe29ubHlTaGFkb3c6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5vbmx5U2hhZG93IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dDYW1lcmFGb3Y6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRm92IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mb3YuIik7dGhpcy5zaGFkb3cuY2FtZXJhLmZvdj1ifX0sc2hhZG93Q2FtZXJhTGVmdDp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LiIpO3RoaXMuc2hhZG93LmNhbWVyYS5sZWZ0PWJ9fSxzaGFkb3dDYW1lcmFSaWdodDp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuIik7dGhpcy5zaGFkb3cuY2FtZXJhLnJpZ2h0PWJ9fSxzaGFkb3dDYW1lcmFUb3A6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVG9wIGlzIG5vdyAuc2hhZG93LmNhbWVyYS50b3AuIik7CnRoaXMuc2hhZG93LmNhbWVyYS50b3A9Yn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKTt0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWJ9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIik7dGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9Yn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKTt0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWJ9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSwKc2hhZG93Qmlhczp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dCaWFzIGlzIG5vdyAuc2hhZG93LmJpYXMuIik7dGhpcy5zaGFkb3cuYmlhcz1ifX0sc2hhZG93RGFya25lc3M6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93TWFwV2lkdGg6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4iKTt0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoPWJ9fSxzaGFkb3dNYXBIZWlnaHQ6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LiIpO3RoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0PWJ9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFIucHJvdG90eXBlLAp7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RofX0sY29weUluZGljZXNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO09iamVjdC5hc3NpZ24oeGEucHJvdG90eXBlLHthZGRJbmRleDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpO3RoaXMuc2V0SW5kZXgoYil9LGFkZERyYXdDYWxsOmZ1bmN0aW9uKGIsZSxoKXt2b2lkIDAhPT1oJiZjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuIik7CmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIGlzIG5vdyAuYWRkR3JvdXAoKS4iKTt0aGlzLmFkZEdyb3VwKGIsZSl9LGNsZWFyRHJhd0NhbGxzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLiIpO3RoaXMuY2xlYXJHcm91cHMoKX0sY29tcHV0ZVRhbmdlbnRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGNvbXB1dGVPZmZzZXRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh4YS5wcm90b3R5cGUse2RyYXdjYWxsczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpOwpyZXR1cm4gdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIik7cmV0dXJuIHRoaXMuZ3JvdXBzfX19KTtPYmplY3QuYXNzaWduKHpkLnByb3RvdHlwZSx7Z2V0QXJyYXlzOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYWRkU2hhcGVMaXN0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiAuYWRkU2hhcGVMaXN0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYWRkU2hhcGU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWmkucHJvdG90eXBlLAp7ZHluYW1pYzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAuZHluYW1pYyBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKX19LG9uVXBkYXRlOnt2YWx1ZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE0ucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSwKc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9fSx3cmFwUkdCOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpO3JldHVybiBuZXcgSX19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpO3RoaXMuZmxhdFNoYWRpbmc9MT09PWJ9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGRkLnByb3RvdHlwZSx7bWV0YWw6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWVzaFBob25nTWF0ZXJpYWw6IC5tZXRhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwgaW5zdGVhZC4iKTsKcmV0dXJuITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWVzaFBob25nTWF0ZXJpYWw6IC5tZXRhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwgaW5zdGVhZCIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh1Yi5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIik7dGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPWJ9fX0pO09iamVjdC5hc3NpZ24ocmsucHJvdG90eXBlLAp7Y2xlYXJUYXJnZXQ6ZnVuY3Rpb24oYixlLGgsbSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpO3RoaXMuc2V0UmVuZGVyVGFyZ2V0KGIpO3RoaXMuY2xlYXIoZSxoLG0pfSxhbmltYXRlOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKTt0aGlzLnNldEFuaW1hdGlvbkxvb3AoYil9LGdldEN1cnJlbnRSZW5kZXJUYXJnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKTtyZXR1cm4gdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX0sZ2V0TWF4QW5pc290cm9weTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIik7CnJldHVybiB0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9LGdldFByZWNpc2lvbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKTtyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxyZXNldEdMU3RhdGU6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5yZXNldEdMU3RhdGUoKSBpcyBub3cgLnN0YXRlLnJlc2V0KCkuIik7cmV0dXJuIHRoaXMuc3RhdGUucmVzZXQoKX0sc3VwcG9ydHNGbG9hdFRleHR1cmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpO3JldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfSwKc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfSxzdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpO3JldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0sc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKTsKcmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQzpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfSxzdXBwb3J0c0JsZW5kTWluTWF4OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpO3JldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iil9LHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIik7CnJldHVybiB0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc30sc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpO3JldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LGVuYWJsZVNjaXNzb3JUZXN0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpO3RoaXMuc2V0U2Npc3NvclRlc3QoYil9LGluaXRNYXRlcmlhbDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGFkZFByZVBsdWdpbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LAphZGRQb3N0UGx1Z2luOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHVwZGF0ZVNoYWRvd01hcDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldEZhY2VDdWxsaW5nOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhbGxvY1RleHR1cmVVbml0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldFRleHR1cmU6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0VGV4dHVyZTJEOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sCnNldFRleHR1cmVDdWJlOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZUN1YmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxnZXRBY3RpdmVNaXBNYXBMZXZlbDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpO3JldHVybiB0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocmsucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKTt0aGlzLnNoYWRvd01hcC5lbmFibGVkPWJ9fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sCnNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIik7dGhpcy5zaGFkb3dNYXAudHlwZT1ifX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuZ2V0Q29udGV4dCgpfX19KTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRW4ucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LApyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiYy5wcm90b3R5cGUse2FjdGl2ZUN1YmVGYWNlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZTogLmFjdGl2ZUN1YmVGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIEl0IGlzIG5vdyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBXZWJHTFJlbmRlcmVyLnNldFJlbmRlclRhcmdldCgpLiIpfX0sCmFjdGl2ZU1pcE1hcExldmVsOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZTogLmFjdGl2ZU1pcE1hcExldmVsIGhhcyBiZWVuIHJlbW92ZWQuIEl0IGlzIG5vdyB0aGUgdGhpcmQgcGFyYW1ldGVyIG9mIFdlYkdMUmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KCkuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHAucHJvdG90eXBlLHt3cmFwUzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLndyYXBTfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKTt0aGlzLnRleHR1cmUud3JhcFM9Yn19LHdyYXBUOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpOwpyZXR1cm4gdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKTt0aGlzLnRleHR1cmUud3JhcFQ9Yn19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpO3JldHVybiB0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpO3RoaXMudGV4dHVyZS5tYWdGaWx0ZXI9Yn19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpO3JldHVybiB0aGlzLnRleHR1cmUubWluRmlsdGVyfSwKc2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKTt0aGlzLnRleHR1cmUubWluRmlsdGVyPWJ9fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKTt0aGlzLnRleHR1cmUuYW5pc290cm9weT1ifX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5vZmZzZXR9LApzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpO3RoaXMudGV4dHVyZS5vZmZzZXQ9Yn19LHJlcGVhdDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpO3JldHVybiB0aGlzLnRleHR1cmUucmVwZWF0fSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpO3RoaXMudGV4dHVyZS5yZXBlYXQ9Yn19LGZvcm1hdDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpO3JldHVybiB0aGlzLnRleHR1cmUuZm9ybWF0fSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpOwp0aGlzLnRleHR1cmUuZm9ybWF0PWJ9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKTtyZXR1cm4gdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKTt0aGlzLnRleHR1cmUudHlwZT1ifX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIik7CnRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Yn19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocWsucHJvdG90eXBlLHtzdGFuZGluZzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJWUk1hbmFnZXI6IC5zdGFuZGluZyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sdXNlckhlaWdodDp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJWUk1hbmFnZXI6IC51c2VySGVpZ2h0IGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO2dnLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IC5sb2FkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5BdWRpb0xvYWRlciBpbnN0ZWFkLiIpO3ZhciBlPXRoaXM7KG5ldyBYaSkubG9hZChiLGZ1bmN0aW9uKGgpe2Uuc2V0QnVmZmVyKGgpfSk7cmV0dXJuIHRoaXN9O1NrLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpOwpyZXR1cm4gdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O1BiLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAudXBkYXRlQ3ViZU1hcCgpIGlzIG5vdyAudXBkYXRlKCkuIik7cmV0dXJuIHRoaXMudXBkYXRlKGIsZSl9O3VlLmNyb3NzT3JpZ2luPXZvaWQgMDt1ZS5sb2FkVGV4dHVyZT1mdW5jdGlvbihiLGUsaCxtKXtjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMubG9hZFRleHR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLlRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO3ZhciB1PW5ldyBKaTt1LnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2I9dS5sb2FkKGIsaCx2b2lkIDAsbSk7ZSYmKGIubWFwcGluZz1lKTtyZXR1cm4gYn07dWUubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKGIsZSxoLG0pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTsKdmFyIHU9bmV3IElpO3Uuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Yj11LmxvYWQoYixoLHZvaWQgMCxtKTtlJiYoYi5tYXBwaW5nPWUpO3JldHVybiBifTt1ZS5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O3VlLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTthLkFDRVNGaWxtaWNUb25lTWFwcGluZz01O2EuQWRkRXF1YXRpb249MTAwO2EuQWRkT3BlcmF0aW9uPTI7YS5BZGRpdGl2ZUJsZW5kaW5nPTI7YS5BbHBoYUZvcm1hdD0xMDIxO2EuQWx3YXlzRGVwdGg9CjE7YS5BbHdheXNTdGVuY2lsRnVuYz01MTk7YS5BbWJpZW50TGlnaHQ9UWk7YS5BbWJpZW50TGlnaHRQcm9iZT1OazthLkFuaW1hdGlvbkNsaXA9UmM7YS5BbmltYXRpb25Mb2FkZXI9RWs7YS5BbmltYXRpb25NaXhlcj1VazthLkFuaW1hdGlvbk9iamVjdEdyb3VwPWFvO2EuQW5pbWF0aW9uVXRpbHM9amM7YS5BcmNDdXJ2ZT1mZzthLkFycmF5Q2FtZXJhPSRnO2EuQXJyb3dIZWxwZXI9U2Q7YS5BdWRpbz1nZzthLkF1ZGlvQW5hbHlzZXI9U2s7YS5BdWRpb0NvbnRleHQ9UWs7YS5BdWRpb0xpc3RlbmVyPVBrO2EuQXVkaW9Mb2FkZXI9WGk7YS5BeGVzSGVscGVyPU5oO2EuQXhpc0hlbHBlcj1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkF4aXNIZWxwZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5BeGVzSGVscGVyLiIpO3JldHVybiBuZXcgTmgoYil9O2EuQmFja1NpZGU9MTthLkJhc2ljRGVwdGhQYWNraW5nPTMyMDA7YS5CYXNpY1NoYWRvd01hcD0wO2EuQmluYXJ5VGV4dHVyZUxvYWRlcj0KZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5CaW5hcnlUZXh0dXJlTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRGF0YVRleHR1cmVMb2FkZXIuIik7cmV0dXJuIG5ldyBIaShiKX07YS5Cb25lPXhrO2EuQm9vbGVhbktleWZyYW1lVHJhY2s9RGk7YS5Cb3VuZGluZ0JveEhlbHBlcj1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IFJkKGIsZSl9O2EuQm94Mj1YazthLkJveDM9eDthLkJveDNIZWxwZXI9TGg7YS5Cb3hCdWZmZXJHZW9tZXRyeT1aYTthLkJveEdlb21ldHJ5PVVhO2EuQm94SGVscGVyPVJkO2EuQnVmZmVyQXR0cmlidXRlPVI7YS5CdWZmZXJHZW9tZXRyeT14YTthLkJ1ZmZlckdlb21ldHJ5TG9hZGVyPVZpO2EuQnl0ZVR5cGU9MTAxMDthLkNhY2hlPWdmO2EuQ2FtZXJhPUZiO2EuQ2FtZXJhSGVscGVyPQpLaDthLkNhbnZhc1JlbmRlcmVyPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ2FudmFzUmVuZGVyZXIgaGFzIGJlZW4gcmVtb3ZlZCIpfTthLkNhbnZhc1RleHR1cmU9Z2g7YS5DYXRtdWxsUm9tQ3VydmUzPXVjO2EuQ2luZW9uVG9uZU1hcHBpbmc9NDthLkNpcmNsZUJ1ZmZlckdlb21ldHJ5PWFnO2EuQ2lyY2xlR2VvbWV0cnk9Qmg7YS5DbGFtcFRvRWRnZVdyYXBwaW5nPTEwMDE7YS5DbG9jaz1PazthLkNsb3NlZFNwbGluZUN1cnZlMz1pbzthLkNvbG9yPUk7YS5Db2xvcktleWZyYW1lVHJhY2s9RWk7YS5Db21wcmVzc2VkVGV4dHVyZT1PZjthLkNvbXByZXNzZWRUZXh0dXJlTG9hZGVyPUZrO2EuQ29uZUJ1ZmZlckdlb21ldHJ5PUFoO2EuQ29uZUdlb21ldHJ5PXpoO2EuQ3ViZUNhbWVyYT1QYjthLkN1YmVHZW9tZXRyeT1VYTthLkN1YmVSZWZsZWN0aW9uTWFwcGluZz0zMDE7YS5DdWJlUmVmcmFjdGlvbk1hcHBpbmc9MzAyO2EuQ3ViZVRleHR1cmU9TWQ7YS5DdWJlVGV4dHVyZUxvYWRlcj0KSWk7YS5DdWJlVVZSZWZsZWN0aW9uTWFwcGluZz0zMDY7YS5DdWJlVVZSZWZyYWN0aW9uTWFwcGluZz0zMDc7YS5DdWJpY0JlemllckN1cnZlPWVkO2EuQ3ViaWNCZXppZXJDdXJ2ZTM9QmQ7YS5DdWJpY0ludGVycG9sYW50PUJpO2EuQ3VsbEZhY2VCYWNrPTE7YS5DdWxsRmFjZUZyb250PTI7YS5DdWxsRmFjZUZyb250QmFjaz0zO2EuQ3VsbEZhY2VOb25lPTA7YS5DdXJ2ZT1hYjthLkN1cnZlUGF0aD1RZDthLkN1c3RvbUJsZW5kaW5nPTU7YS5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5PVBkO2EuQ3lsaW5kZXJHZW9tZXRyeT1WZTthLkN5bGluZHJpY2FsPWdvO2EuRGF0YVRleHR1cmU9R2I7YS5EYXRhVGV4dHVyZTJEQXJyYXk9Q2Y7YS5EYXRhVGV4dHVyZTNEPURmO2EuRGF0YVRleHR1cmVMb2FkZXI9SGk7YS5EZWNyZW1lbnRTdGVuY2lsT3A9NzY4MzthLkRlY3JlbWVudFdyYXBTdGVuY2lsT3A9MzQwNTY7YS5EZWZhdWx0TG9hZGluZ01hbmFnZXI9WG47YS5EZXB0aEZvcm1hdD0xMDI2OwphLkRlcHRoU3RlbmNpbEZvcm1hdD0xMDI3O2EuRGVwdGhUZXh0dXJlPWhoO2EuRGlyZWN0aW9uYWxMaWdodD1QaTthLkRpcmVjdGlvbmFsTGlnaHRIZWxwZXI9b2c7YS5EaXJlY3Rpb25hbExpZ2h0U2hhZG93PU9pO2EuRGlzY3JldGVJbnRlcnBvbGFudD1DaTthLkRvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVRmO2EuRG9kZWNhaGVkcm9uR2VvbWV0cnk9bmg7YS5Eb3VibGVTaWRlPTI7YS5Ec3RBbHBoYUZhY3Rvcj0yMDY7YS5Ec3RDb2xvckZhY3Rvcj0yMDg7YS5EeW5hbWljQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5EeW5hbWljQnVmZmVyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKCkuc2V0RHluYW1pYyggdHJ1ZSApIGluc3RlYWQuIik7cmV0dXJuKG5ldyBSKGIsZSkpLnNldER5bmFtaWMoITApfTthLkVkZ2VzR2VvbWV0cnk9JGY7YS5FZGdlc0hlbHBlcj1mdW5jdGlvbihiLAplKXtjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIG5ldyBTYihuZXcgJGYoYi5nZW9tZXRyeSksbmV3IE9iKHtjb2xvcjp2b2lkIDAhPT1lP2U6MTY3NzcyMTV9KSl9O2EuRWxsaXBzZUN1cnZlPUxjO2EuRXF1YWxEZXB0aD00O2EuRXF1YWxTdGVuY2lsRnVuYz01MTQ7YS5FcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZz0zMDM7YS5FcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZz0zMDQ7YS5FdWxlcj10O2EuRXZlbnREaXNwYXRjaGVyPWM7YS5FeHRydWRlQnVmZmVyR2VvbWV0cnk9emQ7YS5FeHRydWRlR2VvbWV0cnk9U2U7YS5GYWNlMz1LO2EuRmFjZTQ9ZnVuY3Rpb24oYixlLGgsbSx1LHcsQSl7Y29uc29sZS53YXJuKCJUSFJFRS5GYWNlNCBoYXMgYmVlbiByZW1vdmVkLiBBIFRIUkVFLkZhY2UzIHdpbGwgYmUgY3JlYXRlZCBpbnN0ZWFkLiIpO3JldHVybiBuZXcgSyhiLAplLGgsdSx3LEEpfTthLkZhY2VDb2xvcnM9MTthLkZhY2VOb3JtYWxzSGVscGVyPUpoO2EuRmlsZUxvYWRlcj1TYzthLkZsYXRTaGFkaW5nPTE7YS5GbG9hdDMyQXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBkYShiLGUpfTthLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGU9ZGE7YS5GbG9hdDY0QXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDY0QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBsYShiLGUpfTthLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU9bGE7YS5GbG9hdFR5cGU9MTAxNTthLkZvZz14aTthLkZvZ0V4cDI9d2k7YS5Gb250PUtrOwphLkZvbnRMb2FkZXI9TGs7YS5Gcm9udEZhY2VEaXJlY3Rpb25DQ1c9MTthLkZyb250RmFjZURpcmVjdGlvbkNXPTA7YS5Gcm9udFNpZGU9MDthLkZydXN0dW09RWM7YS5HYW1tYUVuY29kaW5nPTMwMDc7YS5HZW9tZXRyeT16YTthLkdlb21ldHJ5VXRpbHM9e21lcmdlOmZ1bmN0aW9uKGIsZSxoKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5tZXJnZSgpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkubWVyZ2UoIGdlb21ldHJ5MiwgbWF0cml4LCBtYXRlcmlhbEluZGV4T2Zmc2V0ICkgaW5zdGVhZC4iKTtpZihlLmlzTWVzaCl7ZS5tYXRyaXhBdXRvVXBkYXRlJiZlLnVwZGF0ZU1hdHJpeCgpO3ZhciBtPWUubWF0cml4O2U9ZS5nZW9tZXRyeX1iLm1lcmdlKGUsbSxoKX0sY2VudGVyOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuR2VvbWV0cnlVdGlsczogLmNlbnRlcigpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkuY2VudGVyKCkgaW5zdGVhZC4iKTsKcmV0dXJuIGIuY2VudGVyKCl9fTthLkdyZWF0ZXJEZXB0aD02O2EuR3JlYXRlckVxdWFsRGVwdGg9NTthLkdyZWF0ZXJFcXVhbFN0ZW5jaWxGdW5jPTUxODthLkdyZWF0ZXJTdGVuY2lsRnVuYz01MTY7YS5HcmlkSGVscGVyPSRpO2EuR3JvdXA9RmY7YS5IYWxmRmxvYXRUeXBlPTEwMTY7YS5IZW1pc3BoZXJlTGlnaHQ9S2k7YS5IZW1pc3BoZXJlTGlnaHRIZWxwZXI9bGc7YS5IZW1pc3BoZXJlTGlnaHRQcm9iZT1NazthLkljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk9U2Y7YS5JY29zYWhlZHJvbkdlb21ldHJ5PW1oO2EuSW1hZ2VCaXRtYXBMb2FkZXI9SWs7YS5JbWFnZUxvYWRlcj1lZzthLkltYWdlVXRpbHM9dWU7YS5JbW1lZGlhdGVSZW5kZXJPYmplY3Q9SGg7YS5JbmNyZW1lbnRTdGVuY2lsT3A9NzY4MjthLkluY3JlbWVudFdyYXBTdGVuY2lsT3A9MzQwNTU7YS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9VWk7YS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT1UaTthLkluc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPQpWazthLkludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IG1hKGIsZSl9O2EuSW50MTZCdWZmZXJBdHRyaWJ1dGU9bWE7YS5JbnQzMkF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBjYShiLGUpfTthLkludDMyQnVmZmVyQXR0cmlidXRlPWNhO2EuSW50OEF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuSW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgVShiLAplKX07YS5JbnQ4QnVmZmVyQXR0cmlidXRlPVU7YS5JbnRUeXBlPTEwMTM7YS5JbnRlcmxlYXZlZEJ1ZmZlcj1PZTthLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPWJoO2EuSW50ZXJwb2xhbnQ9S2M7YS5JbnRlcnBvbGF0ZURpc2NyZXRlPTIzMDA7YS5JbnRlcnBvbGF0ZUxpbmVhcj0yMzAxO2EuSW50ZXJwb2xhdGVTbW9vdGg9MjMwMjthLkludmVydFN0ZW5jaWxPcD01Mzg2O2EuSlNPTkxvYWRlcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkpTT05Mb2FkZXIgaGFzIGJlZW4gcmVtb3ZlZC4iKX07YS5LZWVwU3RlbmNpbE9wPTc2ODA7YS5LZXlmcmFtZVRyYWNrPW9jO2EuTE9EPWVoO2EuTGF0aGVCdWZmZXJHZW9tZXRyeT1aZjthLkxhdGhlR2VvbWV0cnk9eWg7YS5MYXllcnM9djthLkxlbnNGbGFyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxlbnNGbGFyZSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvb2JqZWN0cy9MZW5zZmxhcmUuanMiKX07CmEuTGVzc0RlcHRoPTI7YS5MZXNzRXF1YWxEZXB0aD0zO2EuTGVzc0VxdWFsU3RlbmNpbEZ1bmM9NTE1O2EuTGVzc1N0ZW5jaWxGdW5jPTUxMzthLkxpZ2h0PVViO2EuTGlnaHRQcm9iZT1qZDthLkxpZ2h0UHJvYmVIZWxwZXI9bWc7YS5MaWdodFNoYWRvdz1EZDthLkxpbmU9bWM7YS5MaW5lMz1ZazthLkxpbmVCYXNpY01hdGVyaWFsPU9iO2EuTGluZUN1cnZlPUdjO2EuTGluZUN1cnZlMz1mZDthLkxpbmVEYXNoZWRNYXRlcmlhbD1iZjthLkxpbmVMb29wPUFpO2EuTGluZVBpZWNlcz0xO2EuTGluZVNlZ21lbnRzPVNiO2EuTGluZVN0cmlwPTA7YS5MaW5lYXJFbmNvZGluZz0zRTM7YS5MaW5lYXJGaWx0ZXI9MTAwNjthLkxpbmVhckludGVycG9sYW50PUNoO2EuTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyPTEwMDg7YS5MaW5lYXJNaXBNYXBOZWFyZXN0RmlsdGVyPTEwMDc7YS5MaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI9MTAwODthLkxpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI9MTAwNzsKYS5MaW5lYXJUb25lTWFwcGluZz0xO2EuTG9hZGVyPUtiO2EuTG9hZGVyVXRpbHM9c2w7YS5Mb2FkaW5nTWFuYWdlcj1EazthLkxvZ0x1dkVuY29kaW5nPTMwMDM7YS5Mb29wT25jZT0yMjAwO2EuTG9vcFBpbmdQb25nPTIyMDI7YS5Mb29wUmVwZWF0PTIyMDE7YS5MdW1pbmFuY2VBbHBoYUZvcm1hdD0xMDI1O2EuTHVtaW5hbmNlRm9ybWF0PTEwMjQ7YS5NT1VTRT17TEVGVDowLE1JRERMRToxLFJJR0hUOjIsUk9UQVRFOjAsRE9MTFk6MSxQQU46Mn07YS5NYXRlcmlhbD1NO2EuTWF0ZXJpYWxMb2FkZXI9U2k7YS5NYXRoPWxiO2EuTWF0cml4Mz1sO2EuTWF0cml4ND1yO2EuTWF4RXF1YXRpb249MTA0O2EuTWVzaD15YTthLk1lc2hCYXNpY01hdGVyaWFsPUw7YS5NZXNoRGVwdGhNYXRlcmlhbD1tZTthLk1lc2hEaXN0YW5jZU1hdGVyaWFsPW5lO2EuTWVzaEZhY2VNYXRlcmlhbD1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hGYWNlTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIik7CnJldHVybiBifTthLk1lc2hMYW1iZXJ0TWF0ZXJpYWw9JGU7YS5NZXNoTWF0Y2FwTWF0ZXJpYWw9YWY7YS5NZXNoTm9ybWFsTWF0ZXJpYWw9WmU7YS5NZXNoUGhvbmdNYXRlcmlhbD1kZDthLk1lc2hQaHlzaWNhbE1hdGVyaWFsPVhlO2EuTWVzaFN0YW5kYXJkTWF0ZXJpYWw9QWQ7YS5NZXNoVG9vbk1hdGVyaWFsPVllO2EuTWluRXF1YXRpb249MTAzO2EuTWlycm9yZWRSZXBlYXRXcmFwcGluZz0xMDAyO2EuTWl4T3BlcmF0aW9uPTE7YS5NdWx0aU1hdGVyaWFsPWZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihiPVtdKTtjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIik7Yi5pc011bHRpTWF0ZXJpYWw9ITA7Yi5tYXRlcmlhbHM9YjtiLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGIuc2xpY2UoKX07cmV0dXJuIGJ9O2EuTXVsdGlwbHlCbGVuZGluZz00O2EuTXVsdGlwbHlPcGVyYXRpb249MDthLk5lYXJlc3RGaWx0ZXI9CjEwMDM7YS5OZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyPTEwMDU7YS5OZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcj0xMDA0O2EuTmVhcmVzdE1pcG1hcExpbmVhckZpbHRlcj0xMDA1O2EuTmVhcmVzdE1pcG1hcE5lYXJlc3RGaWx0ZXI9MTAwNDthLk5ldmVyRGVwdGg9MDthLk5ldmVyU3RlbmNpbEZ1bmM9NTEyO2EuTm9CbGVuZGluZz0wO2EuTm9Db2xvcnM9MDthLk5vVG9uZU1hcHBpbmc9MDthLk5vcm1hbEJsZW5kaW5nPTE7YS5Ob3RFcXVhbERlcHRoPTc7YS5Ob3RFcXVhbFN0ZW5jaWxGdW5jPTUxNzthLk51bWJlcktleWZyYW1lVHJhY2s9Y2c7YS5PYmplY3QzRD15O2EuT2JqZWN0TG9hZGVyPVdpO2EuT2JqZWN0U3BhY2VOb3JtYWxNYXA9MTthLk9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeT1QZTthLk9jdGFoZWRyb25HZW9tZXRyeT1saDthLk9uZUZhY3Rvcj0yMDE7YS5PbmVNaW51c0RzdEFscGhhRmFjdG9yPTIwNzthLk9uZU1pbnVzRHN0Q29sb3JGYWN0b3I9MjA5O2EuT25lTWludXNTcmNBbHBoYUZhY3Rvcj0KMjA1O2EuT25lTWludXNTcmNDb2xvckZhY3Rvcj0yMDM7YS5PcnRob2dyYXBoaWNDYW1lcmE9R2g7YS5QQ0ZTaGFkb3dNYXA9MTthLlBDRlNvZnRTaGFkb3dNYXA9MjthLlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeT1RZjthLlBhcmFtZXRyaWNHZW9tZXRyeT1paDthLlBhcnRpY2xlPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuIik7cmV0dXJuIG5ldyBjaChiKX07YS5QYXJ0aWNsZUJhc2ljTWF0ZXJpYWw9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZUJhc2ljTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKTtyZXR1cm4gbmV3IGNkKGIpfTthLlBhcnRpY2xlU3lzdGVtPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKTtyZXR1cm4gbmV3IE5mKGIsCmUpfTthLlBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIik7cmV0dXJuIG5ldyBjZChiKX07YS5QYXRoPWlkO2EuUGVyc3BlY3RpdmVDYW1lcmE9QWI7YS5QbGFuZT1SYjthLlBsYW5lQnVmZmVyR2VvbWV0cnk9dGQ7YS5QbGFuZUdlb21ldHJ5PWllO2EuUGxhbmVIZWxwZXI9TWg7YS5Qb2ludENsb3VkPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpO3JldHVybiBuZXcgTmYoYixlKX07YS5Qb2ludENsb3VkTWF0ZXJpYWw9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKTtyZXR1cm4gbmV3IGNkKGIpfTthLlBvaW50TGlnaHQ9Ck5pO2EuUG9pbnRMaWdodEhlbHBlcj1qZzthLlBvaW50cz1OZjthLlBvaW50c01hdGVyaWFsPWNkO2EuUG9sYXJHcmlkSGVscGVyPWFqO2EuUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5PUZjO2EuUG9seWhlZHJvbkdlb21ldHJ5PWpoO2EuUG9zaXRpb25hbEF1ZGlvPVJrO2EuUG9zaXRpb25hbEF1ZGlvSGVscGVyPW5nO2EuUHJvcGVydHlCaW5kaW5nPXZjO2EuUHJvcGVydHlNaXhlcj1UazthLlF1YWRyYXRpY0JlemllckN1cnZlPWdkO2EuUXVhZHJhdGljQmV6aWVyQ3VydmUzPUNkO2EuUXVhdGVybmlvbj1mO2EuUXVhdGVybmlvbktleWZyYW1lVHJhY2s9RGg7YS5RdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ9Rmk7YS5SRVZJU0lPTj0iMTA4IjthLlJHQkFEZXB0aFBhY2tpbmc9MzIwMTthLlJHQkFGb3JtYXQ9MTAyMzthLlJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQ9Mzc4MTk7YS5SR0JBX0FTVENfMTB4NV9Gb3JtYXQ9Mzc4MTY7YS5SR0JBX0FTVENfMTB4Nl9Gb3JtYXQ9Mzc4MTc7YS5SR0JBX0FTVENfMTB4OF9Gb3JtYXQ9CjM3ODE4O2EuUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdD0zNzgyMDthLlJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ9Mzc4MjE7YS5SR0JBX0FTVENfNHg0X0Zvcm1hdD0zNzgwODthLlJHQkFfQVNUQ181eDRfRm9ybWF0PTM3ODA5O2EuUkdCQV9BU1RDXzV4NV9Gb3JtYXQ9Mzc4MTA7YS5SR0JBX0FTVENfNng1X0Zvcm1hdD0zNzgxMTthLlJHQkFfQVNUQ182eDZfRm9ybWF0PTM3ODEyO2EuUkdCQV9BU1RDXzh4NV9Gb3JtYXQ9Mzc4MTM7YS5SR0JBX0FTVENfOHg2X0Zvcm1hdD0zNzgxNDthLlJHQkFfQVNUQ184eDhfRm9ybWF0PTM3ODE1O2EuUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0PTM1ODQzO2EuUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0PTM1ODQyO2EuUkdCQV9TM1RDX0RYVDFfRm9ybWF0PTMzNzc3O2EuUkdCQV9TM1RDX0RYVDNfRm9ybWF0PTMzNzc4O2EuUkdCQV9TM1RDX0RYVDVfRm9ybWF0PTMzNzc5O2EuUkdCREVuY29kaW5nPTMwMDY7YS5SR0JFRW5jb2Rpbmc9MzAwMjthLlJHQkVGb3JtYXQ9CjEwMjM7YS5SR0JGb3JtYXQ9MTAyMjthLlJHQk0xNkVuY29kaW5nPTMwMDU7YS5SR0JNN0VuY29kaW5nPTMwMDQ7YS5SR0JfRVRDMV9Gb3JtYXQ9MzYxOTY7YS5SR0JfUFZSVENfMkJQUFYxX0Zvcm1hdD0zNTg0MTthLlJHQl9QVlJUQ180QlBQVjFfRm9ybWF0PTM1ODQwO2EuUkdCX1MzVENfRFhUMV9Gb3JtYXQ9MzM3NzY7YS5SYXdTaGFkZXJNYXRlcmlhbD1iZzthLlJheT1EO2EuUmF5Y2FzdGVyPWNvO2EuUmVjdEFyZWFMaWdodD1SaTthLlJlY3RBcmVhTGlnaHRIZWxwZXI9a2c7YS5SZWRGb3JtYXQ9MTAyODthLlJlaW5oYXJkVG9uZU1hcHBpbmc9MjthLlJlcGVhdFdyYXBwaW5nPTFFMzthLlJlcGxhY2VTdGVuY2lsT3A9NzY4MTthLlJldmVyc2VTdWJ0cmFjdEVxdWF0aW9uPTEwMjthLlJpbmdCdWZmZXJHZW9tZXRyeT1ZZjthLlJpbmdHZW9tZXRyeT14aDthLlNjZW5lPXo7YS5TY2VuZVV0aWxzPXtjcmVhdGVNdWx0aU1hdGVyaWFsT2JqZWN0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvdXRpbHMvU2NlbmVVdGlscy5qcyIpfSwKZGV0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvdXRpbHMvU2NlbmVVdGlscy5qcyIpfSxhdHRhY2g6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy91dGlscy9TY2VuZVV0aWxzLmpzIil9fTthLlNoYWRlckNodW5rPXdiO2EuU2hhZGVyTGliPXVkO2EuU2hhZGVyTWF0ZXJpYWw9dWI7YS5TaGFkb3dNYXRlcmlhbD1XZTthLlNoYXBlPXRlO2EuU2hhcGVCdWZmZXJHZW9tZXRyeT1VZTthLlNoYXBlR2VvbWV0cnk9VGU7YS5TaGFwZVBhdGg9Sms7YS5TaGFwZVV0aWxzPU9kO2EuU2hvcnRUeXBlPTEwMTE7YS5Ta2VsZXRvbj16aTthLlNrZWxldG9uSGVscGVyPWlnO2EuU2tpbm5lZE1lc2g9Zmg7YS5TbW9vdGhTaGFkaW5nPTI7YS5TcGhlcmU9RjthLlNwaGVyZUJ1ZmZlckdlb21ldHJ5PXNlO2EuU3BoZXJlR2VvbWV0cnk9CndoO2EuU3BoZXJpY2FsPWZvO2EuU3BoZXJpY2FsSGFybW9uaWNzMz1ZaTthLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nPTMwNTthLlNwbGluZT0kazthLlNwbGluZUN1cnZlPWhkO2EuU3BsaW5lQ3VydmUzPWpvO2EuU3BvdExpZ2h0PU1pO2EuU3BvdExpZ2h0SGVscGVyPWhnO2EuU3BvdExpZ2h0U2hhZG93PUxpO2EuU3ByaXRlPWNoO2EuU3ByaXRlTWF0ZXJpYWw9cmU7YS5TcmNBbHBoYUZhY3Rvcj0yMDQ7YS5TcmNBbHBoYVNhdHVyYXRlRmFjdG9yPTIxMDthLlNyY0NvbG9yRmFjdG9yPTIwMjthLlN0ZXJlb0NhbWVyYT1abjthLlN0cmluZ0tleWZyYW1lVHJhY2s9R2k7YS5TdWJ0cmFjdEVxdWF0aW9uPTEwMTthLlN1YnRyYWN0aXZlQmxlbmRpbmc9MzthLlRPVUNIPXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M307YS5UYW5nZW50U3BhY2VOb3JtYWxNYXA9MDthLlRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnk9UmY7YS5UZXRyYWhlZHJvbkdlb21ldHJ5PQpraDthLlRleHRCdWZmZXJHZW9tZXRyeT1YZjthLlRleHRHZW9tZXRyeT12aDthLlRleHR1cmU9azthLlRleHR1cmVMb2FkZXI9Smk7YS5Ub3J1c0J1ZmZlckdlb21ldHJ5PVZmO2EuVG9ydXNHZW9tZXRyeT1xaDthLlRvcnVzS25vdEJ1ZmZlckdlb21ldHJ5PVVmO2EuVG9ydXNLbm90R2VvbWV0cnk9cGg7YS5UcmlhbmdsZT1CO2EuVHJpYW5nbGVGYW5EcmF3TW9kZT0yO2EuVHJpYW5nbGVTdHJpcERyYXdNb2RlPTE7YS5UcmlhbmdsZXNEcmF3TW9kZT0wO2EuVHViZUJ1ZmZlckdlb21ldHJ5PVFlO2EuVHViZUdlb21ldHJ5PW9oO2EuVVZNYXBwaW5nPTMwMDthLlVpbnQxNkF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuVWludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IGFhKGIsZSl9O2EuVWludDE2QnVmZmVyQXR0cmlidXRlPWFhO2EuVWludDMyQXR0cmlidXRlPQpmdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IGZhKGIsZSl9O2EuVWludDMyQnVmZmVyQXR0cmlidXRlPWZhO2EuVWludDhBdHRyaWJ1dGU9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgWShiLGUpfTthLlVpbnQ4QnVmZmVyQXR0cmlidXRlPVk7YS5VaW50OENsYW1wZWRBdHRyaWJ1dGU9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBiYShiLAplKX07YS5VaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGU9YmE7YS5VbmNoYXJ0ZWQyVG9uZU1hcHBpbmc9MzthLlVuaWZvcm09Wmk7YS5Vbmlmb3Jtc0xpYj1ZYTthLlVuaWZvcm1zVXRpbHM9QnM7YS5VbnNpZ25lZEJ5dGVUeXBlPTEwMDk7YS5VbnNpZ25lZEludDI0OFR5cGU9MTAyMDthLlVuc2lnbmVkSW50VHlwZT0xMDE0O2EuVW5zaWduZWRTaG9ydDQ0NDRUeXBlPTEwMTc7YS5VbnNpZ25lZFNob3J0NTU1MVR5cGU9MTAxODthLlVuc2lnbmVkU2hvcnQ1NjVUeXBlPTEwMTk7YS5VbnNpZ25lZFNob3J0VHlwZT0xMDEyO2EuVlNNU2hhZG93TWFwPTM7YS5WZWN0b3IyPWQ7YS5WZWN0b3IzPWc7YS5WZWN0b3I0PW47YS5WZWN0b3JLZXlmcmFtZVRyYWNrPWRnO2EuVmVydGV4PWZ1bmN0aW9uKGIsZSxoKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlcnRleCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuVmVjdG9yMyBpbnN0ZWFkLiIpO3JldHVybiBuZXcgZyhiLGUsaCl9O2EuVmVydGV4Q29sb3JzPQoyO2EuVmVydGV4Tm9ybWFsc0hlbHBlcj1JaDthLlZpZGVvVGV4dHVyZT1BazthLldlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9cTthLldlYkdMUmVuZGVyVGFyZ2V0PXA7YS5XZWJHTFJlbmRlclRhcmdldEN1YmU9YmM7YS5XZWJHTFJlbmRlcmVyPXJrO2EuV2ViR0xVdGlscz1GbjthLldpcmVmcmFtZUdlb21ldHJ5PVBmO2EuV2lyZWZyYW1lSGVscGVyPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XaXJlZnJhbWVIZWxwZXIgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLldpcmVmcmFtZUdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIG5ldyBTYihuZXcgUGYoYi5nZW9tZXRyeSksbmV3IE9iKHtjb2xvcjp2b2lkIDAhPT1lP2U6MTY3NzcyMTV9KSl9O2EuV3JhcEFyb3VuZEVuZGluZz0yNDAyO2EuWEhSTG9hZGVyPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuWEhSTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRmlsZUxvYWRlci4iKTsKcmV0dXJuIG5ldyBTYyhiKX07YS5aZXJvQ3VydmF0dXJlRW5kaW5nPTI0MDA7YS5aZXJvRmFjdG9yPTIwMDthLlplcm9TbG9wZUVuZGluZz0yNDAxO2EuWmVyb1N0ZW5jaWxPcD0wO2Euc1JHQkVuY29kaW5nPTMwMDE7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaW1wb3J0cy9PcmJpdENvbnRyb2xzLmpzClRIUkVFLk9yYml0Q29udHJvbHM9ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKCl7cmV0dXJuIDIqTWF0aC5QSS82MC82MCpaLmF1dG9Sb3RhdGVTcGVlZH1mdW5jdGlvbiBmKCl7cmV0dXJuIE1hdGgucG93KC45NSxaLnpvb21TcGVlZCl9ZnVuY3Rpb24gZyh1YSl7WmEudGhldGEtPXVhfWZ1bmN0aW9uIGwodWEpe1phLnBoaS09dWF9ZnVuY3Rpb24gayh1YSl7Wi5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYT96Yi89dWE6Wi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KFoub2JqZWN0Lnpvb209TWF0aC5tYXgoWi5taW5ab29tLE1hdGgubWluKFoubWF4Wm9vbSxaLm9iamVjdC56b29tKnVhKSksWi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHViPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLFouZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gbih1YSl7Wi5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYT8KemIqPXVhOloub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhaLm9iamVjdC56b29tPU1hdGgubWF4KFoubWluWm9vbSxNYXRoLm1pbihaLm1heFpvb20sWi5vYmplY3Quem9vbS91YSkpLFoub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSx1Yj0hMCk6KGNvbnNvbGUud2FybigiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC4iKSxaLmVuYWJsZVpvb209ITEpfWZ1bmN0aW9uIHAodWEpe0ZiLnNldCh1YS5jbGllbnRYLHVhLmNsaWVudFkpfWZ1bmN0aW9uIHEodWEpe0VjLnNldCh1YS5jbGllbnRYLHVhLmNsaWVudFkpfWZ1bmN0aW9uIHIodWEpe2JjLnNldCh1YS5jbGllbnRYLHVhLmNsaWVudFkpfWZ1bmN0aW9uIHQodWEpe0FiLnNldCh1YS5jbGllbnRYLHVhLmNsaWVudFkpO1BiLnN1YlZlY3RvcnMoQWIsRmIpLm11bHRpcGx5U2NhbGFyKFoucm90YXRlU3BlZWQpO3VhPQpaLmRvbUVsZW1lbnQ9PT1kb2N1bWVudD9aLmRvbUVsZW1lbnQuYm9keTpaLmRvbUVsZW1lbnQ7ZygyKk1hdGguUEkqUGIueC91YS5jbGllbnRIZWlnaHQpO2woMipNYXRoLlBJKlBiLnkvdWEuY2xpZW50SGVpZ2h0KTtGYi5jb3B5KEFiKTtaLnVwZGF0ZSgpfWZ1bmN0aW9uIHYodWEpe3hjLnNldCh1YS5jbGllbnRYLHVhLmNsaWVudFkpO01lLnN1YlZlY3RvcnMoeGMsRWMpOzA8TWUueT9rKGYoKSk6MD5NZS55JiZuKGYoKSk7RWMuY29weSh4Yyk7Wi51cGRhdGUoKX1mdW5jdGlvbiB5KHVhKXtHYi5zZXQodWEuY2xpZW50WCx1YS5jbGllbnRZKTtSYi5zdWJWZWN0b3JzKEdiLGJjKS5tdWx0aXBseVNjYWxhcihaLnBhblNwZWVkKTtqZShSYi54LFJiLnkpO2JjLmNvcHkoR2IpO1oudXBkYXRlKCl9ZnVuY3Rpb24geigpe31mdW5jdGlvbiB4KHVhKXswPnVhLmRlbHRhWT9uKGYoKSk6MDx1YS5kZWx0YVkmJmsoZigpKTtaLnVwZGF0ZSgpfWZ1bmN0aW9uIEModWEpe3ZhciAkYj0hMTtzd2l0Y2godWEua2V5Q29kZSl7Y2FzZSBaLmtleXMuVVA6amUoMCwKWi5rZXlQYW5TcGVlZCk7JGI9ITA7YnJlYWs7Y2FzZSBaLmtleXMuQk9UVE9NOmplKDAsLVoua2V5UGFuU3BlZWQpOyRiPSEwO2JyZWFrO2Nhc2UgWi5rZXlzLkxFRlQ6amUoWi5rZXlQYW5TcGVlZCwwKTskYj0hMDticmVhaztjYXNlIFoua2V5cy5SSUdIVDpqZSgtWi5rZXlQYW5TcGVlZCwwKSwkYj0hMH0kYiYmKHVhLnByZXZlbnREZWZhdWx0KCksWi51cGRhdGUoKSl9ZnVuY3Rpb24gRih1YSl7MT09dWEudG91Y2hlcy5sZW5ndGg/RmIuc2V0KHVhLnRvdWNoZXNbMF0ucGFnZVgsdWEudG91Y2hlc1swXS5wYWdlWSk6RmIuc2V0KC41Kih1YS50b3VjaGVzWzBdLnBhZ2VYK3VhLnRvdWNoZXNbMV0ucGFnZVgpLC41Kih1YS50b3VjaGVzWzBdLnBhZ2VZK3VhLnRvdWNoZXNbMV0ucGFnZVkpKX1mdW5jdGlvbiBEKHVhKXsxPT11YS50b3VjaGVzLmxlbmd0aD9iYy5zZXQodWEudG91Y2hlc1swXS5wYWdlWCx1YS50b3VjaGVzWzBdLnBhZ2VZKTpiYy5zZXQoLjUqKHVhLnRvdWNoZXNbMF0ucGFnZVgrCnVhLnRvdWNoZXNbMV0ucGFnZVgpLC41Kih1YS50b3VjaGVzWzBdLnBhZ2VZK3VhLnRvdWNoZXNbMV0ucGFnZVkpKX1mdW5jdGlvbiBCKHVhKXt2YXIgJGI9dWEudG91Y2hlc1swXS5wYWdlWC11YS50b3VjaGVzWzFdLnBhZ2VYO3VhPXVhLnRvdWNoZXNbMF0ucGFnZVktdWEudG91Y2hlc1sxXS5wYWdlWTtFYy5zZXQoMCxNYXRoLnNxcnQoJGIqJGIrdWEqdWEpKX1mdW5jdGlvbiBJKHVhKXtaLmVuYWJsZVpvb20mJkIodWEpO1ouZW5hYmxlUGFuJiZEKHVhKX1mdW5jdGlvbiBPKHVhKXtaLmVuYWJsZVpvb20mJkIodWEpO1ouZW5hYmxlUm90YXRlJiZGKHVhKX1mdW5jdGlvbiBQKHVhKXsxPT11YS50b3VjaGVzLmxlbmd0aD9BYi5zZXQodWEudG91Y2hlc1swXS5wYWdlWCx1YS50b3VjaGVzWzBdLnBhZ2VZKTpBYi5zZXQoLjUqKHVhLnRvdWNoZXNbMF0ucGFnZVgrdWEudG91Y2hlc1sxXS5wYWdlWCksLjUqKHVhLnRvdWNoZXNbMF0ucGFnZVkrdWEudG91Y2hlc1sxXS5wYWdlWSkpO1BiLnN1YlZlY3RvcnMoQWIsCkZiKS5tdWx0aXBseVNjYWxhcihaLnJvdGF0ZVNwZWVkKTt1YT1aLmRvbUVsZW1lbnQ9PT1kb2N1bWVudD9aLmRvbUVsZW1lbnQuYm9keTpaLmRvbUVsZW1lbnQ7ZygyKk1hdGguUEkqUGIueC91YS5jbGllbnRIZWlnaHQpO2woMipNYXRoLlBJKlBiLnkvdWEuY2xpZW50SGVpZ2h0KTtGYi5jb3B5KEFiKX1mdW5jdGlvbiBIKHVhKXsxPT11YS50b3VjaGVzLmxlbmd0aD9HYi5zZXQodWEudG91Y2hlc1swXS5wYWdlWCx1YS50b3VjaGVzWzBdLnBhZ2VZKTpHYi5zZXQoLjUqKHVhLnRvdWNoZXNbMF0ucGFnZVgrdWEudG91Y2hlc1sxXS5wYWdlWCksLjUqKHVhLnRvdWNoZXNbMF0ucGFnZVkrdWEudG91Y2hlc1sxXS5wYWdlWSkpO1JiLnN1YlZlY3RvcnMoR2IsYmMpLm11bHRpcGx5U2NhbGFyKFoucGFuU3BlZWQpO2plKFJiLngsUmIueSk7YmMuY29weShHYil9ZnVuY3Rpb24gSyh1YSl7dmFyICRiPXVhLnRvdWNoZXNbMF0ucGFnZVgtdWEudG91Y2hlc1sxXS5wYWdlWDt1YT11YS50b3VjaGVzWzBdLnBhZ2VZLQp1YS50b3VjaGVzWzFdLnBhZ2VZO3hjLnNldCgwLE1hdGguc3FydCgkYiokYit1YSp1YSkpO01lLnNldCgwLE1hdGgucG93KHhjLnkvRWMueSxaLnpvb21TcGVlZCkpO2soTWUueSk7RWMuY29weSh4Yyl9ZnVuY3Rpb24gTSh1YSl7Wi5lbmFibGVab29tJiZLKHVhKTtaLmVuYWJsZVBhbiYmSCh1YSl9ZnVuY3Rpb24gTCh1YSl7Wi5lbmFibGVab29tJiZLKHVhKTtaLmVuYWJsZVJvdGF0ZSYmUCh1YSl9ZnVuY3Rpb24gUigpe31mdW5jdGlvbiBVKHVhKXtpZighMSE9PVouZW5hYmxlZCl7dWEucHJldmVudERlZmF1bHQoKTtaLmRvbUVsZW1lbnQuZm9jdXM/Wi5kb21FbGVtZW50LmZvY3VzKCk6d2luZG93LmZvY3VzKCk7c3dpdGNoKHVhLmJ1dHRvbil7Y2FzZSAwOnN3aXRjaChaLm1vdXNlQnV0dG9ucy5MRUZUKXtjYXNlIFRIUkVFLk1PVVNFLlJPVEFURTppZih1YS5jdHJsS2V5fHx1YS5tZXRhS2V5fHx1YS5zaGlmdEtleSl7aWYoITE9PT1aLmVuYWJsZVBhbilyZXR1cm47cih1YSk7R2E9CkJhLlBBTn1lbHNle2lmKCExPT09Wi5lbmFibGVSb3RhdGUpcmV0dXJuO3AodWEpO0dhPUJhLlJPVEFURX1icmVhaztjYXNlIFRIUkVFLk1PVVNFLlBBTjppZih1YS5jdHJsS2V5fHx1YS5tZXRhS2V5fHx1YS5zaGlmdEtleSl7aWYoITE9PT1aLmVuYWJsZVJvdGF0ZSlyZXR1cm47cCh1YSk7R2E9QmEuUk9UQVRFfWVsc2V7aWYoITE9PT1aLmVuYWJsZVBhbilyZXR1cm47cih1YSk7R2E9QmEuUEFOfWJyZWFrO2RlZmF1bHQ6R2E9QmEuTk9ORX1icmVhaztjYXNlIDE6c3dpdGNoKFoubW91c2VCdXR0b25zLk1JRERMRSl7Y2FzZSBUSFJFRS5NT1VTRS5ET0xMWTppZighMT09PVouZW5hYmxlWm9vbSlyZXR1cm47cSh1YSk7R2E9QmEuRE9MTFk7YnJlYWs7ZGVmYXVsdDpHYT1CYS5OT05FfWJyZWFrO2Nhc2UgMjpzd2l0Y2goWi5tb3VzZUJ1dHRvbnMuUklHSFQpe2Nhc2UgVEhSRUUuTU9VU0UuUk9UQVRFOmlmKCExPT09Wi5lbmFibGVSb3RhdGUpcmV0dXJuO3AodWEpO0dhPUJhLlJPVEFURTsKYnJlYWs7Y2FzZSBUSFJFRS5NT1VTRS5QQU46aWYoITE9PT1aLmVuYWJsZVBhbilyZXR1cm47cih1YSk7R2E9QmEuUEFOO2JyZWFrO2RlZmF1bHQ6R2E9QmEuTk9ORX19R2EhPT1CYS5OT05FJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixZLCExKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixiYSwhMSksWi5kaXNwYXRjaEV2ZW50KHhhKSl9fWZ1bmN0aW9uIFkodWEpe2lmKCExIT09Wi5lbmFibGVkKXN3aXRjaCh1YS5wcmV2ZW50RGVmYXVsdCgpLEdhKXtjYXNlIEJhLlJPVEFURTppZighMT09PVouZW5hYmxlUm90YXRlKWJyZWFrO3QodWEpO2JyZWFrO2Nhc2UgQmEuRE9MTFk6aWYoITE9PT1aLmVuYWJsZVpvb20pYnJlYWs7dih1YSk7YnJlYWs7Y2FzZSBCYS5QQU46ITEhPT1aLmVuYWJsZVBhbiYmeSh1YSl9fWZ1bmN0aW9uIGJhKHVhKXshMSE9PVouZW5hYmxlZCYmKHoodWEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsClksITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGJhLCExKSxaLmRpc3BhdGNoRXZlbnQoeWEpLEdhPUJhLk5PTkUpfWZ1bmN0aW9uIG1hKHVhKXshMT09PVouZW5hYmxlZHx8ITE9PT1aLmVuYWJsZVpvb218fEdhIT09QmEuTk9ORSYmR2EhPT1CYS5ST1RBVEV8fCh1YS5wcmV2ZW50RGVmYXVsdCgpLHVhLnN0b3BQcm9wYWdhdGlvbigpLFouZGlzcGF0Y2hFdmVudCh4YSkseCh1YSksWi5kaXNwYXRjaEV2ZW50KHlhKSl9ZnVuY3Rpb24gYWEodWEpeyExIT09Wi5lbmFibGVkJiYhMSE9PVouZW5hYmxlS2V5cyYmITEhPT1aLmVuYWJsZVBhbiYmQyh1YSl9ZnVuY3Rpb24gY2EodWEpe2lmKCExIT09Wi5lbmFibGVkKXt1YS5wcmV2ZW50RGVmYXVsdCgpO3N3aXRjaCh1YS50b3VjaGVzLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChaLnRvdWNoZXMuT05FKXtjYXNlIFRIUkVFLlRPVUNILlJPVEFURTppZighMT09PVouZW5hYmxlUm90YXRlKXJldHVybjtGKHVhKTtHYT0KQmEuVE9VQ0hfUk9UQVRFO2JyZWFrO2Nhc2UgVEhSRUUuVE9VQ0guUEFOOmlmKCExPT09Wi5lbmFibGVQYW4pcmV0dXJuO0QodWEpO0dhPUJhLlRPVUNIX1BBTjticmVhaztkZWZhdWx0OkdhPUJhLk5PTkV9YnJlYWs7Y2FzZSAyOnN3aXRjaChaLnRvdWNoZXMuVFdPKXtjYXNlIFRIUkVFLlRPVUNILkRPTExZX1BBTjppZighMT09PVouZW5hYmxlWm9vbSYmITE9PT1aLmVuYWJsZVBhbilyZXR1cm47SSh1YSk7R2E9QmEuVE9VQ0hfRE9MTFlfUEFOO2JyZWFrO2Nhc2UgVEhSRUUuVE9VQ0guRE9MTFlfUk9UQVRFOmlmKCExPT09Wi5lbmFibGVab29tJiYhMT09PVouZW5hYmxlUm90YXRlKXJldHVybjtPKHVhKTtHYT1CYS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpHYT1CYS5OT05FfWJyZWFrO2RlZmF1bHQ6R2E9QmEuTk9ORX1HYSE9PUJhLk5PTkUmJlouZGlzcGF0Y2hFdmVudCh4YSl9fWZ1bmN0aW9uIGZhKHVhKXtpZighMSE9PVouZW5hYmxlZClzd2l0Y2godWEucHJldmVudERlZmF1bHQoKSwKdWEuc3RvcFByb3BhZ2F0aW9uKCksR2Epe2Nhc2UgQmEuVE9VQ0hfUk9UQVRFOmlmKCExPT09Wi5lbmFibGVSb3RhdGUpYnJlYWs7UCh1YSk7Wi51cGRhdGUoKTticmVhaztjYXNlIEJhLlRPVUNIX1BBTjppZighMT09PVouZW5hYmxlUGFuKWJyZWFrO0godWEpO1oudXBkYXRlKCk7YnJlYWs7Y2FzZSBCYS5UT1VDSF9ET0xMWV9QQU46aWYoITE9PT1aLmVuYWJsZVpvb20mJiExPT09Wi5lbmFibGVQYW4pYnJlYWs7TSh1YSk7Wi51cGRhdGUoKTticmVhaztjYXNlIEJhLlRPVUNIX0RPTExZX1JPVEFURTppZighMT09PVouZW5hYmxlWm9vbSYmITE9PT1aLmVuYWJsZVJvdGF0ZSlicmVhaztMKHVhKTtaLnVwZGF0ZSgpO2JyZWFrO2RlZmF1bHQ6R2E9QmEuTk9ORX19ZnVuY3Rpb24gZGEodWEpeyExIT09Wi5lbmFibGVkJiYoUih1YSksWi5kaXNwYXRjaEV2ZW50KHlhKSxHYT1CYS5OT05FKX1mdW5jdGlvbiBsYSh1YSl7ITEhPT1aLmVuYWJsZWQmJnVhLnByZXZlbnREZWZhdWx0KCl9dGhpcy5vYmplY3Q9CmE7dGhpcy5kb21FbGVtZW50PXZvaWQgMCE9PWM/Yzpkb2N1bWVudDt0aGlzLmVuYWJsZWQ9ITA7dGhpcy50YXJnZXQ9bmV3IFRIUkVFLlZlY3RvcjM7dGhpcy5taW5EaXN0YW5jZT0wO3RoaXMubWF4RGlzdGFuY2U9SW5maW5pdHk7dGhpcy5taW5ab29tPTA7dGhpcy5tYXhab29tPUluZmluaXR5O3RoaXMubWluUG9sYXJBbmdsZT0wO3RoaXMubWF4UG9sYXJBbmdsZT1NYXRoLlBJO3RoaXMubWluQXppbXV0aEFuZ2xlPS1JbmZpbml0eTt0aGlzLm1heEF6aW11dGhBbmdsZT1JbmZpbml0eTt0aGlzLmVuYWJsZURhbXBpbmc9ITE7dGhpcy5kYW1waW5nRmFjdG9yPS4wNTt0aGlzLmVuYWJsZVpvb209ITA7dGhpcy56b29tU3BlZWQ9MTt0aGlzLmVuYWJsZVJvdGF0ZT0hMDt0aGlzLnJvdGF0ZVNwZWVkPTE7dGhpcy5lbmFibGVQYW49ITA7dGhpcy5wYW5TcGVlZD0xO3RoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSExO3RoaXMua2V5UGFuU3BlZWQ9Nzt0aGlzLmF1dG9Sb3RhdGU9ITE7dGhpcy5hdXRvUm90YXRlU3BlZWQ9CjI7dGhpcy5lbmFibGVLZXlzPSEwO3RoaXMua2V5cz17TEVGVDozNyxVUDozOCxSSUdIVDozOSxCT1RUT006NDB9O3RoaXMubW91c2VCdXR0b25zPXtMRUZUOlRIUkVFLk1PVVNFLlJPVEFURSxNSURETEU6VEhSRUUuTU9VU0UuRE9MTFksUklHSFQ6VEhSRUUuTU9VU0UuUEFOfTt0aGlzLnRvdWNoZXM9e09ORTpUSFJFRS5UT1VDSC5ST1RBVEUsVFdPOlRIUkVFLlRPVUNILkRPTExZX1BBTn07dGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCk7dGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKTt0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb207dGhpcy5nZXRQb2xhckFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFVhLnBoaX07dGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBVYS50aGV0YX07dGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtaLnRhcmdldDAuY29weShaLnRhcmdldCk7Wi5wb3NpdGlvbjAuY29weShaLm9iamVjdC5wb3NpdGlvbik7Clouem9vbTA9Wi5vYmplY3Quem9vbX07dGhpcy5yZXNldD1mdW5jdGlvbigpe1oudGFyZ2V0LmNvcHkoWi50YXJnZXQwKTtaLm9iamVjdC5wb3NpdGlvbi5jb3B5KFoucG9zaXRpb24wKTtaLm9iamVjdC56b29tPVouem9vbTA7Wi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1ouZGlzcGF0Y2hFdmVudChGYSk7Wi51cGRhdGUoKTtHYT1CYS5OT05FfTt0aGlzLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciB1YT1uZXcgVEhSRUUuVmVjdG9yMywkYj0obmV3IFRIUkVFLlF1YXRlcm5pb24pLnNldEZyb21Vbml0VmVjdG9ycyhhLnVwLG5ldyBUSFJFRS5WZWN0b3IzKDAsMSwwKSksWmM9JGIuY2xvbmUoKS5pbnZlcnNlKCksTGQ9bmV3IFRIUkVFLlZlY3RvcjMsa2U9bmV3IFRIUkVFLlF1YXRlcm5pb247cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHFpPVoub2JqZWN0LnBvc2l0aW9uO3VhLmNvcHkocWkpLnN1YihaLnRhcmdldCk7dWEuYXBwbHlRdWF0ZXJuaW9uKCRiKTtVYS5zZXRGcm9tVmVjdG9yMyh1YSk7ClouYXV0b1JvdGF0ZSYmR2E9PT1CYS5OT05FJiZnKGQoKSk7Wi5lbmFibGVEYW1waW5nPyhVYS50aGV0YSs9WmEudGhldGEqWi5kYW1waW5nRmFjdG9yLFVhLnBoaSs9WmEucGhpKlouZGFtcGluZ0ZhY3Rvcik6KFVhLnRoZXRhKz1aYS50aGV0YSxVYS5waGkrPVphLnBoaSk7VWEudGhldGE9TWF0aC5tYXgoWi5taW5BemltdXRoQW5nbGUsTWF0aC5taW4oWi5tYXhBemltdXRoQW5nbGUsVWEudGhldGEpKTtVYS5waGk9TWF0aC5tYXgoWi5taW5Qb2xhckFuZ2xlLE1hdGgubWluKFoubWF4UG9sYXJBbmdsZSxVYS5waGkpKTtVYS5tYWtlU2FmZSgpO1VhLnJhZGl1cyo9emI7VWEucmFkaXVzPU1hdGgubWF4KFoubWluRGlzdGFuY2UsTWF0aC5taW4oWi5tYXhEaXN0YW5jZSxVYS5yYWRpdXMpKTshMD09PVouZW5hYmxlRGFtcGluZz9aLnRhcmdldC5hZGRTY2FsZWRWZWN0b3IoSWIsWi5kYW1waW5nRmFjdG9yKTpaLnRhcmdldC5hZGQoSWIpO3VhLnNldEZyb21TcGhlcmljYWwoVWEpO3VhLmFwcGx5UXVhdGVybmlvbihaYyk7CnFpLmNvcHkoWi50YXJnZXQpLmFkZCh1YSk7Wi5vYmplY3QubG9va0F0KFoudGFyZ2V0KTshMD09PVouZW5hYmxlRGFtcGluZz8oWmEudGhldGEqPTEtWi5kYW1waW5nRmFjdG9yLFphLnBoaSo9MS1aLmRhbXBpbmdGYWN0b3IsSWIubXVsdGlwbHlTY2FsYXIoMS1aLmRhbXBpbmdGYWN0b3IpKTooWmEuc2V0KDAsMCwwKSxJYi5zZXQoMCwwLDApKTt6Yj0xO3JldHVybiB1Ynx8TGQuZGlzdGFuY2VUb1NxdWFyZWQoWi5vYmplY3QucG9zaXRpb24pPnphfHw4KigxLWtlLmRvdChaLm9iamVjdC5xdWF0ZXJuaW9uKSk+emE/KFouZGlzcGF0Y2hFdmVudChGYSksTGQuY29weShaLm9iamVjdC5wb3NpdGlvbiksa2UuY29weShaLm9iamVjdC5xdWF0ZXJuaW9uKSx1Yj0hMSwhMCk6ITF9fSgpO3RoaXMuZGlzcG9zZT1mdW5jdGlvbigpe1ouZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsbGEsITEpO1ouZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLApVLCExKTtaLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLG1hLCExKTtaLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsY2EsITEpO1ouZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZGEsITEpO1ouZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLGZhLCExKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLFksITEpO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGJhLCExKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsYWEsITEpfTt2YXIgWj10aGlzLEZhPXt0eXBlOiJjaGFuZ2UifSx4YT17dHlwZToic3RhcnQifSx5YT17dHlwZToiZW5kIn0sQmE9e05PTkU6LTEsUk9UQVRFOjAsRE9MTFk6MSxQQU46MixUT1VDSF9ST1RBVEU6MyxUT1VDSF9QQU46NCxUT1VDSF9ET0xMWV9QQU46NSxUT1VDSF9ET0xMWV9ST1RBVEU6Nn0sCkdhPUJhLk5PTkUsemE9MUUtNixVYT1uZXcgVEhSRUUuU3BoZXJpY2FsLFphPW5ldyBUSFJFRS5TcGhlcmljYWwsemI9MSxJYj1uZXcgVEhSRUUuVmVjdG9yMyx1Yj0hMSxGYj1uZXcgVEhSRUUuVmVjdG9yMixBYj1uZXcgVEhSRUUuVmVjdG9yMixQYj1uZXcgVEhSRUUuVmVjdG9yMixiYz1uZXcgVEhSRUUuVmVjdG9yMixHYj1uZXcgVEhSRUUuVmVjdG9yMixSYj1uZXcgVEhSRUUuVmVjdG9yMixFYz1uZXcgVEhSRUUuVmVjdG9yMix4Yz1uZXcgVEhSRUUuVmVjdG9yMixNZT1uZXcgVEhSRUUuVmVjdG9yMixpZT1mdW5jdGlvbigpe3ZhciB1YT1uZXcgVEhSRUUuVmVjdG9yMztyZXR1cm4gZnVuY3Rpb24oJGIsWmMpe3VhLnNldEZyb21NYXRyaXhDb2x1bW4oWmMsMCk7dWEubXVsdGlwbHlTY2FsYXIoLSRiKTtJYi5hZGQodWEpfX0oKSx0ZD1mdW5jdGlvbigpe3ZhciB1YT1uZXcgVEhSRUUuVmVjdG9yMztyZXR1cm4gZnVuY3Rpb24oJGIsWmMpeyEwPT09Wi5zY3JlZW5TcGFjZVBhbm5pbmc/CnVhLnNldEZyb21NYXRyaXhDb2x1bW4oWmMsMSk6KHVhLnNldEZyb21NYXRyaXhDb2x1bW4oWmMsMCksdWEuY3Jvc3NWZWN0b3JzKFoub2JqZWN0LnVwLHVhKSk7dWEubXVsdGlwbHlTY2FsYXIoJGIpO0liLmFkZCh1YSl9fSgpLGplPWZ1bmN0aW9uKCl7dmFyIHVhPW5ldyBUSFJFRS5WZWN0b3IzO3JldHVybiBmdW5jdGlvbigkYixaYyl7dmFyIExkPVouZG9tRWxlbWVudD09PWRvY3VtZW50P1ouZG9tRWxlbWVudC5ib2R5OlouZG9tRWxlbWVudDtpZihaLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKXt1YS5jb3B5KFoub2JqZWN0LnBvc2l0aW9uKS5zdWIoWi50YXJnZXQpO3ZhciBrZT11YS5sZW5ndGgoKTtrZSo9TWF0aC50YW4oWi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApO2llKDIqJGIqa2UvTGQuY2xpZW50SGVpZ2h0LFoub2JqZWN0Lm1hdHJpeCk7dGQoMipaYyprZS9MZC5jbGllbnRIZWlnaHQsWi5vYmplY3QubWF0cml4KX1lbHNlIFoub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPwooaWUoJGIqKFoub2JqZWN0LnJpZ2h0LVoub2JqZWN0LmxlZnQpL1oub2JqZWN0Lnpvb20vTGQuY2xpZW50V2lkdGgsWi5vYmplY3QubWF0cml4KSx0ZChaYyooWi5vYmplY3QudG9wLVoub2JqZWN0LmJvdHRvbSkvWi5vYmplY3Quem9vbS9MZC5jbGllbnRIZWlnaHQsWi5vYmplY3QubWF0cml4KSk6KGNvbnNvbGUud2FybigiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gcGFuIGRpc2FibGVkLiIpLFouZW5hYmxlUGFuPSExKX19KCk7Wi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixsYSwhMSk7Wi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVSwhMSk7Wi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixtYSwhMSk7Wi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGNhLCExKTtaLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLApkYSwhMSk7Wi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZmEsITEpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixhYSwhMSk7dGhpcy51cGRhdGUoKX07VEhSRUUuT3JiaXRDb250cm9scy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShUSFJFRS5FdmVudERpc3BhdGNoZXIucHJvdG90eXBlKTtUSFJFRS5PcmJpdENvbnRyb2xzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1USFJFRS5PcmJpdENvbnRyb2xzO1RIUkVFLk1hcENvbnRyb2xzPWZ1bmN0aW9uKGEsYyl7VEhSRUUuT3JiaXRDb250cm9scy5jYWxsKHRoaXMsYSxjKTt0aGlzLm1vdXNlQnV0dG9ucy5MRUZUPVRIUkVFLk1PVVNFLlBBTjt0aGlzLm1vdXNlQnV0dG9ucy5SSUdIVD1USFJFRS5NT1VTRS5ST1RBVEU7dGhpcy50b3VjaGVzLk9ORT1USFJFRS5UT1VDSC5QQU47dGhpcy50b3VjaGVzLlRXTz1USFJFRS5UT1VDSC5ET0xMWV9ST1RBVEV9OwpUSFJFRS5NYXBDb250cm9scy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShUSFJFRS5FdmVudERpc3BhdGNoZXIucHJvdG90eXBlKTtUSFJFRS5NYXBDb250cm9scy5wcm90b3R5cGUuY29uc3RydWN0b3I9VEhSRUUuTWFwQ29udHJvbHM7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLWRpdmUvbGliL3Nwcml0ZS1hdGxhcy5qcwpjbGFzcyBXcCBleHRlbmRzIFRIUkVFLlRleHR1cmV7Y29uc3RydWN0b3IoYSxjLGQpe2NvbnN0IGY9TWF0aC5jZWlsKE1hdGguc3FydChhKSksZz1NYXRoLmNlaWwoYS9mKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2wud2lkdGg9YypmO2wuaGVpZ2h0PWQqZztjb25zdCBrPWwuZ2V0Q29udGV4dCgiMmQiKTtzdXBlcihsKTt0aGlzLmNhcGFjaXR5PWE7dGhpcy5pbWFnZVdpZHRoPWM7dGhpcy5pbWFnZUhlaWdodD1kO3RoaXMuc3ByaXRlQ29sdW1ucz1mO3RoaXMuc3ByaXRlUm93cz1nO3RoaXMuY2FudmFzPWw7dGhpcy5jb250ZXh0PWs7dGhpcy5tYWdGaWx0ZXI9dGhpcy5taW5GaWx0ZXI9VEhSRUUuTGluZWFyRmlsdGVyO3RoaXMuZHJhd1RpbWVvdXQ9NTA7dGhpcy53YWl0VGltZW91dD0xO3RoaXMuZHJhd1F1ZXVlPVtdO3RoaXMuaXNEcmF3UXVldWVkPSExO3RoaXMubGFzdENsZWFyVGltZXN0YW1wPTA7dGhpcy5jYWxsYmFja1F1ZXVlPVtdO3RoaXMucGVuZGluZ0ltYWdlQ291bnQ9CjA7dGhpcy5maXR0ZXI9bmV3IFZwKHt4Oi4xMjUqYyx5Oi4xMjUqZCx3aWR0aDouNzUqYyxoZWlnaHQ6Ljc1KmR9KX1jbGVhclF1ZXVlcygpe3RoaXMuZHJhd1F1ZXVlPVtdO3RoaXMuY2FsbGJhY2tRdWV1ZT1bXTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50PTA7cmV0dXJuIHRoaXMubGFzdENsZWFyVGltZXN0YW1wPURhdGUubm93KCl9c2V0U3ByaXRlSW1hZ2VEYXRhKGEsYyxkKXt0aGlzLmRyYXdRdWV1ZS5wdXNoKHtzcHJpdGVJbmRleDphLHRpbWVzdGFtcDpEYXRlLm5vdygpLGltYWdlRGF0YTpjLGNhbGxiYWNrOmR9KTt0aGlzLnF1ZXVlRHJhdygpfXNldEF0bGFzVXJsKGEsYyxkKXtjb25zdCBmPXRoaXMuY2xlYXJRdWV1ZXMoKSxnPW5ldyBJbWFnZTt2b2lkIDAhPT1jJiYoZy5jcm9zc09yaWdpbj1jKTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50Kys7Zy5vbmVycm9yPSgpPT57dGhpcy5sYXN0Q2xlYXJUaW1lc3RhbXA+Znx8dGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tfTtnLm9ubG9hZD0KKCk9PntpZighKHRoaXMubGFzdENsZWFyVGltZXN0YW1wPmYpJiYodGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tLHRoaXMudXBkYXRlUHJvcGVydGllc1RvTWF0Y2hJbWFnZURpbWVuc2lvbnMoZy53aWR0aCxnLmhlaWdodCksdGhpcy5jb250ZXh0LmRyYXdJbWFnZShnLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMubmVlZHNVcGRhdGU9ITAsZCYmdGhpcy5jYWxsYmFja1F1ZXVlLnB1c2goe2NhbGxiYWNrOmQsYXJnczpbZ119KSx0aGlzLm9uRHJhd0ZpbmlzaGVkKSl0aGlzLm9uRHJhd0ZpbmlzaGVkKCl9O2cuc3JjPWF9dXBkYXRlUHJvcGVydGllc1RvTWF0Y2hJbWFnZURpbWVuc2lvbnMoYSxjKXtpZihhIT09dGhpcy5pbWFnZVdpZHRoKnRoaXMuc3ByaXRlQ29sdW1uc3x8YyE9PXRoaXMuaW1hZ2VIZWlnaHQqdGhpcy5zcHJpdGVSb3dzKXt2YXIgZD1hL3RoaXMuaW1hZ2VXaWR0aCxmPWMvdGhpcy5pbWFnZUhlaWdodDtpZihkKmY8dGhpcy5jYXBhY2l0eSl0aHJvdyBFcnJvcigiQXRsYXMgaW1hZ2UgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIGF0bGFzIGNhcGFjaXR5LiIpOwppZihkIT09TWF0aC5yb3VuZChkKXx8ZiE9PU1hdGgucm91bmQoZikpdGhyb3cgRXJyb3IoIkF0bGFzIGltYWdlIGRpbWVuc2lvbnMgZG8gbm90IGZpdCBzcHJpdGUgaW1hZ2UgZGltZW5zaW9ucy4iKTt0aGlzLnNwcml0ZUNvbHVtbnM9ZDt0aGlzLnNwcml0ZVJvd3M9Zjt0aGlzLmNhbnZhcy53aWR0aD1hO3RoaXMuY2FudmFzLmhlaWdodD1jfX1wb3N0UmVuZGVyKCl7aWYoISh0aGlzLmRyYXdRdWV1ZS5sZW5ndGh8fDA8dGhpcy5wZW5kaW5nSW1hZ2VDb3VudCkpZm9yKDt0aGlzLmNhbGxiYWNrUXVldWUubGVuZ3RoOyl7Y29uc3Qge2NhbGxiYWNrOmEsYXJnczpjfT10aGlzLmNhbGxiYWNrUXVldWUuc2hpZnQoKTthLmFwcGx5KG51bGwsYyl9fXF1ZXVlRHJhdygpe3RoaXMuaXNEcmF3UXVldWVkfHwodGhpcy5pc0RyYXdRdWV1ZWQ9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaXNEcmF3UXVldWVkJiZ0aGlzLndvcmtPbkRyYXdKb2JzKCl9LHRoaXMud2FpdFRpbWVvdXQpKX13b3JrT25EcmF3Sm9icygpe3RoaXMuaXNEcmF3UXVldWVkPQohMTtjb25zdCBhPURhdGUubm93KCksYz1hKyh0aGlzLmRyYXdUaW1lb3V0fHxJbmZpbml0eSk7Zm9yKDt0aGlzLmRyYXdRdWV1ZS5sZW5ndGgmJkRhdGUubm93KCk8Yzspe2NvbnN0IHtzcHJpdGVJbmRleDpwLHRpbWVzdGFtcDpxLGltYWdlRGF0YTpyLGltYWdlOnQsY2FsbGJhY2s6dn09dGhpcy5kcmF3UXVldWUuc2hpZnQoKTtpZih0KXt2YXIgZD10aGlzLmltYWdlV2lkdGgsZj10aGlzLmltYWdlSGVpZ2h0LGc9cCV0aGlzLnNwcml0ZUNvbHVtbnMqZCxsPWYqTWF0aC5mbG9vcihwL3RoaXMuc3ByaXRlQ29sdW1ucyk7dGhpcy5jb250ZXh0LmNsZWFyUmVjdChnLGwsZCxmKTt0aGlzLmNvbnRleHQuZHJhd0ltYWdlKHQsZyxsLGQsZik7ImZ1bmN0aW9uIj09PXR5cGVvZiB2JiZ0aGlzLmNhbGxiYWNrUXVldWUucHVzaCh7Y2FsbGJhY2s6dixhcmdzOltwXX0pfWVsc2UgaWYociYmInRleHQiPT09ci50eXBlKXtkPXAldGhpcy5zcHJpdGVDb2x1bW5zKnRoaXMuaW1hZ2VXaWR0aDtmPXRoaXMuaW1hZ2VIZWlnaHQqCk1hdGguZmxvb3IocC90aGlzLnNwcml0ZUNvbHVtbnMpO3ZhciBrPWQrdGhpcy5pbWFnZVdpZHRoLzIsbj1mK3RoaXMuaW1hZ2VIZWlnaHQvMjtnPXRoaXMuZml0dGVyLmZpdChyLmRhdGErIiIpO2w9dGhpcy5jb250ZXh0O2wuY2xlYXJSZWN0KGQsZix0aGlzLmltYWdlV2lkdGgsdGhpcy5pbWFnZUhlaWdodCk7bC5zYXZlKCk7bC50cmFuc2xhdGUoayxuKTtsLnNjYWxlKHRoaXMuaW1hZ2VXaWR0aCx0aGlzLmltYWdlSGVpZ2h0KTtsLmJlZ2luUGF0aCgpO2wuYXJjKDAsMCwuNSwwLDIqTWF0aC5QSSk7bC5yZXN0b3JlKCk7bC5maWxsU3R5bGU9IiM1NTU1NTUiO2wuZmlsbCgpO2wuZmlsbFN0eWxlPSJ3aGl0ZSI7bC50ZXh0QmFzZWxpbmU9ImhhbmdpbmciO2wuZm9udD1gJHtyLnNwZWNpYWw/Iml0YWxpYyI6ImJvbGQifSAke2cuZm9udFNpemV9cHggJHsiJ1JvYm90byBNb25vJywgJ0NvbnNvbGFzJywgJ01lbmxvJywgbW9ub3NwYWNlIn1gO2s9Zy5saW5lcztmb3Iobj0wO248ay5sZW5ndGg7bisrKXtjb25zdCB5PQprW25dO2wuZmlsbFRleHQoeS50ZXh0LGQreS54LGYreS55LHkudGV4dC5sZW5ndGgqdGhpcy5maXR0ZXIuc2V0dGluZ3MuZ2x5cGhBc3BlY3RSYXRpbypnLmZvbnRTaXplKX0iZnVuY3Rpb24iPT09dHlwZW9mIHYmJnRoaXMuY2FsbGJhY2tRdWV1ZS5wdXNoKHtjYWxsYmFjazp2LGFyZ3M6W3BdfSl9ZWxzZSBpZihyKXtjb25zdCB5PW5ldyBJbWFnZTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50Kys7eS5vbmxvYWQ9KCk9PnthPHRoaXMubGFzdENsZWFyVGltZXN0YW1wfHwodGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tLHRoaXMuZHJhd1F1ZXVlLnVuc2hpZnQoe3Nwcml0ZUluZGV4OnAsdGltZXN0YW1wOnEsaW1hZ2U6eSxjYWxsYmFjazp2fSksdGhpcy5xdWV1ZURyYXcoKSl9O3kub25lcnJvcj0oKT0+e2E8dGhpcy5sYXN0Q2xlYXJUaW1lc3RhbXB8fCh0aGlzLnBlbmRpbmdJbWFnZUNvdW50LS0sdGhpcy5kcmF3UXVldWUucHVzaCh7c3ByaXRlSW5kZXg6cCx0aW1lc3RhbXA6cSxpbWFnZURhdGE6ciwKY2FsbGJhY2s6dn0pLHRoaXMucXVldWVEcmF3KCkpfTt5LnNyYz0ic3ZnIj09PXIudHlwZT9VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyLmRhdGFdLHt0eXBlOiJpbWFnZS9zdmcreG1sO2NoYXJzZXRceDNkdXRmLTgifSkpOmBkYXRhOiR7ci50eXBlfTtiYXNlNjQsJHtyLmRhdGF9YH19aWYodGhpcy5kcmF3UXVldWUubGVuZ3RofHwwPHRoaXMucGVuZGluZ0ltYWdlQ291bnQpdGhpcy5xdWV1ZURyYXcoKTtlbHNlIGlmKHRoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5vbkRyYXdGaW5pc2hlZCl0aGlzLm9uRHJhd0ZpbmlzaGVkKCl9fTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtZGl2ZS9saWIvc3ByaXRlLW1hdGVyaWFsLmpzCmNsYXNzIFhwIGV4dGVuZHMgVEhSRUUuUmF3U2hhZGVyTWF0ZXJpYWx7Y29uc3RydWN0b3IoYSxjKXtzdXBlcih7dmVydGV4U2hhZGVyOiJcblxuICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4gIHByZWNpc2lvbiBoaWdocCBpbnQ7XG5cbiAgI2RlZmluZSBTSEFERVJfTkFNRSBTcHJpdGVNYXRlcmlhbFxuXG4gIC8vIFN0YW5kYXJkIHVuaWZvcm1zIHByb3ZpZGVkIGJ5IFRIUkVFLmpzIGZvciBwcm9qZWN0aW5nIHRocm91Z2ggdGhlIGNhbWVyYS5cbiAgdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDtcbiAgdW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7XG5cbiAgdW5pZm9ybSBmbG9hdCB0aW1lO1xuXG4gIHVuaWZvcm0gZmxvYXQgc3ByaXRlQ29sdW1ucztcbiAgdW5pZm9ybSBmbG9hdCBzcHJpdGVSb3dzO1xuXG4gIGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuICBhdHRyaWJ1dGUgdmVjMyBiYXNlUG9zaXRpb247XG5cbiAgYXR0cmlidXRlIHZlYzQgY29sb3I7XG4gIGF0dHJpYnV0ZSB2ZWM0IGJhc2VDb2xvcjtcblxuICBhdHRyaWJ1dGUgZmxvYXQgb3BhY2l0eTtcbiAgYXR0cmlidXRlIGZsb2F0IGJhc2VPcGFjaXR5O1xuXG4gIGF0dHJpYnV0ZSBmbG9hdCB0aW1lc3RhbXA7XG4gIGF0dHJpYnV0ZSBmbG9hdCBiYXNlVGltZXN0YW1wO1xuXG4gIGF0dHJpYnV0ZSBmbG9hdCB2ZXJ0ZXhJbmRleDtcblxuICBhdHRyaWJ1dGUgZmxvYXQgdGV4dHVyZUluZGV4O1xuICBhdHRyaWJ1dGUgZmxvYXQgYmFzZVRleHR1cmVJbmRleDtcblxuICBhdHRyaWJ1dGUgZmxvYXQgdGV4dHVyZVRpbWVzdGFtcDtcbiAgYXR0cmlidXRlIGZsb2F0IGJhc2VUZXh0dXJlVGltZXN0YW1wO1xuXG4gIC8vIENvbXB1dGVkIFVWIGNvb3JkaW5hdGVzIGludG8gdGhlIGRlZmF1bHRUZXh0dXJlIGJhc2VkIG9uIHRoZSB2ZXJ0ZXhJbmRleC5cbiAgdmFyeWluZyB2ZWMyIHZEZWZhdWx0VXY7XG5cbiAgLy8gQ29tcHV0ZWQgVVYgY29vcmRpbmF0ZXMgaW50byB0aGUgc3ByaXRlIHRleHR1cmUgYXRsYXMuXG4gIHZhcnlpbmcgdmVjMiB2U3ByaXRlVXY7XG5cbiAgLy8gSW50ZXJwb2xhdGVkIGNvbG9yIHVzZWQgYnkgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAgdmFyeWluZyB2ZWM0IHZDb2xvcjtcblxuICAvLyBJbnRlcnBvbGF0ZWQgb3BhY2l0eSB1c2VkIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIuXG4gIHZhcnlpbmcgZmxvYXQgdk9wYWNpdHk7XG5cbiAgLy8gRGVncmVlIG9mIG1peGluZyBiZXR3ZWVuIGJhc2UgYW5kIGN1cnJlbnQgdGV4dHVyZS5cbiAgdmFyeWluZyBmbG9hdCB2VGV4dHVyZU1peDtcblxuICBmbG9hdCBhcHBseUVhc2luZyhmbG9hdCB0KSB7XG4gICAgcmV0dXJuIHQgXHgzYyAwLjUgPyA0LjAgKiB0ICogdCAqIHQgOlxuICAgICAgNC4wICogKHQgLSAxLjApICogKHQgLSAxLjApICogKHQgLSAxLjApICsgMS4wO1xuICB9XG5cbiAgdm9pZCBtYWluKCkge1xuXG4gICAgLy8gQ29tcHV0ZSBkZWZhdWx0IFVWcy4gQSBceDNkXHgzZSAoMCwwKSwgQiBceDNkXHgzZSAoMSwwKSwgZXRjLlxuICAgIHZEZWZhdWx0VXYueCBceDNkIG1vZChmbG9vcigodmVydGV4SW5kZXggKyAxLjApIC8gMi4wKSwgMi4wKTtcbiAgICB2RGVmYXVsdFV2LnkgXHgzZCBtb2QoZmxvb3IodmVydGV4SW5kZXggLyAyLjApLCAyLjApO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSByb3cgYW5kIGNvbHVtbiBpbmRpY2VzIGZvciB0aGlzIHNwcml0ZS5cbiAgICBmbG9hdCBzcHJpdGVJbmRleCBceDNkIGZsb29yKHZlcnRleEluZGV4IC8gNC4wKSArIDAuNTtcbiAgICBmbG9hdCBjb2x1bW5JbmRleCBceDNkIGZsb29yKG1vZChzcHJpdGVJbmRleCwgc3ByaXRlQ29sdW1ucykpO1xuICAgIGZsb2F0IHJvd0luZGV4IFx4M2Qgc3ByaXRlUm93cyAtIDEuMCAtIGZsb29yKHNwcml0ZUluZGV4IC8gc3ByaXRlQ29sdW1ucyk7XG5cbiAgICAvLyBDb21wdXRlIHNwcml0ZSBVVnMgZnJvbSByb3cgYW5kIGNvbHVtbiBpbmRpY2VzLlxuICAgIHZTcHJpdGVVdi54IFx4M2QgKGNvbHVtbkluZGV4ICsgdkRlZmF1bHRVdi54KSAvIHNwcml0ZUNvbHVtbnM7XG4gICAgdlNwcml0ZVV2LnkgXHgzZCAocm93SW5kZXggKyB2RGVmYXVsdFV2LnkpIC8gc3ByaXRlUm93cztcblxuICAgIGZsb2F0IGJsZW5kIFx4M2QgYXBwbHlFYXNpbmcoc21vb3Roc3RlcChiYXNlVGltZXN0YW1wLCB0aW1lc3RhbXAsIHRpbWUpKTtcblxuICAgIHZUZXh0dXJlTWl4IFx4M2QgbWl4KGJhc2VUZXh0dXJlSW5kZXgsIHRleHR1cmVJbmRleCxcbiAgICAgICAgc21vb3Roc3RlcChiYXNlVGV4dHVyZVRpbWVzdGFtcCwgdGV4dHVyZVRpbWVzdGFtcCwgdGltZSkpO1xuXG4gICAgdkNvbG9yIFx4M2QgbWl4KGJhc2VDb2xvciwgY29sb3IsIGJsZW5kKTtcblxuICAgIHZPcGFjaXR5IFx4M2QgbWl4KGJhc2VPcGFjaXR5LCBvcGFjaXR5LCBibGVuZCk7XG5cbiAgICBnbF9Qb3NpdGlvbiBceDNkIHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKlxuICAgICAgICB2ZWM0KG1peChiYXNlUG9zaXRpb24sIHBvc2l0aW9uLCB2ZWMzKGJsZW5kKSksIDEuMCk7XG5cbiAgfVxuXG4iLApmcmFnbWVudFNoYWRlcjoiXG5cbiAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuICBwcmVjaXNpb24gaGlnaHAgaW50O1xuXG4gICNkZWZpbmUgU0hBREVSX05BTUUgU3ByaXRlTWF0ZXJpYWxcblxuICAvLyBMaWdodG5lc3MgdGhhdCBzaG91bGQgaWRlYWxseSBleGFjdGx5IG1hdGNoIHRoZSB2Q29sb3IuXG4gICNkZWZpbmUgVEFSR0VUX0xJR0hUTkVTUyAwLjZcblxuICB1bmlmb3JtIGZsb2F0IHRpbWU7XG5cbiAgdW5pZm9ybSBzYW1wbGVyMkQgZGVmYXVsdFRleHR1cmU7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIHNwcml0ZUF0bGFzO1xuXG4gIHZhcnlpbmcgdmVjMiB2RGVmYXVsdFV2O1xuICB2YXJ5aW5nIHZlYzIgdlNwcml0ZVV2O1xuICB2YXJ5aW5nIHZlYzQgdkNvbG9yO1xuICB2YXJ5aW5nIGZsb2F0IHZPcGFjaXR5O1xuICB2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlTWl4O1xuXG4gIC8vIENvbXB1dGUgcmVsYXRpdmUgbHVtaW5hbmNlIGZyb20gUkdCLlxuICBmbG9hdCByZ2JUb0wodmVjMyByZ2IpIHtcbiAgICByZXR1cm4gZG90KHJnYiwgdmVjMygwLjMsIDAuNTksIDAuMTEpKTtcbiAgfVxuXG4gIC8vIEFwcGx5IGx1bWluYW5jZSBlYXNpbmcuXG4gIGZsb2F0IGVhc2VMKGZsb2F0IGwpIHtcbiAgICByZXR1cm4gMS4wIC0gKDEuMCAtIGwpICogKDEuMCAtIGwpICogKDEuMCAtIGwpO1xuICB9XG5cbiAgdm9pZCBtYWluKCkge1xuICAgIGlmICh2T3BhY2l0eSBceDNjXHgzZCAwLjA1KSB7XG4gICAgICBkaXNjYXJkO1xuICAgIH1cblxuICAgIC8vIEludGVycG9sYXRlIGJldHdlZW4gZGVmYXVsdCB0ZXh0dXJlIGFuZCBzcHJpdGUgdGV4dHVyZS5cbiAgICB2ZWM0IGRlZmF1bHRDb2xvciBceDNkXG4gICAgICB2VGV4dHVyZU1peCBceDNjIDEuMCA/IHRleHR1cmUyRChkZWZhdWx0VGV4dHVyZSwgdkRlZmF1bHRVdikgOiB2ZWM0KDAuMCk7XG4gICAgdmVjNCBzcHJpdGVDb2xvciBceDNkXG4gICAgICB2VGV4dHVyZU1peCBceDNlIDAuMCA/IHRleHR1cmUyRChzcHJpdGVBdGxhcywgdlNwcml0ZVV2KSA6IHZlYzQoMC4wKTtcbiAgICB2ZWM0IG1peGVkQ29sb3IgXHgzZCBtaXgoZGVmYXVsdENvbG9yLCBzcHJpdGVDb2xvciwgdlRleHR1cmVNaXgpO1xuXG4gICAgLy8gTGlnaHRuZXNzIG9mIHRoZSBtaXhlZCBwaXhlbC5cbiAgICBmbG9hdCBtaXhlZEwgXHgzZCByZ2JUb0wobWl4ZWRDb2xvci5yZ2IpO1xuXG4gICAgLy8gVXNpbmcgdGhlIG1peGVkIGFuZCB0YXJnZXQgbGlnaHRuZXNzLCBkZXRlcm1pbmUgdGhlIGNvbG9yIHRoYXQncyBiZXR3ZWVuXG4gICAgLy8gYmxhY2ssIHZDb2xvciBhbmQgd2hpdGUuXG4gICAgdmVjMyBjb2xvciBceDNkIG1peGVkTCBceDNjIFRBUkdFVF9MSUdIVE5FU1MgP1xuICAgICAgICBtaXgodmVjMygwLjApLCB2Q29sb3IucmdiLCBlYXNlTChtaXhlZEwgLyBUQVJHRVRfTElHSFRORVNTKSkgOlxuICAgICAgICBtaXgodmVjMygxLjApLCB2Q29sb3IucmdiLFxuICAgICAgICAgICAgZWFzZUwoKDEuMCAtIG1peGVkTCkgLyAoMS4wIC0gVEFSR0VUX0xJR0hUTkVTUykpKTtcblxuICAgIHZlYzMgZmluYWxDb2xvciBceDNkIG1peChtaXhlZENvbG9yLnJnYiwgY29sb3IsIHZDb2xvci5hKTtcblxuICAgIC8vIEFwcGx5IG9wYWNpdHkuXG4gICAgZ2xfRnJhZ0NvbG9yIFx4M2QgdmVjNChmaW5hbENvbG9yLCBtaXhlZENvbG9yLmEgKiB2T3BhY2l0eSk7XG4gIH1cbiIsCnVuaWZvcm1zOnt0aW1lOnt0eXBlOiJmIix2YWx1ZTowfSxkZWZhdWx0VGV4dHVyZTp7dHlwZToidCIsdmFsdWU6YX0sc3ByaXRlQXRsYXM6e3R5cGU6InQiLHZhbHVlOmN9LHNwcml0ZUNvbHVtbnM6e3R5cGU6ImYiLHZhbHVlOmM/Yy5zcHJpdGVDb2x1bW5zOjF9LHNwcml0ZVJvd3M6e3R5cGU6ImYiLHZhbHVlOmM/Yy5zcHJpdGVSb3dzOjF9fSx0cmFuc3BhcmVudDohMH0pfWdldCB0aW1lKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZX1zZXQgdGltZShhKXt0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU9YX1nZXQgZGVmYXVsdFRleHR1cmUoKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5kZWZhdWx0VGV4dHVyZS52YWx1ZX1zZXQgZGVmYXVsdFRleHR1cmUoYSl7dGhpcy51bmlmb3Jtcy5kZWZhdWx0VGV4dHVyZS52YWx1ZT1hfWdldCBzcHJpdGVBdGxhcygpe3JldHVybiB0aGlzLnVuaWZvcm1zLnNwcml0ZUF0bGFzLnZhbHVlfXNldCBzcHJpdGVBdGxhcyhhKXt0aGlzLnVuaWZvcm1zLnNwcml0ZUF0bGFzLnZhbHVlPQphfXVwZGF0ZUF0bGFzVW5pZm9ybXMoKXt0aGlzLnVuaWZvcm1zLnNwcml0ZUNvbHVtbnMudmFsdWU9dGhpcy5zcHJpdGVBdGxhcy5zcHJpdGVDb2x1bW5zO3RoaXMudW5pZm9ybXMuc3ByaXRlUm93cy52YWx1ZT10aGlzLnNwcml0ZUF0bGFzLnNwcml0ZVJvd3N9YXBwbHlFYXNpbmcoYSl7cmV0dXJuLjU+YT80KmEqYSphOjQqKGEtMSkqKGEtMSkqKGEtMSkrMX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2ZhY2V0cy1kaXZlL2xpYi9zcHJpdGUtbWVzaC5qcwpjbGFzcyBZcHtjb25zdHJ1Y3RvcihhLGMpe3RoaXMuX3Nwcml0ZU1lc2g9YTt0aGlzLl9zcHJpdGVJbmRleD1jfWdldCBzcHJpdGVNZXNoKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2h9Z2V0IHNwcml0ZUluZGV4KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZUluZGV4fWdldCB4KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0WCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IHgoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRYKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0WSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IHkoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRZKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0Wih0aGlzLl9zcHJpdGVJbmRleCl9c2V0IHooYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRaKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCByKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0Uih0aGlzLl9zcHJpdGVJbmRleCl9c2V0IHIoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRSKHRoaXMuX3Nwcml0ZUluZGV4LAphKX1nZXQgZygpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEcodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBnKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0Ryh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYigpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEIodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0Qih0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYSgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEEodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBhKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QSh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgb3BhY2l0eSgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldE9wYWNpdHkodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBvcGFjaXR5KGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0T3BhY2l0eSh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgdGltZXN0YW1wKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0VGltZXN0YW1wKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgdGltZXN0YW1wKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0VGltZXN0YW1wKHRoaXMuX3Nwcml0ZUluZGV4LAphKX1nZXQgYmFzZVgoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlWCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VYKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZVgodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IGJhc2VZKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZVkodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlWShhKXt0aGlzLl9zcHJpdGVNZXNoLnNldEJhc2VZKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlWigpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VaKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZVooYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlWih0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZVIoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlUih0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VSKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZVIodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IGJhc2VHKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZUcodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlRyhhKXt0aGlzLl9zcHJpdGVNZXNoLnNldEJhc2VHKHRoaXMuX3Nwcml0ZUluZGV4LAphKX1nZXQgYmFzZUIoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlQih0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VCKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZUIodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IGJhc2VBKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZUEodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlQShhKXt0aGlzLl9zcHJpdGVNZXNoLnNldEJhc2VBKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlT3BhY2l0eSgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VPcGFjaXR5KHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZU9wYWNpdHkoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlT3BhY2l0eSh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZVRpbWVzdGFtcCgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VUaW1lc3RhbXAodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlVGltZXN0YW1wKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCwKYSl9Z2V0IHRleHR1cmVJbmRleCgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldFRleHR1cmVJbmRleCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IHRleHR1cmVJbmRleChhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFRleHR1cmVJbmRleCh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZVRleHR1cmVJbmRleCgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VUZXh0dXJlSW5kZXgodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlVGV4dHVyZUluZGV4KGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZVRleHR1cmVJbmRleCh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgdGV4dHVyZVRpbWVzdGFtcCgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldFRleHR1cmVUaW1lc3RhbXAodGhpcy5fc3ByaXRlSW5kZXgpfXNldCB0ZXh0dXJlVGltZXN0YW1wKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0VGV4dHVyZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZVRleHR1cmVUaW1lc3RhbXAoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlVGV4dHVyZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VUZXh0dXJlVGltZXN0YW1wKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZVRleHR1cmVUaW1lc3RhbXAodGhpcy5fc3ByaXRlSW5kZXgsCmEpfXJlYmFzZShhKXt0aGlzLl9zcHJpdGVNZXNoLnJlYmFzZSh0aGlzLl9zcHJpdGVJbmRleCxhKX1zZXRTcHJpdGVJbWFnZURhdGEoYSxjKXt0aGlzLl9zcHJpdGVNZXNoLnNldFNwcml0ZUltYWdlRGF0YSh0aGlzLl9zcHJpdGVJbmRleCxhLGMpfXN3aXRjaFRleHR1cmVzKGEsYyl7dGhpcy5fc3ByaXRlTWVzaC5zd2l0Y2hUZXh0dXJlcyh0aGlzLl9zcHJpdGVJbmRleCxhLGMpfX0KY2xhc3MgWnAgZXh0ZW5kcyBUSFJFRS5NZXNoe2NvbnN0cnVjdG9yKGEsYz0zMixkPTMyKXtzdXBlcigpO3RoaXMuY2FwYWNpdHk9YTt0aGlzLmltYWdlV2lkdGg9Yzt0aGlzLmltYWdlSGVpZ2h0PWQ7dGhpcy5uZXh0SW5kZXg9MDt0aGlzLnNwcml0ZVdpZHRoPXRoaXMuaW1hZ2VXaWR0aC90aGlzLmltYWdlSGVpZ2h0O3RoaXMuc3ByaXRlSGVpZ2h0PTE7dGhpcy5nZW9tZXRyeT1uZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnk7dGhpcy5wb3NpdGlvbkRhdGE9bmV3IEZsb2F0MzJBcnJheSgxMiphKTt0aGlzLnBvc2l0aW9uQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5wb3NpdGlvbkRhdGEsMyk7dGhpcy5wb3NpdGlvbkF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLHRoaXMucG9zaXRpb25BdHRyaWJ1dGUpO3RoaXMuYmFzZVBvc2l0aW9uRGF0YT1uZXcgRmxvYXQzMkFycmF5KDEyKmEpO3RoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlPQpuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMuYmFzZVBvc2l0aW9uRGF0YSwzKTt0aGlzLmJhc2VQb3NpdGlvbkF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgiYmFzZVBvc2l0aW9uIix0aGlzLmJhc2VQb3NpdGlvbkF0dHJpYnV0ZSk7dGhpcy5jb2xvckRhdGE9bmV3IFVpbnQ4QXJyYXkoMTYqYSk7dGhpcy5jb2xvckF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMuY29sb3JEYXRhLDQpO3RoaXMuY29sb3JBdHRyaWJ1dGUubm9ybWFsaXplZD0hMDt0aGlzLmNvbG9yQXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJjb2xvciIsdGhpcy5jb2xvckF0dHJpYnV0ZSk7dGhpcy5iYXNlQ29sb3JEYXRhPW5ldyBVaW50OEFycmF5KDE2KmEpO3RoaXMuYmFzZUNvbG9yQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlQ29sb3JEYXRhLDQpO3RoaXMuYmFzZUNvbG9yQXR0cmlidXRlLm5vcm1hbGl6ZWQ9CiEwO3RoaXMuYmFzZUNvbG9yQXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJiYXNlQ29sb3IiLHRoaXMuYmFzZUNvbG9yQXR0cmlidXRlKTt0aGlzLm9wYWNpdHlEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLm9wYWNpdHlBdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLm9wYWNpdHlEYXRhLDEpO3RoaXMub3BhY2l0eUF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgib3BhY2l0eSIsdGhpcy5vcGFjaXR5QXR0cmlidXRlKTt0aGlzLmJhc2VPcGFjaXR5RGF0YT1uZXcgRmxvYXQzMkFycmF5KDQqYSk7dGhpcy5iYXNlT3BhY2l0eUF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMuYmFzZU9wYWNpdHlEYXRhLDEpO3RoaXMuYmFzZU9wYWNpdHlBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImJhc2VPcGFjaXR5IiwKdGhpcy5iYXNlT3BhY2l0eUF0dHJpYnV0ZSk7dGhpcy50aW1lc3RhbXBEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLnRpbWVzdGFtcEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMudGltZXN0YW1wRGF0YSwxKTt0aGlzLnRpbWVzdGFtcEF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgidGltZXN0YW1wIix0aGlzLnRpbWVzdGFtcEF0dHJpYnV0ZSk7dGhpcy5iYXNlVGltZXN0YW1wRGF0YT1uZXcgRmxvYXQzMkFycmF5KDQqYSk7dGhpcy5iYXNlVGltZXN0YW1wQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlVGltZXN0YW1wRGF0YSwxKTt0aGlzLmJhc2VUaW1lc3RhbXBBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImJhc2VUaW1lc3RhbXAiLHRoaXMuYmFzZVRpbWVzdGFtcEF0dHJpYnV0ZSk7dGhpcy5mYWNlSW5kZXhEYXRhPQpuZXcgVWludDMyQXJyYXkoNiphKTtmb3IodmFyIGY9MDtmPGE7ZisrKXt2YXIgZz02KmY7Y29uc3QgbD00KmY7dGhpcy5mYWNlSW5kZXhEYXRhW2crMF09bCswO3RoaXMuZmFjZUluZGV4RGF0YVtnKzFdPWwrMTt0aGlzLmZhY2VJbmRleERhdGFbZysyXT1sKzI7dGhpcy5mYWNlSW5kZXhEYXRhW2crM109bCswO3RoaXMuZmFjZUluZGV4RGF0YVtnKzRdPWwrMjt0aGlzLmZhY2VJbmRleERhdGFbZys1XT1sKzN9dGhpcy5mYWNlSW5kZXhBdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLmZhY2VJbmRleERhdGEsMSk7dGhpcy5nZW9tZXRyeS5zZXRJbmRleCh0aGlzLmZhY2VJbmRleEF0dHJpYnV0ZSk7dGhpcy50ZXh0dXJlSW5kZXhEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLnRleHR1cmVJbmRleEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMudGV4dHVyZUluZGV4RGF0YSwxKTt0aGlzLnRleHR1cmVJbmRleEF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTsKdGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoInRleHR1cmVJbmRleCIsdGhpcy50ZXh0dXJlSW5kZXhBdHRyaWJ1dGUpO3RoaXMuYmFzZVRleHR1cmVJbmRleERhdGE9bmV3IEZsb2F0MzJBcnJheSg0KmEpO3RoaXMuYmFzZVRleHR1cmVJbmRleEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMuYmFzZVRleHR1cmVJbmRleERhdGEsMSk7dGhpcy5iYXNlVGV4dHVyZUluZGV4QXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJiYXNlVGV4dHVyZUluZGV4Iix0aGlzLmJhc2VUZXh0dXJlSW5kZXhBdHRyaWJ1dGUpO3RoaXMudGV4dHVyZVRpbWVzdGFtcERhdGE9bmV3IEZsb2F0MzJBcnJheSg0KmEpO3RoaXMudGV4dHVyZVRpbWVzdGFtcEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMudGV4dHVyZVRpbWVzdGFtcERhdGEsMSk7dGhpcy50ZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlLnNldER5bmFtaWMoITApOwp0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgidGV4dHVyZVRpbWVzdGFtcCIsdGhpcy50ZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlKTt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wRGF0YT1uZXcgRmxvYXQzMkFycmF5KDQqYSk7dGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBEYXRhLDEpO3RoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImJhc2VUZXh0dXJlVGltZXN0YW1wIix0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlKTtmPTQqYTt0aGlzLnZlcnRleEluZGV4RGF0YT1uZXcgRmxvYXQzMkFycmF5KGYpO2ZvcihnPTA7ZzxmO2crKyl0aGlzLnZlcnRleEluZGV4RGF0YVtnXT1nO3RoaXMudmVydGV4SW5kZXhBdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLnZlcnRleEluZGV4RGF0YSwKMSk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoInZlcnRleEluZGV4Iix0aGlzLnZlcnRleEluZGV4QXR0cmlidXRlKTt0aGlzLmRlZmF1bHRUZXh0dXJlQ2FudmFzPXRoaXMuY3JlYXRlRGVmYXVsdFRleHR1cmVDYW52YXMoKTt0aGlzLmRlZmF1bHRUZXh0dXJlPW5ldyBUSFJFRS5UZXh0dXJlKHRoaXMuZGVmYXVsdFRleHR1cmVDYW52YXMpO3RoaXMuZGVmYXVsdFRleHR1cmUubWluRmlsdGVyPVRIUkVFLkxpbmVhckZpbHRlcjt0aGlzLmRlZmF1bHRUZXh0dXJlLm1hZ0ZpbHRlcj1USFJFRS5OZWFyZXN0RmlsdGVyO3RoaXMuZGVmYXVsdFRleHR1cmUubmVlZHNVcGRhdGU9ITA7dGhpcy5zcHJpdGVBdGxhcz1uZXcgV3AoYSxjLGQpO3RoaXMubWF0ZXJpYWw9bmV3IFhwKHRoaXMuZGVmYXVsdFRleHR1cmUsdGhpcy5zcHJpdGVBdGxhcyk7dGhpcy5vbkJlZm9yZVJlbmRlcj0oKT0+e3RoaXMubWF0ZXJpYWwudXBkYXRlQXRsYXNVbmlmb3JtcygpfTt0aGlzLnRpbWU9dGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXA9CkRhdGUubm93KCk7dGhpcy5mcnVzdHVtQ3VsbGVkPSExfWNyZWF0ZVNwcml0ZSgpe3JldHVybiBuZXcgWXAodGhpcyx0aGlzLm5leHRJbmRleCsrKX1nZXQgdGltZSgpe3JldHVybiB0aGlzLm1hdGVyaWFsLnRpbWUrdGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXB9c2V0IHRpbWUoYSl7dGhpcy5tYXRlcmlhbC50aW1lPWEtdGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXB9Y3JlYXRlRGVmYXVsdFRleHR1cmVDYW52YXMoKXtjb25zdCBhPXRoaXMuZGVmYXVsdFRleHR1cmVDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYz1hLndpZHRoPXRoaXMuaW1hZ2VXaWR0aCxkPWEuaGVpZ2h0PXRoaXMuaW1hZ2VIZWlnaHQsZj1hLmdldENvbnRleHQoIjJkIiksZz1uZXcgSW1hZ2U7Zy5vbmxvYWQ9KCk9PntmLmRyYXdJbWFnZShnLDAsMCxjLGQpO3RoaXMuZGVmYXVsdFRleHR1cmUubmVlZHNVcGRhdGU9ITB9O2cuc3JjPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoWydcblx4M2NzdmcgdmVyc2lvblx4M2QiMS4xIlxuICAgICBiYXNlUHJvZmlsZVx4M2QiZnVsbCJcbiAgICAgd2lkdGhceDNkIjEyOCIgaGVpZ2h0XHgzZCIxMjgiXG4gICAgIHhtbG5zXHgzZCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJcbiAgICAgeG1sbnM6eGxpbmtceDNkImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiXHgzZVxuICBceDNjZGVmc1x4M2VcbiAgICBceDNjbGluZWFyR3JhZGllbnQgaWRceDNkImxpbmVhckdyYWRpZW50Mzc3NCJceDNlXG4gICAgICBceDNjc3RvcFxuICAgICAgICAgc3R5bGVceDNkInN0b3AtY29sb3I6IzgwODA4MDtzdG9wLW9wYWNpdHk6MTsiXG4gICAgICAgICBvZmZzZXRceDNkIjAiIC9ceDNlXG4gICAgICBceDNjc3RvcFxuICAgICAgICAgc3R5bGVceDNkInN0b3AtY29sb3I6IzU1NTU1NTtzdG9wLW9wYWNpdHk6MTsiXG4gICAgICAgICBvZmZzZXRceDNkIjEiIC9ceDNlXG4gICAgXHgzYy9saW5lYXJHcmFkaWVudFx4M2VcbiAgICBceDNjcmFkaWFsR3JhZGllbnRcbiAgICAgICB4bGluazpocmVmXHgzZCIjbGluZWFyR3JhZGllbnQzNzc0IlxuICAgICAgIGlkXHgzZCJyYWRpYWxHcmFkaWVudDM3ODAiXG4gICAgICAgY3hceDNkIjgwIlxuICAgICAgIGN5XHgzZCI0MCJcbiAgICAgICBmeFx4M2QiODAiXG4gICAgICAgZnlceDNkIjQwIlxuICAgICAgIHJceDNkIjgwIlxuICAgICAgIGdyYWRpZW50VW5pdHNceDNkInVzZXJTcGFjZU9uVXNlIlxuICAgICAgIHNwcmVhZE1ldGhvZFx4M2QicGFkIiAvXHgzZVxuICBceDNjL2RlZnNceDNlXG4gIFx4M2NjaXJjbGUgY3hceDNkIjUwJSIgY3lceDNkIjUwJSIgclx4M2QiNTAlIiBmaWxsXHgzZCJ1cmwoI3JhZGlhbEdyYWRpZW50Mzc4MCkiIC9ceDNlXG5ceDNjL3N2Z1x4M2VcbiddLAp7dHlwZToiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0XHgzZHV0Zi04In0pKTtyZXR1cm4gYX1nZXRYKGEpe3JldHVybiB0aGlzLnBvc2l0aW9uRGF0YVsxMiphXX1zZXRYKGEsYyl7YSo9MTI7dGhpcy5wb3NpdGlvbkRhdGFbYSswXT1jO3RoaXMucG9zaXRpb25EYXRhW2ErM109Yyt0aGlzLnNwcml0ZVdpZHRoO3RoaXMucG9zaXRpb25EYXRhW2ErNl09Yyt0aGlzLnNwcml0ZVdpZHRoO3RoaXMucG9zaXRpb25EYXRhW2ErOV09Yzt0aGlzLnBvc2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldFkoYSl7cmV0dXJuIHRoaXMucG9zaXRpb25EYXRhWzEyKmErMV19c2V0WShhLGMpe2EqPTEyO3RoaXMucG9zaXRpb25EYXRhW2ErMV09Yzt0aGlzLnBvc2l0aW9uRGF0YVthKzRdPWM7dGhpcy5wb3NpdGlvbkRhdGFbYSs3XT1jK3RoaXMuc3ByaXRlSGVpZ2h0O3RoaXMucG9zaXRpb25EYXRhW2ErMTBdPWMrdGhpcy5zcHJpdGVIZWlnaHQ7dGhpcy5wb3NpdGlvbkF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0KITB9Z2V0WihhKXtyZXR1cm4gdGhpcy5wb3NpdGlvbkRhdGFbMTIqYSsyXX1zZXRaKGEsYyl7YSo9MTI7dGhpcy5wb3NpdGlvbkRhdGFbYSsyXT1jO3RoaXMucG9zaXRpb25EYXRhW2ErNV09Yzt0aGlzLnBvc2l0aW9uRGF0YVthKzhdPWM7dGhpcy5wb3NpdGlvbkRhdGFbYSsxMV09Yzt0aGlzLnBvc2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldFIoYSl7cmV0dXJuIHRoaXMuY29sb3JEYXRhWzE2KmFdfXNldFIoYSxjKXthKj0xNjt0aGlzLmNvbG9yRGF0YVthKzBdPWM7dGhpcy5jb2xvckRhdGFbYSs0XT1jO3RoaXMuY29sb3JEYXRhW2ErOF09Yzt0aGlzLmNvbG9yRGF0YVthKzEyXT1jO3RoaXMuY29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0RyhhKXtyZXR1cm4gdGhpcy5jb2xvckRhdGFbMTYqYSsxXX1zZXRHKGEsYyl7YSo9MTY7dGhpcy5jb2xvckRhdGFbYSsxXT1jO3RoaXMuY29sb3JEYXRhW2ErNV09Yzt0aGlzLmNvbG9yRGF0YVthKzldPWM7dGhpcy5jb2xvckRhdGFbYSsKMTNdPWM7dGhpcy5jb2xvckF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCKGEpe3JldHVybiB0aGlzLmNvbG9yRGF0YVsxNiphKzJdfXNldEIoYSxjKXthKj0xNjt0aGlzLmNvbG9yRGF0YVthKzJdPWM7dGhpcy5jb2xvckRhdGFbYSs2XT1jO3RoaXMuY29sb3JEYXRhW2ErMTBdPWM7dGhpcy5jb2xvckRhdGFbYSsxNF09Yzt0aGlzLmNvbG9yQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEEoYSl7cmV0dXJuIHRoaXMuY29sb3JEYXRhWzE2KmErM119c2V0QShhLGMpe2EqPTE2O3RoaXMuY29sb3JEYXRhW2ErM109Yzt0aGlzLmNvbG9yRGF0YVthKzddPWM7dGhpcy5jb2xvckRhdGFbYSsxMV09Yzt0aGlzLmNvbG9yRGF0YVthKzE1XT1jO3RoaXMuY29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZVgoYSl7cmV0dXJuIHRoaXMuYmFzZVBvc2l0aW9uRGF0YVsxMiphXX1zZXRCYXNlWChhLGMpe2EqPTEyO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzBdPWM7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErCjNdPWMrdGhpcy5zcHJpdGVXaWR0aDt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSs2XT1jK3RoaXMuc3ByaXRlV2lkdGg7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErOV09Yzt0aGlzLmJhc2VQb3NpdGlvbkF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlWShhKXtyZXR1cm4gdGhpcy5iYXNlUG9zaXRpb25EYXRhWzEyKmErMV19c2V0QmFzZVkoYSxjKXthKj0xMjt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSsxXT1jO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzRdPWM7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErN109Yyt0aGlzLnNwcml0ZUhlaWdodDt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSsxMF09Yyt0aGlzLnNwcml0ZUhlaWdodDt0aGlzLmJhc2VQb3NpdGlvbkF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlWihhKXtyZXR1cm4gdGhpcy5iYXNlUG9zaXRpb25EYXRhWzEyKmErMl19c2V0QmFzZVooYSxjKXthKj0xMjt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSsyXT1jOwp0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSs1XT1jO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzhdPWM7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErMTFdPWM7dGhpcy5iYXNlUG9zaXRpb25BdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZVIoYSl7cmV0dXJuIHRoaXMuYmFzZUNvbG9yRGF0YVsxNiphXX1zZXRCYXNlUihhLGMpe2EqPTE2O3RoaXMuYmFzZUNvbG9yRGF0YVthKzBdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErNF09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSs4XT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzEyXT1jO3RoaXMuYmFzZUNvbG9yQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VHKGEpe3JldHVybiB0aGlzLmJhc2VDb2xvckRhdGFbMTYqYSsxXX1zZXRCYXNlRyhhLGMpe2EqPTE2O3RoaXMuYmFzZUNvbG9yRGF0YVthKzFdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErNV09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSs5XT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKwoxM109Yzt0aGlzLmJhc2VDb2xvckF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlQihhKXtyZXR1cm4gdGhpcy5iYXNlQ29sb3JEYXRhWzE2KmErMl19c2V0QmFzZUIoYSxjKXthKj0xNjt0aGlzLmJhc2VDb2xvckRhdGFbYSsyXT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzZdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMTBdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMTRdPWM7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZUEoYSl7cmV0dXJuIHRoaXMuYmFzZUNvbG9yRGF0YVsxNiphKzNdfXNldEJhc2VBKGEsYyl7YSo9MTY7dGhpcy5iYXNlQ29sb3JEYXRhW2ErM109Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSs3XT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzExXT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzE1XT1jO3RoaXMuYmFzZUNvbG9yQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldE9wYWNpdHkoYSl7cmV0dXJuIHRoaXMub3BhY2l0eURhdGFbNCoKYV19c2V0T3BhY2l0eShhLGMpe2EqPTQ7dGhpcy5vcGFjaXR5RGF0YVthKzBdPWM7dGhpcy5vcGFjaXR5RGF0YVthKzFdPWM7dGhpcy5vcGFjaXR5RGF0YVthKzJdPWM7dGhpcy5vcGFjaXR5RGF0YVthKzNdPWM7dGhpcy5vcGFjaXR5QXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VPcGFjaXR5KGEpe3JldHVybiB0aGlzLmJhc2VPcGFjaXR5RGF0YVs0KmFdfXNldEJhc2VPcGFjaXR5KGEsYyl7YSo9NDt0aGlzLmJhc2VPcGFjaXR5RGF0YVthKzBdPWM7dGhpcy5iYXNlT3BhY2l0eURhdGFbYSsxXT1jO3RoaXMuYmFzZU9wYWNpdHlEYXRhW2ErMl09Yzt0aGlzLmJhc2VPcGFjaXR5RGF0YVthKzNdPWM7dGhpcy5iYXNlT3BhY2l0eUF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRUaW1lc3RhbXAoYSl7cmV0dXJuIHRoaXMudGltZXN0YW1wRGF0YVs0KmFdK3RoaXMuY29uc3RydWN0aW9uVGltZXN0YW1wfXNldFRpbWVzdGFtcChhLGMpe2EqPTQ7Yy09dGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXA7CnRoaXMudGltZXN0YW1wRGF0YVthKzBdPWM7dGhpcy50aW1lc3RhbXBEYXRhW2ErMV09Yzt0aGlzLnRpbWVzdGFtcERhdGFbYSsyXT1jO3RoaXMudGltZXN0YW1wRGF0YVthKzNdPWM7dGhpcy50aW1lc3RhbXBBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZVRpbWVzdGFtcChhKXtyZXR1cm4gdGhpcy5iYXNlVGltZXN0YW1wRGF0YVs0KmFdK3RoaXMuY29uc3RydWN0aW9uVGltZXN0YW1wfXNldEJhc2VUaW1lc3RhbXAoYSxjKXthKj00O2MtPXRoaXMuY29uc3RydWN0aW9uVGltZXN0YW1wO3RoaXMuYmFzZVRpbWVzdGFtcERhdGFbYSswXT1jO3RoaXMuYmFzZVRpbWVzdGFtcERhdGFbYSsxXT1jO3RoaXMuYmFzZVRpbWVzdGFtcERhdGFbYSsyXT1jO3RoaXMuYmFzZVRpbWVzdGFtcERhdGFbYSszXT1jO3RoaXMuYmFzZVRpbWVzdGFtcEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRUZXh0dXJlSW5kZXgoYSl7cmV0dXJuIHRoaXMudGV4dHVyZUluZGV4RGF0YVs0KmFdfXNldFRleHR1cmVJbmRleChhLApjKXthKj00O3RoaXMudGV4dHVyZUluZGV4RGF0YVthKzBdPWM7dGhpcy50ZXh0dXJlSW5kZXhEYXRhW2ErMV09Yzt0aGlzLnRleHR1cmVJbmRleERhdGFbYSsyXT1jO3RoaXMudGV4dHVyZUluZGV4RGF0YVthKzNdPWM7dGhpcy50ZXh0dXJlSW5kZXhBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZVRleHR1cmVJbmRleChhKXtyZXR1cm4gdGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVs0KmFdfXNldEJhc2VUZXh0dXJlSW5kZXgoYSxjKXthKj00O3RoaXMuYmFzZVRleHR1cmVJbmRleERhdGFbYSswXT1jO3RoaXMuYmFzZVRleHR1cmVJbmRleERhdGFbYSsxXT1jO3RoaXMuYmFzZVRleHR1cmVJbmRleERhdGFbYSsyXT1jO3RoaXMuYmFzZVRleHR1cmVJbmRleERhdGFbYSszXT1jO3RoaXMuYmFzZVRleHR1cmVJbmRleEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRUZXh0dXJlVGltZXN0YW1wKGEpe3JldHVybiB0aGlzLnRleHR1cmVUaW1lc3RhbXBEYXRhWzQqYV0rdGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXB9c2V0VGV4dHVyZVRpbWVzdGFtcChhLApjKXthKj00O2MtPXRoaXMuY29uc3RydWN0aW9uVGltZXN0YW1wO3RoaXMudGV4dHVyZVRpbWVzdGFtcERhdGFbYSswXT1jO3RoaXMudGV4dHVyZVRpbWVzdGFtcERhdGFbYSsxXT1jO3RoaXMudGV4dHVyZVRpbWVzdGFtcERhdGFbYSsyXT1jO3RoaXMudGV4dHVyZVRpbWVzdGFtcERhdGFbYSszXT1jO3RoaXMudGV4dHVyZVRpbWVzdGFtcEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlVGV4dHVyZVRpbWVzdGFtcChhKXtyZXR1cm4gdGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcERhdGFbNCphXSt0aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcH1zZXRCYXNlVGV4dHVyZVRpbWVzdGFtcChhLGMpe2EqPTQ7Yy09dGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXA7dGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcERhdGFbYSswXT1jO3RoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBEYXRhW2ErMV09Yzt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wRGF0YVthKzJdPWM7dGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcERhdGFbYSsKM109Yzt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfXJlYmFzZShhLGMpe2M9dm9pZCAwPT09Yz90aGlzLnRpbWU6Yztjb25zdCBkPXRoaXMuZ2V0QmFzZVRpbWVzdGFtcChhKSxmPXRoaXMuZ2V0VGltZXN0YW1wKGEpLGc9Yz49Zj8xOmM8PWQ/MDp0aGlzLm1hdGVyaWFsLmFwcGx5RWFzaW5nKChjLWQpLyhmLWQpKSxsPShrLG4pPT5rKmcrbiooMS1nKTt0aGlzLnNldEJhc2VYKGEsbCh0aGlzLmdldFgoYSksdGhpcy5nZXRCYXNlWChhKSkpO3RoaXMuc2V0QmFzZVkoYSxsKHRoaXMuZ2V0WShhKSx0aGlzLmdldEJhc2VZKGEpKSk7dGhpcy5zZXRCYXNlWihhLGwodGhpcy5nZXRaKGEpLHRoaXMuZ2V0QmFzZVooYSkpKTt0aGlzLnNldEJhc2VSKGEsbCh0aGlzLmdldFIoYSksdGhpcy5nZXRCYXNlUihhKSkpO3RoaXMuc2V0QmFzZUcoYSxsKHRoaXMuZ2V0RyhhKSx0aGlzLmdldEJhc2VHKGEpKSk7dGhpcy5zZXRCYXNlQihhLGwodGhpcy5nZXRCKGEpLAp0aGlzLmdldEJhc2VCKGEpKSk7dGhpcy5zZXRCYXNlQShhLGwodGhpcy5nZXRBKGEpLHRoaXMuZ2V0QmFzZUEoYSkpKTt0aGlzLnNldEJhc2VPcGFjaXR5KGEsbCh0aGlzLmdldE9wYWNpdHkoYSksdGhpcy5nZXRCYXNlT3BhY2l0eShhKSkpO2M9Yz49Zj9jOmwoZixkKTt0aGlzLnNldEJhc2VUaW1lc3RhbXAoYSxjKX1zZXRTcHJpdGVJbWFnZURhdGEoYSxjLGQpe3RoaXMuc3ByaXRlQXRsYXMuc2V0U3ByaXRlSW1hZ2VEYXRhKGEsYyxkKX1zd2l0Y2hUZXh0dXJlcyhhLGMsZCl7Y29uc3QgZj10aGlzLmdldFRleHR1cmVJbmRleChhKTt0aGlzLnNldEJhc2VUZXh0dXJlSW5kZXgoYSxmKTt0aGlzLnNldFRleHR1cmVJbmRleChhLDA9PT1mPzE6MCk7dGhpcy5zZXRCYXNlVGV4dHVyZVRpbWVzdGFtcChhLGMpO3RoaXMuc2V0VGV4dHVyZVRpbWVzdGFtcChhLGQpfWZpbmRTcHJpdGVzKGEsYyl7Y29uc3QgZD1bXTtmb3IobGV0IGY9MDtmPHRoaXMuY2FwYWNpdHk7ZisrKXtjb25zdCBnPTEyKgpmO2E+PXRoaXMucG9zaXRpb25EYXRhW2crMF0mJmE8PXRoaXMucG9zaXRpb25EYXRhW2crNl0mJmM+PXRoaXMucG9zaXRpb25EYXRhW2crMV0mJmM8PXRoaXMucG9zaXRpb25EYXRhW2crN10mJmQucHVzaChmKX1yZXR1cm4gZH19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2ZhY2V0cy1kaXZlL2xpYi93b3JkdHJlZS5qcwpjb25zdCAkcD0vXGJbLSdcd10rXGIvZztmdW5jdGlvbiBhcShhKXtyZXR1cm5gJHt0eXBlb2YgYX1cdTAwMUYke2F9YH1mdW5jdGlvbiBicShhKXtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpLm1hdGNoKCRwKXx8W119CmZ1bmN0aW9uIGNxKGEpe2lmKDI+YS52YWx1ZUNvdW50KXJldHVybiBudWxsO2Zvcih2YXIgYz0oZyxsKT0+e2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7aysrKWxbZ1trXV09ITB9LGQ9e30sZj1hO2Y7KWMoZi5jb21tb25Xb3JkcyxkKSxmPWYucGFyZW50O2ZvcihmPTA7ZjxhLmNoaWxkcmVuLmxlbmd0aDtmKyspYyhhLmNoaWxkcmVuW2ZdLmNvbW1vbldvcmRzLGQpO2M9e307Zm9yKGNvbnN0IGcgaW4gYS52YWx1ZUhhc2gpe2NvbnN0IHtjb3VudDpsLHdvcmRzOmt9PWEudmFsdWVIYXNoW2ddO2Zvcihjb25zdCBuIGluIGspbiBpbiBkfHwoY1tuXT0oY1tuXXx8MCkrbCxjW25dPT09YS50b3RhbENvdW50JiYoYS5jb21tb25Xb3Jkcy5wdXNoKG4pLGRbbl09ITAsZGVsZXRlIGNbbl0pKX1hPW51bGw7ZD0wO2Zvcihjb25zdCBnIGluIGMpY1tnXT5kJiYoYT1nLGQ9Y1tnXSk7cmV0dXJuIGF9CmZ1bmN0aW9uIGRxKGEpe3ZhciBjPXtwYXJlbnQ6bnVsbCxjb21tb25Xb3JkczpbXSxsZXZlbDoxLG9yZGVyOjAsdG90YWxDb3VudDowLHZhbHVlSGFzaDp7fSx2YWx1ZUNvdW50OjAsbm9uVmFsdWVDb3VudDowLGNoaWxkcmVuOltdfTtjb25zdCBkPXtyb290OmMsbm9kZUhhc2g6e30saGlnaGVzdExldmVsOjEsbGV2ZWxIYXNoOnsxOmN9fTtmb3IodmFyIGYgaW4gYSl7aWYoIWEuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qge3ZhbHVlOnEsY291bnQ6cix3b3Jkczp0fT1hW2ZdOyJzdHJpbmciPT09dHlwZW9mIHE/KGMudmFsdWVIYXNoW2ZdPXt2YWx1ZTpxLGNvdW50OnIsd29yZHM6dH0sYy52YWx1ZUNvdW50Kz1yKTpjLm5vblZhbHVlQ291bnQrPXI7Yy50b3RhbENvdW50Kz1yO2Qubm9kZUhhc2hbZl09Y31hPWMubGV2ZWw7aWYoYy5ub25WYWx1ZUNvdW50KXthKys7Zj17cGFyZW50OmMsY29tbW9uV29yZHM6W10sbGV2ZWw6YSxvcmRlcjowLHRvdGFsQ291bnQ6Yy5ub25WYWx1ZUNvdW50LAp2YWx1ZUhhc2g6e30sdmFsdWVDb3VudDowLG5vblZhbHVlQ291bnQ6Yy5ub25WYWx1ZUNvdW50LGNoaWxkcmVuOltdfTtjLm5vblZhbHVlQ291bnQ9MDtjLmNoaWxkcmVuLnB1c2goZik7ZC5oaWdoZXN0TGV2ZWw9YTtkLmxldmVsSGFzaFthXT1mO2Zvcih2YXIgZyBpbiBkLm5vZGVIYXNoKWcgaW4gYy52YWx1ZUhhc2h8fChkLm5vZGVIYXNoW2ddPWYpfWM9W2NdO2ZvcihnPXE9PnEudmFsdWVDb3VudCtxLm5vblZhbHVlQ291bnQ7MTAwPmEmJmMubGVuZ3RoOyl7Zj0wO3ZhciBsPWcoY1tmXSk7Zm9yKHZhciBrPTE7azxjLmxlbmd0aDtrKyspe2NvbnN0IHE9ZyhjW2tdKTtxPmwmJihmPWssbD1xKX1sPWNbZl07aWYoaz1jcShsKSl7YSsrO2Y9e3BhcmVudDpsLGNvbW1vbldvcmRzOltrXSxsZXZlbDphLG9yZGVyOjAsdG90YWxDb3VudDowLHZhbHVlSGFzaDp7fSx2YWx1ZUNvdW50OjAsbm9uVmFsdWVDb3VudDowLGNoaWxkcmVuOltdfTtsLmNoaWxkcmVuLnB1c2goZik7Yy5wdXNoKGYpOwpmb3IoY29uc3QgcSBpbiBsLnZhbHVlSGFzaCl7aWYoIWwudmFsdWVIYXNoLmhhc093blByb3BlcnR5KHEpKWNvbnRpbnVlO2NvbnN0IHt2YWx1ZTpyLGNvdW50OnQsd29yZHM6dn09bC52YWx1ZUhhc2hbcV07diYmayBpbiB2JiYoZi52YWx1ZUhhc2hbcV09e3ZhbHVlOnIsY291bnQ6dCx3b3Jkczp2fSxmLnZhbHVlQ291bnQrPXQsZi50b3RhbENvdW50Kz10LGRlbGV0ZSBsLnZhbHVlSGFzaFtxXSxsLnZhbHVlQ291bnQtPXQsZC5ub2RlSGFzaFtxXT1mLGQuaGlnaGVzdExldmVsPWEsZC5sZXZlbEhhc2hbYV09Zil9fWVsc2UgYy5zcGxpY2UoZiwxKX1sZXQgbj0wO2NvbnN0IHA9cT0+e3Eub3JkZXI9KytuO2ZvcihsZXQgcj0wO3I8cS5jaGlsZHJlbi5sZW5ndGg7cisrKXAocS5jaGlsZHJlbltyXSl9O3AoZC5yb290KTtyZXR1cm4gZH07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLWRpdmUvbGliL3N0YXRzLmpzCmZ1bmN0aW9uIGVxKGEpe2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuW107Y29uc3QgYz17fTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylpZihhW2RdKXtjb25zdCBmPU9iamVjdC5rZXlzKGFbZF0pO2ZvcihsZXQgZz0wO2c8Zi5sZW5ndGg7ZysrKWNbZltnXV09ITB9cmV0dXJuIE9iamVjdC5rZXlzKGMpfWNvbnN0IGZxPWE9PiJudW1iZXIiPT09dHlwZW9mIGEmJmE+PjA9PT1hOwpjbGFzcyBncXtjb25zdHJ1Y3Rvcigpe3RoaXMudW5pcXVlQ291bnQ9dGhpcy50b3RhbENvdW50PTA7dGhpcy52YWx1ZUhhc2g9e307dGhpcy5vdGhlckNvdW50PXRoaXMuc3RyaW5nQ291bnQ9dGhpcy5pbnRlZ2VyQ291bnQ9dGhpcy5udW1iZXJDb3VudD0wO3RoaXMuc3RyaW5nTGVuZ3Roc0NvdW50PXRoaXMuc3RyaW5nTWVhbkxlbmd0aD10aGlzLnN0cmluZ01heExlbmd0aD10aGlzLnN0cmluZ01pbkxlbmd0aD10aGlzLm51bWJlck1heD10aGlzLm51bWJlck1pbj1udWxsO3RoaXMuc3RyaW5nTGVuZ3Roc0hhc2g9e307dGhpcy50b3RhbFdvcmRDb3VudD10aGlzLm11bHRpd29yZENvdW50PTA7dGhpcy53b3JkQ291bnRzPXt9O3RoaXMudW5pcXVlV29yZENvdW50PTA7dGhpcy53b3JkVHJlZT1udWxsfWlzTnVtZXJpYygpe3JldHVybiAwPHRoaXMubnVtYmVyQ291bnQmJm51bGwhPT10aGlzLm51bWJlck1pbiYmbnVsbCE9PXRoaXMubnVtYmVyTWF4JiZ0aGlzLm51bWJlck1heD50aGlzLm51bWJlck1pbn1pc0ludGVnZXIoKXtyZXR1cm4gMDwKdGhpcy5udW1iZXJDb3VudCYmdGhpcy5pbnRlZ2VyQ291bnQ9PT10aGlzLm51bWJlckNvdW50fWFkZFZhbHVlKGEpe3RoaXMudG90YWxDb3VudCsrO2NvbnN0IGM9YXEoYSk7YyBpbiB0aGlzLnZhbHVlSGFzaHx8KHRoaXMudmFsdWVIYXNoW2NdPXt2YWx1ZTphLGNvdW50OjB9LHRoaXMudW5pcXVlQ291bnQrKyk7dGhpcy52YWx1ZUhhc2hbY10uY291bnQrKztzd2l0Y2godHlwZW9mIGEpe2Nhc2UgIm51bWJlciI6dGhpcy5pbmNvcnBvcmF0ZU51bWJlclZhbHVlKGEpO2JyZWFrO2Nhc2UgInN0cmluZyI6dGhpcy5pbmNvcnBvcmF0ZVN0cmluZ1ZhbHVlKGMsYSk7YnJlYWs7ZGVmYXVsdDp0aGlzLm90aGVyQ291bnQrK319aW5jb3Jwb3JhdGVOdW1iZXJWYWx1ZShhKXt0aGlzLm51bWJlckNvdW50Kys7ZnEoYSkmJnRoaXMuaW50ZWdlckNvdW50Kys7aXNOYU4oYSl8fCh0aGlzLm51bWJlck1pbj1udWxsPT09dGhpcy5udW1iZXJNaW4/YTpNYXRoLm1pbih0aGlzLm51bWJlck1pbixhKSx0aGlzLm51bWJlck1heD0KbnVsbD09PXRoaXMubnVtYmVyTWF4P2E6TWF0aC5tYXgodGhpcy5udW1iZXJNYXgsYSkpfWluY29ycG9yYXRlU3RyaW5nVmFsdWUoYSxjKXt0aGlzLnN0cmluZ0NvdW50Kys7dmFyIGQ9Yy5sZW5ndGg7ZCBpbiB0aGlzLnN0cmluZ0xlbmd0aHNIYXNofHwodGhpcy5zdHJpbmdMZW5ndGhzQ291bnQ9KHRoaXMuc3RyaW5nTGVuZ3Roc0NvdW50fHwwKSsxKTt0aGlzLnN0cmluZ0xlbmd0aHNIYXNoW2RdPSh0aGlzLnN0cmluZ0xlbmd0aHNIYXNoW2RdfHwwKSsxO3RoaXMuc3RyaW5nTWluTGVuZ3RoPW51bGw9PT10aGlzLnN0cmluZ01pbkxlbmd0aD9kOk1hdGgubWluKHRoaXMuc3RyaW5nTWluTGVuZ3RoLGQpO3RoaXMuc3RyaW5nTWF4TGVuZ3RoPW51bGw9PT10aGlzLnN0cmluZ01heExlbmd0aD9kOk1hdGgubWF4KHRoaXMuc3RyaW5nTWF4TGVuZ3RoLGQpO3RoaXMuc3RyaW5nTWVhbkxlbmd0aD0odGhpcy5zdHJpbmdNZWFuTGVuZ3RofHwwKSoodGhpcy5zdHJpbmdDb3VudC0xKS90aGlzLnN0cmluZ0NvdW50KwpkL3RoaXMuc3RyaW5nQ291bnQ7aWYoIXRoaXMudmFsdWVIYXNoW2FdLndvcmRzKXtjPWJxKGMudG9Mb3dlckNhc2UoKSk7MTxjLmxlbmd0aCYmKHRoaXMubXVsdGl3b3JkQ291bnQrKyx0aGlzLnRvdGFsV29yZENvdW50Kz1jLmxlbmd0aCk7ZD10aGlzLnZhbHVlSGFzaFthXS53b3Jkcz17fTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyl7Y29uc3QgZz1jW2ZdO2RbZ109KGRbZ118fDApKzE7ZyBpbiB0aGlzLndvcmRDb3VudHN8fCh0aGlzLndvcmRDb3VudHNbZ109MCx0aGlzLnVuaXF1ZVdvcmRDb3VudCsrKX19YT10aGlzLnZhbHVlSGFzaFthXS53b3Jkcztmb3IoY29uc3QgZiBpbiBhKXRoaXMud29yZENvdW50c1tmXT0odGhpcy53b3JkQ291bnRzW2ZdfHwwKSsxfX0KZnVuY3Rpb24gaHEoYSl7aWYoIWF8fCFhLmxlbmd0aClyZXR1cm57fTtjb25zdCBjPXt9O2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtjb25zdCBmPWFbZF07aWYobnVsbD09Ziljb250aW51ZTtjb25zdCBnPU9iamVjdC5rZXlzKGYpO2ZvcihsZXQgbD0wO2w8Zy5sZW5ndGg7bCsrKXtjb25zdCBrPWdbbF0sbj1mW2tdO2sgaW4gY3x8KGNba109bmV3IGdxKTtjW2tdLmFkZFZhbHVlKG4pfX1mb3IoY29uc3QgZCBpbiBjKWE9Y1tkXSxhLm11bHRpd29yZENvdW50JiYoYS53b3JkVHJlZT1kcShhLnZhbHVlSGFzaCkpO3JldHVybiBjfTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtZGl2ZS9saWIvc3RyaW5nLWZvcm1hdC5qcwpmdW5jdGlvbiBpcShhKXtyZXR1cm4gYS5yZXBsYWNlKC8oW1xXX10pL2csIiQxXHUyMDBiIil9ZnVuY3Rpb24ganEoYSl7cmV0dXJuIDY1PmEubGVuZ3RoP2E6YS5zdWJzdHIoMCwzMCkrIi4uLiIrYS5zdWJzdHIoLTMwKX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLWRpdmUvY29tcG9uZW50cy9mYWNldHMtZGl2ZS12aXMvZmFjZXRzLWRpdmUtdmlzLmpzCi8qCgogQ29weXJpZ2h0IDIwMTggR29vZ2xlIEluYy4KCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KY29uc3Qga3E9e2JvdHRvbTo2LGxlZnQ6NixyaWdodDo2LHRvcDo2fSxscT17Ilx1ZmZmY09USEVSXHVmZmZjIjoib3RoZXIiLCJcdWZmZmNOT19XT1JEU1x1ZmZmYyI6Im5vbi13b3JkcyIsIlx1ZmZmY0FMTF9XT1JEU1x1ZmZmYyI6Im90aGVyIn0sbXE9YT0+bnVsbCE9PWEmJmEgaW4gbHE/e2xhYmVsOmxxW2FdLHNwZWNpYWw6ITB9OiJudW1iZXIiIT09dHlwZW9mIGEmJiJzdHJpbmciIT09dHlwZW9mIGE/e2xhYmVsOiIiK2Esc3BlY2lhbDohMH06e2xhYmVsOmpxKCIiK2EpLHNwZWNpYWw6ITF9LG5xPSIjNDI4NUY0ICNEQjQ0MzcgI0Y0QjQwMCAjMEY5RDU4ICNBQjQ3QkMgIzAwQUNDMSAjRkY3MDQzICM5RTlEMjQgIzVDNkJDMCAjRjA2MjkyICMwMDc5NkIgI0MyMTg1QiIuc3BsaXQoIiAiKSxvcT0iIzQyODVGNCAjMEY5RDU4ICMwMEFDQzEgIzlFOUQyNCAjNUM2QkMwICMwMDc5NkIgIzYwN0Q4QiIuc3BsaXQoIiAiKSxwcT0iI0RCNDQzNyAjRjRCNDAwICNBQjQ3QkMgI0YwNjI5MiAjQUI0N0JDICM3OTU1NDggI0ZGNzA0MyAjQzIxODVCIi5zcGxpdCgiICIpLApxcT0iIzQyODVGNCAjQzUzOTI5ICNGN0NCNEQgIzBCODA0MyAjNUUzNUIxICM4MERFRUEgI0ZGNzA0MyAjQzBDQTMzIi5zcGxpdCgiICIpLHJxPXsiYWxpZ25tZW50LWJhc2VsaW5lIjoibWlkZGxlIixmaWxsOiIjNDQ0NDQ0IiwiZm9udC1zaXplIjoxOCwiZm9udC1zdHlsZSI6Im5vcm1hbCIsInRleHQtYW5jaG9yIjoibWlkZGxlIix4OjAseTowfTtjbGFzcyBzcSBleHRlbmRzIEdwe30KY2xhc3MgdHF7Y29uc3RydWN0b3IoYSl7dGhpcy5lbGVtPWE7dGhpcy5lbmRUaW1lc3RhbXA9MDt0aGlzLnJlbmRlclF1ZXVlZD0hMTt0aGlzLmxhYmVscz1bXTt0aGlzLmF1dG9Db2xvckJ5PSExO3RoaXMuaG9yaXpvbnRhbEZhY2V0SW5mbz10aGlzLnZlcnRpY2FsRmFjZXRJbmZvPW51bGx9cmVhZHkoKXt0aGlzLmxheW91dD1uZXcgUnA7dGhpcy5ob2xkZXI9dGhpcy5lbGVtLiQuaG9sZGVyO3RoaXMuZWxlbS5zY29wZVN1YnRyZWUodGhpcy5ob2xkZXIsITApO3RoaXMuY2VsbEJhY2tncm91bmRTVkc9ZDMuc2VsZWN0KHRoaXMuaG9sZGVyKS5hcHBlbmQoInN2ZyIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJ0b3AiLDApO3RoaXMuY2VsbEJhY2tncm91bmRTVkdSb290PXRoaXMuY2VsbEJhY2tncm91bmRTVkcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7dGhpcy5jZWxsQmFja2dyb3VuZExheWVyPXRoaXMuY2VsbEJhY2tncm91bmRTVkdSb290LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwKImxhYmVscyIpO3RoaXMuc2NlbmU9bmV3IFRIUkVFLlNjZW5lO3RoaXMuY2FtZXJhPW5ldyBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEoMCwxMDAsMCwxMDAsLjEsMUUzKTt0cnl7dGhpcy5yZW5kZXJlcj1uZXcgVEhSRUUuV2ViR0xSZW5kZXJlcih7YWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oKSxkMy5zZWxlY3QodGhpcy5yZW5kZXJlci5kb21FbGVtZW50KS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsMCksdGhpcy5ob2xkZXIuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlci5kb21FbGVtZW50KX1jYXRjaChhKXt9dGhpcy56b29tPWQzLnpvb20oKS5zY2FsZUV4dGVudChbMSw1MDBdKS5vbigiem9vbSIsdGhpcy56b29tZWQuYmluZCh0aGlzKSk7ZDMuc2VsZWN0KHRoaXMuZWxlbSkuY2FsbCh0aGlzLnpvb20pO3RoaXMubGFiZWxzQW5kQXhlc1NWRz0KZDMuc2VsZWN0KHRoaXMuaG9sZGVyKS5hcHBlbmQoInN2ZyIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJ0b3AiLDApO3RoaXMubGFiZWxzQW5kQXhlc1NWR1Jvb3Q9dGhpcy5sYWJlbHNBbmRBeGVzU1ZHLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicm9vdCIpO3RoaXMubGFiZWxzTGF5ZXI9dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVscyIpO3RoaXMuYXhlc0xheWVyPXRoaXMubGFiZWxzQW5kQXhlc1NWR1Jvb3QuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJheGVzIik7dGhpcy5jb21wYXJlZExheWVyPXRoaXMubGFiZWxzQW5kQXhlc1NWR1Jvb3QuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21wYXJlZGJveGVzIik7dGhpcy5zZWxlY3RlZExheWVyPXRoaXMubGFiZWxzQW5kQXhlc1NWR1Jvb3QuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzZWxlY3RlZGJveGVzIik7CnRoaXMubGFiZWxzQW5kQXhlc1NWRy5vbigiY2xpY2siLHRoaXMuY2xpY2tlZC5iaW5kKHRoaXMpKTt0aGlzLnJlbmRlcmVyfHwodGhpcy5sYWJlbHNBbmRBeGVzU1ZHLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMuY2VsbEJhY2tncm91bmRTVkcuc3R5bGUoImRpc3BsYXkiLCJub25lIiksZDMuc2VsZWN0KHRoaXMuaG9sZGVyKS5hcHBlbmQoInAiKS5hdHRyKCJjbGFzcyIsImVycm9yIikuc3R5bGUoImNvbG9yIiwiZGFya3JlZCIpLmh0bWwoJ1xuICAgICAgICAgICAgXHgzY3N0cm9uZ1x4M2VFUlJPUlx4M2Mvc3Ryb25nXHgzZTogRmFjZXRzIERpdmUgcmVxdWlyZXMgV2ViR0wsIGFuZCBpdCBpcyBub3RcbiAgICAgICAgICAgIGVuYWJsZWQgaW4geW91ciBicm93c2VyLiBTZWVcbiAgICAgICAgICAgIFx4M2NhIHJlbFx4M2Qibm9yZWZlcnJlciIgaHJlZlx4M2QiaHR0cDovL3dlYmdscmVwb3J0LmNvbS8iXHgzZVxuICAgICAgICAgICAgV2ViR0wgUmVwb3J0XHgzYy9hXHgzZSBmb3IgZGV0YWlscy5cbiAgICAgICAgICAnKSl9em9vbWVkKCl7Y29uc3Qge3g6YSwKeTpjLGs6ZH09ZDMuZXZlbnQudHJhbnNmb3JtLGY9dGhpcy5zY2FsZS9kO3RoaXMuY2FtZXJhLnRvcCo9Zjt0aGlzLmNhbWVyYS5sZWZ0Kj1mO3RoaXMuY2FtZXJhLnJpZ2h0Kj1mO3RoaXMuY2FtZXJhLmJvdHRvbSo9Zjt0aGlzLmNhbWVyYS5wb3NpdGlvbi5zZXQoLWEvZCxjL2QsdGhpcy5jYW1lcmEucG9zaXRpb24ueik7dGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO3RoaXMuc2NhbGU9ZDt0aGlzLnRyYW5zZm9ybVNWRygpO3RoaXMudXBkYXRlT2JqZWN0VmlzaWJpbGl0eSgpO3RoaXMucXVldWVSZW5kZXJTY2VuZSgpfWNsaWNrZWQoKXt2YXIgYT10aGlzLmVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1kMy5ldmVudDthPXRoaXMuc3ByaXRlTWVzaC5maW5kU3ByaXRlcyh0aGlzLmNhbWVyYS5wb3NpdGlvbi54KyhjLmNsaWVudFgtYS5sZWZ0KS90aGlzLnNjYWxlLHRoaXMuY2FtZXJhLnBvc2l0aW9uLnktKGMuY2xpZW50WS1hLnRvcCkvdGhpcy5zY2FsZSk7CnZhciBkPXt9O2lmKGMuY3RybEtleSlmb3IoYz0wO2M8dGhpcy5lbGVtLnNlbGVjdGVkSW5kaWNlcy5sZW5ndGg7YysrKWRbdGhpcy5lbGVtLnNlbGVjdGVkSW5kaWNlc1tjXV09ITA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylkW2FbY11dPSEwO3RoaXMuZWxlbS5zZXQoInNlbGVjdGVkSW5kaWNlcyIsQXJyYXkuZnJvbShPYmplY3Qua2V5cyhkKS5tYXAoZj0+K2YpKSk7YT1bXTtmb3IoZD0wO2Q8dGhpcy5lbGVtLnNlbGVjdGVkSW5kaWNlcy5sZW5ndGg7ZCsrKWEucHVzaCh0aGlzLmVsZW0uZGF0YVt0aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzW2RdXSk7dGhpcy5lbGVtLnNldCgic2VsZWN0ZWREYXRhIixhKX1zZWxlY3RlZEluZGljZXNVcGRhdGVkKCl7dGhpcy5zcHJpdGVNZXNoJiZ0aGlzLnVwZGF0ZVNlbGVjdGVkQm94ZXMoKX1jb21wYXJlZEluZGljZXNVcGRhdGVkKCl7aWYodGhpcy5zcHJpdGVNZXNoKXt2YXIgYT1bXTtmb3IobGV0IGM9MDtjPHRoaXMuZWxlbS5jb21wYXJlZEluZGljZXMubGVuZ3RoO2MrKylhLnB1c2godGhpcy5lbGVtLmRhdGFbdGhpcy5lbGVtLmNvbXBhcmVkSW5kaWNlc1tjXV0pOwp0aGlzLmVsZW0uc2V0KCJjb21wYXJlZERhdGEiLGEpO3RoaXMudXBkYXRlQ29tcGFyZWRCb3hlcygpfX11cGRhdGVTZWxlY3RlZEJveGVzKCl7dmFyIGE9dGhpcy5lbGVtLnNlbGVjdGVkSW5kaWNlcy5tYXAoZD0+KHt4OnRoaXMuc3ByaXRlTWVzaC5nZXRYKGQpLHk6dGhpcy5zcHJpdGVNZXNoLmdldFkoZCl9KSk7YT10aGlzLnNlbGVjdGVkTGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0ZWQiKS5kYXRhKGEpO3ZhciBjPWEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3RlZCIsITApLmF0dHIoInRyYW5zZm9ybSIsZD0+YHRyYW5zbGF0ZSgkey41KyhkLnh8fDApfSwkey41KyhkLnl8fDApfSkgc2NhbGUoJHszfSlgKS5zdHlsZSgib3BhY2l0eSIsMCk7Yy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtLjUpLmF0dHIoInkiLC0uNSkuYXR0cigid2lkdGgiLDEpLmF0dHIoImhlaWdodCIsMSkuYXR0cigic3Ryb2tlIiwiIzQ4M2QwNiIpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwKInJvdW5kIikuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMykuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtjLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0uNSkuYXR0cigieSIsLS41KS5hdHRyKCJ3aWR0aCIsMSkuYXR0cigiaGVpZ2h0IiwxKS5hdHRyKCJzdHJva2UiLCIjZmFkNDExIikuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoInN0cm9rZS13aWR0aCIsLjE1KS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2M9Yy5tZXJnZShhKTtjLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGQ9PmB0cmFuc2xhdGUoJHsuNSsoZC54fHwwKX0sJHsuNSsoZC55fHwwKX0pIHNjYWxlKCR7Ljh9KWApLnN0eWxlKCJvcGFjaXR5IiwxKTtjLnNlbGVjdEFsbCgicmVjdCIpLmNsYXNzZWQoInJvdGF0ZSIsCiEwKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSk7YS5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX11cGRhdGVDb21wYXJlZEJveGVzKCl7dmFyIGE9dGhpcy5lbGVtLmNvbXBhcmVkSW5kaWNlcy5tYXAoZD0+KHt4OnRoaXMuc3ByaXRlTWVzaC5nZXRYKGQpLHk6dGhpcy5zcHJpdGVNZXNoLmdldFkoZCl9KSk7YT10aGlzLmNvbXBhcmVkTGF5ZXIuc2VsZWN0QWxsKCIuY29tcGFyZWQiKS5kYXRhKGEpO3ZhciBjPWEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb21wYXJlZCIsITApLmF0dHIoInRyYW5zZm9ybSIsZD0+YHRyYW5zbGF0ZSgkey41KyhkLnh8fDApfSwkey41KyhkLnl8fDApfSkgc2NhbGUoJHszfSlgKS5zdHlsZSgib3BhY2l0eSIsMCk7Yy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtLjUpLmF0dHIoInkiLC0uNSkuYXR0cigid2lkdGgiLDEpLmF0dHIoImhlaWdodCIsMSkuYXR0cigic3Ryb2tlIiwiIzQ0ZmY0NCIpLmF0dHIoInN0cm9rZS1saW5lY2FwIiwKInJvdW5kIikuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMykuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtjLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0uNSkuYXR0cigieSIsLS41KS5hdHRyKCJ3aWR0aCIsMSkuYXR0cigiaGVpZ2h0IiwxKS5hdHRyKCJzdHJva2UiLCIjMWQ2YjFkIikuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoInN0cm9rZS13aWR0aCIsLjE1KS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2M9Yy5tZXJnZShhKTtjLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGQ9PmB0cmFuc2xhdGUoJHsuNSsoZC54fHwwKX0sJHsuNSsoZC55fHwwKX0pIHNjYWxlKCR7Ljh9KWApLnN0eWxlKCJvcGFjaXR5IiwxKTtjLnNlbGVjdEFsbCgicmVjdCIpLmNsYXNzZWQoInJvdGF0ZSIsCiEwKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSk7YS5leGl0KCkudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX1maXRUb1ZpZXdwb3J0KCl7Y29uc3QgYT10aGlzLmVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoYS53aWR0aCYmYS5oZWlnaHQpe3RoaXMubGF5b3V0LnZpZXdwb3J0LndpZHRoPWEud2lkdGg7dGhpcy5sYXlvdXQudmlld3BvcnQuaGVpZ2h0PWEuaGVpZ2h0O3RoaXMubGF5b3V0LnBhZGRpbmcuYm90dG9tPXRoaXMuZWxlbS5zY2VuZVBhZGRpbmc7dGhpcy5sYXlvdXQucGFkZGluZy5sZWZ0PXRoaXMuZWxlbS5zY2VuZVBhZGRpbmc7dGhpcy5sYXlvdXQucGFkZGluZy5yaWdodD10aGlzLmVsZW0uc2NlbmVQYWRkaW5nO3RoaXMubGF5b3V0LnBhZGRpbmcudG9wPXRoaXMuZWxlbS5zY2VuZVBhZGRpbmc7dGhpcy5sYXlvdXQuZ3JpZD17Ym90dG9tOjAsbGVmdDowLHJpZ2h0OnRoaXMuZ3JpZC53aWR0aCx0b3A6dGhpcy5ncmlkLmhlaWdodH07CmlmKHRoaXMubGFiZWxzLmxlbmd0aCl7dmFyIGM9MCxkPTAsZj0wLGc9MDt0aGlzLmxhYmVsc0xheWVyLnNlbGVjdEFsbCgiLmxhYmVsIikuZWFjaChmdW5jdGlvbihuKXt2YXIgcD1kMy5zZWxlY3QodGhpcykuc2VsZWN0KCIuY3VycmVudCIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBxPW4uZWxlbWVudE1hcmdpbnx8e2JvdHRvbTowLGxlZnQ6MCxyaWdodDowLHRvcDowfSxyPXAuaGVpZ2h0K3EudG9wK3EuYm90dG9tO3A9cC53aWR0aCtxLmxlZnQrcS5yaWdodDtzd2l0Y2gobi5zaWRlKXtjYXNlIEZwLkJvdHRvbTpjPU1hdGgubWF4KGMscik7YnJlYWs7Y2FzZSBGcC5Ub3A6Zz1NYXRoLm1heChnLHIpO2JyZWFrO2Nhc2UgRnAuTGVmdDpkPU1hdGgubWF4KGQscCk7YnJlYWs7Y2FzZSBGcC5SaWdodDpmPU1hdGgubWF4KGYscCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIFNpZGUuIik7fX0pO3RoaXMubGF5b3V0LnBhZGRpbmcuYm90dG9tKz0KYzt0aGlzLmxheW91dC5wYWRkaW5nLmxlZnQrPWQ7dGhpcy5sYXlvdXQucGFkZGluZy5yaWdodCs9Zjt0aGlzLmxheW91dC5wYWRkaW5nLnRvcCs9Z310aGlzLmxheW91dC5yZWR1Y2VQYWRkaW5nVG9GaXRXaWR0aChhLndpZHRoKTt0aGlzLmxheW91dC5yZWR1Y2VQYWRkaW5nVG9GaXRIZWlnaHQoYS5oZWlnaHQpO3RoaXMuc2NhbGU9dGhpcy5sYXlvdXQuY29tcHV0ZVNjYWxlKCk7dmFyIHtwb3NpdGlvbjpsLGZydXN0dW06a309dGhpcy5sYXlvdXQuY29tcHV0ZUNhbWVyYSgpO3RoaXMuY2FtZXJhLmxlZnQ9ay5sZWZ0O3RoaXMuY2FtZXJhLnJpZ2h0PWsucmlnaHQ7dGhpcy5jYW1lcmEudG9wPWsudG9wO3RoaXMuY2FtZXJhLmJvdHRvbT1rLmJvdHRvbTt0aGlzLmNhbWVyYS5wb3NpdGlvbi5zZXQobC54LGwueSwxMDApO3RoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtkMy5zZWxlY3QodGhpcy5lbGVtKS5jYWxsKHRoaXMuem9vbS50cmFuc2Zvcm0sZDMuem9vbUlkZW50aXR5LnNjYWxlKHRoaXMuc2NhbGUpLnRyYW5zbGF0ZSgtdGhpcy5jYW1lcmEucG9zaXRpb24ueCwKdGhpcy5jYW1lcmEucG9zaXRpb24ueSkpO3RoaXMudHJhbnNmb3JtU1ZHKCk7dGhpcy51cGRhdGVPYmplY3RWaXNpYmlsaXR5KCk7dGhpcy5xdWV1ZVJlbmRlclNjZW5lKCl9ZWxzZSBzZXRUaW1lb3V0KCgpPT50aGlzLmZpdFRvVmlld3BvcnQoKSwxMDApfXpvb21Jbigpe3RoaXMuem9vbS5zY2FsZUJ5KGQzLnNlbGVjdCh0aGlzLmVsZW0pLDEuMSl9em9vbU91dCgpe3RoaXMuem9vbS5zY2FsZUJ5KGQzLnNlbGVjdCh0aGlzLmVsZW0pLDEvMS4xKX10cmFuc2Zvcm1TVkcoKXtjb25zdCBhPS10aGlzLmNhbWVyYS5wb3NpdGlvbi54KnRoaXMuc2NhbGUsYz10aGlzLmNhbWVyYS5wb3NpdGlvbi55KnRoaXMuc2NhbGU7dGhpcy5jZWxsQmFja2dyb3VuZFNWR1Jvb3QuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7YX0sJHtjfSkgc2NhbGUoJHt0aGlzLnNjYWxlfSwkey10aGlzLnNjYWxlfSlgKTt0aGlzLmxhYmVsc0FuZEF4ZXNTVkdSb290LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2F9LCR7Y30pIHNjYWxlKCR7dGhpcy5zY2FsZX0sJHstdGhpcy5zY2FsZX0pYCk7CnRoaXMubGFiZWxzQW5kQXhlc1NWR1Jvb3Quc2VsZWN0QWxsKCIudW5zY2FsZSIpLmF0dHIoInRyYW5zZm9ybSIsYHNjYWxlKCR7MS90aGlzLnNjYWxlfSlgKTt0aGlzLmF4ZXNMYXllci5zZWxlY3RBbGwoIi5heGlzIikuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsZD0+ZC5wYXRoKHRoaXMuc2NhbGUpKS5hdHRyKCJzdHJva2Utd2lkdGgiLGQ9PmQuc3Ryb2tlV2lkdGgodGhpcy5zY2FsZSkpfWlzVmlzaWJsZShhLGMpe3JldHVybiBhLnNob3VsZEJlVmlzaWJsZShjLHRoaXMuc2NhbGUsdGhpcy5jYW1lcmEucG9zaXRpb24sdGhpcy5jYW1lcmEpfXVwZGF0ZU9iamVjdFZpc2liaWxpdHkoKXtjb25zdCBhPXRoaXM7dmFyIGM9dGhpcy5sYWJlbHNMYXllci5zZWxlY3RBbGwoIi5sYWJlbCIpO2NvbnN0IGQ9Yy5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuKHZvaWQgMD09PWcudmlzaWJsZXx8IWcudmlzaWJsZSkmJmEuaXNWaXNpYmxlKGcsdGhpcyl9KS5lYWNoKGc9PmcudmlzaWJsZT0hMCksCmY9Yy5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuKHZvaWQgMD09PWcudmlzaWJsZXx8Zy52aXNpYmxlKSYmIWEuaXNWaXNpYmxlKGcsdGhpcyl9KS5lYWNoKGc9PmcudmlzaWJsZT0hMSk7ZC5zZWxlY3RBbGwoIi5vcGFjaXR5IikudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5hdHRyKCJvcGFjaXR5IiwxKTtmLnNlbGVjdEFsbCgiLm9wYWNpdHkiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLmF0dHIoIm9wYWNpdHkiLDApO2MuZmlsdGVyKGc9PiEhZy5zY2FsZURvd24pLnNlbGVjdEFsbCgiLnNjYWxlIikuYXR0cigidHJhbnNmb3JtIixnPT5gc2NhbGUoJHt0aGlzLnNjYWxlPGcubWluU2NhbGU/dGhpcy5zY2FsZS9nLm1pblNjYWxlOjF9KWApO2M9dGhpcy5heGVzTGF5ZXIuc2VsZWN0QWxsKCIuYXhpcyIpLmVhY2goZnVuY3Rpb24oZyl7Zy52aXNpYmxlPWEuaXNWaXNpYmxlKGcsdGhpcyl9KTtjLmZpbHRlcihnPT4KISFnLnZpc2libGUpLnNlbGVjdCgicGF0aCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDEpO2MuZmlsdGVyKGc9PiFnLnZpc2libGUpLnNlbGVjdCgicGF0aCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApfWFkZFZlcnRpY2FsRmFjZXRMYWJlbHMoYSl7dGhpcy5lbGVtLnZlcnRpY2FsRmFjZXQgaW4gdGhpcy5zdGF0cyYmdGhpcy5ncmlkLmdldENvbHVtbih0aGlzLmdyaWQuaG9yaXpvbnRhbEtleXNbdGhpcy5ncmlkLmhvcml6b250YWxLZXlzLmxlbmd0aC0xXSkuZm9yRWFjaChjPT57Y29uc3QgZD10aGlzLnZlcnRpY2FsRmFjZXRJbmZvLmxhYmVsaW5nRnVuY3Rpb24oYy52ZXJ0aWNhbEtleSksZj1uZXcgc3E7Zi50ZXh0PWQubGFiZWw7Zi54PWMueCtjLndpZHRoO2YueT1jLmNvbnRlbnRZK2MuaW5uZXJIZWlnaHQvCjI7Zi5zaWRlPUZwLlJpZ2h0O2YuY2VsbD1jO2YuYXR0cmlidXRlcz17ImFsaWdubWVudC1iYXNlbGluZSI6Im1pZGRsZSIsZmlsbDoiIzY2NjY2NiIsImZvbnQtc2l6ZSI6cnFbImZvbnQtc2l6ZSJdLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IiwiZm9udC1zdHlsZSI6ZC5zcGVjaWFsPyJpdGFsaWMiOiJub3JtYWwifTtmLm9mZnNldFBvc2l0aW9uPXt4Ojh9O2YubWluU2NhbGU9cnFbImZvbnQtc2l6ZSJdLyhjLmhlaWdodCt0aGlzLmdyaWQuY2VsbE1hcmdpbik7Zi5zY2FsZURvd249ITA7YS5wdXNoKGYpfSl9YWRkSG9yaXpvbnRhbEZhY2V0TGFiZWxzKGEpe3RoaXMuZWxlbS5ob3Jpem9udGFsRmFjZXQgaW4gdGhpcy5zdGF0cyYmdGhpcy5ncmlkLmdldFJvdyh0aGlzLmdyaWQudmVydGljYWxLZXlzW3RoaXMuZ3JpZC52ZXJ0aWNhbEtleXMubGVuZ3RoLTFdKS5mb3JFYWNoKGM9Pntjb25zdCBkPXRoaXMuaG9yaXpvbnRhbEZhY2V0SW5mby5sYWJlbGluZ0Z1bmN0aW9uKGMuaG9yaXpvbnRhbEtleSksCmY9bmV3IHNxO2YudGV4dD1kLmxhYmVsO2YueD1jLmNvbnRlbnRYK2MuaW5uZXJXaWR0aC8yO2YueT1jLnkrYy5oZWlnaHQ7Zi5zaWRlPUZwLlRvcDtmLmNlbGw9YztmLnJvdGF0ZT0tNDU7Zi5hdHRyaWJ1dGVzPXsiYWxpZ25tZW50LWJhc2VsaW5lIjoiaWRlb2dyYXBoaWMiLGZpbGw6IiNkZDY2MjIiLCJmb250LXNpemUiOnJxWyJmb250LXNpemUiXSwidGV4dC1hbmNob3IiOiJzdGFydCIsImZvbnQtc3R5bGUiOmQuc3BlY2lhbD8iaXRhbGljIjoibm9ybWFsIn07Zi5vZmZzZXRQb3NpdGlvbj17eDo4LHk6LTh9O2YubWluU2NhbGU9cnFbImZvbnQtc2l6ZSJdLyhjLndpZHRoK3RoaXMuZ3JpZC5jZWxsTWFyZ2luLzIpO2Yuc2NhbGVEb3duPSEwO2EucHVzaChmKX0pfWFkZFZlcnRpY2FsUG9zaXRpb25pbmdMYWJlbHMoYSl7aWYoInNjYXR0ZXIiPT09dGhpcy5lbGVtLnBvc2l0aW9uTW9kZSYmdGhpcy5lbGVtLnZlcnRpY2FsUG9zaXRpb24gaW4gdGhpcy5zdGF0cyl7dmFyIGM9dGhpcy5zdGF0c1t0aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbl0sCmQ9dGhpcy5mb3JtYXROdW1iZXIoYy5udW1iZXJNaW4pLGY9dGhpcy5mb3JtYXROdW1iZXIoYy5udW1iZXJNYXgpLGc9KGQubGVuZ3RoKzMpLyhkLmxlbmd0aCtmLmxlbmd0aCs2KTt0aGlzLmdyaWQuZWFjaENlbGwobD0+e2lmKGwuaXRlbXMubGVuZ3RoKXtmb3IodmFyIGs9bC5zaWJsaW5ncy5sZWZ0OyEoIWt8fGsuaXRlbXMubGVuZ3RofHxrLnNpYmxpbmdzLmFib3ZlJiZrLnNpYmxpbmdzLmFib3ZlLml0ZW1zLmxlbmd0aCk7KWs9ay5zaWJsaW5ncy5sZWZ0O2s9az9rLmNvbnRlbnRYK2suaW5uZXJXaWR0aDotSW5maW5pdHk7dmFyIG49bC54KzgscD1sLmNvbnRlbnRZLHE9bC5jb250ZW50WStsLmlubmVySGVpZ2h0LHI9bmV3IHNxO3IuaWQ9YCR7bC5jb21wb3VuZEtleX0tbGVmdC1zdGFydGA7ci50ZXh0PWQ7ci54PWwueCs4O3IueT1sLnkrKHRoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb24/ODowKTtyLnNpZGU9RnAuTGVmdDtyLmNlbGw9bDtyLnJvdGF0ZT0tOTA7ci5hdHRyaWJ1dGVzPQp7ImFsaWdubWVudC1iYXNlbGluZSI6ImlkZW9ncmFwaGljIixmaWxsOiIjMjI1NWFhIiwiZm9udC1zaXplIjoxNiwidGV4dC1hbmNob3IiOiJzdGFydCJ9O3Iub2Zmc2V0UG9zaXRpb249e3g6a3EuYm90dG9tLHk6LWtxLnJpZ2h0fTtyLmJvdW5kaW5nQm94PXtib3R0b206cCxsZWZ0OmsscmlnaHQ6bix0b3A6cCtsLmlubmVySGVpZ2h0KihNYXRoLm1heChnLC4xKS0uMDUpfTtyLmVsZW1lbnRNYXJnaW49a3E7YS5wdXNoKHIpO3I9bmV3IHNxO3IuaWQ9YCR7bC5jb21wb3VuZEtleX0tbGVmdC1lbmRgO3IudGV4dD1mO3IueD1sLngrODtyLnk9bC55K2wuaGVpZ2h0O3Iuc2lkZT1GcC5MZWZ0O3IuY2VsbD1sO3Iucm90YXRlPS05MDtyLmF0dHJpYnV0ZXM9eyJhbGlnbm1lbnQtYmFzZWxpbmUiOiJpZGVvZ3JhcGhpYyIsZmlsbDoiIzIyNTVhYSIsImZvbnQtc2l6ZSI6MTYsInRleHQtYW5jaG9yIjoiZW5kIn07ci5vZmZzZXRQb3NpdGlvbj17eDota3EudG9wLHk6LWtxLnJpZ2h0fTtyLmJvdW5kaW5nQm94PQp7Ym90dG9tOnArbC5pbm5lckhlaWdodCooTWF0aC5taW4oZywuOSkrLjA1KSxsZWZ0OmsscmlnaHQ6bix0b3A6cX07ci5lbGVtZW50TWFyZ2luPWtxO2EucHVzaChyKX19KX19YWRkSG9yaXpvbnRhbFBvc2l0aW9uaW5nTGFiZWxzKGEpe2lmKCJzY2F0dGVyIj09PXRoaXMuZWxlbS5wb3NpdGlvbk1vZGUmJnRoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb24gaW4gdGhpcy5zdGF0cyl7dmFyIGM9dGhpcy5zdGF0c1t0aGlzLmVsZW0uaG9yaXpvbnRhbFBvc2l0aW9uXSxkPXRoaXMuZm9ybWF0TnVtYmVyKGMubnVtYmVyTWluKSxmPXRoaXMuZm9ybWF0TnVtYmVyKGMubnVtYmVyTWF4KSxnPShkLmxlbmd0aCszKS8oZC5sZW5ndGgrZi5sZW5ndGgrNik7dGhpcy5ncmlkLmVhY2hDZWxsKGw9PntpZihsLml0ZW1zLmxlbmd0aCl7Zm9yKHZhciBrPWwuc2libGluZ3MuYmVsb3c7ISgha3x8ay5pdGVtcy5sZW5ndGh8fGsuc2libGluZ3MucmlnaHQmJmsuc2libGluZ3MucmlnaHQuaXRlbXMubGVuZ3RoKTspaz0Kay5zaWJsaW5ncy5iZWxvdztrPWs/ay5jb250ZW50WStrLmlubmVySGVpZ2h0Oi1JbmZpbml0eTt2YXIgbj1sLmNvbnRlbnRZLHA9bC5jb250ZW50WCxxPXArbC5pbm5lcldpZHRoLHI9bmV3IHNxO3IuaWQ9YCR7bC5jb21wb3VuZEtleX0tYm90dG9tLXN0YXJ0YDtyLnRleHQ9ZDtyLng9bC54Kyh0aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbj84OjApO3IueT1sLnkrODtyLnNpZGU9RnAuQm90dG9tO3IuY2VsbD1sO3IuYXR0cmlidXRlcz17ImFsaWdubWVudC1iYXNlbGluZSI6ImhhbmdpbmciLGZpbGw6IiMxMTg4NDQiLCJmb250LXNpemUiOjE2LCJ0ZXh0LWFuY2hvciI6InN0YXJ0In07ci5vZmZzZXRQb3NpdGlvbj17eDprcS5sZWZ0LHk6a3EudG9wfTtyLmJvdW5kaW5nQm94PXtib3R0b206ayxsZWZ0OnAscmlnaHQ6cCtsLmlubmVyV2lkdGgqKE1hdGgubWF4KGcsLjEpLS4wNSksdG9wOm59O3IuZWxlbWVudE1hcmdpbj1rcTthLnB1c2gocik7cj1uZXcgc3E7ci5pZD1gJHtsLmNvbXBvdW5kS2V5fS1ib3R0b20tZW5kYDsKci50ZXh0PWY7ci54PWwueCtsLndpZHRoO3IueT1sLnkrODtyLnNpZGU9RnAuQm90dG9tO3IuY2VsbD1sO3IuYXR0cmlidXRlcz17ImFsaWdubWVudC1iYXNlbGluZSI6ImhhbmdpbmciLGZpbGw6IiMxMTg4NDQiLCJmb250LXNpemUiOjE2LCJ0ZXh0LWFuY2hvciI6ImVuZCJ9O3Iub2Zmc2V0UG9zaXRpb249e3g6LWtxLnJpZ2h0LHk6a3EudG9wfTtyLmJvdW5kaW5nQm94PXtib3R0b206ayxsZWZ0OnArbC5pbm5lcldpZHRoKihNYXRoLm1pbihnLC45KSsuMDUpLHJpZ2h0OnEsdG9wOm59O3IuZWxlbWVudE1hcmdpbj1rcTthLnB1c2gocil9fSl9fWRldGVybWluZUxhYmVscygpe2NvbnN0IGE9W107dGhpcy5hZGRWZXJ0aWNhbEZhY2V0TGFiZWxzKGEpO3RoaXMuYWRkSG9yaXpvbnRhbEZhY2V0TGFiZWxzKGEpO3RoaXMuYWRkVmVydGljYWxQb3NpdGlvbmluZ0xhYmVscyhhKTt0aGlzLmFkZEhvcml6b250YWxQb3NpdGlvbmluZ0xhYmVscyhhKTtyZXR1cm4gYX11cGRhdGVDZWxsQmFja2dyb3VuZHMoKXt2YXIgYT0KdGhpcy5ncmlkLmdldENlbGxzKCkuZmlsdGVyKGM9PmMuaXRlbXMubGVuZ3RoKTthPXRoaXMuY2VsbEJhY2tncm91bmRMYXllci5zZWxlY3RBbGwoIi5jZWxsIikuZGF0YShhLGM9PmMuY29tcG91bmRLZXkpO2EuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImNlbGwiKS5hdHRyKCJ4IixjPT5jLmNvbnRlbnRYfHwwKS5hdHRyKCJ5IixjPT5jLmNvbnRlbnRZfHwwKS5hdHRyKCJ3aWR0aCIsYz0+Yy5pbm5lcldpZHRofHwwKS5hdHRyKCJoZWlnaHQiLGM9PmMuaW5uZXJIZWlnaHR8fDApLmF0dHIoImZpbGwiLCIjZjhmOGY5IikuYXR0cigiZmlsbC1vcGFjaXR5IiwwKS5tZXJnZShhKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLmF0dHIoIngiLGM9PmMuY29udGVudFh8fDApLmF0dHIoInkiLGM9PmMuY29udGVudFl8fDApLmF0dHIoIndpZHRoIixjPT5jLmlubmVyV2lkdGh8fDApLmF0dHIoImhlaWdodCIsYz0+Yy5pbm5lckhlaWdodHx8CjApLmF0dHIoImZpbGwtb3BhY2l0eSIsMSk7YS5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5yZW1vdmUoKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApfXVwZGF0ZUF4ZXMoKXtjb25zdCBhPVtdOyJzdGFja2VkIiE9PXRoaXMuZWxlbS5wb3NpdGlvbk1vZGUmJnRoaXMuZ3JpZC5lYWNoQ2VsbChmPT57aWYoZi5pdGVtcy5sZW5ndGgpe2lmKHRoaXMuZWxlbS52ZXJ0aWNhbFBvc2l0aW9uKXtjb25zdCBnPW5ldyBRcChGcC5MZWZ0LGYpO2EucHVzaChnKX10aGlzLmVsZW0uaG9yaXpvbnRhbFBvc2l0aW9uJiYoZj1uZXcgUXAoRnAuQm90dG9tLGYpLGEucHVzaChmKSl9fSk7Y29uc3QgYz10aGlzLmF4ZXNMYXllci5zZWxlY3RBbGwoIi5heGlzIikuZGF0YShhLGY9PmYua2V5KCkpLGQ9Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYXhpcyIpLmF0dHIoIm9wYWNpdHkiLDApO2QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsZj0+CmYucGF0aCh0aGlzLnNjYWxlKSkuYXR0cigic3Ryb2tlIixmPT5mLnNpZGU9PT1GcC5MZWZ0PyIjMjI1NWFhIjoiIzExODg0NCIpLmF0dHIoInN0cm9rZS13aWR0aCIsZj0+Zi5zdHJva2VXaWR0aCh0aGlzLnNjYWxlKSkuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLCJub25lIik7ZC5tZXJnZShjKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLmF0dHIoIm9wYWNpdHkiLDEpO2QubWVyZ2UoYykuc2VsZWN0KCJwYXRoIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5hdHRyKCJkIixmPT5mLnBhdGgodGhpcy5zY2FsZSkpO2MuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikucmVtb3ZlKCkuYXR0cigib3BhY2l0eSIsMCl9dXBkYXRlTGFiZWxzKCl7aWYodGhpcy5zY2FsZSl7dGhpcy5sYWJlbHM9dGhpcy5kZXRlcm1pbmVMYWJlbHMoKTt2YXIgYT0KdGhpcy5sYWJlbHNMYXllci5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEodGhpcy5sYWJlbHMsbD0+bC5pZHx8YCR7bC5zaWRlfS0ke2wudGV4dH1gKTthLmVhY2goZnVuY3Rpb24obCl7Y29uc3Qgaz1kMy5zZWxlY3QodGhpcyksbj1rLnNlbGVjdCgiLmN1cnJlbnQiKTtsLnRleHQhPT1uLnRleHQoKSYmKG4uYXR0cigiZmlsbC1vcGFjaXR5IiwwKSxrLnNlbGVjdCgiLm9sZCIpLmF0dHIoImZpbGwtb3BhY2l0eSIsMSkudGV4dChuLnRleHQoKSkpfSkuc2VsZWN0KCIuY3VycmVudCIpLnRleHQobD0+bC50ZXh0KTt2YXIgYz1sPT5rPT52b2lkIDA9PT1rLmF0dHJpYnV0ZXN8fHZvaWQgMD09PWsuYXR0cmlidXRlc1tsXT9ycVtsXTprLmF0dHJpYnV0ZXNbbF0sZD1hLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInRyYW5zZm9ybSIsbD0+YHRyYW5zbGF0ZSgke2wueH0sJHtsLnl9KWApLGY9ZC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImZsaXAiKS5hdHRyKCJ0cmFuc2Zvcm0iLAoic2NhbGUoMSwtMSkiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInJvdGF0ZSIpLmF0dHIoInRyYW5zZm9ybSIsbD0+InJvdGF0ZSgiKygicm90YXRlImluIGw/bC5yb3RhdGU6MCkrIikiKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInVuc2NhbGUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGBzY2FsZSgkezEvdGhpcy5zY2FsZX0pYCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwb3NpdGlvbiIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwib3BhY2l0eSBzY2FsZSIpLGc9Zi5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm9sZCIpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Zj1mLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY3VycmVudCIpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCkudGV4dChsPT5sLnRleHQpO2Zvcihjb25zdCBsIGluIHJxKXJxLmhhc093blByb3BlcnR5KGwpJiYoZy5hdHRyKGwsYyhsKSksZi5hdHRyKGwsYyhsKSkpO2c9ZC5tZXJnZShhKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsCmw9PmB0cmFuc2xhdGUoJHtsLnh9LCR7bC55fSlgKTtnLnNlbGVjdCgiLnJvdGF0ZSIpLmF0dHIoInRyYW5zZm9ybSIsbD0+InJvdGF0ZSgiKygicm90YXRlImluIGw/bC5yb3RhdGU6MCkrIikiKTtnLmZpbHRlcihsPT4hIWwub2Zmc2V0UG9zaXRpb24pLnNlbGVjdCgiLnBvc2l0aW9uIikuYXR0cigidHJhbnNmb3JtIixsPT5gdHJhbnNsYXRlKCR7bC5vZmZzZXRQb3NpdGlvbi54fHwwfSwke2wub2Zmc2V0UG9zaXRpb24ueXx8MH0pYCk7ZD1nLnNlbGVjdCgiLm9sZCIpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Zz1nLnNlbGVjdCgiLmN1cnJlbnQiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDEpO2Zvcihjb25zdCBsIGluIHJxKXJxLmhhc093blByb3BlcnR5KGwpJiYoZC5hdHRyKGwsYyhsKSksZy5hdHRyKGwsYyhsKSkpO2EuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikucmVtb3ZlKCkuc2VsZWN0KCIuY3VycmVudCIpLmF0dHIoImZpbGwtb3BhY2l0eSIsCjApfX1kYXRhQ2hhbmdlKCl7Y29uc3QgYT10aGlzLmVsZW0uZGF0YTtpZihhJiZhLmxlbmd0aCl7dGhpcy5yZXNpemVIYW5kbGVyKCk7dGhpcy5zdGF0cz1ocShhKTtpZih0aGlzLml0ZW1zKWlmKHRoaXMuaXRlbXMubGVuZ3RoIT09YS5sZW5ndGgpdGhpcy5pbml0aWFsaXplU3ByaXRlTWVzaCgpLHRoaXMudXBkYXRlSW1hZ2VGaWVsZE5hbWUoKTtlbHNlIGZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKXRoaXMuaXRlbXNbY10uZGF0YT1hW2NdO2Vsc2UgdGhpcy5pbml0aWFsaXplU3ByaXRlTWVzaCgpLHRoaXMucGlja0NvbG9yQnlGaWVsZCgpLHRoaXMucGlja1RleHREcmF3aW5nRmllbGQoKTt0aGlzLnVwZGF0ZUdyaWRGYWNldGluZygpO3RoaXMudXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMoKTt0aGlzLnVwZGF0ZUNvbG9ycygpfX1pbml0aWFsaXplU3ByaXRlTWVzaCgpe3RoaXMuc3ByaXRlTWVzaCYmKHRoaXMuc2NlbmUucmVtb3ZlKHRoaXMuc3ByaXRlTWVzaCksdGhpcy5zcHJpdGVNZXNoLnNwcml0ZUF0bGFzLmNsZWFyUXVldWVzKCksCmRlbGV0ZSB0aGlzLnNwcml0ZU1lc2gpO2NvbnN0IGE9dGhpcy5lbGVtLmRhdGEsYz1hLmxlbmd0aDt2YXIgZD10aGlzLmVsZW0uc3ByaXRlSW1hZ2VXaWR0aCxmPXRoaXMuZWxlbS5zcHJpdGVJbWFnZUhlaWdodDtjb25zdCBnPWQvZjt0aGlzLnNwcml0ZU1lc2g9bmV3IFpwKGMsZCxmKTt0aGlzLnNjZW5lLmFkZCh0aGlzLnNwcml0ZU1lc2gpO3RoaXMuc3ByaXRlTWVzaC5zcHJpdGVBdGxhcy5vbkRyYXdGaW5pc2hlZD0oKT0+dGhpcy5xdWV1ZVJlbmRlclNjZW5lKCk7dGhpcy5pdGVtcz1bXTtkPU1hdGguY2VpbChNYXRoLnNxcnQoYykpO2Y9TWF0aC5jZWlsKGMvZCk7Zm9yKGxldCBsPTA7bDxjO2wrKyl7Y29uc3Qgaz10aGlzLnNwcml0ZU1lc2guY3JlYXRlU3ByaXRlKCk7ay54PWQvMjtrLnk9Zi8yO2sub3BhY2l0eT0wO2sudGltZXN0YW1wPURhdGUubm93KCk7ay5yZWJhc2Uoay50aW1lc3RhbXApO3RoaXMuaXRlbXMucHVzaCh7c3ByaXRlOmssZGF0YTphW2xdfSl9dGhpcy5ncmlkPQpuZXcgUHAodGhpcy5pdGVtcyk7dGhpcy5ncmlkLmNlbGxNYXJnaW49MTt0aGlzLmdyaWQuaXRlbUFzcGVjdFJhdGlvPWc7dGhpcy5ncmlkLml0ZW1Qb3NpdGlvblNldHRlcj0obCxrLG4pPT57Y29uc3QgcD1EYXRlLm5vdygpO2wuc3ByaXRlLnJlYmFzZShwKTtsLnNwcml0ZS54PWs7bC5zcHJpdGUueT1uO2wuc3ByaXRlLm9wYWNpdHk9MTtsLnNwcml0ZS50aW1lc3RhbXA9cCt0aGlzLmVsZW0udHdlZW5EdXJhdGlvbjt0aGlzLnJlbmRlclVudGlsKGwuc3ByaXRlLnRpbWVzdGFtcCl9fWZpbHRlcmVkRGF0YUluZGljZXNDaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbS5maWx0ZXJlZERhdGFJbmRpY2VzLGM9W107aWYoYSlmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGY9YVtkXTtmPHRoaXMuaXRlbXMubGVuZ3RoJiYoY1tmXT0hMCl9ZD1bXTtmPVtdO2NvbnN0IGc9RGF0ZS5ub3coKSxsPWcrdGhpcy5lbGVtLnR3ZWVuRHVyYXRpb247Zm9yKGxldCBrPTA7azx0aGlzLml0ZW1zLmxlbmd0aDtrKyspe2NvbnN0IG49CnRoaXMuaXRlbXNba107IWF8fGNba10/KGQucHVzaChuLmRhdGEpLGYucHVzaChuKSxuLnNwcml0ZS5vcGFjaXR5fHwobi5zcHJpdGUucmViYXNlKGcpLG4uc3ByaXRlLnRpbWVzdGFtcD1sLG4uc3ByaXRlLm9wYWNpdHk9MSkpOjA8bi5zcHJpdGUub3BhY2l0eSYmKG4uc3ByaXRlLnJlYmFzZShnKSxuLnNwcml0ZS50aW1lc3RhbXA9bCxuLnNwcml0ZS5vcGFjaXR5PTApfXRoaXMucmVuZGVyVW50aWwobCk7dGhpcy5zdGF0cz1ocShkKTt0aGlzLmdyaWQuaXRlbXM9Zjt0aGlzLnVwZGF0ZUdyaWRGYWNldGluZygpO3RoaXMudXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMoKX1waWNrQ29sb3JCeUZpZWxkKCl7bGV0IGE9bnVsbCxjPUluZmluaXR5O2Zvcihjb25zdCBkIGluIHRoaXMuc3RhdHMpaWYodGhpcy5zdGF0cy5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgZj10aGlzLnN0YXRzW2RdLGc9TWF0aC5hYnMoZi51bmlxdWVDb3VudC1ucS5sZW5ndGgpOzE8Zi51bmlxdWVDb3VudCYmZzxjJiYKKGE9ZCxjPWcpfWlzRmluaXRlKGMpJiZhIGluIHRoaXMuc3RhdHMmJih0aGlzLmF1dG9Db2xvckJ5PSEwLHRoaXMuZWxlbS5zZXQoImNvbG9yQnkiLGEpKX1waWNrVGV4dERyYXdpbmdGaWVsZCgpe2xldCBhPSIiLGM9LUluZmluaXR5O2Zvcihjb25zdCBmIGluIHRoaXMuc3RhdHMpaWYodGhpcy5zdGF0cy5oYXNPd25Qcm9wZXJ0eShmKSl7dmFyIGQ9dGhpcy5zdGF0c1tmXTtkPWQuc3RyaW5nQ291bnQrZC5zdHJpbmdMZW5ndGhzQ291bnQtZC50b3RhbENvdW50O2Q+YyYmKGE9ZixjPWQpfWlzRmluaXRlKGMpJiZhIGluIHRoaXMuc3RhdHMmJnRoaXMuZWxlbS5zZXQoImltYWdlRmllbGROYW1lIixhKX1xdWV1ZUF0bGFzVXJsQ2hhbmdlKCl7dGhpcy5hdGxhc1VybENoYW5nZVRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy5hdGxhc1VybENoYW5nZVRpbWVyKTt0aGlzLmF0bGFzVXJsQ2hhbmdlVGltZXI9c2V0VGltZW91dCgoKT0+e3RoaXMuYXRsYXNVcmxDaGFuZ2VUaW1lciYmdGhpcy5hdGxhc1VybENoYW5nZSgpfSwKMTAwKX1hdGxhc1VybENoYW5nZSgpe2NsZWFyVGltZW91dCh0aGlzLmF0bGFzVXJsQ2hhbmdlVGltZXIpO2RlbGV0ZSB0aGlzLmF0bGFzVXJsQ2hhbmdlVGltZXI7aWYodGhpcy5zcHJpdGVNZXNoKXt2YXIgYT10aGlzLmVsZW0uYXRsYXNVcmw7YSYmYS5sZW5ndGgmJmEhPT10aGlzLmxhc3RBdGxhc1VybCYmKHRoaXMubGFzdEF0bGFzVXJsPWEsdGhpcy5yZXNldFNwcml0ZXNUb0RlZmF1bHRUZXh0dXJlKCksdGhpcy5zcHJpdGVNZXNoLnNwcml0ZUF0bGFzLnNldEF0bGFzVXJsKGEsdGhpcy5lbGVtLmNyb3NzT3JpZ2luLCgpPT57Y29uc3QgYz10aGlzLmVsZW0uZGF0YSxkPURhdGUubm93KCksZj1kK3RoaXMuZWxlbS5mYWRlRHVyYXRpb247Zm9yKGxldCBnPTA7YyYmZzxjLmxlbmd0aDtnKyspdGhpcy5zcHJpdGVNZXNoLnN3aXRjaFRleHR1cmVzKGcsZCxmKTt0aGlzLnJlbmRlclVudGlsKGYpO3RoaXMuaWdub3JlQ2hhbmdlPSEwO3RoaXMuZWxlbS5zZXQoImltYWdlRmllbGROYW1lIiwKIiIpO2RlbGV0ZSB0aGlzLmlnbm9yZUNoYW5nZTt0aGlzLmF1dG9Db2xvckJ5JiYodGhpcy5hdXRvQ29sb3JCeT0hMSx0aGlzLmVsZW0uc2V0KCJjb2xvckJ5IiwiIikpfSkpfWVsc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuYXRsYXNVcmxDaGFuZ2UuYmluZCh0aGlzKSl9c3ByaXRlVXJsQ2hhbmdlKCl7Y29uc3QgYT10aGlzLmVsZW0uc3ByaXRlVXJsO2lmKGEpaWYodGhpcy5zcHJpdGVNZXNoKXtjb25zdCBjPW5ldyBJbWFnZTt2b2lkIDAhPT10aGlzLmVsZW0uY3Jvc3NPcmlnaW4mJihjLmNyb3NzT3JpZ2luPXRoaXMuZWxlbS5jcm9zc09yaWdpbik7Yy5vbmxvYWQ9KCk9Pntjb25zdCBkPXRoaXMuc3ByaXRlTWVzaC5kZWZhdWx0VGV4dHVyZUNhbnZhcyxmPWQuZ2V0Q29udGV4dCgiMmQiKTtmLmNsZWFyUmVjdCgwLDAsZC53aWR0aCxkLmhlaWdodCk7Zi5kcmF3SW1hZ2UoYywwLDAsZC53aWR0aCxkLmhlaWdodCk7dGhpcy5zcHJpdGVNZXNoLmRlZmF1bHRUZXh0dXJlLm5lZWRzVXBkYXRlPQohMDt0aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKX07Yy5zcmM9YX1lbHNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnNwcml0ZVVybENoYW5nZS5iaW5kKHRoaXMpKX11cGRhdGVHcmlkU3RhY2tpbmcoKXsic3RhY2tlZCI9PT10aGlzLmVsZW0ucG9zaXRpb25Nb2RlJiYodGhpcy5ncmlkLmNvbXB1dGVJdGVtUG9zaXRpb249TXAodGhpcy5lbGVtLnZlcnRpY2FsRmFjZXQ/Im1pZGRsZSI6ImJvdHRvbSIsdGhpcy5lbGVtLmhvcml6b250YWxGYWNldD8ibWlkZGxlIjoicmlnaHQiKSl9dXBkYXRlR3JpZEZhY2V0aW5nKCl7aWYodGhpcy5ncmlkKXt0aGlzLnVwZGF0ZUdyaWRTdGFja2luZygpO3ZhciBhPXRoaXMudmVydGljYWxGYWNldEluZm89dGhpcy5nZW5lcmF0ZUZhY2V0aW5nSW5mbyh0aGlzLmVsZW0udmVydGljYWxGYWNldCx0aGlzLmVsZW0udmVydGljYWxCdWNrZXRzLHRoaXMuZWxlbS52ZXJ0aWNhbEJhZ09mV29yZHMsITApO3RoaXMuZ3JpZC52ZXJ0aWNhbEZhY2V0PWEuZmFjZXRpbmdGdW5jdGlvbjsKdGhpcy5ncmlkLnZlcnRpY2FsS2V5Q29tcGFyZT1hLmtleUNvbXBhcmVGdW5jdGlvbjthPXRoaXMuaG9yaXpvbnRhbEZhY2V0SW5mbz10aGlzLmdlbmVyYXRlRmFjZXRpbmdJbmZvKHRoaXMuZWxlbS5ob3Jpem9udGFsRmFjZXQsdGhpcy5lbGVtLmhvcml6b250YWxCdWNrZXRzLHRoaXMuZWxlbS5ob3Jpem9udGFsQmFnT2ZXb3JkcywhMSk7dGhpcy5ncmlkLmhvcml6b250YWxGYWNldD1hLmZhY2V0aW5nRnVuY3Rpb247dGhpcy5ncmlkLmhvcml6b250YWxLZXlDb21wYXJlPWEua2V5Q29tcGFyZUZ1bmN0aW9uO3RoaXMuZWxlbS5maXRHcmlkQXNwZWN0UmF0aW9Ub1ZpZXdwb3J0PyhhPXRoaXMuZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmdyaWQudGFyZ2V0R3JpZEFzcGVjdFJhdGlvPWEmJmEud2lkdGgmJmEuaGVpZ2h0P2Eud2lkdGgvYS5oZWlnaHR8fDE6MSk6dGhpcy5ncmlkLnRhcmdldEdyaWRBc3BlY3RSYXRpbz0xO3RoaXMuZ3JpZC5hcnJhbmdlKCk7dGhpcy51cGRhdGVDZWxsQmFja2dyb3VuZHMoKTsKdGhpcy51cGRhdGVBeGVzKCk7dGhpcy51cGRhdGVMYWJlbHMoKTt0aGlzLnVwZGF0ZVNlbGVjdGVkQm94ZXMoKTt0aGlzLnVwZGF0ZUNvbXBhcmVkQm94ZXMoKTt0aGlzLmZpdFRvVmlld3BvcnQoKX19dXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMoKXtpZih0aGlzLmdyaWQpe3RoaXMudXBkYXRlR3JpZFN0YWNraW5nKCk7dmFyIGE9dGhpcy5ncmlkLmNlbGxQYWRkaW5nLGM9T3AuVGlnaHQsZD1PcC5Vbmlmb3JtLGY9ITE7aWYoInN0YWNrZWQiPT09dGhpcy5lbGVtLnBvc2l0aW9uTW9kZSlmPXRoaXMuZ3JpZC52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQhPT1jfHx0aGlzLmdyaWQuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQhPT1jLHRoaXMuZ3JpZC52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9Yyx0aGlzLmdyaWQuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQ9Yyx0aGlzLmdyaWQuY2VsbFBhZGRpbmcudG9wPTAsdGhpcy5ncmlkLmNlbGxQYWRkaW5nLmxlZnQ9MCx0aGlzLmdyaWQuY2VsbFBhZGRpbmcucmlnaHQ9CjAsdGhpcy5ncmlkLmNlbGxQYWRkaW5nLmJvdHRvbT0wLHRoaXMuZ3JpZC5taW5DZWxsQXNwZWN0UmF0aW89MCx0aGlzLmdyaWQubWF4Q2VsbEFzcGVjdFJhdGlvPUluZmluaXR5O2Vsc2V7dGhpcy5lbGVtLnZlcnRpY2FsUG9zaXRpb24/KGY9dGhpcy5ncmlkLnZlcnRpY2FsR3JpZEFsaWdubWVudCE9PWQsdGhpcy5ncmlkLnZlcnRpY2FsR3JpZEFsaWdubWVudD1kKTooZj10aGlzLmdyaWQudmVydGljYWxHcmlkQWxpZ25tZW50IT09Yyx0aGlzLmdyaWQudmVydGljYWxHcmlkQWxpZ25tZW50PWMpO3RoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb24/KGY9Znx8dGhpcy5ncmlkLmhvcml6b250YWxHcmlkQWxpZ25tZW50IT09ZCx0aGlzLmdyaWQuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQ9ZCk6KGY9Znx8dGhpcy5ncmlkLmhvcml6b250YWxHcmlkQWxpZ25tZW50IT09Yyx0aGlzLmdyaWQuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQ9Yyk7Y29uc3QgZz10aGlzLmdlbmVyYXRlUG9zaXRpb25GdW5jdGlvbih0aGlzLmVsZW0uaG9yaXpvbnRhbFBvc2l0aW9uKXx8CktwLGw9dGhpcy5nZW5lcmF0ZVBvc2l0aW9uRnVuY3Rpb24odGhpcy5lbGVtLnZlcnRpY2FsUG9zaXRpb24pfHxMcDt0aGlzLmdyaWQuY29tcHV0ZUl0ZW1Qb3NpdGlvbj0oayxuLHAscSk9Pih7eDpnKGssbixwLHEpLHk6bChrLG4scCxxKX0pO2M9dGhpcy5lbGVtLnZlcnRpY2FsUG9zaXRpb24/ODowO2Q9dGhpcy5lbGVtLmhvcml6b250YWxQb3NpdGlvbj84OjA7Zj1mfHwwIT09YS50b3B8fGMhPT1hLmxlZnR8fDAhPT1hLnJpZ2h0fHxkIT09YS5ib3R0b207dGhpcy5ncmlkLmNlbGxQYWRkaW5nLnRvcD0wO3RoaXMuZ3JpZC5jZWxsUGFkZGluZy5yaWdodD0wO3RoaXMuZ3JpZC5jZWxsUGFkZGluZy5sZWZ0PWM7dGhpcy5ncmlkLmNlbGxQYWRkaW5nLmJvdHRvbT1kO3RoaXMuZ3JpZC5taW5DZWxsQXNwZWN0UmF0aW89MTt0aGlzLmdyaWQubWF4Q2VsbEFzcGVjdFJhdGlvPTJ9Zj8odGhpcy5ncmlkLmFycmFuZ2UoKSx0aGlzLnVwZGF0ZUNlbGxCYWNrZ3JvdW5kcygpKTp0aGlzLmdyaWQucG9zaXRpb25JdGVtcygpOwp0aGlzLnVwZGF0ZUF4ZXMoKTt0aGlzLnVwZGF0ZUxhYmVscygpO3RoaXMudXBkYXRlU2VsZWN0ZWRCb3hlcygpO3RoaXMudXBkYXRlQ29tcGFyZWRCb3hlcygpO3RoaXMuZml0VG9WaWV3cG9ydCgpfX1nZXRQYWxldHRlU291cmNlKCl7c3dpdGNoKHRoaXMuZWxlbS5wYWxldHRlQ2hvaWNlKXtjYXNlICJ3YXJtIjpyZXR1cm4gcHE7Y2FzZSAiY29vbCI6cmV0dXJuIG9xO2Nhc2UgImFzc2lzdCI6cmV0dXJuIHFxO2RlZmF1bHQ6cmV0dXJuIG5xfX11cGRhdGVTY2FsYXJQYWxldHRlKCl7Y29uc3QgYT10aGlzLmVsZW0uY29sb3JCeSxjPXRoaXMuc3RhdHNbYV07dmFyIGQ9dGhpcy5ncmlkLml0ZW1zLGY9ZDMucmdiKCIjQTUyNzE0IiksZz1kMy5zY2FsZUxpbmVhcigpO2cuZG9tYWluKFtjLm51bWJlck1pbixjLm51bWJlck1heF0pLnJhbmdlKFsid2hpdGUiLCIjMUMzQUE5Il0pO2NvbnN0IGw9W107Zm9yKHZhciBrPTA7azxkLmxlbmd0aDtrKyspe3ZhciBuPWRba107bj1hIGluIG4uZGF0YT8Kbi5kYXRhW2FdOk5hTjtuPSJudW1iZXIiIT09dHlwZW9mIG58fGlzTmFOKG4pP2Y6ZDMucmdiKGcobikpO2wucHVzaChuKX1kPXRoaXMuZ2VuZXJhdGVGYWNldGluZ0luZm8oYSw1LCExLCExKS5sYWJlbGluZ0Z1bmN0aW9uO2Y9ZDMuc2NhbGVMaW5lYXIoKTtmLmRvbWFpbihbMCw0XSkucmFuZ2UoWyJ3aGl0ZSIsIiMxQzNBQTkiXSk7Zz1bXTtmb3Ioaz00OzA8PWs7ay0tKW49ZChrKSxnLnB1c2goe2tleTprLGNvbG9yOmYoayksY29udGVudDpufSk7KGMub3RoZXJDb3VudHx8Yy5zdHJpbmdDb3VudHx8Yy50b3RhbENvdW50PHRoaXMuZ3JpZC5pdGVtcy5sZW5ndGgpJiZnLnB1c2goe2tleTpOYU4sY29sb3I6IiNBNTI3MTQiLGNvbnRlbnQ6e2xhYmVsOiJtaXNzaW5nIixzcGVjaWFsOiEwfX0pO3RoaXMuZWxlbS5zZXQoInBhbGV0dGUiLGcpO3RoaXMuZ3JpZC5jZWxsSXRlbUNvbXBhcmF0b3I9KHAscSk9PntpZighKGEgaW4gcC5kYXRhfHxhIGluIHEuZGF0YSkpcmV0dXJuIDA7aWYoIShhIGluCnAuZGF0YSkpcmV0dXJuLTE7aWYoIShhIGluIHEuZGF0YSkpcmV0dXJuIDE7cD1wLmRhdGFbYV07cT1xLmRhdGFbYV07aWYocD09PXEpcmV0dXJuIDA7Y29uc3Qgcj0ibnVtYmVyIiE9PXR5cGVvZiBwfHxpc05hTihwKSx0PSJudW1iZXIiIT09dHlwZW9mIHF8fGlzTmFOKHEpO3JldHVybiByJiZ0PzA6cj8tMTp0PzE6cC1xfTtyZXR1cm4gbH11cGRhdGVDYXRlZ29yaWNhbFBhbGV0dGUoYSl7Y29uc3QgYz10aGlzLmVsZW0uY29sb3JCeSxkPXRoaXMuc3RhdHNbY10sZj10aGlzLmdyaWQuaXRlbXMsZz1PYmplY3Qua2V5cyhkLnZhbHVlSGFzaCk7dGhpcy5lbGVtLnN0YWJsZUNvbG9ycz9nLnNvcnQoKTpnLnNvcnQoKHQsdik9PmQudmFsdWVIYXNoW3ZdLmNvdW50LWQudmFsdWVIYXNoW3RdLmNvdW50KTtjb25zdCBsPU1hdGgubWluKGEubGVuZ3RoLGcubGVuZ3RoKSxrPWcuc2xpY2UoMCxsKS5yZWR1Y2UoKHQsdix5KT0+e3Rbdl09eTtyZXR1cm4gdH0se30pLG49ZDMucmdiKCIjRjBGMEYwIiksCnA9YS5tYXAodD0+ZDMucmdiKHQpKTtsZXQgcT0hMTtjb25zdCByPVtdO2ZvcihsZXQgdD0wO3Q8Zi5sZW5ndGg7dCsrKXtjb25zdCB2PWFxKGZbdF0uZGF0YVtjXSk7cT1xfHwhKHYgaW4gayk7ci5wdXNoKHBba1t2XV18fG4pfWE9YS5zbGljZSgwLGwpLm1hcCgodCx2KT0+e3Y9ZC52YWx1ZUhhc2hbZ1t2XV0udmFsdWU7cmV0dXJue2tleTp2LGNvbG9yOnQsY29udGVudDp7bGFiZWw6disiIixzcGVjaWFsOiJudW1iZXIiIT09dHlwZW9mIHYmJiJzdHJpbmciIT09dHlwZW9mIHZ8fHYgaW4gbHF9fX0pO3EmJmEucHVzaCh7a2V5Om51bGwsY29sb3I6IiNGMEYwRjAiLGNvbnRlbnQ6e2xhYmVsOiJvdGhlciIsc3BlY2lhbDohMH19KTt0aGlzLmVsZW0uc2V0KCJwYWxldHRlIixhKTt0aGlzLmdyaWQuY2VsbEl0ZW1Db21wYXJhdG9yPSh0LHYpPT57aWYoIShjIGluIHQuZGF0YXx8YyBpbiB2LmRhdGEpKXJldHVybiAwO2lmKCEoYyBpbiB0LmRhdGEpKXJldHVybiAxO2lmKCEoYyBpbiB2LmRhdGEpKXJldHVybi0xOwp0PXQuZGF0YVtjXTt2PXYuZGF0YVtjXTtpZih0PT09dilyZXR1cm4gMDt0PWFxKHQpO3Y9YXEodik7cmV0dXJuIHQgaW4ga3x8diBpbiBrP3QgaW4gaz92IGluIGs/a1t0XS1rW3ZdOi0xOjE6MH07cmV0dXJuIHJ9dXBkYXRlQ29sb3JzKCl7aWYodGhpcy5ncmlkKXt2YXIgYT10aGlzLmVsZW0uY29sb3JCeTtpZihhIGluIHRoaXMuc3RhdHMpe2E9dGhpcy5zdGF0c1thXTt2YXIgYz10aGlzLmdldFBhbGV0dGVTb3VyY2UoKTthPWEudW5pcXVlQ291bnQ+Yy5sZW5ndGgmJmEuaXNOdW1lcmljKCk/dGhpcy51cGRhdGVTY2FsYXJQYWxldHRlKCk6dGhpcy51cGRhdGVDYXRlZ29yaWNhbFBhbGV0dGUoYyk7Yz10aGlzLmdyaWQuaXRlbXM7dmFyIGQ9RGF0ZS5ub3coKSxmPWQrdGhpcy5lbGVtLnR3ZWVuRHVyYXRpb247Zm9yKGxldCBnPTA7ZzxjLmxlbmd0aDtnKyspe2NvbnN0IGw9Y1tnXSxrPWFbZ107bC5zcHJpdGUucmViYXNlKGQpO2wuc3ByaXRlLnI9ay5yO2wuc3ByaXRlLmc9ay5nO2wuc3ByaXRlLmI9CmsuYjtsLnNwcml0ZS5hPTE4MDtsLnNwcml0ZS50aW1lc3RhbXA9Zn10aGlzLnJlbmRlclVudGlsKGYpO3RoaXMudXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnNBZnRlckNvbG9yQ2hhbmdlKCl9ZWxzZSB0aGlzLmNsZWFyQ29sb3JzKCl9fXVwZGF0ZUdyaWRJdGVtUG9zaXRpb25zQWZ0ZXJDb2xvckNoYW5nZSgpeyJzdGFja2VkIiE9PXRoaXMuZWxlbS5wb3NpdGlvbk1vZGUmJnRoaXMuZWxlbS52ZXJ0aWNhbFBvc2l0aW9uJiZ0aGlzLmVsZW0uaG9yaXpvbnRhbFBvc2l0aW9ufHx0aGlzLnVwZGF0ZUdyaWRJdGVtUG9zaXRpb25zKCl9Y2xlYXJDb2xvcnMoKXtjb25zdCBhPXRoaXMuZ3JpZC5pdGVtcyxjPURhdGUubm93KCksZD1jK3RoaXMuZWxlbS50d2VlbkR1cmF0aW9uO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKXtjb25zdCBnPWFbZl07Zy5zcHJpdGUucmViYXNlKGMpO2cuc3ByaXRlLnI9MDtnLnNwcml0ZS5nPTA7Zy5zcHJpdGUuYj0wO2cuc3ByaXRlLmE9MDtnLnNwcml0ZS50aW1lc3RhbXA9CmR9dGhpcy5yZW5kZXJVbnRpbChkKTt0aGlzLmVsZW0uc2V0KCJwYWxldHRlIixbXSk7dGhpcy5ncmlkLmNlbGxJdGVtQ29tcGFyYXRvciYmKHRoaXMuZ3JpZC5jZWxsSXRlbUNvbXBhcmF0b3I9bnVsbCx0aGlzLnVwZGF0ZUdyaWRJdGVtUG9zaXRpb25zQWZ0ZXJDb2xvckNoYW5nZSgpKX1yZXNldFNwcml0ZXNUb0RlZmF1bHRUZXh0dXJlKCl7Y29uc3QgYT10aGlzLmdyaWQuaXRlbXM7dGhpcy5zcHJpdGVNZXNoLnNwcml0ZUF0bGFzLmNsZWFyUXVldWVzKCk7Y29uc3QgYz1EYXRlLm5vdygpLGQ9Yyt0aGlzLmVsZW0uZmFkZUR1cmF0aW9uO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKXtjb25zdCBnPWFbZl07MDxnLnNwcml0ZS50ZXh0dXJlSW5kZXgmJmcuc3ByaXRlLnN3aXRjaFRleHR1cmVzKGMsZCl9dGhpcy5yZW5kZXJVbnRpbChkKX11cGRhdGVJbWFnZUZpZWxkTmFtZSgpe2lmKCF0aGlzLmlnbm9yZUNoYW5nZSYmdGhpcy5ncmlkKXt0aGlzLnJlc2V0U3ByaXRlc1RvRGVmYXVsdFRleHR1cmUoKTsKdmFyIGE9dGhpcy5lbGVtLmltYWdlRmllbGROYW1lO2lmKGEgaW4gdGhpcy5zdGF0cyl7dmFyIGM9dGhpcy5ncmlkLml0ZW1zO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtjb25zdCB7c3ByaXRlOmYsZGF0YTpnfT1jW2RdO2Yuc2V0U3ByaXRlSW1hZ2VEYXRhKHt0eXBlOiJ0ZXh0IixkYXRhOm1xKGdbYV0pLmxhYmVsfSwoKT0+e2NvbnN0IGw9RGF0ZS5ub3coKTtmLmJhc2VUZXh0dXJlVGltZXN0YW1wPWw7Zi5iYXNlVGV4dHVyZUluZGV4PTA7Zi50ZXh0dXJlVGltZXN0YW1wPWwrdGhpcy5lbGVtLnR3ZWVuRHVyYXRpb247Zi50ZXh0dXJlSW5kZXg9MTt0aGlzLnJlbmRlclVudGlsKGYudGV4dHVyZVRpbWVzdGFtcCl9KX19ZWxzZSBkZWxldGUgdGhpcy5sYXN0QXRsYXNVcmwsdGhpcy5xdWV1ZUF0bGFzVXJsQ2hhbmdlKCl9fWdlbmVyYXRlUG9zaXRpb25GdW5jdGlvbihhKXtjb25zdCBjPXRoaXMuc3RhdHNbYV07aWYoIWN8fCFjLmlzTnVtZXJpYygpKXJldHVybiBudWxsO2NvbnN0IGQ9CmMubnVtYmVyTWF4LWMubnVtYmVyTWluO3JldHVybiBmPT4oZi5kYXRhW2FdLWMubnVtYmVyTWluKS9kfWdlbmVyYXRlRmFjZXRpbmdJbmZvKGEsYyxkLGYpe2lmKCEoYSBpbiB0aGlzLnN0YXRzKSlyZXR1cm57ZmFjZXRpbmdGdW5jdGlvbjooKT0+bnVsbCxrZXlDb21wYXJlRnVuY3Rpb246KCk9PjAsbGFiZWxpbmdGdW5jdGlvbjptcX07Y29uc3QgZz10aGlzLnN0YXRzW2FdO2lmKGcud29yZFRyZWUmJjE8Zy53b3JkVHJlZS5oaWdoZXN0TGV2ZWwmJmQpcmV0dXJuIHRoaXMuZ2VuZXJhdGVCYWdPZldvcmRzRmFjZXRpbmdJbmZvKGEsYyxmKTtpZihnLnVuaXF1ZUNvdW50PD1jKXJldHVybntmYWNldGluZ0Z1bmN0aW9uOms9PmEgaW4gay5kYXRhP2suZGF0YVthXTpudWxsLGtleUNvbXBhcmVGdW5jdGlvbjpnLmlzTnVtZXJpYygpP0pwOmY/SXA6SHAsbGFiZWxpbmdGdW5jdGlvbjptcX07aWYoZy5pc051bWVyaWMoKSYmZy5udW1iZXJNYXghPT1nLm51bWJlck1pbilyZXR1cm4gdGhpcy5nZW5lcmF0ZU51bWVyaWNGYWNldGluZ0luZm8oYSwKYyk7ZD1PYmplY3Qua2V5cyhnLnZhbHVlSGFzaCk7ZC5zb3J0KChrLG4pPT5nLnZhbHVlSGFzaFtuXS5jb3VudC1nLnZhbHVlSGFzaFtrXS5jb3VudCk7Y29uc3QgbD1kLnNsaWNlKDAsYykucmVkdWNlKChrLG4pPT57a1tuXT0hMDtyZXR1cm4ga30se30pO3JldHVybntmYWNldGluZ0Z1bmN0aW9uOms9PntpZighKGEgaW4gay5kYXRhKSlyZXR1cm4gbnVsbDtrPWsuZGF0YVthXTtyZXR1cm4gYXEoaylpbiBsP2s6Ilx1ZmZmY09USEVSXHVmZmZjIn0sa2V5Q29tcGFyZUZ1bmN0aW9uOmY/SXA6SHAsbGFiZWxpbmdGdW5jdGlvbjptcX19Z2VuZXJhdGVCYWdPZldvcmRzRmFjZXRpbmdJbmZvKGEsYyxkKXtjb25zdCBmPXRoaXMuc3RhdHNbYV0ud29yZFRyZWUsZz1mLmxldmVsSGFzaDtyZXR1cm57ZmFjZXRpbmdGdW5jdGlvbjpsPT57aWYoIShhIGluIGwuZGF0YSkpcmV0dXJuIG51bGw7Zm9yKGw9Zi5ub2RlSGFzaFthcShsLmRhdGFbYV0pXTtsLnBhcmVudCYmbC5sZXZlbD5jOylsPWwucGFyZW50OwpyZXR1cm4gbC5sZXZlbH0sa2V5Q29tcGFyZUZ1bmN0aW9uOihsLGspPT57bD1nW2xdO2s9Z1trXTtpZih2b2lkIDA9PT1sJiZ2b2lkIDA9PT1rKXJldHVybiAwO2lmKHZvaWQgMD09PWwpcmV0dXJuLTE7aWYodm9pZCAwPT09aylyZXR1cm4gMTtpZihsLm5vblZhbHVlQ291bnQmJmsubm9uVmFsdWVDb3VudClyZXR1cm4gMDtpZihsLm5vblZhbHVlQ291bnQpcmV0dXJuLTE7aWYoay5ub25WYWx1ZUNvdW50KXJldHVybiAxO2s9ay5vcmRlci1sLm9yZGVyO3JldHVybiBkP2s6LWt9LGxhYmVsaW5nRnVuY3Rpb246bD0+e2w9Z1srbF07aWYoIWwucGFyZW50JiYhbC5jb21tb25Xb3Jkcy5sZW5ndGgpcmV0dXJue2xhYmVsOiJvdGhlciIsc3BlY2lhbDohMH07aWYobC5ub25WYWx1ZUNvdW50KXJldHVybntsYWJlbDoibm9uLXdvcmRzIixzcGVjaWFsOiEwfTtsZXQgaz1gICR7Ilx1MjAyMiJ9ICR7bC5jb21tb25Xb3Jkcy5qb2luKCIgIil9YDtmb3IobGV0IG49MDtuPGwuY2hpbGRyZW4ubGVuZ3RoO24rKylpZihsLmNoaWxkcmVuW25dLmxldmVsPgpjKXtrKz0iIFx1MjAyNiI7YnJlYWt9Zm9yKDtsLnBhcmVudDspbD1sLnBhcmVudCxsLmNvbW1vbldvcmRzLmxlbmd0aCYmKGs9YCAkeyJcdTIwMjIifSAke2wuY29tbW9uV29yZHMuam9pbigiICIpfSBgK2spO3JldHVybntsYWJlbDprfX19fWdlbmVyYXRlTnVtZXJpY0ZhY2V0aW5nSW5mbyhhLGMpe2NvbnN0IGQ9dGhpcy5zdGF0c1thXSxmPWQubnVtYmVyTWF4LWQubnVtYmVyTWluO3JldHVybntmYWNldGluZ0Z1bmN0aW9uOmc9PntpZighKGEgaW4gZy5kYXRhKSlyZXR1cm4gbnVsbDtnPWcuZGF0YVthXTtyZXR1cm4ibnVtYmVyIiE9PXR5cGVvZiBnP2c6aXNOYU4oZyk/ZzpNYXRoLm1pbihNYXRoLmZsb29yKGMqKGctZC5udW1iZXJNaW4pL2YpLGMtMSl9LGtleUNvbXBhcmVGdW5jdGlvbjpKcCxsYWJlbGluZ0Z1bmN0aW9uOmc9PntpZigibnVtYmVyIiE9PXR5cGVvZiBnfHxpc05hTigrZykpcmV0dXJuIG1xKGcpO2NvbnN0IGw9ZC5udW1iZXJNYXgtZC5udW1iZXJNaW4saz1nL2MqCmwrZC5udW1iZXJNaW47Zz0oMStnKS9jKmwrZC5udW1iZXJNaW47cmV0dXJuIGQuaXNJbnRlZ2VyKCk/e2xhYmVsOnRoaXMuZm9ybWF0UmFuZ2UoTWF0aC5jZWlsKGspLE1hdGguZmxvb3IoZykpfTp7bGFiZWw6dGhpcy5mb3JtYXRSYW5nZShrLGcpfX19fWZvcm1hdE51bWJlcihhKXtpZihudWxsPT09YSlyZXR1cm4ibnVsbCI7YT1wYXJzZUZsb2F0KGEudG9QcmVjaXNpb24oMykpO3JldHVybiAxRTM8PU1hdGguYWJzKGEpP2QzLmZvcm1hdCgicyIpKGEpOiIiK2F9Zm9ybWF0UmFuZ2UoYSxjKXtyZXR1cm5gJHt0aGlzLmZvcm1hdE51bWJlcihhKX0gXHUyMDE0ICR7dGhpcy5mb3JtYXROdW1iZXIoYyl9YH1nZXRLZXlzKCl7cmV0dXJuIGVxKHRoaXMuZWxlbS5kYXRhKS5zb3J0KCl9cmVuZGVyVW50aWwoYSl7dGhpcy5lbmRUaW1lc3RhbXA9TWF0aC5tYXgodGhpcy5lbmRUaW1lc3RhbXAsYSk7dGhpcy5xdWV1ZVJlbmRlclNjZW5lKCl9cmVzaXplSGFuZGxlcigpe2NvbnN0IGE9dGhpcy5lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwphLndpZHRoJiZhLmhlaWdodD8odGhpcy5sYWJlbHNBbmRBeGVzU1ZHLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KSx0aGlzLmNlbGxCYWNrZ3JvdW5kU1ZHLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KSx0aGlzLnJlbmRlcmVyJiZ0aGlzLnJlbmRlcmVyLnNldFNpemUoYS53aWR0aCxhLmhlaWdodCksdGhpcy5jYW1lcmEucmlnaHQ9YS53aWR0aC90aGlzLnNjYWxlLHRoaXMuY2FtZXJhLmJvdHRvbT0tYS5oZWlnaHQvdGhpcy5zY2FsZSx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5xdWV1ZVJlbmRlclNjZW5lKCkpOnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5yZXNpemVIYW5kbGVyKCkpfXF1ZXVlUmVuZGVyU2NlbmUoKXt0aGlzLnJlbmRlclF1ZXVlZHx8KHRoaXMucmVuZGVyUXVldWVkPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMucmVuZGVyUXVldWVkJiYKdGhpcy5yZW5kZXJTY2VuZSgpfSkpfXJlbmRlclNjZW5lKCl7dGhpcy5yZW5kZXJRdWV1ZWQ9ITE7Y29uc3QgYT1EYXRlLm5vdygpO3RoaXMuZW5kVGltZXN0YW1wPmEmJnRoaXMucXVldWVSZW5kZXJTY2VuZSgpO2lmKHRoaXMuc3ByaXRlTWVzaCYmKHRoaXMuc3ByaXRlTWVzaC50aW1lPWEsODE+K1RIUkVFLlJFVklTSU9OJiZ0aGlzLnNwcml0ZU1lc2gub25CZWZvcmVSZW5kZXIpKXRoaXMuc3ByaXRlTWVzaC5vbkJlZm9yZVJlbmRlcigpO3RoaXMucmVuZGVyZXImJnRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jYW1lcmEpO3RoaXMuc3ByaXRlTWVzaCYmdGhpcy5zcHJpdGVNZXNoLnNwcml0ZUF0bGFzJiZ0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMucG9zdFJlbmRlcigpfX0KUG9seW1lcih7aXM6ImZhY2V0cy1kaXZlLXZpcyIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcl0scHJvcGVydGllczp7ZGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpudWxsLG9ic2VydmVyOiJfZGF0YUNoYW5nZSJ9LGZpbHRlcmVkRGF0YUluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6bnVsbCxvYnNlcnZlcjoiX2ZpbHRlcmVkRGF0YUluZGljZXNDaGFuZ2UifSxhdGxhc1VybDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbCxvYnNlcnZlcjoiX3F1ZXVlQXRsYXNVcmxDaGFuZ2UifSxzcHJpdGVVcmw6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwsb2JzZXJ2ZXI6Il9zcHJpdGVVcmxDaGFuZ2UifSxjcm9zc09yaWdpbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sa2V5czp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHN0YXRzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fSxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNjZW5lUGFkZGluZzp7dHlwZTpOdW1iZXIsCnZhbHVlOjh9LHR3ZWVuRHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjYwMH0sZmFkZUR1cmF0aW9uOnt0eXBlOk51bWJlcix2YWx1ZToyMDB9LHNwcml0ZUltYWdlV2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOjY0fSxzcHJpdGVJbWFnZUhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6NjR9LGdyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiM2NjY2NjYifSxncmlkRmFjZXRpbmdIb3Jpem9udGFsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiNkZDY2MjIifSxpdGVtUG9zaXRpb25pbmdWZXJ0aWNhbExhYmVsQ29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOiIjMjI1NWFhIn0saXRlbVBvc2l0aW9uaW5nSG9yaXpvbnRhbExhYmVsQ29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOiIjMTE4ODQ0In0sZml0R3JpZEFzcGVjdFJhdGlvVG9WaWV3cG9ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx2ZXJ0aWNhbEZhY2V0Ont0eXBlOlN0cmluZyx2YWx1ZToiIiwKb2JzZXJ2ZXI6Il91cGRhdGVHcmlkRmFjZXRpbmcifSx2ZXJ0aWNhbEJ1Y2tldHM6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG9ic2VydmVyOiJfdXBkYXRlR3JpZEZhY2V0aW5nIn0sdmVydGljYWxCYWdPZldvcmRzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il91cGRhdGVHcmlkRmFjZXRpbmcifSxob3Jpem9udGFsRmFjZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJfdXBkYXRlR3JpZEZhY2V0aW5nIn0saG9yaXpvbnRhbEJ1Y2tldHM6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG9ic2VydmVyOiJfdXBkYXRlR3JpZEZhY2V0aW5nIn0saG9yaXpvbnRhbEJhZ09mV29yZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3VwZGF0ZUdyaWRGYWNldGluZyJ9LHBvc2l0aW9uTW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6Il91cGRhdGVHcmlkSXRlbVBvc2l0aW9ucyJ9LHZlcnRpY2FsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLApvYnNlcnZlcjoiX3VwZGF0ZUdyaWRJdGVtUG9zaXRpb25zIn0saG9yaXpvbnRhbFBvc2l0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiIixvYnNlcnZlcjoiX3VwZGF0ZUdyaWRJdGVtUG9zaXRpb25zIn0sY29sb3JCeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6Il91cGRhdGVDb2xvcnMiLG5vdGlmeTohMH0saW1hZ2VGaWVsZE5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJfdXBkYXRlSW1hZ2VGaWVsZE5hbWUiLG5vdGlmeTohMH0scGFsZXR0ZTp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITB9LHBhbGV0dGVDaG9pY2U6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFuZGFyZCIsb2JzZXJ2ZXI6Il91cGRhdGVDb2xvcnMifSxzZWxlY3RlZERhdGE6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwfSxzZWxlY3RlZEluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwLG9ic2VydmVyOiJfc2VsZWN0ZWRJbmRpY2VzVXBkYXRlZCJ9LGNvbXBhcmVkRGF0YTp7dHlwZTpBcnJheSwKdmFsdWU6W10sbm90aWZ5OiEwfSxjb21wYXJlZEluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwLG9ic2VydmVyOiJfY29tcGFyZWRJbmRpY2VzVXBkYXRlZCJ9LHN0YWJsZUNvbG9yczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfdXBkYXRlQ29sb3JzIn19LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uSXJvblJlc2l6ZSJ9LGNyZWF0ZWQoKXt0aGlzLl9iYWNraW5nPW5ldyB0cSh0aGlzKX0scmVhZHkoKXt0aGlzLl9iYWNraW5nLnJlYWR5KCl9LF9kYXRhQ2hhbmdlKGEpe3RoaXMuX2JhY2tpbmcuc2NlbmU/KHRoaXMuX2JhY2tpbmcuZGF0YUNoYW5nZSgpLHRoaXMuX3NldEtleXModGhpcy5fYmFja2luZy5nZXRLZXlzKCkpLHRoaXMuX3NldFN0YXRzKHRoaXMuX2JhY2tpbmcuc3RhdHMpKTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fZGF0YUNoYW5nZS5iaW5kKHRoaXMsYSkpfSxfZmlsdGVyZWREYXRhSW5kaWNlc0NoYW5nZShhKXt0aGlzLl9iYWNraW5nLnNjZW5lJiYKdGhpcy5fYmFja2luZy5pdGVtcz8odGhpcy5fYmFja2luZy5maWx0ZXJlZERhdGFJbmRpY2VzQ2hhbmdlKCksdGhpcy5fc2V0S2V5cyh0aGlzLl9iYWNraW5nLmdldEtleXMoKSksdGhpcy5fc2V0U3RhdHModGhpcy5fYmFja2luZy5zdGF0cykpOnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9maWx0ZXJlZERhdGFJbmRpY2VzQ2hhbmdlLmJpbmQodGhpcyxhKSl9LF9xdWV1ZUF0bGFzVXJsQ2hhbmdlKCl7dGhpcy5fYmFja2luZy5xdWV1ZUF0bGFzVXJsQ2hhbmdlKCl9LF9zcHJpdGVVcmxDaGFuZ2UoKXt0aGlzLl9iYWNraW5nLnNwcml0ZVVybENoYW5nZSgpfSxfdXBkYXRlR3JpZEZhY2V0aW5nKCl7dGhpcy5fYmFja2luZy51cGRhdGVHcmlkRmFjZXRpbmcoKX0sX3VwZGF0ZUdyaWRJdGVtUG9zaXRpb25zKCl7dGhpcy5fYmFja2luZy51cGRhdGVHcmlkSXRlbVBvc2l0aW9ucygpfSxfdXBkYXRlQ29sb3JzKCl7dGhpcy5fYmFja2luZy51cGRhdGVDb2xvcnMoKX0sX3VwZGF0ZUltYWdlRmllbGROYW1lKCl7dGhpcy5fYmFja2luZy51cGRhdGVJbWFnZUZpZWxkTmFtZSgpfSwKX29uSXJvblJlc2l6ZSgpe3RoaXMuX2JhY2tpbmcucmVzaXplSGFuZGxlcigpfSxfc2VsZWN0ZWRJbmRpY2VzVXBkYXRlZCgpe3RoaXMuX2JhY2tpbmcuc2VsZWN0ZWRJbmRpY2VzVXBkYXRlZCgpfSxfY29tcGFyZWRJbmRpY2VzVXBkYXRlZCgpe3RoaXMuX2JhY2tpbmcuY29tcGFyZWRJbmRpY2VzVXBkYXRlZCgpfSxmaXRUb1ZpZXdwb3J0KCl7dGhpcy5fYmFja2luZy5maXRUb1ZpZXdwb3J0KCl9LHpvb21Jbigpe3RoaXMuX2JhY2tpbmcuem9vbUluKCl9LHpvb21PdXQoKXt0aGlzLl9iYWNraW5nLnpvb21PdXQoKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlLWNvbnRyb2xzL2ZhY2V0cy1kaXZlLWNvbnRyb2xzLmpzClBvbHltZXIoe2lzOiJmYWNldHMtZGl2ZS1jb250cm9scyIscHJvcGVydGllczp7YXRsYXNVcmw6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxrZXlzOnt0eXBlOkFycmF5LHZhbHVlOltdfSxzdGF0czp7dHlwZTpPYmplY3QsdmFsdWU6e319LHZlcnRpY2FsRmFjZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sdmVydGljYWxCdWNrZXRzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9LHZlcnRpY2FsQmFnT2ZXb3Jkczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0saG9yaXpvbnRhbEZhY2V0Ont0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGhvcml6b250YWxCdWNrZXRzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9LGhvcml6b250YWxCYWdPZldvcmRzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxwb3NpdGlvbk1vZGU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0UG9zaXRpb25Nb2RlKHZlcnRpY2FsUG9zaXRpb24sIGhvcml6b250YWxQb3NpdGlvbikiLApub3RpZnk6ITB9LHZlcnRpY2FsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saG9yaXpvbnRhbFBvc2l0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGNvbG9yQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saW1hZ2VGaWVsZE5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0scGFsZXR0ZTp7dHlwZTpBcnJheSx2YWx1ZTpbXX0scGFsZXR0ZUNob2ljZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixub3RpZnk6ITB9LGdyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiM2NjY2NjYiLG9ic2VydmVyOiJfdXBkYXRlQ1NTVmFycyJ9LGdyaWRGYWNldGluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiI2RkNjYyMiIsb2JzZXJ2ZXI6Il91cGRhdGVDU1NWYXJzIn0saXRlbVBvc2l0aW9uaW5nVmVydGljYWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZywKdmFsdWU6IiMyMjU1YWEiLG9ic2VydmVyOiJfdXBkYXRlQ1NTVmFycyJ9LGl0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzExODg0NCIsb2JzZXJ2ZXI6Il91cGRhdGVDU1NWYXJzIn19LF9nZXRJbWFnZUZpZWxkTmFtZURlZmF1bHRMYWJlbChhKXtyZXR1cm4gYT8iKGltYWdlKSI6IihkZWZhdWx0KSJ9LF9pc01vZGVTY2F0dGVyKGEpe3JldHVybiJzY2F0dGVyIj09PWF9LF9pc0tleU51bWVyaWMoYSl7cmV0dXJuIHRoaXMuc3RhdHMmJmEgaW4gdGhpcy5zdGF0cyYmdGhpcy5zdGF0c1thXS5pc051bWVyaWMoKX0sX2lzS2V5Q2F0ZWdvcmljYWwoYSl7cmV0dXJuIHRoaXMuc3RhdHMmJmEgaW4gdGhpcy5zdGF0cyYmIXRoaXMuc3RhdHNbYV0uaXNOdW1lcmljKCl9LF91cGRhdGVDU1NWYXJzKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLWdyaWQtZmFjZXRpbmctdmVydGljYWwtbGFiZWwtY29sb3IiOnRoaXMuZ3JpZEZhY2V0aW5nVmVydGljYWxMYWJlbENvbG9yLAoiLS1ncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IiOnRoaXMuZ3JpZEZhY2V0aW5nSG9yaXpvbnRhbExhYmVsQ29sb3IsIi0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvciI6dGhpcy5pdGVtUG9zaXRpb25pbmdWZXJ0aWNhbExhYmVsQ29sb3IsIi0taXRlbS1wb3NpdGlvbmluZy1ob3Jpem9udGFsLWxhYmVsLWNvbG9yIjp0aGlzLml0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yfSl9LF9icmVha1VwQW5kVHJ1bmNhdGUoYSl7cmV0dXJuIGlxKGpxKCIiK2EpKX0sX21heEJ1Y2tldHMoYSxjKXtjb25zdCBkPXRoaXMuc3RhdHM/dGhpcy5zdGF0c1thXTpudWxsO3JldHVybiBkP2MmJnRoaXMuX2hhc1dvcmRUcmVlKGEpP01hdGgubWluKDEwMCxkLndvcmRUcmVlLmhpZ2hlc3RMZXZlbCk6TWF0aC5taW4oMTAwLGQudW5pcXVlQ291bnQrMSk6MTAwfSxfaGFzV29yZFRyZWUoYSl7YT10aGlzLnN0YXRzP3RoaXMuc3RhdHNbYV06bnVsbDsKcmV0dXJuISFhJiYhIWEud29yZFRyZWUmJjE8YS53b3JkVHJlZS5oaWdoZXN0TGV2ZWx9LF9nZXRQb3NpdGlvbk1vZGUoYSxjKXtyZXR1cm4iIj09YSYmIiI9PWM/InN0YWNrZWQiOiJzY2F0dGVyIn0sX29wZW5PdmVyZmxvdygpe3RoaXMuJC5vdmVyZmxvd21lbnUucG9zaXRpb25FbGVtZW50PXRoaXMuJC5vdmVyZmxvd2J0bjt0aGlzLiQub3ZlcmZsb3dtZW51Lm9wZW4oKX0sX3Nob3VsZFNob3dPdmVyZmxvd01lbnUoYSxjLGQpe3JldHVybiB0aGlzLl9pc0tleUNhdGVnb3JpY2FsKGEpfHx0aGlzLl9oYXNXb3JkVHJlZShjKXx8dGhpcy5faGFzV29yZFRyZWUoZCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLWRpdmUvbGliL2luZm8tcmVuZGVyZXJzLmpzCmNvbnN0IHVxPShhLGMpPT57Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkbCIpO2Zvcihjb25zdCBnIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShnKSl7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZHQiKTtmLnRleHRDb250ZW50PWc7ZC5hcHBlbmRDaGlsZChmKTtmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRkIik7Zi50ZXh0Q29udGVudD1hW2ddO2QuYXBwZW5kQ2hpbGQoZil9Yy5hcHBlbmRDaGlsZChkKX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLWRpdmUvY29tcG9uZW50cy9mYWNldHMtZGl2ZS1pbmZvLWNhcmQvZmFjZXRzLWRpdmUtaW5mby1jYXJkLmpzClBvbHltZXIoe2lzOiJmYWNldHMtZGl2ZS1pbmZvLWNhcmQiLHByb3BlcnRpZXM6e2luZm9SZW5kZXJlcjp7dHlwZTpPYmplY3R9LHNlbGVjdGVkRGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpbXSxvYnNlcnZlcjoiX3VwZGF0ZVNlbGVjdGVkIn19LHJlYWR5KCl7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmhvbGRlciwhMCl9LF91cGRhdGVTZWxlY3RlZChhKXt0aGlzLiQuaG9sZGVyLmlubmVySFRNTD0iIjtpZihhKXt2YXIgYz10aGlzLmluZm9SZW5kZXJlcnx8dXE7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGY9YVtkXSxnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2cuc3R5bGUud2lkdGg9IjEwMCUiO3RoaXMuJC5ob2xkZXIuYXBwZW5kQ2hpbGQoZyk7YyhmLGcpfX19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLWRpdmUvY29tcG9uZW50cy9mYWNldHMtZGl2ZS1sZWdlbmQvZmFjZXRzLWRpdmUtbGVnZW5kLmpzClBvbHltZXIoe2lzOiJmYWNldHMtZGl2ZS1sZWdlbmQiLHByb3BlcnRpZXM6e2NvbG9yQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJfb3BlbiJ9LHBhbGV0dGU6e3R5cGU6QXJyYXksdmFsdWU6W119LF9vcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LF9icmVha1VwQW5kVHJ1bmNhdGUoYSl7cmV0dXJuIGlxKGpxKCIiK2EpKX0sX2FueUNvbG9yKCl7cmV0dXJuISEodGhpcy5jb2xvckJ5JiZ0aGlzLnBhbGV0dGUmJnRoaXMucGFsZXR0ZS5sZW5ndGgpfSxfc3BlY2lhbENsYXNzKGEpe3JldHVybiBhPyJzcGVjaWFsIjoiIn0sX29wZW4oKXt0aGlzLl9vcGVuZWQ9ITB9LF90b2dnbGVPcGVuZWQoKXt0aGlzLl9vcGVuZWQ9IXRoaXMuX29wZW5lZH0sX2dldEljb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2ZhY2V0cy1kaXZlL2NvbXBvbmVudHMvZmFjZXRzLWRpdmUvZmFjZXRzLWRpdmUuanMKUG9seW1lcih7aXM6ImZhY2V0cy1kaXZlIixwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOkFycmF5LHZhbHVlOm51bGwsbm90aWZ5OiEwfSxmaWx0ZXJlZERhdGFJbmRpY2VzOnt0eXBlOkFycmF5LHZhbHVlOm51bGx9LF9rZXlzOnt0eXBlOkFycmF5LHZhbHVlOltdfSxzdGF0czp7dHlwZTpPYmplY3QsdmFsdWU6e30sbm90aWZ5OiEwfSxhdGxhc1VybDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbCxub3RpZnk6ITB9LHNwcml0ZVVybDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbCxub3RpZnk6ITB9LGNyb3NzT3JpZ2luOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsLG5vdGlmeTohMH0sc3ByaXRlSW1hZ2VXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6NjR9LHNwcml0ZUltYWdlSGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTo2NH0sZ3JpZEZhY2V0aW5nVmVydGljYWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzY2NjY2NiJ9LGdyaWRGYWNldGluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZywKdmFsdWU6IiNkZDY2MjIifSxpdGVtUG9zaXRpb25pbmdWZXJ0aWNhbExhYmVsQ29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOiIjMjI1NWFhIn0saXRlbVBvc2l0aW9uaW5nSG9yaXpvbnRhbExhYmVsQ29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOiIjMTE4ODQ0In0sZml0R3JpZEFzcGVjdFJhdGlvVG9WaWV3cG9ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx2ZXJ0aWNhbEZhY2V0Ont0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LHZlcnRpY2FsQnVja2V0czp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsbm90aWZ5OiEwfSx2ZXJ0aWNhbEJhZ09mV29yZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGhvcml6b250YWxGYWNldDp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxob3Jpem9udGFsQnVja2V0czp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsbm90aWZ5OiEwfSxob3Jpem9udGFsQmFnT2ZXb3Jkczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sCnBvc2l0aW9uTW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YWNrZWQiLG5vdGlmeTohMH0sdmVydGljYWxQb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxob3Jpem9udGFsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sY29sb3JCeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxpbWFnZUZpZWxkTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxfcGFsZXR0ZTp7dHlwZTpBcnJheSx2YWx1ZTpbXX0scGFsZXR0ZUNob2ljZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixub3RpZnk6ITB9LHNlbGVjdGVkRGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITB9LHNlbGVjdGVkSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITB9LGNvbXBhcmVkRGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITB9LGNvbXBhcmVkSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpbXSwKbm90aWZ5OiEwfSxoZWlnaHQ6e3R5cGU6TnVtYmVyLHZhbHVlOm51bGwsb2JzZXJ2ZXI6Il91cGRhdGVIZWlnaHQifSxpbmZvUmVuZGVyZXI6e3R5cGU6T2JqZWN0fSxoaWRlSW5mb0NhcmQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc3RhYmxlQ29sb3JzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxyZWFkeSgpe2NvbnN0IGE9dGhpcy4kO2EuZml0QnV0dG9uLm9uY2xpY2s9KCk9PmEudmlzLmZpdFRvVmlld3BvcnQoKTthLnpvb21JbkJ1dHRvbi5vbmNsaWNrPSgpPT5hLnZpcy56b29tSW4oKTthLnpvb21PdXRCdXR0b24ub25jbGljaz0oKT0+YS52aXMuem9vbU91dCgpO3RoaXMuaGlkZUluZm9DYXJkJiYoYS52aXMuc3R5bGUucmlnaHQ9IjAiKTt0aGlzLl91cGRhdGVIZWlnaHQoKX0sX3VwZGF0ZUhlaWdodCgpe251bGwhPT10aGlzLmhlaWdodCYmKHRoaXMuc3R5bGUuaGVpZ2h0PSJudW1iZXIiPT09dHlwZW9mIHRoaXMuaGVpZ2h0P3RoaXMuaGVpZ2h0KyJweCI6dGhpcy5oZWlnaHQpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2ZhY2V0cy1vdmVydmlldy9jb21tb24vZmVhdHVyZV9zdGF0aXN0aWNzX2dlbmVyYXRvci5qcwpjbGFzcyB2cXtjb25zdHJ1Y3Rvcigpe3RoaXMudmFscz1bXTt0aGlzLmNvdW50cz1bXX19ZnVuY3Rpb24gd3EoYSl7Y29uc3QgYz1uZXcgQmw7YS5mb3JFYWNoKGQ9Pntjb25zdCBmPXhxKGQuZGF0YSk7Zi5zZXROYW1lKGQubmFtZSk7Yy5nZXREYXRhc2V0c0xpc3QoKS5wdXNoKGYpfSk7cmV0dXJuIGN9CmZ1bmN0aW9uIHhxKGEpe2NvbnN0IGM9e307aWYobnVsbD09YSlyZXR1cm4gbmV3IEZsO2EuZm9yRWFjaCgoZCxmKT0+e2lmKG51bGwhPWQpe3ZhciBnPU9iamVjdC5rZXlzKGQpLGw9e307Zm9yKGxldCBrPTA7azxnLmxlbmd0aDtrKyspe2NvbnN0IG49Z1trXSxwPWRbbl07bFtuXT0hMDtuIGluIGN8fChjW25dPW5ldyB2cSxjW25dLm1pc3Npbmc9ZixjW25dLmNvdW50cz1bXSk7Im51bWJlciI9PT10eXBlb2YgcHx8InN0cmluZyI9PT10eXBlb2YgcD8oY1tuXS52YWxzLnB1c2gocCksY1tuXS5jb3VudHMucHVzaCgxKSk6cCBpbnN0YW5jZW9mIEFycmF5JiYoY1tuXS5jb3VudHMucHVzaChwLmxlbmd0aCksY1tuXS52YWxzLnB1c2goLi4ucCkpfU9iamVjdC5rZXlzKGMpLmZvckVhY2goaz0+e2sgaW4gbHx8KGNba10ubWlzc2luZys9MSl9KX19KTtPYmplY3Qua2V5cyhjKS5mb3JFYWNoKGQ9PntsZXQgZj0wLGc9MCxsPSExO2NbZF0udmFscy5mb3JFYWNoKGs9Pnsic3RyaW5nIj09PQp0eXBlb2Ygaz9mKz0xOihnKz0xLGw9bHx8IXlxKGspKX0pO2NbZF0udHlwZT1nPmY/bD8xOjA6Mn0pO3JldHVybiB6cShjLGEubGVuZ3RoKX1mdW5jdGlvbiB5cShhKXtyZXR1cm4gYT09PSthJiZhPT09KGF8MCl9ZnVuY3Rpb24genEoYSxjKXtjb25zdCBkPW5ldyBGbDtkLnNldE51bUV4YW1wbGVzKGMpO2Zvcihjb25zdCBmIGluIGEpe2lmKCFhLmhhc093blByb3BlcnR5KGYpKWNvbnRpbnVlO2NvbnN0IGc9bmV3IEhsO2QuZ2V0RmVhdHVyZXNMaXN0KCkucHVzaChnKTtjb25zdCBsPWFbZl07Zy5zZXROYW1lKGYpO2cuc2V0VHlwZShsLnR5cGUpOzE9PT1sLnR5cGV8fDA9PT1sLnR5cGU/Zy5zZXROdW1TdGF0cyhBcShsLnZhbHMsbC5jb3VudHMsYyxsLm1pc3NpbmcpKToyPT09bC50eXBlJiZnLnNldFN0cmluZ1N0YXRzKEJxKGwudmFscyxsLmNvdW50cyxjLGwubWlzc2luZykpfXJldHVybiBkfQpmdW5jdGlvbiBBcShhLGMsZCxmKXtjb25zdCBnPW5ldyBObDtnLnNldENvbW1vblN0YXRzKENxKGMsZCxmKSk7bGV0IGw9MCxrPTAsbj0wO2M9YS5maWx0ZXIodD0+Im51bWJlciI9PT10eXBlb2YgdCYmIWlzTmFOKHQpKS5tYXAodD0+K3QpLnNvcnQoKHQsdik9PnQtdik7MDxjLmxlbmd0aCYmKGcuc2V0TWluKGNbMF0pLGcuc2V0TWF4KGNbYy5sZW5ndGgtMV0pLGQ9TWF0aC5mbG9vcihjLmxlbmd0aC8yKSxnLnNldE1lZGlhbigwIT09Yy5sZW5ndGglMj9jW2RdOihjW2RdK2NbZC0xXSkvMikpO2MuZm9yRWFjaCh0PT57MD09PXQmJihuKz0xKTtsKz10O2srPXQqdH0pOzE8Yy5sZW5ndGgmJmcuc2V0U3RkRGV2KE1hdGguc3FydCgoay1sKmwvYy5sZW5ndGgpLyhjLmxlbmd0aC0xKSkpO2cuc2V0TWVhbihsL2EubGVuZ3RoKTtnLnNldE51bVplcm9zKG4pO2E9Yy5maWx0ZXIodD0+SW5maW5pdHkhPT10JiYtSW5maW5pdHkhPT10KTtkPWMuZmlsdGVyKHQ9PkluZmluaXR5PT09dCkubGVuZ3RoOwpmPWMuZmlsdGVyKHQ9Pi1JbmZpbml0eT09PXQpLmxlbmd0aDt2YXIgcD1hWzBdO2NvbnN0IHE9YVthLmxlbmd0aC0xXTtwPWQzLnJhbmdlKHAscSwocS1wKS8xMCk7cD1kMy5oaXN0b2dyYW0oKS50aHJlc2hvbGRzKHApKGEpO2xldCByPWcuYWRkSGlzdG9ncmFtcygpO3Iuc2V0VHlwZSgwKTtwLmZvckVhY2godD0+e2NvbnN0IHY9ci5hZGRCdWNrZXRzKCk7di5zZXRTYW1wbGVDb3VudCh0Lmxlbmd0aCk7di5zZXRMb3dWYWx1ZSh0LngwKTt2LnNldEhpZ2hWYWx1ZSh0LngxKX0pO3A9ci5nZXRCdWNrZXRzTGlzdCgpO2MubGVuZ3RoJiYtSW5maW5pdHk9PT1jWzBdJiYocFswXS5zZXRMb3dWYWx1ZSgtSW5maW5pdHkpLHBbMF0uc2V0U2FtcGxlQ291bnQocFswXS5nZXRTYW1wbGVDb3VudCgpK2YpKTtjLmxlbmd0aCYmSW5maW5pdHk9PT1jW2MubGVuZ3RoLTFdJiYocFtwLmxlbmd0aC0xXS5zZXRIaWdoVmFsdWUoSW5maW5pdHkpLHBbcC5sZW5ndGgtMV0uc2V0U2FtcGxlQ291bnQocFtwLmxlbmd0aC0KMV0uZ2V0U2FtcGxlQ291bnQoKStkKSk7cj1nLmFkZEhpc3RvZ3JhbXMoKTtEcShyLGEpO3JldHVybiBnfWZ1bmN0aW9uIERxKGEsYyl7dmFyIGQ9WzAsMTAsMjAsMzAsNDAsNTAsNjAsNzAsODAsOTAsMTAwXTtjb25zdCBmPWQubGVuZ3RoLTE7ZD1kLm1hcChsPT5FcShjLGwpKTthLnNldFR5cGUoMSk7Y29uc3QgZz1jLmxlbmd0aC9mO2ZvcihsZXQgbD0wO2w8ZjtsKyspe2NvbnN0IGs9YS5hZGRCdWNrZXRzKCk7ay5zZXRTYW1wbGVDb3VudChnKTtrLnNldExvd1ZhbHVlKGRbbF0pO2suc2V0SGlnaFZhbHVlKGRbbCsxXSl9fWZ1bmN0aW9uIEVxKGEsYyl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBOYU47Yz1jLzEwMCooYS5sZW5ndGgtMSk7Y29uc3QgZD1NYXRoLmZsb29yKGMpO3JldHVybiBkPT09Yz9hW2NdOmFbZF0rKGFbZCsxXS1hW2RdKSooYy1kKX0KZnVuY3Rpb24gQnEoYSxjLGQsZil7Y29uc3QgZz1uZXcgUGw7Zy5zZXRDb21tb25TdGF0cyhDcShjLGQsZikpO2xldCBsPTA7Y29uc3Qgaz17fTthLmZvckVhY2gocT0+e3E9U3RyaW5nKHEpO2tbcV09KGtbcV18fDApKzE7bCs9cS5sZW5ndGh9KTswPGEubGVuZ3RoJiZnLnNldEF2Z0xlbmd0aChsL2EubGVuZ3RoKTthPVtdO2Zvcih2YXIgbiBpbiBrKWsuaGFzT3duUHJvcGVydHkobikmJmEucHVzaCh7c3RyOm4sY291bnQ6a1tuXX0pO2cuc2V0VW5pcXVlKGEubGVuZ3RoKTthPWEuc29ydCgocSxyKT0+ci5jb3VudC1xLmNvdW50KTtjb25zdCBwPW5ldyBibTtnLnNldFJhbmtIaXN0b2dyYW0ocCk7YS5sZW5ndGgmJihuPWcuYWRkVG9wVmFsdWVzKCksbi5zZXRWYWx1ZShhWzBdLnN0ciksbi5zZXRGcmVxdWVuY3koYVswXS5jb3VudCkpO2EuZm9yRWFjaCgocSxyKT0+e2NvbnN0IHQ9cC5hZGRCdWNrZXRzKCk7dC5zZXRTYW1wbGVDb3VudChxLmNvdW50KTt0LnNldExvd1Jhbmsocik7CnQuc2V0SGlnaFJhbmsocik7dC5zZXRMYWJlbChxLnN0cil9KTtyZXR1cm4gZ31mdW5jdGlvbiBDcShhLGMsZCl7Y29uc3QgZj1uZXcgWWw7bGV0IGc9SW5maW5pdHksbD0wLGs9MDthLmZvckVhY2gobj0+e248ZyYmKGc9bik7bj5sJiYobD1uKTtrKz1ufSk7Zi5zZXROdW1Ob25NaXNzaW5nKGMtZCk7Zi5zZXROdW1NaXNzaW5nKGQpO2Yuc2V0TWluTnVtVmFsdWVzKGcpO2Yuc2V0TWF4TnVtVmFsdWVzKGwpOzA8YS5sZW5ndGgmJmYuc2V0QXZnTnVtVmFsdWVzKGsvYS5sZW5ndGgpO2M9bmV3IFpsO2Yuc2V0TnVtVmFsdWVzSGlzdG9ncmFtKGMpO0RxKGMsYSk7cmV0dXJuIGZ9OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2ZhY2V0cy1vdmVydmlldy9jb21tb24vdXRpbHMuanMKY2xhc3MgRnF7fWNsYXNzIEdxe2NvbnN0cnVjdG9yKGEsYyxkLGYsZyxsLGssbil7dGhpcy5oaXN0TWFwPXt9O3RoaXMubmFtZT1hO2MmJih0aGlzLmhpc3RNYXBbSHEoITEsIlN0YW5kYXJkIildPWMpO2QmJih0aGlzLmhpc3RNYXBbSHEoITAsIlN0YW5kYXJkIildPWQpO2YmJih0aGlzLmhpc3RNYXBbSHEoITEsIlF1YW50aWxlcyIpXT1mKTtnJiYodGhpcy5oaXN0TWFwW0hxKCEwLCJRdWFudGlsZXMiKV09Zyk7bCYmKHRoaXMuaGlzdE1hcFtIcSghMSwiVmFsdWUgbGlzdCBsZW5ndGgiKV09bCk7ayYmKHRoaXMuaGlzdE1hcFtIcSghMSwiRmVhdHVyZSBsaXN0IGxlbmd0aCIpXT1rKTtuJiZPYmplY3Qua2V5cyhuKS5mb3JFYWNoKHA9PnRoaXMuaGlzdE1hcFtwXT1uW3BdKX19CmNsYXNzIElxe2NvbnN0cnVjdG9yKGEsYyxkLGYpe3RoaXMubmFtZT1hO3RoaXMuc3RyaW5nVmFsdWU9Yzt0aGlzLmxvd051bVZhbHVlPWQ7dGhpcy5oaWdoTnVtVmFsdWU9Zn1jbGVhcigpe3RoaXMuaGlnaE51bVZhbHVlPXRoaXMubG93TnVtVmFsdWU9dGhpcy5zdHJpbmdWYWx1ZT10aGlzLm5hbWU9dm9pZCAwfWVxdWFscyhhKXtyZXR1cm4gYT90aGlzLm5hbWU9PT1hLm5hbWUmJnRoaXMuc3RyaW5nVmFsdWU9PT1hLnN0cmluZ1ZhbHVlJiZ0aGlzLmxvd051bVZhbHVlPT09YS5sb3dOdW1WYWx1ZSYmdGhpcy5oaWdoTnVtVmFsdWU9PT1hLmhpZ2hOdW1WYWx1ZTohMX19CmZ1bmN0aW9uIFVzKGEpe2NvbnN0IGM9VnMoYSk7aWYoMD09PWMpcmV0dXJuIDA7Y29uc3QgZD1hLnJlZHVjZSgoZixnKT0+e2c9K2cuZ2V0U2FtcGxlQ291bnQoKXx8MDtpZigwPT09ZylyZXR1cm4gZjtnLz1jO3JldHVybiBmLWcqTWF0aC5sb2coZyl9LDApO3JldHVybiAwPT09ZD8wOmQvTWF0aC5sb2coYS5sZW5ndGgpfWZ1bmN0aW9uIFdzKGEsYyl7cmV0dXJuIGlzRmluaXRlKGEpJiYtMT09PWEudG9TdHJpbmcoKS5pbmRleE9mKCJlIik/KyhNYXRoLnJvdW5kKE51bWJlcihhKyJlKyIrYykpKyJlLSIrYyk6YX1mdW5jdGlvbiBYcyhhLGMsZCl7cmV0dXJuKGE9YS5oaXN0TWFwW0hxKGMsZCldKT9hLmdldEJ1Y2tldHNMaXN0KCk6W119ZnVuY3Rpb24gSHEoYSxjKXtjPW51bGw9PWM/IlN0YW5kYXJkIjpjO2EmJihjPSJ3ZWlnaHRlZCIrYyk7cmV0dXJuIGN9CmZ1bmN0aW9uIFZzKGEpe3JldHVybiBhLm1hcChjPT5jLmdldFNhbXBsZUNvdW50KCkpLnJlZHVjZSgoYyxkKT0+KCtkfHwwKStjLDApfWZ1bmN0aW9uIFlzKGEpe3JldHVybiBhLm1hcChjPT5WcyhYcyhjLCExKSkpfWZ1bmN0aW9uIFpzKGEpe2NvbnN0IGM9W107YS5mb3JFYWNoKGQ9PntkLmZvckVhY2goZj0+e2Y9JHMoZi5nZXRMYWJlbCgpKTstMT09PWMuaW5kZXhPZihmKSYmYy5wdXNoKGYpfSl9KTtyZXR1cm4gY31mdW5jdGlvbiAkcyhhKXtyZXR1cm4gbnVsbD09YXx8IiI9PT1hPyJcdTAwYTAiOmF9ZnVuY3Rpb24gYXQoYSl7cmV0dXJuIDA9PT1hLmxlbmd0aHx8aXNOYU4oK2EpP2E6JyInK2ErJyInfWZ1bmN0aW9uIGJ0KGEpe3JldHVybiBudWxsPT1hPzA6ImluZiI9PT1hP0luZmluaXR5OiItaW5mIj09PWE/LUluZmluaXR5OithfQpmdW5jdGlvbiBjdChhKXtsZXQgYz0wO3ZhciBkPTA7Y29uc3QgZj1kdChhKTthJiZhLmdldE51bVN0YXRzKCkmJihhPWEuZ2V0TnVtU3RhdHMoKSxjKz1idChhLmdldE51bVplcm9zKCkpKTtmJiYoZD1idChmLmdldE51bU1pc3NpbmcoKSksYys9ZCxkPWJ0KGYuZ2V0TnVtTm9uTWlzc2luZygpKStkKTtyZXR1cm4gMD09PWQ/MTpjL2R9CmZ1bmN0aW9uIGV0KGEpe2NvbnN0IGM9YS5tYXAoeT0+WHMoeSwhMSkpO3ZhciBkPW51bGw7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoMDxjW2ZdLmxlbmd0aCl7ZD1jW2ZdWzBdO2JyZWFrfWlmKCFkKXJldHVybiAwO2Y9WXMoYSk7Zm9yKHZhciBnPTA7ZzxmLmxlbmd0aDtnKyspaWYoMD09PWZbZ10pcmV0dXJuIEluZmluaXR5O2c9MDtpZihkIGluc3RhbmNlb2YgZG0pe2Q9WnMoYyk7Zm9yKHZhciBsPTE7bDxhLmxlbmd0aDtsKyspe3ZhciBrPWNbMF0sbj1jW2xdLHA9MDtmb3IodmFyIHE9MDtxPGQubGVuZ3RoO3ErKyl7dmFyIHI9ZFtxXSx0PTA7bGV0IHk9MDtmb3IodmFyIHY9MDt2PGsubGVuZ3RoO3YrKylpZihrW3ZdLmdldExhYmVsKCk9PT1yKXt0PWtbdl0uZ2V0U2FtcGxlQ291bnQoKT9rW3ZdLmdldFNhbXBsZUNvdW50KCk6MDticmVha31mb3Iodj0wO3Y8bi5sZW5ndGg7disrKWlmKG5bdl0uZ2V0TGFiZWwoKT09PXIpe3k9blt2XS5nZXRTYW1wbGVDb3VudCgpPwpuW3ZdLmdldFNhbXBsZUNvdW50KCk6MDticmVha31wPWZ0KHAsdCxmWzBdLHksZltsXSl9Zz1NYXRoLm1heChnLHApfX1lbHNlIGZvcihkPTE7ZDxhLmxlbmd0aDtkKyspe2w9Y1swXTtrPWNbZF07bj0wO3A9TWF0aC5tYXgobC5sZW5ndGgsay5sZW5ndGgpO2ZvcihxPTA7cTxwO3ErKylyPXE8bC5sZW5ndGgmJmxbcV0uZ2V0U2FtcGxlQ291bnQoKT9sW3FdLmdldFNhbXBsZUNvdW50KCk6MCx0PXE8ay5sZW5ndGgmJmtbcV0uZ2V0U2FtcGxlQ291bnQoKT9rW3FdLmdldFNhbXBsZUNvdW50KCk6MCxuPWZ0KG4scixmWzBdLHQsZltkXSk7Zz1NYXRoLm1heChnLG4pfXJldHVybiBnfWZ1bmN0aW9uIGZ0KGEsYyxkLGYsZyl7Y29uc3QgbD1jL2QtZi9nO2M9Yy8oZCpkKStmLyhnKmcpO3JldHVybiBhKyhjP2wqbC9jOjApfWZ1bmN0aW9uIGd0KGEsYyl7cmV0dXJuIGM9PT1hP2MudG9Mb2NhbGVTdHJpbmcoKTphLnRvTG9jYWxlU3RyaW5nKCkrIi8iK2MudG9Mb2NhbGVTdHJpbmcoKX0KZnVuY3Rpb24gaHQoYSl7cmV0dXJuIG51bGwhPWEuZ2V0TnVtU3RhdHMoKX0KZnVuY3Rpb24gaXQoYSl7YS5nZXREYXRhc2V0c0xpc3QoKS5mb3JFYWNoKGM9PntjLmdldEZlYXR1cmVzTGlzdCgpLmZvckVhY2goZD0+e3ZhciBmPWQuZ2V0UGF0aCgpO251bGwhPWYmJihmPWYuZ2V0U3RlcExpc3QoKSxudWxsIT1mJiZkLnNldE5hbWUoZi5qb2luKCIvIikpKTtmPVtdO2lmKGQuZ2V0U3RyaW5nU3RhdHMoKSl7Y29uc3QgZz1kLmdldFN0cmluZ1N0YXRzKCkuZ2V0UmFua0hpc3RvZ3JhbSgpO2cmJmYucHVzaChnKTsoZD1kLmdldFN0cmluZ1N0YXRzKCkuZ2V0VG9wVmFsdWVzTGlzdCgpKSYmZC5mb3JFYWNoKGw9Pntjb25zdCBrPWwuZ2V0RGVwcmVjYXRlZEZyZXEoKTtrJiYhbC5nZXRGcmVxdWVuY3koKSYmbC5zZXRGcmVxdWVuY3koayl9KX1lbHNlIGQuZ2V0TnVtU3RhdHMoKSYmKGQ9ZC5nZXROdW1TdGF0cygpLmdldEhpc3RvZ3JhbXNMaXN0KCkpJiYoZj1mLmNvbmNhdChkKSk7Zi5mb3JFYWNoKGc9PnsoZz1nLmdldEJ1Y2tldHNMaXN0KCkpJiZnLmZvckVhY2gobD0+Cntjb25zdCBrPWwuZ2V0RGVwcmVjYXRlZENvdW50KCk7ayYmIWwuZ2V0U2FtcGxlQ291bnQoKSYmbC5zZXRTYW1wbGVDb3VudChrKX0pfSl9KX0pO3JldHVybiBhfQpmdW5jdGlvbiBqdChhKXtsZXQgYz0hMDthLmdldERhdGFzZXRzTGlzdCgpLmZvckVhY2goZD0+e2QuZ2V0RmVhdHVyZXNMaXN0KCkuZm9yRWFjaChmPT57bGV0IGc9W107aWYoZi5nZXRTdHJpbmdTdGF0cygpKXtjb25zdCBsPWYuZ2V0U3RyaW5nU3RhdHMoKS5nZXRSYW5rSGlzdG9ncmFtKCk7bCYmZy5wdXNoKGwpOyhmPWYuZ2V0U3RyaW5nU3RhdHMoKS5nZXRUb3BWYWx1ZXNMaXN0KCkpJiZmLmZvckVhY2goaz0+e2suZ2V0RGVwcmVjYXRlZEZyZXEoKSYmIWsuZ2V0RnJlcXVlbmN5KCkmJihjPSExKX0pfWVsc2UgZi5nZXROdW1TdGF0cygpJiYoZj1mLmdldE51bVN0YXRzKCkuZ2V0SGlzdG9ncmFtc0xpc3QoKSkmJihnPWcuY29uY2F0KGYpKTtnLmZvckVhY2gobD0+eyhsPWwuZ2V0QnVja2V0c0xpc3QoKSkmJmwuZm9yRWFjaChrPT57ay5nZXREZXByZWNhdGVkQ291bnQoKSYmIWsuZ2V0U2FtcGxlQ291bnQoKSYmKGM9ITEpfSl9KX0pfSk7cmV0dXJuIGN9CmZ1bmN0aW9uIGt0KGEpe2ZvcihsZXQgYz0wO2M8YS5nZXREYXRhc2V0c0xpc3QoKS5sZW5ndGg7YysrKXtjb25zdCBkPWEuZ2V0RGF0YXNldHNMaXN0KClbY107Zm9yKGxldCBmPTA7ZjxkLmdldEZlYXR1cmVzTGlzdCgpLmxlbmd0aDtmKyspe2NvbnN0IGc9ZC5nZXRGZWF0dXJlc0xpc3QoKVtmXTtpZihnLmdldFN0cmluZ1N0YXRzKCkpe2lmKGcuZ2V0U3RyaW5nU3RhdHMoKS5nZXRXZWlnaHRlZFN0cmluZ1N0YXRzKCkpcmV0dXJuITB9ZWxzZSBpZihnLmdldE51bVN0YXRzKCkmJmcuZ2V0TnVtU3RhdHMoKS5nZXRXZWlnaHRlZE51bWVyaWNTdGF0cygpKXJldHVybiEwfX1yZXR1cm4hMX0KZnVuY3Rpb24gbHQoYSl7Zm9yKGxldCBjPTA7YzxhLmdldERhdGFzZXRzTGlzdCgpLmxlbmd0aDtjKyspe2NvbnN0IGQ9YS5nZXREYXRhc2V0c0xpc3QoKVtjXTtmb3IobGV0IGY9MDtmPGQuZ2V0RmVhdHVyZXNMaXN0KCkubGVuZ3RoO2YrKyl7Y29uc3QgZz1kLmdldEZlYXR1cmVzTGlzdCgpW2ZdLmdldEN1c3RvbVN0YXRzTGlzdCgpO2lmKG51bGwhPWcmJjA8Zy5sZW5ndGgpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIG10KGEpe2ZvcihsZXQgZD0wO2Q8YS5nZXREYXRhc2V0c0xpc3QoKS5sZW5ndGg7ZCsrKXtjb25zdCBmPWEuZ2V0RGF0YXNldHNMaXN0KClbZF07Zm9yKGxldCBnPTA7ZzxmLmdldEZlYXR1cmVzTGlzdCgpLmxlbmd0aDtnKyspe3ZhciBjPWYuZ2V0RmVhdHVyZXNMaXN0KClbZ107aWYoKGM9ZHQoYykpJiZjLmdldEZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtKCkpcmV0dXJuITB9fXJldHVybiExfQpmdW5jdGlvbiBudChhKXtpZighYSlyZXR1cm4hMTtmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLmhpc3RNYXBbSHEoITAsIlN0YW5kYXJkIildKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG90KGEpe2lmKCFhKXJldHVybiExO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10uaGlzdE1hcC5RdWFudGlsZXMpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcHQoYSl7aWYoIWEpcmV0dXJuITE7Zm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXS5oaXN0TWFwWyJWYWx1ZSBsaXN0IGxlbmd0aCJdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHF0KGEpe3JldHVybiBhP2EuZ2V0TnVtTm9uTWlzc2luZygpKmEuZ2V0QXZnTnVtVmFsdWVzKCk6MH0KZnVuY3Rpb24gcnQoYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4iaW50IjtjYXNlIDE6cmV0dXJuImZpeGVkLWxlbmd0aCBpbnRzIjtjYXNlIDI6cmV0dXJuInZhcmlhYmxlLWxlbmd0aCBpbnRzIjtjYXNlIDM6cmV0dXJuImZsb2F0IjtjYXNlIDQ6cmV0dXJuImZpeGVkLWxlbmd0aCBmbG9hdHMiO2Nhc2UgNTpyZXR1cm4idmFyaWFibGUtbGVuZ3RoIGZsb2F0cyI7Y2FzZSA2OnJldHVybiJzdHJpbmciO2Nhc2UgNzpyZXR1cm4iZml4ZWQtbGVuZ3RoIHN0cmluZ3MiO2Nhc2UgODpyZXR1cm4idmFyaWFibGUtbGVuZ3RoIHN0cmluZ3MiO2Nhc2UgOTpyZXR1cm4iYnl0ZXMiO2Nhc2UgMTA6cmV0dXJuImZpeGVkLWxlbmd0aCBieXRlcyI7Y2FzZSAxMTpyZXR1cm4idmFyaWFibGUtbGVuZ3RoIGJ5dGVzIjtjYXNlIDEyOnJldHVybiJzdHJ1Y3QiO2Nhc2UgMTM6cmV0dXJuImZpeGVkLWxlbmd0aCBzdHJ1Y3QiO2Nhc2UgMTQ6cmV0dXJuInZhcmlhYmxlLWxlbmd0aCBzdHJ1Y3QiO2RlZmF1bHQ6cmV0dXJuInVua25vd24ifX0KZnVuY3Rpb24gc3QoYSxjKXtyZXR1cm4gMTU9PT1hP2M6MTY8PWF8fDE1PT09Yz9hOjM8PWEmJjU+PWEmJjM8PWMmJjU+PWN8fDA8PWEmJjI+PWEmJjA8PWMmJjI+PWN8fDY8PWEmJjg+PWEmJjY8PWMmJjg+PWN8fDk8PWEmJjExPj1hJiY5PD1jJiYxMT49Y3x8MTI8PWEmJjE0Pj1hJiYxMjw9YyYmMTQ+PWM/TWF0aC5tYXgoYSxjKToxNn1mdW5jdGlvbiB0dChhLGMpe3ZhciBkPTE1O2lmKG51bGwhPWMmJjAhPT1jLmdldE51bU5vbk1pc3NpbmcoKSl7bGV0IGY9ZD0hMTtjLmdldE1pbk51bVZhbHVlcygpPT09Yy5nZXRNYXhOdW1WYWx1ZXMoKSYmKDE9PT1jLmdldE1pbk51bVZhbHVlcygpP2Q9ITA6Zj0hMCk7ZD0xPT09YT9kPzM6Zj80OjU6MD09PWE/ZD8wOmY/MToyOjI9PT1hP2Q/NjpmPzc6ODozPT09YT9kPzk6Zj8xMDoxMTpkPzEyOmY/MTM6MTR9cmV0dXJuIGR9Y2xhc3MgdXR7fWNsYXNzIHZ0e31jbGFzcyB3dHt9CmZ1bmN0aW9uIHh0KGEpe2xldCBjPTAsZD0wO2Zvcih2YXIgZj0wO2Y8YS5sZW5ndGg7ZisrKWFbZl0ucmF3QnVja2V0cy5sZW5ndGg+YyYmKGM9YVtmXS5yYXdCdWNrZXRzLmxlbmd0aCxkPWYpO2Y9W107Zm9yKGxldCBnPTA7ZzxjO2crKyl7Y29uc3QgbD1uZXcgd3Q7bC52YWx1ZT1hW2RdLnJhd0J1Y2tldHNbZ10uZ2V0TGFiZWwoKTtsLmNvdW50cz1bXTtmb3IobGV0IGs9MDtrPGEubGVuZ3RoO2srKylhW2tdLnJhd0J1Y2tldHMubGVuZ3RoPD1nP2wuY291bnRzLnB1c2goMCk6bC5jb3VudHMucHVzaChhW2tdLnJhd0J1Y2tldHNbZ10uZ2V0U2FtcGxlQ291bnQoKSk7Zi5wdXNoKGwpfXJldHVybiBmfQpmdW5jdGlvbiB5dChhLGMpe2NvbnN0IGQ9W107Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspe2NvbnN0IGc9bmV3IHd0LGw9Y1tmXTtnLnZhbHVlPWw7Zy5jb3VudHM9W107Zm9yKGxldCBrPTA7azxhLmxlbmd0aDtrKyspe2NvbnN0IG49YVtrXS5yYXdCdWNrZXRzO2xldCBwPS0xO2ZvcihsZXQgcT0wO3E8bi5sZW5ndGg7cSsrKWlmKG5bcV0uZ2V0TGFiZWwoKT09PWwpe3A9cTticmVha30tMT09PXA/Zy5jb3VudHMucHVzaCgwKTpnLmNvdW50cy5wdXNoKG5bcF0uZ2V0U2FtcGxlQ291bnQoKSl9ZC5wdXNoKGcpfXJldHVybiBkfXZhciB6dDsoZnVuY3Rpb24oYSl7YVthLkhJU1RPR1JBTT0wXT0iSElTVE9HUkFNIjthW2EuQkFSX0NIQVJUPTFdPSJCQVJfQ0hBUlQiO2FbYS5DVU1ESVNUX0NIQVJUPTJdPSJDVU1ESVNUX0NIQVJUIn0pKHp0fHwoenQ9e30pKTsKZnVuY3Rpb24gQXQoYSl7cmV0dXJuIlF1YW50aWxlcyI9PT1hfHwiVmFsdWUgbGlzdCBsZW5ndGgiPT09YXx8IkZlYXR1cmUgbGlzdCBsZW5ndGgiPT09YX1mdW5jdGlvbiBCdChhLGMsZCl7bGV0IGY9ITAsZz0wO2EuZm9yRWFjaChsPT57bC5oaXN0TWFwW2NdJiYobD1sLmhpc3RNYXBbY10uZ2V0QnVja2V0c0xpc3QoKSxnPU1hdGgubWF4KGcsbC5sZW5ndGgpLGwuZm9yRWFjaChrPT57ay5nZXRMb3dWYWx1ZXx8KGY9ITEpfSkpfSk7cmV0dXJuIGY/enQuSElTVE9HUkFNOmc+ZD96dC5DVU1ESVNUX0NIQVJUOnp0LkJBUl9DSEFSVH0KY2xhc3MgQ3R7Y29uc3RydWN0b3IoYSxjLGQpe3RoaXMuc3RyPWE7dGhpcy5jc3NDbGFzcz1jO3RoaXMuZnVsbFN0cj1kO3RoaXMuZnVsbFN0cnx8KHRoaXMuZnVsbFN0cj1hKX1hcHBlbmQoYSxjKXtjJiYodGhpcy5zdHIrPWMsdGhpcy5mdWxsU3RyKz1jKTt0aGlzLnN0cis9YS5zdHI7dGhpcy5mdWxsU3RyKz1hLmZ1bGxTdHI7dGhpcy5jc3NDbGFzcys9YS5jc3NDbGFzc319ZnVuY3Rpb24gRHQoYSl7Y29uc3QgYz1NYXRoLmFicyhhKTtyZXR1cm4oLjAxPmMmJjA8Y3x8MUU0PGMpJiZpc0Zpbml0ZShhKT9kMy5mb3JtYXQoIi4zcyIpKGEpLnJlcGxhY2UoL0ckLywiQiIpOmEudG9Mb2NhbGVTdHJpbmcoKX1mdW5jdGlvbiBFdChhLGMpe2NvbnN0IGQ9RHQoV3MoYnQoYSksMUU2PE1hdGguYWJzKGEpPzA6MikpO2M9RnQoYSxjLHZvaWQgMCk7cmV0dXJuIG5ldyBDdChkLGMsYS50b0xvY2FsZVN0cmluZyhbXSx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjl9KSl9CmZ1bmN0aW9uIEd0KGEsYyxkKXthPWJ0KGEpO2E9bnVsbCE9YSYmYz9hL2M6MDtjPS45OTk5OTk8YSYmMT5hPyJ+MTAwJSI6MUUtNj5hJiYwPGE/In4wJSI6V3MoMTAwKmEsMikrIiUiO2Q9RnQoYSwhMSxkKTtyZXR1cm4gbmV3IEN0KGMsZCwxMDAqYSsiJSIpfWZ1bmN0aW9uIEh0KGEsYyxkKXtjb25zdCBmPUR0KGEpO2M9RnQoYSxjLGQpO3JldHVybiBuZXcgQ3QoZixjLGEudG9Mb2NhbGVTdHJpbmcoKSl9ZnVuY3Rpb24gSXQoYSxjKXthPWF0KCRzKGEpKTtjPUZ0KGEsYyx2b2lkIDApO3JldHVybiBuZXcgQ3QoYSxjKX1mdW5jdGlvbiBGdChhLGMsZCl7Yz1jPyJkYXRhLXdlaWdodGVkICI6IiI7aWYoZCYmZChhKXx8Im51bWJlciI9PT10eXBlb2YgYSYmIWlzRmluaXRlKGEpKWMrPSJkYXRhLWVycm9yICI7cmV0dXJuIGN9CmZ1bmN0aW9uIEp0KGEsYyxkKXtjb25zdCBmPVtdO2YucHVzaChJdCgiY291bnQiKSk7Zi5wdXNoKEl0KCJtaXNzaW5nIikpO2E/KGYucHVzaChJdCgibWVhbiIsYykpLGYucHVzaChJdCgic3RkIGRldiIsYykpLGYucHVzaChJdCgiemVyb3MiKSksZi5wdXNoKEl0KCJtaW4iKSksZi5wdXNoKEl0KCJtZWRpYW4iLGMpKSxmLnB1c2goSXQoIm1heCIpKSk6KGYucHVzaChJdCgidW5pcXVlIikpLGYucHVzaChJdCgidG9wIixjKSksZi5wdXNoKEl0KCJmcmVxIHRvcCIsYykpLGYucHVzaChJdCgiYXZnIHN0ciBsZW4iKSkpO2QmJmYucHVzaChuZXcgQ3QoImN1c3RvbSIsImRhdGEtY3VzdG9tICIpKTtyZXR1cm4gZn0KZnVuY3Rpb24gZHQoYSl7cmV0dXJuIGE/YS5nZXROdW1TdGF0cygpP2EuZ2V0TnVtU3RhdHMoKS5nZXRDb21tb25TdGF0cygpOmEuZ2V0U3RyaW5nU3RhdHMoKT9hLmdldFN0cmluZ1N0YXRzKCkuZ2V0Q29tbW9uU3RhdHMoKTphLmdldEJ5dGVzU3RhdHMoKT9hLmdldEJ5dGVzU3RhdHMoKS5nZXRDb21tb25TdGF0cygpOmEuZ2V0U3RydWN0U3RhdHMoKT9hLmdldFN0cnVjdFN0YXRzKCkuZ2V0Q29tbW9uU3RhdHMoKTpudWxsOm51bGx9ZnVuY3Rpb24gS3QoYSl7Y29uc3QgYz1bXTthPyhjLnB1c2goSHQoYS5nZXROdW1Ob25NaXNzaW5nKCksITEsZD0+MD49ZCkpLGMucHVzaChHdChhLmdldE51bU1pc3NpbmcoKSxidChhLmdldE51bU5vbk1pc3NpbmcoKSkrYnQoYS5nZXROdW1NaXNzaW5nKCkpLGQ9Pi4wMjxkKSkpOihjLnB1c2goSHQoMCwhMSxkPT4wPj1kKSksYy5wdXNoKEd0KDEsMSxkPT4uMDI8ZCkpKTtyZXR1cm4gY30KZnVuY3Rpb24gTHQoYSxjLGQpe2NvbnN0IGY9W107aWYoYSkoZD1kP2EuZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoKTpudWxsKT8oZi5wdXNoKEV0KGQuZ2V0TWVhbigpLCEwKSksZi5wdXNoKEV0KGQuZ2V0U3RkRGV2KCksITApKSk6KGYucHVzaChFdChhLmdldE1lYW4oKSkpLGYucHVzaChFdChhLmdldFN0ZERldigpKSkpLGYucHVzaChHdChhLmdldE51bVplcm9zKCkscXQoYyksZz0+LjE8ZykpLGM9TXQoYSksZi5wdXNoKEV0KGM/TmFOOmEuZ2V0TWluKCkpKSxkP2YucHVzaChFdChkLmdldE1lZGlhbigpLCEwKSk6Zi5wdXNoKEV0KGEuZ2V0TWVkaWFuKCkpKSxmLnB1c2goRXQoYz9OYU46YS5nZXRNYXgoKSkpO2Vsc2UgZm9yKGE9MDs2PmE7YSsrKWYucHVzaChJdCgiLSIpKTtyZXR1cm4gZn0KZnVuY3Rpb24gTXQoYSl7aWYoIWEpcmV0dXJuITE7YT1hLmdldEhpc3RvZ3JhbXNMaXN0KCk7Zm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspaWYoMDxhW2NdLmdldE51bU5hbigpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE50KGEsYyl7Y29uc3QgZD1bXTtpZihhKXtjPWM/YS5nZXRXZWlnaHRlZFN0cmluZ1N0YXRzKCk6bnVsbDtkLnB1c2goSHQoYS5nZXRVbmlxdWUoKSkpO2NvbnN0IGY9Yz9jLmdldFRvcFZhbHVlc0xpc3QoKTphLmdldFRvcFZhbHVlc0xpc3QoKTtmJiYwPGYubGVuZ3RoPyhkLnB1c2goSXQoZlswXS5nZXRWYWx1ZSgpLCEhYykpLGQucHVzaChFdChmWzBdLmdldEZyZXF1ZW5jeSgpLCEhYykpKTooZC5wdXNoKEl0KCItIikpLGQucHVzaChJdCgiLSIpKSk7ZC5wdXNoKEV0KGEuZ2V0QXZnTGVuZ3RoKCkpKX1lbHNlIGZvcihhPTA7ND5hO2ErKylkLnB1c2goSXQoIi0iKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIE90KGEpe2NvbnN0IGM9W107aWYoYSljLnB1c2goSHQoYS5nZXRVbmlxdWUoKSkpLGMucHVzaChJdCgiLSIpKSxjLnB1c2goSXQoIi0iKSksYy5wdXNoKEV0KGEuZ2V0QXZnTnVtQnl0ZXMoKSkpO2Vsc2UgZm9yKGE9MDs0PmE7YSsrKWMucHVzaChJdCgiLSIpKTtyZXR1cm4gY31mdW5jdGlvbiBQdChhKXtjb25zdCBjPVtdO2lmKGEmJjA8YS5sZW5ndGgpe2NvbnN0IGQ9bmV3IEN0KCIiLCJkYXRhLWN1c3RvbSAiKTthLmZvckVhY2goZj0+e2lmKCFmLmdldEhpc3RvZ3JhbSgpJiYhZi5nZXRSYW5rSGlzdG9ncmFtKCkpe3ZhciBnPWYuZ2V0TmFtZSgpOyIiIT09ZC5zdHImJihnPSJcbiIrZyk7ZC5hcHBlbmQoSXQoZykpO2YuZ2V0U3RyKCk/ZC5hcHBlbmQoSXQoZi5nZXRTdHIoKSksIjogIik6ZC5hcHBlbmQoRXQoZi5nZXROdW0oKSksIjogIil9fSk7Yy5wdXNoKGQpfWVsc2UgYy5wdXNoKG5ldyBDdCgiLSIsImRhdGEtY3VzdG9tICIpKTtyZXR1cm4gY30KZnVuY3Rpb24gUXQoYSxjLGQpe2lmKCFhKXJldHVybltdO2NvbnN0IGY9ZHQoYSk7bGV0IGc9S3QoZik7Zz1hLmdldE51bVN0YXRzKCk/Zy5jb25jYXQoTHQoYS5nZXROdW1TdGF0cygpLGYsYykpOmEuZ2V0U3RyaW5nU3RhdHMoKT9nLmNvbmNhdChOdChhLmdldFN0cmluZ1N0YXRzKCksYykpOmcuY29uY2F0KE90KGEuZ2V0Qnl0ZXNTdGF0cygpKSk7ZCYmKGc9Zy5jb25jYXQoUHQoYS5nZXRDdXN0b21TdGF0c0xpc3QoKSkpKTtyZXR1cm4gZ30KZnVuY3Rpb24gUnQoYSl7Y29uc3QgYz1hLm1hcCgoKT0+MCk7YS5mb3JFYWNoKChkLGYpPT57ZC5mb3JFYWNoKGc9PntjW2ZdKz1idChnLmdldFNhbXBsZUNvdW50KCkpfSl9KTtyZXR1cm4gYS5tYXAoKGQsZik9PmQubWFwKGc9PntpZihnIGluc3RhbmNlb2YgYW0pe3ZhciBsPW5ldyBhbTtsLnNldFNhbXBsZUNvdW50KGcuZ2V0U2FtcGxlQ291bnQoKS9jW2ZdKTtsLnNldExvd1ZhbHVlKGcuZ2V0TG93VmFsdWUoKSk7bC5zZXRIaWdoVmFsdWUoZy5nZXRIaWdoVmFsdWUoKSk7cmV0dXJuIGx9bD1uZXcgZG07bC5zZXRTYW1wbGVDb3VudChnLmdldFNhbXBsZUNvdW50KCkvY1tmXSk7bC5zZXRMb3dSYW5rKGcuZ2V0TG93UmFuaygpKTtsLnNldEhpZ2hSYW5rKGcuZ2V0SGlnaFJhbmsoKSk7bC5zZXRMYWJlbChnLmdldExhYmVsKCkpO3JldHVybiBsfSkpfTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtb3ZlcnZpZXcvY29tbW9uL292ZXJ2aWV3X2RhdGFfbW9kZWwuanMKY2xhc3MgU3R7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRhPWE7dGhpcy5jb2xvclNjYWxlPW5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yO3RoaXMuY29sb3JTY2FsZS5kb21haW4oYS5nZXREYXRhc2V0c0xpc3QoKS5tYXAoYz0+Yy5nZXROYW1lKCkpKTt0aGlzLmNvbG9yU2NhbGUucmFuZ2UoIiM0Mjg1RjQgI0YwOTMwMCAjMEY5RDU4ICM5QzI3QjAgIzYwN0Q4QiAjMEI4MDQzICM3NTc1NzUiLnNwbGl0KCIgIikpO2lmKCFqdChhKSl0aHJvdyBFcnJvcigiaW5wdXQgcHJvdG8gaGFzIG5vdCBiZWVuIGNsZWFuZWQiKTt0aGlzLmZlYXR1cmVzQnlTcGVjPXRoaXMubWFrZUZlYXR1cmVCeVNwZWNMaXN0KCl9bWFrZUZlYXR1cmVCeVNwZWNMaXN0KCl7Y29uc3QgYT1bXTtmb3IobGV0IGM9MDsxNj5jO2MrKylhW2NdPVtdO3RoaXMuZ2V0VW5pcXVlRmVhdHVyZXMoKS5mb3JFYWNoKGM9Pntjb25zdCBkPXRoaXMuZ2V0RmVhdHVyZVNwZWNGb3JGZWF0dXJlKGMuZ2V0TmFtZSgpKTthW2RdLnB1c2goYy5nZXROYW1lKCkpfSk7CnJldHVybiBhfWdldE5vbkVtcHR5RmVhdHVyZVNwZWNMaXN0cygpe2NvbnN0IGE9W107Zm9yKGxldCBjPTA7MTY+YztjKyspaWYoMCE9PXRoaXMuZmVhdHVyZXNCeVNwZWNbY10ubGVuZ3RoKXtjb25zdCBkPW5ldyB1dDtkLmZlYXR1cmVzPXRoaXMuZmVhdHVyZXNCeVNwZWNbY107ZC5zcGVjPWM7YS5wdXNoKGQpfXJldHVybiBhfWdldEZlYXR1cmVTcGVjRm9yRmVhdHVyZShhKXtjb25zdCBjPXRoaXMuZ2V0RGF0YXNldE5hbWVzKCk7bGV0IGQ9MTU7Zm9yKGxldCBnPTA7ZzxjLmxlbmd0aDtnKyspe3ZhciBmPXRoaXMuZ2V0RmVhdHVyZShhLGNbZ10pO2Y9bnVsbD09Zj8xNTp0dChmLmdldFR5cGUoKSx0aGlzLmdldEZlYXR1cmVDb21tb25TdGF0cyhhLGNbZ10pKTtkPXN0KGQsZil9MTY9PT1kJiYoZD0xNSk7cmV0dXJuIGR9Z2V0RGF0YXNldEZlYXR1cmVTdGF0aXN0aWNzKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRDb2xvclNjYWxlKCl7cmV0dXJuIHRoaXMuY29sb3JTY2FsZX1nZXREYXRhc2V0TmFtZXMoKXtyZXR1cm4gdGhpcy5kYXRhPwp0aGlzLmRhdGEuZ2V0RGF0YXNldHNMaXN0KCkubWFwKGE9PmEuZ2V0TmFtZSgpKTpbXX1nZXREYXRhc2V0KGEpe2lmKCF0aGlzLmRhdGEpcmV0dXJuIG51bGw7Zm9yKGNvbnN0IGMgb2YgdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpKWlmKGMuZ2V0TmFtZSgpPT09YSlyZXR1cm4gYztyZXR1cm4gbnVsbH1nZXRGZWF0dXJlKGEsYyl7aWYoIWF8fCF0aGlzLmRhdGEpcmV0dXJuIG51bGw7Yz10aGlzLmdldERhdGFzZXQoYyk7aWYoIWMpcmV0dXJuIG51bGw7Zm9yKGNvbnN0IGQgb2YgYy5nZXRGZWF0dXJlc0xpc3QoKSlpZihkLmdldE5hbWUoKT09PWEpcmV0dXJuIGQ7cmV0dXJuIG51bGx9Z2V0RXh0cmFIaXN0b2dyYW1OYW1lcyhhKXtpZighdGhpcy5kYXRhKXJldHVybltdO2E9YS5tYXAoZD0+ZC5nZXROYW1lKCkpO2NvbnN0IGM9e307Zm9yKGNvbnN0IGQgb2YgdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpKWZvcihjb25zdCBmIG9mIGQuZ2V0RmVhdHVyZXNMaXN0KCkpaWYoLTEhPT0KYS5pbmRleE9mKGYuZ2V0TmFtZSgpKSYmKGYuZ2V0Q3VzdG9tU3RhdHNMaXN0KCkmJmYuZ2V0Q3VzdG9tU3RhdHNMaXN0KCkuZm9yRWFjaChnPT57aWYoZy5nZXRIaXN0b2dyYW0oKXx8Zy5nZXRSYW5rSGlzdG9ncmFtKCkpY1tnLmdldE5hbWUoKV09ITB9KSxmLmdldE51bVN0YXRzKCkpKXtjb25zdCBnPWYuZ2V0TnVtU3RhdHMoKS5nZXRIaXN0b2dyYW1zTGlzdCgpO2lmKGcpZm9yKGxldCBsPTA7bDxnLmxlbmd0aDtsKyspe2NvbnN0IGs9Z1tsXTtrLmdldE5hbWUoKSYmKGNbay5nZXROYW1lKCldPSEwKX19cmV0dXJuIE9iamVjdC5rZXlzKGMpfWdldEZlYXR1cmVDb21tb25TdGF0cyhhLGMpe2E9dGhpcy5nZXRGZWF0dXJlKGEsYyk7cmV0dXJuIG51bGw9PWE/bnVsbDpkdChhKX1nZXRGZWF0dXJlTmFtZXMoYSl7cmV0dXJuIGEmJnRoaXMuZGF0YT8oYT10aGlzLmdldERhdGFzZXQoYSkpP2EuZ2V0RmVhdHVyZXNMaXN0KCkubWFwKGM9PmMuZ2V0TmFtZSgpKTpbXTpudWxsfWdldEZlYXR1cmVJbmRleChhLApjKXtpZighdGhpcy5kYXRhKXJldHVybiBudWxsO2E9dGhpcy5nZXREYXRhc2V0KGEpO2lmKCFhKXJldHVybiBudWxsO2xldCBkPTA7Zm9yKGNvbnN0IGYgb2YgYS5nZXRGZWF0dXJlc0xpc3QoKSl7aWYoZi5nZXROYW1lKCk9PT1jKXJldHVybiBkOysrZH1yZXR1cm4gbnVsbH1nZXRVbmlxdWVGZWF0dXJlcygpe2lmKCF0aGlzLmRhdGEpcmV0dXJuW107Y29uc3QgYT17fTtmb3IoY29uc3QgYyBvZiB0aGlzLmRhdGEuZ2V0RGF0YXNldHNMaXN0KCkpZm9yKGNvbnN0IGQgb2YgYy5nZXRGZWF0dXJlc0xpc3QoKSlhW2QuZ2V0TmFtZSgpXT1kO3JldHVybiBPYmplY3Qua2V5cyhhKS5tYXAoYz0+YVtjXSl9Z2V0TnVtVW5pcXVlRmVhdHVyZXNCeVR5cGUoYSl7cmV0dXJuIHRoaXMuZ2V0VW5pcXVlRmVhdHVyZXMoKS5maWx0ZXIoYz0+aHQoYyk9PT1hKS5sZW5ndGh9ZmVhdHVyZUhhc1NpbmdsZVZhbHVlKGEpe2lmKCFhKXJldHVybiExO2lmKGEuZ2V0U3RyaW5nU3RhdHMoKSl7dmFyIGM9YS5nZXRTdHJpbmdTdGF0cygpLmdldFVuaXF1ZSgpOwpyZXR1cm4gMT09PWJ0KGMpfXJldHVybiBhLmdldEJ5dGVzU3RhdHMoKT8oYz1hLmdldEJ5dGVzU3RhdHMoKS5nZXRVbmlxdWUoKSwxPT09YnQoYykpOmEuZ2V0TnVtU3RhdHMoKT8oYz1hLmdldE51bVN0YXRzKCkuZ2V0TWluKCksYT1hLmdldE51bVN0YXRzKCkuZ2V0TWF4KCksbnVsbD09YyYmbnVsbD09YT8hMTpidChjKT09PWJ0KGEpKTohMX1mZWF0dXJlQWNyb3NzQWxsRGF0YXNldHNIYXNTaW5nbGVWYWx1ZShhKXtpZighYXx8IXRoaXMuZGF0YSlyZXR1cm4hMTtmb3IoY29uc3QgYyBvZiB0aGlzLmRhdGEuZ2V0RGF0YXNldHNMaXN0KCkpZm9yKGNvbnN0IGQgb2YgYy5nZXRGZWF0dXJlc0xpc3QoKSlpZihhPT09ZC5nZXROYW1lKCkmJiF0aGlzLmZlYXR1cmVIYXNTaW5nbGVWYWx1ZShkKSlyZXR1cm4hMTtyZXR1cm4hMH1nZXRGZWF0dXJlU2luZ2xlVmFsdWUoYSl7aWYobnVsbD09YSlyZXR1cm4iXHgzY251bGxceDNlIjtpZihhLmdldFN0cmluZ1N0YXRzKCkpcmV0dXJuIGE9YS5nZXRTdHJpbmdTdGF0cygpLmdldFRvcFZhbHVlc0xpc3QoKSwKbnVsbD09YXx8MD09PWEubGVuZ3RoPyJceDNjbnVsbFx4M2UiOmFbMF0uZ2V0VmFsdWUoKTtpZihhLmdldEJ5dGVzU3RhdHMoKSlyZXR1cm4gMD09PWEuZ2V0Qnl0ZXNTdGF0cygpLmdldFVuaXF1ZSgpPyJceDNjbnVsbFx4M2UiOiJceDNjYmluYXJ5IGRhdGFceDNlIjtpZihhLmdldE51bVN0YXRzKCkpe2NvbnN0IGM9YS5nZXROdW1TdGF0cygpLmdldE1pbigpO2lmKGMpcmV0dXJuIGJ0KGMpLnRvU3RyaW5nKCk7aWYoYT1hLmdldE51bVN0YXRzKCkuZ2V0TWF4KCkpcmV0dXJuIGJ0KGEpLnRvU3RyaW5nKCl9cmV0dXJuIlx4M2N1bmtub3duIHR5cGVceDNlIn1nZXREYXRhc2V0SGlzdG9ncmFtc0ZvckZlYXR1cmUoYSl7Y29uc3QgYz1bXTtpZih0aGlzLmRhdGEpZm9yKGNvbnN0IGwgb2YgdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpKXtjb25zdCBrPWwuZ2V0TmFtZSgpO2xldCBuPW51bGwscD1udWxsLHE9bnVsbCxyPW51bGwsdD1udWxsLHY9bnVsbDtjb25zdCB5PXt9O2Zvcihjb25zdCB6IG9mIGwuZ2V0RmVhdHVyZXNMaXN0KCkpaWYoei5nZXROYW1lKCk9PT0KYSl7dmFyIGQ9dGhpcy5nZXRGZWF0dXJlQ29tbW9uU3RhdHMoYSxrKTtkJiYodD1kLmdldE51bVZhbHVlc0hpc3RvZ3JhbSgpLHY9ZC5nZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbSgpKTt6LmdldEN1c3RvbVN0YXRzTGlzdCgpJiZ6LmdldEN1c3RvbVN0YXRzTGlzdCgpLmZvckVhY2goeD0+e3guZ2V0SGlzdG9ncmFtKCk/eVt4LmdldE5hbWUoKV09eC5nZXRIaXN0b2dyYW0oKTp4LmdldFJhbmtIaXN0b2dyYW0oKSYmKHlbeC5nZXROYW1lKCldPXguZ2V0UmFua0hpc3RvZ3JhbSgpKX0pO2lmKHouZ2V0TnVtU3RhdHMoKSl7aWYoZD16LmdldE51bVN0YXRzKCkuZ2V0SGlzdG9ncmFtc0xpc3QoKSlmb3IodmFyIGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGc9ZFtmXTtnLmdldE5hbWUoKT95W2cuZ2V0TmFtZSgpXT1nOjA9PT1nLmdldFR5cGUoKT9uPWc6cT1nfWlmKHouZ2V0TnVtU3RhdHMoKS5nZXRXZWlnaHRlZE51bWVyaWNTdGF0cygpJiYoZD16LmdldE51bVN0YXRzKCkuZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoKS5nZXRIaXN0b2dyYW1zTGlzdCgpKSlmb3IoZj0KMDtmPGQubGVuZ3RoO2YrKylnPWRbZl0sMD09PWcuZ2V0VHlwZSgpP3A9ZzpyPWd9ZWxzZSB6LmdldFN0cmluZ1N0YXRzKCkmJihuPXouZ2V0U3RyaW5nU3RhdHMoKS5nZXRSYW5rSGlzdG9ncmFtKCksei5nZXRTdHJpbmdTdGF0cygpLmdldFdlaWdodGVkU3RyaW5nU3RhdHMoKSYmKHA9ei5nZXRTdHJpbmdTdGF0cygpLmdldFdlaWdodGVkU3RyaW5nU3RhdHMoKS5nZXRSYW5rSGlzdG9ncmFtKCkpKTticmVha31jLnB1c2gobmV3IEdxKGssbixwLHEscix0LHYseSkpfXJldHVybiBjfWRvZXNDb250YWluV2VpZ2h0ZWRTdGF0cygpe251bGw9PXRoaXMuY29udGFpbnNXZWlnaHRlZFN0YXRzJiYodGhpcy5jb250YWluc1dlaWdodGVkU3RhdHM9a3QodGhpcy5kYXRhKSk7cmV0dXJuIHRoaXMuY29udGFpbnNXZWlnaHRlZFN0YXRzfWRvZXNDb250YWluQ3VzdG9tU3RhdHMoKXtudWxsPT10aGlzLmNvbnRhaW5zQ3VzdG9tU3RhdHMmJih0aGlzLmNvbnRhaW5zQ3VzdG9tU3RhdHM9bHQodGhpcy5kYXRhKSk7CnJldHVybiB0aGlzLmNvbnRhaW5zQ3VzdG9tU3RhdHN9ZG9lc0NvbnRhaW5GZWF0dXJlTGlzdExlbmd0aERhdGEoKXtudWxsPT10aGlzLmNvbnRhaW5zRmVhdHVyZUxpc3RMZW5ndGhEYXRhJiYodGhpcy5jb250YWluc0ZlYXR1cmVMaXN0TGVuZ3RoRGF0YT1tdCh0aGlzLmRhdGEpKTtyZXR1cm4gdGhpcy5jb250YWluc0ZlYXR1cmVMaXN0TGVuZ3RoRGF0YX1nZXRDaGFydEFscGhhKCl7cmV0dXJuIDI8PXRoaXMuZ2V0RGF0YXNldE5hbWVzKCkubGVuZ3RoPy40OjF9Z2V0Q2hhcnRDb2xvclN0cmluZyhhKXthPXRoaXMuZ2V0Q29sb3JTY2FsZSgpLnNjYWxlKHRoaXMuZ2V0RGF0YXNldE5hbWVzKClbYV0pO2NvbnN0IGM9dGhpcy5nZXRDaGFydEFscGhhKCk7cmV0dXJuIGEucmVwbGFjZSgicmdiIiwicmdiYSIpLnJlcGxhY2UoIikiLCIsICIrYysiKSIpfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLW92ZXJ2aWV3L2NvbW1vbi9wbG90dGFibGVfaGVscGVycy5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhwKXtjb25zdCBxPVtdO2Zvcig7cCYmcCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZihxLnB1c2gocCkscC5hc3NpZ25lZFNsb3QpcD1wLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHAucGFyZW50RWxlbWVudClwPXAucGFyZW50RWxlbWVudDtlbHNle2NvbnN0IHI9cC5wYXJlbnROb2RlO3A9ciBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/ci5ob3N0OnIhPT1wP3I6bnVsbH1yZXR1cm4gcX1mdW5jdGlvbiBkKHApe3ZhciBxPWMocCk7cD1mO2xldCByPW51bGw7Zm9yKGNvbnN0IHYgb2YgcSl7cT1QbG90dGFibGUuVXRpbHMuRE9NLmdldEVsZW1lbnRUcmFuc2Zvcm0odik7aWYobnVsbCE9cSl7dmFyIHQ9di5jbGllbnRXaWR0aC8yO2NvbnN0IHk9di5jbGllbnRIZWlnaHQvMjtwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHAsW3QseV0pO3A9UGxvdHRhYmxlLlV0aWxzLk1hdGgubXVsdGlwbHlNYXRyaXgocCxQbG90dGFibGUuVXRpbHMuTWF0aC5pbnZlcnRNYXRyaXgocSkpOwpwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHAsWy10LC15XSl9cT12LnNjcm9sbExlZnQ7dD12LnNjcm9sbFRvcDtpZihudWxsPT09cnx8dj09PXIpcS09di5vZmZzZXRMZWZ0K3YuY2xpZW50TGVmdCx0LT12Lm9mZnNldFRvcCt2LmNsaWVudFRvcCxyPXYub2Zmc2V0UGFyZW50O3A9UGxvdHRhYmxlLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocCxbcSx0XSl9cmV0dXJuIHB9Y29uc3QgZj1bMSwwLDAsMSwwLDBdO2NsYXNzIGcgZXh0ZW5kcyBQbG90dGFibGUuVXRpbHMuVHJhbnNsYXRvcntjb21wdXRlUG9zaXRpb24ocCxxKXtwPXt4OnAseTpxfTtxPWQodGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBudWxsPT1xP3A6UGxvdHRhYmxlLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0ocSxwKX19Y2xhc3MgbCBleHRlbmRzIFBsb3R0YWJsZS5EaXNwYXRjaGVycy5Nb3VzZXtjb25zdHJ1Y3RvcihwKXtzdXBlcihwKTt0aGlzLl9ldmVudFRhcmdldD1wLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKTsKdGhpcy5fdHJhbnNsYXRvcj1uZXcgZyhwLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIocCl7Y29uc3QgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpO2xldCByPXFbbC5fRElTUEFUQ0hFUl9LRVldO3J8fChyPW5ldyBsKHApLHFbbC5fRElTUEFUQ0hFUl9LRVldPXIpO3JldHVybiByfX1jbGFzcyBrIGV4dGVuZHMgUGxvdHRhYmxlLkRpc3BhdGNoZXJzLlRvdWNoe2NvbnN0cnVjdG9yKHApe3N1cGVyKHApO3RoaXMuX2V2ZW50VGFyZ2V0PXAucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpO3RoaXMuX3RyYW5zbGF0b3I9bmV3IGcocC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHApe2NvbnN0IHE9cC5yb290KCkucm9vdEVsZW1lbnQoKTtsZXQgcj1xW2suX0RJU1BBVENIRVJfS0VZXTtyfHwocj1uZXcgayhwKSxxW2suX0RJU1BBVENIRVJfS0VZXT1yKTtyZXR1cm4gcn19Y2xhc3MgbiBleHRlbmRzIFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuUG9pbnRlcntfYW5jaG9yKCl7dGhpcy5faXNBbmNob3JlZD0KITA7dGhpcy5fbW91c2VEaXNwYXRjaGVyPWwuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlcj1rLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfX1hLlBvaW50ZXJJbnRlcmFjdGlvbj1ufSkod2luZG93LnBsb3R0YWJsZV9oZWxwZXJzfHwod2luZG93LnBsb3R0YWJsZV9oZWxwZXJzPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLW92ZXJ2aWV3L2NvbXBvbmVudHMvZmFjZXRzLW92ZXJ2aWV3LXJvdy1zdGF0cy9mYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzLmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzIixwcm9wZXJ0aWVzOntzdGF0czpPYmplY3Qsc2hvd1dlaWdodGVkOkJvb2xlYW4saGFzQ3VzdG9tOkJvb2xlYW4sZGF0YU1vZGVsOk9iamVjdCxkYXRhc2V0SW5kZXg6TnVtYmVyLGNvbXBhcmVNb2RlOkJvb2xlYW4sX2VudHJpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRFbnRyaWVzKHN0YXRzLCBzaG93V2VpZ2h0ZWQsIGhhc0N1c3RvbSkifX0sb2JzZXJ2ZXJzOlsiX2NvbG9yTGVnZW5kQm94KGRhdGFNb2RlbCwgZGF0YXNldEluZGV4LCBjb21wYXJlTW9kZSkiXSxfZ2V0RW50cmllczpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIFF0KGEsYyxkKX0sX2NvbG9yTGVnZW5kQm94OmZ1bmN0aW9uKGEsYyxkKXtjb25zdCBmPWQzLnNlbGVjdCh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI2xlZ2VuZC1ib3giKSk7Mj5hLmdldERhdGFzZXROYW1lcygpLmxlbmd0aCYmIWQ/Zi5zdHlsZSgidmlzaWJpbGl0eSIsCiJoaWRkZW4iKTooZi5zdHlsZSgidmlzaWJpbGl0eSIsbnVsbCksZi5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsYS5nZXRDaGFydENvbG9yU3RyaW5nKGMpKSl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLW92ZXJ2aWV3L2NvbXBvbmVudHMvZmFjZXRzLW92ZXJ2aWV3LXJvdy1sZWdlbmQvZmFjZXRzLW92ZXJ2aWV3LXJvdy1sZWdlbmQuanMKUG9seW1lcih7aXM6ImZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kIixwcm9wZXJ0aWVzOntudW1lcmljOkJvb2xlYW4sc2hvd1dlaWdodGVkOkJvb2xlYW4saGFzQ3VzdG9tOkJvb2xlYW4sZGF0YU1vZGVsOk9iamVjdCxfZW50cmllczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEVudHJpZXMobnVtZXJpYywgc2hvd1dlaWdodGVkLCBoYXNDdXN0b20pIn19LF9nZXRFbnRyaWVzOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gSnQoYSxjLGQpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL2ZhY2V0cy1vdmVydmlldy9jb21wb25lbnRzL2ZhY2V0cy1vdmVydmlldy1jaGFydC9mYWNldHMtb3ZlcnZpZXctY2hhcnQuanMKUG9seW1lcih7aXM6ImZhY2V0cy1vdmVydmlldy1jaGFydCIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVEYXRhIn0sZGF0YU1vZGVsOk9iamVjdCxmZWF0dXJlOlN0cmluZyxfbWF4QnVja2V0c0ZvckJhckNoYXJ0Ont0eXBlOk51bWJlcix2YWx1ZToxMCxyZWFkT25seTohMH0sX2NoYXJ0QWxwaGE6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LGxvZ1NjYWxlOkJvb2xlYW4sc2hvd1dlaWdodGVkOkJvb2xlYW4sc2hvd1BlcmNlbnRhZ2U6Qm9vbGVhbixjaGFydFNlbGVjdGlvbjp7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il91cGRhdGVDaGFydFNlbGVjdGlvbiJ9LHNlbGVjdGlvbjp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVTZWxlY3Rpb25WaXNpYmlsaXR5Iixub3RpZnk6ITB9LGV4cGFuZENoYXJ0OkJvb2xlYW4sX3NlbGVjdGlvbkVsZW06T2JqZWN0LF9taW5CYXJIZWlnaHRSYXRpbzp7dHlwZTpOdW1iZXIsdmFsdWU6LjAxLHJlYWRPbmx5OiEwfSwKX29uQ2xpY2s6T2JqZWN0LF9vbkNsaWNrRnVuY3Rpb246T2JqZWN0LF9vblBvaW50ZXI6T2JqZWN0LF9vblBvaW50ZXJFbnRlckZ1bmN0aW9uOk9iamVjdCxfb25Qb2ludGVyRXhpdEZ1bmN0aW9uOk9iamVjdCxfdGFibGVEYXRhOkFycmF5LF9zaG93VGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2NoYXJ0VHlwZTpPYmplY3QsX2NoYXJ0Q2xhc3M6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0Q2hhcnRDbGFzcyhfc2hvd1RhYmxlKSJ9LF9jaGFydFN2Z0NsYXNzOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldENoYXJ0U3ZnQ2xhc3MoZXhwYW5kQ2hhcnQpIn0sX3hBeGlzU3ZnQ2xhc3M6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0WEF4aXNTdmdDbGFzcyhleHBhbmRDaGFydCkifSxfdGFibGVEYXRhQ2xhc3M6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0VGFibGVEYXRhQ2xhc3MoZXhwYW5kQ2hhcnQpIn19LG9ic2VydmVyczpbIl9yZW5kZXIoZGF0YSwgbG9nU2NhbGUsIHNob3dXZWlnaHRlZCwgY2hhcnRTZWxlY3Rpb24sIF9zaG93VGFibGUsIGV4cGFuZENoYXJ0LCBzaG93UGVyY2VudGFnZSwgZGF0YU1vZGVsKSJdLApfdXBkYXRlRGF0YSgpe3RoaXMuX3Nob3dUYWJsZT0hMX0sX3VwZGF0ZUNoYXJ0U2VsZWN0aW9uKCl7dGhpcy5fc2hvd1RhYmxlPSExfSxfaGFzV2VpZ2h0ZWRIaXN0b2dyYW0oYSl7cmV0dXJuIG50KGEpfSxfaGFzUXVhbnRpbGVzKGEpe3JldHVybiBvdChhKX0sX2lzU3RyaW5nQ2hhcnQoYSxjKXtyZXR1cm4oYT09PXp0LkNVTURJU1RfQ0hBUlR8fGE9PT16dC5CQVJfQ0hBUlQpJiYiVmFsdWUgbGlzdCBsZW5ndGgiIT09YyYmIkZlYXR1cmUgbGlzdCBsZW5ndGgiIT09Y30sX2Rpc2FibGVMb2dDaGVja2JveChhLGMpe3JldHVybiBhfHwiU3RhbmRhcmQiIT09Y30sX3JlbmRlcihhLGMsZCxmLGcsbCxrLG4pe3RoaXMuX29uUG9pbnRlciYmKHRoaXMuX29uUG9pbnRlci5vZmZQb2ludGVyTW92ZSh0aGlzLl9vblBvaW50ZXJFbnRlckZ1bmN0aW9uKSx0aGlzLl9vblBvaW50ZXIub2ZmUG9pbnRlck1vdmUodGhpcy5fb25Qb2ludGVyRXhpdEZ1bmN0aW9uKSk7dGhpcy5fb25DbGljayYmdGhpcy5fb25DbGljay5vZmZDbGljayh0aGlzLl9vbkNsaWNrRnVuY3Rpb24pOwphJiYodGhpcy5fY2hhcnRBbHBoYT1uLmdldENoYXJ0QWxwaGEoKSxnPWEubWFwKHA9PnRoaXMuX2dldEJ1Y2tldHMocCxkLGYpKSx0aGlzLl9jaGFydFR5cGU9QnQoYSxmLHRoaXMuX21heEJ1Y2tldHNGb3JCYXJDaGFydCksYT1hLm1hcChwPT5wLm5hbWUpLCJWYWx1ZSBsaXN0IGxlbmd0aCI9PT1mfHwiRmVhdHVyZSBsaXN0IGxlbmd0aCI9PT1mfHwiUXVhbnRpbGVzIj09PWY/dGhpcy5fcmVuZGVyUXVhbnRpbGVDaGFydChnLGEsYyk6dGhpcy5fY2hhcnRUeXBlPT09enQuSElTVE9HUkFNP3RoaXMuX3JlbmRlckhpc3RvZ3JhbUNoYXJ0KGcsYSxjLGspOnRoaXMuX2NoYXJ0VHlwZT09PXp0LkNVTURJU1RfQ0hBUlQ/dGhpcy5fcmVuZGVyQ2RmQ2hhcnQoZyxhLGMpOnRoaXMuX3JlbmRlckJhckNoYXJ0KGcsYSxjLGspKX0sX3JlbmRlckhpc3RvZ3JhbUNoYXJ0KGEsYyxkLGYpe2NvbnN0IGc9W10sbD1uZXcgUGxvdHRhYmxlLlBsb3RzLlJlY3RhbmdsZTtsZXQgaz1JbmZpbml0eSxuPS1JbmZpbml0eSwKcD0wO2YmJihhPVJ0KGEpKTthLmZvckVhY2goKHYseSk9Pnt2LmZvckVhY2goej0+e2NvbnN0IHg9YnQoei5nZXRMb3dWYWx1ZSgpKSxDPWJ0KHouZ2V0SGlnaFZhbHVlKCkpO3o9YnQoei5nZXRTYW1wbGVDb3VudCgpKTt4PGsmJihrPXgpO0M+biYmKG49Qyk7ej5wJiYocD16KTtpc0Zpbml0ZSh4KSYmaXNGaW5pdGUoQykmJmcucHVzaChDLXgpfSk7bC5hZGREYXRhc2V0KG5ldyBQbG90dGFibGUuRGF0YXNldCh2LHtuYW1lOmNbeV19KSl9KTtsZXQgcT0wPGcubGVuZ3RoP2cucmVkdWNlKGZ1bmN0aW9uKHYseSl7cmV0dXJuIHYreX0pL2cubGVuZ3RoOjA7MD09PXEmJihxPTEpO2Y9W107aXNGaW5pdGUoaykmJihmLnB1c2goayksaXNGaW5pdGUobikmJmYucHVzaChuKSk7YT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXI7MDxmLmxlbmd0aCYmYS5kb21haW4oZik7Zj10aGlzLl9nZXRTY2FsZShkKS5kb21haW4oWzBdKTtjb25zdCByPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGEsCiJib3R0b20iKSx0PW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGYsImxlZnQiKTt0LmZvcm1hdHRlcih0aGlzLl9jaGFydEF4aXNTY2FsZUZvcm1hdHRlcigpKTtyLmZvcm1hdHRlcih0aGlzLl9jaGFydEF4aXNTY2FsZUZvcm1hdHRlcigpKTtsLngodj0+e2xldCB5PWJ0KHYuZ2V0TG93VmFsdWUoKSk7aWYoLUluZmluaXR5PT09eXx8eT09PXYuZ2V0SGlnaFZhbHVlKCkpdj1idCh2LmdldEhpZ2hWYWx1ZSgpKSxpc0Zpbml0ZSh2KT95PXYtcTooeT0wLC1JbmZpbml0eT09PXYmJih5LT1xKSk7cmV0dXJuIHl9LGEpLngyKHY9PntsZXQgeT1idCh2LmdldEhpZ2hWYWx1ZSgpKTtpZihJbmZpbml0eT09PXl8fHk9PT12LmdldExvd1ZhbHVlKCkpdj1idCh2LmdldExvd1ZhbHVlKCkpLGlzRmluaXRlKHYpP3k9ditxOih5PTAsSW5maW5pdHk9PT12JiYoeSs9cSkpO3JldHVybiB5fSkueSgoKT0+MCxmKS55Mih2PT50aGlzLl9nZXRDb3VudFdpdGhGbG9vcih2LHAsZCkpO2wuYXR0cigiZmlsbCIsCih2LHkseik9PnoubWV0YWRhdGEoKS5uYW1lLHRoaXMuZGF0YU1vZGVsLmdldENvbG9yU2NhbGUoKSkuYXR0cigib3BhY2l0eSIsdGhpcy5fY2hhcnRBbHBoYSk7dGhpcy5fcmVuZGVyQ2hhcnQobCxyLHQsbnVsbCxudWxsLHY9PmwuZW50aXRpZXNBdCh2KSx2PT5XcyhidCh2LmdldExvd1ZhbHVlKCkpLDIpLnRvTG9jYWxlU3RyaW5nKCkrIi0iK1dzKGJ0KHYuZ2V0SGlnaFZhbHVlKCkpLDIpLnRvTG9jYWxlU3RyaW5nKCkrIjogIitidCh2LmdldFNhbXBsZUNvdW50KCkpLnRvTG9jYWxlU3RyaW5nKCksdj0+bmV3IElxKHRoaXMuZmVhdHVyZSx2b2lkIDAsYnQodi5nZXRMb3dWYWx1ZSgpKSxidCh2LmdldEhpZ2hWYWx1ZSgpKSksdj0+di5hcHBlbmQoInJlY3QiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksKHYseSk9PnYuYXR0cigieCIseS5wb3NpdGlvbi54LXkuc2VsZWN0aW9uLl9ncm91cHNbMF1bMF0ud2lkdGguYmFzZVZhbC52YWx1ZS8KMikuYXR0cigieSIseS5wb3NpdGlvbi55LXkuc2VsZWN0aW9uLl9ncm91cHNbMF1bMF0uaGVpZ2h0LmJhc2VWYWwudmFsdWUvMikuYXR0cigid2lkdGgiLHkuc2VsZWN0aW9uLl9ncm91cHNbMF1bMF0ud2lkdGguYmFzZVZhbC52YWx1ZSkuYXR0cigiaGVpZ2h0Iix5LnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLmhlaWdodC5iYXNlVmFsLnZhbHVlKSl9LF9yZW5kZXJRdWFudGlsZUNoYXJ0KGEsYyxkKXtjb25zdCBmPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZSxnPW5ldyBQbG90dGFibGUuUGxvdHMuU2NhdHRlcjtsZXQgbD1JbmZpbml0eSxrPS1JbmZpbml0eTthLmZvckVhY2goKHEscik9Pntjb25zdCB0PVtdLHY9cS5sZW5ndGg7cS5mb3JFYWNoKCh5LHopPT57dmFyIHg9YnQoeS5nZXRMb3dWYWx1ZSgpKTtjb25zdCBDPWJ0KHkuZ2V0SGlnaFZhbHVlKCkpO3g8bCYmKGw9eCk7Qz5rJiYoaz1DKTt4PW5ldyBGcTt4LmJ1Y2tldD15O3guZGF0YXNldEluZGV4PXI7eC5xdWFudGlsZT0xMDAqCnovdjt0LnB1c2goeCl9KTtpZigwPHEubGVuZ3RoKXtjb25zdCB5PW5ldyBhbTt5LnNldExvd1ZhbHVlKHFbcS5sZW5ndGgtMV0uZ2V0SGlnaFZhbHVlKCkpO3kuc2V0SGlnaFZhbHVlKHFbcS5sZW5ndGgtMV0uZ2V0SGlnaFZhbHVlKCkpO3kuc2V0U2FtcGxlQ291bnQocVtxLmxlbmd0aC0xXS5nZXRTYW1wbGVDb3VudCgpKTtxPW5ldyBGcTtxLmJ1Y2tldD15O3EuZGF0YXNldEluZGV4PXI7cS5xdWFudGlsZT0xMDA7dC5wdXNoKHEpfWYuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodCx7bmFtZTpjW3JdfSkpO2cuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodCx7bmFtZTpjW3JdfSkpfSk7Y29uc3Qgbj1pc0Zpbml0ZShsKSYmaXNGaW5pdGUoayk/az09PWw/MTooay1sKS8xMDowO3ZhciBwPVtdO2lzRmluaXRlKGwpJiYocC5wdXNoKGwtbiksaXNGaW5pdGUoaykmJnAucHVzaChrK24pKTtkPXRoaXMuX2dldFNjYWxlKGQpOzA8cC5sZW5ndGgmJmQuZG9tYWluKHApOwpwPXRoaXMuX2dldFNjYWxlKCExKS5kb21haW4oWy1hLmxlbmd0aCsuNSwxXSk7YT1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhkLCJib3R0b20iKTthLmZvcm1hdHRlcih0aGlzLl9jaGFydEF4aXNTY2FsZUZvcm1hdHRlcigpKTtmLngocT0+YnQocS5idWNrZXQuZ2V0TG93VmFsdWUoKSksZCkueShxPT4tMSpxLmRhdGFzZXRJbmRleCxwKTtnLngocT0+YnQocS5idWNrZXQuZ2V0TG93VmFsdWUoKSksZCkueShxPT4tcS5kYXRhc2V0SW5kZXgscCkuc2l6ZShxPT41MD09PXEucXVhbnRpbGU/MTU6OCkuc3ltYm9sKCgpPT5QbG90dGFibGUuU3ltYm9sRmFjdG9yaWVzLmNyb3NzKCkpO2YuYXR0cigic3Ryb2tlIiwiZ3JheSIpLmF0dHIoIm9wYWNpdHkiLHRoaXMuX2NoYXJ0QWxwaGEpO2cuYXR0cigiZmlsbCIsKHEscix0KT0+dC5tZXRhZGF0YSgpLm5hbWUsdGhpcy5kYXRhTW9kZWwuZ2V0Q29sb3JTY2FsZSgpKS5hdHRyKCJvcGFjaXR5Iix0aGlzLl9jaGFydEFscGhhKTtwPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5Hcm91cChbZiwKZ10pO3RoaXMuX3JlbmRlckNoYXJ0KHAsYSxudWxsLG51bGwsbnVsbCxxPT5nLmVudGl0aWVzQXQocSkscT0+cS5xdWFudGlsZSsiJTogIitXcyhidChxLmJ1Y2tldC5nZXRMb3dWYWx1ZSgpKSwyKS50b0xvY2FsZVN0cmluZygpLHE9Pm5ldyBJcSh0aGlzLmZlYXR1cmUsdm9pZCAwLGJ0KHEuYnVja2V0LmdldExvd1ZhbHVlKCkpLGJ0KHEuYnVja2V0LmdldEhpZ2hWYWx1ZSgpKSkscT0+cS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLDMpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKSwocSxyKT0+cS5hdHRyKCJjeCIsci5wb3NpdGlvbi54KS5hdHRyKCJjeSIsci5wb3NpdGlvbi55KSl9LF9yZW5kZXJCYXJDaGFydChhLGMsZCxmKXtjb25zdCBnPVpzKGEpLGw9bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyO3ZhciBrPW5ldyBQbG90dGFibGUuU2NhbGVzLkNhdGVnb3J5O2NvbnN0IG49dGhpcy5fZ2V0U2NhbGUoZCk7CmsuZG9tYWluKGcpO2s9bmV3IFBsb3R0YWJsZS5BeGVzLkNhdGVnb3J5KGssImJvdHRvbSIpO2NvbnN0IHA9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMobiwibGVmdCIpO3AuZm9ybWF0dGVyKHRoaXMuX2NoYXJ0QXhpc1NjYWxlRm9ybWF0dGVyKCkpO2YmJihhPVJ0KGEpKTtsZXQgcT0wO2Y9YS5tYXAoKHQsdik9Pnt0LmZvckVhY2goej0+e3o9YnQoei5nZXRTYW1wbGVDb3VudCgpKTt6PnEmJihxPXopfSk7Y29uc3QgeT1uZXcgdnQ7eS5uYW1lPWNbdl07eS5yYXdCdWNrZXRzPXQ7cmV0dXJuIHl9KTt0aGlzLl90YWJsZURhdGE9eXQoZixnKTtjb25zdCByPW5ldyBQbG90dGFibGUuUGxvdHMuQmFyO2EuZm9yRWFjaCgodCx2KT0+ci5hZGREYXRhc2V0KG5ldyBQbG90dGFibGUuRGF0YXNldCh0LHtuYW1lOmNbdl19KSkpO3IueCh0PT5nLmluZGV4T2YoJHModC5nZXRMYWJlbCgpKSksbCkueSh0PT50aGlzLl9nZXRDb3VudFdpdGhGbG9vcih0LHEsZCksbik7ci5hdHRyKCJmaWxsIiwKKHQsdix5KT0+eS5tZXRhZGF0YSgpLm5hbWUsdGhpcy5kYXRhTW9kZWwuZ2V0Q29sb3JTY2FsZSgpKS5hdHRyKCJvcGFjaXR5Iix0aGlzLl9jaGFydEFscGhhKTt0aGlzLl9yZW5kZXJDaGFydChyLGsscCxudWxsLG51bGwsdD0+ci5lbnRpdGllc0F0KHQpLHQ9PiRzKHQuZ2V0TGFiZWwoKSkrIjogIitidCh0LmdldFNhbXBsZUNvdW50KCkpLnRvTG9jYWxlU3RyaW5nKCksdD0+bmV3IElxKHRoaXMuZmVhdHVyZSx0LmdldExhYmVsKCkpLHQ9PnQuYXBwZW5kKCJyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLCh0LHYpPT50LmF0dHIoIngiLHYucG9zaXRpb24ueC12LnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLndpZHRoLmJhc2VWYWwudmFsdWUvMikuYXR0cigieSIsdi5wb3NpdGlvbi55KS5hdHRyKCJ3aWR0aCIsdi5zZWxlY3Rpb24uX2dyb3Vwc1swXVswXS53aWR0aC5iYXNlVmFsLnZhbHVlKS5hdHRyKCJoZWlnaHQiLAp2LnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLmhlaWdodC5iYXNlVmFsLnZhbHVlKSl9LF9yZW5kZXJDZGZDaGFydChhLGMsZCl7Y29uc3QgZj1jLm1hcChyPT57cj10aGlzLmRhdGFNb2RlbC5nZXRGZWF0dXJlQ29tbW9uU3RhdHModGhpcy5mZWF0dXJlLHIpO3JldHVybiBudWxsIT1yP3IuZ2V0TnVtTm9uTWlzc2luZygpKnIuZ2V0QXZnTnVtVmFsdWVzKCk6MH0pLGc9WnMoYSksbD17fTtnLmZvckVhY2goKHIsdCk9PntsW3JdPXR9KTtjb25zdCBrPShuZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXIpLmRvbWFpbihbMF0pO2Q9dGhpcy5fZ2V0U2NhbGUoZCkuZG9tYWluKFswXSk7Y29uc3Qgbj1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhrLCJib3R0b20iKSxwPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGQsImxlZnQiKSxxPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZTthPWEubWFwKChyLHQpPT57Y29uc3Qgdj1bXSx5PVtdLHo9W107bGV0IHg9LTE7ci5mb3JFYWNoKEM9PntDPQpDLmNsb25lTWVzc2FnZSgpO3oucHVzaChDKX0pOzA8dCYmei5zb3J0KChDLEYpPT5sWyRzKEMuZ2V0TGFiZWwoKSldLWxbJHMoRi5nZXRMYWJlbCgpKV0pO3ouZm9yRWFjaCgoQyxGKT0+e2NvbnN0IEQ9bFskcyhDLmdldExhYmVsKCkpXTtmb3IodmFyIEI9eCsxO0I8RDtCKyspe3ZhciBJPW5ldyBkbTtJLnNldExhYmVsKGdbQl0pO0kuc2V0TG93UmFuayhCKTtJLnNldEhpZ2hSYW5rKEIpOzA9PT12Lmxlbmd0aD9JLnNldFNhbXBsZUNvdW50KDApOkkuc2V0U2FtcGxlQ291bnQodlt2Lmxlbmd0aC0xXS5nZXRTYW1wbGVDb3VudCgpKTt2LnB1c2goSSk7ST1uZXcgZG07SS5zZXRMYWJlbChnW0JdKTtJLnNldExvd1JhbmsoQik7SS5zZXRIaWdoUmFuayhCKTtJLnNldFNhbXBsZUNvdW50KDApO3kucHVzaChJKX14PUQ7Qj1DLmNsb25lKCk7eS5wdXNoKEIpOzA9PT1GP0Muc2V0U2FtcGxlQ291bnQoYnQoQy5nZXRTYW1wbGVDb3VudCgpKS9mW3RdKTooRj0wPEQ/RC0xOkYtMSxDLnNldFNhbXBsZUNvdW50KGJ0KEMuZ2V0U2FtcGxlQ291bnQoKSkvCmZbdF0rYnQodltGXS5nZXRTYW1wbGVDb3VudCgpKSkpO0Muc2V0TG93UmFuayhEKTtDLnNldEhpZ2hSYW5rKEQpO3YucHVzaChDKX0pO3I9bmV3IHZ0O3IubmFtZT1jW3RdO3IucGVyY0J1Y2tldHM9djtyLnJhd0J1Y2tldHM9eTtyZXR1cm4gcn0pO3RoaXMuX3RhYmxlRGF0YT14dChhKTtmb3IoY29uc3QgciBvZiBhKXEuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQoci5wZXJjQnVja2V0cyx7bmFtZTpyLm5hbWV9KSk7cS54KHI9PmJ0KHIuZ2V0TG93UmFuaygpKSxrKS55KHI9PmJ0KHIuZ2V0U2FtcGxlQ291bnQoKSksZCk7cS5hdHRyKCJzdHJva2UiLChyLHQsdik9PnYubWV0YWRhdGEoKS5uYW1lLHRoaXMuZGF0YU1vZGVsLmdldENvbG9yU2NhbGUoKSkuYXR0cigib3BhY2l0eSIsdGhpcy5fY2hhcnRBbHBoYSk7dGhpcy5fcmVuZGVyQ2hhcnQocSxuLHAsbnVsbCxudWxsLHI9PnEuZW50aXRpZXNBdChyKSxyPT4kcyhyLmdldExhYmVsKCkpKyI6ICIrV3MoYnQoci5nZXRTYW1wbGVDb3VudCgpKSwKNCkudG9Mb2NhbGVTdHJpbmcoKSxyPT5uZXcgSXEodGhpcy5mZWF0dXJlLHIuZ2V0TGFiZWwoKSkscj0+ci5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLDMpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKSwocix0KT0+ci5hdHRyKCJjeCIsdC5wb3NpdGlvbi54KS5hdHRyKCJjeSIsdC5wb3NpdGlvbi55KSl9LF9yZW5kZXJDaGFydChhLGMsZCxmLGcsbCxrLG4scCxxKXtpZighdGhpcy5fc2hvd1RhYmxlKXt2YXIgcj1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuVGFibGUoW1tnLGQsYV0sW251bGwsbnVsbCxudWxsXV0pLHQ9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLlRhYmxlKFtbbnVsbCxudWxsXSxbbnVsbCxjXV0pO1Bsb3R0YWJsZS5SZW5kZXJDb250cm9sbGVyLnJlbmRlclBvbGljeSgpO3ZhciB2PWQzLnNlbGVjdCh0aGlzLiQuY2hhcnQpLHk9ZDMuc2VsZWN0KHRoaXMuJC54YXhpcyksej1kMy5zZWxlY3QodGhpcy4kLnRvb2x0aXApOwp0aGlzLmFzeW5jKCgpPT57di5zZWxlY3RBbGwoIi5jb21wb25lbnQiKS5yZW1vdmUoKTt5LnNlbGVjdEFsbCgiLmNvbXBvbmVudCIpLnJlbW92ZSgpO3IucmVuZGVyVG8odGhpcy4kLmNoYXJ0KTt0aGlzLl9zZWxlY3Rpb25FbGVtPXAoYS5mb3JlZ3JvdW5kKCkpO3RoaXMuX3VwZGF0ZVNlbGVjdGlvblZpc2liaWxpdHkodGhpcy5zZWxlY3Rpb24pO3Yub24oIm1vdXNlZW50ZXIiLCgpPT57dGhpcy5fb25Qb2ludGVyPW5ldyBwbG90dGFibGVfaGVscGVycy5Qb2ludGVySW50ZXJhY3Rpb247dGhpcy5fb25Qb2ludGVyRW50ZXJGdW5jdGlvbj14PT57eD1sKHgpOzA8eC5sZW5ndGgmJih4PXgubWFwKEM9Pm51bGw9PUMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV8fDE9PT10aGlzLmRhdGFNb2RlbC5nZXREYXRhc2V0TmFtZXMoKS5sZW5ndGg/ayhDLmRhdHVtKTpDLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKyI6ICIrayhDLmRhdHVtKSkuam9pbigiXG4iKSx6LnRleHQoeCksei5zdHlsZSgib3BhY2l0eSIsCiIxIikpfTt0aGlzLl9vblBvaW50ZXIub25Qb2ludGVyTW92ZSh0aGlzLl9vblBvaW50ZXJFbnRlckZ1bmN0aW9uKTt0aGlzLl9vblBvaW50ZXJFeGl0RnVuY3Rpb249ZnVuY3Rpb24oKXt6LnN0eWxlKCJvcGFjaXR5IiwiMCIpfTt0aGlzLl9vblBvaW50ZXIub25Qb2ludGVyRXhpdCh0aGlzLl9vblBvaW50ZXJFeGl0RnVuY3Rpb24pO3RoaXMuX29uUG9pbnRlci5hdHRhY2hUbyhhKTtpZigiVmFsdWUgbGlzdCBsZW5ndGgiIT09dGhpcy5jaGFydFNlbGVjdGlvbil7dGhpcy5fb25DbGljaz1uZXcgUGxvdHRhYmxlLkludGVyYWN0aW9ucy5DbGljaztjb25zdCB4PXRoaXM7dGhpcy5fb25DbGlja0Z1bmN0aW9uPUM9PntDPWwoQyk7MDxDLmxlbmd0aCYmKHEoeC5fc2VsZWN0aW9uRWxlbSxDWzBdKSxDPW4oQ1swXS5kYXR1bSkseC5fc2V0U2VsZWN0aW9uKEMpKX07dGhpcy5fb25DbGljay5vbkNsaWNrKHRoaXMuX29uQ2xpY2tGdW5jdGlvbik7dGhpcy5fb25DbGljay5hdHRhY2hUbyhhKX19KS5vbigibW91c2VsZWF2ZSIsCigpPT57dGhpcy5fb25Qb2ludGVyLmRldGFjaEZyb20oKTt0aGlzLl9vbkNsaWNrLmRldGFjaEZyb20oKX0pO251bGwhPWQmJnQuY29sdW1uUGFkZGluZyhyLmNvbXBvbmVudEF0KDEpLndpZHRoKCkrKHIuY29tcG9uZW50QXQoMCk/ci5jb21wb25lbnRBdCgwKS53aWR0aCgpOjApKTt0LnJlbmRlclRvKHRoaXMuJC54YXhpcyl9KX19LF9zZXRTZWxlY3Rpb24oYSl7YS5lcXVhbHModGhpcy5zZWxlY3Rpb24pJiZhLmNsZWFyKCk7dGhpcy5zZWxlY3Rpb249YTt0aGlzLmZpcmUoImZlYXR1cmUtc2VsZWN0Iix7c2VsZWN0aW9uOmF9KX0sX2dldEJ1Y2tldHMoYSxjLGQpe3JldHVybiBYcyhhLGMsZCl9LF9nZXRTY2FsZShhKXtyZXR1cm4gYT9uZXcgUGxvdHRhYmxlLlNjYWxlcy5Nb2RpZmllZExvZzpuZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXJ9LF9jaGFydEF4aXNTY2FsZUZvcm1hdHRlcigpe2NvbnN0IGE9UGxvdHRhYmxlLkZvcm1hdHRlcnMuc2hvcnRTY2FsZSgpO3JldHVybiBjPT4KMUUzPk1hdGguYWJzKGMpP1N0cmluZyhjKTphKGMpfSxfZ2V0Q291bnRXaXRoRmxvb3IoYSxjLGQpe2E9YnQoYS5nZXRTYW1wbGVDb3VudCgpKTshZCYmMDxhJiZhL2M8dGhpcy5fbWluQmFySGVpZ2h0UmF0aW8mJihhPWMqdGhpcy5fbWluQmFySGVpZ2h0UmF0aW8pO3JldHVybiBhfSxfdXBkYXRlU2VsZWN0aW9uVmlzaWJpbGl0eShhKXt0aGlzLl9zZWxlY3Rpb25FbGVtJiZ0aGlzLl9zZWxlY3Rpb25FbGVtLnN0eWxlKCJkaXNwbGF5IixudWxsPT1hfHxhLm5hbWUhPT10aGlzLmZlYXR1cmU/Im5vbmUiOiJpbmxpbmUiKX0sX3RvZ2dsZVNob3dUYWJsZSgpe3RoaXMuX3Nob3dUYWJsZT0hdGhpcy5fc2hvd1RhYmxlfSxfZ2V0Q2hhcnRDbGFzcyhhKXtyZXR1cm4gYT8iaGlkZWNoYXJ0Ijoic2hvd2NoYXJ0In0sX2dldFNob3dUYWJsZUJ1dHRvblRleHQoYSl7cmV0dXJuIGE/InNob3cgY2hhcnQiOiJzaG93IHJhdyBkYXRhIn0sX2dldENoYXJ0U3ZnQ2xhc3MoYSl7cmV0dXJuIGE/ImNoYXJ0LWJpZyI6CiJjaGFydC1zbWFsbCJ9LF9nZXRYQXhpc1N2Z0NsYXNzKGEpe3JldHVybiBhPyJ4YXhpcy1iaWciOiJ4YXhpcy1zbWFsbCJ9LF9nZXRUYWJsZURhdGFDbGFzcyhhKXtyZXR1cm4gYT8iZGF0YS1saXN0LWJpZyI6ImRhdGEtbGlzdC1zbWFsbCJ9LF9yb3dDbGljayhhKXt0aGlzLl9zZXRTZWxlY3Rpb24obmV3IElxKHRoaXMuZmVhdHVyZSxhLmN1cnJlbnRUYXJnZXQuZGF0YVZhbHVlKSl9LF9nZXRFbnRyeVJvd1ZhbHVlKGEpe3JldHVybiBhLnZhbHVlfSxfZ2V0RW50cnlSb3dDbGFzcyhhLGMpe2xldCBkPSJkaWFsb2ctcm93IjtudWxsIT1jJiZjLm5hbWU9PT10aGlzLmZlYXR1cmUmJmMuc3RyaW5nVmFsdWU9PT1hLnZhbHVlJiYoZCs9IiBzZWxlY3RlZCIpO3JldHVybiBkfSxfZ2V0Q291bnRDZWxsQ2xhc3MoYSl7cmV0dXJuImRhaWxvZy1yb3ctZW50cnkgY291bnQtY2VsbCIrKGE/IiB3ZWlnaHRlZC1jZWxsIjoiIil9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLW92ZXJ2aWV3L2NvbXBvbmVudHMvZmFjZXRzLW92ZXJ2aWV3LXRhYmxlL2ZhY2V0cy1vdmVydmlldy10YWJsZS5qcwpQb2x5bWVyKHtpczoiZmFjZXRzLW92ZXJ2aWV3LXRhYmxlIixwcm9wZXJ0aWVzOntkYXRhTW9kZWw6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfaGFuZGxlUmVzaXplIn0sZmVhdHVyZXM6e3R5cGU6QXJyYXksb2JzZXJ2ZXI6Il9oYW5kbGVSZXNpemUifSxmZWF0dXJlU2xpY2VTZWxlY3Rpb246e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sbnVtZXJpYzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxjb21wYXJlTW9kZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfbG9nU2NhbGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2V4cGFuZENoYXJ0czp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaGFuZGxlUmVzaXplIn0sX3Nob3dXZWlnaHRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc2hvd1BlcmNlbnRhZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2NoYXJ0U2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiU3RhbmRhcmQifSxfZW5hYmxlTG9nU2NhbGU6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITB9LF9jaGFydFNlbGVjdGlvblR5cGVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfY29tcHV0ZUNoYXJ0U2VsZWN0aW9uVHlwZXMobnVtZXJpYywgZGF0YU1vZGVsLCBmZWF0dXJlcykifSxfbWF4SGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTo4MDAscmVhZE9ubHk6ITB9LF9leHBhbmRlZFJvd0hlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MzMwLHJlYWRPbmx5OiEwfSxfcm93SGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZToxMDAscmVhZE9ubHk6ITB9fSxfaGFuZGxlUmVzaXplKCl7Y29uc3QgYT10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaXJvbi1saXN0Iik7YSYmdGhpcy5fZXhwYW5kZWRSb3dIZWlnaHQmJnRoaXMuX3Jvd0hlaWdodCYmdGhpcy5fbWF4SGVpZ2h0JiZ0aGlzLmZlYXR1cmVzJiYoYS5zdHlsZS5oZWlnaHQ9TWF0aC5taW4oKHRoaXMuZmVhdHVyZXM/dGhpcy5mZWF0dXJlcy5sZW5ndGg6MCkqKHRoaXMuX2V4cGFuZENoYXJ0cz90aGlzLl9leHBhbmRlZFJvd0hlaWdodDoKdGhpcy5fcm93SGVpZ2h0KSx0aGlzLl9tYXhIZWlnaHQpKyJweCIsYS5maXJlKCJpcm9uLXJlc2l6ZSIpKX0sX2NvbXB1dGVDaGFydFNlbGVjdGlvblR5cGVzKGEsYyxkKXtjb25zdCBmPVsiU3RhbmRhcmQiXTthJiZmLnB1c2goIlF1YW50aWxlcyIpOzAhPT1kLmxlbmd0aCYmcHQodGhpcy5fZ2V0Q2hhcnREYXRhKGMsZFswXSkpJiZmLnB1c2goIlZhbHVlIGxpc3QgbGVuZ3RoIik7Yy5kb2VzQ29udGFpbkZlYXR1cmVMaXN0TGVuZ3RoRGF0YSgpJiZmLnB1c2goIkZlYXR1cmUgbGlzdCBsZW5ndGgiKTtyZXR1cm4gZi5jb25jYXQoYy5nZXRFeHRyYUhpc3RvZ3JhbU5hbWVzKGQpKX0sYXR0YWNoZWQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5faGFuZGxlUmVzaXplKCl9LDFFMyl9LF9jaGFydFNlbGVjdGlvbkhhc1F1YW50aWxlcyhhKXtyZXR1cm4gQXQoYSl9LF9nZXRUaXRsZShhKXtyZXR1cm4gYT8iTnVtZXJpYyI6IkNhdGVnb3JpY2FsIn0sX2dldEZlYXR1cmVOYW1lKGEpe3JldHVybiBhLmdldE5hbWUoKX0sCl9oYXNDdXN0b21TdGF0cyhhKXtyZXR1cm4gbnVsbD09YT8hMTphLmRvZXNDb250YWluQ3VzdG9tU3RhdHMoKX0sX2hhc011bHRpcGxlRGF0YXNldHMoYSl7cmV0dXJuIG51bGw9PWE/ITE6MTxhLmdldERhdGFzZXROYW1lcygpLmxlbmd0aH0sX2dldEFsbEN1c3RvbVN0YXRzKGEsYyl7Y29uc3QgZD1bXSxmPXt9O2EuZ2V0RGF0YXNldEZlYXR1cmVTdGF0aXN0aWNzKCkuZ2V0RGF0YXNldHNMaXN0KCkuZm9yRWFjaChnPT57Y29uc3QgbD1hLmdldEZlYXR1cmVJbmRleChnLmdldE5hbWUoKSxjLmdldE5hbWUoKSk7bnVsbCE9bCYmKGc9Zy5nZXRGZWF0dXJlc0xpc3QoKVtsXS5nZXRDdXN0b21TdGF0c0xpc3QoKSkmJmcuZm9yRWFjaChrPT57ZltrLmdldE5hbWUoKV18fChmW2suZ2V0TmFtZSgpXT0hMCxkLnB1c2goaykpfSl9KTtyZXR1cm4gZH0sX2dldERhdGFzZXRzKGEpe3JldHVybiBhP2EuZ2V0RGF0YXNldEZlYXR1cmVTdGF0aXN0aWNzKCkuZ2V0RGF0YXNldHNMaXN0KCk6bnVsbH0sCl9nZXRTdGF0cyhhLGMsZCl7cmV0dXJuIGEmJmMmJmQ/YS5nZXRGZWF0dXJlKGQuZ2V0TmFtZSgpLGMuZ2V0TmFtZSgpKTpudWxsfSxfZ2V0Q2hhcnREYXRhKGEsYyl7cmV0dXJuIGEmJmM/YS5nZXREYXRhc2V0SGlzdG9ncmFtc0ZvckZlYXR1cmUoYy5nZXROYW1lKCkpOltdfSxfZ2V0RmVhdHVyZUNvdW50VGV4dChhLGMsZCl7YT1hP2EuZ2V0TnVtVW5pcXVlRmVhdHVyZXNCeVR5cGUoYyk6MDtyZXR1cm4gZ3QoZC5sZW5ndGgsYSl9LF9oYXNXZWlnaHRlZEhpc3RvZ3JhbShhKXtyZXR1cm4gMD09PWEubGVuZ3RoPyExOm50KHRoaXMuX2dldENoYXJ0RGF0YSh0aGlzLmRhdGFNb2RlbCxhWzBdKSl9LF9nZXRDaGFydENsYXNzKGEpe2xldCBjPSJjaGFydC1jb2x1bW4gIjthfHwoYys9InRhYmxlLWNlbGwgIik7cmV0dXJuIGN9LF9nZXRUYWJsZVdyYXBwZXJDbGFzcyhhKXtyZXR1cm4gYSYmMCE9PWEubGVuZ3RoPyIiOiJoaWRkZW4ifSxfZ2V0VGFibGVSb3dDbGFzcyhhKXtyZXR1cm4gYT8KIm51bWVyaWMtcm93IjoiY2F0ZWdvcmljYWwtcm93In19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9pcm9uLXZhbGlkYXRvci1iZWhhdmlvci9pcm9uLXZhbGlkYXRvci1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvblZhbGlkYXRvckJlaGF2aW9yPXtyZWFkeTpmdW5jdGlvbigpe25ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOiJ2YWxpZGF0b3IiLGtleTp0aGlzLmlzfHx0aGlzLmNvbnN0cnVjdG9yLmlzLHZhbHVlOnRoaXN9KX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt9fTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9mYWNldHMtb3ZlcnZpZXcvY29tcG9uZW50cy9mYWNldHMtb3ZlcnZpZXcvZmFjZXRzLW92ZXJ2aWV3LWZpbHRlci12YWxpZGF0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoiZmFjZXRzLW92ZXJ2aWV3LWZpbHRlci12YWxpZGF0b3IiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uVmFsaWRhdG9yQmVoYXZpb3JdLHZhbGlkYXRlOmZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChhKSwhMH1jYXRjaChjKXtyZXR1cm4hMX19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vZmFjZXRzLW92ZXJ2aWV3L2NvbXBvbmVudHMvZmFjZXRzLW92ZXJ2aWV3L2ZhY2V0cy1vdmVydmlldy5qcwpQb2x5bWVyKHtpczoiZmFjZXRzLW92ZXJ2aWV3Iixwcm9wZXJ0aWVzOntzZWFyY2hTdHJpbmc6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3NvcnRPcHRpb25zOkFycmF5LF9yZXZlcnNlT3JkZXI6Qm9vbGVhbixfc29ydE9yZGVyOnt0eXBlOk51bWJlcix2YWx1ZTowfSxwcm90b0lucHV0Ont0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3VwZGF0ZSJ9LGZlYXR1cmVTbGljZVNlbGVjdGlvbjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxjb21wYXJlTW9kZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZGF0YU1vZGVsOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSxfZmVhdHVyZVNwZWNBcnJheTp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEZlYXR1cmVTcGVjQXJyYXkoX2RhdGFNb2RlbCkifSxfZmVhdHVyZVNwZWNDaGVja2JveGVzOkFycmF5fSxfZ2V0RmVhdHVyZVNwZWNBcnJheShhKXtpZighYSlyZXR1cm5bXTtjb25zdCBjPVtdO2ZvcihsZXQgZD0wOzE2PmQ7ZCsrKWMucHVzaCghMCk7CnRoaXMuX2ZlYXR1cmVTcGVjQ2hlY2tib3hlcz1jO3JldHVybiBhLmdldE5vbkVtcHR5RmVhdHVyZVNwZWNMaXN0cygpfSxfZ2V0U3BlY0NoZWNrYm94VGV4dChhKXtyZXR1cm4gcnQoYS5zcGVjKSsiKCIrYS5mZWF0dXJlcy5sZW5ndGgrIikifSxfZ2V0U3BlY0NoZWNrYm94SWQoYSl7cmV0dXJuIFN0cmluZyhhLnNwZWMpfSxfZmVhdHVyZVNwZWNDaGVjayhhKXtpZihhKXtjb25zdCBjPVtdLGQ9K2EudGFyZ2V0LmlkO2ZvcihsZXQgZj0wOzE2PmY7ZisrKWQ9PT1mP2MucHVzaChhLnRhcmdldC5jaGVja2VkKTpjLnB1c2godGhpcy5fZmVhdHVyZVNwZWNDaGVja2JveGVzW2ZdKTt0aGlzLl9mZWF0dXJlU3BlY0NoZWNrYm94ZXM9Y319LF9jb252ZXJ0SW5wdXRUb1Byb3RvKGEpe2lmKCFhfHxhLmNvbnN0cnVjdG9yPT09T2JqZWN0JiYwPT09T2JqZWN0LmtleXMoYSkubGVuZ3RoKXJldHVybiBudWxsO2lmKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBnbShhKTtpZigic3RyaW5nIj09PQp0eXBlb2YgYXx8YSBpbnN0YW5jZW9mIFN0cmluZyl7YT1hdG9iKGEpO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWNbZF09YS5jaGFyQ29kZUF0KGQpO3JldHVybiBnbShjKX1yZXR1cm4gYS5jb25zdHJ1Y3Rvcj09PU9iamVjdCYmImZ1bmN0aW9uIj09PXR5cGVvZiBCbC5mcm9tT2JqZWN0P0JsLmZyb21PYmplY3QoYSk6YX0sX3VwZGF0ZSgpe3RoaXMuZmVhdHVyZVNsaWNlU2VsZWN0aW9uPW51bGw7bGV0IGE7e2NvbnN0IGY9dGhpcy5fY29udmVydElucHV0VG9Qcm90byh0aGlzLnByb3RvSW5wdXQpO2lmKCFmKXt0aGlzLl9kYXRhTW9kZWw9bnVsbDtyZXR1cm59YT1uZXcgU3QoaXQoZikpfXRoaXMuc2V0KCJfc29ydE9wdGlvbnMiLFt7bmFtZToiRmVhdHVyZSBvcmRlciIsbWFwOnt9fSx7bmFtZToiTm9uLXVuaWZvcm1pdHkiLG1hcDp7fX0se25hbWU6IkFscGhhYmV0aWNhbCIsbWFwOnt9fSx7bmFtZToiQW1vdW50IG1pc3NpbmcvemVybyIsCm1hcDp7fX1dKTtjb25zdCBjPWEuZ2V0RGF0YXNldEZlYXR1cmVTdGF0aXN0aWNzKCkuZ2V0RGF0YXNldHNMaXN0KCksZD0xPGMubGVuZ3RoO2QmJnRoaXMucHVzaCgiX3NvcnRPcHRpb25zIix7bmFtZToiRGlzdHJpYnV0aW9uIGRpc3RhbmNlIixtYXA6e319KTthLmdldFVuaXF1ZUZlYXR1cmVzKCkuZm9yRWFjaCgoZixnKT0+e3RoaXMuX3NvcnRPcHRpb25zWzBdLm1hcFtmLmdldE5hbWUoKV09ZztnPWEuZ2V0RGF0YXNldEhpc3RvZ3JhbXNGb3JGZWF0dXJlKGYuZ2V0TmFtZSgpKTt0aGlzLl9zb3J0T3B0aW9uc1sxXS5tYXBbZi5nZXROYW1lKCldPWcucmVkdWNlKChsLGspPT57az1rLmhpc3RNYXAuU3RhbmRhcmQ/VXMoay5oaXN0TWFwLlN0YW5kYXJkLmdldEJ1Y2tldHNMaXN0KCkpOjE7cmV0dXJuIE1hdGgubWluKGwsayl9LDEpO3RoaXMuX3NvcnRPcHRpb25zWzJdLm1hcFtmLmdldE5hbWUoKV09Zi5nZXROYW1lKCk7dGhpcy5fc29ydE9wdGlvbnNbM10ubWFwW2YuZ2V0TmFtZSgpXT0KYy5yZWR1Y2UoKGwsayk9PntrPXRoaXMuX2dldFN0YXRzKGEsayxmKTtrPS0xKmN0KGspO3JldHVybiBNYXRoLm1pbihsLGspfSwwKTtkJiYodGhpcy5fc29ydE9wdGlvbnNbNF0ubWFwW2YuZ2V0TmFtZSgpXT0tMSpldChnKSl9LHRoaXMpO3RoaXMuX2RhdGFNb2RlbD1hfSxfZ2V0U3RhdHMoYSxjLGQpe3JldHVybiBhJiZjJiZkP2EuZ2V0RmVhdHVyZShkLmdldE5hbWUoKSxjLmdldE5hbWUoKSk6bnVsbH0sX2dldFNvcnRGdW5jdGlvbihhLGMpe2NvbnN0IGQ9dGhpcy5fc29ydE9wdGlvbnNbYV0ubWFwLGY9Yz8tMToxO3JldHVybihnLGwpPT57Zz1kW2cuZ2V0TmFtZSgpXTtsPWRbbC5nZXROYW1lKCldO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZ3x8InVuZGVmaW5lZCI9PXR5cGVvZiBsPzA6ZiooZzxsPy0xOjEpfX0sX2dldEZpbHRlcihhKXtpZihhKXRyeXtjb25zdCBjPW5ldyBSZWdFeHAoYSwiaSIpO3JldHVybiBkPT5jLnRlc3QoZC5nZXROYW1lKCkpfWNhdGNoKGMpe3JldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGx9LApfZ2V0TnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoYSxjLGQsZixnKXtyZXR1cm4gdGhpcy5fZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsITApfSxfZ2V0Tm9uTnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoYSxjLGQsZixnKXtyZXR1cm4gdGhpcy5fZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsITEpfSxfZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsbCl7aWYoIWEpcmV0dXJuW107Y29uc3Qgaz10aGlzLl9nZXRGaWx0ZXIoYyk7Yz1hLmdldFVuaXF1ZUZlYXR1cmVzKCk7Yz1rP2MuZmlsdGVyKG49PmsobikmJmdbYS5nZXRGZWF0dXJlU3BlY0ZvckZlYXR1cmUobi5nZXROYW1lKCkpXSk6Yy5maWx0ZXIobj0+Z1thLmdldEZlYXR1cmVTcGVjRm9yRmVhdHVyZShuLmdldE5hbWUoKSldKTtjPWMuZmlsdGVyKG49Pmw/aHQobik6IWh0KG4pKTtyZXR1cm4gYy5zbGljZSgpLnNvcnQodGhpcy5fZ2V0U29ydEZ1bmN0aW9uKGQsZikpfSxfZ2V0Q29udHJvbHNXcmFwcGVyQ2xhc3MoYSl7cmV0dXJuIWF8fAoxPj1hLmdldFVuaXF1ZUZlYXR1cmVzKCkubGVuZ3RoPyJoaWRkZW4iOiIifSxfZ2V0RGF0YXNldE5hbWUoYSxjKXtyZXR1cm4gYS5nZXREYXRhc2V0TmFtZXMoKVtjXX0sX2dldExlZ2VuZEJveFN0eWxlKGEsYyl7cmV0dXJuImJhY2tncm91bmQtY29sb3I6IithLmdldENoYXJ0Q29sb3JTdHJpbmcoYyl9LF9nZXREYXRhc2V0cyhhKXtyZXR1cm4gYT9hLmdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpLmdldERhdGFzZXRzTGlzdCgpOm51bGx9LF9oYXNNdWx0aXBsZURhdGFzZXRzKGEpe3JldHVybiBudWxsPT1hPyExOjE8YS5nZXREYXRhc2V0TmFtZXMoKS5sZW5ndGh9LGdldFN0YXRzUHJvdG8oYSl7cmV0dXJuIHdxKGEpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3Z6LWV4YW1wbGUtdmlld2VyL3Z6LWV4YW1wbGUtdmlld2VyLmpzCnZhciBUdDsKKGZ1bmN0aW9uKCl7Y29uc3QgYT0vXmltYWdlXC8oW15cL10rXC8pKmVuY29kZWQkLyxjPVsxLDIwXTtQb2x5bWVyKHtpczoidnotZXhhbXBsZS12aWV3ZXIiLHByb3BlcnRpZXM6e2V4YW1wbGU6e3R5cGU6T2JqZWN0fSxzZXJpYWxpemVkRXhhbXBsZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6InVwZGF0ZUV4YW1wbGUifSxzZXJpYWxpemVkU2VxRXhhbXBsZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6InVwZGF0ZVNlcUV4YW1wbGUifSxqc29uOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiY3JlYXRlRXhhbXBsZXNGcm9tSnNvbiJ9LHNhbGllbmN5Ont0eXBlOk9iamVjdCx2YWx1ZTp7fX0sc2FsaWVuY3lKc29uU3RyaW5nOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiaGF2ZVNhbGllbmN5SnNvbiJ9LHJlYWRvbmx5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlcU51bWJlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoibmV3U2VxTnVtIn0saXNTZXF1ZW5jZTpCb29sZWFuLGNoYW5nZUNhbGxiYWNrVGltZXI6TnVtYmVyLAppZ25vcmVDaGFuZ2U6Qm9vbGVhbixtaW5TYWw6TnVtYmVyLG1heFNhbDpOdW1iZXIsc2hvd1NhbGllbmN5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGltYWdlSW5mbzp7dHlwZTpPYmplY3QsdmFsdWU6e319LHdpbmRvd1dpZHRoOnt0eXBlOk51bWJlcix2YWx1ZToyNTZ9LHdpbmRvd0NlbnRlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MTI4fSxzYWxpZW5jeUN1dG9mZjp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saGFzSW1hZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sYWxsb3dJbWFnZUNvbnRyb2xzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGltYWdlU2NhbGVQZXJjZW50YWdlOnt0eXBlOk51bWJlcix2YWx1ZToxMDB9LGZlYXR1cmVzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiZ2V0RmVhdHVyZXMoZXhhbXBsZSkifSxmZWF0dXJlc0xpc3Q6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJnZXRGZWF0dXJlc0xpc3QoZmVhdHVyZXMsIGNvbXBhcmVGZWF0dXJlcykifSxzZXFGZWF0dXJlczp7dHlwZTpPYmplY3QsCmNvbXB1dGVkOiJnZXRTZXFGZWF0dXJlcyhleGFtcGxlKSJ9LHNlcUZlYXR1cmVzTGlzdDp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6ImdldEZlYXR1cmVzTGlzdChzZXFGZWF0dXJlcywgY29tcGFyZVNlcUZlYXR1cmVzKSJ9LG1heFNlcU51bWJlcjp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6ImdldE1heFNlcU51bWJlcihzZXFGZWF0dXJlc0xpc3QpIn0sY29sb3JzOk9iamVjdCxoaWdobGlnaHREaWZmZXJlbmNlczp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxkaXNwbGF5TW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImdyaWQifSxmZWF0dXJlU2VhcmNoVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sZmlsdGVyZWRGZWF0dXJlc0xpc3Q6e3R5cGU6T2JqZWN0fSxmaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdDp7dHlwZTpPYmplY3R9LGZvY3VzZWRGZWF0dXJlTmFtZTpTdHJpbmcsZm9jdXNlZEZlYXR1cmVWYWx1ZUluZGV4Ok51bWJlcixmb2N1c2VkU2VxTnVtYmVyOk51bWJlciwKc2hvd0RlbGV0ZVZhbHVlQnV0dG9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGV4cGFuZGVkRmVhdHVyZXM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxleHBhbmRBbGxGZWF0dXJlczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx6ZXJvSW5kZXg6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LGNvbXBhcmVKc29uOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiY3JlYXRlQ29tcGFyZUV4YW1wbGVzRnJvbUpzb24ifSxjb21wYXJlRXhhbXBsZTp7dHlwZTpPYmplY3R9LGNvbXBhcmVGZWF0dXJlczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6ImdldEZlYXR1cmVzKGNvbXBhcmVFeGFtcGxlKSIsb2JzZXJ2ZXI6InVwZGF0ZUNvbXBhcmVNb2RlIn0sY29tcGFyZVNlcUZlYXR1cmVzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiZ2V0U2VxRmVhdHVyZXMoY29tcGFyZUV4YW1wbGUpIixvYnNlcnZlcjoidXBkYXRlQ29tcGFyZU1vZGUifSxzb3J0T3JkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiJhdHRyaWJ1dGlvbiJ9LApjb21wYXJlTW9kZTpCb29sZWFuLGNvbXBhcmVJbWFnZUluZm86e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxjb21wYXJlVGl0bGU6U3RyaW5nfSxvYnNlcnZlcnM6WyJkaXNwbGF5U2FsaWVuY3koc2FsaWVuY3ksIGV4YW1wbGUpIiwiaGF2ZVNhbGllbmN5KGZpbHRlcmVkRmVhdHVyZXNMaXN0LCBzYWxpZW5jeSwgY29sb3JzLCBzaG93U2FsaWVuY3ksIHNhbGllbmN5Q3V0b2ZmKSIsInNlcVNhbGllbmN5KHNlcU51bWJlciwgc2VxRmVhdHVyZXNMaXN0LCBzYWxpZW5jeSwgY29sb3JzLCBzaG93U2FsaWVuY3ksIHNhbGllbmN5Q3V0b2ZmKSIsInNldEZpbHRlcmVkRmVhdHVyZXNMaXN0KGZlYXR1cmVzTGlzdCwgZmVhdHVyZVNlYXJjaFZhbHVlLCBzYWxpZW5jeSwgc29ydE9yZGVyKSIsInNldEZpbHRlcmVkU2VxRmVhdHVyZXNMaXN0KHNlcUZlYXR1cmVzTGlzdCwgZmVhdHVyZVNlYXJjaFZhbHVlLCBzYWxpZW5jeSwgc29ydE9yZGVyKSJdLGlzRXhwYW5kZWQ6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuZXhwYW5kQWxsRmVhdHVyZXN8fAp0aGlzLnNhbml0aXplRmVhdHVyZShkKWluIHRoaXMuZXhwYW5kZWRGZWF0dXJlc30sdXBkYXRlRXhhbXBsZTpmdW5jdGlvbigpe3RoaXMuZGVzZXJpYWxpemVFeGFtcGxlKHRoaXMuc2VyaWFsaXplZEV4YW1wbGUsamspfSx1cGRhdGVTZXFFeGFtcGxlOmZ1bmN0aW9uKCl7dGhpcy5kZXNlcmlhbGl6ZUV4YW1wbGUodGhpcy5zZXJpYWxpemVkU2VxRXhhbXBsZSx5bCl9LHN0cmluZ1RvVWludDhBcnJheTpmdW5jdGlvbihkKXtyZXR1cm4obmV3IHdpbmRvdy5UZXh0RW5jb2RlcikuZW5jb2RlKGQpfSxkZXNlcmlhbGl6ZUV4YW1wbGU6ZnVuY3Rpb24oZCxmKXt0aGlzLmlnbm9yZUNoYW5nZXx8KGQ9dGhpcy5kZWNvZGVkU3RyaW5nVG9DaGFyQ29kZXMoYXRvYihkKSksdGhpcy5leGFtcGxlPWYoZCkpfSxnZXRGZWF0dXJlczpmdW5jdGlvbihkKXt0aGlzLmltYWdlSW5mbz17fTt0aGlzLmhhc0ltYWdlPSExO2lmKG51bGw9PWQpcmV0dXJuIG5ldyBNYXAoW10pO2lmKGQgaW5zdGFuY2VvZiBnaylyZXR1cm4gdGhpcy5pc1NlcXVlbmNlPQohMSxkLmhhc0ZlYXR1cmVzKCl8fGQuc2V0RmVhdHVyZXMobmV3IEhqKSxkLmdldEZlYXR1cmVzKCkuZ2V0RmVhdHVyZU1hcCgpO3RoaXMuaXNTZXF1ZW5jZT0hMDtkLmhhc0NvbnRleHQoKXx8ZC5zZXRDb250ZXh0KG5ldyBIaik7cmV0dXJuIGQuZ2V0Q29udGV4dCgpLmdldEZlYXR1cmVNYXAoKX0sZ2V0RmVhdHVyZXNMaXN0OmZ1bmN0aW9uKGQsZil7aWYobnVsbD09ZClyZXR1cm5bXTtjb25zdCBnPVtdLGw9e307bGV0IGs9ZC5rZXlzKCk7aWYoayl7bGV0IG49ay5uZXh0KCk7Zm9yKDshbi5kb25lOylnLnB1c2goe25hbWU6bi52YWx1ZSxmZWF0dXJlOmQuZ2V0KG4udmFsdWUpfSksbFtuLnZhbHVlXT0hMCxuPWsubmV4dCgpfWlmKG51bGw9PWYpcmV0dXJuIGc7aWYoaz1mLmtleXMoKSlmb3IoZD1rLm5leHQoKTshZC5kb25lOylkLnZhbHVlIGluIGx8fChnLnB1c2goe25hbWU6ZC52YWx1ZSxmZWF0dXJlOmYuZ2V0KGQudmFsdWUpfSksbFtkLnZhbHVlXT0hMCksZD1rLm5leHQoKTsKcmV0dXJuIGd9LGdldFNlcUZlYXR1cmVzOmZ1bmN0aW9uKGQpe3JldHVybiBudWxsPT1kfHxkIGluc3RhbmNlb2YgZ2s/bmV3IE1hcChbXSk6dGhpcy5leGFtcGxlLmdldEZlYXR1cmVMaXN0cygpLmdldEZlYXR1cmVMaXN0TWFwKCl9LHNldEZpbHRlcmVkRmVhdHVyZXNMaXN0OmZ1bmN0aW9uKGQsZixnLGwpe3RoaXMuZmlsdGVyZWRGZWF0dXJlc0xpc3Q9W107dGhpcy5maWx0ZXJlZEZlYXR1cmVzTGlzdD10aGlzLmdldEZpbHRlcmVkRmVhdHVyZXNMaXN0KGQsZixnLGwpfSxzZXRGaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdDpmdW5jdGlvbihkLGYsZyxsKXt0aGlzLmZpbHRlcmVkU2VxRmVhdHVyZXNMaXN0PVtdO3RoaXMuZmlsdGVyZWRTZXFGZWF0dXJlc0xpc3Q9dGhpcy5nZXRGaWx0ZXJlZEZlYXR1cmVzTGlzdChkLGYsZyxsKX0sZ2V0RmlsdGVyZWRGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZCxmLGcsbCl7aWYobnVsbCE9ZCl7dmFyIGs9ZCxuPWcmJjA8T2JqZWN0LmtleXMoZykubGVuZ3RoJiYKImFscGhhYmV0aWNhbCIhPWwscD1uP09iamVjdC5hc3NpZ24oe30sLi4uT2JqZWN0LmtleXMoZykubWFwKHE9Pih7W3FdOiJudW1iZXIiPT10eXBlb2YgZ1txXT9nW3FdOmdbcV0ucmVkdWNlKChyLHQpPT5yK3QsMCl9KSkpOnt9O2lmKCIiIT1mKXtjb25zdCBxPW5ldyBSZWdFeHAoZiwiaSIpO2s9ZC5maWx0ZXIocj0+cS50ZXN0KHIubmFtZSkpfXJldHVybiBrLnNvcnQoKHEscik9PntpZih0aGlzLmlzSW1hZ2UocS5uYW1lKSYmIXRoaXMuaXNJbWFnZShyLm5hbWUpKXJldHVybi0xO2lmKHRoaXMuaXNJbWFnZShyLm5hbWUpJiYhdGhpcy5pc0ltYWdlKHEubmFtZSkpcmV0dXJuIDE7aWYobil7aWYocS5uYW1lIGluIGcmJiEoci5uYW1lIGluIGcpKXJldHVybi0xO2lmKHIubmFtZSBpbiBnJiYhKHEubmFtZSBpbiBnKSlyZXR1cm4gMTt7Y29uc3QgdD0iYXR0cmlidXRpb24iPT1sP3Bbci5uYW1lXS1wW3EubmFtZV06InJldmVyc2UtYXR0cmlidXRpb24iPT1sP3BbcS5uYW1lXS1wW3IubmFtZV06Ck1hdGguYWJzKHBbci5uYW1lXSktTWF0aC5hYnMocFtxLm5hbWVdKTtpZigwIT10KXJldHVybiB0fX1yZXR1cm4gcS5uYW1lLmxvY2FsZUNvbXBhcmUoci5uYW1lKX0pfX0sZ2V0TWF4U2VxTnVtYmVyOmZ1bmN0aW9uKCl7bGV0IGQ9LTE7Zm9yKGNvbnN0IGYgb2YgdGhpcy5zZXFGZWF0dXJlc0xpc3Qpe2NvbnN0IGc9Zi5mZWF0dXJlO2cmJmcuZ2V0RmVhdHVyZUxpc3QoKS5sZW5ndGgtMT5kJiYoZD1nLmdldEZlYXR1cmVMaXN0KCkubGVuZ3RoLTEpfXJldHVybiBkfSxoYXZlU2FsaWVuY3lKc29uOmZ1bmN0aW9uKCl7dGhpcy5zYWxpZW5jeT1KU09OLnBhcnNlKHRoaXMuc2FsaWVuY3lKc29uU3RyaW5nKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKGQpe3JldHVybiBkMy5zZWxlY3RBbGwoUG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKGQpKX0sZGlzcGxheVNhbGllbmN5OmZ1bmN0aW9uKGQpe2NvbnN0IGY9T2JqZWN0LmtleXMoZCksZz17fTtmb3IobGV0IGw9MDtsPApmLmxlbmd0aDtsKyspe2NvbnN0IGs9ZltsXTtsZXQgbj1kW2tdO0FycmF5LmlzQXJyYXkobil8fChuPVtuXSk7Z1trXT17ZmxvYXRMaXN0Ont2YWx1ZTpuLm1hcChwPT5kMy5mb3JtYXQoIi40ZiIpKHApKX19fXRoaXMuY29tcGFyZUpzb249dGhpcy5zYWxpZW5jeUpzb249e2ZlYXR1cmVzOntmZWF0dXJlOmd9fX0saGF2ZVNhbGllbmN5OmZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9oYXZlU2FsaWVuY3lJbXBsKCkpfSxfdXNlTGlnaHRDb2xvcihkKXtkPShkLXRoaXMubWluU2FsKS8odGhpcy5tYXhTYWwtdGhpcy5taW5TYWwpO3JldHVybiAwPnRoaXMubWluU2FsJiYwPHRoaXMubWF4U2FsPy4zPmR8fC43PGQ6MD50aGlzLm1pblNhbD8uNj5kOi40PGR9LF9oYXZlU2FsaWVuY3lJbXBsOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RBbGwoIi52YWx1ZS1waWxsIikuc3R5bGUoImJhY2tncm91bmQiLCIjZmZmIikuYXR0cigidGl0bGUiLCIiKS5zdHlsZSgiY29sb3IiLAoiIzNjNDA0MyIpO2lmKHRoaXMuZmlsdGVyZWRGZWF0dXJlc0xpc3QmJnRoaXMuc2FsaWVuY3kmJjAhPT1PYmplY3Qua2V5cyh0aGlzLnNhbGllbmN5KS5sZW5ndGgmJnRoaXMuY29sb3JzKWZvcihjb25zdCBmIG9mIHRoaXMuZmlsdGVyZWRGZWF0dXJlc0xpc3Qpe2NvbnN0IGc9dGhpcy5zYWxpZW5jeVtmLm5hbWVdO2lmKG51bGwhPWcpe3ZhciBkPUFycmF5LmlzQXJyYXkoZyk/KGwsayk9PnRoaXMuZ2V0Q29sb3JGb3JTYWxpZW5jeShnW2tdKTooKT0+dGhpcy5nZXRDb2xvckZvclNhbGllbmN5KGcpO3RoaXMuc2VsZWN0QWxsKGAuJHt0aGlzLnNhbml0aXplRmVhdHVyZShmLm5hbWUpfS52YWx1ZS1waWxsYCkuc3R5bGUoImJhY2tncm91bmQiLHRoaXMuc2hvd1NhbGllbmN5P2Q6KCk9PiIjZmZmIikuYXR0cigidGl0bGUiLChsLGspPT4iQXR0cmlidXRpb246ICIrZDMuZm9ybWF0KCIuNGYiKShBcnJheS5pc0FycmF5KGcpP2dba106ZykpLnN0eWxlKCJjb2xvciIsKGwsayk9PnRoaXMuX3VzZUxpZ2h0Q29sb3IoQXJyYXkuaXNBcnJheShnKT8KZ1trXTpnKT8iI2ZmZiI6IiMzYzQwNDMiKTtpZihBcnJheS5pc0FycmF5KGcpKXtkPWc7Y29uc3QgbD10aGlzLnNlbGVjdEFsbChgcGFwZXItYnV0dG9uLiR7dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZi5uYW1lKX0udmFsdWUtcGlsbGApO2xldCBrPTA7Zm9yKGxldCBuPTE7bjxkLmxlbmd0aDtuKyspTWF0aC5hYnMoZFtuXSk+TWF0aC5hYnMoaykmJihrPWRbbl0pO2wuc3R5bGUoImJhY2tncm91bmQiLHRoaXMuc2hvd1NhbGllbmN5PygpPT50aGlzLmdldENvbG9yRm9yU2FsaWVuY3koayk6KCk9PiIjZmZmIil9fX19LG5ld1NlcU51bTpmdW5jdGlvbigpe3RoaXMuc2VxU2FsaWVuY3koKX0sc2VxU2FsaWVuY3k6ZnVuY3Rpb24oKXtpZih0aGlzLnNlcUZlYXR1cmVzTGlzdCYmdGhpcy5zYWxpZW5jeSYmMCE9PU9iamVjdC5rZXlzKHRoaXMuc2FsaWVuY3kpLmxlbmd0aCYmdGhpcy5jb2xvcnMpaWYodGhpcy5zZWxlY3RBbGwoIi52YWx1ZSBpbnB1dCIpLnNpemUoKTx0aGlzLnNlcUZlYXR1cmVzTGlzdC5sZW5ndGgpcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT4KdGhpcy5zZXFTYWxpZW5jeSgpKTtlbHNlIGZvcihjb25zdCBmIG9mIHRoaXMuc2VxRmVhdHVyZXNMaXN0KXt2YXIgZD10aGlzLnNhbGllbmN5W2YubmFtZV07aWYoIWQpY29udGludWU7Y29uc3QgZz1kW3RoaXMuc2VxTnVtYmVyXTtkPUFycmF5LmlzQXJyYXkoZyk/KGwsayk9PnRoaXMuZ2V0Q29sb3JGb3JTYWxpZW5jeShnW2tdKTooKT0+dGhpcy5nZXRDb2xvckZvclNhbGllbmN5KGcpO3RoaXMuc2VsZWN0QWxsKGAuJHt0aGlzLnNhbml0aXplRmVhdHVyZShmLm5hbWUpfSBpbnB1dGApLnN0eWxlKCJjb2xvciIsdGhpcy5zaG93U2FsaWVuY3k/ZDooKT0+ImJsYWNrIil9fSxnZXRGZWF0dXJlVmFsdWVzOmZ1bmN0aW9uKGQsZixnLGwpe3JldHVybihkPWw/dGhpcy5jb21wYXJlRmVhdHVyZXMuZ2V0KGQpOnRoaXMuZmVhdHVyZXMuZ2V0KGQpKT9kLmdldEJ5dGVzTGlzdCgpP2Y/ZC5nZXRCeXRlc0xpc3QoKS5nZXRWYWx1ZUxpc3QoKS5zbGljZSgpOmQuZ2V0Qnl0ZXNMaXN0KCkuZ2V0VmFsdWVMaXN0X2FzVTgoKS5tYXAoaz0+CnRoaXMuZGVjb2RlQnl0ZXNMaXN0U3RyaW5nKGssZykpOmQuZ2V0SW50NjRMaXN0KCk/ZC5nZXRJbnQ2NExpc3QoKS5nZXRWYWx1ZUxpc3QoKS5zbGljZSgpOmQuZ2V0RmxvYXRMaXN0KCk/ZC5nZXRGbG9hdExpc3QoKS5nZXRWYWx1ZUxpc3QoKS5zbGljZSgpOltdOltdfSxnZXRDb21wYXJlRmVhdHVyZVZhbHVlczpmdW5jdGlvbihkLGYsZyl7cmV0dXJuIHRoaXMuZ2V0RmVhdHVyZVZhbHVlcyhkLGYsZywhMCl9LGdldEZpcnN0RmVhdHVyZVZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmdldEZlYXR1cmVWYWx1ZXMoZClbMF19LGdldEZpcnN0Q29tcGFyZUZlYXR1cmVWYWx1ZTpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5nZXRDb21wYXJlRmVhdHVyZVZhbHVlcyhkKVswXX0sZmVhdHVyZUhhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKGQpe3JldHVybiAxPHRoaXMuZ2V0RmVhdHVyZVZhbHVlcyhkKS5sZW5ndGh9LGNvbXBhcmVGZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXM6ZnVuY3Rpb24oZCl7cmV0dXJuIDE8CnRoaXMuZ2V0Q29tcGFyZUZlYXR1cmVWYWx1ZXMoZCkubGVuZ3RofSxnZXRTZXFGZWF0dXJlVmFsdWVzOmZ1bmN0aW9uKGQsZixnLGwsayl7ZD1rP3RoaXMuY29tcGFyZVNlcUZlYXR1cmVzLmdldChkKTp0aGlzLnNlcUZlYXR1cmVzLmdldChkKTtpZighZClyZXR1cm5bXTtkPWQuZ2V0RmVhdHVyZUxpc3QoKTtyZXR1cm4hZHx8ZC5sZW5ndGg8PWY/W106KGY9ZFtmXSk/Zi5nZXRCeXRlc0xpc3QoKT9nP2YuZ2V0Qnl0ZXNMaXN0KCkuZ2V0VmFsdWVMaXN0KCk6Zi5nZXRCeXRlc0xpc3QoKS5nZXRWYWx1ZUxpc3RfYXNVOCgpLm1hcChuPT50aGlzLmRlY29kZUJ5dGVzTGlzdFN0cmluZyhuLGwpKTpmLmdldEludDY0TGlzdCgpP2YuZ2V0SW50NjRMaXN0KCkuZ2V0VmFsdWVMaXN0KCk6Zi5nZXRGbG9hdExpc3QoKT9mLmdldEZsb2F0TGlzdCgpLmdldFZhbHVlTGlzdCgpOltdOltdfSxnZXRDb21wYXJlU2VxRmVhdHVyZVZhbHVlczpmdW5jdGlvbihkLGYsZyxsKXtyZXR1cm4gdGhpcy5nZXRTZXFGZWF0dXJlVmFsdWVzKGQsCmYsZyxsLCEwKX0sZ2V0Rmlyc3RTZXFGZWF0dXJlVmFsdWU6ZnVuY3Rpb24oZCxmKXtyZXR1cm4gdGhpcy5nZXRTZXFGZWF0dXJlVmFsdWVzKGQsZilbMF19LGdldEZpcnN0U2VxQ29tcGFyZUZlYXR1cmVWYWx1ZTpmdW5jdGlvbihkLGYpe3JldHVybiB0aGlzLmdldENvbXBhcmVTZXFGZWF0dXJlVmFsdWVzKGQsZilbMF19LHNlcUZlYXR1cmVIYXNNdWx0aXBsZVZhbHVlczpmdW5jdGlvbihkLGYpe3JldHVybiAxPHRoaXMuZ2V0U2VxRmVhdHVyZVZhbHVlcyhkLGYpLmxlbmd0aH0sY29tcGFyZVNlcUZlYXR1cmVIYXNNdWx0aXBsZVZhbHVlczpmdW5jdGlvbihkLGYpe3JldHVybiAxPHRoaXMuZ2V0Q29tcGFyZVNlcUZlYXR1cmVWYWx1ZXMoZCxmKS5sZW5ndGh9LGRlY29kZUJ5dGVzTGlzdFN0cmluZzpmdW5jdGlvbihkLGYpe3JldHVybiAzMjc2OEUzPGQubGVuZ3RoPyJTdHJpbmcgdG9vIGxhcmdlIHRvIGRpc3BsYXkiOmY/dGhpcy5kZWNvZGVCeXRlc0xpc3RUb1N0cmluZyhkKToobmV3IHdpbmRvdy5UZXh0RGVjb2RlcikuZGVjb2RlKGQpfSwKaXNCeXRlc0ZlYXR1cmU6ZnVuY3Rpb24oZCl7Y29uc3QgZj10aGlzLmZlYXR1cmVzLmdldChkKTtyZXR1cm4gZiYmZi5oYXNCeXRlc0xpc3QoKT8hMDooZD10aGlzLnNlcUZlYXR1cmVzLmdldChkKSkmJmQuZ2V0RmVhdHVyZUxpc3QoKVswXS5oYXNCeXRlc0xpc3QoKT8hMDohMX0sZ2V0SnNvbkZlYXR1cmU6ZnVuY3Rpb24oZCl7aWYoIXRoaXMuanNvbilyZXR1cm4gbnVsbDtpZih0aGlzLmpzb24uZmVhdHVyZXMmJnRoaXMuanNvbi5mZWF0dXJlcy5mZWF0dXJlKXt2YXIgZj10aGlzLmpzb24uZmVhdHVyZXMuZmVhdHVyZVtkXTtpZihmKXJldHVybiBmfXJldHVybiB0aGlzLmpzb24uY29udGV4dCYmdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZSYmKGY9dGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZVtkXSk/Zjp0aGlzLmpzb24uZmVhdHVyZUxpc3RzJiZ0aGlzLmpzb24uZmVhdHVyZUxpc3RzLmZlYXR1cmVMaXN0P3RoaXMuanNvbi5mZWF0dXJlTGlzdHMuZmVhdHVyZUxpc3RbZF06bnVsbH0sCmdldEpzb25WYWx1ZUxpc3Q6ZnVuY3Rpb24oZCxmKXtkPXRoaXMuZ2V0SnNvbkZlYXR1cmUoZCk7aWYoIWQpcmV0dXJuIG51bGw7aXNOYU4oZil8fChkPWQuZmVhdHVyZVtmXSk7cmV0dXJuKGY9ZC5ieXRlc0xpc3R8fGQuaW50NjRMaXN0fHxkLmZsb2F0TGlzdCk/Zi52YWx1ZTpudWxsfSxnZXREYXRhRnJvbUVsZW06ZnVuY3Rpb24oZCl7Zm9yKDtudWxsPT1kLmRhdGFGZWF0dXJlOyl7aWYoIWQucGFyZW50RWxlbWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgYW5jZXN0b3IgY29udHJvbCBlbGVtZW50Iik7ZD1kLnBhcmVudEVsZW1lbnR9cmV0dXJue2ZlYXR1cmU6ZC5kYXRhRmVhdHVyZSx2YWx1ZUluZGV4OmQuZGF0YUluZGV4LHNlcU51bTpkLmRhdGFTZXFOdW19fSxnZXREYXRhRnJvbUV2ZW50OmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmdldERhdGFGcm9tRWxlbShkLnRhcmdldCl9LGdldEZlYXR1cmVGcm9tRGF0YTpmdW5jdGlvbihkKXtpZihpc05hTihkLnNlcU51bSkpcmV0dXJuIHRoaXMuZmVhdHVyZXMuZ2V0KGQuZmVhdHVyZSk7CnZhciBmPXRoaXMuc2VxRmVhdHVyZXMuZ2V0KGQuZmVhdHVyZSk7aWYoZilyZXR1cm4oZj1mLmdldEZlYXR1cmVMaXN0KCkpP2ZbZC5zZXFOdW1dOnZvaWQgMH0sZ2V0VmFsdWVMaXN0RnJvbURhdGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGlzTmFOKGQuc2VxTnVtKT90aGlzLmdldEZlYXR1cmVWYWx1ZXMoZC5mZWF0dXJlLCEwKTp0aGlzLmdldFNlcUZlYXR1cmVWYWx1ZXMoZC5mZWF0dXJlLGQuc2VxTnVtLCEwKX0sc2V0RmVhdHVyZVZhbHVlczpmdW5jdGlvbihkLGYpe2NvbnN0IGc9ZC5nZXRCeXRlc0xpc3QoKSxsPWQuZ2V0SW50NjRMaXN0KCk7ZD1kLmdldEZsb2F0TGlzdCgpO2c/Zy5zZXRWYWx1ZUxpc3QoZik6bD9sLnNldFZhbHVlTGlzdChmKTpkJiZkLnNldFZhbHVlTGlzdChmKX0sb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZCl7Y29uc3QgZj1kLnRhcmdldDtkPXRoaXMuZ2V0RGF0YUZyb21FdmVudChkKTtjb25zdCBnPXRoaXMuZ2V0RmVhdHVyZUZyb21EYXRhKGQpLGw9dGhpcy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShkKTsKaWYoZyl7aWYodGhpcy5pc0J5dGVzRmVhdHVyZShkLmZlYXR1cmUpKXt2YXIgaz10aGlzLnN0cmluZ1RvVWludDhBcnJheShmLnZhbHVlKTtsW2QudmFsdWVJbmRleF09azsoaz10aGlzLmdldEpzb25WYWx1ZUxpc3QoZC5mZWF0dXJlLGQuc2VxTnVtKSkmJihrW2QudmFsdWVJbmRleF09YnRvYShmLnZhbHVlKSl9ZWxzZSBsW2QudmFsdWVJbmRleF09K2YudmFsdWUsKGs9dGhpcy5nZXRKc29uVmFsdWVMaXN0KGQuZmVhdHVyZSxkLnNlcU51bSkpJiYoa1tkLnZhbHVlSW5kZXhdPStmLnZhbHVlKTt0aGlzLnNldEZlYXR1cmVWYWx1ZXMoZyxsKTt0aGlzLmV4YW1wbGVDaGFuZ2VkKCl9fSxvbklucHV0Rm9jdXM6ZnVuY3Rpb24oZCl7Y29uc3QgZj1kLnRhcmdldDtkPXRoaXMuZ2V0RGF0YUZyb21FdmVudChkKTt0aGlzLmZvY3VzZWRGZWF0dXJlTmFtZT1kLmZlYXR1cmU7dGhpcy5mb2N1c2VkRmVhdHVyZVZhbHVlSW5kZXg9ZC52YWx1ZUluZGV4O3RoaXMuZm9jdXNlZFNlcU51bWJlcj1kLnNlcU51bTsKdGhpcy4kLmRlbGV0ZXZhbHVlLnN0eWxlLnRvcD1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC0yNSsicHgiO3RoaXMuJC5kZWxldGV2YWx1ZS5zdHlsZS5yaWdodD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0LWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrMzArInB4Ijt0aGlzLnNob3dEZWxldGVWYWx1ZUJ1dHRvbj0hMH0sb25JbnB1dEJsdXI6ZnVuY3Rpb24oKXt0aGlzLnNob3dEZWxldGVWYWx1ZUJ1dHRvbj0hMX0sZGVsZXRlRmVhdHVyZTpmdW5jdGlvbihkKXtkPXRoaXMuZ2V0RGF0YUZyb21FdmVudChkKTt0aGlzLmZlYXR1cmVzLmRlbCYmdGhpcy5mZWF0dXJlcy5kZWwoZC5mZWF0dXJlKTt0aGlzLnNlcUZlYXR1cmVzLmRlbCYmdGhpcy5zZXFGZWF0dXJlcy5kZWwoZC5mZWF0dXJlKTt0aGlzLmRlbGV0ZUpzb25GZWF0dXJlKGQuZmVhdHVyZSk7dGhpcy5leGFtcGxlQ2hhbmdlZCgpOwp0aGlzLnJlZnJlc2hFeGFtcGxlVmlld2VyKCl9LGRlbGV0ZUpzb25GZWF0dXJlOmZ1bmN0aW9uKGQpe3RoaXMuanNvbiYmKHRoaXMuanNvbi5mZWF0dXJlcyYmdGhpcy5qc29uLmZlYXR1cmVzLmZlYXR1cmUmJmRlbGV0ZSB0aGlzLmpzb24uZmVhdHVyZXMuZmVhdHVyZVtkXSx0aGlzLmpzb24uY29udGV4dCYmdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZSYmZGVsZXRlIHRoaXMuanNvbi5jb250ZXh0LmZlYXR1cmVbZF0sdGhpcy5qc29uLmZlYXR1cmVMaXN0cyYmdGhpcy5qc29uLmZlYXR1cmVMaXN0cy5mZWF0dXJlTGlzdCYmZGVsZXRlIHRoaXMuanNvbi5mZWF0dXJlTGlzdHMuZmVhdHVyZUxpc3RbZF0pfSxkZWxldGVWYWx1ZTpmdW5jdGlvbihkKXtkPXRoaXMuZ2V0RGF0YUZyb21FdmVudChkKTtjb25zdCBmPXRoaXMuZ2V0RmVhdHVyZUZyb21EYXRhKGQpLGc9dGhpcy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShkKTtpZihmKXtpZih0aGlzLmlzQnl0ZXNGZWF0dXJlKGQuZmVhdHVyZSkpe2NvbnN0IGw9CnRoaXMuZ2V0SnNvblZhbHVlTGlzdChkLmZlYXR1cmUsZC5zZXFOdW0pO2wmJmwuc3BsaWNlKGQudmFsdWVJbmRleCwxKX1nLnNwbGljZShkLnZhbHVlSW5kZXgsMSk7dGhpcy5zZXRGZWF0dXJlVmFsdWVzKGYsZyk7dGhpcy5leGFtcGxlQ2hhbmdlZCgpO3RoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX19LG9wZW5BZGRGZWF0dXJlRGlhbG9nOmZ1bmN0aW9uKCl7dGhpcy4kLmFkZEZlYXR1cmVEaWFsb2cub3BlbigpfSxhZGRGZWF0dXJlOmZ1bmN0aW9uKCl7aWYodGhpcy5qc29uKXt2YXIgZD1uZXcgRmo7aWYoImludCI9PT10aGlzLm5ld0ZlYXR1cmVUeXBlKXt2YXIgZj1bXTt2YXIgZz1uZXcgRGo7Zy5zZXRWYWx1ZUxpc3QoZik7ZC5zZXRJbnQ2NExpc3QoZyk7Zj17aW50NjRMaXN0Ont2YWx1ZTpmfX19ZWxzZSJmbG9hdCI9PT10aGlzLm5ld0ZlYXR1cmVUeXBlPyhmPVtdLGc9bmV3IEJqLGcuc2V0VmFsdWVMaXN0KGYpLGQuc2V0RmxvYXRMaXN0KGcpLGY9e2Zsb2F0TGlzdDp7dmFsdWU6Zn19KToKKGY9W10sZz1uZXcgbmksZy5zZXRWYWx1ZUxpc3QoZiksZC5zZXRCeXRlc0xpc3QoZyksZj17Ynl0ZXNMaXN0Ont2YWx1ZTpmfX0pO3RoaXMuZmVhdHVyZXMuc2V0KHRoaXMubmV3RmVhdHVyZU5hbWUsZCk7dGhpcy5hZGRKc29uRmVhdHVyZSh0aGlzLm5ld0ZlYXR1cmVOYW1lLGYpO3RoaXMubmV3RmVhdHVyZU5hbWU9IiI7dGhpcy5leGFtcGxlQ2hhbmdlZCgpO3RoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX19LGFkZEpzb25GZWF0dXJlOmZ1bmN0aW9uKGQsZil7dGhpcy5qc29uJiZ0aGlzLmpzb24uZmVhdHVyZXMmJnRoaXMuanNvbi5mZWF0dXJlcy5mZWF0dXJlP3RoaXMuanNvbi5mZWF0dXJlcy5mZWF0dXJlW2RdPWY6dGhpcy5qc29uJiZ0aGlzLmpzb24uY29udGV4dCYmdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZSYmKHRoaXMuanNvbi5jb250ZXh0LmZlYXR1cmVbZF09Zil9LGFkZFZhbHVlOmZ1bmN0aW9uKGQpe2Q9dGhpcy5nZXREYXRhRnJvbUV2ZW50KGQpO2NvbnN0IGY9CnRoaXMuZ2V0RmVhdHVyZUZyb21EYXRhKGQpLGc9dGhpcy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShkKTtmJiYodGhpcy5pc0J5dGVzRmVhdHVyZShkLmZlYXR1cmUpP2cucHVzaCgiIik6Zy5wdXNoKDApLHRoaXMuc2V0RmVhdHVyZVZhbHVlcyhmLGcpLHRoaXMuZXhhbXBsZUNoYW5nZWQoKSx0aGlzLnJlZnJlc2hFeGFtcGxlVmlld2VyKCkpfSxyZWZyZXNoRXhhbXBsZVZpZXdlcjpmdW5jdGlvbigpe2NvbnN0IGQ9dGhpcy5leGFtcGxlO3RoaXMuaWdub3JlQ2hhbmdlPSEwO3RoaXMuZXhhbXBsZT1uZXcgZ2s7dGhpcy5pZ25vcmVDaGFuZ2U9ITE7c2V0VGltZW91dCgoKT0+e3RoaXMuZXhhbXBsZT1kO3RoaXMuaGF2ZVNhbGllbmN5KCl9LDApfSxleGFtcGxlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZXhhbXBsZS1jaGFuZ2UiLHtleGFtcGxlOnRoaXMuZXhhbXBsZX0pO2NsZWFyVGltZW91dCh0aGlzLmNoYW5nZUNhbGxiYWNrVGltZXIpO3RoaXMuY2hhbmdlQ2FsbGJhY2tUaW1lcj0Kc2V0VGltZW91dCh0aGlzLmNoYW5nZUNhbGxiYWNrLmJpbmQodGhpcyksMUUzKX0sY2hhbmdlQ2FsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUNoYW5nZT0hMDt0aGlzLmlzU2VxdWVuY2UmJnRoaXMuc2VyaWFsaXplZFNlcUV4YW1wbGU/dGhpcy5zZXJpYWxpemVkU2VxRXhhbXBsZT1idG9hKHRoaXMuZGVjb2RlQnl0ZXNMaXN0U3RyaW5nKHRoaXMuZXhhbXBsZS5zZXJpYWxpemVCaW5hcnkoKSwhMCkpOnRoaXMuc2VyaWFsaXplZEV4YW1wbGUmJih0aGlzLnNlcmlhbGl6ZWRFeGFtcGxlPWJ0b2EodGhpcy5kZWNvZGVCeXRlc0xpc3RTdHJpbmcodGhpcy5leGFtcGxlLnNlcmlhbGl6ZUJpbmFyeSgpLCEwKSkpO3RoaXMuaWdub3JlQ2hhbmdlPSExfSxnZXRJbnB1dFBpbGxDbGFzczpmdW5jdGlvbihkLGYpe3JldHVybiB0aGlzLnNhbml0aXplRmVhdHVyZShkKSsiIHZhbHVlLXBpbGwiKygiZ3JpZCI9PWY/IiB2YWx1ZS1waWxsLWdyaWQiOiIgdmFsdWUtcGlsbC1zdGFja2VkIil9LApnZXRDb21wYXJlSW5wdXRDbGFzczpmdW5jdGlvbihkLGYsZyl7Zj0idmFsdWUtY29tcGFyZSIrKCJncmlkIj09Zj8iIHZhbHVlLXBpbGwtZ3JpZCI6IiB2YWx1ZS1waWxsLXN0YWNrZWQiKTtpZihudWxsIT1nKXtjb25zdCBsPXRoaXMuZ2V0RmVhdHVyZVZhbHVlcyhkLCEwKTtkPXRoaXMuZ2V0Q29tcGFyZUZlYXR1cmVWYWx1ZXMoZCwhMCk7Zj10aGlzLmhpZ2hsaWdodERpZmZlcmVuY2VzJiYoZz49bC5sZW5ndGh8fGc+PWQubGVuZ3RofHxsW2ddIT1kW2ddKT9mKyIgdmFsdWUtZGlmZmVyZW50IjpmKyIgdmFsdWUtc2FtZSJ9cmV0dXJuIGZ9LGdldFNlcUNvbXBhcmVJbnB1dENsYXNzOmZ1bmN0aW9uKGQsZixnLGwpe2Y9InZhbHVlLWNvbXBhcmUiKygiZ3JpZCI9PWY/IiB2YWx1ZS1waWxsLWdyaWQiOiIgdmFsdWUtcGlsbC1zdGFja2VkIik7aWYobnVsbCE9bCl7Y29uc3Qgaz10aGlzLmdldFNlcUZlYXR1cmVWYWx1ZXMoZCxnLCEwKTtkPXRoaXMuZ2V0Q29tcGFyZVNlcUZlYXR1cmVWYWx1ZXMoZCwKZywhMCk7Zj1sPj1rLmxlbmd0aHx8bD49ZC5sZW5ndGh8fGtbbF0hPWRbbF0/ZisiIHZhbHVlLWRpZmZlcmVudCI6ZisiIHZhbHVlLXNhbWUifXJldHVybiBmfSxzYW5pdGl6ZUZlYXR1cmU6ZnVuY3Rpb24oZCl7ZD1kLnRyaW0oKTtkLm1hdGNoKC9eW0EtWmEtel0uKiQvKXx8KGQ9Il8iK2QpO3JldHVybiBkLnJlcGxhY2UoL1tcL1wuI1xzXS9nLCJfIil9LGlzU2VxRXhhbXBsZTpmdW5jdGlvbihkKXtyZXR1cm4gMDw9ZH0saXNJbWFnZTpmdW5jdGlvbihkKXtyZXR1cm4gYS50ZXN0KGQpfSxnZXRJbWFnZVNyYzpmdW5jdGlvbihkKXt0aGlzLnNldHVwT25sb2FkQ2FsbGJhY2soZCk7cmV0dXJuIHRoaXMuZ2V0SW1hZ2VTcmNGb3JEYXRhKGQsdGhpcy5nZXRGZWF0dXJlVmFsdWVzKGQsITEsITApWzBdKX0sZ2V0Q29tcGFyZUltYWdlU3JjOmZ1bmN0aW9uKGQpe3RoaXMuc2V0dXBPbmxvYWRDYWxsYmFjayhkLCEwKTtyZXR1cm4gdGhpcy5nZXRJbWFnZVNyY0ZvckRhdGEoZCx0aGlzLmdldENvbXBhcmVGZWF0dXJlVmFsdWVzKGQsCiExLCEwKVswXSwhMCl9LGdldFNlcUltYWdlU3JjOmZ1bmN0aW9uKGQsZil7dGhpcy5zZXR1cE9ubG9hZENhbGxiYWNrKGQpO3JldHVybiB0aGlzLmdldEltYWdlU3JjRm9yRGF0YShkLHRoaXMuZ2V0U2VxRmVhdHVyZVZhbHVlcyhkLGYsITEsITApWzBdKX0sZ2V0Q29tcGFyZVNlcUltYWdlU3JjOmZ1bmN0aW9uKGQsZil7dGhpcy5zZXR1cE9ubG9hZENhbGxiYWNrKGQsITApO3JldHVybiB0aGlzLmdldEltYWdlU3JjRm9yRGF0YShkLHRoaXMuZ2V0Q29tcGFyZVNlcUZlYXR1cmVWYWx1ZXMoZCxmLCExLCEwKVswXSwhMCl9LHNldHVwT25sb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oZCxmKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pntjb25zdCBnPXRoaXMuJCQoIiMiK3RoaXMuZ2V0SW1hZ2VJZChkLGYpKTtnLm9ubG9hZD10aGlzLmdldE9uTG9hZEZvckltYWdlKGQsZyxmKX0pfSxnZXRJbWFnZVNyY0ZvckRhdGE6ZnVuY3Rpb24oZCxmLGcpe2Q9YS5leGVjKGQpO2lmKG51bGw9PWQpcmV0dXJuIG51bGw7CmQ9ZFsxXXx8IiI7Zz1nP3RoaXMuZ2V0Q29tcGFyZUZlYXR1cmVWYWx1ZXMoImltYWdlIitkKyIvZm9ybWF0IiwhMSk6dGhpcy5nZXRGZWF0dXJlVmFsdWVzKCJpbWFnZSIrZCsiL2Zvcm1hdCIsITEpO2Q9ImpwZWciOzA8Zy5sZW5ndGgmJihkPWdbMF0udG9Mb3dlckNhc2UoKSk7cmV0dXJuImRhdGE6aW1hZ2UvIitkKyI7YmFzZTY0LCIrYnRvYShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGYpKSl9LGdldEl0ZXJMZW5ndGg6ZnVuY3Rpb24oZCl7bGV0IGY9MDtpZihkKXtsZXQgZz1kLm5leHQoKTtmb3IoOyFnLmRvbmU7KWYrKyxnPWQubmV4dCgpfXJldHVybiBmfSx1cGRhdGVDb21wYXJlTW9kZTpmdW5jdGlvbigpe2xldCBkPSExO2lmKHRoaXMuY29tcGFyZUZlYXR1cmVzJiYwPHRoaXMuZ2V0SXRlckxlbmd0aCh0aGlzLmNvbXBhcmVGZWF0dXJlcy5rZXlzKCkpfHx0aGlzLmNvbXBhcmVTZXFGZWF0dXJlcyYmMDx0aGlzLmdldEl0ZXJMZW5ndGgodGhpcy5jb21wYXJlU2VxRmVhdHVyZXMua2V5cygpKSlkPQohMDt0aGlzLmNvbXBhcmVNb2RlPWR9LGNyZWF0ZUV4YW1wbGVzRnJvbUpzb246ZnVuY3Rpb24oZCl7dGhpcy5leGFtcGxlPXRoaXMuY3JlYXRlRXhhbXBsZXNGcm9tSnNvbkhlbHBlcihkKTt0aGlzLmNvbXBhcmVKc29uPXt9fSxjcmVhdGVDb21wYXJlRXhhbXBsZXNGcm9tSnNvbjpmdW5jdGlvbihkKXtpZighZHx8IU9iamVjdC5rZXlzKGQpLmxlbmd0aClpZih0aGlzLnNhbGllbmN5SnNvbilkPXRoaXMuc2FsaWVuY3lKc29uO2Vsc2V7dGhpcy5jb21wYXJlRXhhbXBsZT1udWxsO3JldHVybn10aGlzLmNvbXBhcmVFeGFtcGxlPXRoaXMuY3JlYXRlRXhhbXBsZXNGcm9tSnNvbkhlbHBlcihkKX0sY3JlYXRlRXhhbXBsZXNGcm9tSnNvbkhlbHBlcjpmdW5jdGlvbihkKXtpZighZClyZXR1cm4gbnVsbDsic3RyaW5nIj09PXR5cGVvZiB0aGlzLmpzb24mJihkPUpTT04ucGFyc2UodGhpcy5qc29uKSk7aWYoZC5mZWF0dXJlcyl7dmFyIGY9bmV3IGdrO2Yuc2V0RmVhdHVyZXModGhpcy5wYXJzZUZlYXR1cmVzKGQuZmVhdHVyZXMpKTsKcmV0dXJuIGZ9cmV0dXJuIGQuY29udGV4dHx8ZC5mZWF0dXJlTGlzdHM/KGY9bmV3IGhrLGQuY29udGV4dCYmZi5zZXRDb250ZXh0KHRoaXMucGFyc2VGZWF0dXJlcyhkLmNvbnRleHQpKSxkLmZlYXR1cmVMaXN0cyYmZi5zZXRGZWF0dXJlTGlzdHModGhpcy5wYXJzZUZlYXR1cmVMaXN0cyhkLmZlYXR1cmVMaXN0cykpLGYpOm5ldyBna30scGFyc2VGZWF0dXJlczpmdW5jdGlvbihkKXtjb25zdCBmPW5ldyBIajtmb3IoY29uc3QgZyBpbiBkLmZlYXR1cmUpaWYoZC5mZWF0dXJlLmhhc093blByb3BlcnR5KGcpKXtjb25zdCBsPWQuZmVhdHVyZVtnXTtmLmdldEZlYXR1cmVNYXAoKS5zZXQoZyx0aGlzLnBhcnNlRmVhdHVyZShsLHRoaXMuaXNJbWFnZShnKSkpfXJldHVybiBmfSxwYXJzZUZlYXR1cmVMaXN0czpmdW5jdGlvbihkKXtjb25zdCBmPW5ldyBLajtmb3IoY29uc3QgZyBpbiBkLmZlYXR1cmVMaXN0KWlmKGQuZmVhdHVyZUxpc3QuaGFzT3duUHJvcGVydHkoZykpe2NvbnN0IGw9CmQuZmVhdHVyZUxpc3RbZ10saz1uZXcgSWosbj1bXTtmb3IoY29uc3QgcCBpbiBsLmZlYXR1cmUpbC5mZWF0dXJlLmhhc093blByb3BlcnR5KHApJiZuLnB1c2godGhpcy5wYXJzZUZlYXR1cmUobC5mZWF0dXJlW3BdLHRoaXMuaXNJbWFnZShnKSkpO2suc2V0RmVhdHVyZUxpc3Qobik7Zi5nZXRGZWF0dXJlTGlzdE1hcCgpLnNldChnLGspfXJldHVybiBmfSxwYXJzZUZlYXR1cmU6ZnVuY3Rpb24oZCl7Y29uc3QgZj1uZXcgRmo7aWYoZC5mbG9hdExpc3Qpe3ZhciBnPW5ldyBCajtnLnNldFZhbHVlTGlzdChkLmZsb2F0TGlzdC52YWx1ZSk7Zi5zZXRGbG9hdExpc3QoZyl9ZWxzZSBkLmJ5dGVzTGlzdD8oZz1uZXcgbmksZC5ieXRlc0xpc3QudmFsdWUmJmcuc2V0VmFsdWVMaXN0KGQuYnl0ZXNMaXN0LnZhbHVlKSxmLnNldEJ5dGVzTGlzdChnKSk6ZC5pbnQ2NExpc3QmJihnPW5ldyBEaixnLnNldFZhbHVlTGlzdChkLmludDY0TGlzdC52YWx1ZSksZi5zZXRJbnQ2NExpc3QoZykpO3JldHVybiBmfSwKZ2V0SW1hZ2VJZDpmdW5jdGlvbihkLGYpe3JldHVybiBmP3RoaXMuZ2V0Q29tcGFyZUltYWdlSWQoZCk6dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZCkrIl9pbWFnZSJ9LGdldENhbnZhc0lkOmZ1bmN0aW9uKGQsZil7cmV0dXJuIGY/dGhpcy5nZXRDb21wYXJlQ2FudmFzSWQoZCk6dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZCkrIl9jYW52YXMifSxnZXRJbWFnZUNhcmRJZDpmdW5jdGlvbihkLGYpe3JldHVybiBmP3RoaXMuZ2V0Q29tcGFyZUltYWdlQ2FyZElkKGQpOnRoaXMuc2FuaXRpemVGZWF0dXJlKGQpKyJfY2FyZCJ9LGdldENvbXBhcmVJbWFnZUlkOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLnNhbml0aXplRmVhdHVyZShkKSsiX2ltYWdlX2NvbXBhcmUifSxnZXRDb21wYXJlQ2FudmFzSWQ6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuc2FuaXRpemVGZWF0dXJlKGQpKyJfY2FudmFzX2NvbXBhcmUifSxnZXRDb21wYXJlSW1hZ2VDYXJkSWQ6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuc2FuaXRpemVGZWF0dXJlKGQpKwoiX2NhcmRfY29tcGFyZSJ9LGdldEZlYXR1cmVEaWFsb2dJZDpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5zYW5pdGl6ZUZlYXR1cmUoZCkrIl9kaWFsb2cifSxmZWF0dXJlTW9yZUNsaWNrZWQ6ZnVuY3Rpb24oZCl7ZD1kLnNyY0VsZW1lbnQ7Y29uc3QgZj10aGlzLiQkKCIjIit0aGlzLnNhbml0aXplRmVhdHVyZShkLmRhdGFGZWF0dXJlKSsiX2RpYWxvZyIpO2YucG9zaXRpb25UYXJnZXQ9ZDtmLm9wZW4oKX0sZXhwYW5kRmVhdHVyZTpmdW5jdGlvbihkKXt0aGlzLnNldCgiZXhwYW5kZWRGZWF0dXJlcy4iK3RoaXMuc2FuaXRpemVGZWF0dXJlKGQuc3JjRWxlbWVudC5kYXRhRmVhdHVyZSksITApO3RoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX0sZGVjb2RlZFN0cmluZ1RvQ2hhckNvZGVzOmZ1bmN0aW9uKGQpe2NvbnN0IGY9bmV3IFVpbnQ4QXJyYXkoZC5sZW5ndGgpO2ZvcihsZXQgZz0wO2c8ZC5sZW5ndGg7KytnKWZbZ109ZC5jaGFyQ29kZUF0KGcpO3JldHVybiBmfSxoYW5kbGVJbWFnZVVwbG9hZDpmdW5jdGlvbihkKXt0aGlzLmhhbmRsZUZpbGVTZWxlY3QoZCwKdGhpcyl9LHVwbG9hZEltYWdlQ2xpY2tlZDpmdW5jdGlvbihkKXtkPXRoaXMuZ2V0RGF0YUZyb21FdmVudChkKTtjb25zdCBmPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgicGFwZXItaW5wdXQiKTtsZXQgZz1udWxsO2ZvcihsZXQgbD0wO2w8Zi5sZW5ndGg7bCsrKWlmKGZbbF0uZGF0YUZlYXR1cmU9PWQuZmVhdHVyZSl7Zz1mW2xdO2JyZWFrfWcmJmcuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmNsaWNrKCl9LGhhbmRsZUZpbGVTZWxlY3Q6ZnVuY3Rpb24oZCxmKXtkLnN0b3BQcm9wYWdhdGlvbigpO2QucHJldmVudERlZmF1bHQoKTtjb25zdCBnPWQudGFyZ2V0LGw9bmV3IEZpbGVSZWFkZXI7ZD1kLmRhdGFUcmFuc2Zlcj9kLmRhdGFUcmFuc2Zlci5maWxlczpkLnRhcmdldC5pbnB1dEVsZW1lbnQuaW5wdXRFbGVtZW50LmZpbGVzOzAhPT1kLmxlbmd0aCYmKGwuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKCk9Pntjb25zdCBrPWwucmVzdWx0LnN1YnN0cmluZygrbC5yZXN1bHQuaW5kZXhPZigiYmFzZTY0LCIpKwo3KTt2YXIgbj1mLmRlY29kZWRTdHJpbmdUb0NoYXJDb2RlcyhhdG9iKGspKTtjb25zdCBwPWYuZ2V0RGF0YUZyb21FbGVtKGcpLHE9Zi5nZXRGZWF0dXJlRnJvbURhdGEocCkscj1mLmdldFZhbHVlTGlzdEZyb21EYXRhKHApO2lmKHEpe3JbMF09bjtxLmdldEJ5dGVzTGlzdCgpLnNldFZhbHVlTGlzdChyKTsobj1mLmdldEpzb25WYWx1ZUxpc3QocC5mZWF0dXJlLHAuc2VxTnVtKSkmJihuWzBdPWspO2NvbnN0IHQ9bmV3IEltYWdlO2YuYWRkSW1hZ2VFbGVtZW50KHAuZmVhdHVyZSx0KTt0LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCgpPT57Zi5nZXRPbkxvYWRGb3JJbWFnZShwLmZlYXR1cmUsdCk7dmFyIHY9YS5leGVjKHAuZmVhdHVyZSlbMV18fCIiO2NvbnN0IHk9ImltYWdlIit2KyIvd2lkdGgiO3Y9ImltYWdlIit2KyIvaGVpZ2h0Ijtjb25zdCB6PWYuZ2V0RmVhdHVyZVZhbHVlcyh5LCExKSx4PWYuZ2V0RmVhdHVyZVZhbHVlcyh2LCExKTswPHoubGVuZ3RoJiYoelswXT0rdC53aWR0aCwKZi5mZWF0dXJlcy5nZXQoeSkuZ2V0SW50NjRMaXN0KCkuc2V0VmFsdWVMaXN0KHopKTswPHgubGVuZ3RoJiYoeFswXT0rdC5oZWlnaHQsZi5mZWF0dXJlcy5nZXQodikuZ2V0SW50NjRMaXN0KCkuc2V0VmFsdWVMaXN0KHgpKTtmLmV4YW1wbGVDaGFuZ2VkKCl9KTt0LnNyYz1sLnJlc3VsdH19LCExKSxsLnJlYWRBc0RhdGFVUkwoZFswXSkpfSxhZGREcmFnRHJvcEJlaGF2aW9yVG9DYW52YXM6ZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZihrKXtrLnN0b3BQcm9wYWdhdGlvbigpO2sucHJldmVudERlZmF1bHQoKTtrLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In1mdW5jdGlvbiBnKGspe2wuaGFuZGxlRmlsZVNlbGVjdChrLGwpfWNvbnN0IGw9dGhpczshdGhpcy5yZWFkb25seSYmZCYmKGQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLGYsITEpLGQuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsZywhMSkpfSxnZXRPbkxvYWRGb3JJbWFnZTpmdW5jdGlvbihkLGYsZyl7Y29uc3QgbD0KKGssbixwKT0+e2NvbnN0IHE9dGhpcy4kJCgiIyIrdGhpcy5nZXRDYW52YXNJZChrLHApKTtwfHx0aGlzLmFkZERyYWdEcm9wQmVoYXZpb3JUb0NhbnZhcyhxKTtpZihuJiZxKXtjb25zdCByPXEuZ2V0Q29udGV4dCgiMmQiKTtsZXQgdD10aGlzLmltYWdlU2NhbGVQZXJjZW50YWdlLzEwMDtpZighdGhpcy5hbGxvd0ltYWdlQ29udHJvbHMpe2xldCB6PXRoaXMuJCQoIiMiK3RoaXMuZ2V0SW1hZ2VDYXJkSWQoayxwKSkucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aC8yOzE2PHomJih6LT0xNik7ejxuLndpZHRoJiYodD16L24ud2lkdGgpfXEud2lkdGg9bi53aWR0aCp0O3EuaGVpZ2h0PW4uaGVpZ2h0KnQ7Y29uc3Qgdj16PT57ci5zYXZlKCk7ci5jbGVhclJlY3QoMCwwLHEud2lkdGgscS5oZWlnaHQpO3IudHJhbnNsYXRlKHoueCx6LnkpO3Iuc2NhbGUoei5rLHouayk7dGhpcy5yZW5kZXJJbWFnZU9uQ2FudmFzKHIscS53aWR0aCxxLmhlaWdodCxrLHApOwpyLnJlc3RvcmUoKX0seT1kMy56b29tKCkuc2NhbGVFeHRlbnQoYykub24oInpvb20iLCgpPT57dGhpcy5hZGRJbWFnZVRyYW5zZm9ybShrLGQzLmV2ZW50LnRyYW5zZm9ybSxwKTt2KGQzLmV2ZW50LnRyYW5zZm9ybSl9KTtkMy5zZWxlY3QocSkuY2FsbCh5KS5vbigiZGJsY2xpY2suem9vbSIsKCk9PmQzLnNlbGVjdChxKS5jYWxsKHkudHJhbnNmb3JtLGQzLnpvb21JZGVudGl0eSkpO3Iuc2F2ZSgpO3Iuc2NhbGUodCx0KTtyLmRyYXdJbWFnZShuLDAsMCk7ci5yZXN0b3JlKCk7dGhpcy5zZXRJbWFnZURhdHVtKHIscS53aWR0aCxxLmhlaWdodCxrLHApO3RoaXMucmVuZGVySW1hZ2VPbkNhbnZhcyhyLHEud2lkdGgscS5oZWlnaHQsayxwKTtwP3RoaXMuY29tcGFyZUltYWdlSW5mb1trXS50cmFuc2Zvcm0mJnYodGhpcy5jb21wYXJlSW1hZ2VJbmZvW2tdLnRyYW5zZm9ybSk6dGhpcy5pbWFnZUluZm9ba10udHJhbnNmb3JtJiZ2KHRoaXMuaW1hZ2VJbmZvW2tdLnRyYW5zZm9ybSl9ZWxzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PgpsKGssbixwKSl9O3RoaXMuYWRkSW1hZ2VFbGVtZW50KGQsZixnKTt0aGlzLmFkZEltYWdlT25Mb2FkKGQsbCxnKTtyZXR1cm4gbC5hcHBseSh0aGlzLFtkLGYsZ10pfSxhZGRJbWFnZU9uTG9hZDpmdW5jdGlvbihkLGYsZyl7dGhpcy5oYXNJbWFnZT0hMDtnPyh0aGlzLmNvbXBhcmVJbWFnZUluZm9bZF18fCh0aGlzLmNvbXBhcmVJbWFnZUluZm9bZF09e30pLHRoaXMuY29tcGFyZUltYWdlSW5mb1tkXS5vbmxvYWQ9Zik6KHRoaXMuaW1hZ2VJbmZvW2RdfHwodGhpcy5pbWFnZUluZm9bZF09e30pLHRoaXMuaW1hZ2VJbmZvW2RdLm9ubG9hZD1mKX0sYWRkSW1hZ2VEYXRhOmZ1bmN0aW9uKGQsZixnKXtnPyh0aGlzLmNvbXBhcmVJbWFnZUluZm9bZF18fCh0aGlzLmNvbXBhcmVJbWFnZUluZm9bZF09e30pLHRoaXMuY29tcGFyZUltYWdlSW5mb1tkXS5pbWFnZURhdGE9Zik6KHRoaXMuaW1hZ2VJbmZvW2RdfHwodGhpcy5pbWFnZUluZm9bZF09e30pLHRoaXMuaW1hZ2VJbmZvW2RdLmltYWdlRGF0YT0KZil9LGFkZEltYWdlRWxlbWVudDpmdW5jdGlvbihkLGYsZyl7Zz8odGhpcy5jb21wYXJlSW1hZ2VJbmZvW2RdfHwodGhpcy5jb21wYXJlSW1hZ2VJbmZvW2RdPXt9KSx0aGlzLmNvbXBhcmVJbWFnZUluZm9bZF0uaW1hZ2VFbGVtZW50PWYpOih0aGlzLmltYWdlSW5mb1tkXXx8KHRoaXMuaW1hZ2VJbmZvW2RdPXt9KSx0aGlzLmltYWdlSW5mb1tkXS5pbWFnZUVsZW1lbnQ9Zil9LGFkZEltYWdlR3JheXNjYWxlRGF0YTpmdW5jdGlvbihkLGYpe3RoaXMuaW1hZ2VJbmZvW2RdfHwodGhpcy5pbWFnZUluZm9bZF09e30pO3RoaXMuaW1hZ2VJbmZvW2RdLmltYWdlR3JheXNjYWxlRGF0YT1mfSxhZGRJbWFnZVRyYW5zZm9ybTpmdW5jdGlvbihkLGYsZyl7Zz8odGhpcy5jb21wYXJlSW1hZ2VJbmZvW2RdfHwodGhpcy5jb21wYXJlSW1hZ2VJbmZvW2RdPXt9KSx0aGlzLmNvbXBhcmVJbWFnZUluZm9bZF0udHJhbnNmb3JtPWYpOih0aGlzLmltYWdlSW5mb1tkXXx8KHRoaXMuaW1hZ2VJbmZvW2RdPQp7fSksdGhpcy5pbWFnZUluZm9bZF0udHJhbnNmb3JtPWYpfSxzZXRJbWFnZURhdHVtOmZ1bmN0aW9uKGQsZixnLGwsayl7aWYoZiYmZyYmKGQ9ZC5nZXRJbWFnZURhdGEoMCwwLGYsZyksZD1VaW50OENsYW1wZWRBcnJheS5mcm9tKGQuZGF0YSksdGhpcy5hZGRJbWFnZURhdGEobCxkLGspLHRoaXMuc2FsaWVuY3kmJnRoaXMuc2hvd1NhbGllbmN5JiZ0aGlzLnNhbGllbmN5W2xdJiYhaykpe2s9VWludDhDbGFtcGVkQXJyYXkuZnJvbShkKTtmb3IoZj0wO2Y8ZC5sZW5ndGg7Zis9NClnPShkW2ZdK2RbZisxXStkW2YrMl0pLzMsa1tmXT1nLGtbZisxXT1nLGtbZisyXT1nO3RoaXMuYWRkSW1hZ2VHcmF5c2NhbGVEYXRhKGwsayl9fSxjb250cmFzdEltYWdlOmZ1bmN0aW9uKGQsZixnKXtmPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFtnLS41LWYvMixnLS41KyhmLTEpLzJdKS5jbGFtcCghMCkucmFuZ2UoWzAsMjU1XSk7Zm9yKGc9MDtnPGQubGVuZ3RoO2crKykzIT09ZyU0JiYoZFtnXT0KZihkW2ddKSl9LHNob3dTYWxpZW5jeUZvclZhbHVlOmZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLmFicyhkKT49TWF0aC5hYnMoMDw9ZD90aGlzLm1heFNhbDp0aGlzLm1pblNhbCkqdGhpcy5zYWxpZW5jeUN1dG9mZi8xMDB9LGdldENvbG9yRm9yU2FsaWVuY3k6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuc2hvd1NhbGllbmN5Rm9yVmFsdWUoZCk/dGhpcy5jb2xvcnMoZCk6IiNmZmYifSxhZGRTYWxpZW5jeVRvSW1hZ2U6ZnVuY3Rpb24oZCxmKXtBcnJheS5pc0FycmF5KGYpJiYwPGYubGVuZ3RoJiZBcnJheS5pc0FycmF5KGZbMF0pJiYoZj1mW3RoaXMuc2VxTnVtYmVyXSk7Y29uc3QgZz0xL01hdGgucG93KHRoaXMuaW1hZ2VTY2FsZVBlcmNlbnRhZ2UvMTAwLDIpO2ZvcihsZXQgaz0wO2s8ZC5sZW5ndGg7ays9NCl7dmFyIGw9TWF0aC5mbG9vcihrLzQqZyk7bD1BcnJheS5pc0FycmF5KGYpP2YubGVuZ3RoPmw/ZltsXTowOmY7Y29uc3Qgbj0uNSoodGhpcy5zaG93U2FsaWVuY3lGb3JWYWx1ZShsKT8KMDw9bD8wPT09dGhpcy5tYXhTYWw/MDpsL3RoaXMubWF4U2FsOmwvdGhpcy5taW5TYWw6MCkse3I6cCxnOnEsYjpyfT1kMy5yZ2IoMDxsP3RoaXMuY29sb3JzKHRoaXMubWF4U2FsKTp0aGlzLmNvbG9ycyh0aGlzLm1pblNhbCkpO2Rba109ZFtrXSooMS1uKStwKm47ZFtrKzFdPWRbaysxXSooMS1uKStxKm47ZFtrKzJdPWRbaysyXSooMS1uKStyKm59fSxyZW5kZXJJbWFnZU9uQ2FudmFzOmZ1bmN0aW9uKGQsZixnLGwsayl7aWYoZiYmZyl7dmFyIG49ZC5nZXRJbWFnZURhdGEoMCwwLGYsZyk7az9uLmRhdGEuc2V0KHRoaXMuY29tcGFyZUltYWdlSW5mb1tsXS5pbWFnZURhdGEpOm4uZGF0YS5zZXQodGhpcy5zYWxpZW5jeSYmdGhpcy5zaG93U2FsaWVuY3kmJnRoaXMuc2FsaWVuY3lbbF0/dGhpcy5pbWFnZUluZm9bbF0uaW1hZ2VHcmF5c2NhbGVEYXRhOnRoaXMuaW1hZ2VJbmZvW2xdLmltYWdlRGF0YSk7MjU2PT09dGhpcy53aW5kb3dXaWR0aCYmMTI4PT09dGhpcy53aW5kb3dDZW50ZXJ8fAp0aGlzLmNvbnRyYXN0SW1hZ2Uobi5kYXRhLHRoaXMud2luZG93V2lkdGgsdGhpcy53aW5kb3dDZW50ZXIpOyFrJiZ0aGlzLnNhbGllbmN5JiZ0aGlzLnNob3dTYWxpZW5jeSYmdGhpcy5zYWxpZW5jeVtsXSYmdGhpcy5hZGRTYWxpZW5jeVRvSW1hZ2Uobi5kYXRhLHRoaXMuc2FsaWVuY3lbbF0pO2w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7bC53aWR0aD1mO2wuaGVpZ2h0PWc7bC5nZXRDb250ZXh0KCIyZCIpLnB1dEltYWdlRGF0YShuLDAsMCk7ZC5jbGVhclJlY3QoMCwwLGYsZyk7ZC5kcmF3SW1hZ2UobCwwLDApfX0sc2hvd1NhbENoZWNrYm94Q2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5zaG93U2FsaWVuY3k9dGhpcy4kLnNhbENoZWNrYm94LmNoZWNrZWR9LHVwZGF0ZUltYWdlczpmdW5jdGlvbigpe2Zvcihjb25zdCBkIGluIHRoaXMuaW1hZ2VJbmZvKWlmKHRoaXMuaW1hZ2VJbmZvLmhhc093blByb3BlcnR5KGQpKXRoaXMuaW1hZ2VJbmZvW2RdLm9ubG9hZChkLHRoaXMuaW1hZ2VJbmZvW2RdLmltYWdlRWxlbWVudCl9LApzaG91bGRTaG93SW1hZ2VDb250cm9sczpmdW5jdGlvbihkLGYpe3JldHVybiBkJiZmfSxzaG91bGRFbmFibGVBZGRGZWF0dXJlOmZ1bmN0aW9uKGQpe3JldHVybiAwPGQubGVuZ3RofSxnZXREZWxldGVWYWx1ZUJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGQsZil7cmV0dXJuIGR8fCFmPyJkZWxldGUtdmFsdWUtYnV0dG9uIGRlbGV0ZS12YWx1ZS1idXR0b24taGlkZGVuIjoiZGVsZXRlLXZhbHVlLWJ1dHRvbiJ9LGdldERlbGV0ZUZlYXR1cmVCdXR0b25DbGFzczpmdW5jdGlvbihkKXtyZXR1cm4gZD8iaGlkZS1jb250cm9scyI6ImRlbGV0ZS1mZWF0dXJlLWJ1dHRvbiJ9LGdldEFkZFZhbHVlQnV0dG9uQ2xhc3M6ZnVuY3Rpb24oZCl7cmV0dXJuIGQ/ImhpZGUtY29udHJvbHMiOiJhZGQtdmFsdWUtYnV0dG9uIn0sZ2V0QWRkRmVhdHVyZUJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGQpe3JldHVybiBkPyJoaWRlLWNvbnRyb2xzIjoiYWRkLWZlYXR1cmUtYnV0dG9uIn0sZ2V0VXBsb2FkSW1hZ2VDbGFzczpmdW5jdGlvbihkKXtyZXR1cm4gZD8KImhpZGUtY29udHJvbHMiOiJ1cGxvYWQtaW1hZ2UtYnV0dG9uIn0sZ2V0Q29tcGFyZUhlYWRlckNsYXNzOmZ1bmN0aW9uKGQpe3JldHVybiBkPyJjb21wYXJlLXZhbHVlLXRleHQiOiJuby1jb21wYXJlLXZhbHVlLXRleHQifSxkZWNvZGVCeXRlc0xpc3RUb1N0cmluZzpmdW5jdGlvbihkKXtsZXQgZj0iIixnO2ZvcihnPTA7ZzxkLmxlbmd0aC8xNjM4NDtnKyspZis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGQuc2xpY2UoMTYzODQqZywxNjM4NCooZysxKSkpO3JldHVybiBmKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZC5zbGljZSgxNjM4NCpnKSl9fSl9KShUdHx8KFR0PXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZC90Zi1pbnRlcmFjdGl2ZS1pbmZlcmVuY2UtZGFzaGJvYXJkLmh0bWwuanMKY29uc3QgVXQ9ZDMuaW50ZXJwb2xhdGVSZ2I7ZnVuY3Rpb24gVnQoYSl7YSYmYS5wYXJlbnRFbGVtZW50JiZhLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoYSl9ZnVuY3Rpb24gV3QoYSl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYSkpfQooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZCIscHJvcGVydGllczp7X3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFFvLlJlcXVlc3RNYW5hZ2VyfSxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFFvLkNhbmNlbGxlcn0sZXhhbXBsZXNQYXRoOnt0eXBlOlN0cmluZ30sbW9kZWxOYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoibW9kZWxOYW1lQ2hhbmdlZF8ifSxwYXJzZWRNb2RlbE5hbWVzOnt0eXBlOlN0cmluZ30saW5mZXJlbmNlQWRkcmVzczp7dHlwZTpTdHJpbmd9LG1vZGVsVHlwZTp7dHlwZTpTdHJpbmd9LG1vZGVsU2lnbmF0dXJlOnt0eXBlOlN0cmluZ30sbW9kZWxWZXJzaW9uOnt0eXBlOlN0cmluZ30sbWF4RXhhbXBsZXM6e3R5cGU6TnVtYmVyfSxsYWJlbFZvY2FiUGF0aDp7dHlwZTpTdHJpbmd9LG1heEluZmVyZW5jZUVudHJpZXNQZXJSdW46TnVtYmVyLG51bVByaW1hcnlCdWNrZXRzOnt0eXBlOk51bWJlciwKdmFsdWU6MixvYnNlcnZlcjoiYnJlYWtkb3duRmVhdHVyZVNlbGVjdGVkXyJ9LG51bVNlY29uZGFyeUJ1Y2tldHM6e3R5cGU6TnVtYmVyLHZhbHVlOjIsb2JzZXJ2ZXI6ImJyZWFrZG93bkZlYXR1cmVTZWxlY3RlZF8ifSxpbmZlcmVuY2VzOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoibmV3SW5mZXJlbmNlc18iLHZhbHVlOigpPT4oe30pfSxleHRyYU91dHB1dHM6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJuZXdFeHRyYU91dHB1dHNfIn0sYXR0cmlidXRpb25zOnt0eXBlOk9iamVjdCx2YWx1ZTp7aW5kaWNlczpbXSxhdHRyaWJ1dGlvbnM6W119LG9ic2VydmVyOiJuZXdBdHRyaWJ1dGlvbnNfIn0sbWluQXR0cmlidXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjB9LG1heEF0dHJpYnV0aW9uOnt0eXBlOk51bWJlcix2YWx1ZTowfSxhdHRyaWJ1dGlvbkNvbG9yU2NhbGU6T2JqZWN0LGV4YW1wbGVzQW5kSW5mZXJlbmNlczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W10sb2JzZXJ2ZXI6ImNvbXB1dGVTZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UifSwKc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlOnt0eXBlOk9iamVjdH0sY291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlOnt0eXBlOk9iamVjdH0sdmlzZGF0YTp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LHNlbGVjdGVkOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxvYnNlcnZlcjoiY29tcHV0ZVNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSJ9LGNvbXBhcmVkSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LGxhYmVsVm9jYWI6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSx1cGRhdGVkRXhhbXBsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbWFnZUZlYXR1cmVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZToiaW1hZ2UvZW5jb2RlZCIscmVhZG9ubHk6ITB9LHN0YXRzOk9iamVjdCxzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJicmVha2Rvd25GZWF0dXJlU2VsZWN0ZWRfIn0sc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlOnt0eXBlOlN0cmluZywKdmFsdWU6IiIsb2JzZXJ2ZXI6ImJyZWFrZG93bkZlYXR1cmVTZWxlY3RlZF8ifSxjdXN0b21EaXN0YW5jZUZ1bmN0aW9uU2V0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6ImN1c3RvbURpc3RhbmNlRnVuY3Rpb25TZXRDaGFuZ2VkXyJ9LHNlbGVjdGVkTGFiZWxGZWF0dXJlOnt0eXBlOlN0cmluZyx2YWx1ZToiIixvYnNlcnZlcjoibGFiZWxGZWF0dXJlU2VsZWN0ZWRfIn0sbmVhcmVzdENvdW50ZXJmYWN0dWFsTW9kZWxJbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sYXR0cmlidXRpb25Nb2RlbEluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLG9ic2VydmVyOiJzZXRBdHRyaWJ1dGlvbnMifSxpbmZlcmVuY2VTdGF0c186e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxmZWF0dXJlVmFsdWVUaHJlc2hvbGRzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxvYnNlcnZlcjoiZmVhdHVyZVZhbHVlVGhyZXNob2xkc0NoYW5nZWRfIn0sZmVhdHVyZVZhbHVlVGhyZXNob2xkc0luZGV4TWFwOk9iamVjdCwKZGVmYXVsdEluZmVyZW5jZUxhYmVsOnt0eXBlOk51bWJlcix2YWx1ZTowLG9ic2VydmVyOiJyZWZyZXNoSW5mZXJlbmNlc18ifSxvdmVyYWxsVGhyZXNob2xkczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LHNpZGVUYWJTZWxlY3RlZDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoic2lkZVRhYlNlbGVjdGVkQ2hhbmdlZF8ifSxsb2NhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJsb2NhbENoYW5nZWRfIn0sbG9jYWxBdGxhc1VybDpTdHJpbmcscGFydGlhbERlcFBsb3RFbGlnaWJsZUZlYXR1cmVzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxvYnNlcnZlcjoicGFydGlhbERlcFBsb3RFbGlnaWJsZUZlYXR1cmVzU2V0In0scGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxleGFtcGxlRGlzcGxheU1vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFja2VkIn0sZmVhdHVyZVNlYXJjaFZhbHVlOlN0cmluZyxpbmNvcnJlY3RQcmVkQ29zdFJhdGlvOnt0eXBlOk51bWJlciwKdmFsdWU6MSxvYnNlcnZlcjoiY29zdFJhdGlvQ2hhbmdlZF8ifSxtdWx0aUNsYXNzOnt0eXBlOkJvb2xlYW59LHNlcXVlbmNlRXhhbXBsZXM6e3R5cGU6Qm9vbGVhbn0sc2FtcGxpbmdPZGRzOnt0eXBlOk51bWJlcn0sdXNlUHJlZGljdEFwaTp7dHlwZTpCb29sZWFufSxwcmVkaWN0T3V0cHV0VGVuc29yOnt0eXBlOlN0cmluZ30scHJlZGljdElucHV0VGVuc29yOnt0eXBlOlN0cmluZ30sYXhpc1ByZWNpc2lvbjp7dHlwZTpOdW1iZXIsdmFsdWU6Mn0sZGlzdGFuY2VTdGF0c186e3R5cGU6T2JqZWN0fSxmYWNldERpc3RTd2l0Y2g6e3R5cGU6U3RyaW5nLHZhbHVlOiJMMSJ9LGZhY2V0RGlzdEZlYXR1cmVOYW1lOnt0eXBlOlN0cmluZ30sZmFjZXREaXN0RmVhdHVyZU5hbWVzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sZmFjZXREaXN0U2V0dGluZzp7dHlwZTpTdHJpbmcsdmFsdWU6ImNvbG9yQnkifSxleGFtcGxlU3RhdHVzU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiTm8gZGF0YXBvaW50cyBsb2FkZWQgeWV0In0sCnNlbGVjdGVkRXhhbXBsZU51bTp7dHlwZTpOdW1iZXIsdmFsdWU6IiIsb2JzZXJ2ZXI6InNlbGVjdGVkRXhhbXBsZUlucHV0Q2hhbmdlZF8ifSxzZWxlY3RlZEV4YW1wbGVNYXg6TnVtYmVyLG9wZW5lZENvbnRleHRUb29sczp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxvcGVuZWRQZXJmb3JtYW5jZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxvcGVuZWRUcnVlTGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sb3BlbmVkRXhwbG9yZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sb3BlbmVkSW5mZXJlbmNlUmVzdWx0czp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxyZWdyZXNzaW9uRW50cmllc186e3R5cGU6QXJyYXl9LG5lYXJlc3RDb3VudGVyZmFjdHVhbERpc3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJMMSJ9LG1pbkNvdW50ZXJmYWN0dWFsVmFsdWVEaXN0Ok51bWJlcixtYXhDb3VudGVyZmFjdHVhbFZhbHVlRGlzdDpOdW1iZXIsdmlzTW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImRpdmUiLApvYnNlcnZlcjoidmlzTW9kZUNoYW5nZWRfIn0sb3B0aW1pemF0aW9uU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJjdXN0b20iLG9ic2VydmVyOiJvcHRpbWl6YXRpb25TZWxlY3RlZENoYW5nZWRfIn0sY29tcGFyZVRpdGxlOnt0eXBlOlN0cmluZyx2YWx1ZToiQXR0cmlidXRpb24gdmFsdWUocykifSxhdHRyaWJ1dGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LGdsb2JhbFBkUGxvdHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbnVtTW9kZWxzOnt0eXBlOk51bWJlcixyZWFkT25seTohMH0sc2hvd05lYXJlc3RDb3VudGVyZmFjdHVhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RlZEZlYXR1cmVTb3J0Ont0eXBlOlN0cmluZyx2YWx1ZToiQ291bnQiLG9ic2VydmVyOiJzZWxlY3RlZEZlYXR1cmVTb3J0Q2hhbmdlZF8ifSxwZFBsb3RDb2xvcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltkMy5jb2xvcigicmdiKDMxLCAxMTksIDE4MCkiKSxkMy5jb2xvcigicmdiKDI1NSwgMTI3LCAxNCkiKSwKZDMuY29sb3IoInJnYig0NCwgMTYwLCA0NCkiKSxkMy5jb2xvcigicmdiKDIxNCwgMzksIDQwKSIpLGQzLmNvbG9yKCJyZ2IoMTQ4LCAxMDMsIDE4OSkiKSxkMy5jb2xvcigicmdiKDE0MCwgODYsIDc1KSIpLGQzLmNvbG9yKCJyZ2IoMjI3LCAxMTksIDE5NCkiKSxkMy5jb2xvcigicmdiKDEyNywgMTI3LCAxMjcpIiksZDMuY29sb3IoInJnYigxODgsIDE4OSwgMzQpIiksZDMuY29sb3IoInJnYigyMywgMTkwLCAyMDcpIildfSxwZFBsb3RUcmFuc3BhcmVudENvbG9yczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W2QzLmNvbG9yKCJyZ2JhKDMxLCAxMTksIDE4MCwgMC4zKSIpLGQzLmNvbG9yKCJyZ2JhKDI1NSwgMTI3LCAxNCwgMC4zKSIpLGQzLmNvbG9yKCJyZ2JhKDQ0LCAxNjAsIDQ0LCAwLjMpIiksZDMuY29sb3IoInJnYmEoMjE0LCAzOSwgNDAsIDAuMykiKSxkMy5jb2xvcigicmdiYSgxNDgsIDEwMywgMTg5LCAwLjMpIiksZDMuY29sb3IoInJnYmEoMTQwLCA4NiwgNzUsIDAuMykiKSwKZDMuY29sb3IoInJnYmEoMjI3LCAxMTksIDE5NCwgMC4zKSIpLGQzLmNvbG9yKCJyZ2JhKDEyNywgMTI3LCAxMjcsIDAuMykiKSxkMy5jb2xvcigicmdiYSgxODgsIDE4OSwgMzQsIDAuMykiKSxkMy5jb2xvcigicmdiYSgyMywgMTkwLCAyMDcsIDAuMykiKV19LHJvY0N1cnZlQ29sb3JzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bZDMuY29sb3IoInJnYigxOCwgMTgxLCAyMDYpIiksZDMuY29sb3IoInJnYigyNTAsIDEyMCwgMjMpIildfSxyb2NDdXJ2ZUxpbmVDb2xvcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltkMy5jb2xvcigicmdiYSgxOCwgMTgxLCAyMDYsIDAuNikiKSxkMy5jb2xvcigicmdiYSgyNTAsIDEyMCwgMjMsIDAuNikiKV19LGNvbmZNYXRyaXhDb2xvcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltkMy5jb2xvcigicmdiKDE4LCAxODEsIDIwNikiKSxkMy5jb2xvcigicmdiKDI1MCwgMTIwLCAyMykiKV19LGFsbENvbmZNYXRyaXhMYWJlbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PgpbXX0sbG9hZGluZ0JhckhpZGRlbl86e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0saXNTb3J0aW5nRWxpZ2libGVGZWF0dXJlczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxleGFtcGxlRmVhdHVyZVNvcnRPcmRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6ImF0dHJpYnV0aW9uIn0sZmVhdHVyZUJ1Y2tldEVkZ2VzXzp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9fSxvYnNlcnZlcnM6WyJzZXRGYWNldERpc3RGZWF0dXJlTmFtZShmYWNldERpc3RTd2l0Y2gsIHNlbGVjdGVkKSIsIm5lYXJlc3RDb3VudGVyZmFjdHVhbFN0YXR1c0NoYW5nZWRfKHNob3dOZWFyZXN0Q291bnRlcmZhY3R1YWwsIG5lYXJlc3RDb3VudGVyZmFjdHVhbE1vZGVsSW5kZXgsIG5lYXJlc3RDb3VudGVyZmFjdHVhbERpc3QsIG1pbkNvdW50ZXJmYWN0dWFsVmFsdWVEaXN0KSJdLHJlbG9hZDpmdW5jdGlvbigpe30sb3BlbkRpYWxvZzpmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpO2EudGFyZ2V0LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcigicGFwZXItZGlhbG9nIikub3BlbigpfSwKcmVhZHk6ZnVuY3Rpb24oKXtjb25zdCBhPWQzLnNlbGVjdCh0aGlzLiQuc2lkZSksYz1kMy5zZWxlY3QodGhpcy4kLmNlbnRlciksZD10aGlzLiQucmVzaXplcixmPXRoaXMsZz1kMy5kcmFnKCkub24oImRyYWciLCgpPT57bGV0IGw9ZDMubW91c2UoZC5wYXJlbnROb2RlLnBhcmVudE5vZGUpWzBdL2QucGFyZW50Tm9kZS5wYXJlbnROb2RlLm9mZnNldFdpZHRoKjEwMDtsPU1hdGgubWF4KGwsMjApO2Muc3R5bGUoIndpZHRoIiwxMDAtbCsiJSIpO2Euc3R5bGUoIndpZHRoIixsKyIlIik7Zi4kLmRpdmUuJC52aXMuX3VwZGF0ZUdyaWRGYWNldGluZygpO2YuJC5kaXZlLiQudmlzLl9vbklyb25SZXNpemUoKX0pO2QzLnNlbGVjdChkKS5jYWxsKGcpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoUW8uZ2V0Um91dGVyKCkucGx1Z2luc0xpc3RpbmcoKSkudGhlbihhPT57IndoYXRpZiJpbiBhP3RoaXMuJC5pbml0aWFsRGlhbG9nLmNsb3NlRGlhbG9nKCk6Cih0aGlzLiQuaW5mZXJlbmNlc2V0dGluZ3MuY2xvc2UoKSx0aGlzLiQuaW5pdGlhbERpYWxvZy5vcGVuTm9UZW5zb3JGbG93RGlhbG9nKCkpfSl9LHNldHRpbmdzQ2xpY2tlZF86ZnVuY3Rpb24oKXt0aGlzLiQuaW5mZXJlbmNlc2V0dGluZ3MudG9nZ2xlKCl9LGxvY2FsQ2hhbmdlZF86ZnVuY3Rpb24oKXt0aGlzLmxvY2FsJiZ0aGlzLmNsb3NlU2V0dGluZ3NfKCl9LG1vZGVsTmFtZUNoYW5nZWRfOmZ1bmN0aW9uKCl7dGhpcy5wYXJzZWRNb2RlbE5hbWVzPXRoaXMubW9kZWxOYW1lLnNwbGl0KCIsIikubWFwKGE9PmEudHJpbSgpKTtmb3IobGV0IGE9MDthPHRoaXMucGFyc2VkTW9kZWxOYW1lcy5sZW5ndGg7YSsrKXtjb25zdCBjPXRoaXMucGFyc2VkTW9kZWxOYW1lc1thXTtmb3IobGV0IGQ9YSsxO2Q8dGhpcy5wYXJzZWRNb2RlbE5hbWVzLmxlbmd0aDtkKyspdGhpcy5wYXJzZWRNb2RlbE5hbWVzW2RdPT1jJiYodGhpcy5wYXJzZWRNb2RlbE5hbWVzW2FdPWMrIiAiKyhhKzEpLHRoaXMucGFyc2VkTW9kZWxOYW1lc1tkXT0KYysiICIrKGQrMSkpfX0sY2xvc2VTZXR0aW5nc186ZnVuY3Rpb24oKXt0aGlzLiQuaW5mZXJlbmNlc2V0dGluZ3MuY2xvc2UoKX0sc2hvd0Rpc3RhbmNlQ2xpY2tlZF86ZnVuY3Rpb24oKXt0aGlzLiQuZGlzdGFuY2VkaWFsb2cudG9nZ2xlKCl9LGN1c3RvbURpc3RhbmNlRnVuY3Rpb25TZXRDaGFuZ2VkXzpmdW5jdGlvbigpe3RoaXMuZmFjZXREaXN0U3dpdGNoPXRoaXMuY3VzdG9tRGlzdGFuY2VGdW5jdGlvblNldD90aGlzLm5lYXJlc3RDb3VudGVyZmFjdHVhbERpc3Q9IkN1c3RvbSI6dGhpcy5uZWFyZXN0Q291bnRlcmZhY3R1YWxEaXN0PSJMMSJ9LHJlcXVlc3RBZGREaXN0YW5jZU1ldHJpYzpmdW5jdGlvbigpe2NvbnN0IGE9dGhpcy5zZWxlY3RlZFswXSxjPXtjYWxsYmFja1BhcmFtczp7ZmVhdHVyZU5hbWU6dGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZX0sZGlzdGFuY2VQYXJhbXM6e319O2lmKHRoaXMubG9jYWwmJnRoaXMuY3VzdG9tRGlzdGFuY2VGdW5jdGlvblNldCl0aGlzLnJlcXVlc3REaXN0YW5jZVdpdGhDYWxsYmFjayhhLAoxLGMpO2Vsc2V7Y29uc3QgZD1bXSxmPSJMMiI9PXRoaXMuZmFjZXREaXN0U3dpdGNoO2ZvcihsZXQgZz0wO2c8dGhpcy52aXNkYXRhLmxlbmd0aDtnKyspZC5wdXNoKHRoaXMuZ2V0RGlzdCh0aGlzLnZpc2RhdGFbYV0sdGhpcy52aXNkYXRhW2ddLGYpKTt0aGlzLmZpbmFsaXplQWRkRGlzdGFuY2VNZXRyaWMoYSxkLGMuY2FsbGJhY2tQYXJhbXMpfX0saW52b2tlQ3VzdG9tRGlzdGFuY2VDYWxsYmFjazpmdW5jdGlvbihhKXtzd2l0Y2goYS5mdW5JZCl7Y2FzZSAwOnRoaXMuZmluYWxpemVDbG9zZXN0Q291bnRlcmZhY3R1YWwoYS5leEluZCxhLmRpc3RhbmNlcyxhLnBhcmFtcyk7YnJlYWs7Y2FzZSAxOnRoaXMuZmluYWxpemVBZGREaXN0YW5jZU1ldHJpYyhhLmV4SW5kLGEuZGlzdGFuY2VzLGEucGFyYW1zKX19LGZpbmFsaXplQWRkRGlzdGFuY2VNZXRyaWM6ZnVuY3Rpb24oYSxjLGQpe2E9ZC5mZWF0dXJlTmFtZTt0aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lcy5wdXNoKGEpO2ZvcihkPQowO2Q8dGhpcy52aXNkYXRhLmxlbmd0aDtkKyspdGhpcy52aXNkYXRhW2RdW2FdPWNbZF07dGhpcy5yZWZyZXNoRGl2ZV8oKTsiY29sb3JCeSI9PXRoaXMuZmFjZXREaXN0U2V0dGluZz90aGlzLiQuZGl2ZS5jb2xvckJ5PWE6InZlcnRpY2FsRmFjZXQiPT10aGlzLmZhY2V0RGlzdFNldHRpbmc/dGhpcy4kLmRpdmUudmVydGljYWxGYWNldD1hOiJob3Jpem9udGFsRmFjZXQiPT10aGlzLmZhY2V0RGlzdFNldHRpbmc/dGhpcy4kLmRpdmUuaG9yaXpvbnRhbEZhY2V0PWE6InZlcnRpY2FsUG9zaXRpb24iPT10aGlzLmZhY2V0RGlzdFNldHRpbmc/dGhpcy4kLmRpdmUudmVydGljYWxQb3NpdGlvbj1hOiJob3Jpem9udGFsUG9zaXRpb24iPT10aGlzLmZhY2V0RGlzdFNldHRpbmcmJih0aGlzLiQuZGl2ZS5ob3Jpem9udGFsUG9zaXRpb249YSl9LHNldEZhY2V0RGlzdEZlYXR1cmVOYW1lOmZ1bmN0aW9uKGEsYyl7dGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZT0iICIrYSsiIGRpc3RhbmNlIHRvIGRhdGFwb2ludCAiKwpjWzBdfSxuZWFyZXN0Q291bnRlcmZhY3R1YWxTdGF0dXNDaGFuZ2VkXzpmdW5jdGlvbihhKXthPyh0aGlzLmZpbmRDbG9zZXN0Q291bnRlcmZhY3R1YWxfKCksdGhpcy5jb21wYXJlVGl0bGU9IkNvdW50ZXJmYWN0dWFsIHZhbHVlKHMpIik6KHRoaXMuY29tcGFyZVRpdGxlPSJBdHRyaWJ1dGlvbiB2YWx1ZShzKSIsdGhpcy5jb21wYXJlZEluZGljZXM9W10sdGhpcy5jb3VudGVyZmFjdHVhbEV4YW1wbGVBbmRJbmZlcmVuY2U9bnVsbCx0aGlzLnJlZnJlc2hTZWxlY3RlZERhdGFwb2ludF8oKSl9LHJlZnJlc2hTZWxlY3RlZERhdGFwb2ludF86ZnVuY3Rpb24oKXtjb25zdCBhPXRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlO3RoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlPW51bGw7dGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2U9YX0saXNTYW1lSW5mZXJlbmNlQ2xhc3NfOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuaXNSZWdyZXNzaW9uXyh0aGlzLm1vZGVsVHlwZSk/Ck1hdGguYWJzKGEtYyk8dGhpcy5taW5Db3VudGVyZmFjdHVhbFZhbHVlRGlzdDphPT09Y30sYWRqdXN0TWF4Q291bnRlcmZhY3R1YWxWYWx1ZURpc3RfOmZ1bmN0aW9uKGEsYyl7dGhpcy5tYXhDb3VudGVyZmFjdHVhbFZhbHVlRGlzdD1NYXRoLm1heCh0aGlzLnN0YXRzW2NdLm51bWJlck1heC10aGlzLnZpc2RhdGFbYV1bY10sdGhpcy52aXNkYXRhW2FdW2NdLXRoaXMuc3RhdHNbY10ubnVtYmVyTWluKX0sYWRqdXN0TWluQ291bnRlcmZhY3R1YWxWYWx1ZURpc3RfOmZ1bmN0aW9uKCl7Y29uc3QgYT10aGlzLmRpc3RhbmNlU3RhdHNfW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLHRoaXMubmVhcmVzdENvdW50ZXJmYWN0dWFsTW9kZWxJbmRleCldO3RoaXMubWluQ291bnRlcmZhY3R1YWxWYWx1ZURpc3Q9YT9hLnN0ZERldjowfSxmaW5hbGl6ZUNsb3Nlc3RDb3VudGVyZmFjdHVhbDpmdW5jdGlvbihhLGMpe2NvbnN0IGQ9dGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSB2YWx1ZSIsCnRoaXMubmVhcmVzdENvdW50ZXJmYWN0dWFsTW9kZWxJbmRleCk7dGhpcy5pc1JlZ3Jlc3Npb25fKHRoaXMubW9kZWxUeXBlKSYmdGhpcy5hZGp1c3RNYXhDb3VudGVyZmFjdHVhbFZhbHVlRGlzdF8oYSxkKTtsZXQgZj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZz0tMTtmb3IobGV0IGw9MDtsPHRoaXMudmlzZGF0YS5sZW5ndGg7bCsrKXtpZihsPT09YXx8dGhpcy5pc1NhbWVJbmZlcmVuY2VDbGFzc18odGhpcy52aXNkYXRhW2FdW2RdLHRoaXMudmlzZGF0YVtsXVtkXSkpY29udGludWU7bGV0IGs9Y1tsXTtrPGYmJihmPWssZz1sKX0tMSE9ZyYmKHRoaXMuY29tcGFyZWRJbmRpY2VzPVtnXSx0aGlzLmNvdW50ZXJmYWN0dWFsRXhhbXBsZUFuZEluZmVyZW5jZT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1tnXSl9LGZpbmRDbG9zZXN0Q291bnRlcmZhY3R1YWxfOmZ1bmN0aW9uKCl7Y29uc3QgYT10aGlzLnNlbGVjdGVkWzBdO2lmKHRoaXMubG9jYWwmJnRoaXMuY3VzdG9tRGlzdGFuY2VGdW5jdGlvblNldCl0aGlzLnJlcXVlc3REaXN0YW5jZVdpdGhDYWxsYmFjayhhLAowLHtjYWxsYmFja1BhcmFtczp7fSxkaXN0YW5jZVBhcmFtczp7fX0pO2Vsc2V7dmFyIGM9dGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSB2YWx1ZSIsdGhpcy5uZWFyZXN0Q291bnRlcmZhY3R1YWxNb2RlbEluZGV4KTt0aGlzLmlzUmVncmVzc2lvbl8odGhpcy5tb2RlbFR5cGUpJiZ0aGlzLmFkanVzdE1heENvdW50ZXJmYWN0dWFsVmFsdWVEaXN0XyhhLGMpO3ZhciBkPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPS0xO2ZvcihsZXQgZz0wO2c8dGhpcy52aXNkYXRhLmxlbmd0aDtnKyspe2lmKGc9PT1hfHx0aGlzLmlzU2FtZUluZmVyZW5jZUNsYXNzXyh0aGlzLnZpc2RhdGFbYV1bY10sdGhpcy52aXNkYXRhW2ddW2NdKSljb250aW51ZTtsZXQgbD10aGlzLmdldERpc3QodGhpcy52aXNkYXRhW2FdLHRoaXMudmlzZGF0YVtnXSwiTDIiPT10aGlzLm5lYXJlc3RDb3VudGVyZmFjdHVhbERpc3QpO2w8ZCYmKGQ9bCxmPWcpfS0xIT1mJiYodGhpcy5jb21wYXJlZEluZGljZXM9CltmXSx0aGlzLmNvdW50ZXJmYWN0dWFsRXhhbXBsZUFuZEluZmVyZW5jZT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1tmXSx0aGlzLmNvbXBhcmVUaXRsZT0iQ291bnRlcmZhY3R1YWwgdmFsdWUocykiKX19LHJlcXVlc3REaXN0YW5jZVdpdGhDYWxsYmFjazpmdW5jdGlvbihhLGMsZCl7dGhpcy5maXJlKCJjb21wdXRlLWN1c3RvbS1kaXN0YW5jZSIse2luZGV4OmEsY2FsbGJhY2s6YyxwYXJhbXM6ZH0pfSxnZXREaXN0OmZ1bmN0aW9uKGEsYyxkKXtsZXQgZj0wO2NvbnN0IGc9Wy4uLm5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGEpLC4uLk9iamVjdC5rZXlzKGMpXSldO2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7aysrKXt2YXIgbD1nW2tdO2lmKHRoaXMuaXNDb21wdXRlZEtleVN0cl8obCl8fGw9PXRoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmV8fHRoaXMuc3RhdHNbbF0udW5pcXVlQ291bnQ9PXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aHx8dGhpcy5pc0F0dHJpYnV0aW9uS2V5U3RyXyhsKSljb250aW51ZTsKbGV0IG49YVtsXSxwPWNbbF07QXJyYXkuaXNBcnJheShuKXx8KG49W25dKTtBcnJheS5pc0FycmF5KHApfHwocD1bcF0pO2NvbnN0IHE9TWF0aC5tYXgobi5sZW5ndGgscC5sZW5ndGgpO2xldCByPTA7Zm9yKGxldCB0PTA7dDxxO3QrKylyPXRoaXMuZGlzdGFuY2VTdGF0c19bbF0uaXNOdW1lcmljP3IrdGhpcy5nZXROdW1lcmljRGlzdChuW3RdLHBbdF0sdGhpcy5kaXN0YW5jZVN0YXRzX1tsXSk6cit0aGlzLmdldENhdGVnb3JpY2FsRGlzdChuW3RdLHBbdF0sdGhpcy5kaXN0YW5jZVN0YXRzX1tsXSk7bD1yL3E7ZCYmKGwqPWwpO2YrPWx9cmV0dXJuIGZ9LGdldE51bWVyaWNEaXN0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gbnVsbD09YXx8bnVsbD09Yz8xOmQuc3RkRGV2P01hdGguYWJzKChhLWMpL2Quc3RkRGV2KTowfSxnZXRDYXRlZ29yaWNhbERpc3Q6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBudWxsPT1hfHxudWxsPT1jPzE6YT09Yz8wOmQucHJvYlNhbWVWYWx1ZX0sdmlzTW9kZUNoYW5nZWRfOmZ1bmN0aW9uKGEpeyJkaXZlIj09CmE/dGhpcy5oaWRlUGFydGlhbERlcGVuZGVuY2VQbG90c18oKTp0aGlzLnNob3dQYXJ0aWFsRGVwZW5kZW5jZVBsb3RzXygpfSxoaWRlUGFydGlhbERlcGVuZGVuY2VQbG90c186ZnVuY3Rpb24oKXt0aGlzLiQucGFydGlhbHBsb3Rob2xkZXIuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LHNob3dQYXJ0aWFsRGVwZW5kZW5jZVBsb3RzXzpmdW5jdGlvbigpe3RoaXMuJC5wYXJ0aWFscGxvdGhvbGRlci5zdHlsZS5kaXNwbGF5PSJmbGV4IjtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMucG9wdWxhdGVQZFRhYnMoKSl9LGFyZVRoZXJlUGRQbG90RmVhdHVyZXNfOmZ1bmN0aW9uKGEpe3JldHVybiBhJiYwPGEubGVuZ3RofSxzZWxlY3RlZEluZGljZXNDaGFuZ2VkXzpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkPWEuZGV0YWlsLnZhbHVlO3RoaXMuc2V0QXR0cmlidXRpb25zKCk7dGhpcy5zZWxlY3RlZERhdGFVcGRhdGVkXygpO3RoaXMuc2hvd05lYXJlc3RDb3VudGVyZmFjdHVhbCYmMCE9CnRoaXMuc2VsZWN0ZWQubGVuZ3RoP3RoaXMuZmluZENsb3Nlc3RDb3VudGVyZmFjdHVhbF8oKTp0aGlzLmNvbXBhcmVkSW5kaWNlcz1bXX0sc2VsZWN0TmV4dERhdGFwb2ludF86ZnVuY3Rpb24oKXt0aGlzLiQuZGl2ZS5zZWxlY3RlZEluZGljZXM9Wyh0aGlzLnNlbGVjdGVkWzBdKzEpJXRoaXMudmlzZGF0YS5sZW5ndGhdfSxzZWxlY3RQcmV2RGF0YXBvaW50XzpmdW5jdGlvbigpe3RoaXMuJC5kaXZlLnNlbGVjdGVkSW5kaWNlcz1bKCh0aGlzLnNlbGVjdGVkWzBdLTEpJXRoaXMudmlzZGF0YS5sZW5ndGgrdGhpcy52aXNkYXRhLmxlbmd0aCkldGhpcy52aXNkYXRhLmxlbmd0aF19LHNlbGVjdGVkRXhhbXBsZUlucHV0Q2hhbmdlZF86ZnVuY3Rpb24oYSl7bnVsbCE9YSYmIiIhPWEmJihhPSthLGlzTmFOKGEpfHwwPmF8fGE+PXRoaXMudmlzZGF0YS5sZW5ndGh8fCh0aGlzLiQuZGl2ZS5zZWxlY3RlZEluZGljZXM9W2FdKSl9LHNldEV4YW1wbGVDb2xsYXBzZWRfOmZ1bmN0aW9uKCl7dGhpcy5leGFtcGxlRGlzcGxheU1vZGU9CiJncmlkIjt0aGlzLiQkKCIjdmlld2VyIikuZXhwYW5kZWRGZWF0dXJlcz17fTt0aGlzLiQkKCIjdmlld2VyIikuZXhwYW5kQWxsRmVhdHVyZXM9ITE7dGhpcy4kJCgiI3ZpZXdlciIpLnJlZnJlc2hFeGFtcGxlVmlld2VyKCl9LHNldEV4YW1wbGVTaG93XzpmdW5jdGlvbigpe3RoaXMuZXhhbXBsZURpc3BsYXlNb2RlPSJncmlkIjt0aGlzLiQkKCIjdmlld2VyIikuZXhwYW5kQWxsRmVhdHVyZXM9ITB9LHNldEV4YW1wbGVFeHBhbmRlZF86ZnVuY3Rpb24oKXt0aGlzLmV4YW1wbGVEaXNwbGF5TW9kZT0ic3RhY2tlZCI7dGhpcy4kJCgiI3ZpZXdlciIpLmV4cGFuZEFsbEZlYXR1cmVzPSEwfSxzdGF0c0NoYW5nZWRfOmZ1bmN0aW9uKGEpe3RoaXMuc3RhdHM9YS5kZXRhaWwudmFsdWV9LGlzQmluYXJ5Q2xhc3NpZmljYXRpb25fOmZ1bmN0aW9uKGEsYyl7cmV0dXJuImNsYXNzaWZpY2F0aW9uIj09YSYmIWN9LGlzTXVsdGlDbGFzc186ZnVuY3Rpb24oYSxjKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT0KYSYmY30saXNSZWdyZXNzaW9uXzpmdW5jdGlvbihhKXtyZXR1cm4icmVncmVzc2lvbiI9PWF9LHNob3VsZFNob3dGZWF0dXJlRHJvcGRvd25fOmZ1bmN0aW9uKGEpe3JldHVybiBhJiYwPE9iamVjdC5rZXlzKGEpLmxlbmd0aH0sc2hvdWxkU2hvd1NlY29uZEZlYXR1cmVEcm9wZG93bl86ZnVuY3Rpb24oYSl7cmV0dXJuIiIhPWF9LHNob3VsZFNob3dMYWJlbERyb3Bkb3duXzpmdW5jdGlvbihhKXtyZXR1cm4gYSYmMDxPYmplY3Qua2V5cyhhKS5sZW5ndGh9LHNob3VsZEhpZGVNb2RlbFNlbGVjdG9yXzpmdW5jdGlvbihhKXtyZXR1cm4hKGEmJjE8YS5sZW5ndGgpfSxzaG91bGRTaG93T3ZlcmFsbFBlcmZDaGFydHNfOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4iIiE9YSYmIiI9PWMmJm51bGwhPWR9LHNob3VsZFNob3dGZWF0dXJlUGVyZkNoYXJ0c186ZnVuY3Rpb24oYSxjLGQpe3JldHVybiIiIT1hJiYiIiE9YyYmbnVsbCE9ZH0sc2hvdWxkU2hvd0Nvc3RSYXRpb186ZnVuY3Rpb24oYSxjLApkKXtyZXR1cm4iIiE9YSYmdGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyhjLGQpfSxhcmVQYXJ0aWFsRGVwZW5kZW5jZVBsb3RzRW5hYmxlZF86ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmhhc1NlbGVjdGVkKGEpJiZ0aGlzLmFyZUV4YW1wbGVzRWRpdGFibGVfKGMsZCl9LGhhc1NlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hfSxnZXRGZWF0dXJlTGlzdF86ZnVuY3Rpb24oYSl7YT1PYmplY3Qua2V5cyhhKS5maWx0ZXIoYz0+IXRoaXMuaXNDb21wdXRlZEtleVN0cl8oYykpLnNvcnQoKTthLnB1c2goIiIpO3JldHVybiBhfSxzdHJTdGFydHNXaXRoXzpmdW5jdGlvbihhLGMpe3JldHVybiAwPT1hLmxhc3RJbmRleE9mKGMsMCl9LGdldE1vZGVsTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGFyc2VkTW9kZWxOYW1lc1thXX0sc3RyV2l0aE1vZGVsTmFtZV86ZnVuY3Rpb24oYSxjKXtyZXR1cm4gMTx0aGlzLm51bU1vZGVscz9hKyIgIit0aGlzLmdldE1vZGVsTmFtZV8oYyk6CmF9LGF0dHJpYnV0aW9uU3RyV2l0aE1vZGVsTmFtZV86ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5oYXNNdWx0aXBsZU1vZGVsQXR0cmlidXRpb25zXyh0aGlzLmF0dHJpYnV0aW9ucyk/YSsiICIrdGhpcy5nZXRNb2RlbE5hbWVfKGMpOmF9LHVwZGF0ZU51bWJlck9mTW9kZWxzOmZ1bmN0aW9uKCl7dGhpcy5fc2V0TnVtTW9kZWxzKHRoaXMubW9kZWxOYW1lLnNwbGl0KCIsIikubGVuZ3RoKTt0aGlzLnNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZT10aGlzLnNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZT10aGlzLnNlbGVjdGVkTGFiZWxGZWF0dXJlPSIiO2NvbnN0IGE9W107Zm9yKGxldCBjPTA7Yzx0aGlzLm51bU1vZGVscztjKyspYS5wdXNoKHt0aHJlc2hvbGQ6LjV9KTt0aGlzLnNldCgib3ZlcmFsbFRocmVzaG9sZHMiLGEpO3RoaXMuc2hvdWxkRGlzYWJsZUluZmVyQnV0dG9uXyh0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcyx0aGlzLm1vZGVsTmFtZSx0aGlzLmluZmVyZW5jZUFkZHJlc3MsCnRoaXMudXBkYXRlZEV4YW1wbGUpfHx0aGlzLmluZmVyQ2xpY2tlZF8oKX0saXNDb21wdXRlZEtleVN0cl86ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3RyU3RhcnRzV2l0aF8oYSwiIEluZmVyZW5jZSB2YWx1ZSIpfHx0aGlzLnN0clN0YXJ0c1dpdGhfKGEsIiBJbmZlcmVuY2UgbGFiZWwiKXx8dGhpcy5zdHJTdGFydHNXaXRoXyhhLCIgSW5mZXJlbmNlIGNvcnJlY3QiKXx8dGhpcy5zdHJTdGFydHNXaXRoXyhhLCIgSW5mZXJlbmNlIGVycm9yIil8fHRoaXMuc3RyU3RhcnRzV2l0aF8oYSwiIEluZmVyZW5jZSBzY29yZSIpfHx0aGlzLnN0clN0YXJ0c1dpdGhfKGEsIiBJbmZlcmVuY2UgYWJzb2x1dGUgZXJyb3IiKXx8dGhpcy5zdHJTdGFydHNXaXRoXyhhLCIgSW5mZXJlbmNlIHNxdWFyZWQgZXJyb3IiKXx8IiBEYXRhcG9pbnQgSUQiPT1hfHwtMSE9dGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZXMuaW5kZXhPZihhKX0saXNBdHRyaWJ1dGlvbktleVN0cl86ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3RyU3RhcnRzV2l0aF8oYSwKImF0dHJpYnV0aW9uc19fIil9LGdldFNsaWNlS2V5XzpmdW5jdGlvbihhLGMsZCl7ZnVuY3Rpb24gZihsKXtpZihsJiZ2b2lkIDA9PT1hW2xdKXJldHVybiI/Ijtjb25zdCBrPWdbbF07aWYoaylmb3IobGV0IG49MTtuPGsubGVuZ3RoO24rKylpZihhW2xdPGtbbl18fGFbbF09PT1rW25dJiZuPT09ay5sZW5ndGgtMSlyZXR1cm4iWyIra1tuLTFdKyIsICIra1tuXSsobjxrLmxlbmd0aC0xPyIpIjoiXSIpO3JldHVybiBhW2xdfWNvbnN0IGc9dGhpcy5mZWF0dXJlQnVja2V0RWRnZXNfO3JldHVybiB0aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKGYoYyksZihkKSl9LGJyZWFrZG93bkZlYXR1cmVTZWxlY3RlZF86ZnVuY3Rpb24oKXt0aGlzLnJlc2V0T3B0aW1pemF0aW9uU2VsZWN0ZWRfKCk7IiI9PXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlJiYodGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmU9IiIpO3RoaXMuY2FsY3VsYXRlQnVja2V0RWRnZXNfKHRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLAp0aGlzLm51bVByaW1hcnlCdWNrZXRzKTt0aGlzLmNhbGN1bGF0ZUJ1Y2tldEVkZ2VzXyh0aGlzLnNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZSx0aGlzLm51bVNlY29uZGFyeUJ1Y2tldHMpO2NvbnN0IGE9W10sYz17fTt0aGlzLnZpc2RhdGEuZm9yRWFjaChkPT57Y29uc3QgZj10aGlzLmdldFNsaWNlS2V5XyhkLHRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlKTtkPXRoaXMuZ2V0U2xpY2VLZXlfKGQsdGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmUpO2NvbnN0IGc9dGhpcy5jcmVhdGVDb21iaW5lZFZhbHVlU3RyaW5nXyhmLGQpO2cgaW4gY3x8KGEucHVzaCh7dmFsdWU6Zix2YWx1ZTI6ZCx0aHJlc2hvbGQ6V3QodGhpcy5vdmVyYWxsVGhyZXNob2xkcyksb3BlbmVkOiExfSksY1tnXT1hLmxlbmd0aC0xKX0pO3RoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzIixhKTt0aGlzLnJlZnJlc2hJbmZlcmVuY2VzXyghMSl9LGZlYXR1cmVWYWx1ZVRocmVzaG9sZHNDaGFuZ2VkXzpmdW5jdGlvbihhKXtjb25zdCBjPQp7fTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyljW3RoaXMuY3JlYXRlQ29tYmluZWRWYWx1ZVN0cmluZ18oYVtkXS52YWx1ZSxhW2RdLnZhbHVlMildPWQ7dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzSW5kZXhNYXA9Y30sbGFiZWxGZWF0dXJlU2VsZWN0ZWRfOmZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApO3RoaXMucmVmcmVzaERpdmVfKCl9KX0sc2lkZVRhYlNlbGVjdGVkQ2hhbmdlZF86ZnVuY3Rpb24oYSl7aWYoMT09YSlyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnVwZGF0ZUluZmVyZW5jZVN0YXRzXyghMCl9KTtlbHNlIGlmKDI9PWEpe2E9dGhpcy4kLm92ZXJ2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoImZhY2V0cy1vdmVydmlldy10YWJsZSIpO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX2hhbmRsZVJlc2l6ZSgpfX0sdXBkYXRlSW5mZXJlbmNlU3RhdHNfOmZ1bmN0aW9uKGEpe2lmKHRoaXMuaW5mZXJlbmNlU3RhdHNfJiYKdGhpcy52aXNkYXRhJiYiIiE9dGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZSYmMCE9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubGVuZ3RoJiZudWxsIT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1swXS5pbmZlcmVuY2VzJiZ0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1swXS5pbmZlcmVuY2VzWzBdLmxlbmd0aD09dGhpcy5udW1Nb2RlbHMmJih0aGlzLmluZmVyZW5jZVN0YXRzXy5sZW5ndGg9PXRoaXMubnVtTW9kZWxzfHxhKSl7aWYoYSl7dmFyIGM9W10sZD1bXTtmb3IodmFyIGY9MDtmPHRoaXMubnVtTW9kZWxzO2YrKyl7dmFyIGc9e307aWYodGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpKXtnLnRocmVzaG9sZHM9W107Zm9yKHZhciBsPTA7MTAxPmw7bCsrKWcudGhyZXNob2xkcy5wdXNoKHtUUDowLEZQOjAsRk46MCxUTjowfSk7Zy5mYWNldGVkPXt9O2ZvcihsPTA7bDx0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcy5sZW5ndGg7bCsrKXt2YXIgaz0KdGhpcy52aXNkYXRhW2xdLG49bnVsbDtpZigiIiE9dGhpcy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUpe3ZhciBwPXRoaXMuZ2V0U2xpY2VLZXlfKGssdGhpcy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsdGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmUpO249Zy5mYWNldGVkW3BdO2lmKCFuKXtnLmZhY2V0ZWRbcF09W107Zm9yKG49MDsxMDE+bjtuKyspZy5mYWNldGVkW3BdLnB1c2goe1RQOjAsRlA6MCxGTjowLFROOjB9KTtuPWcuZmFjZXRlZFtwXX19cD10aGlzLmdldENsYXNzaWZpY2F0aW9uQmVzdE5vblplcm8obCxmKTtmb3IodmFyIHE9MDsxMDA+PXEmJiEocT4xMDAqcC5zY29yZSk7cSsrKStrW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdPT0rcC5sYWJlbD8oZy50aHJlc2hvbGRzW3FdLlRQKz0xLG4mJihuW3FdLlRQKz0xKSk6KGcudGhyZXNob2xkc1txXS5GUCs9MSxuJiYobltxXS5GUCs9MSkpO2Zvcig7MTAwPj1xO3ErKyludWxsPT1rW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdfHwKMD09K2tbdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV0/KGcudGhyZXNob2xkc1txXS5UTis9MSxuJiYobltxXS5UTis9MSkpOihnLnRocmVzaG9sZHNbcV0uRk4rPTEsbiYmKG5bcV0uRk4rPTEpKX10aGlzLmFsbENvbmZNYXRyaXhMYWJlbHM9W107dGhpcy5jYWxjVGhyZXNob2xkU3RhdHMoZy50aHJlc2hvbGRzKTtmb3IodmFyIHIgaW4gZy5mYWNldGVkKWcuZmFjZXRlZC5oYXNPd25Qcm9wZXJ0eShyKSYmdGhpcy5jYWxjVGhyZXNob2xkU3RhdHMoZy5mYWNldGVkW3JdKX1lbHNlIGlmKHRoaXMuaXNNdWx0aUNsYXNzXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpKXtnLnJlc3VsdHM9e307Zy5mYWNldGVkPXt9O2w9bmV3IFNldDtmb3Ioaz0wO2s8dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubGVuZ3RoO2srKyl7bj10aGlzLnZpc2RhdGFba107cD1udWxsOyIiIT10aGlzLnNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSYmKHE9dGhpcy5nZXRTbGljZUtleV8obix0aGlzLnNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwKdGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmUpLHA9Zy5mYWNldGVkW3FdLHB8fChnLmZhY2V0ZWRbcV09e30scD1nLmZhY2V0ZWRbcV0pKTt2YXIgdD1nLnJlc3VsdHNbblt0aGlzLnNlbGVjdGVkTGFiZWxGZWF0dXJlXV07dHx8KGcucmVzdWx0c1tuW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdXT17fSx0PWcucmVzdWx0c1tuW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdXSk7cT10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixmKTt2YXIgdj10W25bcV1dO2wuYWRkKFN0cmluZyhuW3FdKSk7bC5hZGQoU3RyaW5nKG5bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV0pKTt0W25bcV1dPW51bGw9PXY/MTp0W25bcV1dKzE7cCYmKHQ9cFtuW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdXSx0fHwocFtuW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdXT17fSx0PXBbblt0aGlzLnNlbGVjdGVkTGFiZWxGZWF0dXJlXV0pLHRbbltxXV09bnVsbD09CnRbbltxXV0/MTp0W25bcV1dKzEpfXRoaXMuYWxsQ29uZk1hdHJpeExhYmVscz1BcnJheS5mcm9tKGwudmFsdWVzKCkpO2w9e307Zm9yKGs9MDtrPHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aDtrKyspZm9yKHA9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNba10sbj10aGlzLnZpc2RhdGFba11bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV0udG9TdHJpbmcoKSxwPXAuaW5mZXJlbmNlc1twLmluZmVyZW5jZXMubGVuZ3RoLTFdW2ZdLHE9IiIhPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlP3RoaXMuZ2V0U2xpY2VLZXlfKHRoaXMudmlzZGF0YVtrXSx0aGlzLnNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSx0aGlzLnNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZSk6IiIsKHEgaW4gbCl8fChsW3FdPXt9KSx0PTA7dDxwLmxlbmd0aDt0Kyspe3Y9cFt0XS5sYWJlbDtpZighKHYgaW4gbFtxXSkpe2xbcV1bdl09W107Zm9yKHZhciB5PTA7MTAwPj15O3krKylsW3FdW3ZdLnB1c2goe1RQOjAsCkZQOjAsRk46MCxUTjowfSl9eT0xMDAqcFt0XS5zY29yZTtsZXQgeD0iIjtmb3IobGV0IEM9MDsxMDA+PUM7QysrKXg9dj09PW4/eT5DPyJUUCI6IkZOIjp5PkM/IkZQIjoiVE4iLGxbcV1bdl1bQ11beF0rPTF9T2JqZWN0LnZhbHVlcyhsKS5mb3JFYWNoKHg9Pk9iamVjdC52YWx1ZXMoeCkuZm9yRWFjaCh0aGlzLmNhbGNUaHJlc2hvbGRTdGF0cykpO2cuYWxsVGhyZXNob2xkcz1sfWVsc2V7Zy5yZXN1bHRzPXtlcnJvcnM6W119O2cuZmFjZXRlZD17fTtmb3IobD0wO2w8dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubGVuZ3RoO2wrKyluPXRoaXMudmlzZGF0YVtsXSxrPW51bGwsIiIhPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlJiYocD10aGlzLmdldFNsaWNlS2V5XyhuLHRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLHRoaXMuc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlKSxrPWcuZmFjZXRlZFtwXSxrfHwoZy5mYWNldGVkW3BdPXtlcnJvcnM6W119LGs9Zy5mYWNldGVkW3BdKSksCm49blt0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixmKV0tblt0aGlzLnNlbGVjdGVkTGFiZWxGZWF0dXJlXSxnLnJlc3VsdHMuZXJyb3JzLnB1c2gobiksayYmay5lcnJvcnMucHVzaChuKTtkLnB1c2godGhpcy5maWxsSW5SZWdyZXNzaW9uU3RhdHMoZy5yZXN1bHRzLHRoaXMuZm9ybWF0Q2hhcnRLZXkoIkFsbCBkYXRhcG9pbnRzIixmLHRoaXMubnVtTW9kZWxzKSkpO2Zvcih2YXIgeiBpbiBnLmZhY2V0ZWQpZC5wdXNoKHRoaXMuZmlsbEluUmVncmVzc2lvblN0YXRzKGcuZmFjZXRlZFt6XSx0aGlzLmZvcm1hdENoYXJ0S2V5KHosZix0aGlzLm51bU1vZGVscykpKX1jLnB1c2goZyl9ZD10aGlzLnNvcnRSZWdyZXNzaW9uRW50cmllcyhkKTt0aGlzLnJlZ3Jlc3Npb25FbnRyaWVzXz1bXTt0aGlzLnJlZ3Jlc3Npb25FbnRyaWVzXz1kO3RoaXMuaW5mZXJlbmNlU3RhdHNfPWN9Yz10aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHM7dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzPQpbXTt0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHM9dGhpcy5zb3J0RmVhdHVyZVZhbHVlcyhjKTtpZih0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykpe2ZvcihjPTA7Yzx0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMubGVuZ3RoO2MrKyl7ZD1bXTtmPVtdO2c9dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzW2NdLnRocmVzaG9sZDtmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKWQucHVzaCh0aGlzLmluZmVyZW5jZVN0YXRzX1tyXS5mYWNldGVkW3RoaXMuY3JlYXRlQ29tYmluZWRWYWx1ZVN0cmluZ18odGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzW2NdLnZhbHVlLHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1tjXS52YWx1ZTIpXSksZi5wdXNoKGdbcl0udGhyZXNob2xkKTt0aGlzLnBsb3RDaGFydCh0aGlzLiQkKCIjIit0aGlzLmdldFJvY0NoYXJ0SWQoYykpLGQsZixhLCEwKTt0aGlzLnBsb3RDaGFydCh0aGlzLiQkKCIjIisKdGhpcy5nZXRQckNoYXJ0SWQoYykpLGQsZixhLCExKX1jPVtdO2Q9W107Zm9yKGY9MDtmPHRoaXMuaW5mZXJlbmNlU3RhdHNfLmxlbmd0aDtmKyspYy5wdXNoKHRoaXMuaW5mZXJlbmNlU3RhdHNfW2ZdLnRocmVzaG9sZHMpLGQucHVzaCh0aGlzLm92ZXJhbGxUaHJlc2hvbGRzW2ZdLnRocmVzaG9sZCk7dGhpcy5wbG90Q2hhcnQodGhpcy4kJCgiI3JvY2NoYXJ0IiksYyxkLGEsITApO3RoaXMucGxvdENoYXJ0KHRoaXMuJCQoIiNwcmNoYXJ0IiksYyxkLGEsITEpfWVsc2UgaWYodGhpcy5pc011bHRpQ2xhc3NfKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykpZm9yKGQ9KGM9MDx0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMubGVuZ3RoKT90aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMubWFwKHg9PnRoaXMuY3JlYXRlQ29tYmluZWRWYWx1ZVN0cmluZ18oeC52YWx1ZSx4LnZhbHVlMikpOlsiIl0sZj0wO2Y8ZC5sZW5ndGg7ZisrKWZvcihnPWRbZl0scj0wO3I8dGhpcy5hbGxDb25mTWF0cml4TGFiZWxzLmxlbmd0aDtyKyspe3o9CnRoaXMuYWxsQ29uZk1hdHJpeExhYmVsc1tyXTtsPVtdO2s9W107bj1jP3RoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1tmXS50aHJlc2hvbGQ6dGhpcy5vdmVyYWxsVGhyZXNob2xkcztmb3IocD0wO3A8dGhpcy5pbmZlcmVuY2VTdGF0c18ubGVuZ3RoO3ArKylsLnB1c2godGhpcy5pbmZlcmVuY2VTdGF0c19bcF0uYWxsVGhyZXNob2xkc1tnXVt6XSksay5wdXNoKG5bcF0udGhyZXNob2xkKTt0aGlzLnBsb3RDaGFydCh0aGlzLiQkKCIjIit0aGlzLmdldFJvY0NoYXJ0TGFiZWxJZChyLGM/ZjoiIikpLGwsayxhLCEwKTt0aGlzLnBsb3RDaGFydCh0aGlzLiQkKCIjIit0aGlzLmdldFByQ2hhcnRMYWJlbElkKHIsYz9mOiIiKSksbCxrLGEsITEpfXRoaXMudXBkYXRlQ29ycmVjdG5lc3NfKCl9fSxzb3J0RmVhdHVyZVZhbHVlczpmdW5jdGlvbihhKXtjb25zdCBjPXRoaXMuaW5mZXJlbmNlU3RhdHNfWzBdO2E9YS5maWx0ZXIoZD0+dGhpcy5pc1JlZ3Jlc3Npb25fKHRoaXMubW9kZWxUeXBlKT8KMDx0aGlzLmdldFJlZ3Jlc3Npb25Db3VudChjLGQpOnRoaXMuaXNCaW5hcnlDbGFzc2lmaWNhdGlvbl8odGhpcy5tb2RlbFR5cGUsdGhpcy5tdWx0aUNsYXNzKT8wPHRoaXMuZ2V0QmluYXJ5Q2xhc3NpZmljYXRpb25Db3VudChjLGQpOjA8dGhpcy5nZXRNdWx0aWNsYXNzQ2xhc3NpZmljYXRpb25Db3VudChjLGQpKTtyZXR1cm4gYS5zb3J0KChkLGYpPT57aWYoIkNvdW50Ij09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiB0aGlzLmlzUmVncmVzc2lvbl8odGhpcy5tb2RlbFR5cGUpP3RoaXMuZ2V0UmVncmVzc2lvbkNvdW50KGMsZiktdGhpcy5nZXRSZWdyZXNzaW9uQ291bnQoYyxkKTp0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcyk/dGhpcy5nZXRCaW5hcnlDbGFzc2lmaWNhdGlvbkNvdW50KGMsZiktdGhpcy5nZXRCaW5hcnlDbGFzc2lmaWNhdGlvbkNvdW50KGMsZCk6dGhpcy5nZXRNdWx0aWNsYXNzQ2xhc3NpZmljYXRpb25Db3VudChjLApmKS10aGlzLmdldE11bHRpY2xhc3NDbGFzc2lmaWNhdGlvbkNvdW50KGMsZCk7aWYoIkFscGhhYmV0aWNhbCI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gZD10aGlzLmdldFByaW50YWJsZVZhbHVlXyhkKSxmPXRoaXMuZ2V0UHJpbnRhYmxlVmFsdWVfKGYpLCJbIj09PWRbMF0mJiJbIj09PWZbMF0/TnVtYmVyLnBhcnNlRmxvYXQoZC5zdWJzdHJpbmcoMSkpLU51bWJlci5wYXJzZUZsb2F0KGYuc3Vic3RyaW5nKDEpKTpkLmxvY2FsZUNvbXBhcmUoZik7aWYoIkFjY3VyYWN5Ij09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiB0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcyk/K3RoaXMuZ2V0QWNjdXJhY3lNb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLGYudGhyZXNob2xkLDAsZiktK3RoaXMuZ2V0QWNjdXJhY3lNb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLGQudGhyZXNob2xkLDAsCmQpOit0aGlzLmdldE11bHRpQ2xhc3NBY2N1cmFjeU1vZGVsSW5kZXgodGhpcy5pbmZlcmVuY2VTdGF0c18sMCxmKS0rdGhpcy5nZXRNdWx0aUNsYXNzQWNjdXJhY3lNb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLDAsZCk7aWYoIkZhbHNlIHBvc2l0aXZlcyI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4rdGhpcy5nZXRGUE1vZGVsSW5kZXgodGhpcy5pbmZlcmVuY2VTdGF0c18sZi50aHJlc2hvbGQsMCxmKS0rdGhpcy5nZXRGUE1vZGVsSW5kZXgodGhpcy5pbmZlcmVuY2VTdGF0c18sZC50aHJlc2hvbGQsMCxkKTtpZigiRmFsc2UgbmVnYXRpdmVzIj09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiB0aGlzLmdldEZOTW9kZWxJbmRleCgrdGhpcy5pbmZlcmVuY2VTdGF0c18sZi50aHJlc2hvbGQsMCxmKS0rdGhpcy5nZXRGTk1vZGVsSW5kZXgodGhpcy5pbmZlcmVuY2VTdGF0c18sZC50aHJlc2hvbGQsMCxkKX0pfSxzb3J0UmVncmVzc2lvbkVudHJpZXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc29ydCgoYywKZCk9PntpZigiQ291bnQiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQuY291bnQtYy5jb3VudDtpZigiQWxwaGFiZXRpY2FsIj09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiJbIj09PWMubmFtZVswXSYmIlsiPT09ZC5uYW1lWzBdP051bWJlci5wYXJzZUZsb2F0KGMubmFtZS5zdWJzdHJpbmcoMSkpLU51bWJlci5wYXJzZUZsb2F0KGQubmFtZS5zdWJzdHJpbmcoMSkpOmMubmFtZS5sb2NhbGVDb21wYXJlKGQubmFtZSk7aWYoIk1lYW4gZXJyb3IiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQubWVhbkVycm9yLWMubWVhbkVycm9yO2lmKCJNZWFuIGFic29sdXRlIGVycm9yIj09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiBkLm1lYW5BYnNFcnJvci1jLm1lYW5BYnNFcnJvcjtpZigiTWVhbiBzcXVhcmVkIGVycm9yIj09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiBkLm1lYW5TcXVhcmVkRXJyb3ItYy5tZWFuU3F1YXJlZEVycm9yOwppZigiTWVkaWFuIGVycm9yIj09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiBkLm1lZGlhbkVycm9yLWMubWVkaWFuRXJyb3I7aWYoIk1lZGlhbiBhYnNvbHV0ZSBlcnJvciI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gZC5tZWRpYW5BYnNFcnJvci1jLm1lZGlhbkFic0Vycm9yO2lmKCJNZWRpYW4gc3F1YXJlZCBlcnJvciI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gZC5tZWRpYW5TcXVhcmVkRXJyb3ItYy5tZWRpYW5TcXVhcmVkRXJyb3J9KX0sZmlsbEluUmVncmVzc2lvblN0YXRzOmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gZChrKXtyZXR1cm4gay5yZWR1Y2UoKG4scCk9Pm4rcCwwKS9rLmxlbmd0aH1mdW5jdGlvbiBmKGspe2lmKDA9PWsubGVuZ3RoKXJldHVybiBOYU47az1rLnNvcnQoKHAscSk9PnAtcSk7Y29uc3Qgbj1rLmxlbmd0aC8yO3JldHVybiAxPT1rLmxlbmd0aD9rWzBdOjA9PWsubGVuZ3RoJTI/a1tuXTooa1tNYXRoLmZsb29yKG4pXSsKa1tNYXRoLmNlaWwobildKS8yfWNvbnN0IGc9YS5lcnJvcnMubWFwKGs9Pk1hdGguYWJzKGspKSxsPWEuZXJyb3JzLm1hcChrPT5rKmspO3JldHVybntuYW1lOmMsbWVhbkVycm9yOmQoYS5lcnJvcnMpLG1lYW5BYnNFcnJvcjpkKGcpLG1lYW5TcXVhcmVkRXJyb3I6ZChsKSxtZWRpYW5FcnJvcjpmKGEuZXJyb3JzKSxtZWRpYW5BYnNFcnJvcjpmKGcpLG1lZGlhblNxdWFyZWRFcnJvcjpmKGwpLGNvdW50OmEuZXJyb3JzLmxlbmd0aH19LHBsb3RDaGFydDpmdW5jdGlvbihhLGMsZCxmLGcpe2lmKGMmJmNbMF0mJmEpe3ZhciBsPVtdLGs9W10sbj1nPyJGUFIiOiJUUFIiLHA9Zz8iVFBSIjoiUFBWIixxPWc/IkZQUiI6IlJlY2FsbCIscj1nPyJUUFIiOiJQcmVjaXNpb24iO2ZvcihsZXQgdD0wO3Q8Yy5sZW5ndGg7dCsrKXtsZXQgdj1udWxsO2NvbnN0IHk9Y1t0XS5tYXAoKHoseCk9PnsuNT54LTEwMCpkW3RdJiYodj17c3RlcDp6W25dLHNjYWxhcjp6W3BdLHRocmVzaG9sZDp4LzEwMH0pOwpyZXR1cm57c3RlcDp6W25dLHNjYWxhcjp6W3BdLHRocmVzaG9sZDp4LzEwMH19KS5yZXZlcnNlKCk7YS5zZXRTZXJpZXNEYXRhKHRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIlRocmVzaG9sZCBzZXQiLHQpLFt2XSk7ZiYmKGEuc2V0U2VyaWVzRGF0YSh0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCJST0MiLHQpLHkpLGwucHVzaCh0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCJST0MiLHQpKSxsLnB1c2godGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiVGhyZXNob2xkIHNldCIsdCkpLGsucHVzaCh0aGlzLnJvY0N1cnZlTGluZUNvbG9yc1t0XSksay5wdXNoKHRoaXMucm9jQ3VydmVDb2xvcnNbdF0pKX1pZihmKXtjb25zdCB0PWQzLmZvcm1hdCgiLjJmIik7YS54QXhpc0Zvcm1hdHRlcj1kMy5mb3JtYXQoIi4yZiIpO2NvbnN0IHY9ZDMuZm9ybWF0KCIsLjEiKTtmPVt7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6ZnVuY3Rpb24oeSl7cmV0dXJuIHQoeS5kYXR1bS50aHJlc2hvbGQpfX0se3RpdGxlOnIsCmV2YWx1YXRlOmZ1bmN0aW9uKHkpe3JldHVybiBnP3YoeS5kYXR1bS5zY2FsYXIpOnQoeS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOnEsZXZhbHVhdGU6ZnVuY3Rpb24oeSl7cmV0dXJuIGc/dih5LmRhdHVtLnN0ZXApOnQoeS5kYXR1bS5zdGVwKX19XTsxPGMubGVuZ3RoJiZmLnB1c2goe3RpdGxlOiJNb2RlbCIsZXZhbHVhdGU6ZnVuY3Rpb24oeSl7eT15LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lLnNwbGl0KCIgIik7cmV0dXJuIHlbeS5sZW5ndGgtMV19fSk7YS50b29sdGlwQ29sdW1ucz1mO2EuY29sb3JTY2FsZT0obmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3IpLnJhbmdlKGspO2EuY29sb3JTY2FsZS5kb21haW4obCk7YS5zZXRWaXNpYmxlU2VyaWVzKGwpfX19LGNhbGNUaHJlc2hvbGRTdGF0czpmdW5jdGlvbihhKXtmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrKylhW2NdLlRQUj0wPGFbY10uVFArYVtjXS5GTj9hW2NdLlRQLyhhW2NdLlRQK2FbY10uRk4pOjAsYVtjXS5GUFI9MDwKYVtjXS5GUCthW2NdLlROP2FbY10uRlAvKGFbY10uRlArYVtjXS5UTik6MCxhW2NdLlBQVj0wPGFbY10uVFArYVtjXS5GUD9hW2NdLlRQLyhhW2NdLlRQK2FbY10uRlApOjB9LG9wdGltaXphdGlvblNlbGVjdGVkQ2hhbmdlZF86ZnVuY3Rpb24oYSl7ImN1c3RvbSIhPWEmJigidW5hd2FyZSI9PWE/dGhpcy5vcHRpbWl6ZVRocmVzaG9sZENsaWNrZWRfKCk6Imdyb3VwIj09YT90aGlzLm9wdGltaXplRmFjZXRlZFRocmVzaG9sZHNDbGlja2VkXygpOiJkZW1vcGFyaXR5Ij09YT90aGlzLmRlbW9QYXJpdHlDbGlja2VkXygpOiJlcXVhbGFjYyI9PWE/dGhpcy5lcXVhbEFjY0NsaWNrZWRfKCk6ImVxdWFsb3BwIj09YSYmdGhpcy5lcXVhbE9wcG9DbGlja2VkXygpLHRoaXMudXBkYXRlSW5mZXJlbmNlU3RhdHNfKCEwKSl9LGNvc3RSYXRpb0NoYW5nZWRfOmZ1bmN0aW9uKCl7dGhpcy5yZXNldE9wdGltaXphdGlvblNlbGVjdGVkXygpfSxyZXNldE9wdGltaXphdGlvblNlbGVjdGVkXzpmdW5jdGlvbigpe2NvbnN0IGE9CnRoaXMuJCQoIiNjdXN0b210aHJlc2giKTtudWxsIT1hJiZhLmNsaWNrKCl9LG9wdGltaXplVGhyZXNob2xkQ2xpY2tlZF86ZnVuY3Rpb24oKXtmb3IobGV0IGE9MDthPHRoaXMuaW5mZXJlbmNlU3RhdHNfLmxlbmd0aDthKyspe2NvbnN0IGM9dGhpcy5maW5kT3B0aW1hbFRocmVzaG9sZF8odGhpcy5pbmZlcmVuY2VTdGF0c19bYV0udGhyZXNob2xkcyk7dGhpcy5zZXQoIm92ZXJhbGxUaHJlc2hvbGRzLiIrYSsiLnRocmVzaG9sZCIsYyk7aWYodGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzKWZvcihsZXQgZD0wO2Q8dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzLmxlbmd0aDtkKyspdGhpcy5zZXQoImZlYXR1cmVWYWx1ZVRocmVzaG9sZHMuIitkKyIudGhyZXNob2xkLiIrYSsiLnRocmVzaG9sZCIsYyl9fSxvcHRpbWl6ZUZhY2V0ZWRUaHJlc2hvbGRzQ2xpY2tlZF86ZnVuY3Rpb24oKXtmb3IobGV0IGE9MDthPHRoaXMuaW5mZXJlbmNlU3RhdHNfLmxlbmd0aDthKyspe2NvbnN0IGM9Ck9iamVjdC5rZXlzKHRoaXMuaW5mZXJlbmNlU3RhdHNfW2FdLmZhY2V0ZWQpO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzLiIrZCsiLnRocmVzaG9sZC4iK2ErIi50aHJlc2hvbGQiLHRoaXMuZmluZE9wdGltYWxUaHJlc2hvbGRfKHRoaXMuaW5mZXJlbmNlU3RhdHNfW2FdLmZhY2V0ZWRbY1tkXV0pKX19LGZpbmRPcHRpbWFsVGhyZXNob2xkXzpmdW5jdGlvbihhKXtsZXQgYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZD0wO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKXtjb25zdCBnPXRoaXMuZ2V0Q29zdChhW2ZdKTtnPD1jJiYoYz1nLGQ9Zil9cmV0dXJuIGQvMTAwfSxlcXVhbE9wcG9DbGlja2VkXzpmdW5jdGlvbigpe3RoaXMuZ2V0QmVzdFRocmVzaG9sZHNCeUZhaXJuZXNzTWVhc3VyZV8oYT0+YS5UUC8oYS5UUCthLkZOKSl9LGVxdWFsQWNjQ2xpY2tlZF86ZnVuY3Rpb24oKXt0aGlzLmdldEJlc3RUaHJlc2hvbGRzQnlGYWlybmVzc01lYXN1cmVfKGE9PgooYS5UUCthLlROKS8oYS5UUCthLkZQK2EuVE4rYS5GTikpfSxkZW1vUGFyaXR5Q2xpY2tlZF86ZnVuY3Rpb24oKXt0aGlzLmdldEJlc3RUaHJlc2hvbGRzQnlGYWlybmVzc01lYXN1cmVfKGE9PihhLlRQK2EuRlApLyhhLlRQK2EuRlArYS5UTithLkZOKSl9LGdldEJlc3RUaHJlc2hvbGRzQnlGYWlybmVzc01lYXN1cmVfOmZ1bmN0aW9uKGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5pbmZlcmVuY2VTdGF0c18ubGVuZ3RoO2QrKyl7dmFyIGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBmPW51bGw7Y29uc3QgZz10aGlzLmluZmVyZW5jZVN0YXRzX1tkXSxsPU9iamVjdC5rZXlzKGcuZmFjZXRlZCksaz1nLmZhY2V0ZWRbbFswXV07Zm9yKGxldCBuPTA7bjxrLmxlbmd0aDtuKyspe2NvbnN0IHA9YShrW25dKSxxPVtuXTtsZXQgcj10aGlzLmdldENvc3Qoa1tuXSk7Zm9yKGxldCB0PTE7dDxsLmxlbmd0aDt0Kyspe2NvbnN0IHY9Zy5mYWNldGVkW2xbdF1dLHk9dGhpcy50aHJlc2hvbGRDbG9zZXN0VG9NZWFzdXJlKHYsCnAsYSk7cS5wdXNoKHkpO3IrPXRoaXMuZ2V0Q29zdCh2W3ldKX1yPD1jJiYoYz1yLGY9cSl9Zm9yKGM9MDtjPGwubGVuZ3RoO2MrKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK3RoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc0luZGV4TWFwW2xbY11dKyIudGhyZXNob2xkLiIrZCsiLnRocmVzaG9sZCIsZltjXS8xMDApfX0sZ2V0Q29zdDpmdW5jdGlvbihhKXtyZXR1cm4gYS5GUCp0aGlzLmluY29ycmVjdFByZWRDb3N0UmF0aW8rYS5GTn0sdGhyZXNob2xkQ2xvc2VzdFRvTWVhc3VyZTpmdW5jdGlvbihhLGMsZCl7bGV0IGY9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGc9MDtmb3IobGV0IGs9MDtrPGEubGVuZ3RoO2srKyl7dmFyIGw9ZChhW2tdKTtsPU1hdGguYWJzKGwtYyk7bDw9ZiYmKGc9ayxmPWwpfXJldHVybiBnfSxnZXRDbGFzc2lmaWNhdGlvbkJlc3ROb25aZXJvOmZ1bmN0aW9uKGEsYyl7bGV0IGQ9MDtjb25zdCBmPXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW2FdLmluZmVyZW5jZXMubGVuZ3RoLQoxO2ZvcihsZXQgZz0wO2c8dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbYV0uaW5mZXJlbmNlc1tmXVtjXS5sZW5ndGg7ZysrKWlmKDAhPT0rdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbYV0uaW5mZXJlbmNlc1tmXVtjXVtnXS5sYWJlbCl7ZD1nO2JyZWFrfXJldHVybiB0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1thXS5pbmZlcmVuY2VzW2ZdW2NdW2RdfSxnZXRDb25mdXNpb25Db3VudHNNb2RlbEluZGV4OmZ1bmN0aW9uKGEsYyxkLGYpe3JldHVybiB0aGlzLm92ZXJhbGxUaHJlc2hvbGRzLmxlbmd0aCE9dGhpcy5udW1Nb2RlbHN8fHRoaXMuaW5mZXJlbmNlU3RhdHNfLmxlbmd0aCE9dGhpcy5udW1Nb2RlbHM/e306dGhpcy5nZXRDb25mdXNpb25Db3VudHModGhpcy5pbmZlcmVuY2VTdGF0c19bZF0sY1tkXS50aHJlc2hvbGQsZil9LGdldFRvdGFsRW50cmllc0luQ29uZkNvdW50czpmdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiAwO2xldCBjPTA7Y29uc3QgZD1PYmplY3Qua2V5cyhhKTsKZm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IGc9YVtkW2ZdXSxsPU9iamVjdC5rZXlzKGcpO2ZvcihsZXQgaz0wO2s8bC5sZW5ndGg7aysrKWMrPWdbbFtrXV19cmV0dXJuIGN9LGdldEZQTW9kZWxJbmRleDpmdW5jdGlvbihhLGMsZCxmKXthPXRoaXMuZ2V0Q29uZnVzaW9uQ291bnRzTW9kZWxJbmRleChhLGMsZCxmKTtpZigwPT1PYmplY3Qua2V5cyhhKS5sZW5ndGgpcmV0dXJuIG51bGw7Yz1hLk5vLlllcztyZXR1cm4gZDMuZm9ybWF0KCIsLjFmIikoYy90aGlzLmdldFRvdGFsRW50cmllc0luQ29uZkNvdW50cyhhKSoxMDApfSxnZXRGTk1vZGVsSW5kZXg6ZnVuY3Rpb24oYSxjLGQsZil7YT10aGlzLmdldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXgoYSxjLGQsZik7aWYoMD09T2JqZWN0LmtleXMoYSkubGVuZ3RoKXJldHVybiAwO2M9YS5ZZXMuTm87cmV0dXJuIGQzLmZvcm1hdCgiLC4xZiIpKGMvdGhpcy5nZXRUb3RhbEVudHJpZXNJbkNvbmZDb3VudHMoYSkqMTAwKX0sCmdldEFjY3VyYWN5TW9kZWxJbmRleDpmdW5jdGlvbihhLGMsZCxmKXthPXRoaXMuZ2V0Q29uZnVzaW9uQ291bnRzTW9kZWxJbmRleChhLGMsZCxmKTtpZigwPT1PYmplY3Qua2V5cyhhKS5sZW5ndGgpcmV0dXJuIDA7Yz1hLlllcy5ZZXMrYS5Oby5ObztyZXR1cm4gZDMuZm9ybWF0KCIsLjFmIikoYy90aGlzLmdldFRvdGFsRW50cmllc0luQ29uZkNvdW50cyhhKSoxMDApfSxnZXRGMU1vZGVsSW5kZXg6ZnVuY3Rpb24oYSxjLGQsZil7Y29uc3QgZz1kMy5mb3JtYXQoIiwuMmYiKTtkPXRoaXMuZ2V0Q29uZnVzaW9uQ291bnRzTW9kZWxJbmRleChhLGMsZCxmKTtpZigwPT1PYmplY3Qua2V5cyhkKS5sZW5ndGgpcmV0dXJuIDA7YT1kLlllcy5ZZXM7Yz1kLk5vLlllcztkPWQuWWVzLk5vO2lmKDA9PWEpcmV0dXJuIDAhPWN8fDAhPWQ/ZygwKTpnKDEpO2M9YS8oYStjKTthLz1hK2Q7cmV0dXJuIGcoMipjKmEvKGMrYSkpfSxnZXRGZWF0dXJlVmFsdWVDb3VudDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzKHRoaXMuZ2V0Q29uZnVzaW9uQ291bnRzTW9kZWxJbmRleChhLApjLDAsZCkpfSxnZXRDb25mdXNpb25NYXRyaXhMYWJlbDpmdW5jdGlvbihhLGMpe3JldHVybiAyPmM/IiI6dGhpcy5nZXRNb2RlbE5hbWVfKGEpfSxnZXRDb25mdXNpb25NYXRyaXhDb2xvcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb25mTWF0cml4Q29sb3JzW2FdfSxnZXRDb25mdXNpb25Db3VudHMoYSxjLGQpe2xldCBmPW51bGwsZz1udWxsO251bGwhPWQmJihmPWQudmFsdWUsZz1kLnZhbHVlMik7cmV0dXJue05vOntObzp0aGlzLmdldENvbmZNYXRyaXhWYWx1ZShhLGMsIlROIixmLGcpLFllczp0aGlzLmdldENvbmZNYXRyaXhWYWx1ZShhLGMsIkZQIixmLGcpfSxZZXM6e05vOnRoaXMuZ2V0Q29uZk1hdHJpeFZhbHVlKGEsYywiRk4iLGYsZyksWWVzOnRoaXMuZ2V0Q29uZk1hdHJpeFZhbHVlKGEsYywiVFAiLGYsZyl9fX0sZ2V0Q29uZk1hdHJpeFZhbHVlOmZ1bmN0aW9uKGEsYyxkLGYsZyl7Yz1NYXRoLmZsb29yKDEwMCpjKTtpZighYS50aHJlc2hvbGRzKXJldHVybiAwO2lmKG51bGw9PT0KZilyZXR1cm4gYS50aHJlc2hvbGRzW2NdW2RdO2Y9dGhpcy5jcmVhdGVDb21iaW5lZFZhbHVlU3RyaW5nXyhmLGcpO3JldHVybiBudWxsPT1hLmZhY2V0ZWRbZl0/MDphLmZhY2V0ZWRbZl1bY11bZF19LGdldE11bHRpQ2xhc3NDb25mTWF0cml4OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gMD09YS5sZW5ndGg/e306bnVsbD09ZD9hW2NdLnJlc3VsdHM6YVtjXS5mYWNldGVkW3RoaXMuZ2V0UHJpbnRhYmxlVmFsdWVfKGQpXX0sZ2V0TXVsdGlDbGFzc0ZlYXR1cmVWYWx1ZUNvdW50OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzKHRoaXMuZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXgoYSwwLGMpKX0sZ2V0TXVsdGlDbGFzc0FjY3VyYWN5TW9kZWxJbmRleDpmdW5jdGlvbihhLGMsZCl7YT10aGlzLmdldE11bHRpQ2xhc3NDb25mTWF0cml4KGEsYyxkKTtpZihudWxsPT1hKXJldHVybiBudWxsO2M9MDtkPU9iamVjdC5rZXlzKGEpO2ZvcihsZXQgZj0KMDtmPGQubGVuZ3RoO2YrKyl7Y29uc3QgZz1hW2RbZl1dLGw9T2JqZWN0LmtleXMoZyk7Zm9yKGxldCBrPTA7azxsLmxlbmd0aDtrKyspZFtmXT09bFtrXSYmKGMrPWdbbFtrXV0pfXJldHVybiBkMy5mb3JtYXQoIiwuMWYiKShjL3RoaXMuZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzKGEpKjEwMCl9LGdldEluZmVyZW5jZVN0YXQ6ZnVuY3Rpb24oYSxjLGQsZil7YT1jP2EuZmFjZXRlZFt0aGlzLmdldFByaW50YWJsZVZhbHVlXyhjKV06YS5yZXN1bHRzO2lmKCFhKXJldHVybiBudWxsO2Q9ZChhKTtyZXR1cm4gZj9mKGQpOmR9LGdldFJlZ3Jlc3Npb25NZWFuOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0SW5mZXJlbmNlU3RhdChhLGMsZD0+ZC5tZWFuLGQzLmZvcm1hdCgiLjNmIikpfSxnZXRSZWdyZXNzaW9uQWJzTWVhbjpmdW5jdGlvbihhLGMpe3JldHVybiB0aGlzLmdldEluZmVyZW5jZVN0YXQoYSxjLGQ9PmQuYWJzTWVhbixkMy5mb3JtYXQoIi4zZiIpKX0sZ2V0UmVncmVzc2lvblNxdWFyZWRNZWFuOmZ1bmN0aW9uKGEsCmMpe3JldHVybiB0aGlzLmdldEluZmVyZW5jZVN0YXQoYSxjLGQ9PmQuc3F1YXJlZE1lYW4sZDMuZm9ybWF0KCIuM2YiKSl9LGdldFJlZ3Jlc3Npb25Db3VudDpmdW5jdGlvbihhLGMpe2E9dGhpcy5nZXRJbmZlcmVuY2VTdGF0KGEsYyxkPT5kLmVycm9ycy5sZW5ndGgsbnVsbCk7cmV0dXJuIG51bGw9PWE/MDphfSxnZXRCaW5hcnlDbGFzc2lmaWNhdGlvbkNvdW50OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0SW5mZXJlbmNlU3RhdChhLGMsZD0+T2JqZWN0LnZhbHVlcyhkWzBdKS5yZWR1Y2UoKGYsZyk9PmYrZyksbnVsbCl9LGdldE11bHRpY2xhc3NDbGFzc2lmaWNhdGlvbkNvdW50OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0SW5mZXJlbmNlU3RhdChhLGMsZD0+T2JqZWN0LnZhbHVlcyhkKS5yZWR1Y2UoKGYsZyk9PntsZXQgbD0wO2NvbnN0IGs9T2JqZWN0LmtleXMoZyk7Zm9yKGxldCBuPTA7bjxrLmxlbmd0aDtuKyspbCs9Z1trW25dXTtyZXR1cm4gZitsfSwwKSwKbnVsbCl9LGdldFJvY0NoYXJ0SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuInJvY2NoYXJ0IithfSxnZXRSb2NDaGFydExhYmVsSWQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRSb2NDaGFydElkKGMpKyItIithfSxnZXRMYWJlbDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5sYWJlbFZvY2FiW2FdfHxhfSxnZXRQckNoYXJ0SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuInByY2hhcnQiK2F9LGdldFByQ2hhcnRMYWJlbElkOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0UHJDaGFydElkKGMpKyItIithfSxnZXRQcmludGFibGVWYWx1ZV86ZnVuY3Rpb24oYSl7bGV0IGM7Yz1hLnZhbHVlfHwwPT09YS52YWx1ZT9TdHJpbmcoYS52YWx1ZSk6Ilx4M2NmZWF0dXJlIHZhbHVlIG1pc3NpbmdceDNlIjtpZigiIj09dGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmUpcmV0dXJuIGM7Yys9Ii8iO3JldHVybiBjPWEudmFsdWUyfHwwPT09YS52YWx1ZTI/YythLnZhbHVlMjpjKyJceDNjZmVhdHVyZSB2YWx1ZSBtaXNzaW5nXHgzZSJ9LApnZXRGZWF0dXJlTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT1hLmxlbmd0aD8iXHgzY25vbmVceDNlIjphfSxnZXRMYWJlbGVkTW9kZWxOYW1lXzpmdW5jdGlvbihhKXtyZXR1cm4iTW9kZWw6ICIrYX0sZ2V0Q2xhc3NOYW1lXzpmdW5jdGlvbihhKXtyZXR1cm4gMD09PWEubGVuZ3RoPyJceDNjbm9uZVx4M2UiOmF9LHNob3VsZFNob3dPdmVyYWxsVGhyZXNob2xkZXJfOmZ1bmN0aW9uKGEpe3JldHVybiAwPT09YS5sZW5ndGh9LGNvbXB1dGVTZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2U6ZnVuY3Rpb24oKXt0aGlzLmNvdW50ZXJmYWN0dWFsRXhhbXBsZUFuZEluZmVyZW5jZT1udWxsO3RoaXMuc2VsZWN0ZWQmJnRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzPyh0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZT0wPHRoaXMuc2VsZWN0ZWQubGVuZ3RoP3RoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW3RoaXMuc2VsZWN0ZWRbMF1dOm51bGwsbnVsbD09dGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2U/CnRoaXMuZ2xvYmFsUGRQbG90cz0hMDoodGhpcy5nbG9iYWxQZFBsb3RzPSExLCJkaXZlIiE9dGhpcy52aXNNb2RlJiZ0aGlzLnNob3dQYXJ0aWFsRGVwZW5kZW5jZVBsb3RzXygpKSk6dGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2U9bnVsbH0sc2V0QXR0cmlidXRpb25zOmZ1bmN0aW9uKCl7aWYodGhpcy5zZWxlY3RlZCYmMCE9dGhpcy5zZWxlY3RlZC5sZW5ndGgpe3ZhciBhPXt9LGM9dGhpcy52aXNkYXRhW3RoaXMuc2VsZWN0ZWRbMF1dLGQ9dGhpcy5hdHRyaWJ1dGlvblN0cldpdGhNb2RlbE5hbWVfKCIiLHRoaXMuYXR0cmlidXRpb25Nb2RlbEluZGV4KSxmPW5ldyBSZWdFeHAoImF0dHJpYnV0aW9uc19fKC4qKSIrZCk7ZD1uZXcgUmVnRXhwKCJhdHRyaWJ1dGlvbnNfXyguKilfa2V5cyIrZCk7Zm9yKGxldCBsIGluIGMpe3ZhciBnPWYuZXhlYyhsKTtpZihnKXtnPW5ldyBSZWdFeHAoIl4oZmVhdHVyZXNfXyk/IitnWzFdKyIkIik7Zm9yKGxldCBrIGluIGMpaWYoZy50ZXN0KGspKXthW2tdPQpjW2xdO2JyZWFrfX1pZihnPWQuZXhlYyhsKSl7Zz1uZXcgUmVnRXhwKCJeKGZlYXR1cmVzX18pPyIrZ1sxXSsiJCIpO2ZvcihsZXQgayBpbiBjKWlmKGcudGVzdChrKSl7Zz1jW2xdO2NvbnN0IG49Y1tsLnJlcGxhY2UoIl9rZXlzIiwiX3ZhbHVlcyIpXSxwPUFycmF5LmFwcGx5KG51bGwsQXJyYXkoQXJyYXkuaXNBcnJheShjW2tdKT9jW2tdLmxlbmd0aDoxKSkubWFwKE51bWJlci5wcm90b3R5cGUudmFsdWVPZiwwKTtmb3IobGV0IHE9MDtxPGcubGVuZ3RoO3ErKyl7bGV0IHI9Y1trXS5pbmRleE9mKGdbcV0pOy0xIT1yJiYocFtyXT1uW3FdKX1hW2tdPXA7YnJlYWt9fX10aGlzLmF0dHJpYnV0aW9uPWF9fSxzaG91bGREaXNhYmxlR2V0RXhhbXBsZXNCdXR0b25fOmZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLmxlbmd0aH0sc2hvdWxkRGlzYWJsZUluZmVyQnV0dG9uXzpmdW5jdGlvbihhLGMsZCxmKXtyZXR1cm4gMD09YS5sZW5ndGh8fDA9PWMubGVuZ3RofHwwPT1kLmxlbmd0aHx8IWZ9LAphcmVFeGFtcGxlc0VkaXRhYmxlXzpmdW5jdGlvbihhLGMpe3JldHVybiAwIT1hLmxlbmd0aCYmMCE9Yy5sZW5ndGh9LG5ld0luZmVyZW5jZXNfOmZ1bmN0aW9uKCl7dGhpcy5sb2FkaW5nQmFySGlkZGVuXz0hMDt0aGlzLnVwZGF0ZUluZmVyZW5jZXNfKCEwKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMudXBkYXRlSW5mZXJlbmNlU3RhdHNfKCEwKSl9LHJlZnJlc2hJbmZlcmVuY2VzTm9SZWdlbl86ZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hJbmZlcmVuY2VzXyghMCk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZUluZmVyZW5jZVN0YXRzXyghMCkpfSxyZWZyZXNoSW5mZXJlbmNlc186ZnVuY3Rpb24oYSl7dGhpcy51cGRhdGVJbmZlcmVuY2VzXyghMSk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZUluZmVyZW5jZVN0YXRzXyghYSkpfSx1cGRhdGVJbmZlcmVuY2VzXzpmdW5jdGlvbihhKXtpZih0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcyYmCnRoaXMuaW5mZXJlbmNlcy5pbmRpY2VzJiYwIT10aGlzLmluZmVyZW5jZXMuaW5kaWNlcy5sZW5ndGgmJnRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzLmxlbmd0aD09dGhpcy5udW1Nb2RlbHMpe3ZhciBjPXt9LGQ9ISF0aGlzLmluZmVyZW5jZXMucmVzdWx0c1swXS5jbGFzc2lmaWNhdGlvblJlc3VsdDtmb3IobGV0IGs9MDtrPHRoaXMuaW5mZXJlbmNlcy5pbmRpY2VzLmxlbmd0aDtrKyspaWYoZCl7Y1t0aGlzLmluZmVyZW5jZXMuaW5kaWNlc1trXV09W107Zm9yKHZhciBmPTA7Zjx0aGlzLmluZmVyZW5jZXMucmVzdWx0cy5sZW5ndGg7ZisrKXtjb25zdCBuPXRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzW2ZdLmNsYXNzaWZpY2F0aW9uUmVzdWx0O2ZvcihsZXQgcD0wO3A8bi5jbGFzc2lmaWNhdGlvbnNba10uY2xhc3Nlcy5sZW5ndGg7cCsrKSIiPT1uLmNsYXNzaWZpY2F0aW9uc1trXS5jbGFzc2VzW3BdLmxhYmVsJiYobi5jbGFzc2lmaWNhdGlvbnNba10uY2xhc3Nlc1twXS5sYWJlbD1wLnRvU3RyaW5nKCkpOwpjW3RoaXMuaW5mZXJlbmNlcy5pbmRpY2VzW2tdXVtmXT1uLmNsYXNzaWZpY2F0aW9uc1trXS5jbGFzc2VzLnNvcnQoKHAscSk9PnEuc2NvcmUtcC5zY29yZSl9fWVsc2UgZm9yKGNbdGhpcy5pbmZlcmVuY2VzLmluZGljZXNba11dPVtdLGY9MDtmPHRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzLmxlbmd0aDtmKyspY1t0aGlzLmluZmVyZW5jZXMuaW5kaWNlc1trXV1bZl09W3tsYWJlbDoiIixzY29yZTp0aGlzLmluZmVyZW5jZXMucmVzdWx0c1tmXS5yZWdyZXNzaW9uUmVzdWx0LnJlZ3Jlc3Npb25zW2tdLnZhbHVlfV07dGhpcy5zZXQoImV4YW1wbGVzQW5kSW5mZXJlbmNlcyIsdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubWFwKGZ1bmN0aW9uKGssbil7bGV0IHA9ay5pbmZlcmVuY2VzP2suaW5mZXJlbmNlczpbXTtjW25dJiZhJiYocD1wLmNvbmNhdChbY1tuXV0pKTtyZXR1cm57ZXhhbXBsZTprLmV4YW1wbGUsaW5mZXJlbmNlczpwLGNoYW5nZWQ6ay5jaGFuZ2VkLG9yaWc6ay5vcmlnfX0pKTsKdmFyIGc9dGhpcyxsPSExO3RoaXMudmlzZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGssbil7aWYoZClnLnNldEl0ZW1JbmZlcmVuY2VWYWx1ZShrLG4sZy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsZy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmUpO2Vsc2UgZm9yKHZhciBwPTA7cDxnLm51bU1vZGVscztwKyspa1tnLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixwKV09Zy5leGFtcGxlc0FuZEluZmVyZW5jZXNbbl0uaW5mZXJlbmNlc1tnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1tuXS5pbmZlcmVuY2VzLmxlbmd0aC0xXVtwXVswXS5zY29yZTtpZihkJiYwPGcubGFiZWxWb2NhYi5sZW5ndGgpe2ZvcihwPTA7cDxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1tuXS5pbmZlcmVuY2VzLmxlbmd0aDtwKyspZm9yKGxldCBxPTA7cTxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1tuXS5pbmZlcmVuY2VzW3BdLmxlbmd0aDtxKyspZm9yKGxldCByPTA7cjxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1tuXS5pbmZlcmVuY2VzW3BdW3FdLmxlbmd0aDtyKyspZy5leGFtcGxlc0FuZEluZmVyZW5jZXNbbl0uaW5mZXJlbmNlc1twXVtxXVtyXS52b2NhYkxhYmVsPQpnLmxhYmVsVm9jYWJbZy5leGFtcGxlc0FuZEluZmVyZW5jZXNbbl0uaW5mZXJlbmNlc1twXVtxXVtyXS5sYWJlbF07Zm9yKG49MDtuPGcubnVtTW9kZWxzO24rKylrW2cuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgbGFiZWwiLG4pXT1nLmxhYmVsVm9jYWJba1tnLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixuKV1dO2w9ITB9fSk7dGhpcy51cGRhdGVDb3JyZWN0bmVzc18oKTt0aGlzLnJlZnJlc2hEaXZlXygpO3RoaXMuaW5mZXJlbmNlcy5pbmRpY2VzLmxlbmd0aD09dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubGVuZ3RoJiYodGhpcy4kLmRpdmUuY29sb3JCeT1sP3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgbGFiZWwiLDApOnRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLDApLHRoaXMuaXNSZWdyZXNzaW9uXyh0aGlzLm1vZGVsVHlwZSk/KHRoaXMuJC5kaXZlLmhvcml6b250YWxQb3NpdGlvbj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIiwKMCksMTx0aGlzLm51bU1vZGVscyYmKHRoaXMuJC5kaXZlLnZlcnRpY2FsUG9zaXRpb249dGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSB2YWx1ZSIsMSkpKTp0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykmJigxPT10aGlzLm51bU1vZGVscz90aGlzLiQuZGl2ZS52ZXJ0aWNhbFBvc2l0aW9uPXRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2Ugc2NvcmUiLDApOih0aGlzLiQuZGl2ZS5ob3Jpem9udGFsUG9zaXRpb249dGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBzY29yZSIsMCksdGhpcy4kLmRpdmUudmVydGljYWxQb3NpdGlvbj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHNjb3JlIiwxKSkpKTt0aGlzLnVwZGF0ZWRFeGFtcGxlPSExfX0saGFzQXR0cmlidXRpb25zXzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmMCE9T2JqZWN0LmtleXMoYS5hdHRyaWJ1dGlvbnMpLmxlbmd0aCYmCm51bGwhPWEuYXR0cmlidXRpb25zWzBdfSxoYXNNdWx0aXBsZU1vZGVsQXR0cmlidXRpb25zXzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmMTxPYmplY3Qua2V5cyhhLmF0dHJpYnV0aW9ucykubGVuZ3RoJiZudWxsIT1hLmF0dHJpYnV0aW9uc1swXSYmbnVsbCE9YS5hdHRyaWJ1dGlvbnNbMV19LG5ld0V4dHJhT3V0cHV0c186ZnVuY3Rpb24oYSl7dmFyIGM9W107Zm9yKHZhciBkPTA7ZDxhLmV4dHJhLmxlbmd0aDtkKyspbnVsbCE9YS5leHRyYVtkXSYmImF0dHJpYnV0aW9ucyJpbiBhLmV4dHJhW2RdJiZjLnB1c2goYS5leHRyYVtkXS5hdHRyaWJ1dGlvbnMpOzA8Yy5sZW5ndGgmJih0aGlzLmF0dHJpYnV0aW9ucz17aW5kaWNlczphLmluZGljZXMsYXR0cmlidXRpb25zOmN9KTtmb3IoYz0wO2M8YS5pbmRpY2VzLmxlbmd0aDtjKyspe2Q9YS5pbmRpY2VzW2NdO2NvbnN0IGw9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpc2RhdGFbZF0pO2ZvcihsZXQgaz0wO2s8YS5leHRyYS5sZW5ndGg7aysrKXtpZihudWxsPT0KYS5leHRyYVtrXSljb250aW51ZTtjb25zdCBuPU9iamVjdC5rZXlzKGEuZXh0cmFba10pO2ZvcihsZXQgcD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgZj1uW3BdO2lmKCJhdHRyaWJ1dGlvbnMiPT1mKWNvbnRpbnVlO2xldCBxPWEuZXh0cmFba11bZl1bY107Zj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKGYsayk7bFtmXT1xO0FycmF5LmlzQXJyYXkocSl8fChxPVtxXSk7Y29uc3Qgcj0wPHEubGVuZ3RoJiYoInN0cmluZyI9PXR5cGVvZiBxWzBdfHxxWzBdaW5zdGFuY2VvZiBTdHJpbmcpO3ZhciBnPUpTT04uc3RyaW5naWZ5KHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW2RdLmV4YW1wbGUpO2c9SlNPTi5wYXJzZShnKTtnLmZlYXR1cmVzLmZlYXR1cmVbZl09cj97Ynl0ZXNMaXN0Ont2YWx1ZTpxfX06e2Zsb2F0TGlzdDp7dmFsdWU6cX19O3RoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW2RdLmV4YW1wbGU9Z319dGhpcy5zZXQoYHZpc2RhdGEuJHtkfWAsbCl9dGhpcy5yZWZyZXNoRGl2ZV8oKTsKdGhpcy5jb21wdXRlU2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKCk7dGhpcy5yZWZyZXNoU2VsZWN0ZWREYXRhcG9pbnRfKCl9LG5ld0F0dHJpYnV0aW9uc186ZnVuY3Rpb24oYSl7aWYodGhpcy5oYXNBdHRyaWJ1dGlvbnNfKGEpKXtmb3IobGV0IGQ9MDtkPGEuaW5kaWNlcy5sZW5ndGg7ZCsrKXtjb25zdCBmPWEuaW5kaWNlc1tkXSxnPU9iamVjdC5hc3NpZ24oe30sdGhpcy52aXNkYXRhW2ZdKTtmb3IobGV0IGw9MDtsPGEuYXR0cmlidXRpb25zLmxlbmd0aDtsKyspe2NvbnN0IGs9bnVsbD09YS5hdHRyaWJ1dGlvbnNbbF0/e306YS5hdHRyaWJ1dGlvbnNbbF1bZF0sbj1PYmplY3Qua2V5cyhrKTtmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArKyl7dmFyIGM9dGhpcy5hdHRyaWJ1dGlvblN0cldpdGhNb2RlbE5hbWVfKCJhdHRyaWJ1dGlvbnNfXyIrbltwXSxsKTtBcnJheS5pc0FycmF5KGtbbltwXV0pJiYyPT1rW25bcF1dLmxlbmd0aCYmQXJyYXkuaXNBcnJheShrW25bcF1dWzBdKT8KKGdbImF0dHJpYnV0aW9uc19fIituW3BdKyJfa2V5cyJdPWtbbltwXV1bMF0sYz10aGlzLmF0dHJpYnV0aW9uU3RyV2l0aE1vZGVsTmFtZV8oImF0dHJpYnV0aW9uc19fIituW3BdKyJfdmFsdWVzIixsKSxnW2NdPWtbbltwXV1bMV0pOmdbY109a1tuW3BdXTtjPUFycmF5LmlzQXJyYXkoZ1tjXSk/Z1tjXTpbZ1tjXV07Zm9yKGxldCBxPTA7cTxjLmxlbmd0aDtxKyspY1txXT50aGlzLm1heEF0dHJpYnV0aW9uJiYodGhpcy5tYXhBdHRyaWJ1dGlvbj1jW3FdKSxjW3FdPHRoaXMubWluQXR0cmlidXRpb24mJih0aGlzLm1pbkF0dHJpYnV0aW9uPWNbcV0pfX10aGlzLnNldChgdmlzZGF0YS4ke2Z9YCxnKX0wPnRoaXMubWluQXR0cmlidXRpb24mJnRoaXMubWF4QXR0cmlidXRpb24+TWF0aC5hYnModGhpcy5taW5BdHRyaWJ1dGlvbik/dGhpcy5taW5BdHRyaWJ1dGlvbj0tMSp0aGlzLm1heEF0dHJpYnV0aW9uOjA8dGhpcy5tYXhBdHRyaWJ1dGlvbiYmTWF0aC5hYnModGhpcy5taW5BdHRyaWJ1dGlvbik+CnRoaXMubWF4QXR0cmlidXRpb24mJih0aGlzLm1heEF0dHJpYnV0aW9uPS0xKnRoaXMubWluQXR0cmlidXRpb24pO3RoaXMuc2V0QXR0cmlidXRpb25zKCk7dGhpcy5jcmVhdGVBdHRyaWJ1dGlvbkxlZ2VuZCgpO3RoaXMucmVmcmVzaERpdmVfKCl9fSxjcmVhdGVBdHRyaWJ1dGlvbkxlZ2VuZDpmdW5jdGlvbigpe3ZhciBhPVtdLGM9W107MD50aGlzLm1pbkF0dHJpYnV0aW9uJiYoYS5wdXNoKHRoaXMubWluQXR0cmlidXRpb24pLGMucHVzaCgiIzk0M0E0MyIpLGEucHVzaCh0aGlzLm1pbkF0dHJpYnV0aW9uLzUpLGMucHVzaCgiI0M3Njk2RSIpKTthLnB1c2goMCk7Yy5wdXNoKCIjRkZEOEMzIik7MDx0aGlzLm1heEF0dHJpYnV0aW9uJiYoYS5wdXNoKHRoaXMubWF4QXR0cmlidXRpb24vNSksYy5wdXNoKCIjNkE5RUE3IiksYS5wdXNoKHRoaXMubWF4QXR0cmlidXRpb24pLGMucHVzaCgiIzNENzA3OCIpKTt0aGlzLmF0dHJpYnV0aW9uQ29sb3JTY2FsZT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihhKS5pbnRlcnBvbGF0ZShVdCkuY2xhbXAoITApLnJhbmdlKGMpOwp2YXIgZD1Qb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3IoIiNhdHRyaWJ1dGlvbkxlZ2VuZCIpO2QzLnNlbGVjdChkKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtkPWQzLnNlbGVjdChkKS5hcHBlbmQoImciKTtjb25zdCBmPWQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIiwidnpleGFtcGxldmlld2VyZ3JhZGllbnQiKS5hdHRyKCJ4MSIsIjAlIikuYXR0cigieTEiLCIwJSIpLmF0dHIoIngyIiwiMTAwJSIpLmF0dHIoInkyIiwiMCUiKS5hdHRyKCJzcHJlYWRNZXRob2QiLCJwYWQiKSxnPVtdOzU9PWMubGVuZ3RoPyhnLnB1c2godGhpcy5taW5BdHRyaWJ1dGlvbi8yKSxnLnB1c2goMCksZy5wdXNoKHRoaXMubWF4QXR0cmlidXRpb24vMikpOjA+dGhpcy5taW5BdHRyaWJ1dGlvbj8oZy5wdXNoKHRoaXMubWluQXR0cmlidXRpb24vNCozKSxnLnB1c2godGhpcy5taW5BdHRyaWJ1dGlvbi8yKSxnLnB1c2godGhpcy5taW5BdHRyaWJ1dGlvbi8KNCkpOihnLnB1c2godGhpcy5tYXhBdHRyaWJ1dGlvbi80KSxnLnB1c2godGhpcy5tYXhBdHRyaWJ1dGlvbi8yKSxnLnB1c2godGhpcy5tYXhBdHRyaWJ1dGlvbi80KjMpKTtjb25zdCBsPWFbMF0saz1hW2EubGVuZ3RoLTFdLWw7YT1hLm1hcChuPT5NYXRoLnJvdW5kKChuLWwpL2sqMTAwKSsiJSIpO2QzLnppcChhLGMpLmZvckVhY2gobj0+e2YuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixuWzBdKS5hdHRyKCJzdG9wLWNvbG9yIixuWzFdKS5hdHRyKCJzdG9wLW9wYWNpdHkiLDEpfSk7ZC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLDApLmF0dHIoIndpZHRoIiwxNjApLmF0dHIoImhlaWdodCIsOCkuc3R5bGUoImZpbGwiLCJ1cmwoI3Z6ZXhhbXBsZXZpZXdlcmdyYWRpZW50KSIpO2M9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oW3RoaXMubWluQXR0cmlidXRpb24sdGhpcy5tYXhBdHRyaWJ1dGlvbl0pLnJhbmdlKFswLDE2MF0pO2M9ZDMuYXhpc0JvdHRvbShjKS50aWNrVmFsdWVzKGcpLnRpY2tTaXplKDQpLnRpY2tGb3JtYXQoZDMuZm9ybWF0KCIuMWYiKSk7CmQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQgYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLDgpIikuc3R5bGUoImZvbnQiLCI5cHgiKS5jYWxsKGMpfSxzZXRJdGVtSW5mZXJlbmNlVmFsdWU6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmPXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW2NdLmluZmVyZW5jZXMubGVuZ3RoLTE7aWYodGhpcy5tdWx0aUNsYXNzKWZvcihkPTA7ZDx0aGlzLm51bU1vZGVscztkKyspYVt0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixkKV09dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbY10uaW5mZXJlbmNlc1tmXVtkXVswXS5sYWJlbDtlbHNlIGZvcihmPXRoaXMub3ZlcmFsbFRocmVzaG9sZHMsMCE9PWQubGVuZ3RoJiYoZj10aGlzLmdldFNsaWNlS2V5XyhhLHRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLHRoaXMuc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlKSxmPXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1t0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHNJbmRleE1hcFtmXV0udGhyZXNob2xkKSwKZD0wO2Q8dGhpcy5udW1Nb2RlbHM7ZCsrKXtjb25zdCBnPXRoaXMuZ2V0Q2xhc3NpZmljYXRpb25CZXN0Tm9uWmVybyhjLGQpO2FbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBzY29yZSIsZCldPWcuc2NvcmU7YVt0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixkKV09Zy5zY29yZT49ZltkXS50aHJlc2hvbGQ/Zy5sYWJlbDp0aGlzLmRlZmF1bHRJbmZlcmVuY2VMYWJlbC50b1N0cmluZygpfX0sY3JlYXRlQ29tYmluZWRWYWx1ZVN0cmluZ186ZnVuY3Rpb24oYSxjKXthPXZvaWQgMD09PWF8fG51bGw9PT1hPyIiOmE7cmV0dXJuIHZvaWQgMD09PWN8fG51bGw9PT1jfHwiIj09PWM/YTphKyIvIitjfSx1cGRhdGVDb3JyZWN0bmVzc186ZnVuY3Rpb24oKXtpZih0aGlzLnNlbGVjdGVkTGFiZWxGZWF0dXJlJiZ0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcylmb3IobGV0IGE9MDthPHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aDthKyspe2NvbnN0IGM9CnRoaXMudmlzZGF0YVthXTtmb3IobGV0IGQ9MDtkPHRoaXMubnVtTW9kZWxzO2QrKykiY2xhc3NpZmljYXRpb24iPT10aGlzLm1vZGVsVHlwZT9jW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgY29ycmVjdCIsZCldPWNbdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV09PWNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSB2YWx1ZSIsZCldPyJjb3JyZWN0IjoiaW5jb3JyZWN0IjooY1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGVycm9yIixkKV09Y1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixkKV0tY1t0aGlzLnNlbGVjdGVkTGFiZWxGZWF0dXJlXSxjW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgYWJzb2x1dGUgZXJyb3IiLGQpXT1NYXRoLmFicyhjW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgZXJyb3IiLGQpXSksY1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHNxdWFyZWQgZXJyb3IiLApkKV09Y1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGVycm9yIixkKV0qY1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGVycm9yIixkKV0pfX0saW5mZXJDbGlja2VkXzpmdW5jdGlvbigpe2NvbnN0IGE9e2luZmVyZW5jZV9hZGRyZXNzOnRoaXMuaW5mZXJlbmNlQWRkcmVzcyxtb2RlbF9uYW1lOnRoaXMubW9kZWxOYW1lLG1vZGVsX3R5cGU6dGhpcy5tb2RlbFR5cGUsbW9kZWxfdmVyc2lvbjp0aGlzLm1vZGVsVmVyc2lvbixtb2RlbF9zaWduYXR1cmU6dGhpcy5tb2RlbFNpZ25hdHVyZSxsYWJlbF92b2NhYl9wYXRoOnRoaXMubGFiZWxWb2NhYlBhdGgsdXNlX3ByZWRpY3Q6dGhpcy51c2VQcmVkaWN0QXBpLHByZWRpY3Rfb3V0cHV0X3RlbnNvcjp0aGlzLnByZWRpY3RPdXRwdXRUZW5zb3IscHJlZGljdF9pbnB1dF90ZW5zb3I6dGhpcy5wcmVkaWN0SW5wdXRUZW5zb3J9O3RoaXMubG9hZGluZ0JhckhpZGRlbl89ITE7aWYoIXRoaXMubG9jYWwpe2NvbnN0IGM9CnRoaXMubWFrZVVybF8oIi9kYXRhL3BsdWdpbi93aGF0aWYvaW5mZXIiLGEpO3RoaXMubWFrZUFzeW5jUmVxdWVzdF8oYyxkPT57dGhpcy5sb2FkaW5nQmFySGlkZGVuXz0hMDt0aGlzLmxhYmVsVm9jYWI9SlNPTi5wYXJzZShkLnZhbHVlLnZvY2FiKTt0aGlzLmluZmVyZW5jZXM9SlNPTi5wYXJzZShkLnZhbHVlLmluZmVyZW5jZXMpfSxudWxsLCJtb2RlbCBpbmZlcmVuY2UiKX10aGlzLmZpcmUoImluZmVyLWV4YW1wbGVzIixhKX0sZXhhbXBsZUNoYW5nZV86ZnVuY3Rpb24oYSl7dmFyIGM9MD09dGhpcy5zZWxlY3RlZC5sZW5ndGg/MDp0aGlzLnNlbGVjdGVkWzBdO3RoaXMuc2V0KCJzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuY2hhbmdlZCIsITApO3RoaXMudXBkYXRlRXhhbXBsZV8oSlNPTi5zdHJpbmdpZnkoYS50YXJnZXQuanNvbiksYyk7dGhpcy4kJCgiIyIrdGhpcy5nZXRJbmZlcmVuY2VIb2xkZXJJZF8oKSkuaW5mZXJlbmNlPW51bGw7dGhpcy52aXNkYXRhW2NdPXRoaXMuZXhhbXBsZVRvRGF0YVBvaW50XyhhLnRhcmdldC5qc29uLApjKTt0aGlzLnNob3dOZWFyZXN0Q291bnRlcmZhY3R1YWw9ITE7dGhpcy5yZWZyZXNoRGl2ZV8oKTt0aGlzLnVwZGF0ZWRFeGFtcGxlPSEwO3RoaXMuc2VsZWN0ZWREYXRhVXBkYXRlZF8oKX0scmVmcmVzaERpdmVJbXBsXzpmdW5jdGlvbigpe3ZhciBhPXRoaXMudmlzZGF0YTt0aGlzLnZpc2RhdGE9W107dGhpcy52aXNkYXRhPWE7dGhpcy5zZWxlY3RlZEV4YW1wbGVNYXg9dGhpcy52aXNkYXRhLmxlbmd0aC0xO3RoaXMuJC5vdmVydmlldy5wcm90b0lucHV0PXRoaXMuJC5vdmVydmlldy5nZXRTdGF0c1Byb3RvKFt7bmFtZToiIixkYXRhOmF9XSk7dGhpcy5jYWxjdWxhdGVEaXN0YW5jZVN0YXRzXyh0aGlzLiQub3ZlcnZpZXcucHJvdG9JbnB1dC50b09iamVjdCgpKTt0aGlzLmlzUmVncmVzc2lvbl8odGhpcy5tb2RlbFR5cGUpJiZ0aGlzLmFkanVzdE1pbkNvdW50ZXJmYWN0dWFsVmFsdWVEaXN0XygpO2E9dGhpcy4kLmRpdmUuc2VsZWN0ZWREYXRhO3RoaXMuJC5kaXZlLnNlbGVjdGVkRGF0YT0KW107dGhpcy4kLmRpdmUuc2VsZWN0ZWREYXRhPWE7dGhpcy51cGRhdGVTcHJpdGUoKX0scmVmcmVzaERpdmVfOmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSgicmVmcmVzaERpdmVEZWJvdW5jZSIsKCk9PnRoaXMucmVmcmVzaERpdmVJbXBsXygpLDUwMCl9LGNhbGN1bGF0ZURpc3RhbmNlU3RhdHNfOmZ1bmN0aW9uKGEpe3RoaXMuZGlzdGFuY2VTdGF0c189e307Zm9yKGxldCBjPTA7YzxhLmRhdGFzZXRzTGlzdFswXS5mZWF0dXJlc0xpc3QubGVuZ3RoO2MrKyl7Y29uc3QgZD1hLmRhdGFzZXRzTGlzdFswXS5mZWF0dXJlc0xpc3RbY10sZj1kLm5hbWU7dGhpcy5kaXN0YW5jZVN0YXRzX1tmXT17aXNOdW1lcmljOm51bGwhPWQubnVtU3RhdHN9O2lmKHRoaXMuZGlzdGFuY2VTdGF0c19bZl0uaXNOdW1lcmljKXRoaXMuZGlzdGFuY2VTdGF0c19bZl0uc3RkRGV2PWQubnVtU3RhdHMuc3RkRGV2O2Vsc2V7bGV0IGc9MDtjb25zdCBsPWQuc3RyaW5nU3RhdHMucmFua0hpc3RvZ3JhbS5idWNrZXRzTGlzdDsKZm9yKGxldCBrPTA7azxsLmxlbmd0aDtrKyspe2NvbnN0IG49bFtrXS5zYW1wbGVDb3VudC9kLnN0cmluZ1N0YXRzLmNvbW1vblN0YXRzLm51bU5vbk1pc3Npbmc7Zys9bipufXRoaXMuZGlzdGFuY2VTdGF0c19bZl0ucHJvYlNhbWVWYWx1ZT1nfX19LGlzTnVtZXJpY0ZlYXR1cmVfOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0aGlzLmRpc3RhbmNlU3RhdHNfJiZ0aGlzLmRpc3RhbmNlU3RhdHNfW2FdJiZ0aGlzLmRpc3RhbmNlU3RhdHNfW2FdLmlzTnVtZXJpY30sY2FsY3VsYXRlQnVja2V0RWRnZXNfOmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gZChwKXtjb25zdCBxPS1NYXRoLmZsb29yKE1hdGgubG9nMTAoaykpKzE7cmV0dXJuIE1hdGgucm91bmQocCpNYXRoLnBvdygxMCxxKSkvTWF0aC5wb3coMTAscSl9aWYoIXRoaXMuaXNOdW1lcmljRmVhdHVyZV8oYSl8fHRoaXMuc3RhdHNbYV0udW5pcXVlQ291bnQ8PWN8fHRoaXMuZmVhdHVyZUJ1Y2tldEVkZ2VzX1thXSYmdGhpcy5mZWF0dXJlQnVja2V0RWRnZXNfW2FdLmxlbmd0aD09CmMrMSlkZWxldGUgdGhpcy5mZWF0dXJlQnVja2V0RWRnZXNfW2FdO2Vsc2V7dmFyIGY9dGhpcy5zdGF0c1thXS5udW1iZXJNaW4sZz10aGlzLnN0YXRzW2FdLm51bWJlck1heCxsPShnLWYpL2Msaz10aGlzLmRpc3RhbmNlU3RhdHNfW2FdLnN0ZERldixuPVtdO24ucHVzaChmKTtmb3IobGV0IHA9MTtwPGM7cCsrKW4ucHVzaChkKGYrcCpsKSk7bi5wdXNoKGcpO3RoaXMuZmVhdHVyZUJ1Y2tldEVkZ2VzX1thXT1ufX0sdXBkYXRlRXhhbXBsZV86ZnVuY3Rpb24oYSxjKXt0aGlzLmZpcmUoInVwZGF0ZS1leGFtcGxlIix7ZXhhbXBsZTphLGluZGV4OmN9KTtpZighdGhpcy5sb2NhbCl7dmFyIGQ9dGhpcy5tYWtlVXJsXygiL2RhdGEvcGx1Z2luL3doYXRpZi91cGRhdGVfZXhhbXBsZSIsbnVsbCk7dGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhkLG51bGwse2V4YW1wbGU6YSxpbmRleDpjfSwiZGF0YXBvaW50IHVwZGF0ZSIpfX0sZ2V0SW5mZXJlbmNlSG9sZGVySWRfOmZ1bmN0aW9uKCl7cmV0dXJuImluZmVyZW5jZV8ifSwKbWFrZVVybF86ZnVuY3Rpb24oYSxjKXtjJiYoYSs9Ij8iK09iamVjdC5rZXlzKGMpLm1hcChkPT5kKyJceDNkIitlbmNvZGVVUklDb21wb25lbnQoY1tkXSkpLmpvaW4oIlx4MjYiKSk7cmV0dXJuIGF9LHNob3dUb2FzdF86ZnVuY3Rpb24oYSl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGFwZXItdG9hc3QiKTtjLmR1cmF0aW9uPTFFNDtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpO2MudGV4dD1hO2Muc2hvdygpO2NvbnNvbGUuZXJyb3IoYSl9LGhhbmRsZUVycm9yOmZ1bmN0aW9uKGEpe3RoaXMuc2hvd1RvYXN0XyhhKTt0aGlzLmV4YW1wbGVTdGF0dXNTdHI9YTt0aGlzLmxvYWRpbmdCYXJIaWRkZW5fPSEwO3RoaXMuaXNTb3J0aW5nRWxpZ2libGVGZWF0dXJlcz0hMX0sbWFrZUFzeW5jUmVxdWVzdF86ZnVuY3Rpb24oYSxjLGQsZixnKXtnPXZvaWQgMD09PWc/KCk9Pnt9Omc7Y29uc3QgbD10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoaz0+e2suY2FuY2VsbGVkfHwKKGsudmFsdWUmJmsudmFsdWUuZXJyb3I/KHRoaXMuaGFuZGxlRXJyb3Ioay52YWx1ZS5lcnJvciksbnVsbCE9ZyYmZygpKTpjJiZjKGspKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSxkKS50aGVuKGwpLmNhdGNoKGs9Pnt0aGlzLmhhbmRsZUVycm9yKGBSZXF1ZXN0IGZvciAke2Z9IGZhaWxlZDogJHtrfWApO251bGwhPWcmJmcoKX0pfSxkYXRhUG9pbnRWYWx1ZUZyb21GZWF0dXJlXzpmdW5jdGlvbihhLGMpe2xldCBkPW51bGw7YS5pbnQ2NExpc3Q/ZD1hLmludDY0TGlzdC52YWx1ZTphLmZsb2F0TGlzdD9kPWEuZmxvYXRMaXN0LnZhbHVlOmEuYnl0ZXNMaXN0JiZhLmJ5dGVzTGlzdC52YWx1ZSYmKGQ9YS5ieXRlc0xpc3QudmFsdWUubWFwKGY9PntpZigxRTU8Zi5sZW5ndGgpcmV0dXJuIkVSUk9SOiBzdHJpbmcgbm90IGRlY29kZWQgZHVlIHRvIGxlbmd0aCI7dHJ5e3JldHVybiBhdG9iKGYpfWNhdGNoKGcpe3JldHVybiBjb25zb2xlLmVycm9yKCJFcnJvciBkZWNvZGluZyBzdHJpbmc6ICIrCmcpLCJFUlJPUjogZXJyb3IgZGVjb2Rpbmcgc3RyaW5nIn19KSk7cmV0dXJuIGMmJmQmJjE9PWQubGVuZ3RoPyhhPWRbMF0saXNOYU4oYSk/YTpOdW1iZXIoYSkpOmR9LGV4YW1wbGVUb0RhdGFQb2ludF86ZnVuY3Rpb24oYSxjKXtjb25zdCBkPXt9O3ZhciBmPWEuZmVhdHVyZXN8fGEuY29udGV4dCxnPWYmJiJmZWF0dXJlImluIGY/T2JqZWN0LmtleXMoZi5mZWF0dXJlKTpbXTtmb3IodmFyIGwgaW4gZyl7dmFyIGs9Z1srbF07aWYoayE9dGhpcy5pbWFnZUZlYXR1cmVOYW1lKXt2YXIgbj10aGlzLmRhdGFQb2ludFZhbHVlRnJvbUZlYXR1cmVfKGYuZmVhdHVyZVtrXSwhMCk7bnVsbCE9biYmKGRba109bil9fWY9ImZlYXR1cmVMaXN0cyJpbiBhP09iamVjdC5rZXlzKGEuZmVhdHVyZUxpc3RzLmZlYXR1cmVMaXN0KTpbXTtmb3IoY29uc3QgcCBpbiBmKXtnPWZbK3BdO2w9YS5mZWF0dXJlTGlzdHMuZmVhdHVyZUxpc3RbZ10uZmVhdHVyZTtrPVtdO2ZvcihuPTA7bjxsLmxlbmd0aDtuKyspe2NvbnN0IHE9CnRoaXMuZGF0YVBvaW50VmFsdWVGcm9tRmVhdHVyZV8obFtuXSwhMSk7cSYmKGs9ay5jb25jYXQocSkpfWRbZ109a31kWyIgRGF0YXBvaW50IElEIl09YztyZXR1cm4gZH0sZ2V0RXhhbXBsZXNBbmRDbG9zZVNldHRpbmdzXzpmdW5jdGlvbigpe3RoaXMuc2V0dGluZ3NDbGlja2VkXygpO3RoaXMudXBkYXRlTnVtYmVyT2ZNb2RlbHMoKTt0aGlzLmdldEV4YW1wbGVzXygpfSxzaG93TW9kZWxOdW1iZXJzXzpmdW5jdGlvbigpe3JldHVybiAxPj10aGlzLm51bU1vZGVsc30sdXBkYXRlRXhhbXBsZUNvbnRlbnRzOmZ1bmN0aW9uKGEsYyl7dGhpcy5leGFtcGxlU3RhdHVzU3RyPWEubGVuZ3RoKyIgZGF0YXBvaW50cyBsb2FkZWQiO3RoaXMuJC5ub2V4YW1wbGVzLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMubG9hZGluZ0JhckhpZGRlbl89ITA7dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXM9YS5tYXAoZnVuY3Rpb24oZil7cmV0dXJue2V4YW1wbGU6SlNPTi5wYXJzZShmKSxjaGFuZ2VkOiExLApvcmlnOkpTT04ucGFyc2UoZil9fSk7dGhpcy51cGRhdGVkRXhhbXBsZT0hMDtjb25zdCBkPXRoaXM7dGhpcy52aXNkYXRhPXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLm1hcChmdW5jdGlvbihmLGcpe3JldHVybiBkLmV4YW1wbGVUb0RhdGFQb2ludF8oZi5leGFtcGxlLGcpfSk7dGhpcy4kLmRpdmUuYXRsYXNVcmw9IiI7dGhpcy4kLmRpdmUuaW1hZ2VGaWVsZE5hbWU9IiI7dGhpcy5oYXNTcHJpdGU9Yzt0aGlzLnJlZnJlc2hEaXZlXygpO3RoaXMuc2hvdWxkRGlzYWJsZUluZmVyQnV0dG9uXyh0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcyx0aGlzLm1vZGVsTmFtZSx0aGlzLmluZmVyZW5jZUFkZHJlc3MsdGhpcy51cGRhdGVkRXhhbXBsZSl8fHRoaXMuaW5mZXJDbGlja2VkXygpO3RoaXMuc2V0SW5mZXJlbmNlRnJvbUV4YW1wbGVEYXRhKCl9LHNldEluZmVyZW5jZUZyb21FeGFtcGxlRGF0YTpmdW5jdGlvbigpe2lmKDA8dGhpcy52aXNkYXRhLmxlbmd0aClpZihudWxsIT10aGlzLnZpc2RhdGFbMF0ucHJlZGljdGlvbnNfX3Byb2JhYmlsaXRpZXMpe3ZhciBhPQp7fSxjPUFycmF5LmFwcGx5KG51bGwse2xlbmd0aDp0aGlzLnZpc2RhdGEubGVuZ3RofSkubWFwKE51bWJlci5jYWxsLE51bWJlcik7YS5pbmRpY2VzPWM7YS5yZXN1bHRzPVt7Y2xhc3NpZmljYXRpb25SZXN1bHQ6e2NsYXNzaWZpY2F0aW9uczpbXX19XTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKylhLnJlc3VsdHNbMF0uY2xhc3NpZmljYXRpb25SZXN1bHQuY2xhc3NpZmljYXRpb25zW2RdPXtjbGFzc2VzOlt7bGFiZWw6IjAiLHNjb3JlOnRoaXMudmlzZGF0YVtkXS5wcmVkaWN0aW9uc19fcHJvYmFiaWxpdGllc1swXX0se2xhYmVsOiIxIixzY29yZTp0aGlzLnZpc2RhdGFbZF0ucHJlZGljdGlvbnNfX3Byb2JhYmlsaXRpZXNbMV19XX07dGhpcy5pbmZlcmVuY2VzPWF9ZWxzZSBpZihudWxsIT10aGlzLnZpc2RhdGFbMF0ucHJlZGljdGlvbnMpe2E9e307Yz1BcnJheS5hcHBseShudWxsLHtsZW5ndGg6dGhpcy52aXNkYXRhLmxlbmd0aH0pLm1hcChOdW1iZXIuY2FsbCxOdW1iZXIpOwphLmluZGljZXM9YzthLnJlc3VsdHM9W3tyZWdyZXNzaW9uUmVzdWx0OntyZWdyZXNzaW9uczpbXX19XTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKWEucmVzdWx0c1swXS5yZWdyZXNzaW9uUmVzdWx0LnJlZ3Jlc3Npb25zW2RdPXt2YWx1ZTp0aGlzLnZpc2RhdGFbZF0ucHJlZGljdGlvbnN9O3RoaXMuaW5mZXJlbmNlcz1hfX0sZ2V0RXhhbXBsZXNfOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYWtlVXJsXygiL2RhdGEvcGx1Z2luL3doYXRpZi9leGFtcGxlc19mcm9tX3BhdGgiLHtleGFtcGxlc19wYXRoOnRoaXMuZXhhbXBsZXNQYXRoLG1heF9leGFtcGxlczp0aGlzLm1heEV4YW1wbGVzLHNhbXBsaW5nX29kZHM6dGhpcy5zYW1wbGluZ09kZHMsc2VxdWVuY2VfZXhhbXBsZXM6dGhpcy5zZXF1ZW5jZUV4YW1wbGVzfSk7dGhpcy5leGFtcGxlU3RhdHVzU3RyPSJMb2FkaW5nIGRhdGFwb2ludHMuLi4iO3RoaXMubWFrZUFzeW5jUmVxdWVzdF8oYSxjPT57dGhpcy51cGRhdGVFeGFtcGxlQ29udGVudHMoYy52YWx1ZS5leGFtcGxlcywKYy52YWx1ZS5zcHJpdGUpfSxudWxsLCJkYXRhcG9pbnQgbG9hZCIpO3RoaXMubG9hZGluZ0JhckhpZGRlbl89ITF9LHVwZGF0ZVNwcml0ZTpmdW5jdGlvbigpe3RoaXMuaGFzU3ByaXRlJiYodGhpcy4kLmRpdmUuYXRsYXNVcmw9bnVsbCx0aGlzLiQuZGl2ZS5hdGxhc1VybD10aGlzLmxvY2FsP3RoaXMubG9jYWxBdGxhc1VybDp0aGlzLm1ha2VVcmxfKCIvZGF0YS9wbHVnaW4vd2hhdGlmL3Nwcml0ZSIse30pKX0sc2VsZWN0ZWREYXRhVXBkYXRlZF86ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkRXhhbXBsZU51bT0wPHRoaXMuc2VsZWN0ZWQubGVuZ3RoP3RoaXMuc2VsZWN0ZWRbMF06IiI7dGhpcy52aXNkYXRhJiYwPHRoaXMudmlzZGF0YS5sZW5ndGgmJih0aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzPVtdKX0sY29weURhdGFwb2ludF86ZnVuY3Rpb24oKXt2YXIgYT1KU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5leGFtcGxlKTthPQp7ZXhhbXBsZTpKU09OLnBhcnNlKGEpLGNoYW5nZWQ6ITEsb3JpZzpKU09OLnBhcnNlKGEpfTt0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcy5wdXNoKGEpO3RoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlPWE7dGhpcy52aXNkYXRhLnB1c2godGhpcy5leGFtcGxlVG9EYXRhUG9pbnRfKGEuZXhhbXBsZSx0aGlzLnZpc2RhdGEubGVuZ3RoKSk7YT10aGlzLnNlbGVjdGVkWzBdO3RoaXMuc2hvd05lYXJlc3RDb3VudGVyZmFjdHVhbD0hMTt0aGlzLnNlbGVjdGVkWzBdPXRoaXMudmlzZGF0YS5sZW5ndGgtMTt0aGlzLnNlbGVjdGVkRGF0YVVwZGF0ZWRfKCk7dGhpcy51cGRhdGVkRXhhbXBsZT0hMDt0aGlzLmZpcmUoImR1cGxpY2F0ZS1leGFtcGxlIix7aW5kZXg6YX0pO3RoaXMubG9jYWw/dGhpcy5yZWZyZXNoRGl2ZV8oKTooYT10aGlzLm1ha2VVcmxfKCIvZGF0YS9wbHVnaW4vd2hhdGlmL2R1cGxpY2F0ZV9leGFtcGxlIix7aW5kZXg6YX0pLHRoaXMubWFrZUFzeW5jUmVxdWVzdF8oYSwKKCk9Pnt0aGlzLnJlZnJlc2hEaXZlXygpfSxudWxsLCJkYXRhcG9pbnQgZHVwbGljYXRpb24iKSl9LGRlbGV0ZURhdGFwb2ludERpYWxvZ186ZnVuY3Rpb24oKXt0aGlzLiQuZGVsZXRlZGlhbG9nLm9wZW4oKX0sZGVsZXRlRGF0YXBvaW50XzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsZWN0ZWRbMF07dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMuc3BsaWNlKGEsMSk7dGhpcy52aXNkYXRhLnNwbGljZShhLDEpO2ZvcihsZXQgYz1hO2M8dGhpcy52aXNkYXRhLmxlbmd0aDtjKyspdGhpcy52aXNkYXRhW2NdWyIgRGF0YXBvaW50IElEIl09Yzt0aGlzLmNvbXBhcmVkSW5kaWNlcz1bXTt0aGlzLnNlbGVjdGVkPVtdO3RoaXMuc2VsZWN0ZWREYXRhVXBkYXRlZF8oKTt0aGlzLmZpcmUoImRlbGV0ZS1leGFtcGxlIix7aW5kZXg6YX0pO3RoaXMuJC5kaXZlLnNlbGVjdGVkSW5kaWNlcz1bXTt0aGlzLmxvY2FsP3RoaXMucmVmcmVzaERpdmVfKCk6KGE9dGhpcy5tYWtlVXJsXygiL2RhdGEvcGx1Z2luL3doYXRpZi9kZWxldGVfZXhhbXBsZSIsCntpbmRleDphfSksdGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhhLCgpPT57dGhpcy5yZWZyZXNoRGl2ZV8oKX0sbnVsbCwiZGF0YXBvaW50IGRlbGV0ZSIpKX0sc2hvdWxkRGlzYWJsZVJlc2V0XzpmdW5jdGlvbihhKXtyZXR1cm4hYX0scmVzZXREYXRhcG9pbnRfOmZ1bmN0aW9uKCl7dGhpcy5zZXQoInNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5leGFtcGxlIix7fSk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuY2hhbmdlZD0hMTtjb25zdCBhPUpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLm9yaWcpO3RoaXMuc2V0KCJzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuZXhhbXBsZSIsSlNPTi5wYXJzZShhKSk7dGhpcy52aXNkYXRhW3RoaXMuc2VsZWN0ZWRbMF1dPXRoaXMuZXhhbXBsZVRvRGF0YVBvaW50Xyh0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5leGFtcGxlLAp0aGlzLnNlbGVjdGVkWzBdKTt0aGlzLnVwZGF0ZWRFeGFtcGxlPSEwO3RoaXMudXBkYXRlRXhhbXBsZV8oYSx0aGlzLnNlbGVjdGVkWzBdKTt0aGlzLnJlZnJlc2hEaXZlXygpfSl9LGFkZENoYXJ0OmZ1bmN0aW9uKGEsYyxkKXtsZXQgZixnPWQ7aWYodGhpcy5pc011bHRpQ2xhc3NfKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykpe2c9W107Zm9yKGxldCBrPTA7azxkLmxlbmd0aDtrKyspe2xldCBuPXt9O2lmKE9iamVjdC5rZXlzKGRba10pLmxlbmd0aD5OdW1iZXIodGhpcy5tYXhJbmZlcmVuY2VFbnRyaWVzUGVyUnVuKSl7dmFyIGw9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbdGhpcy5zZWxlY3RlZCYmMDx0aGlzLnNlbGVjdGVkLmxlbmd0aD90aGlzLnNlbGVjdGVkWzBdOjBdO2w9bC5pbmZlcmVuY2VzW2wuaW5mZXJlbmNlcy5sZW5ndGgtMV1ba10uc2xpY2UoMCx0aGlzLm1heEluZmVyZW5jZUVudHJpZXNQZXJSdW4pO2ZvcihsZXQgcD0wO3A8bC5sZW5ndGg7cCsrKXtjb25zdCBxPQpsW3BdLmxhYmVsO25bcV09ZFtrXVtxXX19ZWxzZSBuPWRba107Zy5wdXNoKG4pfX0ibnVtZXJpYyI9PWE/Zj10aGlzLm1ha2VMaW5lQ2hhcnQoYyxnKToiY2F0ZWdvcmljYWwiPT1hP2Y9dGhpcy5tYWtlQmFyQ2hhcnQoYyxnKTpjb25zb2xlLmVycm9yKCJVbmtub3duIGNoYXJ0VHlwZTogIithKTthPXRoaXMuZmVhdHVyZUNvbnRhaW5lckJ5TmFtZShjKS5xdWVyeVNlbGVjdG9yKCIudGYtY2F0ZWdvcnktcGFuZS1jb250ZW50Iik7UG9seW1lci5kb20oYSkuYXBwZW5kQ2hpbGQoZik7Yz10aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzLmluZGV4T2YoYyk7LTE8YyYmdGhpcy5wYXJ0aWFsRGVwUGxvdFBlbmRpbmdGZWF0dXJlcy5zcGxpY2UoYywxKX0sZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gUGxvdHRhYmxlLkZvcm1hdHRlcnMuZ2VuZXJhbChhKX0sbWFrZUJhckNoYXJ0OmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gZChyLHQpe3JldHVybnt4OnIuc3RlcD09CnQ/ci5zdGVwKyIgLSBvcmlnaW5hbCB2YWx1ZSI6ci5zdGVwLHk6ci5zY2FsYXJ9fWZ1bmN0aW9uIGYocix0LHYpe3JldHVybnt4OnIuc3RlcD09dD9yLnN0ZXArIiAtIG9yaWdpbmFsIHZhbHVlIjpyLnN0ZXAsc2NhbGFyOnIuc2NhbGFyLHk6dn19bGV0IGc9IiI7dmFyIGw9Y1swXTshdGhpcy5nbG9iYWxQZFBsb3RzJiYoYT10aGlzLmNyZWF0ZVBkRW50cnlGb3JDdXJyZW50VmFsdWUoYSxsLDApKSYmKGc9YS5zdGVwKTtjb25zdCBrPXt9LG49e307Xy5mb3JFYWNoKGMsKHIsdCk9PntfLmZvckVhY2gociwodix5KT0+e25bdGhpcy5mb3JtYXRDaGFydEtleSh5LHQsYy5sZW5ndGgpXT1fLm1hcCh2LHo9PmQoeixnKSkuc29ydCgoeix4KT0+eC55LXoueSk7dGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpJiYoa1t0aGlzLmZvcm1hdENoYXJ0S2V5KHksdCxjLmxlbmd0aCldPV8ubWFwKHYsej0+Zih6LGcsdGhpcy5vdmVyYWxsVGhyZXNob2xkc1t0XS50aHJlc2hvbGQpKS5zb3J0KCh6LAp4KT0+eC5zY2FsYXItei5zY2FsYXIpKX0pfSk7Y29uc3QgcD0kby5tdWx0aXNjYWxlRm9ybWF0dGVyKCRvLllfVE9PTFRJUF9GT1JNQVRURVJfUFJFQ0lTSU9OKTtsPVt7dGl0bGU6IkluZmVyZW5jZSB2YWx1ZSIsZXZhbHVhdGU6cj0+e3I9dGhpcy5zcGxpdENoYXJ0S2V5KHIua2V5LGMubGVuZ3RoKS5sYWJlbDtpZighaXNOYU4ocikmJjA8ci5sZW5ndGgmJnRoaXMubGFiZWxWb2NhYil7Y29uc3QgdD0rcjt0PHRoaXMubGFiZWxWb2NhYi5sZW5ndGgmJjA8PXQmJihyKz0iICgiK3RoaXMubGFiZWxWb2NhYlt0XSsiKSIpfXJldHVybiByfX0se3RpdGxlOiJGZWF0dXJlIHZhbHVlIixldmFsdWF0ZTpyPT5yLnZhbHVlLnh9LHt0aXRsZToiU2NvcmUiLGV2YWx1YXRlOnI9PnAoci52YWx1ZS55KX1dOzI8PWMubGVuZ3RoJiZsLnB1c2goe3RpdGxlOiJNb2RlbCIsZXZhbHVhdGU6cj0+dGhpcy5zcGxpdENoYXJ0S2V5KHIua2V5LGMubGVuZ3RoKS5tb2RlbH0pO2E9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CmEuY2xhc3NMaXN0LmFkZCgicGQtaG9sZGVyIik7Y29uc3QgcT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2ei1iYXItY2hhcnQiKTtxLmNvbG9yU2NhbGU9KG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZSh0aGlzLnBkUGxvdENvbG9ycyk7cS5saW5lc0NvbG9yU2NhbGU9KG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZSh0aGlzLnBkUGxvdFRyYW5zcGFyZW50Q29sb3JzKTtxLmRhdGE9bjtxLmxpbmVzPWs7cS50b29sdGlwQ29sdW1ucz1sO2EuYXBwZW5kQ2hpbGQocSk7bD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLmNsYXNzTGlzdC5hZGQoInBkLXktbGFiZWwiKTtsLmlubmVyVGV4dD10aGlzLmlzUmVncmVzc2lvbl8odGhpcy5tb2RlbFR5cGUpPyJJbmZlcmVuY2UgdmFsdWUiOiJJbmZlcmVuY2Ugc2NvcmUiO2EuYXBwZW5kQ2hpbGQobCk7cmV0dXJuIGF9LHNwbGl0Q2hhcnRLZXk6ZnVuY3Rpb24oYSxjKXtsZXQgZD1hLGY9IiI7Mjw9YyYmKGM9CmEuaW5kZXhPZigiKG1vZGVsIiksZD1hLnN1YnN0cmluZygwLGMpLGY9YS5zdWJzdHJpbmcoYys3LGEubGFzdEluZGV4T2YoIikiKSkpO3JldHVybntsYWJlbDpkLG1vZGVsOmZ9fSxmb3JtYXRDaGFydEtleTpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIDE9PWQ/YTphKyIgKG1vZGVsICIrdGhpcy5nZXRNb2RlbE5hbWVfKGMpKyIpIn0sbWFrZUxpbmVDaGFydDpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIGQodil7cmV0dXJuIE51bWJlci5pc05hTih2KT8iTmFOIjpuKHYpfWNvbnN0IGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5jbGFzc0xpc3QuYWRkKCJwZC1ob2xkZXIiKTtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZ6LWxpbmUtY2hhcnQyIiksbD1bXTt2YXIgaz1bXTtjb25zdCBuPSRvLm11bHRpc2NhbGVGb3JtYXR0ZXIoJG8uWV9UT09MVElQX0ZPUk1BVFRFUl9QUkVDSVNJT04pOyJjbGFzc2lmaWNhdGlvbiI9PXRoaXMubW9kZWxUeXBlJiYoZy5kZWZhdWx0WVJhbmdlPQpbMCwxXSk7dmFyIHA9W3t0aXRsZToiSW5mZXJlbmNlIHZhbHVlIixldmFsdWF0ZTp2PT57dj10aGlzLnNwbGl0Q2hhcnRLZXkodi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSxjLmxlbmd0aCkubGFiZWw7aWYoIWlzTmFOKHYpJiYwPHYubGVuZ3RoJiZ0aGlzLmxhYmVsVm9jYWIpe2NvbnN0IHk9K3Y7eTx0aGlzLmxhYmVsVm9jYWIubGVuZ3RoJiYwPD15JiYodis9IiAoIit0aGlzLmxhYmVsVm9jYWJbeV0rIikiKX1yZXR1cm4gdn19LHt0aXRsZToiRmVhdHVyZSB2YWx1ZSIsZXZhbHVhdGU6dj0+ZCh2LmRhdHVtLnN0ZXApfSx7dGl0bGU6IlNjb3JlIixldmFsdWF0ZTp2PT5kKHYuZGF0dW0uc2NhbGFyKX1dOzI8PWMubGVuZ3RoJiZwLnB1c2goe3RpdGxlOiJNb2RlbCIsZXZhbHVhdGU6dj0+dGhpcy5zcGxpdENoYXJ0S2V5KHYuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUsYy5sZW5ndGgpLm1vZGVsfSk7Zy50b29sdGlwQ29sdW1ucz1wO2NvbnN0IHE9W107bGV0IHI9MDtmb3IobGV0IHY9CjA7djxjLmxlbmd0aDt2Kyspe2NvbnN0IHk9Y1t2XTtwPV8ua2V5cyh5KTtyPXYqcC5sZW5ndGg7cC5mb3JFYWNoKHo9PntsLnB1c2godGhpcy5wZFBsb3RDb2xvcnNbcisrXSk7Y29uc3QgeD10aGlzLmZvcm1hdENoYXJ0S2V5KHosdixjLmxlbmd0aCk7Zy5zZXRTZXJpZXNEYXRhKHgseVt6XSk7cS5wdXNoKHgpfSk7cj12KnAubGVuZ3RoO2lmKCF0aGlzLmdsb2JhbFBkUGxvdHMmJihwPXRoaXMuY3JlYXRlUGRFbnRyeUZvckN1cnJlbnRWYWx1ZShhLHksdikpKXt2YXIgdD10aGlzLmZvcm1hdENoYXJ0S2V5KF8ua2V5cyh5KVswXSsiIC0gb3JpZ2luYWwgdmFsdWUgIix2LGMubGVuZ3RoKTtnLnNldFNlcmllc0RhdGEodCxbcF0pO3EucHVzaCh0KTtsLnB1c2godGhpcy5wZFBsb3RDb2xvcnNbcl0uYnJpZ2h0ZXIoKSl9dGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpJiYocD10aGlzLmZvcm1hdENoYXJ0S2V5KCJjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGQiLAp2LGMubGVuZ3RoKSx0PWNbMF1bXy5rZXlzKGNbMF0pXS5tYXAoej0+KHtzdGVwOnouc3RlcCxzY2FsYXI6dGhpcy5vdmVyYWxsVGhyZXNob2xkc1t2XS50aHJlc2hvbGR9KSksbC5wdXNoKHRoaXMucGRQbG90VHJhbnNwYXJlbnRDb2xvcnNbcl0pLGcuc2V0U2VyaWVzRGF0YShwLHQpLGsucHVzaChwKSxxLnB1c2gocCkpfWcuY29sb3JTY2FsZT0obmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3IpLnJhbmdlKGwpO2cueEF4aXNGb3JtYXR0ZXI9dGhpcy5nZXRTaW1wbGVBeGlzRm9ybWF0dGVyKHRoaXMuYXhpc1ByZWNpc2lvbik7Zy55QXhpc0Zvcm1hdHRlcj10aGlzLmdldFNpbXBsZUF4aXNGb3JtYXR0ZXIodGhpcy5heGlzUHJlY2lzaW9uKTtnLnNlcmllc1dpdGhvdXRUb29sdGlwcz1rO2cuY29sb3JTY2FsZS5kb21haW4ocSk7Zy5zZXRWaXNpYmxlU2VyaWVzKHEpO2YuYXBwZW5kQ2hpbGQoZyk7az1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLmNsYXNzTGlzdC5hZGQoInBkLXktbGFiZWwiKTsKay5pbm5lclRleHQ9dGhpcy5pc1JlZ3Jlc3Npb25fKHRoaXMubW9kZWxUeXBlKT8iSW5mZXJlbmNlIHZhbHVlIjoiSW5mZXJlbmNlIHNjb3JlIjtmLmFwcGVuZENoaWxkKGspO2s9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ay5jbGFzc0xpc3QuYWRkKCJwZC14LWxhYmVsIik7ay5pbm5lclRleHQ9YTtmLmFwcGVuZENoaWxkKGspO3JldHVybiBmfSxjcmVhdGVQZEVudHJ5Rm9yQ3VycmVudFZhbHVlOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZj1fLmtleXMoYylbMF07Y29uc3QgZz1mLmluZGV4T2YoImluZGV4Iik7Yz0rZjt2YXIgbD0wOy0xPGcmJihjPStmLnN1YnN0cmluZygwLGYuaW5kZXhPZigiICIpKSxsPStmLnN1YnN0cmluZyhnKzYsZi5pbmRleE9mKCIpIikpKTthPXRoaXMudmlzZGF0YVt0aGlzLnNlbGVjdGVkWzBdXVthXTtBcnJheS5pc0FycmF5KGEpJiYoYT1hW2xdKTtkPXRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmluZmVyZW5jZXNbdGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuaW5mZXJlbmNlcy5sZW5ndGgtCjFdW2RdO2w9LTE7Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdLmxhYmVsPT1jLnRvU3RyaW5nKCl8fCIiPT1kW2ZdLmxhYmVsKXtsPWRbZl0uc2NvcmU7YnJlYWt9cmV0dXJuLTE9PWw/bnVsbDp7c3RlcDphLHNjYWxhcjpsfX0sZGVsZXRlUGRQbG90UHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT10aGlzLmZlYXR1cmVDb250YWluZXJCeU5hbWUoYSkucXVlcnlTZWxlY3RvckFsbCgicGFwZXItcHJvZ3Jlc3MiKTtmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrKylWdChhW2NdKX0sbWFrZUNoYXJ0Rm9yRmVhdHVyZTpmdW5jdGlvbihhLGMsZCl7dGhpcy5kZWxldGVQZFBsb3RQcm9ncmVzcyhjKTtkLmZvckVhY2goZj0+dGhpcy5hZGRDaGFydChhLGMsZikpfSxnZXRJbmZlcmVuY2VWaXN1YWxpemF0aW9uOmZ1bmN0aW9uKGEsYyl7Yz17ZmVhdHVyZV9uYW1lOmEsaW5mZXJlbmNlX2FkZHJlc3M6dGhpcy5pbmZlcmVuY2VBZGRyZXNzLG1vZGVsX25hbWU6dGhpcy5tb2RlbE5hbWUsbW9kZWxfdHlwZTp0aGlzLm1vZGVsVHlwZSwKbW9kZWxfdmVyc2lvbjp0aGlzLm1vZGVsVmVyc2lvbixtb2RlbF9zaWduYXR1cmU6dGhpcy5tb2RlbFNpZ25hdHVyZSx4X21pbjp0aGlzLmdldFVuaXF1ZUJ5RXZlbnQoYywiLngtbWluIikudmFsdWUseF9tYXg6dGhpcy5nZXRVbmlxdWVCeUV2ZW50KGMsIi54LW1heCIpLnZhbHVlLGZlYXR1cmVfaW5kZXhfcGF0dGVybjp0aGlzLmdldFVuaXF1ZUJ5RXZlbnQoYywiLmZlYXR1cmUtaW5kZXgtcGF0dGVybiIpLnZhbHVlLGV4YW1wbGVfaW5kZXg6dGhpcy5nbG9iYWxQZFBsb3RzPy0xOnRoaXMuc2VsZWN0ZWRbMF0sdXNlX3ByZWRpY3Q6dGhpcy51c2VQcmVkaWN0QXBpLHByZWRpY3Rfb3V0cHV0X3RlbnNvcjp0aGlzLnByZWRpY3RPdXRwdXRUZW5zb3IscHJlZGljdF9pbnB1dF90ZW5zb3I6dGhpcy5wcmVkaWN0SW5wdXRUZW5zb3J9O3RoaXMubG9jYWw/dGhpcy5maXJlKCJpbmZlci1tdXRhbnRzIixjKTooYz1Rby5hZGRQYXJhbXMoIi9kYXRhL3BsdWdpbi93aGF0aWYvaW5mZXJfbXV0YW50cyIsCmMpLHRoaXMubWFrZUFzeW5jUmVxdWVzdF8oYywoZj0+dGhpcy5tYWtlQ2hhcnRGb3JGZWF0dXJlKGYudmFsdWUuY2hhcnRUeXBlLGEsZi52YWx1ZS5kYXRhKSkuYmluZCh0aGlzKSxudWxsLCJwbG90IGNyZWF0aW9uIiwoKCk9PnRoaXMuaGFuZGxlQ2hhcnRFcnJvckZvckZlYXR1cmUoYSkpLmJpbmQodGhpcykpKTtjPXRoaXMuZmVhdHVyZUNvbnRhaW5lckJ5TmFtZShhKS5xdWVyeVNlbGVjdG9yKCIudGYtY2F0ZWdvcnktcGFuZS1jb250ZW50Iik7Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1wcm9ncmVzcyIpO2Quc2V0QXR0cmlidXRlKCJpbmRldGVybWluYXRlIiwhMCk7ZC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicGRwbG90LXByb2dyZXNzIik7UG9seW1lci5kb20oYykuYXBwZW5kQ2hpbGQoZCl9LGhhbmRsZUNoYXJ0RXJyb3JGb3JGZWF0dXJlOmZ1bmN0aW9uKGEpe2NvbnN0IGM9dGhpcy5wYXJ0aWFsRGVwUGxvdFBlbmRpbmdGZWF0dXJlcy5pbmRleE9mKGEpOwotMTxjJiZ0aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzLnNwbGljZShjLDEpO3RoaXMuZGVsZXRlUGRQbG90UHJvZ3Jlc3MoYSl9LHNob3VsZEhpZGVGZWF0dXJlSW5kaWNlc1NlbGVjdG9yOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIWN8fDA9PWMubGVuZ3RofHwhdGhpcy52aXNkYXRhfHx0aGlzLnZpc2RhdGEubGVuZ3RoPD1jWzBdPyEwOiFBcnJheS5pc0FycmF5KHRoaXMudmlzZGF0YVtjWzBdXVthXSl9LHNob3VsZEhpZGVQZElucHV0Q29udGFpbmVyOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuc2hvdWxkSGlkZUZlYXR1cmVJbmRpY2VzU2VsZWN0b3IoYS5uYW1lLGMpJiZhLnNhbXBsZXM/ITA6ITF9LGZlYXR1cmVDb250YWluZXJCeU5hbWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJCQoJ1tkYXRhLWZlYXR1cmUtbmFtZVx4M2QiJythKyciXScpfSxmZWF0dXJlQ29udGFpbmVyQnlFdmVudDpmdW5jdGlvbihhKXtmb3IoYT1hLnRhcmdldDshYS5jbGFzc0xpc3QuY29udGFpbnMoImZlYXR1cmUtY29udGFpbmVyIik7KWE9CmEucGFyZW50Tm9kZTtyZXR1cm4gYX0sZ2V0VW5pcXVlQnlFdmVudChhLGMpe3JldHVybiB0aGlzLmZlYXR1cmVDb250YWluZXJCeUV2ZW50KGEpLnF1ZXJ5U2VsZWN0b3IoYyl9LHBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlc1NldDpmdW5jdGlvbihhKXt0aGlzLmlzU29ydGluZ0VsaWdpYmxlRmVhdHVyZXM9ITE7YSYmMCE9YS5sZW5ndGgmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLiQkKCIucGQtZW50cnktY29udGFpbmVyIikuaGlkZGVuJiZ0aGlzLiQkKCIudGYtY2F0ZWdvcnktcGFuZSIpLmNsaWNrKCl9LDEwMCl9LGNhdGVnb3J5UGFuZUNsaWNrZWQ6ZnVuY3Rpb24oYSl7Y29uc3QgYz10aGlzLmZlYXR1cmVDb250YWluZXJCeUV2ZW50KGEpO2MucXVlcnlTZWxlY3RvcigiLnBkLWVudHJ5LWNvbnRhaW5lciIpLmhhc0F0dHJpYnV0ZSgiaGlkZGVuIik/KHRoaXMuZHJhd1BkQ2hhcnRzXyhhKSx0aGlzLnNob3dQZEVsZW1lbnRfKGMpKTp0aGlzLmhpZGVQZEVsZW1lbnRfKGMpfSwKZHJhd1BkQ2hhcnRzXzpmdW5jdGlvbihhKXtjb25zdCBjPWEubW9kZWwuZ2V0KCJpdGVtIikubmFtZTstMTx0aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzLmluZGV4T2YoYyl8fCh0aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzLnB1c2goYyksdGhpcy5nZXRJbmZlcmVuY2VWaXN1YWxpemF0aW9uKGMsYSkpfSxjbGVhclBkRWxlbWVudENoYXJ0c186ZnVuY3Rpb24oYSl7YS5xdWVyeVNlbGVjdG9yQWxsKCIucGQtaG9sZGVyIikuZm9yRWFjaChmdW5jdGlvbihjKXtWdChjKX0pfSxoaWRlUGRFbGVtZW50XzpmdW5jdGlvbihhKXt2YXIgYz1hLnF1ZXJ5U2VsZWN0b3IoIi5wZC1lbnRyeS1jb250YWluZXIiKTt0aGlzLmNsZWFyUGRFbGVtZW50Q2hhcnRzXyhjKTtjLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwhMCk7Yz1hLnF1ZXJ5U2VsZWN0b3IoIi5wZC1yb3ctYXJyb3ciKTtjLmNsYXNzTGlzdC5yZW1vdmUoIm5vcm1hbC1pY29uIik7Yy5jbGFzc0xpc3QuYWRkKCJyb3RhdGVkLWljb24iKTsKYT1hLnF1ZXJ5U2VsZWN0b3IoIi5wZXJmLXRhYmxlLWVudHJ5Iik7YS5jbGFzc0xpc3QuYWRkKCJwZXJmLXRhYmxlLXJvdyIpO2EuY2xhc3NMaXN0LnJlbW92ZSgicGVyZi10YWJsZS1yb3ctZXhwYW5kZWQiKX0sc2hvd1BkRWxlbWVudF86ZnVuY3Rpb24oYSl7YS5xdWVyeVNlbGVjdG9yKCIucGQtZW50cnktY29udGFpbmVyIikucmVtb3ZlQXR0cmlidXRlKCJoaWRkZW4iKTtjb25zdCBjPWEucXVlcnlTZWxlY3RvcigiLnBkLXJvdy1hcnJvdyIpO2MuY2xhc3NMaXN0LmFkZCgibm9ybWFsLWljb24iKTtjLmNsYXNzTGlzdC5yZW1vdmUoInJvdGF0ZWQtaWNvbiIpO2E9YS5xdWVyeVNlbGVjdG9yKCIucGVyZi10YWJsZS1lbnRyeSIpO2EuY2xhc3NMaXN0LnJlbW92ZSgicGVyZi10YWJsZS1yb3ciKTthLmNsYXNzTGlzdC5hZGQoInBlcmYtdGFibGUtcm93LWV4cGFuZGVkIil9LGhpZGVBbGxQZEVsZW1lbnRzXzpmdW5jdGlvbigpe2NvbnN0IGE9UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCIuZmVhdHVyZS1jb250YWluZXIiKTsKZm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy5oaWRlUGRFbGVtZW50XyhhW2NdKX0scGRJbnB1dENoYW5nZWQ6ZnVuY3Rpb24oYSl7Y29uc3QgYz17dGFyZ2V0OmEudGFyZ2V0LG1vZGVsOmEubW9kZWx9O3RoaXMuZGVib3VuY2UoInBkSW5wdXRDaGFuZ2VkRGVib3VuY2UiLCgpPT50aGlzLnBkSW5wdXRDaGFuZ2VkSW1wbChjKSw1MDApfSxwZElucHV0Q2hhbmdlZEltcGw6ZnVuY3Rpb24oYSl7dGhpcy5jbGVhclBkRWxlbWVudENoYXJ0c18odGhpcy5nZXRVbmlxdWVCeUV2ZW50KGEsIi50Zi1jYXRlZ29yeS1wYW5lLWNvbnRlbnQiKSk7dGhpcy5kcmF3UGRDaGFydHNfKGEpfSxwb3B1bGF0ZVBkVGFiczpmdW5jdGlvbigpe3RoaXMuaGlkZUFsbFBkRWxlbWVudHNfKCk7aWYodGhpcy5sb2NhbCl0aGlzLmZpcmUoImdldC1lbGlnaWJsZS1mZWF0dXJlcyIpO2Vsc2V7Y29uc3QgYT1Rby5hZGRQYXJhbXMoIi9kYXRhL3BsdWdpbi93aGF0aWYvZWxpZ2libGVfZmVhdHVyZXMiLHt9KTsKdGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhhLGM9Pnt0aGlzLnNldCgicGFydGlhbERlcFBsb3RFbGlnaWJsZUZlYXR1cmVzIixjLnZhbHVlKX0sbnVsbCwicGxvdCBzZXR1cCIpfX0sc29ydFBkRmVhdHVyZXNfOmZ1bmN0aW9uKCl7dGhpcy5oaWRlQWxsUGRFbGVtZW50c18oKTt2YXIgYT17ZXhhbXBsZV9pbmRleDp0aGlzLmdsb2JhbFBkUGxvdHM/LTE6dGhpcy5zZWxlY3RlZFswXSxpbmZlcmVuY2VfYWRkcmVzczp0aGlzLmluZmVyZW5jZUFkZHJlc3MsbW9kZWxfbmFtZTp0aGlzLm1vZGVsTmFtZSxtb2RlbF90eXBlOnRoaXMubW9kZWxUeXBlLG1vZGVsX3ZlcnNpb246dGhpcy5tb2RlbFZlcnNpb24sbW9kZWxfc2lnbmF0dXJlOnRoaXMubW9kZWxTaWduYXR1cmUsdXNlX3ByZWRpY3Q6dGhpcy51c2VQcmVkaWN0QXBpLHByZWRpY3Rfb3V0cHV0X3RlbnNvcjp0aGlzLnByZWRpY3RPdXRwdXRUZW5zb3IscHJlZGljdF9pbnB1dF90ZW5zb3I6dGhpcy5wcmVkaWN0SW5wdXRUZW5zb3J9O3RoaXMuaXNTb3J0aW5nRWxpZ2libGVGZWF0dXJlcz0KITA7dGhpcy5sb2NhbD8oYS5mZWF0dXJlcz10aGlzLnBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlcyx0aGlzLmZpcmUoInNvcnQtZWxpZ2libGUtZmVhdHVyZXMiLGEpKTooYT1Rby5hZGRQYXJhbXMoIi9kYXRhL3BsdWdpbi93aGF0aWYvc29ydF9lbGlnaWJsZV9mZWF0dXJlcyIsYSksdGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhhLGM9Pnt0aGlzLnNldCgicGFydGlhbERlcFBsb3RFbGlnaWJsZUZlYXR1cmVzIixjLnZhbHVlKX0sbnVsbCwicGxvdCBvcmRlcmluZyIsKCgpPT57dGhpcy5pc1NvcnRpbmdFbGlnaWJsZUZlYXR1cmVzPSExfSkuYmluZCh0aGlzKSkpfSxzaG91bGREaXNhYmxlU29ydEZlYXR1cmVzQnV0dG9uOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGN8fG51bGw9PWF8fDA9PWEubGVuZ3RofSx0b2dnbGVUcnVlTGFiZWxTZXR1cDpmdW5jdGlvbigpe3RoaXMuJC5jb2xsYXBzZXRydWVsYWJlbC50b2dnbGUoKX0sdG9nZ2xlRXhwbG9yZXJTZXR1cDpmdW5jdGlvbigpe3RoaXMuJCQoIiNjb2xsYXBzZWV4cGxvcmVyIikudG9nZ2xlKCl9LAp0b2dnbGVDb250ZXh0VG9vbHM6ZnVuY3Rpb24oKXt0aGlzLiQuY29sbGFwc2Vjb250ZXh0dG9vbHMudG9nZ2xlKCl9LHRvZ2dsZVBlcmZvcm1hbmNlOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbGxhcHNlcGVyZm9ybWFuY2UudG9nZ2xlKCl9LHRvZ2dsZUluZmVyZW5jZVJlc3VsdHM6ZnVuY3Rpb24oKXt0aGlzLiQkKCIjY29sbGFwc2VpbmZlcmVuY2UiKS50b2dnbGUoKX0sZ2V0RXhwYW5kQ29sbGFwc2VJY29uOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn0sZ2V0RXhwYW5kQ29sbGFwc2VQZXJmSWNvbkNsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJub3JtYWwtaWNvbiI6InJvdGF0ZWQtaWNvbiJ9LGdldFBlcmZUYWJsZVJvd0NsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhPyJwZXJmLXRhYmxlLXJvdy1leHBhbmRlZCI6InBlcmYtdGFibGUtcm93In0sZ2V0UGVyZlRhYmxlTW9kZWxDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gMj5hPyJwZXJmLXRhYmxlLW1vZGVsLXNpbmdsZSI6CiJwZXJmLXRhYmxlLW1vZGVsIn0sZ2V0RGF0YXBvaW50RWRpdG9yVGl0bGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRTZWN0aW9uVGl0bGUoIkVkaXQiLGEsYyl9LGdldEluZmVyVGl0bGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRTZWN0aW9uVGl0bGUoIkluZmVyIixhLGMpfSxnZXRTZWN0aW9uVGl0bGU6ZnVuY3Rpb24oYSxjLGQpe251bGwhPWMmJiIiIT09YyYmKGE9bnVsbCE9ZCYmMDxkLmxlbmd0aD9hKygiIC0gRGF0YXBvaW50cyAiK2MrIiBhbmQgIitkWzBdKTphKygiIC0gRGF0YXBvaW50ICIrYykpO3JldHVybiBhfSx0b2dnbGVQZXJmUm93OmZ1bmN0aW9uKGEpe2ZvcihhPWEudGFyZ2V0O251bGwhPWEmJiFhLmRhdGFzZXQuaW5kZXg7KWE9YS5wYXJlbnROb2RlO251bGwhPWEmJihhPWEuZGF0YXNldC5pbmRleCx0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK2ErIi5vcGVuZWQiLCF0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHNbYV0ub3BlbmVkKSwKdGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzW2FdLm9wZW5lZCYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZUluZmVyZW5jZVN0YXRzXyghMCkpKX0sZ2V0UGVyZm9ybWFuY2VUYWJUaXRsZTpmdW5jdGlvbihhLGMpe3JldHVybiB0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKGEsYyk/IlBlcmZvcm1hbmNlIFx4MjYgRmFpcm5lc3MiOiJQZXJmb3JtYW5jZSJ9LGdldFBlcmZUYWJsZVRpdGxlOmZ1bmN0aW9uKGEsYyxkLGYpe2xldCBnPXRoaXMuZ2V0UHJpbnRhYmxlT3B0aW1pemF0aW9uTmFtZShkKTtpZihudWxsPT1hfHwwPT1hLmxlbmd0aClyZXR1cm4iY3VzdG9tIj09ZD8iRXhwbG9yZSBvdmVyYWxsIHBlcmZvcm1hbmNlIjpnO251bGwhPWMmJjAhPWMubGVuZ3RoJiYoYSs9Ii8iK2MpO3JldHVybiBnKyIgZm9yICIrZi5sZW5ndGgrIiB2YWx1ZXMgb2YgIithfSxnZXROb1RocmVzaG9sZFBlcmZUYWJsZVRpdGxlOmZ1bmN0aW9uKGEsYyxkKXtpZihudWxsPT0KYXx8MD09YS5sZW5ndGgpcmV0dXJuIkV4cGxvcmUgb3ZlcmFsbCBwZXJmb3JtYW5jZSI7bnVsbCE9YyYmMCE9Yy5sZW5ndGgmJihhKz0iLyIrYyk7cmV0dXJuIGErIiAoIitkLmxlbmd0aCsiIHZhbHVlcykifSxnZXRQcmludGFibGVPcHRpbWl6YXRpb25OYW1lOmZ1bmN0aW9uKGEpe3JldHVybiJjdXN0b20iPT1hPyJDdXN0b20gdGhyZXNob2xkcyI6InVuYXdhcmUiPT1hPyJPcHRpbWFsIHNpbmdsZSB0aHJlc2hvbGQiOiJkZW1vcGFyaXR5Ij09YT8iRGVtb2dyYXBoaWMgcGFyaXR5IHRocmVzaG9sZHMiOiJlcXVhbG9wcCI9PWE/IkVxdWFsIG9wcG9ydHVuaXR5IHRocmVzaG9sZHMiOiJlcXVhbGFjYyI9PWE/IkVxdWFsIGFjY3VyYWN5IHRocmVzaG9sZHMiOiJPcHRpbWFsIGdyb3VwIHRocmVzaG9sZHMifSxnZXRGZWF0dXJlU29ydEJ5OmZ1bmN0aW9uKGEsYyl7bGV0IGQ9WyJDb3VudCIsIkFscGhhYmV0aWNhbCJdO3JldHVybiBkPXRoaXMuaXNCaW5hcnlDbGFzc2lmaWNhdGlvbl8oYSwKYyk/ZC5jb25jYXQoWyJBY2N1cmFjeSIsIkZhbHNlIHBvc2l0aXZlcyIsIkZhbHNlIG5lZ2F0aXZlcyJdKTp0aGlzLmlzTXVsdGlDbGFzc18oYSxjKT9kLmNvbmNhdChbIkFjY3VyYWN5Il0pOmQuY29uY2F0KCJNZWFuIGVycm9yO01lZGlhbiBlcnJvcjtNZWFuIGFic29sdXRlIGVycm9yO01lZGlhbiBhYnNvbHV0ZSBlcnJvcjtNZWFuIHNxdWFyZWQgZXJyb3I7TWVkaWFuIHNxdWFyZWQgZXJyb3IiLnNwbGl0KCI7IikpfSxzZWxlY3RlZEZlYXR1cmVTb3J0Q2hhbmdlZF86ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHM7dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzPVtdO3RoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkcz10aGlzLnNvcnRGZWF0dXJlVmFsdWVzKGEpO251bGwhPXRoaXMucmVncmVzc2lvbkVudHJpZXNfJiYoYT10aGlzLnJlZ3Jlc3Npb25FbnRyaWVzXyx0aGlzLnJlZ3Jlc3Npb25FbnRyaWVzXz1bXSx0aGlzLnJlZ3Jlc3Npb25FbnRyaWVzXz0KdGhpcy5zb3J0UmVncmVzc2lvbkVudHJpZXMoYSkpfSxnZXRTbGlkZXJDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4ic2xpZGVyICIrKDA9PWE/InNsaWRlci1tb2RlbC1vbmUiOiJzbGlkZXItbW9kZWwtdHdvIil9LGZvcm1hdEVycm9yOmZ1bmN0aW9uKGEpe3JldHVybiBkMy5mb3JtYXQoIi4zZiIpKGEpfSxleHBhbmRBbGxQZXJmb3JtYW5jZTpmdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkcyl7Zm9yKGxldCBhPTA7YTx0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMubGVuZ3RoO2ErKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK2ErIi5vcGVuZWQiLCEwKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMudXBkYXRlSW5mZXJlbmNlU3RhdHNfKCEwKSl9fSxjb2xsYXBzZUFsbFBlcmZvcm1hbmNlOmZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzKWZvcihsZXQgYT0wO2E8dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzLmxlbmd0aDthKyspdGhpcy5zZXQoImZlYXR1cmVWYWx1ZVRocmVzaG9sZHMuIisKYSsiLm9wZW5lZCIsITEpfSxnZXRQZXJmVGFibGVFbnRyeUNsYXNzOmZ1bmN0aW9uKGEpe2xldCBjPSJwZXJmLXRhYmxlLWVudHJ5IHBlcmYtdGFibGUtcm93ICI7ImludGVyZXN0aW5nbmVzcyJpbiBhJiYwPT1hLmludGVyZXN0aW5nbmVzcyYmKGMrPSJwZXJmLXRhYmxlLWVudHJ5LXRyaXZpYWwiKTtyZXR1cm4gY319KTtZby5yZWdpc3RlckRhc2hib2FyZCh7cGx1Z2luOiJ3aGF0aWYiLGVsZW1lbnROYW1lOiJ0Zi1pbnRlcmFjdGl2ZS1pbmZlcmVuY2UtZGFzaGJvYXJkIix0YWJOYW1lOiJXaGF0LUlmIFRvb2wifSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWhwYXJhbXMtdXRpbHMvdGYtaHBhcmFtcy11dGlscy5odG1sLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGYoQil7cmV0dXJuIiIhPT1CLmRpc3BsYXlOYW1lJiZ2b2lkIDAhPT1CLmRpc3BsYXlOYW1lP0IuZGlzcGxheU5hbWU6Qi5uYW1lfWZ1bmN0aW9uIGcoQil7aWYoIiIhPT1CLmRpc3BsYXlOYW1lJiZ2b2lkIDAhPT1CLmRpc3BsYXlOYW1lKXJldHVybiBCLmRpc3BsYXlOYW1lO2xldCBJPUIubmFtZS5ncm91cDtCPUIubmFtZS50YWc7dm9pZCAwPT09SSYmKEk9IiIpO3ZvaWQgMD09PUImJihCPSIiKTtyZXR1cm4iIj09PUk/QjpJKyIuIitCfWZ1bmN0aW9uIGwoQil7cmV0dXJuIEIuaHBhcmFtQ29sdW1ucy5sZW5ndGh9ZnVuY3Rpb24gayhCKXtyZXR1cm4gQi5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiBuKEIsSSl7cmV0dXJuIEJbSV19ZnVuY3Rpb24gcChCLEkpe3JldHVybiBCLmZpbmQoTz0+Xy5pc0VxdWFsKE8ubmFtZSxJKSl9ZnVuY3Rpb24gcShCLEksTyl7cmV0dXJuIEkuaHBhcmFtc1tCLmhwYXJhbUNvbHVtbnNbT10uaHBhcmFtSW5mby5uYW1lXX0KZnVuY3Rpb24gcihCLEksTyl7Qj1wKEkubWV0cmljVmFsdWVzLEIubWV0cmljQ29sdW1uc1tPXS5tZXRyaWNJbmZvLm5hbWUpO3JldHVybiB2b2lkIDA9PT1CP3ZvaWQgMDpCLnZhbHVlfWZ1bmN0aW9uIHQoQixJLE8pe3JldHVybiBPPEIuaHBhcmFtQ29sdW1ucy5sZW5ndGg/cShCLEksTyk6cihCLEksTy1CLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiB2KEIpe3JldHVybiBCLmhwYXJhbUluZm9zLmxlbmd0aH1mdW5jdGlvbiB5KEIpe3JldHVybiBCLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB6KEIsSSxPKXtyZXR1cm4gSS5ocGFyYW1zW0IuaHBhcmFtSW5mb3NbT10ubmFtZV19ZnVuY3Rpb24geChCLEksTyl7Qj1wKEkubWV0cmljVmFsdWVzLEIubWV0cmljSW5mb3NbT10ubmFtZSk7cmV0dXJuIHZvaWQgMD09PUI/dm9pZCAwOkIudmFsdWV9ZnVuY3Rpb24gQyhCLEksTyl7cmV0dXJuIE88Qi5ocGFyYW1JbmZvcy5sZW5ndGg/eihCLEksTyk6eChCLEksTy1CLmhwYXJhbUluZm9zLmxlbmd0aCl9CmZ1bmN0aW9uIEYoQil7cmV0dXJuIF8uaXNOdW1iZXIoQik/Qi50b1ByZWNpc2lvbig1KTp2b2lkIDA9PT1CPyIiOkIudG9TdHJpbmcoKX1mdW5jdGlvbiBEKEIsSSl7cmV0dXJuIEIqQitJKkl9ZC5ocGFyYW1OYW1lPWY7ZC5tZXRyaWNOYW1lPWc7ZC5zY2hlbWFDb2x1bW5OYW1lPWZ1bmN0aW9uKEIsSSl7cmV0dXJuIEk8Qi5ocGFyYW1Db2x1bW5zLmxlbmd0aD9mKEIuaHBhcmFtQ29sdW1uc1tJXS5ocGFyYW1JbmZvKTpnKEIubWV0cmljQ29sdW1uc1tJLUIuaHBhcmFtQ29sdW1ucy5sZW5ndGhdLm1ldHJpY0luZm8pfTtkLm51bUhQYXJhbXM9bDtkLm51bU1ldHJpY3M9aztkLm51bUNvbHVtbnM9ZnVuY3Rpb24oQil7cmV0dXJuIGwoQikrayhCKX07ZC5ocGFyYW1WYWx1ZUJ5TmFtZT1uO2QubWV0cmljVmFsdWVCeU5hbWU9cDtkLmhwYXJhbVZhbHVlQnlJbmRleD1xO2QubWV0cmljVmFsdWVCeUluZGV4PXI7ZC5jb2x1bW5WYWx1ZUJ5SW5kZXg9dDtkLm51bWVyaWNDb2x1bW5FeHRlbnQ9CmZ1bmN0aW9uKEIsSSxPKXtyZXR1cm4gZDMuZXh0ZW50KEksUD0+dChCLFAsTykpfTtkLmdldEFic29sdXRlQ29sdW1uSW5kZXg9ZnVuY3Rpb24oQixJLE8pe2lmKE88SS5ocGFyYW1JbmZvcy5sZW5ndGgpQj1CLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KFA9PlAuaHBhcmFtSW5mby5uYW1lPT09SS5ocGFyYW1JbmZvc1tPXS5uYW1lKTtlbHNle2NvbnN0IFA9SS5tZXRyaWNJbmZvc1tPLUkuaHBhcmFtSW5mb3MubGVuZ3RoXS5uYW1lO0I9Qi5ocGFyYW1Db2x1bW5zLmxlbmd0aCtCLm1ldHJpY0NvbHVtbnMuZmluZEluZGV4KEg9PkgubWV0cmljSW5mby5uYW1lPT09UCl9Y29uc29sZS5hc3NlcnQoLTEhPT1CKTtyZXR1cm4gQn07ZC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZT1mdW5jdGlvbihCLEkpe3JldHVybiBJPEIuaHBhcmFtSW5mb3MubGVuZ3RoP2YoQi5ocGFyYW1JbmZvc1tJXSk6ZyhCLm1ldHJpY0luZm9zW0ktQi5ocGFyYW1JbmZvcy5sZW5ndGhdKX07ZC5udW1WaXNpYmxlSFBhcmFtcz0KdjtkLm51bVZpc2libGVNZXRyaWNzPXk7ZC5udW1WaXNpYmxlQ29sdW1ucz1mdW5jdGlvbihCKXtyZXR1cm4gdihCKSt5KEIpfTtkLnZpc2libGVOdW1lcmljQ29sdW1uRXh0ZW50PWZ1bmN0aW9uKEIsSSxPKXtyZXR1cm4gZDMuZXh0ZW50KEksUD0+QyhCLFAsTykpfTtkLnByZXR0eVByaW50SFBhcmFtVmFsdWVCeU5hbWU9ZnVuY3Rpb24oQixJKXtyZXR1cm4gRihuKEIsSSkpfTtkLnByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU9ZnVuY3Rpb24oQixJKXtyZXR1cm4gRihwKEIsSSkpfTtkLnNlc3Npb25Hcm91cFdpdGhOYW1lPWZ1bmN0aW9uKEIsSSl7cmV0dXJuIEIuZmluZChPPT5PLm5hbWU9PT1JKX07ZC5ocGFyYW1WYWx1ZUJ5VmlzaWJsZUluZGV4PXo7ZC5tZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4PXg7ZC5jb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4PUM7ZC5wcmV0dHlQcmludD1GO2QubDJOb3JtU3F1YXJlZD1EO2QuZXVjbGlkZWFuRGlzdD1mdW5jdGlvbihCLEksTyxQKXtyZXR1cm4gTWF0aC5zcXJ0KEQoQi0KTyxJLVApKX07ZC5wb2ludFRvUmVjdGFuZ2xlRGlzdD1mdW5jdGlvbihCLEksTyxQLEgsSyl7aWYoQjxPJiZJPFApcmV0dXJuIGQuZXVjbGlkZWFuRGlzdChCLEksTyxQKTtpZihPPD1CJiZCPEgmJkk8UClyZXR1cm4gUC1JO2lmKEg8PUImJkk8UClyZXR1cm4gZC5ldWNsaWRlYW5EaXN0KEIsSSxILFApO2lmKEI8TyYmUDw9SSYmSTxLKXJldHVybiBPLUI7aWYoTzw9QiYmQjxIJiZQPD1JJiZJPEspcmV0dXJuIDA7aWYoSDw9QiYmUDw9SSYmSTxLKXJldHVybiBCLUg7aWYoQjxPJiZLPD1JKXJldHVybiBkLmV1Y2xpZGVhbkRpc3QoQixJLE8sSyk7aWYoTzw9QiYmQjxIJiZLPD1JKXJldHVybiBJLUs7aWYoSDw9QiYmSzw9SSlyZXR1cm4gZC5ldWNsaWRlYW5EaXN0KEIsSSxILEspO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIjt9O2QudHJhbnNsYXRlU3RyPWZ1bmN0aW9uKEIsSSl7cmV0dXJuIHZvaWQgMD09PUk/InRyYW5zbGF0ZSgiKwpCKyIpIjoidHJhbnNsYXRlKCIrQisiLCIrSSsiKSJ9O2Qucm90YXRlU3RyPWZ1bmN0aW9uKEIsSSl7bGV0IE89InJvdGF0ZSg5MCI7dm9pZCAwIT09QiYmdm9pZCAwIT09SSYmKE89TysiLCIrQisiLCIrSSk7cmV0dXJuIE8rIikifTtkLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKEIpe3JldHVybiBudWxsPT09Qnx8dm9pZCAwPT09Qn07ZC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5SZWN0PWZ1bmN0aW9uKEIsSSxPLFAsSCxLKXtCLnZpc2l0KChNLEwsUixVLFkpPT57aWYodm9pZCAwPT09TS5sZW5ndGgpe2RvIEw9Qi54KCkoTS5kYXRhKSxSPUIueSgpKE0uZGF0YSksSTw9TCYmTDxQJiZPPD1SJiZSPEgmJksoTS5kYXRhKTt3aGlsZShNPU0ubmV4dCk7cmV0dXJuITB9cmV0dXJuIEw+PVB8fFU8PUl8fFI+PUh8fFk8PU99KX07ZC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrPWZ1bmN0aW9uKEIsSSxPLFAsSCl7Qi52aXNpdCgoSyxNLEwsUixVKT0+e2lmKHZvaWQgMD09PUsubGVuZ3RoKXtkbyBNPQpCLngoKShLLmRhdGEpLEw9Qi55KCkoSy5kYXRhKSxNPWQuZXVjbGlkZWFuRGlzdChJLE8sTSxMKSxNPD1QJiZIKEsuZGF0YSxNKTt3aGlsZShLPUsubmV4dCk7cmV0dXJuITB9cmV0dXJuIGQucG9pbnRUb1JlY3RhbmdsZURpc3QoSSxPLE0sTCxSLFUpPlB9KX07ZC5maWx0ZXJTZXQ9ZnVuY3Rpb24oQixJKXtjb25zdCBPPW5ldyBTZXQ7Qi5mb3JFYWNoKFA9PntJKFApJiZPLmFkZChQKX0pO3JldHVybiBPfTtkLnNldEFycmF5T2JzZXJ2YWJseT1mdW5jdGlvbihCLEkpe2NvbnN0IE89Qi5nZXQoInNlc3Npb25Hcm91cHMiLEIpO0FycmF5LmlzQXJyYXkoTyk/Qi5zcGxpY2UuYXBwbHkoQixbInNlc3Npb25Hcm91cHMiLDAsTy5sZW5ndGhdLmNvbmNhdChJKSk6Qi5zZXQoInNlc3Npb25Hcm91cHMiLEkpfTtkLmhhc2hPZlN0cmluZz1mdW5jdGlvbihCKXtsZXQgST0wO2ZvcihsZXQgTz0wO088Qi5sZW5ndGg7KytPKUk9MzEqSStCLmNoYXJDb2RlQXQoTykmNDI5NDk2NzI5NTtyZXR1cm4gSSsKTWF0aC5wb3coMiwzMSl9fSkoYy51dGlsc3x8KGMudXRpbHM9e30pKX0pKGEuaHBhcmFtc3x8KGEuaHBhcmFtcz17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1zcGxpdC1sYXlvdXQvdmFhZGluLXNwbGl0LWxheW91dC5odG1sLmpzClBvbHltZXIoe2lzOiJ2YWFkaW4tc3BsaXQtbGF5b3V0IixiZWhhdmlvcnM6W1BvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOnt2ZXJ0aWNhbDp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sX3ByZXZpb3VzUHJpbWFyeVBvaW50ZXJFdmVudHM6U3RyaW5nLF9wcmV2aW91c1NlY29uZGFyeVBvaW50ZXJFdmVudHM6U3RyaW5nfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPVBvbHltZXIuZG9tKHRoaXMpLm9ic2VydmVOb2Rlcyh0aGlzLl9wcm9jZXNzQ2hpbGRyZW4pfSxkZXRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuZG9tKHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKX0sX3Byb2Nlc3NDaGlsZHJlbjpmdW5jdGlvbigpe3RoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NMaXN0LmNvbnRhaW5zKCJzcGxpdHRlci1oYW5kbGUiKT8KKFBvbHltZXIuZG9tKGEpLnNldEF0dHJpYnV0ZSgic2xvdCIsImhhbmRsZSIpLCExKTohMH0pLmZvckVhY2goZnVuY3Rpb24oYSxjKXswPT09Yz8odGhpcy5fcHJpbWFyeUNoaWxkPWEsUG9seW1lci5kb20oYSkuc2V0QXR0cmlidXRlKCJzbG90IiwicHJpbWFyeSIpKToxPT1jPyh0aGlzLl9zZWNvbmRhcnlDaGlsZD1hLFBvbHltZXIuZG9tKGEpLnNldEF0dHJpYnV0ZSgic2xvdCIsInNlY29uZGFyeSIpKTpQb2x5bWVyLmRvbShhKS5yZW1vdmVBdHRyaWJ1dGUoInNsb3QiKX0uYmluZCh0aGlzKSl9LF9zZXRGbGV4QmFzaXM6ZnVuY3Rpb24oYSxjLGQpe2M9TWF0aC5tYXgoMCxNYXRoLm1pbihjLGQpKTswPT09YyYmKGM9MUUtNik7YS5zdHlsZS5mbGV4PSIxIDEgIitjKyJweCJ9LF9vbkhhbmRsZVRyYWNrOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX3ByaW1hcnlDaGlsZCYmdGhpcy5fc2Vjb25kYXJ5Q2hpbGQpe3ZhciBjPXRoaXMudmVydGljYWw/ImhlaWdodCI6IndpZHRoIjsic3RhcnQiPT09CmEuZGV0YWlsLnN0YXRlPyh0aGlzLl9zdGFydFNpemU9e2NvbnRhaW5lcjp0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2NdLXRoaXMuJC5zcGxpdHRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtjXSxwcmltYXJ5OnRoaXMuX3ByaW1hcnlDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtjXSxzZWNvbmRhcnk6dGhpcy5fc2Vjb25kYXJ5Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbY119LHRoaXMuX3ByZXZpb3VzUHJpbWFyeVBvaW50ZXJFdmVudHM9dGhpcy5fcHJpbWFyeUNoaWxkLnN0eWxlLnBvaW50ZXJFdmVudHMsdGhpcy5fcHJldmlvdXNTZWNvbmRhcnlQb2ludGVyRXZlbnRzPXRoaXMuX3NlY29uZGFyeUNoaWxkLnN0eWxlLnBvaW50ZXJFdmVudHMsdGhpcy5fcHJpbWFyeUNoaWxkLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHRoaXMuX3NlY29uZGFyeUNoaWxkLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiKTooYz10aGlzLnZlcnRpY2FsP2EuZGV0YWlsLmR5OgphLmRldGFpbC5keCx0aGlzLl9zZXRGbGV4QmFzaXModGhpcy5fcHJpbWFyeUNoaWxkLHRoaXMuX3N0YXJ0U2l6ZS5wcmltYXJ5K2MsdGhpcy5fc3RhcnRTaXplLmNvbnRhaW5lciksdGhpcy5fc2V0RmxleEJhc2lzKHRoaXMuX3NlY29uZGFyeUNoaWxkLHRoaXMuX3N0YXJ0U2l6ZS5zZWNvbmRhcnktYyx0aGlzLl9zdGFydFNpemUuY29udGFpbmVyKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLCJlbmQiPT09YS5kZXRhaWwuc3RhdGUmJihkZWxldGUgdGhpcy5fc3RhcnRTaXplLHRoaXMuX3ByaW1hcnlDaGlsZC5zdHlsZS5wb2ludGVyRXZlbnRzPXRoaXMuX3ByZXZpb3VzUHJpbWFyeVBvaW50ZXJFdmVudHMsdGhpcy5fc2Vjb25kYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cz10aGlzLl9wcmV2aW91c1NlY29uZGFyeVBvaW50ZXJFdmVudHMpKX19LF9wcmV2ZW50RGVmYXVsdDpmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaHBhcmFtcy1xdWVyeS1wYW5lL3RmLWhwYXJhbXMtcXVlcnktcGFuZS5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUiLHByb3BlcnRpZXM6e2JhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZyxjb25maWd1cmF0aW9uOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHtzY2hlbWE6e2hwYXJhbUNvbHVtbnM6W10sbWV0cmljQ29sdW1uczpbXX0sY29sdW1uc1Zpc2liaWxpdHk6W10sdmlzaWJsZVNjaGVtYTp7aHBhcmFtSW5mb3M6W10sbWV0cmljSW5mb3M6W119fSkscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxzZXNzaW9uR3JvdXBzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxyZWFkT25seTohMCxub3RpZnk6ITB9LF9leHBlcmltZW50Ok9iamVjdCxfaHBhcmFtczpBcnJheSxfbWV0cmljczpBcnJheSxfc3RhdHVzZXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLAphbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19GQUlMVVJFIixkaXNwbGF5TmFtZToiRmFpbHVyZSIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfUlVOTklORyIsZGlzcGxheU5hbWU6IlJ1bm5pbmciLGFsbG93ZWQ6ITB9XX0sX2dldEV4cGVyaW1lbnRSZXNvbHZlZDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50PWF9KX19LF9yZXNvbHZlR2V0RXhwZXJpbWVudDpGdW5jdGlvbixfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUW8uQ2FuY2VsbGVyfSxfc29ydEJ5SW5kZXg6TnVtYmVyLF9zb3J0RGlyZWN0aW9uOk51bWJlcixfcGFnZVNpemVJbnB1dDp7dHlwZTpPYmplY3QsdmFsdWU6e3ZhbHVlOiIxMDAiLGludmFsaWQ6ITF9fSxfcGFnZU51bWJlcklucHV0Ont0eXBlOk9iamVjdCx2YWx1ZTp7dmFsdWU6IjEiLGludmFsaWQ6ITF9fSwKX3BhZ2VDb3VudFN0cjp7dHlwZTpTdHJpbmcsdmFsdWU6Ij8ifSxfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHI6U3RyaW5nfSxvYnNlcnZlcnM6WyJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoYmFja2VuZCwgZXhwZXJpbWVudE5hbWUpIiwiX3VwZGF0ZUNvbmZpZ3VyYXRpb24oX2hwYXJhbXMuKiwgX21ldHJpY3MuKikiXSxyZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfSxfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoKXtjb25zdCBhPXRmLmhwYXJhbXMudXRpbHM7YS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHxhLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpfHx0aGlzLmJhY2tlbmQuZ2V0RXhwZXJpbWVudCh7ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX0pLnRoZW4oYz0+e18uaXNFcXVhbChjLHRoaXMuX2V4cGVyaW1lbnQpfHwodGhpcy5zZXQoIl9leHBlcmltZW50IixjKSx0aGlzLl9jb21wdXRlSFBhcmFtcygpLAp0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KX0sX2NvbXB1dGVIUGFyYW1zKCl7Y29uc3QgYT1bXTt0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zLmZvckVhY2goKGMsZCk9Pntjb25zdCBmPXtpbmZvOmMsZGlzcGxheWVkOjU+ZCxmaWx0ZXI6e319O2YuaW5mby5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluRGlzY3JldGUiKT8oZi5maWx0ZXIuZG9tYWluRGlzY3JldGU9W10sZi5pbmZvLmRvbWFpbkRpc2NyZXRlLmZvckVhY2goZz0+e2YuZmlsdGVyLmRvbWFpbkRpc2NyZXRlLnB1c2goe3ZhbHVlOmcsY2hlY2tlZDohMH0pfSkpOiJEQVRBX1RZUEVfQk9PTCI9PT1mLmluZm8udHlwZT9mLmZpbHRlci5kb21haW5EaXNjcmV0ZT1be3ZhbHVlOiExLGNoZWNrZWQ6ITB9LHt2YWx1ZTohMCxjaGVja2VkOiEwfV06IkRBVEFfVFlQRV9GTE9BVDY0Ij09PWYuaW5mby50eXBlP2YuZmlsdGVyLmludGVydmFsPXttaW46e3ZhbHVlOiIiLAppbnZhbGlkOiExfSxtYXg6e3ZhbHVlOiIiLGludmFsaWQ6ITF9fToiREFUQV9UWVBFX1NUUklORyI9PT1mLmluZm8udHlwZT9mLmZpbHRlci5yZWdleHA9IiI6Y29uc29sZS53YXJuKCJ1bmtub3duIGhwYXJhbS5pbmZvLnR5cGU6ICVzIixmLmluZm8udHlwZSk7YS5wdXNoKGYpfSk7dGhpcy5zZXQoIl9ocGFyYW1zIixhKX0sX2NvbXB1dGVNZXRyaWNzKCl7Y29uc3QgYT1bXTt0aGlzLl9leHBlcmltZW50Lm1ldHJpY0luZm9zLmZvckVhY2goKGMsZCk9PnthLnB1c2goe2luZm86YyxmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6NT5kfSl9KTt0aGlzLnNldCgiX21ldHJpY3MiLGEpfSxfY29tcHV0ZVNjaGVtYSgpe3JldHVybiB0aGlzLl9ocGFyYW1zJiZ0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKGE9Pih7aHBhcmFtSW5mbzphLmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcChhPT4KKHttZXRyaWNJbmZvOmEuaW5mb30pKX06e2hwYXJhbUNvbHVtbnM6W10sbWV0cmljQ29sdW1uczpbXX19LF91cGRhdGVDb25maWd1cmF0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX3VwZGF0ZUNvbmZpZ3VyYXRpb24iLCgpPT57dGhpcy5fc2V0Q29uZmlndXJhdGlvbih7c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9KX0pfSxfY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCl7cmV0dXJuIHRoaXMuX2hwYXJhbXMmJnRoaXMuX21ldHJpY3M/dGhpcy5faHBhcmFtcy5tYXAoYT0+YS5kaXNwbGF5ZWQpLmNvbmNhdCh0aGlzLl9tZXRyaWNzLm1hcChhPT5hLmRpc3BsYXllZCkpOltdfSxfY29tcHV0ZVZpc2libGVTY2hlbWEoKXtpZighdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpcmV0dXJue2hwYXJhbUluZm9zOltdLAptZXRyaWNJbmZvczpbXX07Y29uc3QgYT10aGlzLl9ocGFyYW1zLmZpbHRlcihkPT5kLmRpc3BsYXllZCkubWFwKGQ9PmQuaW5mbyksYz10aGlzLl9tZXRyaWNzLmZpbHRlcihkPT5kLmRpc3BsYXllZCkubWFwKGQ9PmQuaW5mbyk7cmV0dXJue2hwYXJhbUluZm9zOmEsbWV0cmljSW5mb3M6Y319LF9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX0sX3F1ZXJ5U2VydmVyTm9EZWJvdW5jZSgpe3JldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOmEsY2FuY2VsbGVkOmN9KT0+e2N8fCgwPD1hLnRvdGFsU2l6ZT8odGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwoYS50b3RhbFNpemUvK3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWUpKSksdGhpcy5zZXQoIl90b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0ciIsCmEudG90YWxTaXplKSk6KHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIiwiPyIpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLCJVbmtub3duIikpLHRmLmhwYXJhbXMudXRpbHMuc2V0QXJyYXlPYnNlcnZhYmx5KHRoaXMsYS5zZXNzaW9uR3JvdXBzKSl9KSl9LF9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCl7Y29uc3QgYT10aGlzLl9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpO2lmKG51bGwhPT1hKXJldHVybiB0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLmJhY2tlbmQubGlzdFNlc3Npb25Hcm91cHMoYSl9LF9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2Z1bmN0aW9uIGEocCl7dmFyIHE9ZC5nZXQocCsiLm1pbi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KHZvaWQgMCE9PXEpO3E9IiI9PT1xPyItSW5maW5pdHkiOitxO2Quc2V0KHArIi5taW4uaW52YWxpZCIsaXNOYU4ocSkpO2Y9ZiYmIWlzTmFOKHEpOwp2YXIgcj1kLmdldChwKyIubWF4LnZhbHVlIik7Y29uc29sZS5hc3NlcnQodm9pZCAwIT09cik7cj0iIj09PXI/IkluZmluaXR5IjorcjtkLnNldChwKyIubWF4LmludmFsaWQiLGlzTmFOKHIpKTtmPWYmJiFpc05hTihyKTtyZXR1cm4gaXNOYU4ocSl8fGlzTmFOKHIpP251bGw6e21pblZhbHVlOnEsbWF4VmFsdWU6cn19ZnVuY3Rpb24gYyhwKXt2YXIgcT1kLmdldChwKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydCh2b2lkIDAhPT1xKTtxPStxO2NvbnN0IHI9TnVtYmVyLmlzSW50ZWdlcihxKSYmMDxxO2Quc2V0KHArIi5pbnZhbGlkIiwhcik7Zj1mJiZyO3JldHVybiByP3E6bnVsbH1jb25zdCBkPXRoaXM7bGV0IGY9ITA7Y29uc3QgZz10aGlzLl9zdGF0dXNlcy5maWx0ZXIocD0+cC5hbGxvd2VkKS5tYXAocD0+cC52YWx1ZSk7bGV0IGw9W107dGhpcy5faHBhcmFtcy5mb3JFYWNoKChwLHEpPT57bGV0IHI9e2hwYXJhbTpwLmluZm8ubmFtZX07aWYocC5maWx0ZXIuZG9tYWluRGlzY3JldGUpci5maWx0ZXJEaXNjcmV0ZT0KW10scC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaCh0PT57dC5jaGVja2VkJiZyLmZpbHRlckRpc2NyZXRlLnB1c2godC52YWx1ZSl9KTtlbHNlIGlmKHAuZmlsdGVyLmludGVydmFsKXIuZmlsdGVySW50ZXJ2YWw9YSgiX2hwYXJhbXMuIitxKyIuZmlsdGVyLmludGVydmFsIik7ZWxzZSBpZihwLmZpbHRlci5yZWdleHApci5maWx0ZXJSZWdleHA9cC5maWx0ZXIucmVnZXhwO2Vsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IoImhwYXJhbS5maWx0ZXIgd2l0aCBubyBkb21haW5EaXNjcmV0ZSwgaW50ZXJ2YWwgb3IgcmVnZXhwIHByb3BlcnRpZXMgc2V0OiAlcyIscCksbnVsbDtsLnB1c2gocil9KTt0aGlzLl9tZXRyaWNzLmZvckVhY2goKHAscSk9PntwPXttZXRyaWM6cC5pbmZvLm5hbWUsZmlsdGVySW50ZXJ2YWw6YSgiX21ldHJpY3MuIitxKyIuZmlsdGVyLmludGVydmFsIil9O2wucHVzaChwKX0pO2lmKHZvaWQgMCE9PXRoaXMuX3NvcnRCeUluZGV4JiZ2b2lkIDAhPT10aGlzLl9zb3J0RGlyZWN0aW9uKXtpZighKHRoaXMuX3NvcnRCeUluZGV4IGluCmwpKXJldHVybiBjb25zb2xlLmVycm9yKCJObyBjb2x1bW4gaW4gY29sUGFyYW1zIHdpdGggaW5kZXggc29ydEJ5SW5kZXg6ICVzIix0aGlzLl9zb3J0QnlJbmRleCksbnVsbDtsW3RoaXMuX3NvcnRCeUluZGV4XS5vcmRlcj0wPT09dGhpcy5fc29ydERpcmVjdGlvbj8iT1JERVJfQVNDIjoiT1JERVJfREVTQyJ9Y29uc3Qgaz1jKCJfcGFnZU51bWJlcklucHV0Iiksbj1jKCJfcGFnZVNpemVJbnB1dCIpO3JldHVybiBmP3tleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLGFsbG93ZWRTdGF0dXNlczpnLGNvbFBhcmFtczpsLHN0YXJ0SW5kZXg6biooay0xKSxzbGljZVNpemU6bn06bnVsbH0sX21ldHJpY1NvcnRCeUluZGV4KGEpe3JldHVybiBhK3RoaXMuX2hwYXJhbXMubGVuZ3RofSxfaHBhcmFtTmFtZTp0Zi5ocGFyYW1zLnV0aWxzLmhwYXJhbU5hbWUsX21ldHJpY05hbWU6dGYuaHBhcmFtcy51dGlscy5tZXRyaWNOYW1lLF9wcmV0dHlQcmludDp0Zi5ocGFyYW1zLnV0aWxzLnByZXR0eVByaW50fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vcGFwZXItaGVhZGVyLXBhbmVsL3BhcGVyLWhlYWRlci1wYW5lbC5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPXtzY3JvbGw6ITB9LGM9e3N0YW5kYXJkOjIsd2F0ZXJmYWxsOjEsIndhdGVyZmFsbC10YWxsIjoxfSxkPXsid2F0ZXJmYWxsLXRhbGwiOiEwfTtQb2x5bWVyKHtpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCk7dGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0sCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxIYW5kbGVyPXRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpO2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sZ2V0IGhlYWRlcigpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzLiQuaGVhZGVyU2xvdCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpWzBdfSxnZXQgc2Nyb2xsZXIoKXtyZXR1cm4gdGhpcy5fZ2V0U2Nyb2xsZXJGb3JNb2RlKHRoaXMubW9kZSl9LGdldCB2aXNpYmxlU2hhZG93KCl7cmV0dXJuIHRoaXMuJC5kcm9wU2hhZG93LmNsYXNzTGlzdC5jb250YWlucygiaGFzLXNoYWRvdyIpfSxfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW46ZnVuY3Rpb24oZixnKXtnPWNbZ107dGhpcy5zaGFkb3c/dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITAsdGhpcy4kLmRyb3BTaGFkb3cpOjI9PT1nP3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KToKMSE9PWd8fGY/dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpOnRoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KX0sX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3M6ZnVuY3Rpb24oZil7dmFyIGc9e307Zy5mbGV4PSJjb3ZlciIhPT1mO3JldHVybiBPYmplY3Qua2V5cyhnKS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIGdbbF19KS5qb2luKCIgIil9LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfcmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5zY3JvbGxIYW5kbGVyKX0sX21vZGVDaGFuZ2VkOmZ1bmN0aW9uKGYsZyl7dmFyIGw9dGhpcy5oZWFkZXI7bCYmKGRbZ10mJiFkW2ZdPyhsLmNsYXNzTGlzdC5yZW1vdmUodGhpcy50YWxsQ2xhc3MpLAp0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bC5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LDIwMCkpOnRoaXMudG9nZ2xlQ2xhc3MoImFuaW1hdGUiLGRbZl0sbCkpO3RoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpfSxfa2VlcFNjcm9sbGluZ1N0YXRlOmZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5zY3JvbGxlcixnPXRoaXMuaGVhZGVyO3RoaXMuX3NldEF0VG9wKDA9PT1mLnNjcm9sbFRvcCk7ZyYmdGhpcy50YWxsQ2xhc3MmJmRbdGhpcy5tb2RlXSYmdGhpcy50b2dnbGVDbGFzcyh0aGlzLnRhbGxDbGFzcyx0aGlzLmF0VG9wfHxnLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLnRhbGxDbGFzcykmJmYuc2Nyb2xsSGVpZ2h0PHRoaXMub2Zmc2V0SGVpZ2h0LGcpfSxfc2Nyb2xsOmZ1bmN0aW9uKCl7dGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCk7dGhpcy5maXJlKCJjb250ZW50LXNjcm9sbCIse3RhcmdldDp0aGlzLnNjcm9sbGVyfSx7YnViYmxlczohMX0pfSxfZ2V0U2Nyb2xsZXJGb3JNb2RlOmZ1bmN0aW9uKGYpe3JldHVybiBhW2ZdPwp0aGlzOnRoaXMuJC5tYWluQ29udGFpbmVyfX0pfSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly9wYXBlci10b29sYmFyL3BhcGVyLXRvb2xiYXIuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdG9vbGJhciIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2xiYXIifSxwcm9wZXJ0aWVzOntib3R0b21KdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sanVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG1pZGRsZUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0scmVhZHk6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4odGhpcy5pcywiaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhcHAtbGF5b3V0IGluc3RlYWQhIil9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZSh0aGlzKTt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCl9LF9vYnNlcnZlOmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKX0uYmluZCh0aGlzKSk7CmMub2JzZXJ2ZShhLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO3JldHVybiBjfSxfdXBkYXRlQXJpYUxhYmVsbGVkQnk6ZnVuY3Rpb24oKXtQb2x5bWVyLmRvbS5mbHVzaCgpO2Zvcih2YXIgYT1bXSxjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgic2xvdCIpKS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCJjb250ZW50IikpKSxkLGY9MDtkPWNbZl07ZisrKXtkPVBvbHltZXIuZG9tKGQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKTtmb3IodmFyIGcsbD0wO2c9ZFtsXTtsKyspaWYoZy5jbGFzc0xpc3QmJmcuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKGcuaWQpYS5wdXNoKGcuaWQpO2Vsc2V7dmFyIGs9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKDFFNCpNYXRoLnJhbmRvbSgpKTtnLmlkPWs7YS5wdXNoKGspfX0wPAphLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsYS5qb2luKCIgIikpfSxfY29tcHV0ZUJhckV4dHJhQ2xhc3NlczpmdW5jdGlvbihhKXtyZXR1cm4gYT9hKygianVzdGlmaWVkIj09PWE/IiI6Ii1qdXN0aWZpZWQiKToiIn19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scy90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyIscHJvcGVydGllczp7Y29uZmlndXJhdGlvbjpPYmplY3Qsc2Vzc2lvbkdyb3VwczpBcnJheSxvcHRpb25zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9jb25maWd1cmF0aW9uQ2hhbmdlZChjb25maWd1cmF0aW9uLiopIiwiX3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoc2Vzc2lvbkdyb3Vwcy4qKSJdLF9jb25maWd1cmF0aW9uQ2hhbmdlZCgpe2NvbnN0IGE9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsYz10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLGQ9e2NvbHVtbnM6YS5ocGFyYW1JbmZvcy5tYXAoKGYsZyk9Pih7bmFtZTp0Zi5ocGFyYW1zLnV0aWxzLmhwYXJhbU5hbWUoZiksaW5kZXg6ZyxhYnNvbHV0ZUluZGV4OnRmLmhwYXJhbXMudXRpbHMuZ2V0QWJzb2x1dGVDb2x1bW5JbmRleChjLGEsZyksc2NhbGU6dGhpcy5faXNOdW1lcmljQ29sdW1uKGcpPwoiTElORUFSIjoiTk9OX05VTUVSSUMifSkpLmNvbmNhdChhLm1ldHJpY0luZm9zLm1hcCgoZixnKT0+e2crPWEuaHBhcmFtSW5mb3MubGVuZ3RoO3JldHVybntzY2FsZToiTElORUFSIixuYW1lOnRmLmhwYXJhbXMudXRpbHMubWV0cmljTmFtZShmKSxpbmRleDpnLGFic29sdXRlSW5kZXg6dGYuaHBhcmFtcy51dGlscy5nZXRBYnNvbHV0ZUNvbHVtbkluZGV4KGMsYSxnKX19KSksbWluQ29sb3I6IiMwMDAwRkYiLG1heENvbG9yOiIjRkYwMDAwIixjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbn07dGhpcy5zZXQoIm9wdGlvbnMiLGQpO1BvbHltZXIuZG9tLmZsdXNoKCk7dGhpcy5zZXQoIm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4Iix0aGlzLl9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCkpfSxfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcygpe251bGwhPT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYT0+e2NvbnN0IGM9Im9wdGlvbnMuY29sdW1ucy4iKwphLmluZGV4O3RoaXMuX2FsbG93TG9nU2NhbGUoYSl8fCJMT0ciIT09YS5zY2FsZXx8dGhpcy5zZXQoYysiLnNjYWxlIiwiTElORUFSIil9KX0sX2FsbG93TG9nU2NhbGUoYSl7aWYoIXRoaXMuX2lzTnVtZXJpY0NvbHVtbihhLmluZGV4KXx8IXRoaXMuc2Vzc2lvbkdyb3VwcylyZXR1cm4hMTtjb25zdCBbYyxkXT10Zi5ocGFyYW1zLnV0aWxzLnZpc2libGVOdW1lcmljQ29sdW1uRXh0ZW50KHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3VwcyxhLmluZGV4KTtyZXR1cm4gMDxjfHwwPmR9LF9pc051bWVyaWNDb2x1bW4oYSl7cmV0dXJuIGE+PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aHx8IkRBVEFfVFlQRV9GTE9BVDY0Ij09PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW2FdLnR5cGV9LF9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYoMDx0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGgpcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDsKY29uc3QgYT10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgoYz0+IkRBVEFfVFlQRV9GTE9BVDY0Ij09PWMudHlwZSk7aWYoLTEhPT1hKXJldHVybiBhfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWFjdGl2ZS1pdGVtLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLkFjdGl2ZUl0ZW1CZWhhdmlvcj17cHJvcGVydGllczp7YWN0aXZlSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOm51bGx9fSxsaXN0ZW5lcnM6eyJjZWxsLWFjdGl2YXRlIjoiX2FjdGl2YXRlSXRlbSJ9LG9ic2VydmVyczpbIl9hY3RpdmVJdGVtQ2hhbmdlZChhY3RpdmVJdGVtKSJdLF9hY3RpdmF0ZUl0ZW06ZnVuY3Rpb24oYSl7dmFyIGM9YS5kZXRhaWwubW9kZWwuaXRlbTt0aGlzLmFjdGl2ZUl0ZW09dGhpcy5hY3RpdmVJdGVtIT09Yz9jOm51bGw7YS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sX2FjdGl2ZUl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy4kLnNjcm9sbGVyLl9waHlzaWNhbEl0ZW1zJiZ0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXMuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLl91cGRhdGVJdGVtKGEsYS5pdGVtKX0uYmluZCh0aGlzKSl9fTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC10YWJsZS1zY3JvbGwtYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVTY3JvbGxCZWhhdmlvckltcGw9e3Byb3BlcnRpZXM6e192aWR4T2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowfSxpb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTpuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZml4ZWRTZWN0aW9uczp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxjb21wdXRlZDoiX2hhc0ZpeGVkU2VjdGlvbnMoc2Nyb2xsYmFyV2lkdGgpIn0sX2Zyb3plbkNlbGxzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxzY3JvbGxpbmc6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsVGFyZ2V0PXRoaXMuJC50YWJsZX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmxpc3Rlbih0aGlzLnNjcm9sbFRhcmdldCwid2hlZWwiLAoiX29uV2hlZWwiKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVubGlzdGVuKHRoaXMuc2Nyb2xsVGFyZ2V0LCJ3aGVlbCIsIl9vbldoZWVsIil9LHNjcm9sbFRvU2NhbGVkSW5kZXg6ZnVuY3Rpb24oYSl7dGhpcy5fcGVuZGluZ1Njcm9sbFRvU2NhbGVkSW5kZXg9bnVsbDt0aGlzLiQuaXRlbXMuc3R5bGUuYm9yZGVyVG9wV2lkdGh8fCh0aGlzLl9wZW5kaW5nU2Nyb2xsVG9TY2FsZWRJbmRleD1hKTthPU1hdGgubWluKE1hdGgubWF4KGEsMCksdGhpcy5zaXplLTEpO3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9YS90aGlzLnNpemUqdGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodDt0aGlzLl9zY3JvbGxIYW5kbGVyKCk7dGhpcy5zY3JvbGxUb0luZGV4KGEtdGhpcy5fdmlkeE9mZnNldCk7dGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9zY3JvbGxQb3NpdGlvbik7dGhpcy5fc2Nyb2xsSGFuZGxlcigpO3RoaXMuX3ZpZHhPZmZzZXQrdGhpcy5sYXN0VmlzaWJsZUluZGV4PT09dGhpcy5zaXplLQoxJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcD10aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQsdGhpcy5fc2Nyb2xsSGFuZGxlcigpKX0sX2hhc0ZpeGVkU2VjdGlvbnM6ZnVuY3Rpb24oYSl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2UvKSYmMD09PWF9LF9vbldoZWVsOmZ1bmN0aW9uKGEpe2lmKCFhLmN0cmxLZXkmJiF0aGlzLl9oYXNTY3JvbGxlZEFuY2VzdG9yKGEudGFyZ2V0LGEuZGVsdGFYLGEuZGVsdGFZKSl7dmFyIGM9dGhpcy4kLnRhYmxlLGQ9YS5kZWx0YVk7MT09PWEuZGVsdGFNb2RlJiYoZCo9Z3JpZC4kLnNjcm9sbGVyLl9waHlzaWNhbEF2ZXJhZ2UpO3ZhciBmPU1hdGguYWJzKGEuZGVsdGFYKStNYXRoLmFicyhkKTt0aGlzLl9jYW5TY3JvbGwoYyxhLmRlbHRhWCxkKT8oYS5wcmV2ZW50RGVmYXVsdCgpLGMuc2Nyb2xsVG9wKz1kLGMuc2Nyb2xsTGVmdCs9YS5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLAp0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSEwLHRoaXMuX2lnbm9yZU5ld1doZWVsPXRoaXMuZGVib3VuY2UoImlnbm9yZS1uZXctd2hlZWwiLGZ1bmN0aW9uKCl7dGhpcy5faWdub3JlTmV3V2hlZWw9bnVsbH0sNTAwKSk6dGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bSYmZjw9dGhpcy5fcHJldmlvdXNNb21lbnR1bXx8dGhpcy5faWdub3JlTmV3V2hlZWw/YS5wcmV2ZW50RGVmYXVsdCgpOmY+dGhpcy5fcHJldmlvdXNNb21lbnR1bSYmKHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITEpO3RoaXMuX3ByZXZpb3VzTW9tZW50dW09Zn19LF9oYXNTY3JvbGxlZEFuY2VzdG9yOmZ1bmN0aW9uKGEsYyxkKXtpZih0aGlzLl9jYW5TY3JvbGwoYSxjLGQpKXJldHVybiEwO2lmKCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiIT09YS5sb2NhbE5hbWUmJmEhPT10aGlzJiZhLnBhcmVudEVsZW1lbnQpcmV0dXJuIHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3IoYS5wYXJlbnRFbGVtZW50LGMsZCl9LApfY2FuU2Nyb2xsOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gMDxkJiZhLnNjcm9sbFRvcDxhLnNjcm9sbEhlaWdodC1hLm9mZnNldEhlaWdodHx8MD5kJiYwPGEuc2Nyb2xsVG9wfHwwPGMmJmEuc2Nyb2xsTGVmdDxhLnNjcm9sbFdpZHRoLWEub2Zmc2V0V2lkdGh8fDA+YyYmMDxhLnNjcm9sbExlZnR9LF9zY3JvbGxIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLl9tYXhTY3JvbGxUb3AsdGhpcy5fc2Nyb2xsVG9wKSksYz1hLXRoaXMuX3Njcm9sbFBvc2l0aW9uLGQ9dGhpcy5fcmF0aW8sZj0wLGc9dGhpcy5faGlkZGVuQ29udGVudFNpemUsbD1kLGs9W107dGhpcy5fc2Nyb2xsUG9zaXRpb249YTt0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGw7dmFyIG49dGhpcy5fc2Nyb2xsQm90dG9tO3ZhciBwPXRoaXMuX3BoeXNpY2FsQm90dG9tO2lmKE1hdGguYWJzKGMpPnRoaXMuX3BoeXNpY2FsU2l6ZSl0aGlzLl9waHlzaWNhbFRvcCs9CmMsZj1NYXRoLnJvdW5kKGMvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTtlbHNlIGlmKDA+Yyl7dmFyIHE9YS10aGlzLl9waHlzaWNhbFRvcDtrPXRoaXMuX3ZpcnR1YWxTdGFydDt2YXIgcj1bXTt2YXIgdD10aGlzLl9waHlzaWNhbEVuZDtmb3IobD1xL2c7bDxkJiZmPHRoaXMuX3BoeXNpY2FsQ291bnQmJjA8ay1mJiZwLXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KT5uOylxPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxsKz1xL2cscC09cSxyLnB1c2godCksZisrLHQ9MD09PXQ/dGhpcy5fcGh5c2ljYWxDb3VudC0xOnQtMTtrPXI7Zj0tZn1lbHNlIGlmKDA8Yyl7dmFyIHY9dGhpcy5fdmlydHVhbEVuZCx5PXRoaXMuX3ZpcnR1YWxDb3VudC0xO3I9W107dD10aGlzLl9waHlzaWNhbFN0YXJ0O2ZvcihsPShwLW4pL2c7bDxkJiZmPHRoaXMuX3BoeXNpY2FsQ291bnQmJnYrZjx5JiZ0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCk8CmE7KXE9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLGwrPXEvZyx0aGlzLl9waHlzaWNhbFRvcCs9cSxyLnB1c2godCksZisrLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudH10aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5zaXplJiZ0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQoYyk7MD09PWY/KHA8bnx8dGhpcy5fcGh5c2ljYWxUb3A+YSkmJnRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKCk6KHRoaXMuX3ZpcnR1YWxTdGFydCs9Zix0aGlzLl9waHlzaWNhbFN0YXJ0Kz1mLHRoaXMuX3VwZGF0ZShyLGspKTt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKTt0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHwodGhpcy5zY3JvbGxpbmc9ITApO3RoaXMuZGVib3VuY2UoInZhYWRpbi1ncmlkLXNjcm9sbGluZyIsZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGluZz0hMTt0aGlzLl9yZW9yZGVyUm93cygpfSwxMDApfSxfYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKDFFNDwKTWF0aC5hYnMoYSkpdGhpcy5fbm9TY2FsZT90aGlzLl9ub1NjYWxlPSExOihhPU1hdGgucm91bmQodGhpcy5fc2Nyb2xsUG9zaXRpb24vdGhpcy5fc2Nyb2xsSGVpZ2h0KjFFMykvMUUzLHRoaXMuX3ZpZHhPZmZzZXQ9TWF0aC5yb3VuZChhKnRoaXMuc2l6ZS1hKnRoaXMuX3ZpcnR1YWxDb3VudCksMD09PXRoaXMuX3Njcm9sbFRvcCYmdGhpcy5zY3JvbGxUb0luZGV4KDApKTtlbHNle2E9dGhpcy5fdmlkeE9mZnNldHx8MDswPT09dGhpcy5fc2Nyb2xsVG9wPyh0aGlzLl92aWR4T2Zmc2V0PTAsYSE9PXRoaXMuX3ZpZHhPZmZzZXQmJnRoaXMuc2Nyb2xsVG9JbmRleCgwKSk6MUUzPnRoaXMuZmlyc3RWaXNpYmxlSW5kZXgmJjA8dGhpcy5fdmlkeE9mZnNldCYmKHRoaXMuX3ZpZHhPZmZzZXQtPU1hdGgubWluKHRoaXMuX3ZpZHhPZmZzZXQsMTAwKSx0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCsoYS10aGlzLl92aWR4T2Zmc2V0KSsxKSx0aGlzLl9ub1NjYWxlPQohMCk7dmFyIGM9dGhpcy5zaXplLXRoaXMuX3ZpcnR1YWxDb3VudDt0aGlzLl9zY3JvbGxUb3A+PXRoaXMuX21heFNjcm9sbFRvcD8odGhpcy5fdmlkeE9mZnNldD1jLGEhPT10aGlzLl92aWR4T2Zmc2V0JiZ0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5fdmlydHVhbENvdW50KSk6dGhpcy5maXJzdFZpc2libGVJbmRleD50aGlzLl92aXJ0dWFsQ291bnQtMUUzJiZ0aGlzLl92aWR4T2Zmc2V0PGMmJih0aGlzLl92aWR4T2Zmc2V0Kz1NYXRoLm1pbihjLXRoaXMuX3ZpZHhPZmZzZXQsMTAwKSx0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleC0odGhpcy5fdmlkeE9mZnNldC1hKSksdGhpcy5fbm9TY2FsZT0hMCl9fSxfcmVvcmRlclJvd3M6ZnVuY3Rpb24oKXt2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzLiQuaXRlbXMpLGM9YS5xdWVyeVNlbGVjdG9yQWxsKCIudmFhZGluLWdyaWQtcm93IiksZD1jLmxlbmd0aC0oY1swXS5pbmRleC0odGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3ZpZHhPZmZzZXQpKTsKaWYoZDxjLmxlbmd0aC8yKWZvcih2YXIgZj0wO2Y8ZDtmKyspYS5hcHBlbmRDaGlsZChjW2ZdKTtlbHNlIGZvcig7ZDxjLmxlbmd0aDtkKyspYS5pbnNlcnRCZWZvcmUoY1tkXSxjWzBdKX0sX2Zyb3plbkNlbGxzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoImNhY2hlLWVsZW1lbnRzIixmdW5jdGlvbigpe1BvbHltZXIuZG9tKHRoaXMuZG9tSG9zdC5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCIudmFhZGluLWdyaWQtY2VsbCIpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zdHlsZS50cmFuc2Zvcm09IiJ9KTt0aGlzLl9mcm96ZW5DZWxscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChQb2x5bWVyLmRvbSh0aGlzLmRvbUhvc3Qucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiW2Zyb3plbl0iKSk7dGhpcy5fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCl9KTt0aGlzLl91cGRhdGVMYXN0RnJvemVuKCl9LF91cGRhdGVMYXN0RnJvemVuOmZ1bmN0aW9uKCl7aWYodGhpcy5jb2x1bW5UcmVlKXt2YXIgYT0KdGhpcy5jb2x1bW5UcmVlW3RoaXMuY29sdW1uVHJlZS5sZW5ndGgtMV0uc2xpY2UoMCk7YS5zb3J0KGZ1bmN0aW9uKGQsZil7cmV0dXJuIGQuX29yZGVyLWYuX29yZGVyfSk7dmFyIGM9YS5yZWR1Y2UoZnVuY3Rpb24oZCxmLGcpe2YuX2xhc3RGcm96ZW49ITE7cmV0dXJuIGYuZnJvemVuJiYhZi5oaWRkZW4/ZzpkfSx2b2lkIDApO3ZvaWQgMCE9PWMmJihhW2NdLl9sYXN0RnJvemVuPSEwKX19LF90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHM6ZnVuY3Rpb24oKXt0aGlzLmZpeGVkU2VjdGlvbnM/KHRoaXMuJC5pdGVtcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKC10aGlzLl9zY3JvbGxMZWZ0fHwwLC10aGlzLl9zY3JvbGxUb3B8fDApLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtdGhpcy5fc2Nyb2xsTGVmdHx8MCwwKSk6dGhpcy4kLmZvb3Rlci5zdHlsZS50cmFuc2Zvcm09CnRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgwLHRoaXMuX3Njcm9sbFRvcCk7Zm9yKHZhciBhPXRoaXMuX2dldFRyYW5zbGF0ZSh0aGlzLl9zY3JvbGxMZWZ0LDApLGM9MDtjPHRoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aDtjKyspdGhpcy5fZnJvemVuQ2VsbHNbY10uc3R5bGUudHJhbnNmb3JtPWF9LF9nZXRUcmFuc2xhdGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4idHJhbnNsYXRlKCIrYSsicHgsIitjKyJweCkifX07dmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVTY3JvbGxCZWhhdmlvcj1bUG9seW1lci5Jcm9uU2Nyb2xsVGFyZ2V0QmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVTY3JvbGxCZWhhdmlvckltcGxdOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWNlbGwtY2xpY2stYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuQ2VsbENsaWNrQmVoYXZpb3I9e2xpc3RlbmVyczp7Y2xpY2s6Il9vbkNsaWNrIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jZWxsQ29udGVudEZvY3VzSGFuZGxlcj1mdW5jdGlvbihhKXthLnRhcmdldCE9PXRoaXMuX2NlbGxDb250ZW50JiZ0aGlzLmZpcmUoImNlbGwtY29udGVudC1mb2N1cyIse2NlbGw6dGhpc30pfS5iaW5kKHRoaXMpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2NlbGxDb250ZW50Rm9jdXNIYW5kbGVyLCEwKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9jZWxsQ29udGVudEZvY3VzSGFuZGxlciwhMCl9LF9vbkNsaWNrOmZ1bmN0aW9uKGEpeyJ2YWFkaW4tZ3JpZC1zb3J0ZXIiIT09dGhpcy5sb2NhbE5hbWUmJnRoaXMuZmlyZSgiY2VsbC1mb2N1cyIse2NlbGw6dGhpc30pO2lmKHRoaXMuX2NlbGxDbGljayl7dmFyIGM9UG9seW1lci5kb20oYSkubG9jYWxUYXJnZXQ7CmMuZ2V0RGlzdHJpYnV0ZWROb2RlcyYmKGM9UG9seW1lci5kb20oYykuZ2V0RGlzdHJpYnV0ZWROb2RlcygpWzBdKTt2YXIgZD1Qb2x5bWVyLmRvbShhKS5wYXRoO2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZCwwLGQuaW5kZXhPZihjKSsxKTtjLmNvbnRhaW5zKHRoaXMudGFyZ2V0JiZ0aGlzLnRhcmdldC5yb290LmFjdGl2ZUVsZW1lbnR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHxkLnNvbWUodGhpcy5faXNGb2N1c2FibGUpfHx0aGlzLl9jZWxsQ2xpY2soYSl9fSxfaXNGb2N1c2FibGU6ZnVuY3Rpb24oYSl7dmFyIGM9UG9seW1lci5kb20oYSkucGFyZW50Tm9kZTtjPS0xIT09QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChQb2x5bWVyLmRvbShjKS5xdWVyeVNlbGVjdG9yQWxsKCJbdGFiaW5kZXhdLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBvYmplY3QsIGlmcmFtZSwgbGFiZWwsIGFbaHJlZl0sIGFyZWFbaHJlZl0iKSxhKTtyZXR1cm4hYS5kaXNhYmxlZCYmCmN9fTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC10YWJsZS1jZWxsLmh0bWwuanMKKGZ1bmN0aW9uKCl7dmFyIGE9e3Byb3BlcnRpZXM6e2NvbHVtbjpPYmplY3QsZXhwYW5kZWQ6Qm9vbGVhbixmbGV4R3JvdzpOdW1iZXIsY29sU3BhbjpOdW1iZXIsZm9jdXNlZDp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZnJvemVuOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSxsYXN0RnJvemVuOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSxoaWRkZW46e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGluc3RhbmNlOk9iamVjdCxpbmRleDpOdW1iZXIsaXRlbTpPYmplY3Qsc2VsZWN0ZWQ6Qm9vbGVhbix0ZW1wbGF0ZTpPYmplY3QsdGFyZ2V0Ok9iamVjdCx3aWR0aDpTdHJpbmcsb3JkZXI6TnVtYmVyLHJlb3JkZXJTdGF0dXM6e3R5cGU6U3RyaW5nLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2NoaWxkQ29sdW1uczpBcnJheSxfY2VsbENvbnRlbnQ6T2JqZWN0LF9pbnNlcnRpb25Qb2ludDpPYmplY3QsCl90ZW1wbGF0aXplcjpPYmplY3R9LG9ic2VydmVyczoiX2NvbHVtbkNoYW5nZWQoY29sdW1uKTtfY2VsbEF0dGFjaGVkKGNvbHVtbiwgaXNBdHRhY2hlZCk7X2V4cGFuZGVkQ2hhbmdlZChleHBhbmRlZCwgaW5zdGFuY2UpO19mbGV4R3Jvd0NoYW5nZWQoZmxleEdyb3cpO19pbmRleENoYW5nZWQoaW5kZXgsIGluc3RhbmNlKTtfaXRlbUNoYW5nZWQoaXRlbSwgaW5zdGFuY2UpO19pbnN0YW5jZUNoYW5nZWQoaW5zdGFuY2UsIHRhcmdldCk7X3NlbGVjdGVkQ2hhbmdlZChzZWxlY3RlZCwgaW5zdGFuY2UpO190b2dnbGVDb250ZW50KGlzQXR0YWNoZWQsIF9jZWxsQ29udGVudCwgX2luc2VydGlvblBvaW50KTtfdG9nZ2xlSW5zdGFuY2UoaXNBdHRhY2hlZCwgX3RlbXBsYXRpemVyLCBpbnN0YW5jZSk7X3dpZHRoQ2hhbmdlZCh3aWR0aCk7X29yZGVyQ2hhbmdlZChvcmRlcik7X3Zpc2libGVDaGlsZENvbHVtbnNDaGFuZ2VkKF92aXNpYmxlQ2hpbGRDb2x1bW5zKTtfY2hpbGRDb2x1bW5zQ2hhbmdlZChfY2hpbGRDb2x1bW5zKSIuc3BsaXQoIjsiKSwKcmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmNsYXNzTGlzdC5hZGQoInZhYWRpbi1ncmlkLWNlbGwiKTshMT09PVBvbHltZXIuU2V0dGluZ3MudXNlU2hhZG93JiYodGhpcy5jbGFzc0xpc3QuYWRkKCJzdHlsZS1zY29wZSIpLHRoaXMuY2xhc3NMaXN0LmFkZCgidmFhZGluLWdyaWQiKSl9LF9jb2x1bW5DaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMuZmxleEdyb3c9Yy5mbGV4R3Jvdzt0aGlzLmZyb3plbj1jLmZyb3plbjt0aGlzLmxhc3RGcm96ZW49Yy5fbGFzdEZyb3plbjt0aGlzLmhlYWRlclRlbXBsYXRlPWMuaGVhZGVyVGVtcGxhdGU7dGhpcy5mb290ZXJUZW1wbGF0ZT1jLmZvb3RlclRlbXBsYXRlO3RoaXMudGVtcGxhdGU9Yy50ZW1wbGF0ZTt0aGlzLndpZHRoPWMud2lkdGg7dGhpcy5oaWRkZW49Yy5oaWRkZW47dGhpcy5yZXNpemFibGU9Yy5yZXNpemFibGU7dGhpcy5fY2hpbGRDb2x1bW5zPWMuX2NoaWxkQ29sdW1uczt0aGlzLm9yZGVyPWMuX29yZGVyO2MuY29sU3BhbiYmKHRoaXMuY29sU3Bhbj0KYy5jb2xTcGFuKTt0aGlzLmxpc3RlbihjLCJwcm9wZXJ0eS1jaGFuZ2VkIiwiX2NvbHVtblByb3BDaGFuZ2VkIil9LF9jZWxsQXR0YWNoZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiYoZD90aGlzLmxpc3RlbihjLCJwcm9wZXJ0eS1jaGFuZ2VkIiwiX2NvbHVtblByb3BDaGFuZ2VkIik6dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuaXNBdHRhY2hlZHx8dGhpcy51bmxpc3RlbihjLCJwcm9wZXJ0eS1jaGFuZ2VkIiwiX2NvbHVtblByb3BDaGFuZ2VkIil9KSl9LF9jb2x1bW5Qcm9wQ2hhbmdlZDpmdW5jdGlvbihjKXtjLnRhcmdldD09dGhpcy5jb2x1bW4mJih0aGlzW2MuZGV0YWlsLnBhdGhdPWMuZGV0YWlsLnZhbHVlKX0sX2V4cGFuZGVkQ2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJihkLl9fZXhwYW5kZWRfXz1jLGQuZXhwYW5kZWQ9Yyl9LF9mbGV4R3Jvd0NoYW5nZWQ6ZnVuY3Rpb24oYyl7dGhpcy5zdHlsZS5mbGV4R3Jvdz0KY30sX2luZGV4Q2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJihkLmluZGV4PWMpfSxfaXRlbUNoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiYoZC5pdGVtPWMpfSxfc2VsZWN0ZWRDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKGQuX19zZWxlY3RlZF9fPWMsZC5zZWxlY3RlZD1jKX0sX2NoaWxkQ29sdW1uc0NoYW5nZWQ6ZnVuY3Rpb24oYyl7dGhpcy5jb2xTcGFuPWMubGVuZ3RofSxfdG9nZ2xlQ29udGVudDpmdW5jdGlvbihjLGQsZil7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmdm9pZCAwIT09ZiYmKGM/KFBvbHltZXIuZG9tKGQpLnBhcmVudE5vZGUhPT10aGlzLnRhcmdldCYmUG9seW1lci5kb20odGhpcy50YXJnZXQpLmFwcGVuZENoaWxkKGQpLFBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGYpKTp0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkfHxQb2x5bWVyLmRvbShkKS5wYXJlbnROb2RlIT09CnRoaXMudGFyZ2V0fHxQb2x5bWVyLmRvbSh0aGlzLnRhcmdldCkucmVtb3ZlQ2hpbGQoZCl9KSl9LF90b2dnbGVJbnN0YW5jZTpmdW5jdGlvbihjLGQsZil7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmdm9pZCAwIT09ZiYmKGM/ZC5hZGRJbnN0YW5jZShmKTpkLnJlbW92ZUluc3RhbmNlKGYpKX0sX3dpZHRoQ2hhbmdlZDpmdW5jdGlvbihjKXt0aGlzLnN0eWxlLndpZHRoPWN9LF9vcmRlckNoYW5nZWQ6ZnVuY3Rpb24oYyl7dGhpcy5zdHlsZS5vcmRlcj1jfSxfdGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMuaW5zdGFuY2U9Yy50ZW1wbGF0aXplci5jcmVhdGVJbnN0YW5jZSgpO3RoaXMuX3RlbXBsYXRpemVyPWMudGVtcGxhdGl6ZXJ9LF9pbnN0YW5jZUNoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiYodGhpcy5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5fY2VsbENvbnRlbnQ9dGhpcy5fY2VsbENvbnRlbnR8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZhYWRpbi1ncmlkLWNlbGwtY29udGVudCIpLApjPSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQtIisodmFhZGluLmVsZW1lbnRzLmdyaWQuX2NvbnRlbnRJbmRleD12YWFkaW4uZWxlbWVudHMuZ3JpZC5fY29udGVudEluZGV4KzF8fDApLHRoaXMuX2NlbGxDb250ZW50LmlubmVySFRNTD0iIixQb2x5bWVyLmRvbSh0aGlzLl9jZWxsQ29udGVudCkuYXBwZW5kQ2hpbGQodGhpcy5pbnN0YW5jZS5yb290KSx0aGlzLl9jZWxsQ29udGVudC5zZXRBdHRyaWJ1dGUoImlkIixjKSxQb2x5bWVyLkVsZW1lbnQ/KHRoaXMuX2NlbGxDb250ZW50LnNldEF0dHJpYnV0ZSgic2xvdCIsYyksdGhpcy5faW5zZXJ0aW9uUG9pbnQ9dGhpcy5faW5zZXJ0aW9uUG9pbnR8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNsb3QiKSx0aGlzLl9pbnNlcnRpb25Qb2ludC5zZXRBdHRyaWJ1dGUoIm5hbWUiLGMpKToodGhpcy5faW5zZXJ0aW9uUG9pbnQ9dGhpcy5faW5zZXJ0aW9uUG9pbnR8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbnRlbnQiKSx0aGlzLl9pbnNlcnRpb25Qb2ludC5zZXRBdHRyaWJ1dGUoInNlbGVjdCIsCiIjIitjKSkpfX07UG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlLWNlbGwiLGJlaGF2aW9yczpbYSx2YWFkaW4uZWxlbWVudHMuZ3JpZC5DZWxsQ2xpY2tCZWhhdmlvcl0sb2JzZXJ2ZXJzOlsiX3RlbXBsYXRlQ2hhbmdlZCh0ZW1wbGF0ZSkiXSxfY2VsbENsaWNrOmZ1bmN0aW9uKGMpe2MuZGVmYXVsdFByZXZlbnRlZHx8dGhpcy5maXJlKCJjZWxsLWFjdGl2YXRlIix7bW9kZWw6dGhpcy5pbnN0YW5jZX0pfX0pO1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXItY2VsbCIscHJvcGVydGllczp7aGVhZGVyVGVtcGxhdGU6T2JqZWN0LHJlc2l6YWJsZTpCb29sZWFuLGNvbHVtblJlc2l6aW5nOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfX0sYmVoYXZpb3JzOlthLHZhYWRpbi5lbGVtZW50cy5ncmlkLkNlbGxDbGlja0JlaGF2aW9yXSxvYnNlcnZlcnM6WyJfaGVhZGVyVGVtcGxhdGVDaGFuZ2VkKGhlYWRlclRlbXBsYXRlKSIsIl9pc0VtcHR5Q2hhbmdlZChfaXNFbXB0eSwgaXNBdHRhY2hlZCkiLAoiX3Jlc2l6YWJsZUNoYW5nZWQocmVzaXphYmxlKSJdLGxpc3RlbmVyczp7bW91c2Vkb3duOiJfY2FuY2VsTW91c2VEb3duT25SZXNpemUiLG1vdXNlbW92ZToiX2VuYWJsZURyYWciLG1vdXNlb3V0OiJfZGlzYWJsZURyYWciLHRvdWNoc3RhcnQ6Il9vblRvdWNoU3RhcnQiLHRvdWNobW92ZToiX29uVG91Y2hNb3ZlIix0b3VjaGVuZDoiX29uVG91Y2hFbmQiLGNvbnRleHRtZW51OiJfb25Db250ZXh0TWVudSJ9LF9vbkNvbnRleHRNZW51OmZ1bmN0aW9uKGMpe3RoaXMuX3Jlb3JkZXJHaG9zdCYmYy5wcmV2ZW50RGVmYXVsdCgpfSxfb25Ub3VjaFN0YXJ0OmZ1bmN0aW9uKGMpe2MudGFyZ2V0IT09dGhpcy5fcmVzaXplSGFuZGxlJiZ0aGlzLnRhcmdldC5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZCYmKHRoaXMuX3N0YXJ0UmVvcmRlclRpbWVvdXQ9c2V0VGltZW91dCh0aGlzLl9zdGFydFJlb3JkZXIuYmluZCh0aGlzLGMpLDEwMCkpfSxfc3RhcnRSZW9yZGVyOmZ1bmN0aW9uKGMpe3RoaXMuX3Jlb3JkZXJHaG9zdD0KdGhpcy5fZ2V0R2hvc3QoKTt0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSI7dmFyIGQ9bmV3IEN1c3RvbUV2ZW50KCJkcmFnc3RhcnQiLHtidWJibGVzOiEwfSk7dGhpcy5fY2VsbENvbnRlbnQuZGlzcGF0Y2hFdmVudChkKTt0aGlzLl9yZW9yZGVyWFk9e3g6Yy50b3VjaGVzWzBdLmNsaWVudFgtdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHk6Yy50b3VjaGVzWzBdLmNsaWVudFktdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9O3RoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24oYy50b3VjaGVzWzBdLmNsaWVudFgsYy50b3VjaGVzWzBdLmNsaWVudFkpfSxfb25Ub3VjaE1vdmU6ZnVuY3Rpb24oYyl7aWYodGhpcy5fcmVvcmRlckdob3N0KXtjLnByZXZlbnREZWZhdWx0KCk7dmFyIGQ9bmV3IEN1c3RvbUV2ZW50KCJkcmFnb3ZlciIse2J1YmJsZXM6ITB9KTtkLmNsaWVudFg9Yy50b3VjaGVzWzBdLmNsaWVudFg7ZC5jbGllbnRZPQpjLnRvdWNoZXNbMF0uY2xpZW50WTt2YXIgZj10aGlzLl9jb250ZW50RnJvbVBvaW50KGQuY2xpZW50WCxkLmNsaWVudFkpO2YmJmYuZGlzcGF0Y2hFdmVudChkKTt0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKGMudG91Y2hlc1swXS5jbGllbnRYLGMudG91Y2hlc1swXS5jbGllbnRZKX1lbHNlIGNsZWFyVGltZW91dCh0aGlzLl9zdGFydFJlb3JkZXJUaW1lb3V0KX0sX3VwZGF0ZUdob3N0UG9zaXRpb246ZnVuY3Rpb24oYyxkKXtjLT10aGlzLl9yZW9yZGVyWFkueDtkPWQtdGhpcy5fcmVvcmRlclhZLnktNTA7dmFyIGY9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLmxlZnR8fDApLGc9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRvcHx8MCksbD10aGlzLl9yZW9yZGVyR2hvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLmxlZnQ9Zi0obC5sZWZ0LWMpKyJweCI7dGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRvcD0KZy0obC50b3AtZCkrInB4In0sX29uVG91Y2hFbmQ6ZnVuY3Rpb24oYyl7Y2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0UmVvcmRlclRpbWVvdXQpO3RoaXMuX3Jlb3JkZXJHaG9zdCYmKGMucHJldmVudERlZmF1bHQoKSxjPW5ldyBDdXN0b21FdmVudCgiZHJhZ2VuZCIse2J1YmJsZXM6ITB9KSx0aGlzLmRpc3BhdGNoRXZlbnQoYyksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fcmVvcmRlckdob3N0PW51bGwpfSxfY29udGVudEZyb21Qb2ludDpmdW5jdGlvbihjLGQpe2lmKFBvbHltZXIuU2V0dGluZ3MudXNlU2hhZG93KXt2YXIgZj10aGlzLnRhcmdldC4kLnNjcm9sbGVyO2YudG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMCk7Yz10aGlzLmRvbUhvc3Qucm9vdC5lbGVtZW50RnJvbVBvaW50KGMsZCk7Zi50b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCExKTtpZihjJiZjLmdldENvbnRlbnRDaGlsZHJlbilyZXR1cm4gYy5nZXRDb250ZW50Q2hpbGRyZW4oUG9seW1lci5FbGVtZW50Pwoic2xvdCI6ImNvbnRlbnQiKVswXX1lbHNlIHJldHVybiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGMsZCl9LF9nZXRHaG9zdDpmdW5jdGlvbigpe3ZhciBjPXRoaXMudGFyZ2V0LiQuc2Nyb2xsZXIuJC5yZW9yZGVyZ2hvc3Q7Yy5pbm5lclRleHQ9dGhpcy5fY2VsbENvbnRlbnQuaW5uZXJUZXh0O3ZhciBkPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX2NlbGxDb250ZW50KTsiYm94U2l6aW5nIGRpc3BsYXkgd2lkdGggaGVpZ2h0IGJhY2tncm91bmQgYWxpZ25JdGVtcyBwYWRkaW5nIGJvcmRlciBmbGV4LWRpcmVjdGlvbiBvdmVyZmxvdyIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2Muc3R5bGVbZl09ZFtmXX0sdGhpcyk7cmV0dXJuIGN9LF9lbmFibGVEcmFnOmZ1bmN0aW9uKCl7dGhpcy5fY2VsbENvbnRlbnQuZHJhZ2dhYmxlPXRoaXMudGFyZ2V0LmNvbHVtblJlb3JkZXJpbmdBbGxvd2VkJiYhd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCl9LF9kaXNhYmxlRHJhZzpmdW5jdGlvbigpe3RoaXMuX2NlbGxDb250ZW50LmRyYWdnYWJsZT0KITF9LF9jYW5jZWxNb3VzZURvd25PblJlc2l6ZTpmdW5jdGlvbihjKXtjLnRhcmdldD09PXRoaXMuX3Jlc2l6ZUhhbmRsZSYmYy5wcmV2ZW50RGVmYXVsdCgpfSxfcmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihjKXtjPyh0aGlzLl9yZXNpemVIYW5kbGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fcmVzaXplSGFuZGxlLmNsYXNzTGlzdC5hZGQoInZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlIiksdGhpcy5saXN0ZW4odGhpcy5fcmVzaXplSGFuZGxlLCJ0cmFjayIsIl9vblRyYWNrIiksUG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5fcmVzaXplSGFuZGxlKSk6dGhpcy5fcmVzaXplSGFuZGxlJiYodGhpcy51bmxpc3Rlbih0aGlzLl9yZXNpemVIYW5kbGUsInRyYWNrIiwiX29uVHJhY2siKSxQb2x5bWVyLmRvbSh0aGlzKS5yZW1vdmVDaGlsZCh0aGlzLl9yZXNpemVIYW5kbGUpKX0sX29uVHJhY2s6ZnVuY3Rpb24oYyl7dGhpcy5jb2x1bW5SZXNpemluZz0KITA7dmFyIGQ9dGhpcy5jb2x1bW47InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT1kLmxvY2FsTmFtZSYmKGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZC5fY2hpbGRDb2x1bW5zLDApLnNvcnQoZnVuY3Rpb24obCxrKXtyZXR1cm4gbC5fb3JkZXItay5fb3JkZXJ9KS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIWwuaGlkZGVufSkucG9wKCkpO3ZhciBmPXRoaXMuX2dldEhlYWRlckNlbGxCeUNvbHVtbihkKTtpZihmLm9mZnNldFdpZHRoKXt2YXIgZz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLl9jZWxsQ29udGVudCk7ZC53aWR0aD1NYXRoLm1heCgxMCtwYXJzZUludChnLnBhZGRpbmdMZWZ0KStwYXJzZUludChnLnBhZGRpbmdSaWdodCksZi5vZmZzZXRXaWR0aCtjLmRldGFpbC54LWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpKyJweCI7ZC5mbGV4R3Jvdz0wfUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFBvbHltZXIuZG9tKHRoaXMucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIudmFhZGluLWdyaWQtcm93Omxhc3QtY2hpbGQgLnZhYWRpbi1ncmlkLWNlbGwiKSkuc29ydChmdW5jdGlvbihsLAprKXtyZXR1cm4gbC5jb2x1bW4uX29yZGVyLWsuY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24obCxrLG4pe2s8bi5pbmRleE9mKGYpJiYobC5jb2x1bW4ud2lkdGg9bC5vZmZzZXRXaWR0aCsicHgiLGwuY29sdW1uLmZsZXhHcm93PTApfSk7dGhpcy5jb2x1bW5SZXNpemluZyYmImVuZCI9PT1jLmRldGFpbC5zdGF0ZSYmKHRoaXMuY29sdW1uUmVzaXppbmc9ITEpO3RoaXMuZmlyZSgiY29sdW1uLXJlc2l6aW5nIil9LF9nZXRIZWFkZXJDZWxsQnlDb2x1bW46ZnVuY3Rpb24oYyl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChQb2x5bWVyLmRvbSh0aGlzLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLXJvdzpsYXN0LWNoaWxkIC52YWFkaW4tZ3JpZC1jZWxsIiksZnVuY3Rpb24oZCl7cmV0dXJuIGQuY29sdW1uPT09Y30pWzBdfSxfaGVhZGVyVGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGMpe3ZvaWQgMCE9PQpjJiYobnVsbD09PWN8fCF0aGlzLl9pc0NvbHVtblJvdyYmInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIhPT10aGlzLmNvbHVtbi5sb2NhbE5hbWU/KHRoaXMuaW5zdGFuY2U9e3Jvb3Q6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9LHRoaXMuX2lzRW1wdHk9ITApOih0aGlzLmluc3RhbmNlPWMudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKSx0aGlzLl90ZW1wbGF0aXplcj1jLnRlbXBsYXRpemVyLHRoaXMuX2lzRW1wdHk9ITEpKX0sX2lzRW1wdHlDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7ZCYmdGhpcy5maXJlKCJjZWxsLWVtcHR5LWNoYW5nZWQiKX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtZm9vdGVyLWNlbGwiLHByb3BlcnRpZXM6e2Zvb3RlclRlbXBsYXRlOk9iamVjdH0sYmVoYXZpb3JzOlthLHZhYWRpbi5lbGVtZW50cy5ncmlkLkNlbGxDbGlja0JlaGF2aW9yXSxvYnNlcnZlcnM6WyJfZm9vdGVyVGVtcGxhdGVDaGFuZ2VkKGZvb3RlclRlbXBsYXRlKSIsCiJfaXNFbXB0eUNoYW5nZWQoX2lzRW1wdHksIGlzQXR0YWNoZWQpIl0sX2Zvb3RlclRlbXBsYXRlQ2hhbmdlZDpmdW5jdGlvbihjKXt2b2lkIDAhPT1jJiYobnVsbD09PWN8fCF0aGlzLl9pc0NvbHVtblJvdyYmInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIhPT10aGlzLmNvbHVtbi5sb2NhbE5hbWU/KHRoaXMuaW5zdGFuY2U9e3Jvb3Q6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9LHRoaXMuX2lzRW1wdHk9ITApOih0aGlzLmluc3RhbmNlPWMudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKSx0aGlzLl90ZW1wbGF0aXplcj1jLnRlbXBsYXRpemVyLHRoaXMuX2lzRW1wdHk9ITEpKX0sX2lzRW1wdHlDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7ZCYmdGhpcy5maXJlKCJjZWxsLWVtcHR5LWNoYW5nZWQiKX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtc2l6ZXItY2VsbCIsYmVoYXZpb3JzOlthXX0pfSkoKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1zaXplci5odG1sLmpzClBvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC1zaXplciIscHJvcGVydGllczp7Y29sdW1uVHJlZTpBcnJheSx0b3A6TnVtYmVyLF9jb2x1bW5zOkFycmF5fSxvYnNlcnZlcnM6WyJfY29sdW1uVHJlZUNoYW5nZWQoY29sdW1uVHJlZSkiLCJfdG9wQ2hhbmdlZCh0b3ApIl0sX2NvbHVtblRyZWVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuX2NvbHVtbnM9YVthLmxlbmd0aC0xXX0sX3RvcENoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5zdHlsZS50b3A9YSsicHgifX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyLmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyIixwcm9wZXJ0aWVzOntzY3JvbGxUYXJnZXQ6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc2Nyb2xsVGFyZ2V0Q2hhbmdlZCJ9LHBhc3N0aHJvdWdoOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiEwfX0sbGlzdGVuZXJzOntzY3JvbGw6Il9zeW5jU2Nyb2xsVGFyZ2V0In0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmxpc3Rlbih0aGlzLmRvbUhvc3QsIm1vdXNlbW92ZSIsIl9vbk1vdXNlTW92ZSIpO3RoaXMuc3R5bGUud2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc9InRvdWNoIn0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVubGlzdGVuKHRoaXMuZG9tSG9zdCwibW91c2Vtb3ZlIiwiX29uTW91c2VNb3ZlIil9LF9zY3JvbGxUYXJnZXRDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmdGhpcy51bmxpc3RlbihjLCJzY3JvbGwiLCJfc3luY091dGVyU2Nyb2xsZXIiKTt0aGlzLmxpc3RlbihhLAoic2Nyb2xsIiwiX3N5bmNPdXRlclNjcm9sbGVyIil9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbihhKXt0aGlzLnBhc3N0aHJvdWdoPWEub2Zmc2V0WTw9dGhpcy5jbGllbnRIZWlnaHQmJmEub2Zmc2V0WDw9dGhpcy5jbGllbnRXaWR0aH0sX3N5bmNPdXRlclNjcm9sbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc3luY2luZ1Njcm9sbFRhcmdldHx8KHRoaXMuX3N5bmNpbmdPdXRlclNjcm9sbGVyPSEwLHRoaXMuc2Nyb2xsVG9wPXRoaXMuZG9tSG9zdC5fc2Nyb2xsVG9wLHRoaXMuc2Nyb2xsTGVmdD10aGlzLmRvbUhvc3QuX3Njcm9sbExlZnQpO3RoaXMuX3N5bmNpbmdTY3JvbGxUYXJnZXQ9ITF9LF9zeW5jU2Nyb2xsVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5fc3luY2luZ091dGVyU2Nyb2xsZXJ8fCh0aGlzLl9zeW5jaW5nU2Nyb2xsVGFyZ2V0PSEwLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxMZWZ0PXRoaXMuc2Nyb2xsTGVmdCwKdGhpcy5kb21Ib3N0Ll9zY3JvbGxIYW5kbGVyKCkpO3RoaXMuX3N5bmNpbmdPdXRlclNjcm9sbGVyPSExfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWZvY3VzYWJsZS1jZWxsLWNvbnRhaW5lci1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5Gb2N1c2FibGVDZWxsQ29udGFpbmVyQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9mb2N1c2VkUm93Ok9iamVjdCxfZm9jdXNlZFJvd0luZGV4Ok51bWJlcixfZm9jdXNlZENlbGw6T2JqZWN0LF9mb2N1c2VkQ2VsbEluZGV4Ok51bWJlcixfbGFzdEZvY3VzZWRDZWxsOk9iamVjdH0sb2JzZXJ2ZXJzOlsiX2Fubm91bmNlRm9jdXNlZENlbGwoX2ZvY3VzZWRDZWxsLCBmb2N1c2VkKSIsIl9kaXNwYXRjaEV2ZW50cyhfZm9jdXNlZENlbGwsIGZvY3VzZWQpIiwiX2ZvY3VzZWRDZWxsQ2hhbmdlZChfZm9jdXNlZFJvd0luZGV4LCBfZm9jdXNlZENlbGxJbmRleCkiXSxfYW5ub3VuY2VGb2N1c2VkQ2VsbDpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWMmJnRoaXMuZG9tSG9zdC5uYXZpZ2F0aW5nJiZjJiYoYz1Qb2x5bWVyLkVsZW1lbnQ/YS5fY2VsbENvbnRlbnQuZ2V0QXR0cmlidXRlKCJzbG90Iik6CmEuX2NlbGxDb250ZW50LmlkLCJ2YWFkaW4tZ3JpZC10YWJsZS1ib2R5IiE9PXRoaXMuaXN8fGEuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpfHwoYT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKFBvbHltZXIuZG9tKGEucGFyZW50RWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLWNlbGwiKSxhKSxjPXRoaXMuZG9tSG9zdC4kLmhlYWRlci5sYXN0RWxlbWVudENoaWxkLmNoaWxkcmVuW2FdLl9jZWxsQ29udGVudC5pZCsiICIrYyksdGhpcy5kb21Ib3N0LiQuZm9vdGVyRm9jdXNUcmFwLmFjdGl2ZVRhcmdldD1jKX0sX2Rpc3BhdGNoRXZlbnRzOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmKHRoaXMuX2xhc3RGb2N1c2VkQ2VsbCYmKHRoaXMuX2xhc3RGb2N1c2VkQ2VsbC5fY2VsbENvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNvdXQiKSksdGhpcy5fbGFzdEZvY3VzZWRDZWxsPXZvaWQgMCksCmMmJihhLl9jZWxsQ29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c2luIikpLHRoaXMuX2xhc3RGb2N1c2VkQ2VsbD1hKSl9LF9mb2N1c2VkQ2VsbENoYW5nZWQ6ZnVuY3Rpb24oYSxjKXt2b2lkIDAhPT1hJiZ2b2lkIDAhPT1jJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFBvbHltZXIuZG9tKHRoaXMpLmNoaWxkcmVuLGZ1bmN0aW9uKGQsZil7ZC5mb2N1c2VkPWY9PT1hO2QuZm9jdXNlZCYmKHRoaXMuX2ZvY3VzZWRSb3c9ZCx0aGlzLl9mb2N1c2VkQ2VsbEluZGV4PU1hdGgubWluKGMsZC5jaGlsZHJlbi5sZW5ndGgtMSksdGhpcy5fZm9jdXNlZENlbGw9ZC5jaGlsZHJlblt0aGlzLl9mb2N1c2VkQ2VsbEluZGV4XSk7ZC5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGcsbCl7Zy5mb2N1c2VkPWw9PT10aGlzLl9mb2N1c2VkQ2VsbEluZGV4fS5iaW5kKHRoaXMpKX0uYmluZCh0aGlzKSl9LGZvY3VzTGVmdDpmdW5jdGlvbigpe2lmKCF0aGlzLl9mb2N1c2VkQ2VsbC5oYXNBdHRyaWJ1dGUoImRldGFpbHNjZWxsIikpe3ZhciBhPQp0aGlzLl92aXNpYmxlQ2VsbEluZGV4ZXMoKTswPGEubGVuZ3RoJiYodGhpcy5fZm9jdXNlZENlbGxJbmRleD1hW01hdGgubWF4KDAsYS5pbmRleE9mKHRoaXMuX2ZvY3VzZWRDZWxsSW5kZXgpLTEpXSl9fSxmb2N1c0Rvd246ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9TWF0aC5taW4odGhpcy5fZm9jdXNlZFJvd0luZGV4KzEsdGhpcy5jaGlsZHJlbi5sZW5ndGgtMSl9LF92aXNpYmxlQ2VsbEluZGV4ZXM6ZnVuY3Rpb24oKXt2YXIgYT1bXTtpZih0aGlzLl9mb2N1c2VkUm93JiZ0aGlzLl9mb2N1c2VkUm93LmNoaWxkcmVuKXtmb3IodmFyIGM9dGhpcy5fZm9jdXNlZFJvdy5jaGlsZHJlbixkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXS5oaWRkZW58fGNbZF09PT10aGlzLl9mb2N1c2VkUm93Ll9yb3dEZXRhaWxzQ2VsbHx8YS5wdXNoKGQpO2Euc29ydChmdW5jdGlvbihmLGcpe3JldHVybiBjW2ZdLmNvbHVtbi5fb3JkZXI8Y1tnXS5jb2x1bW4uX29yZGVyPy0xOjF9KX1yZXR1cm4gYX0sCmZvY3VzUGFnZURvd246ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9TWF0aC5taW4odGhpcy5fZm9jdXNlZFJvd0luZGV4KzEwLHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpfSxmb2N1c1BhZ2VVcDpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWRSb3dJbmRleD1NYXRoLm1heCgwLHRoaXMuX2ZvY3VzZWRSb3dJbmRleC0xMCl9LGZvY3VzUmlnaHQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZENlbGwuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpKXt2YXIgYT10aGlzLl92aXNpYmxlQ2VsbEluZGV4ZXMoKTswPGEubGVuZ3RoJiYodGhpcy5fZm9jdXNlZENlbGxJbmRleD1hW01hdGgubWluKGEuaW5kZXhPZih0aGlzLl9mb2N1c2VkQ2VsbEluZGV4KSsxLGEubGVuZ3RoLTEpXSl9fSxmb2N1c1VwOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWF4KDAsdGhpcy5fZm9jdXNlZFJvd0luZGV4LTEpfSxmb2N1c0hvbWU6ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZENlbGwuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpKXt2YXIgYT0KdGhpcy5fdmlzaWJsZUNlbGxJbmRleGVzKCk7MDxhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzZWRDZWxsSW5kZXg9YVswXSl9fSxmb2N1c0VuZDpmdW5jdGlvbigpe2lmKCF0aGlzLl9mb2N1c2VkQ2VsbC5oYXNBdHRyaWJ1dGUoImRldGFpbHNjZWxsIikpe3ZhciBhPXRoaXMuX3Zpc2libGVDZWxsSW5kZXhlcygpOzA8YS5sZW5ndGgmJih0aGlzLl9mb2N1c2VkQ2VsbEluZGV4PWFbYS5sZW5ndGgtMV0pfX0sZm9jdXNGaXJzdDpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWRSb3dJbmRleD0wO3RoaXMuZm9jdXNIb21lKCl9LGZvY3VzTGFzdDpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWRSb3dJbmRleD10aGlzLmNoaWxkcmVuLmxlbmd0aC0xO3RoaXMuZm9jdXNFbmQoKX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlci1mb290ZXIuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT17cHJvcGVydGllczp7Y29sdW1uVHJlZTpBcnJheSx0YXJnZXQ6T2JqZWN0LF9yb3dzOkFycmF5fSxvYnNlcnZlcnM6WyJfY29sdW1uVHJlZUNoYW5nZWQoY29sdW1uVHJlZSwgdGFyZ2V0KSIsIl9yb3dzQ2hhbmdlZChfcm93cykiXSxfY29sdW1uVHJlZUNoYW5nZWQ6ZnVuY3Rpb24oYyxkKXtpZih2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kKXt0aGlzLl9yb3dzJiZ0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oayl7UG9seW1lci5kb20oaykuaW5uZXJIVE1MPSIifSk7Zm9yKHZhciBmPVtdLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIGw9dGhpcy5fY3JlYXRlUm93KCk7bC50YXJnZXQ9ZDtsLl9pc0NvbHVtblJvdz1nPT1jLmxlbmd0aC0xO2wuY29sdW1ucz1jW2ddO2YucHVzaChsKX10aGlzLl9yb3dzPSJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXIiPT09dGhpcy5sb2NhbE5hbWU/ZjpmLnJldmVyc2UoKX19LF9yb3dzQ2hhbmdlZDpmdW5jdGlvbihjKXtQb2x5bWVyLmRvbSh0aGlzKS5pbm5lckhUTUw9CiIiO2MuZm9yRWFjaChmdW5jdGlvbihkKXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChkKX0uYmluZCh0aGlzKSl9fTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtaGVhZGVyIixiZWhhdmlvcnM6W2EsdmFhZGluLmVsZW1lbnRzLmdyaWQuRm9jdXNhYmxlQ2VsbENvbnRhaW5lckJlaGF2aW9yXSxfY3JlYXRlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlci1yb3ciKX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtYm9keSIsYmVoYXZpb3JzOlt2YWFkaW4uZWxlbWVudHMuZ3JpZC5Gb2N1c2FibGVDZWxsQ29udGFpbmVyQmVoYXZpb3JdLG9ic2VydmVyczpbIl9hbm5vdW5jZUZvY3VzZWRSb3coX2ZvY3VzZWRSb3cpIl0sX2Fubm91bmNlRm9jdXNlZFJvdzpmdW5jdGlvbihjKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OiJSb3cgIisoYy5pbmRleCsxKSsiIG9mICIrCnRoaXMuZG9tSG9zdC5zaXplfSl9LF9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZENlbGwuZm9jdXNlZD0hMTt0aGlzLl9mb2N1c2VkUm93Ll9yb3dEZXRhaWxzQ2VsbC5mb2N1c2VkPSEwO3RoaXMuX2ZvY3VzZWRDZWxsPXRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsfSxfZm9jdXNlZFJvd0hhc0RldGFpbHNDZWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWRSb3cmJnRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsJiZ0aGlzLl9mb2N1c2VkQ2VsbCE9PXRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsfSxmb2N1c0Rvd246ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SGFzRGV0YWlsc0NlbGwoKT90aGlzLl9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsKCk6dGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWluKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCsxLHRoaXMuZG9tSG9zdC5zaXplLTEpfSxmb2N1c1VwOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZFJvdyYmCnRoaXMuX2ZvY3VzZWRDZWxsPT09dGhpcy5fZm9jdXNlZFJvdy5fcm93RGV0YWlsc0NlbGw/dGhpcy5fZm9jdXNlZENlbGxDaGFuZ2VkKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCx0aGlzLl9mb2N1c2VkQ2VsbEluZGV4KToodGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWF4KDAsdGhpcy5fZm9jdXNlZFJvd0luZGV4LTEpLHRoaXMuX2ZvY3VzZWRSb3dIYXNEZXRhaWxzQ2VsbCgpJiZ0aGlzLl9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsKCkpfSxmb2N1c0xhc3Q6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9dGhpcy5kb21Ib3N0LnNpemUtMTt0aGlzLmZvY3VzRW5kKCl9LF9mb2N1c2VkQ2VsbENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFBvbHltZXIuZG9tKHRoaXMpLmNoaWxkcmVuLGZ1bmN0aW9uKGYpe2YuZm9jdXNlZD1mLmluZGV4PT09YztmLmluZGV4PT09YyYmKHRoaXMuX2ZvY3VzZWRSb3c9CmYsdGhpcy5fZm9jdXNlZENlbGw9Zi5jaGlsZHJlbltkXSk7Zi5pdGVyYXRlQ2VsbHMoZnVuY3Rpb24oZyxsKXtnLmZvY3VzZWQ9bD09PWR9KX0uYmluZCh0aGlzKSl9fSk7UG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlLWZvb3RlciIsYmVoYXZpb3JzOlthLHZhYWRpbi5lbGVtZW50cy5ncmlkLkZvY3VzYWJsZUNlbGxDb250YWluZXJCZWhhdmlvcl0sX2NyZWF0ZVJvdzpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXItcm93Iil9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLWZvY3VzLXRyYXAuaHRtbC5qcwpQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtZm9jdXMtdHJhcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImdyaWRjZWxsIn0scHJvcGVydGllczp7YWN0aXZlVGFyZ2V0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FjdGl2ZVRhcmdldENoYW5nZWQifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9wcmltYXJ5PVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcigiLnByaW1hcnkiKTt0aGlzLl9zZWNvbmRhcnk9UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCIuc2Vjb25kYXJ5Iik7aWYoUG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVTaGFkb3d8fFBvbHltZXIuU2V0dGluZ3MudXNlU2hhZG93KVBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuX3NlY29uZGFyeSksUG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5fcHJpbWFyeSl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZCE9PXRoaXMuX3ByaW1hcnk/dGhpcy5fcHJpbWFyeS5mb2N1cygpOgp0aGlzLl9zZWNvbmRhcnkuZm9jdXMoKX0sX29uQmFpdEZvY3VzOmZ1bmN0aW9uKGEpe3RoaXMuX2ZvY3VzZWQ9YS50YXJnZXQ7dGhpcy5fbW92aW5nRm9jdXNJbnRlcm5hbGx5fHwodGhpcy5maXJlKCJmb2N1cy1nYWluZWQiKSx0aGlzLl9wcmltYXJ5LnRhYkluZGV4PS0xKX0sX29uQmFpdEJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHl8fCh0aGlzLmZpcmUoImZvY3VzLWxvc3QiKSx0aGlzLl9wcmltYXJ5LnRhYkluZGV4PTApfSxfYWN0aXZlVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHk9ITA7dGhpcy5fZm9jdXNlZD09PXRoaXMuX3ByaW1hcnk/KHRoaXMuX3NlY29uZGFyeS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsYSksdGhpcy5fc2Vjb25kYXJ5LmZvY3VzKCkpOih0aGlzLl9wcmltYXJ5LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IixhKSx0aGlzLl9wcmltYXJ5LmZvY3VzKCkpOwp0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHk9ITF9LF9yZWFubm91bmNlOmZ1bmN0aW9uKCl7dGhpcy5fbW92aW5nRm9jdXNJbnRlcm5hbGx5PSEwO3RoaXMuX2ZvY3VzZWQ9PT10aGlzLl9wcmltYXJ5Pyh0aGlzLl9zZWNvbmRhcnkuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLHRoaXMuYWN0aXZlVGFyZ2V0KSx0aGlzLl9zZWNvbmRhcnkuZm9jdXMoKSk6KHRoaXMuX3ByaW1hcnkuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLHRoaXMuYWN0aXZlVGFyZ2V0KSx0aGlzLl9wcmltYXJ5LmZvY3VzKCkpO3RoaXMuX21vdmluZ0ZvY3VzSW50ZXJuYWxseT0hMX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC10YWJsZS1yb3cuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT17cHJvcGVydGllczp7YWN0aXZlOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSxjb2x1bW5zOkFycmF5LGluZGV4Ok51bWJlcixjZWxsczp7dmFsdWU6W119LHRhcmdldDpPYmplY3QsZXhwYW5kZWQ6e3ZhbHVlOiExfSxmb2N1c2VkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpdGVtOk9iamVjdCxzZWxlY3RlZDp7cmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfcm93RGV0YWlsc0NlbGw6T2JqZWN0LHJvd0RldGFpbHNUZW1wbGF0ZTpPYmplY3R9LG9ic2VydmVyczoiX2NvbHVtbnNDaGFuZ2VkKGNvbHVtbnMsIHRhcmdldCk7X2luZGV4Q2hhbmdlZChpbmRleCwgY2VsbHMpO19pdGVtQ2hhbmdlZChpdGVtLCBjZWxscyk7X2l0ZW1DaGFuZ2VkRm9yRGV0YWlscyhpdGVtLCBfcm93RGV0YWlsc0NlbGwpO19yb3dEZXRhaWxzQ2hhbmdlZChleHBhbmRlZCwgcm93RGV0YWlsc1RlbXBsYXRlLCB0YXJnZXQpO19yb3dEZXRhaWxzQ2VsbEluZGV4Q2hhbmdlZChfcm93RGV0YWlsc0NlbGwsIGluZGV4KTtfcm93RGV0YWlsc0NlbGxDaGFuZ2VkKF9yb3dEZXRhaWxzQ2VsbCwgdGFyZ2V0KTtfc2VsZWN0ZWRDaGFuZ2VkKHNlbGVjdGVkLCBjZWxscyk7X3NlbGVjdGVkQ2hhbmdlZEZvckRldGFpbHMoc2VsZWN0ZWQsIF9yb3dEZXRhaWxzQ2VsbCkiLnNwbGl0KCI7IiksCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QuYWRkKCJ2YWFkaW4tZ3JpZC1yb3ciKTshMT09PVBvbHltZXIuU2V0dGluZ3MudXNlU2hhZG93JiYodGhpcy5jbGFzc0xpc3QuYWRkKCJzdHlsZS1zY29wZSIpLHRoaXMuY2xhc3NMaXN0LmFkZCgidmFhZGluLWdyaWQiKSl9LGl0ZXJhdGVDZWxsczpmdW5jdGlvbihjKXt0aGlzLmNlbGxzLmZvckVhY2goYyk7dGhpcy5fcm93RGV0YWlsc0NlbGwmJmModGhpcy5fcm93RGV0YWlsc0NlbGwpfSxfcm93RGV0YWlsc0NoYW5nZWQ6ZnVuY3Rpb24oYyxkLGYpe2lmKHZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJnZvaWQgMCE9PWYpe2lmKGMpe3ZhciBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZhYWRpbi1ncmlkLXRhYmxlLWNlbGwiKTtnLnNldEF0dHJpYnV0ZSgiZGV0YWlsc2NlbGwiLCEwKTtnLmZyb3plbj0hMDtnLnRhcmdldD1mO2cudGVtcGxhdGU9ZDtnLnRvZ2dsZUF0dHJpYnV0ZSgibGFzdGNvbHVtbiIsITApO1BvbHltZXIuZG9tKHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQoZyk7ClBvbHltZXIuZG9tLmZsdXNoKCk7dGhpcy5fcm93RGV0YWlsc0NlbGw9Z31lbHNlIHRoaXMuX3Jvd0RldGFpbHNDZWxsJiYoUG9seW1lci5kb20odGhpcy5yb290KS5yZW1vdmVDaGlsZCh0aGlzLl9yb3dEZXRhaWxzQ2VsbCksdGhpcy5fcm93RGV0YWlsc0NlbGw9bnVsbCk7dGhpcy5pdGVyYXRlQ2VsbHMoZnVuY3Rpb24obCl7bC5leHBhbmRlZD1jfSk7dGhpcy50YXJnZXQuJC5zY3JvbGxlci5fZnJvemVuQ2VsbHNDaGFuZ2VkKCl9fSxfdXBkYXRlUm93VmlzaWJpbGl0eTpmdW5jdGlvbigpe3RoaXMuaGlkZGVuPXRoaXMuY2VsbHMuZXZlcnkoZnVuY3Rpb24oYyl7cmV0dXJuIGMuX2lzRW1wdHl9KX0sX3Jvd0RldGFpbHNDZWxsQ2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJmQuJC5zY3JvbGxlci5fdXBkYXRlKCl9LF9yb3dEZXRhaWxzQ2VsbEluZGV4Q2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJihjPyhjLmluZGV4PQpkLFBvbHltZXIuZG9tLmZsdXNoKCksdGhpcy51cGRhdGVSb3dEZXRhaWxzQ2VsbE1ldHJpY3MoKSk6dGhpcy5zdHlsZS5wYWRkaW5nQm90dG9tPSIiKX0sdXBkYXRlUm93RGV0YWlsc0NlbGxNZXRyaWNzOmZ1bmN0aW9uKCl7dGhpcy5fcm93RGV0YWlsc0NlbGwmJih0aGlzLnRhcmdldCYmdGhpcy50YXJnZXQuX29ic2VydmVyJiZ0aGlzLnRhcmdldC5fb2JzZXJ2ZXIuZmx1c2gmJnRoaXMudGFyZ2V0Ll9vYnNlcnZlci5mbHVzaCgpLHRoaXMuX3Jvd0RldGFpbHNDZWxsLnN0eWxlLmhlaWdodD0iIix0aGlzLnN0eWxlLnBhZGRpbmdCb3R0b209dGhpcy5fcm93RGV0YWlsc0NlbGwuc3R5bGUuaGVpZ2h0PXRoaXMuX3Jvd0RldGFpbHNDZWxsLmNsaWVudEhlaWdodCsicHgiKX0sX2NvbHVtbnNDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7aWYodm9pZCAwIT09YyYmdm9pZCAwIT09ZCl7UG9seW1lci5kb20odGhpcykuaW5uZXJIVE1MPSIiO3ZhciBmPVtdO2MuZm9yRWFjaChmdW5jdGlvbihnKXt2YXIgbD0KIl8iK3RoaXMuaXMucmVwbGFjZSgvLS9nLCJfIikrIl9jZWxscyI7bD1nW2xdPWdbbF18fFtdO3ZhciBrPWwuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiFQb2x5bWVyLmRvbShwKS5wYXJlbnROb2RlfSlbMF07aWYoIWspe2s9dGhpcy5fY3JlYXRlQ2VsbCgpO3ZhciBuPUFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwodGhpcy50YXJnZXQucXVlcnlTZWxlY3RvckFsbCgiZG9tLXJlcGVhdCIpLGZ1bmN0aW9uKHApe3JldHVybiFwLnJlc3RhbXB9KTsobj1ufHwidmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLXJvdyI9PT10aGlzLmlzfHwidmFhZGluLWdyaWQtdGFibGUtZm9vdGVyLXJvdyI9PT10aGlzLmlzKXx8bC5wdXNoKGspfWsuaW5kZXg9dGhpcy5pbmRleDtrLnRhcmdldD10aGlzLnRhcmdldDtrLl9pc0NvbHVtblJvdz10aGlzLl9pc0NvbHVtblJvdztrLmNvbHVtbj1nO2suZXhwYW5kZWQ9dGhpcy5leHBhbmRlZDtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChrKTtmLnB1c2goayl9LmJpbmQodGhpcykpOwp0aGlzLmNlbGxzPWZ9fSxfaW5kZXhDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmZC5mb3JFYWNoKGZ1bmN0aW9uKGYpe2YuaW5kZXg9Y30pfSxfaXRlbUNoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZkLmZvckVhY2goZnVuY3Rpb24oZil7Zi5pdGVtPWN9KX0sX2l0ZW1DaGFuZ2VkRm9yRGV0YWlsczpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJmQmJihkLml0ZW09Yyl9LF9zZWxlY3RlZENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZkLmZvckVhY2goZnVuY3Rpb24oZil7Zi5zZWxlY3RlZD1jfSl9LF9zZWxlY3RlZENoYW5nZWRGb3JEZXRhaWxzOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmZCYmKGQuc2VsZWN0ZWQ9Yyl9LHVwZGF0ZUxhc3RDb2x1bW46ZnVuY3Rpb24oKXt0aGlzLmNlbGxzLnNsaWNlKDApLnNvcnQoZnVuY3Rpb24oYywKZCl7cmV0dXJuIGMuY29sdW1uLl9vcmRlci1kLmNvbHVtbi5fb3JkZXJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGMsZCxmKXtjLnRvZ2dsZUF0dHJpYnV0ZSgibGFzdGNvbHVtbiIsZD09PWYubGVuZ3RoLTEpfSl9fTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtcm93IixiZWhhdmlvcnM6W2FdLF9jcmVhdGVDZWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZhYWRpbi1ncmlkLXRhYmxlLWNlbGwiKX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLXJvdyIsYmVoYXZpb3JzOlthXSxvYnNlcnZlcnM6WyJfdXBkYXRlUm93VmlzaWJpbGl0eShjb2x1bW5zKSJdLGxpc3RlbmVyczp7ImNlbGwtZW1wdHktY2hhbmdlZCI6Il91cGRhdGVSb3dWaXNpYmlsaXR5In0sX2NyZWF0ZUNlbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLWNlbGwiKX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtZm9vdGVyLXJvdyIsCmJlaGF2aW9yczpbYV0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZVJvd1Zpc2liaWxpdHkoY29sdW1ucykiXSxsaXN0ZW5lcnM6eyJjZWxsLWVtcHR5LWNoYW5nZWQiOiJfdXBkYXRlUm93VmlzaWJpbGl0eSJ9LF9jcmVhdGVDZWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZhYWRpbi1ncmlkLXRhYmxlLWZvb3Rlci1jZWxsIil9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRlbXBsYXRpemVyLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307dmFhZGluLmVsZW1lbnRzLmdyaWQuVGVtcGxhdGl6ZXI9ZnVuY3Rpb24oKXt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5UZW1wbGF0aXplcj1Qb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGVtcGxhdGl6ZXIiLGJlaGF2aW9yczpbUG9seW1lci5UZW1wbGF0aXplcl0scHJvcGVydGllczp7ZGF0YUhvc3Q6T2JqZWN0LHRlbXBsYXRlOk9iamVjdCxfdGVtcGxhdGVJbnN0YW5jZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wYXJlbnRQYXRoVmFsdWVzOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX19LG9ic2VydmVyczpbIl90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQoX3RlbXBsYXRlSW5zdGFuY2VzLiosIF9wYXJlbnRQYXRoVmFsdWVzLiopIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudE1vZGVsPSEwO3RoaXMuX2luc3RhbmNlUHJvcHM9e2V4cGFuZGVkOiEwLGluZGV4OiEwLGl0ZW06ITAsc2VsZWN0ZWQ6ITB9fSxjcmVhdGVJbnN0YW5jZTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIGE9dGhpcy5zdGFtcCh7fSk7CnRoaXMuYWRkSW5zdGFuY2UoYSk7cmV0dXJuIGF9LGFkZEluc3RhbmNlOmZ1bmN0aW9uKGEpey0xPT09dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZihhKSYmdGhpcy5wdXNoKCJfdGVtcGxhdGVJbnN0YW5jZXMiLGEpfSxyZW1vdmVJbnN0YW5jZTpmdW5jdGlvbihhKXt0aGlzLnNwbGljZSgiX3RlbXBsYXRlSW5zdGFuY2VzIix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKGEpLDEpfSxfZW5zdXJlVGVtcGxhdGl6ZWQ6ZnVuY3Rpb24oKXt0aGlzLnRlbXBsYXRlLl90ZW1wbGF0aXplZHx8KHRoaXMudGVtcGxhdGUuX3RlbXBsYXRpemVkPSEwLHRoaXMudGVtcGxhdGl6ZSh0aGlzLnRlbXBsYXRlKSx0aGlzLl9wYXJlbnRQcm9wcz10aGlzLl9wYXJlbnRQcm9wc3x8e30sUG9seW1lci5FbGVtZW50fHxPYmplY3Qua2V5cyh0aGlzLl9wYXJlbnRQcm9wcykuZm9yRWFjaChmdW5jdGlvbigpe30sdGhpcykpfSxfZm9yd2FyZEluc3RhbmNlUHJvcDpmdW5jdGlvbihhLGMsZCl7dm9pZCAwIT09CmFbIl9fIitjKyJfXyJdJiZhWyJfXyIrYysiX18iXSE9PWQmJnRoaXMuZmlyZSgidGVtcGxhdGUtaW5zdGFuY2UtY2hhbmdlZCIse3Byb3A6Yyx2YWx1ZTpkLGluc3Q6YX0pfSxfZm9yd2FyZEluc3RhbmNlUGF0aDpmdW5jdGlvbihhLGMsZCl7MCE9PWMuaW5kZXhPZigiaXRlbS4iKXx8dGhpcy5fc3VwcHJlc3NJdGVtQ2hhbmdlRXZlbnR8fHRoaXMuZmlyZSgiaXRlbS1jaGFuZ2VkIix7aXRlbTphLml0ZW0scGF0aDpjLnN1YnN0cmluZyg1KSx2YWx1ZTpkfSl9LF9ub3RpZnlJbnN0YW5jZVByb3BWMjpmdW5jdGlvbihhLGMsZCl7dGhpcy5fZm9yd2FyZEluc3RhbmNlUHJvcChhLGMsZCk7dGhpcy5fZm9yd2FyZEluc3RhbmNlUGF0aChhLGMsZCl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihhLGMpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbYV09Yzt0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKGQpe2Quc2V0KGEsYyl9LHRoaXMpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oYSwKYyl7dGhpcy5zZXQoWyJfcGFyZW50UGF0aFZhbHVlcyIsYV0sYyk7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbihkKXtkLm5vdGlmeVBhdGgoYSxjKX0sdGhpcyl9LF9mb3J3YXJkSG9zdFByb3BWMjpmdW5jdGlvbihhLGMpe3RoaXMuX2ZvcndhcmRQYXJlbnRQcm9wKGEsYyk7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMmJnRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5ub3RpZnlQYXRoKGEsYyl9LHRoaXMpfSxfdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkOmZ1bmN0aW9uKGEpe2lmKCJfdGVtcGxhdGVJbnN0YW5jZXMiPT09YS5wYXRoKXt2YXIgYz0wO3ZhciBkPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmxlbmd0aH1lbHNlIGlmKCJfdGVtcGxhdGVJbnN0YW5jZXMuc3BsaWNlcyI9PT1hLnBhdGgpYz1hLnZhbHVlLmluZGV4LGQ9YS52YWx1ZS5hZGRlZENvdW50O2Vsc2UgcmV0dXJuO09iamVjdC5rZXlzKHRoaXMuX3BhcmVudFBhdGhWYWx1ZXN8fAp7fSkuZm9yRWFjaChmdW5jdGlvbihmKXtmb3IodmFyIGc9YztnPGMrZDtnKyspdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXNbZ10uc2V0KGYsdGhpcy5fcGFyZW50UGF0aFZhbHVlc1tmXSl9LHRoaXMpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlJvd0RldGFpbHNCZWhhdmlvcj17cHJvcGVydGllczp7ZXhwYW5kZWRJdGVtczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LGxpc3RlbmVyczp7InRlbXBsYXRlLWluc3RhbmNlLWNoYW5nZWQiOiJfdGVtcGxhdGVJbnN0YW5jZUNoYW5nZWRFeHBhbmRlZCJ9LG9ic2VydmVyczpbIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiosIGRhdGFQcm92aWRlcikiLCJfcm93RGV0YWlsc1RlbXBsYXRlQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlKSJdLF9leHBhbmRlZEl0ZW1zQ2hhbmdlZDpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWMmJih0aGlzLl9mbHVzaEl0ZW1zRGVib3VuY2VyKCksdGhpcy4kLnNjcm9sbGVyLl9waHlzaWNhbEl0ZW1zJiZ0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXMuZm9yRWFjaChmdW5jdGlvbihkKXtkLmV4cGFuZGVkPXRoaXMuX2lzRXhwYW5kZWQoZC5pdGVtKX0uYmluZCh0aGlzKSkpfSwKX3Jvd0RldGFpbHNUZW1wbGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9bmV3IHZhYWRpbi5lbGVtZW50cy5ncmlkLlRlbXBsYXRpemVyO2MuZGF0YUhvc3Q9dGhpcy5kYXRhSG9zdDtjLl9pbnN0YW5jZVByb3BzPXtleHBhbmRlZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwfTtQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLmFwcGVuZENoaWxkKGMpO2MudGVtcGxhdGU9YTthLnRlbXBsYXRpemVyPWN9LF9pc0V4cGFuZGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmV4cGFuZGVkSXRlbXMmJi0xIT09dGhpcy5leHBhbmRlZEl0ZW1zLmluZGV4T2YoYSl9LGV4cGFuZEl0ZW06ZnVuY3Rpb24oYSl7dGhpcy5faXNFeHBhbmRlZChhKXx8dGhpcy5wdXNoKCJleHBhbmRlZEl0ZW1zIixhKX0sY29sbGFwc2VJdGVtOmZ1bmN0aW9uKGEpe3RoaXMuX2lzRXhwYW5kZWQoYSkmJnRoaXMuc3BsaWNlKCJleHBhbmRlZEl0ZW1zIix0aGlzLmV4cGFuZGVkSXRlbXMuaW5kZXhPZihhKSwxKX0sCl90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZEV4cGFuZGVkOmZ1bmN0aW9uKGEpeyJleHBhbmRlZCI9PT1hLmRldGFpbC5wcm9wJiYoYS5kZXRhaWwudmFsdWU/dGhpcy5leHBhbmRJdGVtKGEuZGV0YWlsLmluc3QuaXRlbSk6dGhpcy5jb2xsYXBzZUl0ZW0oYS5kZXRhaWwuaW5zdC5pdGVtKSxhLnN0b3BQcm9wYWdhdGlvbigpKX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWRhdGEtcHJvdmlkZXItYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuRGF0YVByb3ZpZGVyQmVoYXZpb3I9e2xpc3RlbmVyczp7Iml0ZW0tY2hhbmdlZCI6Il90ZW1wbGF0ZUl0ZW1DaGFuZ2VkIn0scHJvcGVydGllczp7cGFnZVNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjUwLG9ic2VydmVyOiJfcGFnZVNpemVDaGFuZ2VkIn0sZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhUHJvdmlkZXJDaGFuZ2VkIn0sX2xvYWRpbmc6Qm9vbGVhbixfY2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fSxfcGVuZGluZ1JlcXVlc3RzOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX19LF90ZW1wbGF0ZUl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGEpe3ZhciBjPWEuZGV0YWlsLml0ZW07QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChQb2x5bWVyLmRvbSh0aGlzLiQuaXRlbXMpLmNoaWxkcmVuLGZ1bmN0aW9uKGQpe2QuaXRlbT09PWMmJmQuaXRlcmF0ZUNlbGxzKGZ1bmN0aW9uKGYpe2YuX3RlbXBsYXRpemVyLl9zdXBwcmVzc0l0ZW1DaGFuZ2VFdmVudD0KITA7Zi5pbnN0YW5jZS5ub3RpZnlQYXRoKCJpdGVtLiIrYS5kZXRhaWwucGF0aCxhLmRldGFpbC52YWx1ZSk7Zi5fdGVtcGxhdGl6ZXIuX3N1cHByZXNzSXRlbUNoYW5nZUV2ZW50PSExfSl9KX0sX2dldENhY2hlZEl0ZW06ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5fZ2V0UGFnZUZvckluZGV4KGEpLGQ9dGhpcy5fY2FjaGUmJnRoaXMuX2NhY2hlW2NdO3JldHVybiBkP2RbYS1jKnRoaXMucGFnZVNpemVdOm51bGx9LF9nZXRJdGVtOmZ1bmN0aW9uKGEsYyl7dGhpcy5fdXBkYXRlSXRlbShjLHRoaXMuX2dldENhY2hlZEl0ZW0oYSkpO3RoaXMuX2VhZ2VybHlMb2FkUGFnZXMoKTt2YXIgZD10aGlzLl91bmNhY2hlZFBhZ2VzRm9yUGh5c2ljYWxJdGVtcygpOzA8ZC5sZW5ndGgmJih0aGlzLl9sb2FkaW5nPSEwLHRoaXMuZGVib3VuY2UoImxvYWQiLGZ1bmN0aW9uKCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKGYpe3RoaXMuX2xvYWRQYWdlKGYpfS5iaW5kKHRoaXMpKX0sMTAwKSl9LF9jYWNoZWRQYWdlc0ZvclBoeXNpY2FsSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZXNGb3JQaHlzaWNhbEl0ZW1zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT0KdGhpcy5fY2FjaGUmJnZvaWQgMCE9PXRoaXMuX2NhY2hlW2FdfS5iaW5kKHRoaXMpKX0sX3VuY2FjaGVkUGFnZXNGb3JQaHlzaWNhbEl0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VzRm9yUGh5c2ljYWxJdGVtcygpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fY2FjaGUmJnZvaWQgMD09PXRoaXMuX2NhY2hlW2FdfS5iaW5kKHRoaXMpKX0sX2VhZ2VybHlMb2FkUGFnZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jYWNoZWRQYWdlc0ZvclBoeXNpY2FsSXRlbXMoKS5zbGljZSgwKTtpZigwPGEubGVuZ3RoKXthLnNvcnQoZnVuY3Rpb24oZCxmKXtyZXR1cm4gZD5mfSk7dmFyIGM9TWF0aC5taW4oYVthLmxlbmd0aC0xXSsxLE1hdGgubWF4KDAsTWF0aC5mbG9vcih0aGlzLnNpemUvdGhpcy5wYWdlU2l6ZSktMSkpO3RoaXMuX2xvYWRQYWdlKE1hdGgubWF4KDAsYVswXS0xKSk7dGhpcy5fbG9hZFBhZ2UoYyl9fSxfcGFnZXNGb3JQaHlzaWNhbEl0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX2dldFBhZ2VGb3JJbmRleCh0aGlzLiQuc2Nyb2xsZXIuZmlyc3RWaXNpYmxlSW5kZXgrCnRoaXMuJC5zY3JvbGxlci5fdmlkeE9mZnNldCldLmNvbmNhdCh0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLmluZGV4fSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9nZXRQYWdlRm9ySW5kZXgoYS5pbmRleCl9LmJpbmQodGhpcykpKS5yZWR1Y2UoZnVuY3Rpb24oYSxjKXstMT09PWEuaW5kZXhPZihjKSYmYS5wdXNoKGMpO3JldHVybiBhfSxbXSl9LF91cGRhdGVJdGVtczpmdW5jdGlvbihhLGMpe2Zvcih2YXIgZD0wO2Q8dGhpcy5wYWdlU2l6ZTtkKyspe3ZhciBmPXRoaXMuJC5zY3JvbGxlci5fdmlydHVhbEluZGV4VG9JdGVtW2EqdGhpcy5wYWdlU2l6ZStkXTtmJiYodGhpcy5fdXBkYXRlSXRlbShmLGNbZF0pLHRoaXMuZGVib3VuY2UoInVwZGF0ZS1oZWlnaHRzIixmdW5jdGlvbigpe3RoaXMuJC5zY3JvbGxlci5fdXBkYXRlTWV0cmljcygpO3RoaXMuJC5zY3JvbGxlci5fcG9zaXRpb25JdGVtcygpO3RoaXMuJC5zY3JvbGxlci5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9LAoxKSl9fSxfbG9hZFBhZ2U6ZnVuY3Rpb24oYSxjKXtjPWN8fHRoaXMuX3VwZGF0ZUl0ZW1zLmJpbmQodGhpcyk7aWYoIXRoaXMuX2NhY2hlW2FdJiYhdGhpcy5fcGVuZGluZ1JlcXVlc3RzW2FdJiZ0aGlzLmRhdGFQcm92aWRlcil7dGhpcy5fcGVuZGluZ1JlcXVlc3RzW2FdPSEwO3ZhciBkPXtwYWdlOmEscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxzb3J0T3JkZXJzOnRoaXMuX21hcFNvcnRlcnMoKSxmaWx0ZXJzOnRoaXMuX21hcEZpbHRlcnMoKX07dGhpcy5kYXRhUHJvdmlkZXIoZCxmdW5jdGlvbihmKXt0aGlzLl9jYWNoZVthXT1mO2RlbGV0ZSB0aGlzLl9wZW5kaW5nUmVxdWVzdHNbYV07YyhhLGYpO3RoaXMuX2xvYWRpbmc9MDx0aGlzLl9wZW5kaW5nUmVxdWVzdHMubGVuZ3RoO3RoaXMuZGVib3VuY2UoImNoZWNrLXNpemUiLHRoaXMuX2NoZWNrU2l6ZSwyRTMpfS5iaW5kKHRoaXMpKX19LF9nZXRQYWdlRm9ySW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguZmxvb3IoYS90aGlzLnBhZ2VTaXplKX0sCmNsZWFyQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZT17fTt0aGlzLl9wZW5kaW5nUmVxdWVzdHM9e307dGhpcy4kLnNjcm9sbGVyLmhhc0RhdGEmJnRoaXMuJC5zY3JvbGxlci5fdXBkYXRlKCk7dGhpcy5fZmx1c2hJdGVtc0RlYm91bmNlcigpfSxfZmx1c2hJdGVtc0RlYm91bmNlcjpmdW5jdGlvbigpe3RoaXMuZmx1c2hEZWJvdW5jZXIoImxvYWQiKX0sX3BhZ2VTaXplQ2hhbmdlZDpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWMmJmEhPT1jJiZ0aGlzLmNsZWFyQ2FjaGUoKX0sX2NoZWNrU2l6ZTpmdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuc2l6ZSYmY29uc29sZS53YXJuKCdUaGUgXHgzY3ZhYWRpbi1ncmlkXHgzZSBuZWVkcyBhIHZhbHVlIGZvciAic2l6ZSIgcHJvcGVydHkgaW4gb3JkZXIgdG8gZGlzcGxheSByb3dzLicpfSxfZGF0YVByb3ZpZGVyQ2hhbmdlZDpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWMmJnRoaXMuY2xlYXJDYWNoZSgpO3RoaXMuJC5zY3JvbGxlci5oYXNEYXRhfHwKKHRoaXMuX2xvYWRpbmc9ITAsdGhpcy5fbG9hZFBhZ2UoMCxmdW5jdGlvbigpe3RoaXMuJC5zY3JvbGxlci5oYXNEYXRhPSEwfS5iaW5kKHRoaXMpKSl9fTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1zZWxlY3Rpb24tYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuU2VsZWN0aW9uQmVoYXZpb3I9e3Byb3BlcnRpZXM6e3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZEl0ZW1zLiopIl0sbGlzdGVuZXJzOnsidGVtcGxhdGUtaW5zdGFuY2UtY2hhbmdlZCI6Il90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZFNlbGVjdGlvbiJ9LF90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZFNlbGVjdGlvbjpmdW5jdGlvbihhKXtpZigic2VsZWN0ZWQiPT09YS5kZXRhaWwucHJvcCl7dmFyIGM9YS5kZXRhaWwuaW5zdC5pdGVtOyh0aGlzLl9pc1NlbGVjdGVkKGMpP3RoaXMuZGVzZWxlY3RJdGVtOnRoaXMuc2VsZWN0SXRlbSkuYmluZCh0aGlzKShjKTt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0Oih0aGlzLl9pc1NlbGVjdGVkKGMpPyJTZWxlY3RlZCI6IkRlc2VsZWN0ZWQiKSsiIFJvdyAiKwooYS5kZXRhaWwuaW5zdC5pbmRleCsxKSsiIG9mICIrdGhpcy5zaXplfSk7YS5zdG9wUHJvcGFnYXRpb24oKX19LF9pc1NlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMmJi0xPHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGEpfSxzZWxlY3RJdGVtOmZ1bmN0aW9uKGEpe2E9dGhpcy5fdGFrZUl0ZW0oYSk7dGhpcy5faXNTZWxlY3RlZChhKXx8dGhpcy5wdXNoKCJzZWxlY3RlZEl0ZW1zIixhKX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGEpe2E9dGhpcy5fdGFrZUl0ZW0oYSk7YT10aGlzLnNlbGVjdGVkSXRlbXMuaW5kZXhPZihhKTstMTxhJiZ0aGlzLnNwbGljZSgic2VsZWN0ZWRJdGVtcyIsYSwxKX0sX3RvZ2dsZUl0ZW06ZnVuY3Rpb24oYSl7YT10aGlzLl90YWtlSXRlbShhKTstMT09PXRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGEpP3RoaXMuc2VsZWN0SXRlbShhKTp0aGlzLmRlc2VsZWN0SXRlbShhKX0sX3Rha2VJdGVtOmZ1bmN0aW9uKGEpe3JldHVybiJudW1iZXIiPT09CnR5cGVvZiBhJiYwPD1hJiZ0aGlzLml0ZW1zJiZ0aGlzLml0ZW1zLmxlbmd0aD5hP3RoaXMuaXRlbXNbYV06YX0sX3NlbGVjdGVkSXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGEpeyF0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXN8fCJzZWxlY3RlZEl0ZW1zIiE9PWEucGF0aCYmInNlbGVjdGVkSXRlbXMuc3BsaWNlcyIhPT1hLnBhdGh8fHRoaXMuJC5zY3JvbGxlci5fcGh5c2ljYWxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2Muc2VsZWN0ZWQ9dGhpcy5faXNTZWxlY3RlZChjLml0ZW0pfS5iaW5kKHRoaXMpKX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWtleWJvYXJkLW5hdmlnYXRpb24tYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVLZXlib2FyZEJlaGF2aW9ySW1wbD17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImFwcGxpY2F0aW9uIix0YWJpbmRleDowfSxrZXlCaW5kaW5nczp7ImN0cmwraG9tZSI6Il9vbkN0cmxIb21lIiwiY3RybCtlbmQiOiJfb25DdHJsRW5kIixkb3duOiJfb25BcnJvd0Rvd24iLGVuZDoiX29uRW5kIixlbnRlcjoiX29uRW50ZXIiLGVzYzoiX29uRXNjYXBlIixmMjoiX29uRjIiLGhvbWU6Il9vbkhvbWUiLGxlZnQ6Il9vbkFycm93TGVmdCIscGFnZWRvd246Il9vblBhZ2VEb3duIixwYWdldXA6Il9vblBhZ2VVcCIscmlnaHQ6Il9vbkFycm93UmlnaHQiLHNwYWNlOiJfb25TcGFjZSIsdGFiOiJfb25UYWIiLHVwOiJfb25BcnJvd1VwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0scHJvcGVydGllczp7X3ZpcnR1YWxGb2N1czp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il92aXJ0dWFsRm9jdXNDaGFuZ2VkIn0sCmludGVyYWN0aW5nOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSxuYXZpZ2F0aW5nOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX0sbGlzdGVuZXJzOntmb2N1czoiX29uRm9jdXMiLCJjZWxsLWZvY3VzIjoiX29uQ2VsbEZvY3VzIiwiY2VsbC1jb250ZW50LWZvY3VzIjoiX29uQ2VsbENvbnRlbnRGb2N1cyJ9LHJlYWR5OmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oYSl7OT09PWEua2V5Q29kZSYmKHRoaXMuX3RhYmJlZD0hMCk7OT09PWEua2V5Q29kZSYmYS5zaGlmdEtleSYmKHRoaXMuX3NoaWZ0VGFiYmVkPSEwKX0uYmluZCh0aGlzKSwhMCk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGZ1bmN0aW9uKGEpezk9PT1hLmtleUNvZGUmJih0aGlzLl90YWJiZWQ9ITEpOzk9PT1hLmtleUNvZGUmJmEuc2hpZnRLZXkmJih0aGlzLl9zaGlmdFRhYmJlZD0KITEpfS5iaW5kKHRoaXMpLCEwKX0sX2lzRm9vdGVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuJC5mb290ZXIuX3Jvd3MuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiFhLmhpZGRlbn0pLmxlbmd0aH0sX29uRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl90YWJiZWQmJiF0aGlzLl9zaGlmdFRhYmJlZCYmdGhpcy5fYWN0aXZhdGVOYXZpZ2F0aW9uKCl9LF9hY3RpdmF0ZU5hdmlnYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQuZm9vdGVyRm9jdXNUcmFwLmZvY3VzKCl9LF9vbkZvY3Vzb3V0OmZ1bmN0aW9uKCl7dGhpcy5pbnRlcmFjdGluZz10aGlzLm5hdmlnYXRpbmc9ITF9LF9vbkZvb3RlckZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5uYXZpZ2F0aW5nPSEwO3RoaXMuaW50ZXJhY3Rpbmc9ITE7dGhpcy5fdmlydHVhbEZvY3VzPXRoaXMuX3ZpcnR1YWxGb2N1c3x8KHRoaXMuX3NoaWZ0VGFiYmVkP3RoaXMuX2lzRm9vdGVyVmlzaWJsZSgpP3RoaXMuJC5mb290ZXI6dGhpcy4kLml0ZW1zOgp0aGlzLiQuaGVhZGVyKX0sX3ZpcnR1YWxGb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oYSxjKXtjJiYoYy5mb2N1c2VkPSExKTthJiYoYS5fZm9jdXNlZENlbGxJbmRleD1hLl9mb2N1c2VkQ2VsbEluZGV4fHwwLGEuX2ZvY3VzZWRSb3dJbmRleD1hLl9mb2N1c2VkUm93SW5kZXh8fDAsYS5mb2N1c2VkPSEwLGE9PT10aGlzLiQuaXRlbXMmJnRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vblRhYjpmdW5jdGlvbihhKXtpZighdGhpcy5pbnRlcmFjdGluZyYmdGhpcy5fdmlydHVhbEZvY3VzKWlmKHRoaXMubmF2aWdhdGluZylpZihhLmRldGFpbC5rZXlib2FyZEV2ZW50LnNoaWZ0S2V5KXN3aXRjaCh0aGlzLl92aXJ0dWFsRm9jdXMpe2Nhc2UgdGhpcy4kLmZvb3Rlcjp0aGlzLl92aXJ0dWFsRm9jdXM9dGhpcy4kLml0ZW1zO2EucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIHRoaXMuJC5pdGVtczp0aGlzLl92aXJ0dWFsRm9jdXM9dGhpcy4kLmhlYWRlcjthLnByZXZlbnREZWZhdWx0KCk7CmJyZWFrO2Nhc2UgdGhpcy4kLmhlYWRlcjp0aGlzLmZvY3VzKCksdGhpcy5fdmlydHVhbEZvY3VzPW51bGx9ZWxzZSBzd2l0Y2godGhpcy5fdmlydHVhbEZvY3VzKXtjYXNlIHRoaXMuJC5oZWFkZXI6dGhpcy5fdmlydHVhbEZvY3VzPXRoaXMuJC5pdGVtczthLnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSB0aGlzLiQuaXRlbXM6dGhpcy5faXNGb290ZXJWaXNpYmxlKCk/KHRoaXMuX3ZpcnR1YWxGb2N1cz10aGlzLiQuZm9vdGVyLGEucHJldmVudERlZmF1bHQoKSk6dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3ZpcnR1YWxGb2N1cz1udWxsfSwxKTticmVhaztjYXNlIHRoaXMuJC5mb290ZXI6dGhpcy5fdmlydHVhbEZvY3VzPW51bGx9ZWxzZSB0aGlzLl9hY3RpdmF0ZU5hdmlnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LF9pc0Fib3ZlVmlld3BvcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+YX0sX29uQXJyb3dEb3duOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fAooYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNEb3duKCksdGhpcy5fZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydCgpKX0sX3Njcm9sbFBhZ2VEb3duOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy4kLnNjcm9sbGVyLiQudGFibGUuc2Nyb2xsVG9wKz1jLnRvcC1hLmJvdHRvbTt0aGlzLiQuc2Nyb2xsZXIuX3Njcm9sbEhhbmRsZXIoKX0sX29uUGFnZURvd246ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzPT09dGhpcy4kLml0ZW1zPyhhPXRoaXMuJC5zY3JvbGxlci5sYXN0VmlzaWJsZUluZGV4LHRoaXMuX3Njcm9sbFBhZ2VEb3duKCksdGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkUm93SW5kZXgrPQp0aGlzLiQuc2Nyb2xsZXIubGFzdFZpc2libGVJbmRleC1hfHx0aGlzLiQuc2Nyb2xsZXIubGFzdFZpc2libGVJbmRleC10aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRSb3dJbmRleCx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpOnRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c1BhZ2VEb3duKCkpfSxfc2Nyb2xsUGFnZVVwOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy4kLnNjcm9sbGVyLiQudGFibGUuc2Nyb2xsVG9wLT1jLnRvcC1hLmJvdHRvbTt0aGlzLiQuc2Nyb2xsZXIuX3Njcm9sbEhhbmRsZXIoKX0sX29uUGFnZVVwOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cz09PXRoaXMuJC5pdGVtcz8oYT10aGlzLiQuc2Nyb2xsZXIubGFzdFZpc2libGVJbmRleCwKdGhpcy5fc2Nyb2xsUGFnZVVwKCksdGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkUm93SW5kZXgtPWEtdGhpcy4kLnNjcm9sbGVyLmxhc3RWaXNpYmxlSW5kZXh8fHRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZFJvd0luZGV4LHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSk6dGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzUGFnZVVwKCkpfSxfb25BcnJvd1VwOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c1VwKCksdGhpcy5fZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydCgpKX0sX29uQXJyb3dSaWdodDpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNSaWdodCgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LApfb25BcnJvd0xlZnQ6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzTGVmdCgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vbkhvbWU6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzSG9tZSgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vbkVuZDpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNFbmQoKSx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSxfbW92ZUZvY3VzVG9Gb2N1c1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZENlbGwuX2NlbGxDb250ZW50OwooYT1hLnF1ZXJ5U2VsZWN0b3IoIltmb2N1cy10YXJnZXRdIil8fGEuZmlyc3RFbGVtZW50Q2hpbGQpJiZhLmZvY3VzKCl9LF9vbkVudGVyOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmc/ImlucHV0Ij09PWEuZGV0YWlsLmtleWJvYXJkRXZlbnQudGFyZ2V0LmxvY2FsTmFtZSYmInRleHQiPT09YS5kZXRhaWwua2V5Ym9hcmRFdmVudC50YXJnZXQudHlwZSYmdGhpcy4kLmZvb3RlckZvY3VzVHJhcC5mb2N1cygpOihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fbW92ZUZvY3VzVG9Gb2N1c1RhcmdldCgpKX0sX29uRXNjYXBlOmZ1bmN0aW9uKCl7dGhpcy5pbnRlcmFjdGluZz90aGlzLiQuZm9vdGVyRm9jdXNUcmFwLmZvY3VzKCk6dGhpcy5uYXZpZ2F0aW5nJiYodGhpcy5uYXZpZ2F0aW5nPSExKX0sX29uRjI6ZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuaW50ZXJhY3Rpbmc/dGhpcy4kLmZvb3RlckZvY3VzVHJhcC5mb2N1cygpOnRoaXMuX21vdmVGb2N1c1RvRm9jdXNUYXJnZXQoKX0sCl9vbkN0cmxIb21lOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c0ZpcnN0KCksdGhpcy5fZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydCgpKX0sX29uQ3RybEVuZDpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNMYXN0KCksdGhpcy5fZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydCgpKX0sX29uU3BhY2U6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuaW50ZXJhY3Rpbmcpe2EucHJldmVudERlZmF1bHQoKTthPXRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZENlbGw7dmFyIGM9YS5nZXRDb250ZW50Q2hpbGRyZW4oUG9seW1lci5FbGVtZW50PyJzbG90IjoiY29udGVudCIpWzBdLmZpcnN0RWxlbWVudENoaWxkO2M/Yy5jbGljaygpOnRoaXMubmF2aWdhdGluZyYmCnRoaXMuZmlyZSgiY2VsbC1hY3RpdmF0ZSIse21vZGVsOmEuaW5zdGFuY2V9KX19LF9vbkNlbGxDb250ZW50Rm9jdXM6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZz0hMDt0aGlzLl9vbkNlbGxGb2N1cyhhKX0sX29uQ2VsbEZvY3VzOmZ1bmN0aW9uKGEpe2E9YS5kZXRhaWwuY2VsbDt2YXIgYz1hLnBhcmVudEVsZW1lbnQsZD1jLnBhcmVudEVsZW1lbnQsZj1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKFBvbHltZXIuZG9tKGQpLmNoaWxkcmVuLGMpO2Q9PT10aGlzLiQuaXRlbXMmJihmPWMuaW5kZXgpO2QuX2ZvY3VzZWRSb3dJbmRleD1mO2QuX2ZvY3VzZWRDZWxsSW5kZXg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChQb2x5bWVyLmRvbShjKS5jaGlsZHJlbixhKTt0aGlzLl92aXJ0dWFsRm9jdXM9ZDthLmhhc0F0dHJpYnV0ZSgiZGV0YWlsc2NlbGwiKSYmKGQuX2ZvY3VzZWRDZWxsSW5kZXg9MCxkLl9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsKCkpfSxfZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydDpmdW5jdGlvbigpe3ZhciBhPQp0aGlzLiQuc2Nyb2xsZXIuX3ZpZHhPZmZzZXQrdGhpcy4kLnNjcm9sbGVyLl92aXJ0dWFsU3RhcnQsYz10aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRSb3dJbmRleDt0aGlzLl92aXJ0dWFsRm9jdXM9PT10aGlzLiQuaXRlbXMmJihjPGF8fGM+YSt0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsQ291bnQpJiYodGhpcy4kLnNjcm9sbGVyLnNjcm9sbFRvU2NhbGVkSW5kZXgoYyksdGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkQ2VsbENoYW5nZWQoYyx0aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRDZWxsSW5kZXgpKTt0aGlzLl9lbnN1cmVFbGVtZW50SW5WaWV3cG9ydCh0aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRDZWxsKX0sX2Vuc3VyZUVsZW1lbnRJblZpZXdwb3J0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYodGhpcy5fdmlydHVhbEZvY3VzPT09dGhpcy4kLml0ZW1zKXt2YXIgZD10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCwKZj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtjLmJvdHRvbT5kP3RoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbFRvcCs9Yy5ib3R0b20tZDpjLnRvcDxmJiYodGhpcy4kLnNjcm9sbGVyLiQudGFibGUuc2Nyb2xsVG9wKz1jLnRvcC1mKX1pZighYS5oYXNBdHRyaWJ1dGUoImRldGFpbHNjZWxsIikpe2E9dGhpcy4kLnNjcm9sbGVyLiQudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7ZD10aGlzLiQuc2Nyb2xsZXIuJC50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O2lmKGY9dGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkUm93LnF1ZXJ5U2VsZWN0b3IoIltsYXN0LWZyb3plbl0iKSlkPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7Yy5yaWdodD5hP3RoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbExlZnQrPWMucmlnaHQtYTpjLmxlZnQ8ZCYmKHRoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbExlZnQrPQpjLmxlZnQtZCl9fX07dmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVLZXlib2FyZEJlaGF2aW9yPVt2YWFkaW4uZWxlbWVudHMuZ3JpZC5UYWJsZUtleWJvYXJkQmVoYXZpb3JJbXBsLFBvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3JdOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWNvbHVtbi1yZW9yZGVyaW5nLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307dmFhZGluLmVsZW1lbnRzLmdyaWQuQ29sdW1uUmVvcmRlcmluZ0JlaGF2aW9yPXtwcm9wZXJ0aWVzOntjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5UYWJsZUNvbHVtblJlb3JkZXJpbmdCZWhhdmlvcj17cHJvcGVydGllczp7X29yZGVyQmFzZVNjb3BlOnt0eXBlOk51bWJlcix2YWx1ZToxRTd9fSxsaXN0ZW5lcnM6e2RyYWdzdGFydDoiX29uRHJhZ1N0YXJ0IixkcmFnb3ZlcjoiX29uRHJhZ092ZXIiLGRyYWdlbmQ6Il9vbkRyYWdFbmQifSxvYnNlcnZlcnM6WyJfdXBkYXRlT3JkZXJzKGNvbHVtblRyZWUsIGNvbHVtblRyZWUuKikiXSxfdXBkYXRlT3JkZXJzOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmYVswXS5mb3JFYWNoKGZ1bmN0aW9uKGQsZil7ZC5fb3JkZXI9KGYrMSkqdGhpcy5fb3JkZXJCYXNlU2NvcGV9LHRoaXMpfSxfb25EcmFnU3RhcnQ6ZnVuY3Rpb24oYSl7aWYoInZhYWRpbi1ncmlkLWNlbGwtY29udGVudCI9PT1hLnRhcmdldC5sb2NhbE5hbWUpe3ZhciBjPXRoaXMuX2dldENlbGxCeUNlbGxDb250ZW50KGEudGFyZ2V0KTtjJiYodGhpcy50b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLAohMCksdGhpcy5fZHJhZ2dlZENvbHVtbj1jLmNvbHVtbix0aGlzLl9zZXRTaWJsaW5nc1Jlb3JkZXJTdGF0dXModGhpcy5fZHJhZ2dlZENvbHVtbiwiYWxsb3dlZCIpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9ImRyYWdnaW5nIixhLmRhdGFUcmFuc2ZlciYmKGEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLCIiKSxhLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJtb3ZlIiksdGhpcy5fYXV0b1Njcm9sbGVyKCkpfX0sX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1czpmdW5jdGlvbihhLGMpe0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChQb2x5bWVyLmRvbShQb2x5bWVyLmRvbShhKS5wYXJlbnROb2RlKS5jaGlsZHJlbixmdW5jdGlvbihkKXtyZXR1cm4vY29sdW1uLy50ZXN0KGQubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChkLGEpfSx0aGlzKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2QuX3Jlb3JkZXJTdGF0dXM9Y30pfSxfb25EcmFnT3ZlcjpmdW5jdGlvbihhKXtpZih0aGlzLl9kcmFnZ2VkQ29sdW1uKXt2YXIgYz0KKFBvbHltZXIuRWxlbWVudD9hLmNvbXBvc2VkUGF0aCgpOlBvbHltZXIuZG9tKGEpLnBhdGgpLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PWQubG9jYWxOYW1lfSlbMF07YyYmKGEucHJldmVudERlZmF1bHQoKSxjPXRoaXMuX2dldENlbGxCeUNlbGxDb250ZW50KGMpLChjPXRoaXMuX2dldFRhcmdldENvbHVtbihjLHRoaXMuX2RyYWdnZWRDb2x1bW4pKSYmdGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGMpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oYyxhLmNsaWVudFgpJiZ0aGlzLl9zd2FwQ29sdW1uT3JkZXJzKHRoaXMuX2RyYWdnZWRDb2x1bW4sYyksdGhpcy5fbGFzdERyYWdDbGllbnRYPWEuY2xpZW50WCl9fSxfYXV0b1Njcm9sbGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5fbGFzdERyYWdDbGllbnRYKXt2YXIgYT10aGlzLl9sYXN0RHJhZ0NsaWVudFgtdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCsKNTAsYz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwOzA8YT90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9YS8xMDowPGMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09Yy8xMCk7dGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX0sX29uRHJhZ0VuZDpmdW5jdGlvbigpe3RoaXMuX2RyYWdnZWRDb2x1bW4mJih0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgicmVvcmRlcmluZyIsITEpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD10aGlzLl9kcmFnZ2VkQ29sdW1uPW51bGwpfSxfaXNTd2FwQWxsb3dlZDpmdW5jdGlvbihhLGMpe2lmKGEmJmMpe3ZhciBkPWEucGFyZW50RWxlbWVudD09PWMucGFyZW50RWxlbWVudCwKZj1hLmZyb3plbj09PWMuZnJvemVuO3JldHVybiBhIT09YyYmZCYmZn19LF9pc1N3YXBwYWJsZUJ5UG9zaXRpb246ZnVuY3Rpb24oYSxjKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoUG9seW1lci5kb20odGhpcy4kLmhlYWRlcikucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLWNlbGwiKSxmdW5jdGlvbihnKXtyZXR1cm4gZy5jb2x1bW49PT1hfSlbMF0sZj10aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoIltyZW9yZGVyLXN0YXR1c1x4M2RkcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0PmYubGVmdD9jPmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQtZi53aWR0aDpjPGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCtmLndpZHRofSxfZ2V0Q2VsbEJ5Q2VsbENvbnRlbnQ6ZnVuY3Rpb24oYSl7aWYoUG9seW1lci5FbGVtZW50KXJldHVybiBhLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlOwphPVBvbHltZXIuZG9tKGEpLmdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKClbMF07cmV0dXJuIFBvbHltZXIuZG9tKGEpLnBhcmVudE5vZGV9LF9zd2FwQ29sdW1uT3JkZXJzOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9YS5fb3JkZXI7YS5fb3JkZXI9Yy5fb3JkZXI7Yy5fb3JkZXI9ZDt0aGlzLl91cGRhdGVMYXN0RnJvemVuKCk7dGhpcy5fdXBkYXRlTGFzdENvbHVtbigpfSxfZ2V0VGFyZ2V0Q29sdW1uOmZ1bmN0aW9uKGEsYyl7aWYoYSYmYyl7Zm9yKHZhciBkPWEuY29sdW1uO2QucGFyZW50RWxlbWVudCE9PWMucGFyZW50RWxlbWVudCYmZCE9PXRoaXMudGFyZ2V0OylkPWQucGFyZW50RWxlbWVudDtyZXR1cm4gZC5wYXJlbnRFbGVtZW50PT09Yy5wYXJlbnRFbGVtZW50P2Q6YS5jb2x1bW59fX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdmFhZGluLWdyaWQvaXJvbi1saXN0LWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLklyb25MaXN0QmVoYXZpb3JJbXBsPWZ1bmN0aW9uKCl7dmFyIGE9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxjPWEmJjg8PWFbMV07cmV0dXJue2lzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e21heFBoeXNpY2FsQ291bnQ6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMH0sYXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtIn0saW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6ImluZGV4In19LF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX3BoeXNpY2FsSW5kZXhGb3JLZXk6bnVsbCxfZXN0U2Nyb2xsSGVpZ2h0OjAsX3Njcm9sbEhlaWdodDowLF92aWV3cG9ydEhlaWdodDowLF92aWV3cG9ydFdpZHRoOjAsCl9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9jb2xsZWN0aW9uOm51bGwsX2l0ZW1zUmVuZGVyZWQ6ITEsX2xhc3RQYWdlOm51bGwsX21heFBhZ2VzOjMsX2l0ZW1zUGVyUm93OjEsX2l0ZW1XaWR0aDowLF9yb3dIZWlnaHQ6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU2l6ZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9tYXhTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LQp0aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3B9LF9taW5WaXJ0dWFsU3RhcnQ6MCxnZXQgX21heFZpcnR1YWxTdGFydCgpe3JldHVybiBNYXRoLm1heCgwLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50KX0sX3ZpcnR1YWxTdGFydFZhbDowLHNldCBfdmlydHVhbFN0YXJ0KGQpe3RoaXMuX3ZpcnR1YWxTdGFydFZhbD1NYXRoLm1pbih0aGlzLl9tYXhWaXJ0dWFsU3RhcnQsTWF0aC5tYXgodGhpcy5fbWluVmlydHVhbFN0YXJ0LGQpKX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxfcGh5c2ljYWxTdGFydFZhbDowLHNldCBfcGh5c2ljYWxTdGFydChkKXt0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWQldGhpcy5fcGh5c2ljYWxDb3VudDswPnRoaXMuX3BoeXNpY2FsU3RhcnRWYWwmJih0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPXRoaXMuX3BoeXNpY2FsQ291bnQrdGhpcy5fcGh5c2ljYWxTdGFydFZhbCk7CnRoaXMuX3BoeXNpY2FsRW5kPSh0aGlzLl9waHlzaWNhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMSkldGhpcy5fcGh5c2ljYWxDb3VudH0sZ2V0IF9waHlzaWNhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU3RhcnRWYWx8fDB9LF9waHlzaWNhbENvdW50VmFsOjAsc2V0IF9waHlzaWNhbENvdW50KGQpe3RoaXMuX3BoeXNpY2FsQ291bnRWYWw9ZDt0aGlzLl9waHlzaWNhbEVuZD0odGhpcy5fcGh5c2ljYWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LGdldCBfcGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9waHlzaWNhbENvdW50VmFsfSxfcGh5c2ljYWxFbmQ6MCxnZXQgX29wdFBoeXNpY2FsU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9vcHRQaHlzaWNhbENvdW50KCl7cmV0dXJuIHRoaXMuX2VzdFJvd3NJblZpZXcqdGhpcy5faXRlbXNQZXJSb3cqdGhpcy5fbWF4UGFnZXN9LApnZXQgX2lzVmlzaWJsZSgpe3JldHVybiB0aGlzLnNjcm9sbFRhcmdldCYmISghdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGgmJiF0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQpfSxnZXQgZmlyc3RWaXNpYmxlSW5kZXgoKXtpZihudWxsPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWwpe3ZhciBkPU1hdGguZmxvb3IodGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wKTt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD10aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24oZixnKXtkKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZik7aWYoZD50aGlzLl9zY3JvbGxQb3NpdGlvbilyZXR1cm4gZ30pfHwwfXJldHVybiB0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbH0sZ2V0IGxhc3RWaXNpYmxlSW5kZXgoKXtpZihudWxsPT09dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbCl7dmFyIGQ9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGYsCmcpe2lmKGQ8dGhpcy5fc2Nyb2xsQm90dG9tKXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9ZztlbHNlIHJldHVybiEwO2QrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChmKX0pfXJldHVybiB0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsfSxnZXQgX2RlZmF1bHRTY3JvbGxUYXJnZXQoKXtyZXR1cm4gdGhpc30sZ2V0IF92aXJ0dWFsUm93Q291bnQoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpcnR1YWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfZXN0Um93c0luVmlldygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlld3BvcnRIZWlnaHQvdGhpcy5fcm93SGVpZ2h0KX0sZ2V0IF9waHlzaWNhbFJvd3MoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCk7dGhpcy5fcmVuZGVyKCk7dGhpcy5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLAoiX3Jlc2l6ZUhhbmRsZXIiKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtc1JlbmRlcmVkPSExO3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzPzA6cGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcylbInBhZGRpbmctdG9wIl18fDAsMTApO3RoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3VwZGF0ZTpmdW5jdGlvbihkLGYpe3RoaXMuX2Fzc2lnbk1vZGVscyhkKTt0aGlzLl91cGRhdGVNZXRyaWNzKGQpO2lmKGYpZm9yKDtmLmxlbmd0aDspZD1mLnBvcCgpLHRoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZCk7dGhpcy5fcG9zaXRpb25JdGVtcygpO3RoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpOwp0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgpfSxfaW5jcmVhc2VQb29sSWZOZWVkZWQ6ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5fdmlld3BvcnRIZWlnaHQpcmV0dXJuITE7dmFyIGQ9dGhpcy5fcGh5c2ljYWxTaXplcy5yZWR1Y2UoZnVuY3Rpb24oZyxsKXtyZXR1cm4gZysobHx8MTAwKX0sMCksZj1kPnRoaXMuX3ZpZXdwb3J0SGVpZ2h0O2lmKGQ+PXRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmZilyZXR1cm4hMTtkPU1hdGguZmxvb3IodGhpcy5fcGh5c2ljYWxTaXplL3RoaXMuX3ZpZXdwb3J0SGVpZ2h0KTswPT09ZD90aGlzLl9kZWJvdW5jZVRlbXBsYXRlKHRoaXMuX2luY3JlYXNlUG9vbC5iaW5kKHRoaXMsTWF0aC5yb3VuZCguNSp0aGlzLl9waHlzaWNhbENvdW50KSkpOnRoaXMuX2xhc3RQYWdlIT09ZCYmZj9Qb2x5bWVyLmRvbS5hZGREZWJvdW5jZXIodGhpcy5kZWJvdW5jZSgiX2RlYm91bmNlVGVtcGxhdGUiLHRoaXMuX2luY3JlYXNlUG9vbC5iaW5kKHRoaXMsdGhpcy5faXRlbXNQZXJSb3cpLAoxNikpOnRoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5faW5jcmVhc2VQb29sLmJpbmQodGhpcyxNYXRoLmNlaWwodGhpcy5fdmlld3BvcnRIZWlnaHQvKHRoaXMuX3BoeXNpY2FsU2l6ZS90aGlzLl9waHlzaWNhbENvdW50KSp0aGlzLl9tYXhQYWdlcy10aGlzLl9waHlzaWNhbENvdW50KXx8MSkpO3RoaXMuX2xhc3RQYWdlPWQ7cmV0dXJuITB9LF9kZWJvdW5jZVRlbXBsYXRlOmZ1bmN0aW9uKGQpe1BvbHltZXIuZG9tLmFkZERlYm91bmNlcih0aGlzLmRlYm91bmNlKCJfZGVib3VuY2VUZW1wbGF0ZSIsZCkpfSxfaW5jcmVhc2VQb29sOmZ1bmN0aW9uKGQpe3ZhciBmPXRoaXMuX3BoeXNpY2FsQ291bnQ7ZD1NYXRoLm1pbih0aGlzLl9waHlzaWNhbENvdW50K2QsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCxNYXRoLm1heCh0aGlzLm1heFBoeXNpY2FsQ291bnQsMjUpKS1mOzA+PWR8fChbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChkKSksCltdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxTaXplcyxBcnJheShkKSksdGhpcy5fcGh5c2ljYWxDb3VudD1mK2QsdGhpcy5fdXBkYXRlKCkpfSxfcmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGQ9MDx0aGlzLl92aXJ0dWFsQ291bnR8fDA8dGhpcy5fcGh5c2ljYWxDb3VudDt0aGlzLmlzQXR0YWNoZWQmJiF0aGlzLl9pdGVtc1JlbmRlcmVkJiZ0aGlzLl9pc1Zpc2libGUmJmQmJih0aGlzLl9sYXN0UGFnZT0wLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2l0ZW1zUmVuZGVyZWQ9ITApfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKGQsZil7dmFyIGcsbDtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmZilmb3IobD0wO2w8Zi5sZW5ndGg7bCsrKXt2YXIgaz1mW2xdO3ZhciBuPXRoaXMuX2NvbXB1dGVWaWR4KGspO2lmKG51bGwhPShnPWQuY2FsbCh0aGlzLGssbikpKXJldHVybiBnfWVsc2V7az10aGlzLl9waHlzaWNhbFN0YXJ0O2ZvcihuPXRoaXMuX3ZpcnR1YWxTdGFydDtrPHRoaXMuX3BoeXNpY2FsQ291bnQ7aysrLApuKyspaWYobnVsbCE9KGc9ZC5jYWxsKHRoaXMsayxuKSkpcmV0dXJuIGc7Zm9yKGs9MDtrPHRoaXMuX3BoeXNpY2FsU3RhcnQ7aysrLG4rKylpZihudWxsIT0oZz1kLmNhbGwodGhpcyxrLG4pKSlyZXR1cm4gZ319LF9jb21wdXRlVmlkeDpmdW5jdGlvbihkKXtyZXR1cm4gZD49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGQtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2R9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGQpe3RoaXMuc2Nyb2xsaW5nJiZQb2x5bWVyLmRvbS5mbHVzaCgpO3ZhciBmPTAsZz0wLGw9dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaz10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG4pe2crPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl18fDA7dGhpcy5fcGh5c2ljYWxTaXplc1tuXT10aGlzLl9waHlzaWNhbEl0ZW1zW25dLm9mZnNldEhlaWdodDsKZis9dGhpcy5fcGh5c2ljYWxTaXplc1tuXTt0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCs9dGhpcy5fcGh5c2ljYWxTaXplc1tuXT8xOjB9LGQpO3RoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodDt0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK2YtZzt0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PWwmJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaypsK2YpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTt2YXIgZD10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24oZil7dGhpcy5fcGh5c2ljYWxJdGVtc1tmXS5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKDAsZCk7ZCs9dGhpcy5fcGh5c2ljYWxTaXplc1tmXX0pfSxfZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50OmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLl9waHlzaWNhbFNpemVzW2RdfSwKX3Nob3VsZFJlbmRlck5leHRSb3c6ZnVuY3Rpb24oZCl7cmV0dXJuIGQldGhpcy5faXRlbXNQZXJSb3c9PT10aGlzLl9pdGVtc1BlclJvdy0xfSxfYWRqdXN0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgZD0wPT09dGhpcy5fdmlydHVhbFN0YXJ0P3RoaXMuX3BoeXNpY2FsVG9wOk1hdGgubWluKHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3BoeXNpY2FsVG9wLDApO2QmJih0aGlzLl9waHlzaWNhbFRvcC09ZCxjfHwwPT09dGhpcy5fcGh5c2ljYWxUb3B8fHRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5fc2Nyb2xsVG9wLWQpKX0sX3Jlc2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oZCl7dGhpcy5zY3JvbGxUYXJnZXQmJih0aGlzLl9zY3JvbGxQb3NpdGlvbj10aGlzLl9zY3JvbGxUb3A9ZCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZCl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC0KdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2lmKChkPShkPWR8fDA9PT10aGlzLl9zY3JvbGxIZWlnaHQpfHx0aGlzLl9zY3JvbGxQb3NpdGlvbj49dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3BoeXNpY2FsU2l6ZSl8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl9vcHRQaHlzaWNhbFNpemUpdGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQrInB4Iix0aGlzLl9zY3JvbGxIZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0fSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGQpe1BvbHltZXIuZG9tLmZsdXNoKCk7ZD1NYXRoLm1pbihNYXRoLm1heChkLDApLHRoaXMuX3ZpcnR1YWxDb3VudC0xKTtpZighdGhpcy5faXNJbmRleFJlbmRlcmVkKGQpfHxkPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpdGhpcy5fdmlydHVhbFN0YXJ0PQpkLTE7dGhpcy5fYXNzaWduTW9kZWxzKCk7dGhpcy5fdXBkYXRlTWV0cmljcygpO3RoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciBmPXRoaXMuX3BoeXNpY2FsU3RhcnQsZz10aGlzLl92aXJ0dWFsU3RhcnQsbD0wLGs9dGhpcy5faGlkZGVuQ29udGVudFNpemU7ZzxkJiZsPD1rOylsKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZiksZj0oZisxKSV0aGlzLl9waHlzaWNhbENvdW50LGcrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApO3RoaXMuX3Bvc2l0aW9uSXRlbXMoKTt0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCtsKTt0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgpO3RoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9Cm51bGx9LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD10aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXtQb2x5bWVyLmRvbS5hZGREZWJvdW5jZXIodGhpcy5kZWJvdW5jZSgiX2RlYm91bmNlVGVtcGxhdGUiLGZ1bmN0aW9uKCl7dGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKTt0aGlzLl9yZW5kZXIoKTt0aGlzLl9pdGVtc1JlbmRlcmVkJiZ0aGlzLl9waHlzaWNhbEl0ZW1zJiZ0aGlzLl9pc1Zpc2libGUmJih0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCkpfS5iaW5kKHRoaXMpLDEpKX0sdXBkYXRlU2l6ZUZvckl0ZW06ZnVuY3Rpb24oZCl7ZD10aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5W2RdO251bGwhPWQmJih0aGlzLl91cGRhdGVNZXRyaWNzKFtkXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKX0sX2lzSW5kZXhSZW5kZXJlZDpmdW5jdGlvbihkKXtyZXR1cm4gZD49CnRoaXMuX3ZpcnR1YWxTdGFydCYmZDw9dGhpcy5fdmlydHVhbEVuZH0sX2lzSW5kZXhWaXNpYmxlOmZ1bmN0aW9uKGQpe3JldHVybiBkPj10aGlzLmZpcnN0VmlzaWJsZUluZGV4JiZkPD10aGlzLmxhc3RWaXNpYmxlSW5kZXh9fX0oKTt2YWFkaW4uZWxlbWVudHMuZ3JpZC5Jcm9uTGlzdEJlaGF2aW9yPVtQb2x5bWVyLlRlbXBsYXRpemVyLFBvbHltZXIuSXJvblNjcm9sbFRhcmdldEJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLklyb25MaXN0QmVoYXZpb3JJbXBsXTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC10YWJsZS5odG1sLmpzClBvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZSIsYmVoYXZpb3JzOlt2YWFkaW4uZWxlbWVudHMuZ3JpZC5Jcm9uTGlzdEJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlU2Nyb2xsQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVDb2x1bW5SZW9yZGVyaW5nQmVoYXZpb3IsUG9seW1lci5UZW1wbGF0aXplcl0scHJvcGVydGllczp7c2l6ZTpOdW1iZXIsY29sdW1uVHJlZTpBcnJheSxiaW5kRGF0YTpGdW5jdGlvbixyb3dEZXRhaWxzVGVtcGxhdGU6T2JqZWN0LGNvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSxzYWZhcmk6e3R5cGU6Qm9vbGVhbix2YWx1ZTovXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfSxzY3JvbGxiYXJXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKYS5zdHlsZS53aWR0aD0iMTAwcHgiO2Euc3R5bGUuaGVpZ2h0PSIxMDBweCI7YS5zdHlsZS5vdmVyZmxvdz0ic2Nyb2xsIjthLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7YS5zdHlsZS50b3A9Ii05OTk5cHgiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7dmFyIGM9YS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRoO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7cmV0dXJuIGN9fSx0YXJnZXQ6T2JqZWN0LGhhc0RhdGE6Qm9vbGVhbn0sb2JzZXJ2ZXJzOlsiX2NvbHVtblRyZWVDaGFuZ2VkKGNvbHVtblRyZWUsIF9waHlzaWNhbEl0ZW1zLCBfcGh5c2ljYWxDb3VudFZhbCkiLCJfc2l6ZUNoYW5nZWQoc2l6ZSwgYmluZERhdGEsIGhhc0RhdGEpIiwiX3Jvd0RldGFpbHNUZW1wbGF0ZUNoYW5nZWQocm93RGV0YWlsc1RlbXBsYXRlLCBfcGh5c2ljYWxJdGVtcywgX3BoeXNpY2FsQ291bnRWYWwpIl0sbGlzdGVuZXJzOnsicHJvcGVydHktY2hhbmdlZCI6Il9jb2x1bW5Qcm9wQ2hhbmdlZCIsCmFuaW1hdGlvbmVuZDoiX29uQW5pbWF0aW9uRW5kIiwiY29sdW1uLXJlc2l6aW5nIjoiX29uQ29sdW1uUmVzaXplIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLiQ9dGhpcy4kfHx7fTt0aGlzLiQuaGVhZGVyPXRoaXMuZG9tSG9zdC4kLmhlYWRlcjt0aGlzLiQuaXRlbXM9dGhpcy5kb21Ib3N0LiQuaXRlbXM7dGhpcy4kLmZvb3Rlcj10aGlzLmRvbUhvc3QuJC5mb290ZXJ9LF9vbkNvbHVtblJlc2l6ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLHRoaXMuJC5oZWFkZXIucXVlcnlTZWxlY3RvcigiW2NvbHVtbi1yZXNpemluZ10iKSk7dGhpcy5fZ3JpZFJlc2l6ZUhhbmRsZXIoKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKGEpey9hcHBlYXIvLnRlc3QoYS5hbmltYXRpb25OYW1lKSYmKHRoaXMuX3JlbmRlcigpLHRoaXMuX3VwZGF0ZUhlYWRlckZvb3Rlck1ldHJpY3MoKSxhLnN0b3BQcm9wYWdhdGlvbigpKX0sX2NvbHVtblByb3BDaGFuZ2VkOmZ1bmN0aW9uKGEpeyJoZWFkZXJUZW1wbGF0ZSI9PT0KYS5kZXRhaWwucGF0aCYmdGhpcy50b2dnbGVBdHRyaWJ1dGUoImhhcy10ZW1wbGF0ZXMiLCEwLHRoaXMuJC5oZWFkZXIpOyJmb290ZXJUZW1wbGF0ZSI9PT1hLmRldGFpbC5wYXRoJiZ0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgiaGFzLXRlbXBsYXRlcyIsITAsdGhpcy4kLmZvb3Rlcik7L2Zyb3plbnxoaWRkZW4vLnRlc3QoYS5kZXRhaWwucGF0aCkmJnRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpOyJoaWRkZW4iPT09YS5kZXRhaWwucGF0aCYmdGhpcy5fZ3JpZFJlc2l6ZUhhbmRsZXIoKX0sX2hpZGVPdXRlclNjcm9sbGVyOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIDA9PT1hJiYhY30sX2hpZGVUYWJsZU92ZXJmbG93OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIDA9PT1hJiZjfSxfcm93RGV0YWlsc1RlbXBsYXRlQ2hhbmdlZDpmdW5jdGlvbihhLGMsZCl7dm9pZCAwIT09YSYmYyYmdm9pZCAwIT09ZCYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGYpe2Yucm93RGV0YWlsc1RlbXBsYXRlPQphfSl9LF9jb2x1bW5UcmVlQ2hhbmdlZDpmdW5jdGlvbihhLGMsZCl7dm9pZCAwIT09YSYmYyYmdm9pZCAwIT09ZCYmKFBvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLHRoaXMuX3VwZGF0ZSksdGhpcy5fZnJvemVuQ2VsbHNDaGFuZ2VkKCksdGhpcy5faGFzVGVtcGxhdGVzQ2hhbmdlZChhKSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZil7Zi5jb2x1bW5zPWFbYS5sZW5ndGgtMV19KSx0aGlzLl9ncmlkUmVzaXplSGFuZGxlcigpLFBvbHltZXIuZG9tLmZsdXNoKHRoaXMpLHRoaXMuX3VwZGF0ZUxhc3RDb2x1bW4oKSl9LF91cGRhdGVMYXN0Q29sdW1uOmZ1bmN0aW9uKCl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChQb2x5bWVyLmRvbSh0aGlzLmRvbUhvc3Qucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLXJvdyIpLGZ1bmN0aW9uKGEpe2EudXBkYXRlTGFzdENvbHVtbigpfSl9LF91cGRhdGVIZWFkZXJGb290ZXJNZXRyaWNzOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxTaXplcyYmClBvbHltZXIuZG9tLmZsdXNoKCk7dGhpcy5fdXBkYXRlSGVhZGVyRm9vdGVyTWV0cmljc1N5bmMoKTtQb2x5bWVyLlJlbmRlclN0YXR1cy5hZnRlck5leHRSZW5kZXIodGhpcy4kLmhlYWRlcixmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUhlYWRlckZvb3Rlck1ldHJpY3NTeW5jKCk7dGhpcy5fcGVuZGluZ1Njcm9sbFRvU2NhbGVkSW5kZXgmJnRoaXMuc2Nyb2xsVG9TY2FsZWRJbmRleCh0aGlzLl9wZW5kaW5nU2Nyb2xsVG9TY2FsZWRJbmRleCl9LmJpbmQodGhpcykpfSxfdXBkYXRlSGVhZGVyRm9vdGVyTWV0cmljc1N5bmM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiQuaGVhZGVyLmNsaWVudEhlaWdodCsicHgiLGM9dGhpcy4kLmZvb3Rlci5jbGllbnRIZWlnaHQrInB4IjtbdGhpcy4kLm91dGVyc2l6ZXIsdGhpcy4kLmZpeGVkc2l6ZXIsdGhpcy4kLml0ZW1zXS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2Quc3R5bGUuYm9yZGVyVG9wV2lkdGg9YTtkLnN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPQpjfSl9LF9oYXNUZW1wbGF0ZXNDaGFuZ2VkOmZ1bmN0aW9uKGEpe3ZhciBjPSExLGQ9ITE7YS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3JldHVybiBmLmZvckVhY2goZnVuY3Rpb24oZyl7Yz1jfHxnLmhlYWRlclRlbXBsYXRlO2Q9ZHx8Zy5mb290ZXJUZW1wbGF0ZX0pfSk7dGhpcy50b2dnbGVBdHRyaWJ1dGUoImhhcy10ZW1wbGF0ZXMiLGMsdGhpcy4kLmhlYWRlcik7dGhpcy50b2dnbGVBdHRyaWJ1dGUoImhhcy10ZW1wbGF0ZXMiLGQsdGhpcy4kLmZvb3Rlcil9LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz1BcnJheShhKSxkPTA7ZDxhO2QrKyl7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtdGFibGUtcm93Iik7Zi50YXJnZXQ9dGhpcy5kb21Ib3N0O2NbZF09ZjtmLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIik7UG9seW1lci5kb20odGhpcy4kLml0ZW1zKS5hcHBlbmRDaGlsZChmKX1yZXR1cm4gY30sX3NpemVDaGFuZ2VkOmZ1bmN0aW9uKGEsCmMsZCl7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YyYmdm9pZCAwIT09ZCl7dmFyIGY9dGhpcy5fc2Nyb2xsVG9wLGc9dGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl92aWR4T2Zmc2V0O3RoaXMuX3ZpcnR1YWxDb3VudD1NYXRoLm1pbihhLDFFNSk7dGhpcy5fcGh5c2ljYWxJbmRleEZvcktleT17fTt0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGw7dGhpcy5fdmlkeE9mZnNldD0wO3RoaXMuX3BoeXNpY2FsSXRlbXN8fCh0aGlzLl9waHlzaWNhbENvdW50PU1hdGgubWF4KDEsTWF0aC5taW4oMjUsdGhpcy5fdmlydHVhbENvdW50KSksdGhpcy5fcGh5c2ljYWxJdGVtcz10aGlzLl9jcmVhdGVQb29sKHRoaXMuX3BoeXNpY2FsQ291bnQpLHRoaXMuX3BoeXNpY2FsU2l6ZXM9QXJyYXkodGhpcy5fcGh5c2ljYWxDb3VudCkpO3RoaXMuX2l0ZW1zUmVuZGVyZWQ9ITE7dGhpcy5fZGVib3VuY2VUZW1wbGF0ZShmdW5jdGlvbigpe3RoaXMuX3JlbmRlcigpOwp0aGlzLl92aWV3cG9ydEhlaWdodCYmKHRoaXMuc2Nyb2xsVG9TY2FsZWRJbmRleChNYXRoLm1pbihnLHRoaXMuc2l6ZSkpLHRoaXMuX3Njcm9sbFRvcD1mLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLmZsdXNoRGVib3VuY2VyKCJ2YWFkaW4tZ3JpZC1zY3JvbGxpbmciKSl9KX19LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oYSl7dGhpcy5fdmlydHVhbEluZGV4VG9JdGVtPXRoaXMuX3ZpcnR1YWxJbmRleFRvSXRlbXx8e307dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGMsZCl7Yz10aGlzLl9waHlzaWNhbEl0ZW1zW2NdO2MuaW5kZXgmJmRlbGV0ZSB0aGlzLl92aXJ0dWFsSW5kZXhUb0l0ZW1bYy5pbmRleF07Yy5pbmRleD1kK3RoaXMuX3ZpZHhPZmZzZXQ7dGhpcy5fdmlydHVhbEluZGV4VG9JdGVtW2MuaW5kZXhdPWM7Yy50b2dnbGVBdHRyaWJ1dGUoIm9kZCIsYy5pbmRleCUyKTtjLnRvZ2dsZUF0dHJpYnV0ZSgibGFzdHJvdyIsYy5pbmRleD09PXRoaXMuc2l6ZS0xKTtjLnRvZ2dsZUF0dHJpYnV0ZSgiaGlkZGVuIiwKYy5pbmRleD49dGhpcy5zaXplKTt0aGlzLmJpbmREYXRhKGMuaW5kZXgsYyl9LGEpfSxfZ3JpZFJlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVIZWFkZXJGb290ZXJNZXRyaWNzKCk7dGhpcy5fcGh5c2ljYWxTaXplcyYmKHRoaXMuX3BoeXNpY2FsSXRlbXMuZm9yRWFjaChmdW5jdGlvbihhKXthLnVwZGF0ZVJvd0RldGFpbHNDZWxsTWV0cmljcygpfSksdGhpcy5kZWJvdW5jZSgidmFhZGluLWdyaWQtcmVzaXppbmciLGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCl9LmJpbmQodGhpcyksMSkpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWNvbHVtbi5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5Db2x1bW5CYXNlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e3Jlc2l6YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOmZ1bmN0aW9uKCl7aWYoInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIhPT10aGlzLmxvY2FsTmFtZSl7dmFyIGE9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTtyZXR1cm4gYSYmInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT1hLmxvY2FsTmFtZT9hLnJlc2l6YWJsZXx8ITE6ITF9fX0saGVhZGVyVGVtcGxhdGU6e3R5cGU6T2JqZWN0fSxmb290ZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LGZyb3plbjp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTohMX0saGlkZGVuOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTohMX0sX29yZGVyOk51bWJlcixfcmVvcmRlclN0YXR1czpCb29sZWFufSxvYnNlcnZlcnM6WyJfZm9vdGVyVGVtcGxhdGVDaGFuZ2VkKGZvb3RlclRlbXBsYXRlKSIsCiJfaGVhZGVyVGVtcGxhdGVDaGFuZ2VkKGhlYWRlclRlbXBsYXRlKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShjKXswPD1jLmFkZGVkTm9kZXMubGVuZ3RoJiYodGhpcy5oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLmZvb3RlclRlbXBsYXRlPXRoaXMuX3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpLHRoaXMudGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpKX10aGlzLl90ZW1wbGF0ZU9ic2VydmVyPVBvbHltZXIuRWxlbWVudD9uZXcgUG9seW1lci5GbGF0dGVuZWROb2Rlc09ic2VydmVyKHRoaXMsYSk6UG9seW1lci5kb20odGhpcykub2JzZXJ2ZU5vZGVzKGEpfSxfcHJlcGFyZUhlYWRlclRlbXBsYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZXBhcmVUZW1wbGF0aXplcih0aGlzLl9maW5kVGVtcGxhdGUoInRlbXBsYXRlLmhlYWRlciIpfHxudWxsLAp7fSl9LF9wcmVwYXJlRm9vdGVyVGVtcGxhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgidGVtcGxhdGUuZm9vdGVyIil8fG51bGwse30pfSxfcHJlcGFyZUJvZHlUZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCJ0ZW1wbGF0ZTpub3QoLmhlYWRlcik6bm90KC5mb290ZXIpIix7fSkpfSxfcHJlcGFyZVRlbXBsYXRpemVyOmZ1bmN0aW9uKGEsYyl7aWYoYSYmIWEudGVtcGxhdGl6ZXIpe3ZhciBkPW5ldyB2YWFkaW4uZWxlbWVudHMuZ3JpZC5UZW1wbGF0aXplcjtkLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3Q7ZC5faW5zdGFuY2VQcm9wcz1jfHxkLl9pbnN0YW5jZVByb3BzO2QudGVtcGxhdGU9YTthLnRlbXBsYXRpemVyPWR9cmV0dXJuIGF9LF9zZWxlY3RGaXJzdFRlbXBsYXRlOmZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoUG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvckFsbChhKSwKZnVuY3Rpb24oYyl7cmV0dXJuIFBvbHltZXIuZG9tKGMpLnBhcmVudE5vZGU9PT10aGlzfS5iaW5kKHRoaXMpKVswXX0sX2ZpbmRUZW1wbGF0ZTpmdW5jdGlvbihhKXsoYT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKGEpKSYmdGhpcy5kYXRhSG9zdCYmKGEuX3Jvb3REYXRhSG9zdD10aGlzLmRhdGFIb3N0Ll9yb290RGF0YUhvc3R8fHRoaXMuZGF0YUhvc3QpO3JldHVybiBhfSxfaGVhZGVyVGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6ImhlYWRlclRlbXBsYXRlIix2YWx1ZTphfSl9LF9mb290ZXJUZW1wbGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoiZm9vdGVyVGVtcGxhdGUiLHZhbHVlOmF9KX0sX2ZsZXhHcm93Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLHtwYXRoOiJmbGV4R3JvdyIsdmFsdWU6YX0pfSxfd2lkdGhDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIsCntwYXRoOiJ3aWR0aCIsdmFsdWU6YX0pfSxfbGFzdEZyb3plbkNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoibGFzdEZyb3plbiIsdmFsdWU6YX0pfX07CnZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtbkJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7d2lkdGg6e3R5cGU6U3RyaW5nLHZhbHVlOiIxMDBweCJ9LGZsZXhHcm93Ont0eXBlOk51bWJlcix2YWx1ZToxfSx0ZW1wbGF0ZTp7dHlwZTpPYmplY3R9fSxvYnNlcnZlcnM6Il9mbGV4R3Jvd0NoYW5nZWQoZmxleEdyb3cpO193aWR0aENoYW5nZWQod2lkdGgpO190ZW1wbGF0ZUNoYW5nZWQodGVtcGxhdGUpO19mcm96ZW5DaGFuZ2VkKGZyb3plbiwgaXNBdHRhY2hlZCk7X2hpZGRlbkNoYW5nZWQoaGlkZGVuKTtfb3JkZXJDaGFuZ2VkKF9vcmRlcik7X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKF9yZW9yZGVyU3RhdHVzKTtfcmVzaXphYmxlQ2hhbmdlZChyZXNpemFibGUpIi5zcGxpdCgiOyIpLF9mcm96ZW5DaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmKHZvaWQgMD09PXRoaXMuX29sZEZyb3plbiYmITE9PT1hfHx0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLAp7cGF0aDoiZnJvemVuIix2YWx1ZTphfSksdGhpcy5fb2xkRnJvemVuPWEpfSxfdGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe2EmJmEudGVtcGxhdGl6ZXImJlBvbHltZXIuZG9tKHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQoYS50ZW1wbGF0aXplcik7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoidGVtcGxhdGUiLHZhbHVlOmF9LHtidWJibGVzOiExfSl9LF9oaWRkZW5DaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6ImhpZGRlbiIsdmFsdWU6YX0pfSxfb3JkZXJDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6Im9yZGVyIix2YWx1ZTphfSl9LF9yZW9yZGVyU3RhdHVzQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLHtwYXRoOiJyZW9yZGVyU3RhdHVzIix2YWx1ZTphfSl9LF9yZXNpemFibGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIsCntwYXRoOiJyZXNpemFibGUiLHZhbHVlOmF9KX19O3ZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtbkJlaGF2aW9yPVt2YWFkaW4uZWxlbWVudHMuZ3JpZC5Db2x1bW5CYXNlQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuQ29sdW1uQmVoYXZpb3JJbXBsXTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1jb2x1bW4uaHRtbC0yLmpzClBvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC1jb2x1bW4iLGJlaGF2aW9yczpbdmFhZGluLmVsZW1lbnRzLmdyaWQuQ29sdW1uQmVoYXZpb3JdfSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtYXJyYXktZGF0YS1wcm92aWRlci1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5BcnJheURhdGFQcm92aWRlckJlaGF2aW9yPXtwcm9wZXJ0aWVzOntpdGVtczpBcnJheX0sb2JzZXJ2ZXJzOlsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKikiXSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmKHRoaXMuc2l6ZT0oYXx8W10pLmxlbmd0aCx0aGlzLmRhdGFQcm92aWRlcj10aGlzLmRhdGFQcm92aWRlcnx8dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXIsdGhpcy5jbGVhckNhY2hlKCkpfSxfYXJyYXlEYXRhUHJvdmlkZXI6ZnVuY3Rpb24oYSxjKXt2YXIgZD0odGhpcy5pdGVtc3x8W10pLnNsaWNlKDApO3RoaXMuX2NoZWNrUGF0aHModGhpcy5fZmlsdGVycywiZmlsdGVyaW5nIixkKSYmKGQ9dGhpcy5fZmlsdGVyKGQpKTt0aGlzLnNpemU9ZC5sZW5ndGg7YS5zb3J0T3JkZXJzLmxlbmd0aCYmdGhpcy5fY2hlY2tQYXRocyh0aGlzLl9zb3J0ZXJzLCJzb3J0aW5nIixkKSYmKGQ9ZC5zb3J0KHRoaXMuX211bHRpU29ydC5iaW5kKHRoaXMpKSk7CnZhciBmPWEucGFnZSphLnBhZ2VTaXplO2MoZC5zbGljZShmLGYrYS5wYWdlU2l6ZSksZC5sZW5ndGgpfSxfY2hlY2tQYXRoczpmdW5jdGlvbihhLGMsZCl7aWYoIWQubGVuZ3RoKXJldHVybiExO3ZhciBmPSEwLGc7Zm9yKGcgaW4gYSl7dmFyIGw9YVtnXS5wYXRoO2lmKGwmJi0xIT09bC5pbmRleE9mKCIuIikpe3ZhciBrPWwucmVwbGFjZSgvXC5bXlwuXSokLywiIik7dm9pZCAwPT09UG9seW1lci5CYXNlLmdldChrLGRbMF0pJiYoY29uc29sZS53YXJuKCdQYXRoICInK2wrJyIgdXNlZCBmb3IgJytjKyIgZG9lcyBub3QgZXhpc3QgaW4gYWxsIG9mIHRoZSBpdGVtcywgIitjKyIgaXMgZGlzYWJsZWQuIiksZj0hMSl9fXJldHVybiBmfSxfbXVsdGlTb3J0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuX3NvcnRlcnMubWFwKGZ1bmN0aW9uKGQpe3JldHVybiJhc2MiPT09ZC5kaXJlY3Rpb24/dGhpcy5fY29tcGFyZShQb2x5bWVyLkJhc2UuZ2V0KGQucGF0aCxhKSxQb2x5bWVyLkJhc2UuZ2V0KGQucGF0aCwKYykpOiJkZXNjIj09PWQuZGlyZWN0aW9uP3RoaXMuX2NvbXBhcmUoUG9seW1lci5CYXNlLmdldChkLnBhdGgsYyksUG9seW1lci5CYXNlLmdldChkLnBhdGgsYSkpOjB9LHRoaXMpLnJlZHVjZShmdW5jdGlvbihkLGYpe3JldHVybiBkP2Q6Zn0sMCl9LF9ub3JtYWxpemVFbXB0eVZhbHVlOmZ1bmN0aW9uKGEpe3JldHVybiAwPD1bdm9pZCAwLG51bGxdLmluZGV4T2YoYSk/IiI6aXNOYU4oYSk/YS50b1N0cmluZygpOmF9LF9jb21wYXJlOmZ1bmN0aW9uKGEsYyl7YT10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKGEpO2M9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShjKTtyZXR1cm4gYTxjPy0xOmE+Yz8xOjB9LF9maWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiAwPT09dGhpcy5fZmlsdGVycy5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuLTE9PT10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKFBvbHltZXIuQmFzZS5nZXQoZC5wYXRoLGMpKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihkLnZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSl9LmJpbmQodGhpcykpLmxlbmd0aH0sCnRoaXMpfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtZHluYW1pYy1jb2x1bW5zLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLkR5bmFtaWNDb2x1bW5zQmVoYXZpb3I9e3JlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fYWRkTm9kZU9ic2VydmVyKCl9LF9oYXNDb2x1bW5Hcm91cHM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT1hW2NdLmxvY2FsTmFtZSlyZXR1cm4hMDtyZXR1cm4hMX0sX2dldENoaWxkQ29sdW1uczpmdW5jdGlvbihhKXtyZXR1cm4gUG9seW1lci5kb20oYSkucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKCJ2YWFkaW4tZ3JpZC1jb2x1bW4sIHZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCwgdmFhZGluLWdyaWQtc2VsZWN0aW9uLWNvbHVtbiIpfSxfZmxhdHRlbkNvbHVtbkdyb3VwczpmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT1jLmxvY2FsTmFtZT90aGlzLl9nZXRDaGlsZENvbHVtbnMoYyk6W2NdfSx0aGlzKS5yZWR1Y2UoZnVuY3Rpb24oYywKZCl7cmV0dXJuIGMuY29uY2F0KGQpfSxbXSl9LF9nZXRDb2x1bW5UcmVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGM9dGhpcy5xdWVyeUFsbEVmZmVjdGl2ZUNoaWxkcmVuKCJ2YWFkaW4tZ3JpZC1jb2x1bW4sIHZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCwgdmFhZGluLWdyaWQtc2VsZWN0aW9uLWNvbHVtbiIpOzspe2EucHVzaChjKTtpZighdGhpcy5faGFzQ29sdW1uR3JvdXBzKGMpKWJyZWFrO2M9dGhpcy5fZmxhdHRlbkNvbHVtbkdyb3VwcyhjKX1yZXR1cm4gYX0sX3VwZGF0ZUNvbHVtblRyZWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9nZXRDb2x1bW5UcmVlKCk7dGhpcy5fYXJyYXlFcXVhbHMoYSx0aGlzLl9jb2x1bW5UcmVlKXx8KHRoaXMuX2NvbHVtblRyZWU9YSl9LF9hZGROb2RlT2JzZXJ2ZXI6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj1Qb2x5bWVyLmRvbSh0aGlzKS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhkKXtyZXR1cm4gZC5ub2RlVHlwZT09PQpOb2RlLkVMRU1FTlRfTk9ERSYmL152YWFkaW4tZ3JpZC0oY29sdW1ufHNlbGVjdGlvbikvaS50ZXN0KGQubG9jYWxOYW1lKX0oMDxhLmFkZGVkTm9kZXMuZmlsdGVyKGMpLmxlbmd0aHx8MDxhLnJlbW92ZWROb2Rlcy5maWx0ZXIoYykubGVuZ3RoKSYmdGhpcy5fdXBkYXRlQ29sdW1uVHJlZSgpOyhQb2x5bWVyLlNldHRpbmdzLnVzZU5hdGl2ZVNoYWRvd3x8UG9seW1lci5TZXR0aW5ncy51c2VTaGFkb3cpJiZQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLiQuZm9vdGVyRm9jdXNUcmFwKTt0aGlzLmRlYm91bmNlKCJjaGVjay1pbXBvcnRzIix0aGlzLl9jaGVja0ltcG9ydHMsMkUzKX0uYmluZCh0aGlzKSl9LF9hcnJheUVxdWFsczpmdW5jdGlvbihhLGMpe2lmKCFhfHwhY3x8YS5sZW5ndGghPWMubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgZD0wLGY9YS5sZW5ndGg7ZDxmO2QrKylpZihhW2RdaW5zdGFuY2VvZiBBcnJheSYmY1tkXWluc3RhbmNlb2YgQXJyYXkpe2lmKCF0aGlzLl9hcnJheUVxdWFscyhhW2RdLApjW2RdKSlyZXR1cm4hMX1lbHNlIGlmKGFbZF0hPWNbZF0pcmV0dXJuITE7cmV0dXJuITB9LF9jaGVja0ltcG9ydHM6ZnVuY3Rpb24oKXtbInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIsInZhYWRpbi1ncmlkLXNvcnRlciIsInZhYWRpbi1ncmlkLWZpbHRlciIsInZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoYSk7IWN8fChQb2x5bWVyLmlzSW5zdGFuY2U/UG9seW1lci5pc0luc3RhbmNlKGMpOmMgaW5zdGFuY2VvZiBQb2x5bWVyLkVsZW1lbnQpfHxjb25zb2xlLndhcm4oIk1ha2Ugc3VyZSB5b3UgaGF2ZSBpbXBvcnRlZCB0aGUgcmVxdWlyZWQgbW9kdWxlIGZvciBceDNjIithKyJceDNlIGVsZW1lbnQuIil9LHRoaXMpfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtc29ydC1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5Tb3J0QmVoYXZpb3I9e3Byb3BlcnRpZXM6e211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LGxpc3RlbmVyczp7InNvcnRlci1jaGFuZ2VkIjoiX29uU29ydGVyQ2hhbmdlZCJ9LHJlYWR5OmZ1bmN0aW9uKCl7UG9seW1lci5FbGVtZW50JiYhUG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVTaGFkb3cmJnRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiKTtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGEsZnVuY3Rpb24oYyl7Yy5maXJlJiZjLmZpcmUoInNvcnRlci1jaGFuZ2VkIil9KX0pfSxfb25Tb3J0ZXJDaGFuZ2VkOmZ1bmN0aW9uKGEpe3ZhciBjPQphLnRhcmdldDt0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyxjKTtjLl9vcmRlcj1udWxsO3RoaXMubXVsdGlTb3J0PyhjLmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KGMpLHRoaXMuX3NvcnRlcnMuZm9yRWFjaChmdW5jdGlvbihkLGYpe2QuX29yZGVyPTE8dGhpcy5fc29ydGVycy5sZW5ndGg/ZjpudWxsfSx0aGlzKSk6KHRoaXMuX3NvcnRlcnMuZm9yRWFjaChmdW5jdGlvbihkKXtkLl9vcmRlcj1udWxsO2QuZGlyZWN0aW9uPW51bGx9KSxjLmRpcmVjdGlvbiYmKHRoaXMuX3NvcnRlcnM9W2NdKSk7YS5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLmRhdGFQcm92aWRlciYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpO3RoaXMuX3ByZXZpb3VzU29ydGVycz10aGlzLl9tYXBTb3J0ZXJzKCl9LF9tYXBTb3J0ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvcnRlcnMubWFwKGZ1bmN0aW9uKGEpe3JldHVybntwYXRoOmEucGF0aCwKZGlyZWN0aW9uOmEuZGlyZWN0aW9ufX0pfSxfcmVtb3ZlQXJyYXlJdGVtOmZ1bmN0aW9uKGEsYyl7Yz1hLmluZGV4T2YoYyk7LTE8YyYmYS5zcGxpY2UoYywxKX19OwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWZpbHRlci1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkLkZpbHRlckJlaGF2aW9yPXtwcm9wZXJ0aWVzOntfZmlsdGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LGxpc3RlbmVyczp7ImZpbHRlci1jaGFuZ2VkIjoiX2ZpbHRlckNoYW5nZWQifSxfZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihhKXstMT09PXRoaXMuX2ZpbHRlcnMuaW5kZXhPZihhLnRhcmdldCkmJnRoaXMuX2ZpbHRlcnMucHVzaChhLnRhcmdldCk7YS5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5jbGVhckNhY2hlKCl9LF9tYXBGaWx0ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlcnMubWFwKGZ1bmN0aW9uKGEpe3JldHVybntwYXRoOmEucGF0aCx2YWx1ZTphLnZhbHVlfX0pfX07CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQuaHRtbC5qcwpQb2x5bWVyKHtpczoidmFhZGluLWdyaWQiLHByb3BlcnRpZXM6e19jb2x1bW5UcmVlOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sc2l6ZTpOdW1iZXIsX3Jvd0RldGFpbHNUZW1wbGF0ZTpPYmplY3QsX2JpbmREYXRhOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRJdGVtLmJpbmQodGhpcyl9fX0sYmVoYXZpb3JzOltQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLFBvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkFjdGl2ZUl0ZW1CZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5Sb3dEZXRhaWxzQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuRGF0YVByb3ZpZGVyQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuRHluYW1pY0NvbHVtbnNCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5BcnJheURhdGFQcm92aWRlckJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLlNlbGVjdGlvbkJlaGF2aW9yLAp2YWFkaW4uZWxlbWVudHMuZ3JpZC5Tb3J0QmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuRmlsdGVyQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuQ29sdW1uUmVvcmRlcmluZ0JlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlS2V5Ym9hcmRCZWhhdmlvcl0sbGlzdGVuZXJzOnsicHJvcGVydHktY2hhbmdlZCI6Il9jb2x1bW5Qcm9wQ2hhbmdlZCIsImlyb24tcmVzaXplIjoiX2dyaWRSZXNpemVIYW5kbGVyIn0sX3VwZGF0ZUl0ZW06ZnVuY3Rpb24oYSxjKXthLnN0eWxlLm1pbkhlaWdodD1jPyIiOnRoaXMuJC5zY3JvbGxlci5fcGh5c2ljYWxBdmVyYWdlKyJweCI7YS5pdGVtPWM7YS5zZWxlY3RlZD10aGlzLl9pc1NlbGVjdGVkKGMpO2EuZXhwYW5kZWQ9dGhpcy5faXNFeHBhbmRlZChjKTthLmFjdGl2ZT1udWxsIT09YyYmYz09dGhpcy5hY3RpdmVJdGVtO2EuZm9jdXNlZD1hLmluZGV4PT09dGhpcy4kLml0ZW1zLl9mb2N1c2VkUm93SW5kZXh9LF9nZXRDb250ZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LApyZWFkeTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKTt0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcigidGVtcGxhdGUucm93LWRldGFpbHMiKXx8dm9pZCAwO3RoaXMuJC5zY3JvbGxlci50YXJnZXQ9dGhpcztudWxsPT09ZG9jdW1lbnQuZG9jdHlwZSYmY29uc29sZS53YXJuKCdceDNjdmFhZGluLWdyaWRceDNlIHJlcXVpcmVzIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIFx4M2MhRE9DVFlQRSBodG1sXHgzZSB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX0sX2NvbHVtblByb3BDaGFuZ2VkOmZ1bmN0aW9uKGEpeyJfY2hpbGRDb2x1bW5zIj09PWEuZGV0YWlsLnBhdGgmJnRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKTthLnN0b3BQcm9wYWdhdGlvbigpfSxfZ3JpZFJlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLiQuc2Nyb2xsZXIuX2dyaWRSZXNpemVIYW5kbGVyKCl9fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMiLHByb3BlcnRpZXM6e2JhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZyx2aXNpYmxlU2NoZW1hOk9iamVjdCxzZXNzaW9uR3JvdXA6T2JqZWN0LF94VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6JG8uWFR5cGUuU1RFUH0sX25vTXVsdGlFeHBlcmltZW50czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5kZXhPZlNlc3Npb246T2JqZWN0LF9zZXNzaW9uR3JvdXBOYW1lSGFzaDpOdW1iZXIsX3JlcXVlc3REYXRhOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKHt0YWc6YSxydW46Y30pPT50aGlzLmJhY2tlbmQubGlzdE1ldHJpY0V2YWxzKHtleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLHNlc3Npb25OYW1lOmMsbWV0cmljTmFtZTphfSl9fSxfY29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57c2NhbGU6YT0+e2E9SlNPTi5wYXJzZShhKVsxXTsKYT10aGlzLl9pbmRleE9mU2Vzc2lvbi5nZXQoYSk7Y29uc3QgYz1Yby5zdGFuZGFyZDtyZXR1cm4gY1sodGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2grYSklYy5sZW5ndGhdfX19fX0sYmVoYXZpb3JzOltQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcl0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJyZWRyYXcifSxvYnNlcnZlcnM6WyJfc2Vzc2lvbkdyb3VwQ2hhbmdlZChzZXNzaW9uR3JvdXAuKikiXSxyZWRyYXcoKXtQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXNjYWxhci1jYXJkIikuZm9yRWFjaChhPT5hLnJlZHJhdygpKX0sX3Nlc3Npb25Hcm91cENoYW5nZWQoKXt0aGlzLnNlc3Npb25Hcm91cD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKGEsYyk9PlthLm5hbWUsY10pKSx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD10Zi5ocGFyYW1zLnV0aWxzLmhhc2hPZlN0cmluZyh0aGlzLnNlc3Npb25Hcm91cC5uYW1lKSk6Cih0aGlzLl9pbmRleE9mU2Vzc2lvbj1uZXcgTWFwLHRoaXMuX3Nlc3Npb25Hcm91cE5hbWVIYXNoPTApO1BvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKGE9Pntjb25zdCBjPWEuZ2V0KCJ0YWciKTthLnNldCgidGFnIiwiIik7YS5zZXQoInRhZyIsYyl9KX0sX2hhdmVNZXRyaWNzKCl7cmV0dXJuIHRoaXMudmlzaWJsZVNjaGVtYSYmQXJyYXkuaXNBcnJheSh0aGlzLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MpJiYwPHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGh9LF9oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCYmdGhpcy5faGF2ZU1ldHJpY3MoKX0sX2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWMoYSxjKXtyZXR1cm4gbnVsbD09PWF8fG51bGw9PT1jP1tdOmEuc2Vzc2lvbnMuZmlsdGVyKGQ9PnZvaWQgMCE9PXRmLmhwYXJhbXMudXRpbHMubWV0cmljVmFsdWVCeU5hbWUoZC5tZXRyaWNWYWx1ZXMsCmMubmFtZSkpLm1hcChkPT4oe3RhZzpjLm5hbWUscnVuOmQubmFtZX0pKX0sX2NvbXB1dGVUYWdNZXRhZGF0YShhKXtyZXR1cm57ZGlzcGxheU5hbWU6dGYuaHBhcmFtcy51dGlscy5tZXRyaWNOYW1lKGEpLGRlc2NyaXB0aW9uOmEuZGVzY3JpcHRpb258fCIifX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ocGFyYW1zLXRhYmxlLXZpZXcvdGYtaHBhcmFtcy10YWJsZS12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhwYXJhbXMtdGFibGUtdmlldyIscHJvcGVydGllczp7dmlzaWJsZVNjaGVtYTpPYmplY3Qsc2Vzc2lvbkdyb3VwczpBcnJheSxlbmFibGVTaG93TWV0cmljczpCb29sZWFuLGJhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZ30sb2JzZXJ2ZXJzOlsiX3Zpc2libGVTY2hlbWFPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3Vwcy4qKSJdLF92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2NvbnN0IGE9dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5nZXQoImV4cGFuZGVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZXhwYW5kZWRJdGVtcyIsW10pO1BvbHltZXIuZG9tLmZsdXNoKCk7Y29uc3QgYz1uZXcgTWFwO3RoaXMuc2Vzc2lvbkdyb3Vwcy5mb3JFYWNoKGQ9PntjLnNldChkLm5hbWUsZCl9KTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZXhwYW5kZWRJdGVtcyIsCmEubWFwKGQ9PmMuZ2V0KGQubmFtZSkpLmZpbHRlcihCb29sZWFuKSl9LF9ocGFyYW1OYW1lOnRmLmhwYXJhbXMudXRpbHMuaHBhcmFtTmFtZSxfbWV0cmljTmFtZTp0Zi5ocGFyYW1zLnV0aWxzLm1ldHJpY05hbWUsX3Nlc3Npb25Hcm91cEhQYXJhbShhLGMpe3JldHVybiBudWxsIT1hJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYS5ocGFyYW1zLGMpP3RmLmhwYXJhbXMudXRpbHMucHJldHR5UHJpbnQoYS5ocGFyYW1zW2NdKToiIn0sX3Nlc3Npb25Hcm91cE1ldHJpYyhhLGMpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7Zm9yKGxldCBkPTA7ZDxhLm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytkKXtsZXQgZj1hLm1ldHJpY1ZhbHVlc1tkXTtpZihmLm5hbWUuZ3JvdXA9PT1jLmdyb3VwJiZmLm5hbWUudGFnPT1jLnRhZylyZXR1cm4gdGYuaHBhcmFtcy51dGlscy5wcmV0dHlQcmludChmLnZhbHVlKX1yZXR1cm4iIn0sX3Jvd051bWJlcihhKXtyZXR1cm4gYSsxfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIixwcm9wZXJ0aWVzOntzZXNzaW9uR3JvdXA6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LHZpc2libGVTY2hlbWE6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9fSxfcHJvcGVydGllc0FyZVBvcHVsYXRlZDpmdW5jdGlvbihhLGMpe3JldHVybiB2b2lkIDAhPT1hJiZudWxsIT09YSYmdm9pZCAwIT09YyYmbnVsbCE9PWN9LF9zaW5nbGV0b25TZXNzaW9uR3JvdXBzOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YXx8dm9pZCAwPT09YT9bXTpbYV19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC91dGlscy5odG1sLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGYoZyxsLGspe2Z1bmN0aW9uIG4oKXtpZigwPT09Zy5sZW5ndGgpcmV0dXJuWzEsMl07Y29uc3QgW3AscV09ZDMuZXh0ZW50KGcpO3JldHVybiBwIT09cT9bcCxxXTowPHA/Wy41KnAsMS41KnBdOjA+cD9bMS41KnAsLjUqcF06Wy0xLDFdfWlmKCJMSU5FQVIiPT09aylyZXR1cm4gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4obigpKS5yYW5nZShbbCwwXSk7aWYoIkxPRyI9PT1rKXJldHVybiBrPW4oKSwwPj1rWzBdJiYwPD1rWzFdP2YoZyxsLCJMSU5FQVIiKTpkMy5zY2FsZUxvZygpLmRvbWFpbihrKS5yYW5nZShbbCwwXSk7aWYoIlFVQU5USUxFIj09PWspcmV0dXJuIGs9ZDMucmFuZ2UoMjApLm1hcChwPT5sLXAqbC8xOSksMD09PWcubGVuZ3RoJiYoZz1bMV0pLGQzLnNjYWxlUXVhbnRpbGUoKS5kb21haW4oXy51bmlxKGcpKS5yYW5nZShrKTtpZigiTk9OX05VTUVSSUMiPT09aylyZXR1cm4gZDMuc2NhbGVQb2ludCgpLmRvbWFpbihfLnVuaXEoZy5zb3J0KCkpKS5yYW5nZShbbCwKMF0pLnBhZGRpbmcoLjEpO3Rocm93IFJhbmdlRXJyb3IoIlVua25vd24gc2NhbGU6ICIrayk7fWQuZmluZENsb3Nlc3RQYXRoPWZ1bmN0aW9uKGcsbCxrKXtmdW5jdGlvbiBuKHoseCxDLEYpe2NvbnN0IEQ9ei1DLEI9eC1GO0M9cC1DO0Y9cS1GO2NvbnN0IEk9KEQqQytCKkYpLyhEKkQrQipCKTtyZXR1cm4gMD49ST9hLmhwYXJhbXMudXRpbHMubDJOb3JtU3F1YXJlZChDLEYpOjE8PUk/YS5ocGFyYW1zLnV0aWxzLmwyTm9ybVNxdWFyZWQoei1wLHgtcSk6YS5ocGFyYW1zLnV0aWxzLmwyTm9ybVNxdWFyZWQoQy1JKkQsRi1JKkIpfWlmKDI+bC5sZW5ndGgpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxlc3MgdGhhbiB0d28gYXhlcyBpbiBwYXJhbGxlbCBjb29yZGluYXRlcyBwbG90LiIpLG51bGw7Y29uc3QgcD1rWzBdLHE9a1sxXTtpZihwPD1sWzBdfHxwPj1sW2wubGVuZ3RoLTFdKXJldHVybiBudWxsO2NvbnN0IHI9Xy5zb3J0ZWRJbmRleChsLHApO2NvbnNvbGUuYXNzZXJ0KDA8cik7CmNvbnNvbGUuYXNzZXJ0KHI8bC5sZW5ndGgpO2NvbnN0IHQ9ci0xO2xldCB2PW51bGwseT1udWxsO2cuZm9yRWFjaCh6PT57Y29uc3QgeD1uKHouY29udHJvbFBvaW50c1t0XVswXSx6LmNvbnRyb2xQb2ludHNbdF1bMV0sei5jb250cm9sUG9pbnRzW3JdWzBdLHouY29udHJvbFBvaW50c1tyXVsxXSk7MTAwPHh8fCEobnVsbD09PXZ8fHg8dil8fCh2PXgseT16KX0pO3JldHVybiB5fTtkLnBvaW50U2NhbGVJbnZlcnNlSW1hZ2U9ZnVuY3Rpb24oZyxsLGspe3JldHVybiBnLmRvbWFpbigpLmZpbHRlcihuPT57bj1nKG4pO3JldHVybiBsPD1uJiZuPD1rfSl9O2QucXVhbnRpbGVTY2FsZUludmVyc2VJbWFnZT1mdW5jdGlvbihnLGwsayl7Y29uc3Qgbj1nLnJhbmdlKCkscD1uLmZpbHRlcihxPT5sPD1xJiZxPD1rKS5tYXAocT0+e2NvbnN0IHI9Zy5pbnZlcnRFeHRlbnQocSk7cmV0dXJuIHE9PT1uW24ubGVuZ3RoLTFdP1tyWzBdLHJbMV0rMV06cn0pO3JldHVybiAwPT1wLmxlbmd0aD9bMCwKMF06ZDMuZXh0ZW50KGQzLm1lcmdlKHApKX07ZC5jb250aW51b3VzU2NhbGVJbnZlcnNlSW1hZ2U9ZnVuY3Rpb24oZyxsLGspe3JldHVybltnLmludmVydChsKSxnLmludmVydChrKV0uc29ydCgobixwKT0+bi1wKX07ZC5jcmVhdGVBeGlzU2NhbGU9Zn0pKGMucGFyYWxsZWxfY29vcmRzX3Bsb3R8fChjLnBhcmFsbGVsX2Nvb3Jkc19wbG90PXt9KSl9KShhLmhwYXJhbXN8fChhLmhwYXJhbXM9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90L2F4ZXMuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZihyKXtyZXR1cm4gbnVsbCE9PXIuc291cmNlRXZlbnR9bGV0IGc7KGZ1bmN0aW9uKHIpe3IuTElORUFSPSJMSU5FQVIiO3IuTE9HPSJMT0ciO3IuUVVBTlRJTEU9IlFVQU5USUxFIjtyLk5PTl9OVU1FUklDPSJOT05fTlVNRVJJQyJ9KShnPWQuU2NhbGVUeXBlfHwoZC5TY2FsZVR5cGU9e30pKTtjbGFzcyBse2lzUGFzc2luZygpe3JldHVybiEwfX1jbGFzcyBre2NvbnN0cnVjdG9yKHIsdCx2LHkpe3RoaXMuX2xvd2VyPXI7dGhpcy5fdXBwZXI9dDt0aGlzLl9sb3dlck9wZW49djt0aGlzLl91cHBlck9wZW49eX1pc1Bhc3Npbmcocil7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixyLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUocix0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHIsdCx2KXtyZXR1cm4gdj9yPD10OnI8dH19Y2xhc3Mgbntjb25zdHJ1Y3RvcihyKXt0aGlzLl9kb21haW5TZXQ9CnJ9aXNQYXNzaW5nKHIpe3JldHVybi0xIT09dGhpcy5fZG9tYWluU2V0LmZpbmRJbmRleCh0PT50PT09cil9fWNsYXNzIHB7Y29uc3RydWN0b3Iocix0LHYseSl7dGhpcy5fc3ZnUHJvcHM9cjt0aGlzLl9zY2hlbWE9dDt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9djt0aGlzLl9jb2xJbmRleD15O3RoaXMuX2lzRGlzcGxheWVkPSExO3RoaXMuX3NjYWxlVHlwZT10aGlzLl95U2NhbGU9bnVsbDt0aGlzLnNldEJydXNoU2VsZWN0aW9uKG51bGwpfWNvbEluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbEluZGV4fXlTY2FsZSgpe3JldHVybiB0aGlzLl95U2NhbGV9c2NhbGVUeXBlKCl7cmV0dXJuIHRoaXMuX3NjYWxlVHlwZX1icnVzaFNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9icnVzaFNlbGVjdGlvbn1pc0Rpc3BsYXllZCgpe3JldHVybiB0aGlzLl9pc0Rpc3BsYXllZH1zZXRCcnVzaFNlbGVjdGlvbihyKXt0aGlzLl9icnVzaFNlbGVjdGlvbj1yO3RoaXMuX2JydXNoRmlsdGVyPXRoaXMuX2J1aWxkQnJ1c2hGaWx0ZXIodGhpcy5icnVzaFNlbGVjdGlvbigpLAp0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfXNldERvbWFpbkFuZFNjYWxlKHIsdCl7dGhpcy5fc2NhbGVUeXBlPXQ7dGhpcy5feVNjYWxlPWEuaHBhcmFtcy5wYXJhbGxlbF9jb29yZHNfcGxvdC5jcmVhdGVBeGlzU2NhbGUoci5zbGljZSgpLHRoaXMuX3N2Z1Byb3BzLmhlaWdodCx0aGlzLnNjYWxlVHlwZSgpKTt0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfWJydXNoRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2JydXNoRmlsdGVyfXVwZGF0ZURPTShyKXt2YXIgdD1kMy5heGlzTGVmdCh0aGlzLnlTY2FsZSgpKTt0aGlzLnNjYWxlVHlwZSgpPT09Zy5RVUFOVElMRSYmKHQ9dC50aWNrVmFsdWVzKHRoaXMueVNjYWxlKCkucXVhbnRpbGVzKCkpLnRpY2tGb3JtYXQoZDMuZm9ybWF0KCItLjZnIikpKTt2YXIgdj1kMy5zZWxlY3Qocik7di5zZWxlY3RBbGwoImciKS5yZW1vdmUoKTsKdi5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzIiwhMCkuY2FsbCh0KS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRpdGxlIiwhMCkuc3R5bGUoImN1cnNvciIsIm1vdmUiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ5IiwtOSkudGV4dCh5PT5hLmhwYXJhbXMudXRpbHMuc2NoZW1hQ29sdW1uTmFtZSh0aGlzLl9zY2hlbWEseSkpO3YuY2FsbChkMy5kcmFnKCkub24oInN0YXJ0IiwoKT0+e3Iuc2V0QXR0cmlidXRlKCJpcy1kcmFnZ2luZyIsIiIpO3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdTdGFydCh0aGlzLmNvbEluZGV4KCkpfSkub24oImRyYWciLCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKGQzLmV2ZW50LngpKS5vbigiZW5kIiwoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKTtyLnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKTt0PWQzLmJydXNoWSgpLmV4dGVudChbWy04LDBdLApbOCx0aGlzLl9zdmdQcm9wcy5oZWlnaHQrMV1dKS5vbigic3RhcnQiLCgpPT57ZihkMy5ldmVudCkmJihyLnNldEF0dHJpYnV0ZSgiaXMtYnJ1c2hpbmciLCIiKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpKSl9KS5vbigiYnJ1c2giLCgpPT57aWYoZihkMy5ldmVudCkpdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSl9KS5vbigiZW5kIiwoKT0+e2YoZDMuZXZlbnQpJiYodGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSksci5yZW1vdmVBdHRyaWJ1dGUoImlzLWJydXNoaW5nIikpfSk7dj1kMy5zZWxlY3QocikuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnJ1c2giLCEwKTt2LmNhbGwodCk7dC5tb3ZlKHYsdGhpcy5icnVzaFNlbGVjdGlvbigpKX1zZXREaXNwbGF5ZWQocil7dGhpcy5faXNEaXNwbGF5ZWQ9cn1fYnVpbGRCcnVzaEZpbHRlcihyLAp0LHYpe2lmKG51bGw9PT1yKXJldHVybiBuZXcgbDtpZihudWxsPT09dClyZXR1cm4gY29uc29sZS5lcnJvcigiU2NhbGUgdHlwZSBpcyBudWxsLCBidXQgYnJ1c2hTZWxlY3Rpb24gaXNuJ3Q6ICIsciksbmV3IGw7c3dpdGNoKHQpe2Nhc2UgZy5MSU5FQVI6Y2FzZSBnLkxPRzp7Y29uc3QgW3ksel09YS5ocGFyYW1zLnBhcmFsbGVsX2Nvb3Jkc19wbG90LmNvbnRpbnVvdXNTY2FsZUludmVyc2VJbWFnZSh2LHJbMF0sclsxXSk7cmV0dXJuIG5ldyBrKHkseiwhMSwhMSl9Y2FzZSBnLlFVQU5USUxFOntjb25zdCBbeSx6XT1hLmhwYXJhbXMucGFyYWxsZWxfY29vcmRzX3Bsb3QucXVhbnRpbGVTY2FsZUludmVyc2VJbWFnZSh2LHJbMF0sclsxXSk7cmV0dXJuIG5ldyBrKHkseiwhMSwhMCl9Y2FzZSBnLk5PTl9OVU1FUklDOnJldHVybiBuZXcgbihhLmhwYXJhbXMucGFyYWxsZWxfY29vcmRzX3Bsb3QucG9pbnRTY2FsZUludmVyc2VJbWFnZSh2LHJbMF0sclsxXSkpfWNvbnNvbGUuZXJyb3IoIlVua25vd24gc2NhbGUgdHlwZTogIiwKdCk7cmV0dXJuIG5ldyBsfX1kLkF4aXM9cDtjbGFzcyBxe2NvbnN0cnVjdG9yKHIsdCx2KXt0aGlzLl9zdmdQcm9wcz1yO3RoaXMuX3NjaGVtYT10O3RoaXMuX2F4ZXM9dGhpcy5fY3JlYXRlQXhlcyh2KTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucz1kMy5zY2FsZVBvaW50KCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpO3RoaXMuX2RyYWdnZWRBeGlzPW51bGw7dGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKTt0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHIsdCl7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7Y29uc3Qgdj1uZXcgU2V0O3IuY29sdW1ucy5mb3JFYWNoKHo9Pntjb25zdCB4PXouYWJzb2x1dGVJbmRleDtsZXQgQz10aGlzLl9heGVzW3hdO0Muc2V0RGlzcGxheWVkKCEwKTsKY29uc3QgRj10Lm1hcChEPT5hLmhwYXJhbXMudXRpbHMuY29sdW1uVmFsdWVCeUluZGV4KHRoaXMuX3NjaGVtYSxELHgpKTtDLnNldERvbWFpbkFuZFNjYWxlKEYsei5zY2FsZSk7di5hZGQoeCl9KTt0aGlzLl9heGVzLmZvckVhY2goej0+e3YuaGFzKHouY29sSW5kZXgoKSl8fHouc2V0RGlzcGxheWVkKCExKX0pO3RoaXMuX3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHYpO3RoaXMuX3BhcmVudHNTZWw9dGhpcy5fcGFyZW50c1NlbC5kYXRhKEFycmF5LmZyb20odiksej0+eik7dGhpcy5fcGFyZW50c1NlbC5leGl0KCkucmVtb3ZlKCk7dGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcy1wYXJlbnQiLCEwKS5tZXJnZSh0aGlzLl9wYXJlbnRzU2VsKTtjb25zdCB5PXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKHo9PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh6KSkuZWFjaChmdW5jdGlvbih6KXt5Ll9heGVzW3pdLnVwZGF0ZURPTSh0aGlzKX0pfW1hcFZpc2libGVBeGVzKHIpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAodD0+CnIodGhpcy5nZXRBeGlzUG9zaXRpb24odCksdGhpcy5fYXhlc1t0XSkpfWFsbFZpc2libGVBeGVzU2F0aXNmeShyKXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkuZXZlcnkodD0+cih0aGlzLmdldEF4aXNQb3NpdGlvbih0KSx0aGlzLl9heGVzW3RdKSl9Z2V0QXhpc0ZvckNvbEluZGV4KHIpe3JldHVybiB0aGlzLl9heGVzW3JdfWRyYWdTdGFydChyKXtjb25zb2xlLmFzc2VydCghdGhpcy5pc0F4aXNEcmFnZ2luZygpKTtjb25zb2xlLmFzc2VydCh0aGlzLl9heGVzW3JdLmlzRGlzcGxheWVkKCkpO3RoaXMuX2RyYWdnZWRBeGlzPXRoaXMuX2F4ZXNbcl07dGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyhyKX1kcmFnKHIpe3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249cj1NYXRoLm1pbihNYXRoLm1heChyLDApLHRoaXMuX3N2Z1Byb3BzLndpZHRoKTtyPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpOwpyLnNvcnQoKHQsdik9PnRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHQpLXRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHYpKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4ocik7dGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwpfWRyYWdFbmQoKXtjb25zb2xlLmFzc2VydCh0aGlzLmlzQXhpc0RyYWdnaW5nKCkpO3RoaXMuX2RyYWdnZWRBeGlzPXRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249bnVsbDt0aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odGhpcy5fcGFyZW50c1NlbC50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKSl9aXNBeGlzRHJhZ2dpbmcoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2RyYWdnZWRBeGlzfWdldEF4aXNQb3NpdGlvbihyKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2RyYWdnZWRBeGlzJiZ0aGlzLl9kcmFnZ2VkQXhpcy5jb2xJbmRleCgpPT09cj90aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uOnRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHIpfV91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyhyKXt2YXIgdD0KdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkuZmlsdGVyKHY9PnIuaGFzKHYpKTt0PUFycmF5LmZyb20obmV3IFNldChbLi4udCwuLi5BcnJheS5mcm9tKHIpXSkpO3RoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbih0KX1fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHIpe3IuYXR0cigidHJhbnNmb3JtIix0PT5hLmhwYXJhbXMudXRpbHMudHJhbnNsYXRlU3RyKHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHQpKSl9X2NyZWF0ZUF4ZXMocil7cmV0dXJuIGQzLnJhbmdlKGEuaHBhcmFtcy51dGlscy5udW1Db2x1bW5zKHRoaXMuX3NjaGVtYSkpLm1hcCh0PT5uZXcgcCh0aGlzLl9zdmdQcm9wcyx0aGlzLl9zY2hlbWEscix0KSl9fWQuQXhlc0NvbGxlY3Rpb249cX0pKGMucGFyYWxsZWxfY29vcmRzX3Bsb3R8fChjLnBhcmFsbGVsX2Nvb3Jkc19wbG90PXt9KSl9KShhLmhwYXJhbXN8fChhLmhwYXJhbXM9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90L2xpbmVzLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2xldCBmOyhmdW5jdGlvbihrKXtrW2suRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCI7a1trLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoZj1kLkxpbmVUeXBlfHwoZC5MaW5lVHlwZT17fSkpO2NsYXNzIGd7Y29uc3RydWN0b3Ioayl7dm9pZCAwPT09ayYmKGs9ZDMuc2VsZWN0QWxsKG51bGwpKTtjb25zb2xlLmFzc2VydCgxPj1rLnNpemUoKSk7dGhpcy5fc2Vzc2lvbkdyb3VwU2VsPWt9c2Vzc2lvbkdyb3VwKCl7cmV0dXJuIDE9PT10aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpP3RoaXMuX3Nlc3Npb25Hcm91cFNlbC5kYXR1bSgpOm51bGx9aXNOdWxsKCl7cmV0dXJuIG51bGw9PT10aGlzLnNlc3Npb25Hcm91cCgpfXNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWx9ZXF1YWxzVG8oayl7cmV0dXJuIHRoaXMuaXNOdWxsKCk/ay5pc051bGwoKTprLmlzTnVsbCgpPyExOmsuc2Vzc2lvbkdyb3VwKCkubmFtZT09CnRoaXMuc2Vzc2lvbkdyb3VwKCkubmFtZX19ZC5TZXNzaW9uR3JvdXBIYW5kbGU9ZztjbGFzcyBse2NvbnN0cnVjdG9yKGssbixwKXt0aGlzLl9zdmdQcm9wcz1rO3RoaXMuX3NjaGVtYT1uO3RoaXMuX2F4ZXNDb2xsZWN0aW9uPXA7dGhpcy5fc2Vzc2lvbkdyb3Vwcz1bXTt0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5iYWNrZ3JvdW5kIikucmVtb3ZlKCk7dGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuZm9yZWdyb3VuZCIpLnJlbW92ZSgpO3RoaXMuX2JnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIik7dGhpcy5fZmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZvcmVncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKTt0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpO3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT0KbmV3IGc7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9bmV3IGc7dGhpcy5fZDNsaW5lPWQzLmxpbmUoKS5jdXJ2ZShkMy5jdXJ2ZUxpbmVhcil9Z2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGspe3JldHVybiBudWxsPT09a3x8dm9pZCAwPT09az9uZXcgZzpuZXcgZyh0aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcihuPT5uLm5hbWU9PT1rLm5hbWUpKX1oaWRlQmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9c2hvd0JhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsbnVsbCl9cGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZX1zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZX1yZWNvbXB1dGVDb250cm9sUG9pbnRzKGssbj0wKXsoaz09PWYuRk9SRUdST1VORD8KdGhpcy5fZmdQYXRoc1NlbDp0aGlzLl9iZ1BhdGhzU2VsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obikuYXR0cigiZCIscD0+dGhpcy5fcGF0aERBdHRyaWJ1dGUocCkpO2s9PT1mLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57Y29uc3QgcD10aGlzO3RoaXMuX2ZnUGF0aHNTZWwuZWFjaChmdW5jdGlvbihxKXtwLl9zZXRDb250cm9sUG9pbnRzUHJvcGVydHkodGhpcyxxKX0pfSl9cmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpe3RoaXMuX2ZnUGF0aHNTZWwuY2xhc3NlZCgiaW52aXNpYmxlLXBhdGgiLGs9PiF0aGlzLl9heGVzQ29sbGVjdGlvbi5hbGxWaXNpYmxlQXhlc1NhdGlzZnkoKG4scCk9PnAuYnJ1c2hGaWx0ZXIoKS5pc1Bhc3NpbmcoYS5ocGFyYW1zLnV0aWxzLmNvbHVtblZhbHVlQnlJbmRleCh0aGlzLl9zY2hlbWEsayxwLmNvbEluZGV4KCkpKSkpO3RoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl9c2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IoaywKbixwKXtrPXRoaXMuX2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKGssbixwKTt0aGlzLl9mZ1BhdGhzU2VsLmF0dHIoInN0cm9rZSIsayl9cmVkcmF3KGssbixwLHEpe2NvbnN0IHI9dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLHQ9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz1rO3RoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKTt0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCk7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKHIpO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKHQpO3RoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhmLkZPUkVHUk9VTkQpOwp0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZi5CQUNLR1JPVU5EKTt0aGlzLnJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKTt0aGlzLnNldEZvcmVncm91bmRMaW5lc0NvbG9yKG4scCxxKX11cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAoayl7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMSk7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPWs7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMCl9Y2xlYXJQZWFrZWRTZXNzaW9uR3JvdXAoKXt0aGlzLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cChuZXcgZyl9dXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAoayl7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITEpO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPQprO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInNlbGVjdGVkLXBhdGgiLCEwKX1maW5kQ2xvc2VzdFNlc3Npb25Hcm91cChrLG4pe2NvbnN0IHA9dGhpcy5fYXhlc0NvbGxlY3Rpb24ubWFwVmlzaWJsZUF4ZXMocT0+cSk7az1hLmhwYXJhbXMucGFyYWxsZWxfY29vcmRzX3Bsb3QuZmluZENsb3Nlc3RQYXRoKHRoaXMuX3Zpc2libGVGZ1BhdGhzU2VsLm5vZGVzKCkscCxbayxuXSk7cmV0dXJuIG51bGw9PT1rP25ldyBnOm5ldyBnKGQzLnNlbGVjdChrKSl9X2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKGssbixwKXtpZihudWxsPT09aylyZXR1cm4oKT0+InJlZCI7Y29uc3QgcT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihhLmhwYXJhbXMudXRpbHMubnVtZXJpY0NvbHVtbkV4dGVudCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3VwcyxrKSkucmFuZ2UoW24scF0pLmludGVycG9sYXRlKGQzLmludGVycG9sYXRlTGFiKTtyZXR1cm4gcj0+CnEoYS5ocGFyYW1zLnV0aWxzLmNvbHVtblZhbHVlQnlJbmRleCh0aGlzLl9zY2hlbWEscixrKSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24oayl7az1rLmRhdGEodGhpcy5fc2Vzc2lvbkdyb3VwcyxuPT5uLm5hbWUpO2suZXhpdCgpLnJlbW92ZSgpO3JldHVybiBrLmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2Uoayl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eShrLG4pe2suY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhuKX1fY29tcHV0ZUNvbnRyb2xQb2ludHMoayl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChuLHApPT5bbixwLnlTY2FsZSgpKGEuaHBhcmFtcy51dGlscy5jb2x1bW5WYWx1ZUJ5SW5kZXgodGhpcy5fc2NoZW1hLGsscC5jb2xJbmRleCgpKSldKX1fcGF0aERBdHRyaWJ1dGUoayl7cmV0dXJuIHRoaXMuX2QzbGluZSh0aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhrKSl9X3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl7dGhpcy5fdmlzaWJsZUZnUGF0aHNTZWw9CnRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19ZC5MaW5lc0NvbGxlY3Rpb249bH0pKGMucGFyYWxsZWxfY29vcmRzX3Bsb3R8fChjLnBhcmFsbGVsX2Nvb3Jkc19wbG90PXt9KSl9KShhLmhwYXJhbXN8fChhLmhwYXJhbXM9e30pKX0pKHRmfHwodGY9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90L2ludGVyYWN0aW9uX21hbmFnZXIuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7Y2xhc3MgZntjb25zdHJ1Y3RvcihsLGspe3RoaXMuc3ZnPWQzLnNlbGVjdChsKTtsPTEwMCprKzIwO3RoaXMuc3ZnLmF0dHIoInZpZXdCb3giLGAwIDAgJHtsfSAkezI0MH1gKTt0aGlzLnN2Zy5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQiKTt0aGlzLnN2Zy5zdHlsZSgibWluLXdpZHRoIixsKyJweCIpO3RoaXMuc3ZnLnN0eWxlKCJtaW4taGVpZ2h0IiwiMjQwcHgiKTt0aGlzLndpZHRoPWwtMTAtMTA7dGhpcy5oZWlnaHQ9MjAwO3RoaXMuc3ZnRz10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGEuaHBhcmFtcy51dGlscy50cmFuc2xhdGVTdHIoMTAsMzApKX19ZC5TVkdQcm9wZXJ0aWVzPWY7Y2xhc3MgZ3tjb25zdHJ1Y3RvcihsLGssbixwKXt0aGlzLl9zdmdQcm9wcz1sO3RoaXMuX3NjaGVtYT1rO3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPQpwO3RoaXMuX2F4ZXNDb2xsZWN0aW9uPW5ldyBkLkF4ZXNDb2xsZWN0aW9uKGwsayx0aGlzKTt0aGlzLl9saW5lc0NvbGxlY3Rpb249bmV3IGQuTGluZXNDb2xsZWN0aW9uKGwsayx0aGlzLl9heGVzQ29sbGVjdGlvbik7dGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLCgpPT57Y29uc3QgW3Escl09ZDMubW91c2UodGhpcy5fc3ZnUHJvcHMuc3ZnRy5ub2RlKCkpO3RoaXMub25Nb3VzZU1vdmVkKHEscil9KS5vbigibW91c2VsZWF2ZSIsKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpfW9uRHJhZ1N0YXJ0KGwpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdTdGFydChsKTt0aGlzLl9saW5lc0NvbGxlY3Rpb24uaGlkZUJhY2tncm91bmRMaW5lcygpfW9uRHJhZyhsKXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnKGwpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGQuTGluZVR5cGUuRk9SRUdST1VORCl9b25EcmFnRW5kKCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZ0VuZCgpOwp0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhkLkxpbmVUeXBlLkZPUkVHUk9VTkQsNTAwKTt3aW5kb3cuc2V0VGltZW91dCgoKT0+e3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGQuTGluZVR5cGUuQkFDS0dST1VORCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNob3dCYWNrZ3JvdW5kTGluZXMoKX0sNTAwKX1vbkJydXNoQ2hhbmdlZChsKXt0aGlzLl9heGVzQ29sbGVjdGlvbi5nZXRBeGlzRm9yQ29sSW5kZXgobCkuc2V0QnJ1c2hTZWxlY3Rpb24oZDMuZXZlbnQuc2VsZWN0aW9uKTt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpfW9uTW91c2VNb3ZlZChsLGspe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAodGhpcy5fbGluZXNDb2xsZWN0aW9uLmZpbmRDbG9zZXN0U2Vzc2lvbkdyb3VwKGwsaykpO3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uTW91c2VMZWF2ZSgpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5pc051bGwoKXx8Cih0aGlzLl9saW5lc0NvbGxlY3Rpb24uY2xlYXJQZWFrZWRTZXNzaW9uR3JvdXAoKSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IobnVsbCkpfW9uQ2xpY2soKXt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk9PT10aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKT90aGlzLl9saW5lc0NvbGxlY3Rpb24udXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAobmV3IGQuU2Vzc2lvbkdyb3VwSGFuZGxlKTp0aGlzLl9saW5lc0NvbGxlY3Rpb24udXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpKTt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25PcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZChsLAprKXt0aGlzLl9heGVzQ29sbGVjdGlvbi51cGRhdGVBeGVzKGwsayk7Y29uc3Qgbj10aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkscD10aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKTt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVkcmF3KGssdm9pZCAwIT09bC5jb2xvckJ5Q29sdW1uSW5kZXg/bC5jb2x1bW5zW2wuY29sb3JCeUNvbHVtbkluZGV4XS5hYnNvbHV0ZUluZGV4Om51bGwsbC5taW5Db2xvcixsLm1heENvbG9yKTtuLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSl8fHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpO3AuZXF1YWxzVG8odGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHwKdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fWQuSW50ZXJhY3Rpb25NYW5hZ2VyPWd9KShjLnBhcmFsbGVsX2Nvb3Jkc19wbG90fHwoYy5wYXJhbGxlbF9jb29yZHNfcGxvdD17fSkpfSkoYS5ocGFyYW1zfHwoYS5ocGFyYW1zPXt9KSl9KSh0Znx8KHRmPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QiLHByb3BlcnRpZXM6e3Nlc3Npb25Hcm91cHM6QXJyYXksb3B0aW9uczpPYmplY3Qsc2VsZWN0ZWRTZXNzaW9uR3JvdXA6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGwscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxjbG9zZXN0U2Vzc2lvbkdyb3VwOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0scmVkcmF3Q291bnQ6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF92YWxpZFNlc3Npb25Hcm91cHM6QXJyYXksX2ludGVyYWN0aW9uTWFuYWdlcjpPYmplY3R9LG9ic2VydmVyczpbIl9vcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZChvcHRpb25zLiosIHNlc3Npb25Hcm91cHMuKikiXSxfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtpZihudWxsIT09dGhpcy5vcHRpb25zKXt2YXIgYT10aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbjtpZih2b2lkIDA9PT10aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXJ8fAohXy5pc0VxdWFsKHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5zY2hlbWEoKSxhLnNjaGVtYSkpe2QzLnNlbGVjdCh0aGlzLiQuc3ZnKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtjb25zdCBjPW5ldyB0Zi5ocGFyYW1zLnBhcmFsbGVsX2Nvb3Jkc19wbG90LlNWR1Byb3BlcnRpZXModGhpcy4kLnN2Zyx0Zi5ocGFyYW1zLnV0aWxzLm51bUNvbHVtbnMoYS5zY2hlbWEpKTt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuc3ZnLCEwKTt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bmV3IHRmLmhwYXJhbXMucGFyYWxsZWxfY29vcmRzX3Bsb3QuSW50ZXJhY3Rpb25NYW5hZ2VyKGMsYS5zY2hlbWEsZD0+dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZChkKSxkPT50aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZChkKSl9dGhpcy5fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3VwcygpO3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHRoaXMub3B0aW9ucywKdGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzKTt0aGlzLnJlZHJhd0NvdW50Kyt9fSxjbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZChhKXt0aGlzLl9zZXRDbG9zZXN0U2Vzc2lvbkdyb3VwKGEpfSxzZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQoYSl7dGhpcy5fc2V0U2VsZWN0ZWRTZXNzaW9uR3JvdXAoYSl9LF9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7Y29uc3QgYT10Zi5ocGFyYW1zLnV0aWxzO2lmKHZvaWQgMD09PXRoaXMuc2Vzc2lvbkdyb3Vwcyl0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwO2Vsc2V7dmFyIGM9dGhpcy5vcHRpb25zLmNvbmZpZ3VyYXRpb24uc2NoZW1hO3RoaXMuX3ZhbGlkU2Vzc2lvbkdyb3Vwcz10aGlzLnNlc3Npb25Hcm91cHMuZmlsdGVyKGQ9Pntmb3IobGV0IGY9MDtmPGEubnVtQ29sdW1ucyhjKTsrK2YpaWYodGhpcy5vcHRpb25zLmNvbmZpZ3VyYXRpb24uY29sdW1uc1Zpc2liaWxpdHlbZl0mJnZvaWQgMD09PWEuY29sdW1uVmFsdWVCeUluZGV4KGMsCmQsZikpcmV0dXJuITE7cmV0dXJuITB9KX19fSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldy90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciLHByb3BlcnRpZXM6e2JhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZyxjb25maWd1cmF0aW9uOk9iamVjdCxzZXNzaW9uR3JvdXBzOkFycmF5fSxfY2xvc2VzdE9yU2VsZWN0ZWQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gbnVsbCE9PWE/YTpjfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90Iixwcm9wZXJ0aWVzOnt2aXNpYmxlU2NoZW1hOk9iamVjdCxzZXNzaW9uR3JvdXBzOkFycmF5LG9wdGlvbnM6T2JqZWN0LHNlbGVjdGVkU2Vzc2lvbkdyb3VwOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sY2xvc2VzdFNlc3Npb25Hcm91cDp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbCxyZWFkT25seTohMCxub3RpZnk6ITB9LF9jb250YWluZXI6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9zdmc6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LHdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZTowfSxoZWlnaHQ6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9icnVzaGVkQ2VsbEluZGV4Ont0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSxfYnJ1c2hTZWxlY3Rpb246e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9fSxvYnNlcnZlcnM6WyJfc2Vzc2lvbkdyb3Vwc0NoYW5nZWQoc2Vzc2lvbkdyb3Vwcy4qKSIsCiJfdmlzaWJsZVNjaGVtYUNoYW5nZWQodmlzaWJsZVNjaGVtYS4qKSIsIl9yZWRyYXcob3B0aW9ucy4qKSJdLHJlYWR5KCl7dGhpcy5fY29udGFpbmVyPXRoaXMuJC5jb250YWluZXI7dGhpcy5fc3ZnPWQzLnNlbGVjdCh0aGlzLiQuc3ZnKTt0aGlzLl9yZWRyYXcoKX0sX3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7bnVsbCE9PXRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAmJnRoaXMuX3NldFNlbGVjdGVkU2Vzc2lvbkdyb3VwKHRmLmhwYXJhbXMudXRpbHMuc2Vzc2lvbkdyb3VwV2l0aE5hbWUodGhpcy5zZXNzaW9uR3JvdXBzLHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAubmFtZSl8fG51bGwpO3RoaXMuX3JlZHJhdygpfSxfdmlzaWJsZVNjaGVtYUNoYW5nZWQoKXt0aGlzLl9icnVzaFNlbGVjdGlvbj10aGlzLl9icnVzaGVkQ2VsbEluZGV4PW51bGw7dGhpcy5fcmVkcmF3KCl9LF9yZWRyYXcoKXt0aGlzLmRlYm91bmNlKCJfcmVkcmF3IiwoKT0+e2NvbnN0IGE9dGYuaHBhcmFtcy51dGlsczsKdGhpcy53aWR0aD1NYXRoLm1heCgxNTAqYS5udW1WaXNpYmxlQ29sdW1ucyh0aGlzLnZpc2libGVTY2hlbWEpLDEyMDApO3RoaXMuaGVpZ2h0PU1hdGgubWF4KDExMi41KmEubnVtVmlzaWJsZU1ldHJpY3ModGhpcy52aXNpYmxlU2NoZW1hKSw0ODApO3RoaXMuX2NvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLndpZHRoKyJweCI7dGhpcy5fY29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmhlaWdodCsicHgiO3RoaXMuX3N2Zy5hdHRyKCJ3aWR0aCIsdGhpcy53aWR0aCkuYXR0cigiaGVpZ2h0Iix0aGlzLmhlaWdodCk7dGhpcy5fc3ZnLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3RoaXMuX2RyYXcoKX0sMTAwKX0sX2RyYXcoKXtmdW5jdGlvbiBhKGxhKXtyZXR1cm4ieC1heGlzLWNsaXAtcGF0aC0iK2xhfWZ1bmN0aW9uIGMobGEpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK2xhfWZ1bmN0aW9uIGQobGEpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrbGF9ZnVuY3Rpb24gZihsYSl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrCmxhfWZ1bmN0aW9uIGcobGEsWixGYSx4YSx5YSl7RmE9TWF0aC5mbG9vcihGYS94YSk7eGE9Wi5zY2FsZSgpO2lmKCJRVUFOVElMRSI9PT15YSl7bGV0IEJhPXhhLnF1YW50aWxlcygpO0JhPWQzLnJhbmdlKDAsQmEubGVuZ3RoLE1hdGguY2VpbChCYS5sZW5ndGgvRmEpKS5tYXAoR2E9PkJhW0dhXSk7Wi50aWNrVmFsdWVzKEJhKS50aWNrRm9ybWF0KGQzLmZvcm1hdCgiLS4yZyIpKX0iTElORUFSIiE9PXlhJiYiTE9HIiE9PXlhfHxaLnRpY2tzKEZhKTtsYS5jYWxsKFopO2xhLnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpO2xhLnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1mdW5jdGlvbiBsKGxhLFope3JldHVybiBQW1pdKHguX2NvbFZhbHVlKGxhLFopKX1mdW5jdGlvbiBrKGxhLFope3JldHVybiBIW1pdKHguX21ldHJpY1ZhbHVlKGxhLFopKX1mdW5jdGlvbiBuKGxhLFope2NvbnN0IEZhPVtdO1VbbGFdW1pdLmVhY2goZnVuY3Rpb24oKXtGYS5wdXNoKHRoaXMpfSk7CnJldHVybiBkMy5xdWFkdHJlZSgpLngoeGE9PmQzLnNlbGVjdCh4YSkuZGF0dW0oKS54KS55KHhhPT5kMy5zZWxlY3QoeGEpLmRhdHVtKCkueSkuYWRkQWxsKEZhKX1mdW5jdGlvbiBwKCl7bGV0IGxhPW5ldyBTZXQoUi5ub2RlcygpKTt2KCl8fChsYT1xKHguX2JydXNoZWRDZWxsSW5kZXgseC5fYnJ1c2hTZWxlY3Rpb24pKTtkMy5zZWxlY3RBbGwoQXJyYXkuZnJvbSh6LmZpbHRlclNldChsYSxaPT4hYWEuaGFzKFopKSkpLmF0dHIoImZpbGwiLEwpO2QzLnNlbGVjdEFsbChBcnJheS5mcm9tKHouZmlsdGVyU2V0KGFhLFo9PiFsYS5oYXMoWikpKSkuYXR0cigiZmlsbCIsIiNkZGQiKTthYT1sYX1mdW5jdGlvbiBxKGxhLFope2NvbnNvbGUuYXNzZXJ0KG51bGwhPT1sYSk7Y29uc29sZS5hc3NlcnQobnVsbCE9PVopO2NvbnN0IFtGYSx4YV09bGEseWE9bmV3IFNldDt6LnF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3QoYmFbRmFdW3hhXSxaWzBdWzBdLFpbMF1bMV0sWlsxXVswXSxaWzFdWzFdLApCYT0+e2QzLnNlbGVjdChCYSkuZGF0dW0oKS5zZXNzaW9uR3JvdXBNYXJrZXJzLmZvckVhY2goR2E9Pnt5YS5hZGQoR2EpfSl9KTtyZXR1cm4geWF9ZnVuY3Rpb24gcihsYSl7Y29uc3QgWj1kMy5icnVzaFNlbGVjdGlvbihsYSk7IXQoKSYmbnVsbD09PVp8fHQoKSYmbGE9PT1tYS5ub2RlKCkmJl8uaXNFcXVhbChaLHguX2JydXNoU2VsZWN0aW9uKXx8KHguX2JydXNoU2VsZWN0aW9uPVosbnVsbCE9PVo/KG1hPWQzLnNlbGVjdChsYSkseC5fYnJ1c2hlZENlbGxJbmRleD1tYS5kYXR1bSgpKToobWE9bnVsbCx4Ll9icnVzaGVkQ2VsbEluZGV4PW51bGwpLHAoKSl9ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09eC5fYnJ1c2hlZENlbGxJbmRleCYmbnVsbCE9PXguX2JydXNoU2VsZWN0aW9ufWZ1bmN0aW9uIHYoKXtyZXR1cm4hdCgpfHx4Ll9icnVzaFNlbGVjdGlvblswXVswXT09PXguX2JydXNoU2VsZWN0aW9uWzFdWzBdfHx4Ll9icnVzaFNlbGVjdGlvblswXVsxXT09PXguX2JydXNoU2VsZWN0aW9uWzFdWzFdfQpmdW5jdGlvbiB5KGxhLFosRmEseGEseWEpe2xldCBCYT1JbmZpbml0eSxHYT1udWxsO3oucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhiYVtsYV1bWl0sRmEseGEseWEsKHphLFVhKT0+e2FhLmhhcyh6YSkmJlVhPEJhJiYoemE9ZDMuc2VsZWN0KHphKS5kYXR1bSgpLEJhPVVhLEdhPXphLnNlc3Npb25Hcm91cCl9KTtyZXR1cm4gbnVsbD09PUdhP251bGw6ZDMuc2VsZWN0QWxsKFkuZ2V0KEdhKSl9Y29uc3Qgej10Zi5ocGFyYW1zLnV0aWxzLHg9dGhpcztpZih0aGlzLnNlc3Npb25Hcm91cHMmJjAhPXRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGgmJnRoaXMudmlzaWJsZVNjaGVtYSYmMCE9dGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aCl7dmFyIEM9ZDMucmFuZ2Uoei5udW1WaXNpYmxlQ29sdW1ucyh4LnZpc2libGVTY2hlbWEpKSxGPWQzLnJhbmdlKHoubnVtVmlzaWJsZU1ldHJpY3MoeC52aXNpYmxlU2NoZW1hKSksRD1kMy5zY2FsZUJhbmQoKS5kb21haW4oQykucmFuZ2UoWzg1LAp0aGlzLndpZHRoLTEtNV0pLnBhZGRpbmdJbm5lciguMSksQj1kMy5zY2FsZUJhbmQoKS5kb21haW4oRikucmFuZ2UoW3RoaXMuaGVpZ2h0LTEtNS01MCw1XSkucGFkZGluZ0lubmVyKC4xKSxJPUQuYmFuZHdpZHRoKCksTz1CLmJhbmR3aWR0aCgpLFA9Qy5tYXAobGE9PnguX2NlbGxTY2FsZShsYSxbMCxJLTFdKSksSD1GLm1hcChsYT0+eC5fY2VsbFNjYWxlKGxhK3oubnVtVmlzaWJsZUhQYXJhbXMoeC52aXNpYmxlU2NoZW1hKSxbTy0xLDBdKSksSz10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShDKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsbGE9PnoudHJhbnNsYXRlU3RyKEQobGEpLDApKTtLLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsYSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTUpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixJKzEwKS5hdHRyKCJoZWlnaHQiLHguaGVpZ2h0LTI1KTsKSy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGMpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHguaGVpZ2h0LTI1KS5hdHRyKCJ3aWR0aCIsSSkuYXR0cigiaGVpZ2h0IiwyNSk7Sy5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGxhPT4idXJsKCMiK2EobGEpKyIpIikuZWFjaChmdW5jdGlvbihsYSl7ZDMuc2VsZWN0KHRoaXMpLmNhbGwoZyxkMy5heGlzQm90dG9tKFBbbGFdKS50aWNrU2l6ZSh4LmhlaWdodC01MCksSSw0MCx4Lm9wdGlvbnMuY29sdW1uc1tsYV0uc2NhbGUpfSk7Sy5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWF4aXMtbGFiZWwiLCEwKS5hdHRyKCJjbGlwLXBhdGgiLGxhPT4idXJsKCMiK2MobGEpKyIpIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixJLzIpLmF0dHIoInkiLHguaGVpZ2h0LTEtMTIuNSkudGV4dChsYT0+ei5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZSh4LnZpc2libGVTY2hlbWEsCmxhKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQobGE9Pnouc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoeC52aXNpYmxlU2NoZW1hLGxhKSk7Sz10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShGKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsbGE9PnoudHJhbnNsYXRlU3RyKHgud2lkdGgtMSxCKGxhKSkpO0suYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixkKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHgud2lkdGgtNDAtMSkpLmF0dHIoInkiLC01KS5hdHRyKCJ3aWR0aCIseC53aWR0aC00MCkuYXR0cigiaGVpZ2h0IixPKzEwKTtLLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsZikuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLSh4LndpZHRoLTEpKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsTyk7Sy5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGxhPT4idXJsKCMiKwpkKGxhKSsiKSIpLmVhY2goZnVuY3Rpb24obGEpe2QzLnNlbGVjdCh0aGlzKS5jYWxsKGcsZDMuYXhpc0xlZnQoSFtsYV0pLnRpY2tTaXplKHgud2lkdGgtODApLE8sMjAseC5vcHRpb25zLmNvbHVtbnNbbGErei5udW1WaXNpYmxlSFBhcmFtcyh4LnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KTtLLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsbGE9PiJ1cmwoIyIrZihsYSkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oeC53aWR0aC0yMC0xKSkuYXR0cigieSIsTy8yKS5hdHRyKCJ0cmFuc2Zvcm0iLHoucm90YXRlU3RyKC0oeC53aWR0aC0yMC0xKSxPLzIpKS50ZXh0KGxhPT56Lm1ldHJpY05hbWUoeC52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW2xhXSkpLmFwcGVuZCgidGl0bGUiKS50ZXh0KGxhPT56Lm1ldHJpY05hbWUoeC52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW2xhXSkpOwpLPXRoaXMuX3N2Zy5zZWxlY3RBbGwoIi5jZWxsIikuZGF0YShkMy5jcm9zcyhDLEYpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNlbGwiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLChbbGEsWl0pPT56LnRyYW5zbGF0ZVN0cihEKGxhKSxCKFopKSk7Sy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC01KS5hdHRyKCJ5IiwtNSkuYXR0cigid2lkdGgiLEkrMTApLmF0dHIoImhlaWdodCIsTysxMCkuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciBNPW51bGw7dm9pZCAwIT09eC5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCYmKE09ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4odGhpcy5fY29sRXh0ZW50KHRoaXMub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKS5yYW5nZShbdGhpcy5vcHRpb25zLm1pbkNvbG9yLHRoaXMub3B0aW9ucy5tYXhDb2xvcl0pLmludGVycG9sYXRlKGQzLmludGVycG9sYXRlTGFiKSk7CnZhciBMPXZvaWQgMD09PXgub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOmxhfSk9Pk0odGhpcy5fY29sVmFsdWUobGEseC5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpLFtSLFUsWV09ZnVuY3Rpb24obGEsWil7Y29uc3QgRmE9bGEuc2VsZWN0QWxsKCIuZGF0YS1tYXJrZXIiKS5kYXRhKChbeWEsQmFdKT0+eC5zZXNzaW9uR3JvdXBzLmZpbHRlcihHYT0+dm9pZCAwIT09eC5fY29sVmFsdWUoR2EseWEpJiZ2b2lkIDAhPT14Ll9tZXRyaWNWYWx1ZShHYSxCYSkpLm1hcChHYT0+KHtjb2w6eWEsbWV0cmljOkJhLHNlc3Npb25Hcm91cDpHYSx4OmwoR2EseWEpLHk6ayhHYSxCYSksc2Vzc2lvbkdyb3VwTWFya2VyczpudWxsfSkpKS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiZGF0YS1tYXJrZXIiLCEwKS5hdHRyKCJjeCIsKHt4OnlhfSk9PnlhKS5hdHRyKCJjeSIsKHt5OnlhfSk9PnlhKS5hdHRyKCJyIiwyKS5hdHRyKCJmaWxsIiwKWikseGE9bmV3IE1hcDt4LnNlc3Npb25Hcm91cHMuZm9yRWFjaCh5YT0+e3hhLnNldCh5YSxbXSl9KTtGYS5lYWNoKGZ1bmN0aW9uKHlhKXt4YS5nZXQoeWEuc2Vzc2lvbkdyb3VwKS5wdXNoKHRoaXMpfSk7RmEuZWFjaCh5YT0+e2NvbnN0IEJhPXhhLmdldCh5YS5zZXNzaW9uR3JvdXApO3lhLnNlc3Npb25Hcm91cE1hcmtlcnM9bmV3IFNldChCYSl9KTtsYT1DLm1hcCh5YT0+Ri5tYXAoQmE9PkZhLmZpbHRlcihHYT0+R2EuY29sPT15YSYmR2EubWV0cmljPT1CYSkpKTtyZXR1cm5bRmEsbGEseGFdfShLLmFwcGVuZCgiZyIpLEwpLGJhPUMubWFwKGxhPT5GLm1hcChaPT5uKGxhLFopKSksbWE9bnVsbDt0KCkmJihtYT1LLmZpbHRlcihsYT0+Xy5pc0VxdWFsKGxhLHguX2JydXNoZWRDZWxsSW5kZXgpKSxjb25zb2xlLmFzc2VydCgxPT1tYS5zaXplKCksbWEpKTt2YXIgYWE9bmV3IFNldChSLm5vZGVzKCkpO3AoKTt2YXIgY2E9ZDMuYnJ1c2goKS5leHRlbnQoW1stNCwtNF0sW0ktMSs1LQoxLE8tMSs1LTFdXSkub24oInN0YXJ0IixmdW5jdGlvbigpe3QoKSYmbWEubm9kZSgpIT10aGlzJiZjYS5tb3ZlKG1hLG51bGwpO3IodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7cih0aGlzKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7cih0aGlzKX0pO0suY2FsbChjYSk7dCgpJiZjYS5tb3ZlKG1hLHguX2JydXNoU2VsZWN0aW9uKTt2YXIgZmE9bnVsbCxkYT1udWxsO251bGwhPT10aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwJiYoZGE9ZDMuc2VsZWN0QWxsKFkuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSk7Sy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGxhPWZhPT09ZGE/bnVsbDpmYTtsYSE9PWRhJiYobnVsbCE9PWRhJiZkYS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCExKSxkYT1sYSxudWxsIT09ZGEmJmRhLmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApLGxhPW51bGw9PT1kYT9udWxsOmRhLmRhdHVtKCkuc2Vzc2lvbkdyb3VwLAp4Ll9zZXRTZWxlY3RlZFNlc3Npb25Hcm91cChsYSkpfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbbGEsWl0pe2NvbnN0IFtGYSx4YV09ZDMubW91c2UodGhpcyk7bGE9eShsYSxaLEZhLHhhLDIwKTtmYSE9PWxhJiYobnVsbCE9PWZhJiZmYS5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGZhPWxhLG51bGwhPT1mYT8oZmEuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCEwKSx4Ll9zZXRDbG9zZXN0U2Vzc2lvbkdyb3VwKGZhLmRhdHVtKCkuc2Vzc2lvbkdyb3VwKSk6eC5fc2V0Q2xvc2VzdFNlc3Npb25Hcm91cChudWxsKSl9KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtudWxsIT09ZmEmJihmYS5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGZhPW51bGwseC5fc2V0Q2xvc2VzdFNlc3Npb25Hcm91cChudWxsKSl9KTt0aGlzLl9zdmcuc2VsZWN0QWxsKCIqIikuY2xhc3NlZCgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QiLCEwKX19LApfY2VsbFNjYWxlKGEsYyl7dmFyIGQ9dGhpcy5fY29sRXh0ZW50KGEpO2NvbnN0IGY9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oZCkucmFuZ2UoYyk7aWYoIkxJTkVBUiI9PT10aGlzLm9wdGlvbnMuY29sdW1uc1thXS5zY2FsZSlyZXR1cm4gZjtpZigiTE9HIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW2FdLnNjYWxlKXJldHVybiAwPj1kWzBdJiYwPD1kWzFdP2Y6ZDMuc2NhbGVMb2coKS5kb21haW4oZCkucmFuZ2UoYyk7aWYoIlFVQU5USUxFIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW2FdLnNjYWxlKXtjb25zdCBnPShjWzFdLWNbMF0pLzE5O2Q9ZDMucmFuZ2UoMjApLm1hcChsPT5jWzBdK2cqbCk7cmV0dXJuIGQzLnNjYWxlUXVhbnRpbGUoKS5kb21haW4oXy51bmlxKHRoaXMuc2Vzc2lvbkdyb3Vwcy5tYXAobD0+dGhpcy5fY29sVmFsdWUobCxhKSkpKS5yYW5nZShkKX1pZigiTk9OX05VTUVSSUMiPT09dGhpcy5vcHRpb25zLmNvbHVtbnNbYV0uc2NhbGUpcmV0dXJuIGQzLnNjYWxlUG9pbnQoKS5kb21haW4oXy51bmlxKHRoaXMuc2Vzc2lvbkdyb3Vwcy5tYXAoZz0+CnRoaXMuX2NvbFZhbHVlKGcsYSkpLnNvcnQoKSkpLnJhbmdlKGMpLnBhZGRpbmcoLjEpO3Rocm93IlVua25vd24gc2NhbGUgZm9yIGNvbHVtbjogIithKyIuIG9wdGlvbnM6ICIrdGhpcy5vcHRpb25zO30sX2NvbFZhbHVlKGEsYyl7cmV0dXJuIHRmLmhwYXJhbXMudXRpbHMuY29sdW1uVmFsdWVCeVZpc2libGVJbmRleCh0aGlzLnZpc2libGVTY2hlbWEsYSxjKX0sX21ldHJpY1ZhbHVlKGEsYyl7cmV0dXJuIHRmLmhwYXJhbXMudXRpbHMubWV0cmljVmFsdWVCeVZpc2libGVJbmRleCh0aGlzLnZpc2libGVTY2hlbWEsYSxjKX0sX2NvbEV4dGVudChhKXtyZXR1cm4gdGYuaHBhcmFtcy51dGlscy52aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudCh0aGlzLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLGEpfX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3Iixwcm9wZXJ0aWVzOntiYWNrZW5kOk9iamVjdCxleHBlcmltZW50TmFtZTpTdHJpbmcsY29uZmlndXJhdGlvbjpPYmplY3Qsc2Vzc2lvbkdyb3VwczpBcnJheX0sX2Nsb3Nlc3RPclNlbGVjdGVkOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIG51bGwhPT1hP2E6Y319KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUvdGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZSIscHJvcGVydGllczp7YmFja2VuZDpPYmplY3QsaGVscFVybDpTdHJpbmcsYnVnUmVwb3J0VXJsOlN0cmluZyxleHBlcmltZW50TmFtZTpTdHJpbmcsY29uZmlndXJhdGlvbjpPYmplY3Qsc2Vzc2lvbkdyb3VwczpBcnJheSxfc2VsZWN0ZWRUYWI6e3R5cGU6TnVtYmVyLHZhbHVlOjB9fX0pOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWhwYXJhbXMtZ29vZ2xlLWFuYWx5dGljcy10cmFja2VyL3RmLWhwYXJhbXMtZ29vZ2xlLWFuYWx5dGljcy10cmFja2VyLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWhwYXJhbXMtZ29vZ2xlLWFuYWx5dGljcy10cmFja2VyIixoYW5kbGVFdmVudDpmdW5jdGlvbigpe319KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtaHBhcmFtcy1tYWluL3RmLWhwYXJhbXMtbWFpbi5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLW1haW4iLHByb3BlcnRpZXM6e2JhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZyx0cmFja2luZ0lkOlN0cmluZyxoZWxwVXJsOlN0cmluZyxidWdSZXBvcnRVcmw6U3RyaW5nLF9jb25maWd1cmF0aW9uOk9iamVjdCxfc2Vzc2lvbkdyb3VwczpBcnJheSxfdGhyb3R0bGVkU2VuZEV2ZW50VG9HQTp7dHlwZTpGdW5jdGlvbix2YWx1ZTooKT0+Xy50aHJvdHRsZShmdW5jdGlvbigpe3RoaXMuX2hhbmRsZUdBRXZlbnQoe2RldGFpbDp7aGl0VHlwZToiZXZlbnQiLGV2ZW50Q2F0ZWdvcnk6IlVzZXJJbnRlcmFjdGlvbiIsZXZlbnRMYWJlbDoiRXhwZXJpbWVudDogIit0aGlzLmV4cGVyaW1lbnROYW1lfX0pfSw2RTQse2xlYWRpbmc6ITB9KX19LGxpc3RlbmVyczp7bW91c2Vtb3ZlOiJfc2VuZEV2ZW50VG9HQSIsdGFwOiJfc2VuZEV2ZW50VG9HQSIsImdvb2dsZS1hbmFseXRpY3MtdHJhY2tpbmciOiJfaGFuZGxlR0FFdmVudCJ9LGF0dGFjaGVkKCl7dGhpcy5faGFuZGxlR0FFdmVudCh7ZGV0YWlsOntoaXRUeXBlOiJwYWdldmlldyJ9fSl9LApyZWxvYWQoKXt0aGlzLiRbInF1ZXJ5LXBhbmUiXS5yZWxvYWQoKX0sX3NlbmRFdmVudFRvR0EoKXt0aGlzLl90aHJvdHRsZWRTZW5kRXZlbnRUb0dBKHRoaXMpfSxfaGFuZGxlR0FFdmVudChhKXt0aGlzLiQudHJhY2tlci5oYW5kbGVFdmVudChhKX19KTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1ocGFyYW1zLWJhY2tlbmQvdGYtaHBhcmFtcy1iYWNrZW5kLmh0bWwuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtjbGFzcyBke2NvbnN0cnVjdG9yKGYsZyxsPSEwKXt0aGlzLl9hcGlVcmw9Zjt0aGlzLl9yZXF1ZXN0TWFuYWdlcj1nO3RoaXMuX3VzZUh0dHBHZXQ9bH1nZXRFeHBlcmltZW50KGYpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiZXhwZXJpbWVudCIsZil9bGlzdFNlc3Npb25Hcm91cHMoZil7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJzZXNzaW9uX2dyb3VwcyIsZil9bGlzdE1ldHJpY0V2YWxzKGYpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgibWV0cmljX2V2YWxzIixmKX1fc2VuZFJlcXVlc3QoZixnKXtpZih0aGlzLl91c2VIdHRwR2V0KXJldHVybiBnPWVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShnKSksdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0aGlzLl9hcGlVcmwrIi8iK2YrIj9yZXF1ZXN0XHgzZCIrZyk7Y29uc3QgbD1uZXcgUW8uUmVxdWVzdE9wdGlvbnM7bC53aXRoQ3JlZGVudGlhbHM9ITA7CmwubWV0aG9kVHlwZT0iUE9TVCI7bC5jb250ZW50VHlwZT0idGV4dC9wbGFpbiI7bC5ib2R5PUpTT04uc3RyaW5naWZ5KGcpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0V2l0aE9wdGlvbnModGhpcy5fYXBpVXJsKyIvIitmLGwpfX1jLkJhY2tlbmQ9ZH0pKGEuaHBhcmFtc3x8KGEuaHBhcmFtcz17fSkpfSkodGZ8fCh0Zj17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWhwYXJhbXMtZGFzaGJvYXJkL3RmLWhwYXJhbXMtZGFzaGJvYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWhwYXJhbXMtZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfYmFja2VuZDp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyB0Zi5ocGFyYW1zLkJhY2tlbmQoUW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImhwYXJhbXMiLCIiKSxuZXcgUW8uUmVxdWVzdE1hbmFnZXIsISEod2luZG93LlRFTlNPUkJPQVJEX0VOVnx8e30pLklOX0NPTEFCKX19LHJlbG9hZCgpe3RoaXMuJFsiaHBhcmFtcy1tYWluIl0ucmVsb2FkKCl9fSl9KSgpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWltcG9ydHMvYXJyYXktYnVmZmVyLWRhdGEtcHJvdmlkZXIuanMKdmFyIFh0OwooZnVuY3Rpb24oYSl7YS5FcnJvckNvZGVzPXtDQU5DRUxMRUQ6MX07Y29uc3QgYz17VkVSVEVYOjEsRkFDRToyLENPTE9SOjN9LGQ9e1ZFUlRFWDoiZmxvYXQzMiIsRkFDRToiaW50MzIiLENPTE9SOiJ1aW50OCJ9O2NsYXNzIGZ7Y29uc3RydWN0b3IoZyl7dGhpcy5fcmVxdWVzdE1hbmFnZXI9Zzt0aGlzLl9jYW5jZWxsZXI9bmV3IFFvLkNhbmNlbGxlcn1yZWxvYWQoZyxsLGspe3RoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKTtyZXR1cm4gdGhpcy5fZmV0Y2hNZXRhZGF0YShnLGwsayl9X2ZldGNoRGF0YUJ5U3RlcChnLGwsayxuLHAscSl7ZnVuY3Rpb24gcih0KXtsZXQgdj1bXTtmb3IobGV0IHk9MDt5PHQubGVuZ3RoLzM7eSsrKXtsZXQgej1bXTtmb3IobGV0IHg9MDszPng7eCsrKXoucHVzaCh0WzMqeSt4XSk7di5wdXNoKHopfXJldHVybiB2fWc9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoIm1lc2giLCIvZGF0YSIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOmwscnVuOmcsCmNvbnRlbnRfdHlwZTprLHNhbXBsZTpuLHN0ZXA6cH0pKTtsPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57aWYodC5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOmEuRXJyb3JDb2Rlcy5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTt0PXQudmFsdWU7c3dpdGNoKGspe2Nhc2UgIlZFUlRFWCI6cS52ZXJ0aWNlcz1yKG5ldyBGbG9hdDMyQXJyYXkodCkpO2JyZWFrO2Nhc2UgIkZBQ0UiOnEuZmFjZXM9cihuZXcgSW50MzJBcnJheSh0KSk7YnJlYWs7Y2FzZSAiQ09MT1IiOnEuY29sb3JzPXIobmV3IFVpbnQ4QXJyYXkodCkpfXJldHVybiBxfSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKGcsbnVsbCwiYXJyYXlidWZmZXIiLGRba10pLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKGwpfWZldGNoRGF0YShnLGwsayxuKXtsZXQgcD1bXSxxPW5ldyBNYXA7T2JqZWN0LmtleXMoYykuZm9yRWFjaChyPT4Ke2cuY29tcG9uZW50cyYxPDxjW3JdJiZwLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKGwsayxyLG4sZy5zdGVwLHEpKX0pO3JldHVybiBQcm9taXNlLmFsbChwKX1fZmV0Y2hNZXRhZGF0YShnLGwsayl7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2c9UW8uZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoIm1lc2giLCIvbWVzaGVzIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bCxydW46ZyxzYW1wbGU6a30pKTtsPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShuPT5uLmNhbmNlbGxlZD9Qcm9taXNlLnJlamVjdCh7Y29kZTphLkVycm9yQ29kZXMuQ0FOQ0VMTEVELG1lc3NhZ2U6IlJlc3BvbnNlIHdhcyBpbnZhbGlkYXRlZC4ifSk6bi52YWx1ZSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKGcpLnRoZW4obj0+bi5qc29uKCkpLnRoZW4obCkudGhlbih0aGlzLl9wcm9jZXNzTWV0YWRhdGEuYmluZCh0aGlzKSl9X3Byb2Nlc3NNZXRhZGF0YShnKXtpZihnKXt2YXIgbD0KbmV3IE1hcDtmb3IobGV0IG49MDtuPGcubGVuZ3RoO24rKyl7bGV0IHA9Z1tuXTtsLmhhcyhwLnN0ZXApfHxsLnNldChwLnN0ZXAsW10pO2wuZ2V0KHAuc3RlcCkucHVzaChwKX12YXIgaz1bXTtsLmZvckVhY2gobj0+e249dGhpcy5fY3JlYXRlU3RlcERhdHVtKG5bMF0pO2sucHVzaChuKX0pO3JldHVybiBrfX1fY3JlYXRlU3RlcERhdHVtKGcpe3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUoMUUzKmcud2FsbF90aW1lKSxzdGVwOmcuc3RlcCxjb25maWc6Zy5jb25maWcsY29udGVudF90eXBlOmcuY29udGVudF90eXBlLGNvbXBvbmVudHM6Zy5jb21wb25lbnRzfX19YS5BcnJheUJ1ZmZlckRhdGFQcm92aWRlcj1mfSkoWHR8fChYdD17fSkpOwoKLy8jIHNvdXJjZVVSTD1idWlsZDovL3RmLWltcG9ydHMvbWVzaC12aWV3ZXIuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBUSFJFRS5FdmVudERpc3BhdGNoZXJ7Y29uc3RydWN0b3IoZCl7c3VwZXIoKTt0aGlzLl9sYXN0TWVzaD1udWxsO3RoaXMuX2Nsb2NrPW5ldyBUSFJFRS5DbG9jazt0aGlzLl9jYW52YXNTaXplPW51bGw7dGhpcy5fcnVuQ29sb3I9ZH1faXNPYmplY3QoZCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiZudWxsIT1kJiYhQXJyYXkuaXNBcnJheShkKX1fYXBwbHlEZWZhdWx0cyhkLGYpe2xldCBnPXt9O2Q9W2QsZl07Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3QgbD1kW2ZdO2ZvcihsZXQgayBpbiBsKXtjb25zdCBuPWsgaW4gZzt0aGlzLl9pc09iamVjdChsW2tdKT9nW2tdPXRoaXMuX2FwcGx5RGVmYXVsdHMoZ1trXXx8e30sbFtrXSk6bnx8KGdba109bFtrXSl9fXJldHVybiBnfV9jcmVhdGVXb3JsZChkLGYpe3RoaXMuaXNSZWFkeSgpfHwodGhpcy5fc2NlbmU9bmV3IFRIUkVFLlNjZW5lLHRoaXMuX2NhbWVyYT1kPW5ldyBUSFJFRVtkLmNhbWVyYS5jbHNdKGQuY2FtZXJhLmZvdiwKdGhpcy5fY2FudmFzU2l6ZS53aWR0aC90aGlzLl9jYW52YXNTaXplLmhlaWdodCxkLmNhbWVyYS5uZWFyLGQuY2FtZXJhLmZhciksZj1uZXcgVEhSRUUuT3JiaXRDb250cm9scyhkLGYpLGYubG9va1NwZWVkPS40LGYubW92ZW1lbnRTcGVlZD0yMCxmLm5vRmx5PSEwLGYubG9va1ZlcnRpY2FsPSEwLGYuY29uc3RyYWluVmVydGljYWw9ITAsZi52ZXJ0aWNhbE1pbj0xLGYudmVydGljYWxNYXg9MixmLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9jYW1lcmFDb250cm9scz1mLHRoaXMuX3JlbmRlcmVyPW5ldyBUSFJFRS5XZWJHTFJlbmRlcmVyKHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKCksdGhpcy5fcmVuZGVyZXIuc2V0U2l6ZSh0aGlzLl9jYW52YXNTaXplLndpZHRoLHRoaXMuX2NhbnZhc1NpemUuaGVpZ2h0KSx0aGlzLl9yZW5kZXJlci5zZXRDbGVhckNvbG9yKDE2Nzc3MjE1LAoxKSl9X2NsZWFyU2NlbmUoKXtmb3IoOzA8dGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoOyl0aGlzLl9zY2VuZS5yZW1vdmUodGhpcy5fc2NlbmUuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3JldHVybntmYXI6dGhpcy5fY2FtZXJhLmZhcixwb3NpdGlvbjp0aGlzLl9jYW1lcmEucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6dGhpcy5fY2FtZXJhQ29udHJvbHMudGFyZ2V0LmNsb25lKCl9fXNldENhbnZhc1NpemUoZCl7dGhpcy5fY2FudmFzU2l6ZT1kfWRyYXcoKXt0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4JiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4KTt0aGlzLl9jYW1lcmEuYXNwZWN0PQp0aGlzLl9jYW52YXNTaXplLndpZHRoL3RoaXMuX2NhbnZhc1NpemUuaGVpZ2h0O3RoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5fcmVuZGVyZXIuc2V0U2l6ZSh0aGlzLl9jYW52YXNTaXplLndpZHRoLHRoaXMuX2NhbnZhc1NpemUuaGVpZ2h0KTtjb25zdCBkPWZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKTt0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoZik7dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCk7dGhpcy5fcmVuZGVyZXIucmVuZGVyKHRoaXMuX3NjZW5lLHRoaXMuX2NhbWVyYSl9LmJpbmQodGhpcyk7ZCgpfXVwZGF0ZVNjZW5lKGQsZil7bGV0IGc9e307ImNvbmZpZyJpbiBkJiZkLmNvbmZpZyYmKGc9SlNPTi5wYXJzZShkLmNvbmZpZykpO3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiYmVmb3JlVXBkYXRlU2NlbmUifSk7Zz10aGlzLl9hcHBseURlZmF1bHRzKGcse2NhbWVyYTp7Y2xzOiJQZXJzcGVjdGl2ZUNhbWVyYSIsCmZvdjo3NSxuZWFyOi4xLGZhcjoxRTN9LGxpZ2h0czpbe2NsczoiQW1iaWVudExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NX0se2NsczoiRGlyZWN0aW9uYWxMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzUscG9zaXRpb246WzAsLTEsMl19XX0pO3RoaXMuX2NyZWF0ZVdvcmxkKGcsZik7dGhpcy5fY2xlYXJTY2VuZSgpO3RoaXMuX2NyZWF0ZUxpZ2h0cyh0aGlzLl9zY2VuZSxnKTt0aGlzLl9jcmVhdGVHZW9tZXRyeShkLGcpO3RoaXMuZHJhdygpfXJlc2V0Vmlldygpe2lmKHRoaXMuaXNSZWFkeSgpKXt0aGlzLl9jYW1lcmFDb250cm9scy5yZXNldCgpO2lmKCFkJiZ0aGlzLl9sYXN0TWVzaCl2YXIgZD10aGlzLl9sYXN0TWVzaDtkJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChkKSx0aGlzLl9sYXN0TWVzaD1kKTt0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoKX19X2NyZWF0ZUdlb21ldHJ5KGQsZil7ZD1kLm1lc2g7ZC52ZXJ0aWNlcyYmZC5mYWNlcyYmCmQuZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2goZCxmKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKGQsZil9X2NyZWF0ZVBvaW50Q2xvdWQoZCxmKXt2YXIgZz1kLnZlcnRpY2VzO2Q9ZC5jb2xvcnM7bGV0IGw9e21hdGVyaWFsOntjbHM6IlBvaW50c01hdGVyaWFsIixzaXplOi4wMDV9fTtkJiZkLmxlbmd0aD09Zy5sZW5ndGg/bC5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9VEhSRUUuVmVydGV4Q29sb3JzOmwubWF0ZXJpYWwuY29sb3I9dGhpcy5fcnVuQ29sb3I7Zj10aGlzLl9hcHBseURlZmF1bHRzKGYsbCk7dmFyIGs9bmV3IFRIUkVFLkdlb21ldHJ5O2cuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcD1uZXcgVEhSRUUuVmVjdG9yMyhuWzBdLG5bMV0sblsyXSk7cC54PTEqblswXTtwLnk9MSpuWzFdO3Auej0xKm5bMl07ay52ZXJ0aWNlcy5wdXNoKHApfSk7ZCYmZC5sZW5ndGg9PWcubGVuZ3RoJiZkLmZvckVhY2goZnVuY3Rpb24obil7bj1uZXcgVEhSRUUuQ29sb3IoblswXS8yNTUsCm5bMV0vMjU1LG5bMl0vMjU1KTtrLmNvbG9ycy5wdXNoKG4pfSk7Zz1uZXcgVEhSRUVbZi5tYXRlcmlhbC5jbHNdKGYubWF0ZXJpYWwpO2c9bmV3IFRIUkVFLlBvaW50cyhrLGcpO3RoaXMuX3NjZW5lLmFkZChnKTt0aGlzLl9sYXN0TWVzaD1nfXNldENhbWVyYVZpZXdwb2ludChkLGYsZyl7dGhpcy5fc2lsZW50PSEwO3RoaXMuX2NhbWVyYS5mYXI9Zjt0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KGQueCxkLnksZC56KTt0aGlzLl9jYW1lcmEubG9va0F0KGcuY2xvbmUoKSk7dGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTt0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9Zy5jbG9uZSgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpO3RoaXMuX3NpbGVudD0hMX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZShkKXt0aGlzLl9zaWxlbnR8fHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiY2FtZXJhUG9zaXRpb25DaGFuZ2UiLGV2ZW50OmR9KX1fZml0T2JqZWN0VG9WaWV3cG9ydChkKXt2YXIgZj0KbmV3IFRIUkVFLkJveDM7Zi5zZXRGcm9tT2JqZWN0KGQpO2Q9Zi5jZW50ZXIoKTt2YXIgZz1mLnNpemUoKTtnPTEuMjUqTWF0aC5hYnMoTWF0aC5tYXgoZy54LGcueSxnLnopLygyKk1hdGgudGFuKE1hdGguUEkvMTgwKnRoaXMuX2NhbWVyYS5mb3YvMikpKTtmPWYubWluLno7dGhpcy5zZXRDYW1lcmFWaWV3cG9pbnQoe3g6ZC54LHk6ZC55LHo6Z30sMyooMD5mPy1mK2c6Zy1mKSxkKX1fY3JlYXRlTWVzaChkLGYpe3ZhciBnPWQudmVydGljZXM7Y29uc3QgbD1kLmZhY2VzLGs9ZC5jb2xvcnM7ZD10aGlzLl9hcHBseURlZmF1bHRzKGYse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSk7bGV0IG49bmV3IFRIUkVFLkdlb21ldHJ5O2cuZm9yRWFjaChmdW5jdGlvbihwKXtsZXQgcT1uZXcgVEhSRUUuVmVjdG9yMyhwWzBdLHBbMV0scFsyXSk7cS54PTEqcFswXTtxLnk9MSpwWzFdO3Euej0xKnBbMl07Cm4udmVydGljZXMucHVzaChxKX0pO2wuZm9yRWFjaChmdW5jdGlvbihwKXtsZXQgcT1uZXcgVEhSRUUuRmFjZTMocFswXSxwWzFdLHBbMl0pO2lmKGsmJmsubGVuZ3RoKXtwPVtrW3BbMF1dLGtbcFsxXV0sa1twWzJdXV07Zm9yKGxldCB0PTA7dDxwLmxlbmd0aDt0Kyspe3ZhciByPXBbdF07cj1uZXcgVEhSRUUuQ29sb3IoclswXS8yNTUsclsxXS8yNTUsclsyXS8yNTUpO3EudmVydGV4Q29sb3JzLnB1c2gocil9fW4uZmFjZXMucHVzaChxKX0pO2smJmsubGVuZ3RoJiYoZC5tYXRlcmlhbD1kLm1hdGVyaWFsfHx7fSxkLm1hdGVyaWFsLnZlcnRleENvbG9ycz1USFJFRS5WZXJ0ZXhDb2xvcnMpO24uY2VudGVyKCk7bi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtuLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7Zz1uZXcgVEhSRUVbZC5tYXRlcmlhbC5jbHNdKGQubWF0ZXJpYWwpO2c9bmV3IFRIUkVFLk1lc2gobixnKTtnLmNhc3RTaGFkb3c9ITA7Zy5yZWNlaXZlU2hhZG93PSEwO3RoaXMuX3NjZW5lLmFkZChnKTsKdGhpcy5fbGFzdE1lc2g9Z31fY3JlYXRlTGlnaHRzKGQsZil7Zm9yKGxldCBnPTA7ZzxmLmxpZ2h0cy5sZW5ndGg7ZysrKXtjb25zdCBsPWYubGlnaHRzW2ddO2xldCBrPW5ldyBUSFJFRVtsLmNsc10obC5jb2xvcixsLmludGVuc2l0eSk7bC5wb3NpdGlvbiYmay5wb3NpdGlvbi5zZXQobC5wb3NpdGlvblswXSxsLnBvc2l0aW9uWzFdLGwucG9zaXRpb25bMl0pO2QuYWRkKGspfX19YS5NZXNoVmlld2VyPWN9KShYdHx8KFh0PXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtbWVzaC1kYXNoYm9hcmQvbWVzaC1sb2FkZXIuanMKKGZ1bmN0aW9uKGEpe1BvbHltZXIoe2lzOiJ0Zi1tZXNoLWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLHNhbXBsZTpOdW1iZXIsb2ZTYW1wbGVzOk51bWJlcixzZWxlY3RlZFZpZXc6e3R5cGU6U3RyaW5nLHZhbHVlOiJhbGwifSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVxdWVzdE1hbmFnZXI6T2JqZWN0LF9tZXNoVmlld2VyOnt0eXBlOk9iamVjdH0sX2RhdGFQcm92aWRlcjp7dHlwZTpPYmplY3R9LF9jb2xvclNjYWxlRnVuY3Rpb246e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5Yby5ydW5zQ29sb3JTY2FsZX0sX3J1bkNvbG9yOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihydW4pIn0sX3N0ZXBzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxub3RpZnk6ITB9LF9zdGVwSW5kZXg6e3R5cGU6TnVtYmVyLG5vdGlmeTohMH0sX2N1cnJlbnRTdGVwOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50U3RlcChfc3RlcHMsIF9zdGVwSW5kZXgpIn0sCl9tZXNoVmlld2VyQXR0YWNoZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3N0ZXBWYWx1ZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlU3RlcFZhbHVlKF9jdXJyZW50U3RlcCkifSxfY3VycmVudFdhbGxUaW1lOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50V2FsbFRpbWUoX2N1cnJlbnRTdGVwKSJ9LF9pc01lc2hMb2FkaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJyZWxvYWQocnVuLCB0YWcsIGFjdGl2ZSwgX2RhdGFQcm92aWRlciwgX21lc2hWaWV3ZXIpIiwiX3VwZGF0ZVNjZW5lKF9jdXJyZW50U3RlcC4qLCBfbWVzaFZpZXdlcikiLCJfZGVib3VuY2VkRmV0Y2hNZXNoKF9jdXJyZW50U3RlcCkiLCJfdXBkYXRlVmlldyhzZWxlY3RlZFZpZXcpIl0sX2NvbXB1dGVSdW5Db2xvcjpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKGMpfSwKYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IGEuQXJyYXlCdWZmZXJEYXRhUHJvdmlkZXIodGhpcy5yZXF1ZXN0TWFuYWdlcik7Y29uc3QgYz1uZXcgYS5NZXNoVmlld2VyKHRoaXMuX3J1bkNvbG9yKTtjLmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZVVwZGF0ZVNjZW5lIix0aGlzLl91cGRhdGVDYW52YXNTaXplLmJpbmQodGhpcykpO2MuYWRkRXZlbnRMaXN0ZW5lcigiY2FtZXJhUG9zaXRpb25DaGFuZ2UiLHRoaXMuX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UuYmluZCh0aGlzKSk7dGhpcy5fbWVzaFZpZXdlcj1jfSxyZWxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZSYmdGhpcy5fZGF0YVByb3ZpZGVyJiYodGhpcy5zZXQoIl9pc01lc2hMb2FkaW5nIiwhMCksdGhpcy5fZGF0YVByb3ZpZGVyLnJlbG9hZCh0aGlzLnJ1bix0aGlzLnRhZyx0aGlzLnNhbXBsZSkudGhlbihjPT57YyYmKHRoaXMuc2V0KCJfc3RlcHMiLGMpLHRoaXMuc2V0KCJfc3RlcEluZGV4IiwKYy5sZW5ndGgtMSkpfSkuY2F0Y2goYz0+e2lmKCFjfHwhYy5jb2RlfHxjLmNvZGUhPWEuRXJyb3JDb2Rlcy5DQU5DRUxMRUQpdGhyb3cgRXJyb3IoY3x8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIpO30pKX0sX3VwZGF0ZVNjZW5lOmZ1bmN0aW9uKCl7Y29uc3QgYz10aGlzLl9jdXJyZW50U3RlcDtjJiZjLm1lc2gmJih0aGlzLl9tZXNoVmlld2VyLnVwZGF0ZVNjZW5lKGMsdGhpcyksdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZHx8KHRoaXMuX21lc2hWaWV3ZXIucmVzZXRWaWV3KCksdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZD0hMCksdGhpcy5fbWVzaFZpZXdlckF0dGFjaGVkfHwodGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuX21lc2hWaWV3ZXIuZ2V0UmVuZGVyZXIoKS5kb21FbGVtZW50KSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITApKX0sX2RlYm91bmNlZEZldGNoTWVzaCgpe3RoaXMuZGVib3VuY2UoImZldGNoTWVzaCIsKCk9PnRoaXMuX21heWJlRmV0Y2hNZXNoKCksCjEwMCl9LF9tYXliZUZldGNoTWVzaCgpe2NvbnN0IGM9dGhpcztyZXR1cm4gQmIoZnVuY3Rpb24qKCl7Y29uc3QgZD1jLl9jdXJyZW50U3RlcDtpZihkJiYhZC5tZXNoJiYhZC5tZXNoRmV0Y2hpbmcpe2QubWVzaEZldGNoaW5nPSEwO2MuX2lzTWVzaExvYWRpbmc9ITA7dHJ5e2NvbnN0IGY9eWllbGQgYy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YShkLGMucnVuLGMudGFnLGMuc2FtcGxlKTtkLm1lc2g9ZlswXTtjLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2goZil7aWYoIWZ8fCFmLmNvZGV8fGYuY29kZSE9YS5FcnJvckNvZGVzLkNBTkNFTExFRCl0aHJvdyBmPWZ8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLEVycm9yKGYpO31maW5hbGx5e2MuX2lzTWVzaExvYWRpbmc9ITEsZC5tZXNoRmV0Y2hpbmc9ITF9fX0pfSxfb25DYW1lcmFQb3NpdGlvbkNoYW5nZTpmdW5jdGlvbigpe2lmKHRoaXMuX21lc2hWaWV3ZXIuaXNSZWFkeSgpKXt2YXIgYz1uZXcgQ3VzdG9tRXZlbnQoImNhbWVyYS1wb3NpdGlvbi1jaGFuZ2UiLAp7ZGV0YWlsOnRoaXMuX21lc2hWaWV3ZXIuZ2V0Q2FtZXJhUG9zaXRpb24oKX0pO3RoaXMuZGlzcGF0Y2hFdmVudChjKX19LHNldENhbWVyYVZpZXdwb2ludDpmdW5jdGlvbihjLGQsZil7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW1lcmFWaWV3cG9pbnQoYyxkLGYpfSxfdXBkYXRlQ2FudmFzU2l6ZTpmdW5jdGlvbigpe2NvbnN0IGM9dGhpcy5vZmZzZXRXaWR0aCxkPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQ7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW52YXNTaXplKHt3aWR0aDpjLGhlaWdodDpjLWR9KX0scmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQ2FudmFzU2l6ZSgpO3RoaXMuaXNDb25uZWN0ZWQmJnRoaXMuX21lc2hWaWV3ZXIuZHJhdygpfSxfaGFzQXRMZWFzdE9uZVN0ZXA6ZnVuY3Rpb24oYyl7cmV0dXJuISFjJiYwPGMubGVuZ3RofSxfaGFzTXVsdGlwbGVTdGVwczpmdW5jdGlvbihjKXtyZXR1cm4hIWMmJjE8Yy5sZW5ndGh9LF9jb21wdXRlQ3VycmVudFN0ZXA6ZnVuY3Rpb24oYywKZCl7cmV0dXJuIGNbZF18fG51bGx9LF9jb21wdXRlU3RlcFZhbHVlOmZ1bmN0aW9uKGMpe3JldHVybiBjP2Muc3RlcDowfSxfY29tcHV0ZUN1cnJlbnRXYWxsVGltZTpmdW5jdGlvbihjKXtyZXR1cm4gYz9kcC5mb3JtYXREYXRlKGMud2FsbF90aW1lKToiIn0sX2dldE1heFN0ZXBJbmRleDpmdW5jdGlvbihjKXtyZXR1cm4gYy5sZW5ndGgtMX0sX2dldFNhbXBsZVRleHQ6ZnVuY3Rpb24oYyl7cmV0dXJuIFN0cmluZyhjKzEpfSxfaGFzTXVsdGlwbGVTYW1wbGVzOmZ1bmN0aW9uKGMpe3JldHVybiAxPGN9LF91cGRhdGVWaWV3OmZ1bmN0aW9uKGMpe3RoaXMuX21lc2hWaWV3ZXImJiJhbGwiPT1jJiZ0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpfSx0b0xvY2FsZVN0cmluZ186ZnVuY3Rpb24oYyl7cmV0dXJuIGMudG9Mb2NhbGVTdHJpbmcoKX19KX0pKFh0fHwoWHQ9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1tZXNoLWRhc2hib2FyZC90Zi1tZXNoLWRhc2hib2FyZC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJtZXNoLWRhc2hib2FyZCIscHJvcGVydGllczp7X3NlbGVjdGVkUnVuczpBcnJheSxfcnVuVG9UYWdJbmZvOk9iamVjdCxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6Ii4qIn0sX3NlbGVjdGVkVmlldzp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLHZhbHVlOiJhbGwifSxfY2F0ZWdvcmllczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX21ha2VDYXRlZ29yaWVzKF9ydW5Ub1RhZ0luZm8sIF9zZWxlY3RlZFJ1bnMsIF90YWdGaWx0ZXIpIn0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFFvLlJlcXVlc3RNYW5hZ2VyfX0scmVhZHkoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e3RoaXMuX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpfSwhMSk7dGhpcy5yZWxvYWQoKX0sX2dldEFsbENoaWxkcmVuKCl7cmV0dXJuIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1tZXNoLWxvYWRlciIpfSwKX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkKGEpeyJzaGFyZSI9PXRoaXMuX3NlbGVjdGVkVmlldyYmdGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKGM9PnthLnRhcmdldCE9YyYmYy5zZXRDYW1lcmFWaWV3cG9pbnQoYS5kZXRhaWwucG9zaXRpb24sYS5kZXRhaWwuZmFyLGEuZGV0YWlsLnRhcmdldCl9KX0sX3Nob3VsZE9wZW4oYSl7cmV0dXJuIDI+PWF9LHJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4odGhpcy5fcmVsb2FkTWVzaGVzLmJpbmQodGhpcykpfSxfaGFuZGxlV2luZG93UmVzaXplKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKGE9PnthLnJlZHJhdygpfSl9LF9mZXRjaFRhZ3MoKXtjb25zdCBhPVFvLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJtZXNoIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9PntpZighXy5pc0VxdWFsKGMsdGhpcy5fcnVuVG9UYWdJbmZvKSl7dmFyIGQ9Xy5tYXBWYWx1ZXMoYywKZj0+T2JqZWN0LmtleXMoZikpO2Q9UW8uZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyl9fSl9LF9yZWxvYWRNZXNoZXMoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2goYT0+e2EucmVsb2FkKCl9KX0sX21ha2VDYXRlZ29yaWVzKGEsYyxkKXtmdW5jdGlvbiBmKGwpe2NvbnN0IGs9YVtsLnJ1bl1bbC50YWddLnNhbXBsZXM7cmV0dXJuIF8ucmFuZ2UoaykubWFwKG49Pk9iamVjdC5hc3NpZ24oe30sbCx7c2FtcGxlOm4sb2ZTYW1wbGVzOmt9KSl9Y29uc3QgZz1fLm1hcFZhbHVlcyhhLGw9Pk9iamVjdC5rZXlzKGwpKTtyZXR1cm4gUm8uY2F0ZWdvcml6ZVJ1blRhZ0NvbWJpbmF0aW9ucyhnLGMsZCkubWFwKGw9Pk9iamVjdC5hc3NpZ24oe30sbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGYpKX0pKX19KX0pKCk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtcGx1Z2luLXV0aWwvbWVzc2FnZS5qcwpmcD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oYSxjLGQsZil7cmV0dXJuIG5ldyAoZHx8KGQ9UHJvbWlzZSkpKGZ1bmN0aW9uKGcsbCl7ZnVuY3Rpb24gayhxKXt0cnl7cChmLm5leHQocSkpfWNhdGNoKHIpe2wocil9fWZ1bmN0aW9uIG4ocSl7dHJ5e3AoZlsidGhyb3ciXShxKSl9Y2F0Y2gocil7bChyKX19ZnVuY3Rpb24gcChxKXtxLmRvbmU/ZyhxLnZhbHVlKToobmV3IGQoZnVuY3Rpb24ocil7cihxLnZhbHVlKX0pKS50aGVuKGssbil9cCgoZj1mLmFwcGx5KGEsY3x8W10pKS5uZXh0KCkpfSl9O3ZhciBZdDsKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7Y2xhc3MgZntjb25zdHJ1Y3RvcihnKXt0aGlzLnBvcnQ9Zzt0aGlzLmlkPTA7dGhpcy5yZXNwb25zZVdhaXRzPW5ldyBNYXA7dGhpcy5saXN0ZW5lcnM9bmV3IE1hcDt0aGlzLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbD0+dGhpcy5vbk1lc3NhZ2UobCkpfWxpc3RlbihnLGwpe3RoaXMubGlzdGVuZXJzLnNldChnLGwpfXVubGlzdGVuKGcpe3RoaXMubGlzdGVuZXJzLmRlbGV0ZShnKX1vbk1lc3NhZ2UoZyl7cmV0dXJuIGZwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgbD1KU09OLnBhcnNlKGcuZGF0YSk7Y29uc3Qgaz1sLnR5cGUsbj1sLmlkLHA9bC5wYXlsb2FkO3ZhciBxPWwuZXJyb3I7aWYobC5pc1JlcGx5KXtpZih0aGlzLnJlc3BvbnNlV2FpdHMuaGFzKG4pKXt2YXIge3Jlc29sdmU6cixyZWplY3Q6dH09dGhpcy5yZXNwb25zZVdhaXRzLmdldChuKTt0aGlzLnJlc3BvbnNlV2FpdHMuZGVsZXRlKG4pOwpxP3QoRXJyb3IocSkpOnIocCl9fWVsc2V7cT1sPW51bGw7aWYodGhpcy5saXN0ZW5lcnMuaGFzKGspKXtjb25zdCB2PXRoaXMubGlzdGVuZXJzLmdldChrKTt0cnl7bD15aWVsZCB2KHApfWNhdGNoKHkpe3E9eX19dGhpcy5wb3N0TWVzc2FnZSh7WyJ0eXBlIl06ayxbImlkIl06bixbInBheWxvYWQiXTpsLFsiZXJyb3IiXTpxLFsiaXNSZXBseSJdOiEwfSl9fSl9cG9zdE1lc3NhZ2UoZyl7dGhpcy5wb3J0LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KGcpKX1zZW5kTWVzc2FnZShnKXtjb25zdCBsPXRoaXMuaWQrKzt0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiJleHBlcmltZW50YWwuUnVuc0NoYW5nZWQiLGlkOmwscGF5bG9hZDpnLGVycm9yOm51bGwsaXNSZXBseTohMX0pO3JldHVybiBuZXcgUHJvbWlzZSgoayxuKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQobCx7cmVzb2x2ZTprLHJlamVjdDpufSl9KX19ZC5JUEM9Zn0pKGMuRE9fTk9UX1VTRV9JTlRFUk5BTHx8KGMuRE9fTk9UX1VTRV9JTlRFUk5BTD0Ke30pKX0pKGEubGlifHwoYS5saWI9e30pKX0pKFl0fHwoWXQ9e30pKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi1wbHVnaW4tdXRpbC9wbHVnaW4taG9zdC1pcGMuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtmdW5jdGlvbiBkKGssbil7Y29uc3QgcD1uZXcgYS5saWIuRE9fTk9UX1VTRV9JTlRFUk5BTC5JUEMoayk7Zi5hZGQocCk7bC5zZXQocCxuKTtrLnN0YXJ0KCk7Zm9yKGNvbnN0IFtxLHJdb2YgZylwLmxpc3RlbihxLHIpfWNvbnN0IGY9bmV3IFNldCxnPW5ldyBNYXAsbD1uZXcgTWFwO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixrPT57aWYoImV4cGVyaW1lbnRhbC5ib290c3RyYXAiPT09ay5kYXRhKXt2YXIgbj1rLnBvcnRzWzBdO24mJihrPWsuc291cmNlP2suc291cmNlLmZyYW1lRWxlbWVudDpudWxsKSYmZChuLGspfX0pO2MuYnJvYWRjYXN0PWZ1bmN0aW9uKCl7dmFyIGs9UW8ucnVuc1N0b3JlLmdldFJ1bnMoKTtmb3IodmFyIG4gb2YgZilsLmdldChuKS5pc0Nvbm5lY3RlZHx8KGYuZGVsZXRlKG4pLGwuZGVsZXRlKG4pKTtuPVsuLi5mXS5tYXAocD0+cC5zZW5kTWVzc2FnZShrKSk7cmV0dXJuIFByb21pc2UuYWxsKG4pfTsKYy5saXN0ZW49ZnVuY3Rpb24oayxuKXtnLnNldChrLG4pO2Zvcihjb25zdCBwIG9mIGYpcC5saXN0ZW4oayxuKX07Yy51bmxpc3Rlbj1mdW5jdGlvbihrKXtnLmRlbGV0ZShrKTtmb3IoY29uc3QgbiBvZiBmKW4udW5saXN0ZW4oayl9fSkoYS5ob3N0fHwoYS5ob3N0PXt9KSl9KShZdHx8KFl0PXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtcGx1Z2luLXV0aWwvcnVucy1ob3N0LWltcGwuanMKWXQuaG9zdC5saXN0ZW4oImV4cGVyaW1lbnRhbC5HZXRSdW5zIiwoKT0+UW8ucnVuc1N0b3JlLmdldFJ1bnMoKSk7UW8ucnVuc1N0b3JlLmFkZExpc3RlbmVyKCgpPT5ZdC5ob3N0LmJyb2FkY2FzdCgpKTsKCi8vIyBzb3VyY2VVUkw9YnVpbGQ6Ly90Zi10ZW5zb3Jib2FyZC9hdXRvUmVsb2FkQmVoYXZpb3IuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoKXtyZXR1cm4obmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSkuaGFzKCJfRGlzYWJsZUF1dG9SZWxvYWQiKX1hLkFVVE9SRUxPQURfTE9DQUxTVE9SQUdFX0tFWT0iVEYuVGVuc29yQm9hcmQuYXV0b1JlbG9hZEVuYWJsZWQiO2EuQXV0b1JlbG9hZEJlaGF2aW9yPXtwcm9wZXJ0aWVzOnthdXRvUmVsb2FkRW5hYmxlZDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b1JlbG9hZE9ic2VydmVyIix2YWx1ZTooKT0+e3ZhciBkPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShhLkFVVE9SRUxPQURfTE9DQUxTVE9SQUdFX0tFWSk7cmV0dXJuInRydWUiPT09ZHx8bnVsbD09ZH19LF9hdXRvUmVsb2FkSWQ6e3R5cGU6TnVtYmVyfSxhdXRvUmVsb2FkSW50ZXJ2YWxTZWNzOnt0eXBlOk51bWJlcix2YWx1ZTozMH19LGRldGFjaGVkOmZ1bmN0aW9uKCl7d2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9hdXRvUmVsb2FkSWQpfSwKX2F1dG9SZWxvYWRPYnNlcnZlcjpmdW5jdGlvbihkKXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYS5BVVRPUkVMT0FEX0xPQ0FMU1RPUkFHRV9LRVksZCk7ZCYmIWMoKT90aGlzLl9hdXRvUmVsb2FkSWQ9d2luZG93LnNldFRpbWVvdXQoKCk9PnRoaXMuX2RvQXV0b1JlbG9hZCgpLDFFMyp0aGlzLmF1dG9SZWxvYWRJbnRlcnZhbFNlY3MpOndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fYXV0b1JlbG9hZElkKX0sX2RvQXV0b1JlbG9hZDpmdW5jdGlvbigpe2lmKG51bGw9PXRoaXMucmVsb2FkKXRocm93IEVycm9yKCJBdXRvUmVsb2FkQmVoYXZpb3IgcmVxdWlyZXMgYSByZWxvYWQgbWV0aG9kIik7dGhpcy5yZWxvYWQoKTt0aGlzLl9hdXRvUmVsb2FkSWQ9d2luZG93LnNldFRpbWVvdXQoKCk9PnRoaXMuX2RvQXV0b1JlbG9hZCgpLDFFMyp0aGlzLmF1dG9SZWxvYWRJbnRlcnZhbFNlY3MpfX19KShZb3x8KFlvPXt9KSk7CgovLyMgc291cmNlVVJMPWJ1aWxkOi8vdGYtdGVuc29yYm9hcmQvdGYtdGVuc29yYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGVuc29yYm9hcmQiLGJlaGF2aW9yczpbWW8uQXV0b1JlbG9hZEJlaGF2aW9yXSxwcm9wZXJ0aWVzOnticmFuZDp7dHlwZTpTdHJpbmcsdmFsdWU6IlRlbnNvckJvYXJkLVgifSx0aXRsZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il91cGRhdGVUaXRsZSJ9LHJvdXRlcjp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVSb3V0ZXIifSxkZW1vRGlyOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSx1c2VIYXNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVkRGFzaGJvYXJkczp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9kYXNoYm9hcmREYXRhOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfY29tcHV0ZURhc2hib2FyZERhdGEoX2Rhc2hib2FyZFJlZ2lzdHJ5KSJ9LF9kYXNoYm9hcmRSZWdpc3RyeTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlRGFzaGJvYXJkUmVnaXN0cnkoX3BsdWdpbnNMaXN0aW5nKSJ9LF9wbHVnaW5zTGlzdGluZzp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfYWN0aXZlRGFzaGJvYXJkczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmQoX2Rhc2hib2FyZERhdGEsIF9wbHVnaW5zTGlzdGluZykifSxfYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6WW8uQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5OT1RfTE9BREVEfSxfYWN0aXZlRGFzaGJvYXJkc05vdExvYWRlZDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUFjdGl2ZURhc2hib2FyZHNOb3RMb2FkZWQoX2FjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGUpIn0sX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmRzTG9hZGVkKF9hY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlKSJ9LF9hY3RpdmVEYXNoYm9hcmRzRmFpbGVkVG9Mb2FkOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQWN0aXZlRGFzaGJvYXJkc0ZhaWxlZFRvTG9hZChfYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZSkifSwKX3Nob3dOb0Rhc2hib2FyZHNNZXNzYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlU2hvd05vRGFzaGJvYXJkc01lc3NhZ2UoX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQsIF9hY3RpdmVEYXNoYm9hcmRzLCBfc2VsZWN0ZWREYXNoYm9hcmQpIn0sX3Nob3dOb1N1Y2hEYXNoYm9hcmRNZXNzYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlU2hvd05vU3VjaERhc2hib2FyZE1lc3NhZ2UoX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQsIF9kYXNoYm9hcmRSZWdpc3RyeSwgX3NlbGVjdGVkRGFzaGJvYXJkKSJ9LF9zZWxlY3RlZERhc2hib2FyZDp7dHlwZTpTdHJpbmcsdmFsdWU6VG8uZ2V0U3RyaW5nKFRvLlRBQil8fG51bGwsb2JzZXJ2ZXI6Il9zZWxlY3RlZERhc2hib2FyZENoYW5nZWQifSxfZGFzaGJvYXJkVG9NYXliZVJlbW92ZTpTdHJpbmcsX2Rhc2hib2FyZENvbnRhaW5lcnNTdGFtcGVkOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sX2lzUmVsb2FkRGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITF9LF9sYXN0UmVsb2FkVGltZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vdCB5ZXQgbG9hZGVkIn0sX2xhc3RSZWxvYWRUaW1lU2hvcnQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJOb3QgeWV0IGxvYWRlZCJ9LF9kYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5SZXF1ZXN0TWFuYWdlcn0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBRby5DYW5jZWxsZXJ9LF9yZWZyZXNoaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWREYXNoYm9hcmRGcm9tQWN0aXZlKF9zZWxlY3RlZERhc2hib2FyZCwgX2FjdGl2ZURhc2hib2FyZHMpIiwiX2Vuc3VyZVNlbGVjdGVkRGFzaGJvYXJkU3RhbXBlZChfZGFzaGJvYXJkUmVnaXN0cnksIF9kYXNoYm9hcmRDb250YWluZXJzU3RhbXBlZCwgX2FjdGl2ZURhc2hib2FyZHMsIF9zZWxlY3RlZERhc2hib2FyZCkiXSwKX2FjdGl2ZURhc2hib2FyZHNVcGRhdGVkKCl7fSxfaXNEYXNoYm9hcmRBY3RpdmUoYSxjLGQpe3JldHVybiAwPD0oYXx8IiIpLnNwbGl0KCIsIikuaW5kZXhPZihkLnBsdWdpbil8fCEoY3x8W10pLmluY2x1ZGVzKGQucGx1Z2luKT8hMTohMH0sX2lzRGFzaGJvYXJkSW5hY3RpdmUoYSxjLGQpe3JldHVybiAwPD0oYXx8IiIpLnNwbGl0KCIsIikuaW5kZXhPZihkLnBsdWdpbik/ITE6KGN8fFtdKS5pbmNsdWRlcyhkLnBsdWdpbik/ITE6ITB9LF9pbmFjdGl2ZURhc2hib2FyZHNFeGlzdChhLGMsZCl7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj1uZXcgU2V0O2EuZm9yRWFjaChnPT57Zi5hZGQoZy5wbHVnaW4pfSk7KGN8fCIiKS5zcGxpdCgiLCIpLmZvckVhY2goZz0+e2YuZGVsZXRlKGcucGx1Z2luKX0pO2QuZm9yRWFjaChnPT57Zi5kZWxldGUoZyl9KTtyZXR1cm4gMDxmLnNpemV9LF9nZXREYXNoYm9hcmRGcm9tSW5kZXgoYSxjKXtyZXR1cm4gYVtjXX0sX3NlbGVjdGVkU3RhdHVzKGEsCmMpe3JldHVybiBhPT09Y30sX3NlbGVjdGVkRGFzaGJvYXJkQ2hhbmdlZChhKXthPWF8fCIiO1RvLnNldFN0cmluZyhUby5UQUIsYSk7bGV0IGM9d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO2MrPWMuZW5kc1dpdGgoIi8iKT9hOiIvIithO2dhKCJzZXQiLCJwYWdlIixjKTtnYSgic2VuZCIsInBhZ2V2aWV3Iil9LF91cGRhdGVTZWxlY3RlZERhc2hib2FyZEZyb21BY3RpdmUoYSxjKXtjJiZudWxsPT1hJiYoYT1jWzBdfHxudWxsLG51bGwhPWEmJihUby5zZXRTdHJpbmcoVG8uVEFCLGEse3VzZUxvY2F0aW9uUmVwbGFjZTohMH0pLHRoaXMuX3NlbGVjdGVkRGFzaGJvYXJkPWEpKX0sX3VwZGF0ZVNlbGVjdGVkRGFzaGJvYXJkRnJvbUhhc2goKXtjb25zdCBhPVRvLmdldFN0cmluZyhUby5UQUIpO3RoaXMuc2V0KCJfc2VsZWN0ZWREYXNoYm9hcmQiLGF8fG51bGwpfSxfZW5zdXJlU2VsZWN0ZWREYXNoYm9hcmRTdGFtcGVkKGEsYyxkLGYpe2lmKGQmJmYmJmNbZl0mJihjPXRoaXMuX2Rhc2hib2FyZFRvTWF5YmVSZW1vdmUsCnRoaXMuX2Rhc2hib2FyZFRvTWF5YmVSZW1vdmU9ZixjJiZjIT1mJiZhW2NdLnJlbW92ZURvbSYmKGM9dGhpcy4kJChgLmRhc2hib2FyZC1jb250YWluZXJbZGF0YS1kYXNoYm9hcmQ9JHtjfV1gKSxjLmZpcnN0Q2hpbGQmJmMuZmlyc3RDaGlsZC5yZW1vdmUoKSksYz10aGlzLiQkKGAuZGFzaGJvYXJkLWNvbnRhaW5lcltkYXRhLWRhc2hib2FyZD0ke2Z9XWApKSl7YT1hW2ZdO2lmKDA9PT1jLmNoaWxkcmVuLmxlbmd0aClzd2l0Y2goZD1hLmxvYWRpbmdNZWNoYW5pc20sZC50eXBlKXtjYXNlICJDVVNUT01fRUxFTUVOVCI6Zj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGQuZWxlbWVudE5hbWUpO2YuaWQ9ImRhc2hib2FyZCI7Yy5hcHBlbmRDaGlsZChmKTticmVhaztjYXNlICJJRlJBTUUiOnRoaXMuX3JlbmRlclBsdWdpbklmcmFtZShjLGYsZCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIkludmFyaWFudCB2aW9sYXRpb246IixkKX10aGlzLnNldCgiX2lzUmVsb2FkRGlzYWJsZWQiLAphLmRpc2FibGVSZWxvYWQpfX0sX3JlbmRlclBsdWdpbklmcmFtZShhLGMpe2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7ZC5pZD0iZGFzaGJvYXJkIjtjb25zdCBmPW5ldyBVUkwoImRhdGEvcGx1Z2luX2VudHJ5Lmh0bWwiLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtmLnNlYXJjaFBhcmFtcy5zZXQoIm5hbWUiLGMpO2Quc2V0QXR0cmlidXRlKCJzcmMiLGYudG9TdHJpbmcoKSk7YS5hcHBlbmRDaGlsZChkKX0sX3NlbGVjdGVkRGFzaGJvYXJkQ29tcG9uZW50KCl7cmV0dXJuIHRoaXMuJCQoYC5kYXNoYm9hcmQtY29udGFpbmVyW2RhdGEtZGFzaGJvYXJkPSR7dGhpcy5fc2VsZWN0ZWREYXNoYm9hcmR9XSAjZGFzaGJvYXJkYCl9LHJlYWR5KCl7U28uc2V0VXNlSGFzaCh0aGlzLnVzZUhhc2gpO3RoaXMuX3VwZGF0ZVNlbGVjdGVkRGFzaGJvYXJkRnJvbUhhc2goKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsKCk9Pnt0aGlzLl91cGRhdGVTZWxlY3RlZERhc2hib2FyZEZyb21IYXNoKCl9LAohMSk7UW8uZW52aXJvbm1lbnRTdG9yZS5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuX2RhdGFMb2NhdGlvbj1Rby5lbnZpcm9ubWVudFN0b3JlLmdldERhdGFMb2NhdGlvbigpO2NvbnN0IGE9UW8uZW52aXJvbm1lbnRTdG9yZS5nZXRXaW5kb3dUaXRsZSgpO2EmJih3aW5kb3cuZG9jdW1lbnQudGl0bGU9YSl9KTt0aGlzLl9yZWxvYWREYXRhKCk7dGhpcy5fbGFzdFJlbG9hZFRpbWU9KG5ldyBEYXRlKS50b1N0cmluZygpfSxfY29tcHV0ZUFjdGl2ZURhc2hib2FyZCgpe3JldHVybiB0aGlzLl9kYXNoYm9hcmREYXRhP3RoaXMuX2Rhc2hib2FyZERhdGEubWFwKGE9PmEucGx1Z2luKS5maWx0ZXIoYT0+e2E9dGhpcy5fcGx1Z2luc0xpc3RpbmdbYV07cmV0dXJuImJvb2xlYW4iPT09dHlwZW9mIGE/YTphJiZhLmVuYWJsZWR9KTpbXX0sX29uVGVtcGxhdGVDaGFuZ2VkKCl7Y29uc3QgYT17fTtmb3IoY29uc3QgYyBvZiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgiLmRhc2hib2FyZC1jb250YWluZXIiKSlhW2MuZGF0YXNldC5kYXNoYm9hcmRdPQohMDt0aGlzLl9kYXNoYm9hcmRDb250YWluZXJzU3RhbXBlZD1hfSxfY29tcHV0ZURhc2hib2FyZFJlZ2lzdHJ5KGEpe2NvbnN0IGM9e307Zm9yKGNvbnN0IFtmLGddb2YgT2JqZWN0LmVudHJpZXMoWW8uZGFzaGJvYXJkUmVnaXN0cnkpKWNbZl09e3BsdWdpbjpnLnBsdWdpbixsb2FkaW5nTWVjaGFuaXNtOnt0eXBlOiJDVVNUT01fRUxFTUVOVCIsZWxlbWVudE5hbWU6Zy5lbGVtZW50TmFtZX0sdGFiTmFtZTpnLnRhYk5hbWUudG9VcHBlckNhc2UoKSxkaXNhYmxlUmVsb2FkOmcuaXNSZWxvYWREaXNhYmxlZHx8ITEscmVtb3ZlRG9tOmcucmVtb3ZlRG9tfHwhMX07aWYobnVsbCE9YSlmb3IoY29uc3QgW2YsZ11vZiBPYmplY3QuZW50cmllcyhhKSlpZigiYm9vbGVhbiIhPT10eXBlb2YgZyl7c3dpdGNoKGcubG9hZGluZ19tZWNoYW5pc20udHlwZSl7Y2FzZSAiTk9ORSI6bnVsbD09Y1tmXSYmY29uc29sZS53YXJuKCJQbHVnaW4gaGFzIG5vIGxvYWRpbmcgbWVjaGFuaXNtIGFuZCBubyBiYWtlZC1pbiByZWdpc3RyeSBlbnRyeTogJXMiLApmKTtjb250aW51ZTtjYXNlICJDVVNUT01fRUxFTUVOVCI6dmFyIGQ9e3R5cGU6IkNVU1RPTV9FTEVNRU5UIixlbGVtZW50TmFtZTpnLmxvYWRpbmdfbWVjaGFuaXNtLmVsZW1lbnRfbmFtZX07YnJlYWs7Y2FzZSAiSUZSQU1FIjpkPXt0eXBlOiJJRlJBTUUiLG1vZHVsZVBhdGg6Zy5sb2FkaW5nX21lY2hhbmlzbS5tb2R1bGVfcGF0aH07YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlVua25vd24gbG9hZGluZyBtZWNoYW5pc20gZm9yIHBsdWdpbiAlczogJXMiLGYsZy5sb2FkaW5nX21lY2hhbmlzbSk7Y29udGludWV9bnVsbD09ZCYmY29uc29sZS5lcnJvcigiSW52YXJpYW50IHZpb2xhdGlvbjogbG9hZGluZ01lY2hhbmlzbSBpcyAlcyBmb3IgJXMiLGQsZik7Y1tmXT17cGx1Z2luOmYsbG9hZGluZ01lY2hhbmlzbTpkLHRhYk5hbWU6Zy50YWJfbmFtZS50b1VwcGVyQ2FzZSgpLGRpc2FibGVSZWxvYWQ6Zy5kaXNhYmxlX3JlbG9hZCxyZW1vdmVEb206Zy5yZW1vdmVfZG9tfX1kPXt9Owpmb3IoY29uc3QgZiBvZiBPYmplY3Qua2V5cyhhKSljW2ZdJiYoZFtmXT1jW2ZdKTtPYmplY3QuYXNzaWduKGQsYyk7cmV0dXJuIGR9LF9jb21wdXRlRGFzaGJvYXJkRGF0YShhKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyhhKX0sX2ZldGNoUGx1Z2luc0xpc3RpbmcoKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7Y29uc3QgYT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYz0+e2MuY2FuY2VsbGVkfHwodGhpcy5fcGx1Z2luc0xpc3Rpbmc9Yy52YWx1ZSx0aGlzLl9hY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlPVlvLkFjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGUuTE9BREVEKX0pO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KFFvLmdldFJvdXRlcigpLnBsdWdpbnNMaXN0aW5nKCkpLnRoZW4oYSwoKT0+e3RoaXMuX2FjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGU9PT1Zby5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlLk5PVF9MT0FERUQ/dGhpcy5fYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZT0KWW8uQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5GQUlMRUQ6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gcmVsb2FkIHRoZSBzZXQgb2YgYWN0aXZlIHBsdWdpbnM7IHVzaW5nIG9sZCB2YWx1ZS4iKX0pfSxfY29tcHV0ZUFjdGl2ZURhc2hib2FyZHNOb3RMb2FkZWQoYSl7cmV0dXJuIGE9PT1Zby5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlLk5PVF9MT0FERUR9LF9jb21wdXRlQWN0aXZlRGFzaGJvYXJkc0xvYWRlZChhKXtyZXR1cm4gYT09PVlvLkFjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGUuTE9BREVEfSxfY29tcHV0ZUFjdGl2ZURhc2hib2FyZHNGYWlsZWRUb0xvYWQoYSl7cmV0dXJuIGE9PT1Zby5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlLkZBSUxFRH0sX2NvbXB1dGVTaG93Tm9EYXNoYm9hcmRzTWVzc2FnZShhLGMsZCl7cmV0dXJuIGEmJjA9PT1jLmxlbmd0aCYmbnVsbD09ZH0sX2NvbXB1dGVTaG93Tm9TdWNoRGFzaGJvYXJkTWVzc2FnZShhLGMsZCl7cmV0dXJuIGEmJiEhZCYmCm51bGw9PWNbZF19LF91cGRhdGVSb3V0ZXIoYSl7UW8uc2V0Um91dGVyKGEpfSxfdXBkYXRlVGl0bGUoYSl7YSYmdGhpcy5zZXQoImJyYW5kIixhKX0scmVsb2FkKCl7dGhpcy5faXNSZWxvYWREaXNhYmxlZHx8KHRoaXMuX3JlbG9hZERhdGEoKS50aGVuKCgpPT57Y29uc3QgYT10aGlzLl9zZWxlY3RlZERhc2hib2FyZENvbXBvbmVudCgpO2EmJmEucmVsb2FkJiZhLnJlbG9hZCgpfSksdGhpcy5fbGFzdFJlbG9hZFRpbWU9KG5ldyBEYXRlKS50b1N0cmluZygpKX0sX3JlbG9hZERhdGEoKXt0aGlzLl9yZWZyZXNoaW5nPSEwO3JldHVybiBQcm9taXNlLmFsbChbdGhpcy5fZmV0Y2hQbHVnaW5zTGlzdGluZygpLFFvLmVudmlyb25tZW50U3RvcmUucmVmcmVzaCgpLFFvLnJ1bnNTdG9yZS5yZWZyZXNoKCksUW8uZXhwZXJpbWVudHNTdG9yZS5yZWZyZXNoKCldKS50aGVuKCgpPT57dGhpcy5fbGFzdFJlbG9hZFRpbWVTaG9ydD0obmV3IERhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAsCnttb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLl9yZWZyZXNoaW5nPSExfSl9LF9nZXREYXRhUmVmcmVzaGluZ0NsYXNzKCl7cmV0dXJuIHRoaXMuX3JlZnJlc2hpbmc/InJlZnJlc2hpbmciOiIifSxvcGVuU2V0dGluZ3MoKXt0aGlzLiQuc2V0dGluZ3Mub3BlbigpO3RoaXMuJC5wYWdpbmF0aW9uTGltaXRJbnB1dC52YWx1ZT1Xby5nZXRMaW1pdCgpfSxfcGFnaW5hdGlvbkxpbWl0VmFsaWRhdGUoYSl7YS50YXJnZXQudmFsaWRhdGUoKX0sX3BhZ2luYXRpb25MaW1pdENoYW5nZWQoYSl7YT1OdW1iZXIucGFyc2VJbnQoYS50YXJnZXQudmFsdWUsMTApO2E9PT0rYSYmMDxhJiZXby5zZXRMaW1pdChhKX19KTsK", "headers": [ [ "content-type", "application/javascript; charset=utf-8" ] ], "ok": true, "status": 200, "status_text": "" } } }, "colab_type": "code", "executionInfo": { "elapsed": 5893, "status": "ok", "timestamp": 1583998406839, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "gxHx2Bu9Lt-v", "outputId": "3aeff6f0-fc28-4808-a47a-61e14c5901ee" }, "outputs": [ { "data": { "text/plain": [ "Output hidden; open in https://colab.research.google.com to view." ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%tensorboard --logdir logs/fit" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "wmcefwvctykA" }, "source": [ "## Evaluating model accuracy" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "executionInfo": { "elapsed": 8724, "status": "ok", "timestamp": 1584118050126, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "VwA0C3ZEt1X-", "outputId": "fc2b9d46-9cd2-45e7-ca8c-23dd034e558a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1/Unknown - 1s 1s/step - loss: 0.9578 - accuracy: 0.7823" ] } ], "source": [ "# %%capture\n", "train_loss, train_accuracy = model.evaluate(\n", " x=dataset_train.batch(BATCH_SIZE).take(NUM_TRAIN_EXAMPLES)\n", ")\n", "\n", "test_loss, test_accuracy = model.evaluate(\n", " x=dataset_test.batch(BATCH_SIZE).take(NUM_TEST_EXAMPLES)\n", ")" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "colab_type": "code", "executionInfo": { "elapsed": 983, "status": "ok", "timestamp": 1584118055166, "user": { "displayName": "Oleksii Trekhleb", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GiiA4aUKCbFho88Jd0WWMoAqQUt3jbuCtfNYpHVOA=s64", "userId": "03172675069638383074" }, "user_tz": -60 }, "id": "3CikvwUBwUVZ", "outputId": "72c5b856-3074-4cab-f85b-0014d6aecb49" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training loss: 0.5349061712622643\n", "Training accuracy: 0.8218254\n", "\n", "\n", "Test loss: 0.9577915668487549\n", "Test accuracy: 0.7822581\n" ] } ], "source": [ "print('Training loss: ', train_loss)\n", "print('Training accuracy: ', train_accuracy)\n", "print('\\n')\n", "print('Test loss: ', test_loss)\n", "print('Test accuracy: ', test_accuracy)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "1dOzgOVT1KFd" }, "source": [ "## Saving the model" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "_3APy_0-1LvQ" }, "outputs": [], "source": [ "model_name = 'rock_paper_scissors_mobilenet_v2.h5'\n", "model.save(model_name, save_format='h5')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "kpRWiLQy-sd5" }, "source": [ "## Converting the model to web-format\n", "\n", "To use this model on the web we need to convert it into the format that will be understandable by [tensorflowjs](https://www.tensorflow.org/js). To do so we may use [tfjs-converter](https://github.com/tensorflow/tfjs/tree/master/tfjs-converter) as following:\n", "\n", "```\n", "tensorflowjs_converter --input_format keras \\\n", " ./experiments/rock_paper_scissors_mobilenet_v2/rock_paper_scissors_mobilenet_v2.h5 \\\n", " ./demos/public/models/rock_paper_scissors_mobilenet_v2\n", "```\n", "\n", "You find this experiment in the [Demo app](https://trekhleb.github.io/machine-learning-experiments) and play around with it right in you browser to see how the model performs in real life." ] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [], "name": "rock_paper_scissors_mobilenet_v2.ipynb", "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.7.6" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "00a09ba3e0de46a3818399470bd7c19f": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "0400652843724f3d91ee66aacc95ea33": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_8287a895bd704525bdfd015c3f70d49c", "placeholder": "​", "style": "IPY_MODEL_4331985d1b764aaea1c72a8638a7fa37", "value": " 88% 2210/2520 [00:00<00:00, 7466.75 examples/s]" } }, "06e128690421459ebd8a39222a488e98": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "0950600f286d48ff9a35337b24ef64fc": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "danger", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_23987fe99ee7401eb203550810823ca4", "max": 2520, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_a8f5f1bf4a674eafa87ce8f0552834d7", "value": 2210 } }, "0f0826db891d4eb1a77533de55e4c6fc": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_fd3fdb34abd943e3ae840d07873faba9", "IPY_MODEL_a63f4f5993c94b46b1ca4c3a8a0323b3" ], "layout": "IPY_MODEL_00a09ba3e0de46a3818399470bd7c19f" } }, "14e8fec9c1b040e6a6aca1878f0cdeaf": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_840d9097d98145dbb59bcf470db7e58a", "placeholder": "​", "style": "IPY_MODEL_6392a0e04bfc452cbbc93b70ed00c5c7", "value": "2/|/100% 2/2 [00:04<00:00, 1.79s/ url]" } }, "17574ae6f50f4131b2814ab12d0bf442": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_bb7ae99cbd5d4e89b54b190fb45d1bf4", "placeholder": "​", "style": "IPY_MODEL_c14a6cb079234b4bbfb2c7f91386c449", "value": "2500 examples [00:01, 1744.67 examples/s]" } }, "20fd145da4ba4141b44e549eb1f4fa27": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "23987fe99ee7401eb203550810823ca4": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "2d2dbe480be74566810a5cec6b26471b": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_0950600f286d48ff9a35337b24ef64fc", "IPY_MODEL_0400652843724f3d91ee66aacc95ea33" ], "layout": "IPY_MODEL_6e19550e5035461eb0ad74878f5e2d15" } }, "3462c60f830745ff8e0621b9c65f79c7": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "364c48648e58428d8499906786ac054b": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "3d732048e4d7458c944ffd0faacfc66f": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "41f9a4d62caf4e30b7bf10a6ad463b46": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "4331985d1b764aaea1c72a8638a7fa37": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "57d02334fa254873acf6eb57f1896232": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_eb5694548f7a483dbf5ea87df52a53d9", "IPY_MODEL_78ae713c8edc489bae2c3fd68a22aa3d" ], "layout": "IPY_MODEL_d3a49253898a44eaad302e3cf136a97d" } }, "6392a0e04bfc452cbbc93b70ed00c5c7": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "67006125aa3b4a8faaec714cd3ba57cc": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_ad501cd5b9484b5a9917ada0cb2f6cd2", "IPY_MODEL_14e8fec9c1b040e6a6aca1878f0cdeaf" ], "layout": "IPY_MODEL_3d732048e4d7458c944ffd0faacfc66f" } }, "67f7e7806e574c9ab980e12a79690007": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "info", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_3462c60f830745ff8e0621b9c65f79c7", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_a41b19880c5246e3a8dcc0f29201d309", "value": 1 } }, "68790bf886fe4f929ccf89a63f09ec79": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "info", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_ea2ea82b60f0429bb6e7af5a70eeba52", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_fe73783974624d9bbffd1c1d0b7877b7", "value": 1 } }, "68ad524d13c44d5d950b451fee3ea659": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "6e19550e5035461eb0ad74878f5e2d15": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "74b70ec5faee459991a8f2c956bc8891": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "78ae713c8edc489bae2c3fd68a22aa3d": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_364c48648e58428d8499906786ac054b", "placeholder": "​", "style": "IPY_MODEL_06e128690421459ebd8a39222a488e98", "value": " 0% 0/372 [00:00<?, ? examples/s]" } }, "80af9e52ac7c4f328cc944d6c8697576": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_68790bf886fe4f929ccf89a63f09ec79", "IPY_MODEL_17574ae6f50f4131b2814ab12d0bf442" ], "layout": "IPY_MODEL_8d31026d3d3b4b1aa323074e82c3e1ea" } }, "8287a895bd704525bdfd015c3f70d49c": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "83ca399984644746a0b691b19c084f95": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "840d9097d98145dbb59bcf470db7e58a": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "84589bf2c0f74a8c946093c0c86c4549": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "8759d32acbd04874b6aae214f643cb6a": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "8d31026d3d3b4b1aa323074e82c3e1ea": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "a41b19880c5246e3a8dcc0f29201d309": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "a63f4f5993c94b46b1ca4c3a8a0323b3": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_41f9a4d62caf4e30b7bf10a6ad463b46", "placeholder": "​", "style": "IPY_MODEL_ec810ee9725a49d3ba02d3ecee57dbd4", "value": "219/|/100% 219/219 [00:04<00:00, 48.33 MiB/s]" } }, "a8556c8709264236b55f84a7bb5f7ffb": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_67f7e7806e574c9ab980e12a79690007", "IPY_MODEL_c486cd27a1214e4186ad812991921982" ], "layout": "IPY_MODEL_74b70ec5faee459991a8f2c956bc8891" } }, "a8c696788cc245a19c08bf6185a1480f": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "initial" } }, "a8f5f1bf4a674eafa87ce8f0552834d7": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "ad501cd5b9484b5a9917ada0cb2f6cd2": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "Dl Completed...", "description_tooltip": null, "layout": "IPY_MODEL_20fd145da4ba4141b44e549eb1f4fa27", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_f315767212d6477f94b686c121d4d67a", "value": 1 } }, "bb7ae99cbd5d4e89b54b190fb45d1bf4": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "c14a6cb079234b4bbfb2c7f91386c449": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "c2c4c37e60a248ff88067301ea9cc088": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "c486cd27a1214e4186ad812991921982": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_68ad524d13c44d5d950b451fee3ea659", "placeholder": "​", "style": "IPY_MODEL_84589bf2c0f74a8c946093c0c86c4549", "value": "254 examples [00:00, 988.34 examples/s]" } }, "d3a49253898a44eaad302e3cf136a97d": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "ea2ea82b60f0429bb6e7af5a70eeba52": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "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 } }, "eb5694548f7a483dbf5ea87df52a53d9": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "danger", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_8759d32acbd04874b6aae214f643cb6a", "max": 372, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_83ca399984644746a0b691b19c084f95", "value": 0 } }, "ec810ee9725a49d3ba02d3ecee57dbd4": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "f315767212d6477f94b686c121d4d67a": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "initial" } }, "fd3fdb34abd943e3ae840d07873faba9": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "IntProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "Dl Size...", "description_tooltip": null, "layout": "IPY_MODEL_c2c4c37e60a248ff88067301ea9cc088", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_a8c696788cc245a19c08bf6185a1480f", "value": 1 } }, "fe73783974624d9bbffd1c1d0b7877b7": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } } } } }, "nbformat": 4, "nbformat_minor": 1 }