Created
May 19, 2020 16:04
-
-
Save Arroak/a08e821346a06f43bd2adbe441f4825b to your computer and use it in GitHub Desktop.
Created on Skills Network Labs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"<a href=\"https://cognitiveclass.ai\"><img src = \"https://ibm.box.com/shared/static/9gegpsmnsoo25ikkbl4qzlvlyjbgxs5x.png\" width = 400> </a>\n", | |
"\n", | |
"<h1 align=center><font size = 5>Generating Maps with Python</font></h1>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"## Introduction\n", | |
"\n", | |
"In this lab, we will learn how to create maps for different objectives. To do that, we will part ways with Matplotlib and work with another Python visualization library, namely **Folium**. What is nice about **Folium** is that it was developed for the sole purpose of visualizing geospatial data. While other libraries are available to visualize geospatial data, such as **plotly**, they might have a cap on how many API calls you can make within a defined time frame. **Folium**, on the other hand, is completely free." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"## Table of Contents\n", | |
"\n", | |
"<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n", | |
"\n", | |
"1. [Exploring Datasets with *p*andas](#0)<br>\n", | |
"2. [Downloading and Prepping Data](#2)<br>\n", | |
"3. [Introduction to Folium](#4) <br>\n", | |
"4. [Map with Markers](#6) <br>\n", | |
"5. [Choropleth Maps](#8) <br>\n", | |
"</div>\n", | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"# Exploring Datasets with *pandas* and Matplotlib<a id=\"0\"></a>\n", | |
"\n", | |
"Toolkits: This lab heavily relies on [*pandas*](http://pandas.pydata.org/) and [**Numpy**](http://www.numpy.org/) for data wrangling, analysis, and visualization. The primary plotting library we will explore in this lab is [**Folium**](https://github.com/python-visualization/folium/).\n", | |
"\n", | |
"Datasets: \n", | |
"\n", | |
"1. San Francisco Police Department Incidents for the year 2016 - [Police Department Incidents](https://data.sfgov.org/Public-Safety/Police-Department-Incidents-Previous-Year-2016-/ritf-b9ki) from San Francisco public data portal. Incidents derived from San Francisco Police Department (SFPD) Crime Incident Reporting system. Updated daily, showing data for the entire year of 2016. Address and location has been anonymized by moving to mid-block or to an intersection. \n", | |
"\n", | |
"2. Immigration to Canada from 1980 to 2013 - [International migration flows to and from selected countries - The 2015 revision](http://www.un.org/en/development/desa/population/migration/data/empirical2/migrationflows.shtml) from United Nation's website. The dataset contains annual data on the flows of international migrants as recorded by the countries of destination. The data presents both inflows and outflows according to the place of birth, citizenship or place of previous / next residence both for foreigners and nationals. For this lesson, we will focus on the Canadian Immigration data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"# Downloading and Prepping Data <a id=\"2\"></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Import Primary Modules:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np # useful for many scientific computing in Python\n", | |
"import pandas as pd # primary data structure library" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"# Introduction to Folium <a id=\"4\"></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Folium is a powerful Python library that helps you create several types of Leaflet maps. The fact that the Folium results are interactive makes this library very useful for dashboard building.\n", | |
"\n", | |
"From the official Folium documentation page:\n", | |
"\n", | |
"> Folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the Leaflet.js library. Manipulate your data in Python, then visualize it in on a Leaflet map via Folium.\n", | |
"\n", | |
"> Folium makes it easy to visualize data that's been manipulated in Python on an interactive Leaflet map. It enables both the binding of data to a map for choropleth visualizations as well as passing Vincent/Vega visualizations as markers on the map.\n", | |
"\n", | |
"> The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. Folium supports both GeoJSON and TopoJSON overlays, as well as the binding of data to those overlays to create choropleth maps with color-brewer color schemes." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"#### Let's install **Folium**" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"**Folium** is not available by default. So, we first need to install it before we are able to import it." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Collecting package metadata (current_repodata.json): done\n", | |
"Solving environment: failed with initial frozen solve. Retrying with flexible solve.\n", | |
"Collecting package metadata (repodata.json): done\n", | |
"Solving environment: done\n", | |
"\n", | |
"## Package Plan ##\n", | |
"\n", | |
" environment location: /home/jupyterlab/conda/envs/python\n", | |
"\n", | |
" added / updated specs:\n", | |
" - folium=0.5.0\n", | |
"\n", | |
"\n", | |
"The following packages will be downloaded:\n", | |
"\n", | |
" package | build\n", | |
" ---------------------------|-----------------\n", | |
" altair-4.1.0 | py_1 614 KB conda-forge\n", | |
" branca-0.4.1 | py_0 26 KB conda-forge\n", | |
" brotlipy-0.7.0 |py36h8c4c3a4_1000 346 KB conda-forge\n", | |
" chardet-3.0.4 |py36h9f0ad1d_1006 188 KB conda-forge\n", | |
" cryptography-2.9.2 | py36h45558ae_0 613 KB conda-forge\n", | |
" folium-0.5.0 | py_0 45 KB conda-forge\n", | |
" pandas-1.0.3 | py36h830a2c2_1 11.1 MB conda-forge\n", | |
" pysocks-1.7.1 | py36h9f0ad1d_1 27 KB conda-forge\n", | |
" toolz-0.10.0 | py_0 46 KB conda-forge\n", | |
" vincent-0.4.4 | py_1 28 KB conda-forge\n", | |
" ------------------------------------------------------------\n", | |
" Total: 13.0 MB\n", | |
"\n", | |
"The following NEW packages will be INSTALLED:\n", | |
"\n", | |
" altair conda-forge/noarch::altair-4.1.0-py_1\n", | |
" attrs conda-forge/noarch::attrs-19.3.0-py_0\n", | |
" branca conda-forge/noarch::branca-0.4.1-py_0\n", | |
" brotlipy conda-forge/linux-64::brotlipy-0.7.0-py36h8c4c3a4_1000\n", | |
" chardet conda-forge/linux-64::chardet-3.0.4-py36h9f0ad1d_1006\n", | |
" cryptography conda-forge/linux-64::cryptography-2.9.2-py36h45558ae_0\n", | |
" entrypoints conda-forge/linux-64::entrypoints-0.3-py36h9f0ad1d_1001\n", | |
" folium conda-forge/noarch::folium-0.5.0-py_0\n", | |
" idna conda-forge/noarch::idna-2.9-py_1\n", | |
" importlib_metadata conda-forge/noarch::importlib_metadata-1.6.0-0\n", | |
" jinja2 conda-forge/noarch::jinja2-2.11.2-pyh9f0ad1d_0\n", | |
" jsonschema conda-forge/linux-64::jsonschema-3.2.0-py36h9f0ad1d_1\n", | |
" markupsafe conda-forge/linux-64::markupsafe-1.1.1-py36h8c4c3a4_1\n", | |
" pandas conda-forge/linux-64::pandas-1.0.3-py36h830a2c2_1\n", | |
" pyopenssl conda-forge/noarch::pyopenssl-19.1.0-py_1\n", | |
" pyrsistent conda-forge/linux-64::pyrsistent-0.16.0-py36h8c4c3a4_0\n", | |
" pysocks conda-forge/linux-64::pysocks-1.7.1-py36h9f0ad1d_1\n", | |
" pytz conda-forge/noarch::pytz-2020.1-pyh9f0ad1d_0\n", | |
" requests conda-forge/noarch::requests-2.23.0-pyh8c360ce_2\n", | |
" toolz conda-forge/noarch::toolz-0.10.0-py_0\n", | |
" urllib3 conda-forge/noarch::urllib3-1.25.9-py_0\n", | |
" vincent conda-forge/noarch::vincent-0.4.4-py_1\n", | |
"\n", | |
"\n", | |
"\n", | |
"Downloading and Extracting Packages\n", | |
"pysocks-1.7.1 | 27 KB | ##################################### | 100% \n", | |
"toolz-0.10.0 | 46 KB | ##################################### | 100% \n", | |
"chardet-3.0.4 | 188 KB | ##################################### | 100% \n", | |
"folium-0.5.0 | 45 KB | ##################################### | 100% \n", | |
"branca-0.4.1 | 26 KB | ##################################### | 100% \n", | |
"cryptography-2.9.2 | 613 KB | ##################################### | 100% \n", | |
"brotlipy-0.7.0 | 346 KB | ##################################### | 100% \n", | |
"pandas-1.0.3 | 11.1 MB | ##################################### | 100% \n", | |
"altair-4.1.0 | 614 KB | ##################################### | 100% \n", | |
"vincent-0.4.4 | 28 KB | ##################################### | 100% \n", | |
"Preparing transaction: done\n", | |
"Verifying transaction: done\n", | |
"Executing transaction: done\n", | |
"Folium installed and imported!\n" | |
] | |
} | |
], | |
"source": [ | |
"!conda install -c conda-forge folium=0.5.0 --yes\n", | |
"import folium\n", | |
"\n", | |
"print('Folium installed and imported!')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Generating the world map is straigtforward in **Folium**. You simply create a **Folium** *Map* object and then you display it. What is attactive about **Folium** maps is that they are interactive, so you can zoom into any region of interest despite the initial zoom level. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
}, | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfYzBjMTc1ZTkxOTU1NDZiZWFkZTE2ZTk1ZDAxN2IwYTUgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2MwYzE3NWU5MTk1NTQ2YmVhZGUxNmU5NWQwMTdiMGE1IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9jMGMxNzVlOTE5NTU0NmJlYWRlMTZlOTVkMDE3YjBhNSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9jMGMxNzVlOTE5NTU0NmJlYWRlMTZlOTVkMDE3YjBhNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMCwwXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyX2JlZDZjYjI5YjFjZTRlZDk4YWU3YTI3YzRlNTdkOTQ2ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICJtYXhab29tIjogMTgsCiAgIm1pblpvb20iOiAxLAogICJub1dyYXAiOiBmYWxzZSwKICAic3ViZG9tYWlucyI6ICJhYmMiCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2MwYzE3NWU5MTk1NTQ2YmVhZGUxNmU5NWQwMTdiMGE1KTsKICAgICAgICAKPC9zY3JpcHQ+ onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e5db1d0>" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# define the world map\n", | |
"world_map = folium.Map()\n", | |
"\n", | |
"# display world map\n", | |
"world_map" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Go ahead. Try zooming in and out of the rendered map above." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"You can customize this default definition of the world map by specifying the centre of your map and the intial zoom level. \n", | |
"\n", | |
"All locations on a map are defined by their respective *Latitude* and *Longitude* values. So you can create a map and pass in a center of *Latitude* and *Longitude* values of **[0, 0]**. \n", | |
"\n", | |
"For a defined center, you can also define the intial zoom level into that location when the map is rendered. **The higher the zoom level the more the map is zoomed into the center**.\n", | |
"\n", | |
"Let's create a map centered around Canada and play with the zoom level to see how it affects the rendered map." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfNzY4YWExM2UyNWI4NDMwMzhjZmMyMTJjZjk4MGJkYzUgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzc2OGFhMTNlMjViODQzMDM4Y2ZjMjEyY2Y5ODBiZGM1IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF83NjhhYTEzZTI1Yjg0MzAzOGNmYzIxMmNmOTgwYmRjNSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF83NjhhYTEzZTI1Yjg0MzAzOGNmYzIxMmNmOTgwYmRjNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTYuMTMsLTEwNi4zNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnM6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl80YjQ4MTQ3Njk0ODc0NTI4ODlkMTMxNDQzNjI4Zjk3ZSA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICAgICAgICAgIHsKICAiYXR0cmlidXRpb24iOiBudWxsLAogICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAibWF4Wm9vbSI6IDE4LAogICJtaW5ab29tIjogMSwKICAibm9XcmFwIjogZmFsc2UsCiAgInN1YmRvbWFpbnMiOiAiYWJjIgp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83NjhhYTEzZTI1Yjg0MzAzOGNmYzIxMmNmOTgwYmRjNSk7CiAgICAgICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e5e1278>" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# define the world map centered around Canada with a low zoom level\n", | |
"world_map = folium.Map(location=[56.130, -106.35], zoom_start=4)\n", | |
"\n", | |
"# display world map\n", | |
"world_map" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Let's create the map again with a higher zoom level" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfN2M0MTJjNGEyM2Q4NDkyZGI4ZGM4NTliNmNhZjZhYjkgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzdjNDEyYzRhMjNkODQ5MmRiOGRjODU5YjZjYWY2YWI5IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF83YzQxMmM0YTIzZDg0OTJkYjhkYzg1OWI2Y2FmNmFiOSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF83YzQxMmM0YTIzZDg0OTJkYjhkYzg1OWI2Y2FmNmFiOScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTYuMTMsLTEwNi4zNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnM6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl8wN2IxNWUxZDU1NTg0MjY2YTJmMzU2ZGMzM2I4ZmI0YiA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICAgICAgICAgIHsKICAiYXR0cmlidXRpb24iOiBudWxsLAogICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAibWF4Wm9vbSI6IDE4LAogICJtaW5ab29tIjogMSwKICAibm9XcmFwIjogZmFsc2UsCiAgInN1YmRvbWFpbnMiOiAiYWJjIgp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF83YzQxMmM0YTIzZDg0OTJkYjhkYzg1OWI2Y2FmNmFiOSk7CiAgICAgICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e5e1390>" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# define the world map centered around Canada with a higher zoom level\n", | |
"world_map = folium.Map(location=[56.130, -106.35], zoom_start=8)\n", | |
"\n", | |
"# display world map\n", | |
"world_map" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"As you can see, the higher the zoom level the more the map is zoomed into the given center." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"**Question**: Create a map of Mexico with a zoom level of 4." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfZjY3YzJjZTEzZmJkNDQzNjgxOGY0MGU4MjdiZmU3ZmIgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2Y2N2MyY2UxM2ZiZDQ0MzY4MThmNDBlODI3YmZlN2ZiIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9mNjdjMmNlMTNmYmQ0NDM2ODE4ZjQwZTgyN2JmZTdmYiA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9mNjdjMmNlMTNmYmQ0NDM2ODE4ZjQwZTgyN2JmZTdmYicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMjMuNjM0NSwtMTAyLjU1MjhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfZWNmMjRlZjZkMDdlNDUyOGE0YTUwODJhNmEzODQ1MTggPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjY3YzJjZTEzZmJkNDQzNjgxOGY0MGU4MjdiZmU3ZmIpOwogICAgICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e5f8ef0>" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"### type your answer here\n", | |
"world_map = folium.Map(location=[23.6345, -102.5528], zoom_start=4)\n", | |
"\n", | |
"world_map\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"<!-- The correct answer is:\n", | |
"\\\\ # define Mexico's geolocation coordinates\n", | |
"mexico_latitude = 23.6345 \n", | |
"mexico_longitude = -102.5528\n", | |
"-->\n", | |
"\n", | |
"<!--\n", | |
"\\\\ # define the world map centered around Canada with a higher zoom level\n", | |
"mexico_map = folium.Map(location=[mexico_latitude, mexico_longitude], zoom_start=4)\n", | |
"-->\n", | |
"\n", | |
"<!--\n", | |
"\\\\ # display world map\n", | |
"mexico_map\n", | |
"-->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Another cool feature of **Folium** is that you can generate different map styles." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"### A. Stamen Toner Maps\n", | |
"\n", | |
"These are high-contrast B+W (black and white) maps. They are perfect for data mashups and exploring river meanders and coastal zones. " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Let's create a Stamen Toner map of canada with a zoom level of 4." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfNzA3ZmU4MmM5ZDExNDAyZGIzNDBiYjcxNTFmMDhjMjcgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzcwN2ZlODJjOWQxMTQwMmRiMzQwYmI3MTUxZjA4YzI3IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF83MDdmZTgyYzlkMTE0MDJkYjM0MGJiNzE1MWYwOGMyNyA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF83MDdmZTgyYzlkMTE0MDJkYjM0MGJiNzE1MWYwOGMyNycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTYuMTMsLTEwNi4zNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnM6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl9jNmYzNDJkMGU4NmQ0NzNlOTljYjBiMDBkM2JkMjYxNCA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8vc3RhbWVuLXRpbGVzLXtzfS5hLnNzbC5mYXN0bHkubmV0L3RvbmVyL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzA3ZmU4MmM5ZDExNDAyZGIzNDBiYjcxNTFmMDhjMjcpOwogICAgICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e5bbcf8>" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# create a Stamen Toner map of the world centered around Canada\n", | |
"world_map = folium.Map(location=[56.130, -106.35], zoom_start=4, tiles='Stamen Toner')\n", | |
"\n", | |
"# display map\n", | |
"world_map" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Feel free to zoom in and out to see how this style compares to the default one." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"### B. Stamen Terrain Maps\n", | |
"\n", | |
"These are maps that feature hill shading and natural vegetation colors. They showcase advanced labeling and linework generalization of dual-carriageway roads." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Let's create a Stamen Terrain map of Canada with zoom level 4." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfZTZmMmVmODYzMWIxNDkyYmEyNzIwNDkzODE2NWY3MzAgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2U2ZjJlZjg2MzFiMTQ5MmJhMjcyMDQ5MzgxNjVmNzMwIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9lNmYyZWY4NjMxYjE0OTJiYTI3MjA0OTM4MTY1ZjczMCA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9lNmYyZWY4NjMxYjE0OTJiYTI3MjA0OTM4MTY1ZjczMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTYuMTMsLTEwNi4zNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnM6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl84OTQ2ZDdjMzYwM2E0M2RjYWEyMDQ2MWFhZjA4MGMxYyA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8vc3RhbWVuLXRpbGVzLXtzfS5hLnNzbC5mYXN0bHkubmV0L3RlcnJhaW4ve3p9L3t4fS97eX0uanBnJywKICAgICAgICAgICAgICAgIHsKICAiYXR0cmlidXRpb24iOiBudWxsLAogICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAibWF4Wm9vbSI6IDE4LAogICJtaW5ab29tIjogMSwKICAibm9XcmFwIjogZmFsc2UsCiAgInN1YmRvbWFpbnMiOiAiYWJjIgp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNmYyZWY4NjMxYjE0OTJiYTI3MjA0OTM4MTY1ZjczMCk7CiAgICAgICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e58a780>" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# create a Stamen Toner map of the world centered around Canada\n", | |
"world_map = folium.Map(location=[56.130, -106.35], zoom_start=4, tiles='Stamen Terrain')\n", | |
"\n", | |
"# display map\n", | |
"world_map" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Feel free to zoom in and out to see how this style compares to Stamen Toner and the default style." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"### C. Mapbox Bright Maps\n", | |
"\n", | |
"These are maps that quite similar to the default style, except that the borders are not visible with a low zoom level. Furthermore, unlike the default style where country names are displayed in each country's native language, *Mapbox Bright* style displays all country names in English." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Let's create a world map with this style." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfMjdmMWY0NzcyN2VmNDhlZTliMWQ5Mjk0OTk2MGY3ZTUgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzI3ZjFmNDc3MjdlZjQ4ZWU5YjFkOTI5NDk5NjBmN2U1IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF8yN2YxZjQ3NzI3ZWY0OGVlOWIxZDkyOTQ5OTYwZjdlNSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF8yN2YxZjQ3NzI3ZWY0OGVlOWIxZDkyOTQ5OTYwZjdlNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMCwwXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyX2E4YzExMTAwNGIzODQyMzRiMDgwZmQ2OTIzYTU2MGNhID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly97c30udGlsZXMubWFwYm94LmNvbS92My9tYXBib3gud29ybGQtYnJpZ2h0L3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMjdmMWY0NzcyN2VmNDhlZTliMWQ5Mjk0OTk2MGY3ZTUpOwogICAgICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e5a7b00>" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# create a world map with a Mapbox Bright style.\n", | |
"world_map = folium.Map(tiles='Mapbox Bright')\n", | |
"\n", | |
"# display the map\n", | |
"world_map" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Zoom in and notice how the borders start showing as you zoom in, and the displayed country names are in English." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"**Question**: Create a map of Mexico to visualize its hill shading and natural vegetation. Use a zoom level of 6." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfMmUwNTk3NmEzYzYwNDViZjg4NDYzNDMwZWEwNmM2MTMgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzJlMDU5NzZhM2M2MDQ1YmY4ODQ2MzQzMGVhMDZjNjEzIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF8yZTA1OTc2YTNjNjA0NWJmODg0NjM0MzBlYTA2YzYxMyA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF8yZTA1OTc2YTNjNjA0NWJmODg0NjM0MzBlYTA2YzYxMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMjMuNjM0NSwtMTAyLjU1MjhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfOTZiNDU5ZWJmNjAzNDY0MDg5MjU4NzU3YjZkOTdhZjMgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3N0YW1lbi10aWxlcy17c30uYS5zc2wuZmFzdGx5Lm5ldC90ZXJyYWluL3t6fS97eH0ve3l9LmpwZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMmUwNTk3NmEzYzYwNDViZjg4NDYzNDMwZWEwNmM2MTMpOwogICAgICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e58a128>" | |
] | |
}, | |
"execution_count": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"### type your answer here\n", | |
"world_map = folium.Map(location=[23.6345, -102.5528], zoom_start=6, tiles ='Stamen Terrain')\n", | |
"\n", | |
"world_map\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"<!-- The correct answer is:\n", | |
"\\\\ # define Mexico's geolocation coordinates\n", | |
"mexico_latitude = 23.6345 \n", | |
"mexico_longitude = -102.5528\n", | |
"-->\n", | |
"\n", | |
"<!--\n", | |
"\\\\ # define the world map centered around Canada with a higher zoom level\n", | |
"mexico_map = folium.Map(location=[mexico_latitude, mexico_longitude], zoom_start=6, tiles='Stamen Terrain')\n", | |
"-->\n", | |
"\n", | |
"<!--\n", | |
"\\\\ # display world map\n", | |
"mexico_map\n", | |
"-->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"# Maps with Markers <a id=\"6\"></a>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Let's download and import the data on police department incidents using *pandas* `read_csv()` method." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Download the dataset and read it into a *pandas* dataframe:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Dataset downloaded and read into a pandas dataframe!\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"df_incidents = pd.read_csv('https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DV0101EN/labs/Data_Files/Police_Department_Incidents_-_Previous_Year__2016_.csv')\n", | |
"\n", | |
"print('Dataset downloaded and read into a pandas dataframe!')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Let's take a look at the first five items in our dataset." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>IncidntNum</th>\n", | |
" <th>Category</th>\n", | |
" <th>Descript</th>\n", | |
" <th>DayOfWeek</th>\n", | |
" <th>Date</th>\n", | |
" <th>Time</th>\n", | |
" <th>PdDistrict</th>\n", | |
" <th>Resolution</th>\n", | |
" <th>Address</th>\n", | |
" <th>X</th>\n", | |
" <th>Y</th>\n", | |
" <th>Location</th>\n", | |
" <th>PdId</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>120058272</td>\n", | |
" <td>WEAPON LAWS</td>\n", | |
" <td>POSS OF PROHIBITED WEAPON</td>\n", | |
" <td>Friday</td>\n", | |
" <td>01/29/2016 12:00:00 AM</td>\n", | |
" <td>11:00</td>\n", | |
" <td>SOUTHERN</td>\n", | |
" <td>ARREST, BOOKED</td>\n", | |
" <td>800 Block of BRYANT ST</td>\n", | |
" <td>-122.403405</td>\n", | |
" <td>37.775421</td>\n", | |
" <td>(37.775420706711, -122.403404791479)</td>\n", | |
" <td>12005827212120</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>120058272</td>\n", | |
" <td>WEAPON LAWS</td>\n", | |
" <td>FIREARM, LOADED, IN VEHICLE, POSSESSION OR USE</td>\n", | |
" <td>Friday</td>\n", | |
" <td>01/29/2016 12:00:00 AM</td>\n", | |
" <td>11:00</td>\n", | |
" <td>SOUTHERN</td>\n", | |
" <td>ARREST, BOOKED</td>\n", | |
" <td>800 Block of BRYANT ST</td>\n", | |
" <td>-122.403405</td>\n", | |
" <td>37.775421</td>\n", | |
" <td>(37.775420706711, -122.403404791479)</td>\n", | |
" <td>12005827212168</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>141059263</td>\n", | |
" <td>WARRANTS</td>\n", | |
" <td>WARRANT ARREST</td>\n", | |
" <td>Monday</td>\n", | |
" <td>04/25/2016 12:00:00 AM</td>\n", | |
" <td>14:59</td>\n", | |
" <td>BAYVIEW</td>\n", | |
" <td>ARREST, BOOKED</td>\n", | |
" <td>KEITH ST / SHAFTER AV</td>\n", | |
" <td>-122.388856</td>\n", | |
" <td>37.729981</td>\n", | |
" <td>(37.7299809672996, -122.388856204292)</td>\n", | |
" <td>14105926363010</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>160013662</td>\n", | |
" <td>NON-CRIMINAL</td>\n", | |
" <td>LOST PROPERTY</td>\n", | |
" <td>Tuesday</td>\n", | |
" <td>01/05/2016 12:00:00 AM</td>\n", | |
" <td>23:50</td>\n", | |
" <td>TENDERLOIN</td>\n", | |
" <td>NONE</td>\n", | |
" <td>JONES ST / OFARRELL ST</td>\n", | |
" <td>-122.412971</td>\n", | |
" <td>37.785788</td>\n", | |
" <td>(37.7857883766888, -122.412970537591)</td>\n", | |
" <td>16001366271000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>160002740</td>\n", | |
" <td>NON-CRIMINAL</td>\n", | |
" <td>LOST PROPERTY</td>\n", | |
" <td>Friday</td>\n", | |
" <td>01/01/2016 12:00:00 AM</td>\n", | |
" <td>00:30</td>\n", | |
" <td>MISSION</td>\n", | |
" <td>NONE</td>\n", | |
" <td>16TH ST / MISSION ST</td>\n", | |
" <td>-122.419672</td>\n", | |
" <td>37.765050</td>\n", | |
" <td>(37.7650501214668, -122.419671780296)</td>\n", | |
" <td>16000274071000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" IncidntNum Category Descript \\\n", | |
"0 120058272 WEAPON LAWS POSS OF PROHIBITED WEAPON \n", | |
"1 120058272 WEAPON LAWS FIREARM, LOADED, IN VEHICLE, POSSESSION OR USE \n", | |
"2 141059263 WARRANTS WARRANT ARREST \n", | |
"3 160013662 NON-CRIMINAL LOST PROPERTY \n", | |
"4 160002740 NON-CRIMINAL LOST PROPERTY \n", | |
"\n", | |
" DayOfWeek Date Time PdDistrict Resolution \\\n", | |
"0 Friday 01/29/2016 12:00:00 AM 11:00 SOUTHERN ARREST, BOOKED \n", | |
"1 Friday 01/29/2016 12:00:00 AM 11:00 SOUTHERN ARREST, BOOKED \n", | |
"2 Monday 04/25/2016 12:00:00 AM 14:59 BAYVIEW ARREST, BOOKED \n", | |
"3 Tuesday 01/05/2016 12:00:00 AM 23:50 TENDERLOIN NONE \n", | |
"4 Friday 01/01/2016 12:00:00 AM 00:30 MISSION NONE \n", | |
"\n", | |
" Address X Y \\\n", | |
"0 800 Block of BRYANT ST -122.403405 37.775421 \n", | |
"1 800 Block of BRYANT ST -122.403405 37.775421 \n", | |
"2 KEITH ST / SHAFTER AV -122.388856 37.729981 \n", | |
"3 JONES ST / OFARRELL ST -122.412971 37.785788 \n", | |
"4 16TH ST / MISSION ST -122.419672 37.765050 \n", | |
"\n", | |
" Location PdId \n", | |
"0 (37.775420706711, -122.403404791479) 12005827212120 \n", | |
"1 (37.775420706711, -122.403404791479) 12005827212168 \n", | |
"2 (37.7299809672996, -122.388856204292) 14105926363010 \n", | |
"3 (37.7857883766888, -122.412970537591) 16001366271000 \n", | |
"4 (37.7650501214668, -122.419671780296) 16000274071000 " | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df_incidents.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"So each row consists of 13 features:\n", | |
"> 1. **IncidntNum**: Incident Number\n", | |
"> 2. **Category**: Category of crime or incident\n", | |
"> 3. **Descript**: Description of the crime or incident\n", | |
"> 4. **DayOfWeek**: The day of week on which the incident occurred\n", | |
"> 5. **Date**: The Date on which the incident occurred\n", | |
"> 6. **Time**: The time of day on which the incident occurred\n", | |
"> 7. **PdDistrict**: The police department district\n", | |
"> 8. **Resolution**: The resolution of the crime in terms whether the perpetrator was arrested or not\n", | |
"> 9. **Address**: The closest address to where the incident took place\n", | |
"> 10. **X**: The longitude value of the crime location \n", | |
"> 11. **Y**: The latitude value of the crime location\n", | |
"> 12. **Location**: A tuple of the latitude and the longitude values\n", | |
"> 13. **PdId**: The police department ID" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Let's find out how many entries there are in our dataset." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(150500, 13)" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df_incidents.shape" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"So the dataframe consists of 150,500 crimes, which took place in the year 2016. In order to reduce computational cost, let's just work with the first 100 incidents in this dataset." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# get the first 100 crimes in the df_incidents dataframe\n", | |
"limit = 100\n", | |
"df_incidents = df_incidents.iloc[0:limit, :]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Let's confirm that our dataframe now consists only of 100 crimes." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(100, 13)" | |
] | |
}, | |
"execution_count": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df_incidents.shape" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Now that we reduced the data a little bit, let's visualize where these crimes took place in the city of San Francisco. We will use the default style and we will initialize the zoom level to 12. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# San Francisco latitude and longitude values\n", | |
"latitude = 37.77\n", | |
"longitude = -122.42" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMzcuNzcsLTEyMi40Ml0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfNzYwNzlhNzkzNmJiNDQyOTgxNTcxYTY1ZDM1NjMyOTEgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e06e9e8>" | |
] | |
}, | |
"execution_count": 21, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# create map and display it\n", | |
"sanfran_map = folium.Map(location=[latitude, longitude], zoom_start=12)\n", | |
"\n", | |
"# display the map of San Francisco\n", | |
"sanfran_map" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Now let's superimpose the locations of the crimes onto the map. The way to do that in **Folium** is to create a *feature group* with its own features and style and then add it to the sanfran_map." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMzcuNzcsLTEyMi40Ml0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfNzYwNzlhNzkzNmJiNDQyOTgxNTcxYTY1ZDM1NjMyOTEgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTlhZjdhMzE4ODBhNGE3Mzk0ZDRkMDkwM2NiMmM3MDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0MjA3MDY3MTEsLTEyMi40MDM0MDQ3OTE0Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTkxMTdiMWQ0YzUzNGNjODkwZTU1MjUzOWVmMjZiMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0MjA3MDY3MTEsLTEyMi40MDM0MDQ3OTE0Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzUwYzk2M2NmMjU0NGViMzgzYzEzOWI2YTVkMjFiMDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjk5ODA5NjcyOTk1OTYsLTEyMi4zODg4NTYyMDQyOTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZTA1ZGY1NTY0MzQxYTk4MmYzNGQ4NWE5ZDhlNmZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1Nzg4Mzc2Njg4NzksLTEyMi40MTI5NzA1Mzc1OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlZmUxM2RhMmM4NzQwMzFhYjhlZDczMTMyZTcyNTUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY1MDUwMTIxNDY2OCwtMTIyLjQxOTY3MTc4MDI5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTYzZWEwZGQ3ZmQyNDkyYWJlMmE4YzYyNDE3YzU1ZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMTg1NTU4MjksLTEyMi40MjYwNzcxNzczNzQ5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNhYThjZmMxNmU5NGU5YWE4ZjJjNzlmZWQ5NTdiZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA4Nzg5MzYwMjE0LC0xMjIuNDA1NzIxNDU0NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MDZmYzNlMWZhYjg0NzkxYTcxYzg3YTcxYzc3ZWVjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4Mzk4MDU1OTI2MzQsLTEyMi40MTE3NzgyOTU5OTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4ZGQyOGU4MjZlMjQ1OTY5ZmE1NWQ4MzZlZDI0ZDQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1Nzg3NjIxODI5Mjk1LC0xMjIuMzkzMzU3MjQxNDUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hN2M4OGFjMmM5Mjc0MjlkYTE1ZjMwOTM0YjAwYTQ3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMDk2Njk2MTU0OTksLTEyMi4zODcxODE2MzU5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA3NTVhN2QxNDI5NDQ0MTZhZmY5NzkwMmYzM2E4MjE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NDc4MTU3ODY5NTA1LC0xMjIuNDc3Mzc2NTI0MDAyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxZDE5NzZmN2VkZjRlZDE5ZjIxNzRjZmI0ODg3NGI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQ1NzM4OTQyOTY1NDk1LC0xMjIuNDc3OTYwMzI3Mjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNWI0MTY5MjBlMzM0NmI0YWMzNjcwZTQzYmM4ZDVkNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNTY5NzAyNzU0ODIwNiwtMTIyLjM3Njc1NzY1NTUzMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTI3NWMyZDhiOGM0YWRiYWVlMTYzODg0NDRlYzY0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTI3MDUxOTk1OTIsLTEyMi40MzIzMjU4NzEwMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiNGI4NGE0YWI0NjQ3NmFiMzliZTU2ZDRkMjdiZTY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzkxNjQyOTgyMzg0LC0xMjIuNDAwOTA4Njk4ODg5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczNzc4NjdhNjczZjQ5MjE4NTRjZmE3MDk3ZDZlZDU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNzA2OTMwMTU0NSwtMTIyLjQwODU5NTExMDg2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzE0NDE0ODg4Zjc4NGViOWE4NTZjN2NkY2YxNDc0YjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTcyODk1OTA0NTc3OTUsLTEyMi40MDY4NzA0MDIwODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyNzA4MjM0ZjJjNjRhYjJhNTU0YWFkNzFhNWRlODVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQ4OTA2MzA1MTgyOSwtMTIyLjQyMDM1NDc4MDg2MDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Mzg4ZTA3ZGU4MGI0ZWRjOTE5NzgwZTU3ZTBmNWRiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxNTc2NTQyNjk5NSwtMTIyLjQzOTkwOTc2Njc3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOThkYzM0OTMwOTJjNDI3NWI0OGM2NjRiNjI0ZjQ4N2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM1Njk5Mzg2OTE4LC0xMjIuNDA4NDIxMTE2OTIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZmMwYjE3MjQ3YmI0M2E0YWE3MGE0OWFlMjAzN2NlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3MzYxODYyNzY0NTYwNCwtMTIyLjQyMjMxNTY3MDc0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDZhNzg3MTFmNmQwNDg2NGFiMWY2ODc0OWYwNWIxYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTI4NDEyODQwNDQ3MDUsLTEyMi40MjQ1MTk4MzUwMDkwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjZlMDAxZmZiODhjNDA4MDkxNmRkNGE3NGMwMzNkNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTQwOTg2ODgyMDY3OTUsLTEyMi40MTQyMzM4NDkwMzc5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjgxNzE2Y2M3NDY1NDQzZDlmYjYzNmU3MDliNDM4MjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTQwOTg2ODgyMDY3OTUsLTEyMi40MTQyMzM4NDkwMzc5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTY4Y2ZlZjA4NzE2NDVhZWEwMDI5YjM4NGQzODZmOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzE0OTM5OTY5NDE2LC0xMjIuNTA3NzUwMTMxMDA0MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViODlkNjgwYzc0YzRiNTM4NzMxNjRiNTY1NGQ3NWY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzE4MzAyMjA0NzY2MDA1LC0xMjIuNDc0NDQ0NjM5NTk0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5YWE0Yjk5NjMxYjRiNGZiOTYwOTQ3MzI2ZmZjMTYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NTc1MjMxNzYxNSwtMTIyLjQyNzU2MjU5Njk4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODllMDhjN2IyY2JjNGFkM2I5M2M2YjY1ZWI0NTczNTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc0Mzc4MzA5MTEyLC0xMjIuNDE5MjAzMDA0MjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmEwZWI3NDhmZWI0OTllYmNiMGM5N2M5ZDE3YTUxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0OTM2ODgyODQ1MzIsLTEyMi40MTI2OTAxNDIzMDgwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDFmYzdlNWY2YzQ2NGMxODlkZWVkNjUzNGNjMjc0MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MDkyMDEwNDYyMzc5LC0xMjIuNDM0NjA5MjgwMzUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjRlMTIzNzY2MmU0YWZkYjU1NzNlMjg0YjIxNjUxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzkyMDkzNzU1MzI5NSwtMTIyLjQxMDg4MjgyNTU1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODI0YzNmODllNDFlNDJiMjkyZGUyYTQwMzcwNThlNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy44MDA0NTY2NDcxMDM4OSwtMTIyLjQwMTQzMjc1NDcyMjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NjQzMGMyMTFiMWU0ZmQ3OTE3YTc4MDAyOTI5NDU1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0MzU1NTA1NDIyNjUsLTEyMi40MjExMjgwMjk1MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwZjk5MGRlMjJlZjQ1M2NhNmIyNmRkYzAxNmYxNWQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg2NTY0NzYwNzY4NSwtMTIyLjQwNzI0NDA4NzAzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTJhNjdhZWUyZWE4NDAwODk0YWU1NzUwZjNhYmQ3NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1YTY5ZTAyOGRlOTQyMTE5MmY1NTRlM2M1Yzk4MzQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDRiNGMzMTEyZDk0N2QxYTI1OWNlZjVmMWM2MmIxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NDE5Mjc1MDg5MzIwNSwtMTIyLjQ0NDY4NTQ4MjI3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODMwY2ExYzlkZTJjNGRiNzg0NTZkZmVkNTVlNWIzOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0NjkyODIwMDQxLC0xMjIuNDE1NzU3MDM5MTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2FjZmUxNWYyNjk0OTBhYTg2ODk1ZDBjYjZhNTZmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyODUyODA2Mjc0NjUsLTEyMi40NzU2NDc0NjA3ODU5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWI5ZGEyNDRiNzczNGY2ZTgxNTI1NDBiMWI0MzAyYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDI4NTE3Mzc0NDQ4OTQsLTEyMi40MjA5Njc0NDA1NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlN2I4ODM5ZjQyYzQxNzc5OGUyNzlhOWRiNDYyNjcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgyMTE5ODQ4ODkzMSwtMTIyLjQxNTY2OTY2MTQ0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGU0MzE2OTFhNzljNDViZTgyMTRjMjYyN2I2NzAxMmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzkxNjc0MjE4OTYzLC0xMjIuNDA2MzQ2NDI1NjMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzBkNjc1NGQ1MWU0ZmQxODU3OWMzZmZjMjJjYWFlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTcxODQzOTUyODIsLTEyMi40MDk1Mjk5MTMyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3ZmJjMWNkMDRkMDQwMjNiZDY1MDRjMTA4M2RiZTdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0N2EyOGY0ZDExZTRkMzQ4NjAyNmM0NzZlYjg0ZjlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY3NTI0MzA4NzgzLC0xMjIuNDEwNzM4MDk3MzE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYzVlNjEyZTFmOWQ0NDBmYTZhZThmYTY3NjBmNzEzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NzUyNDMwODc4MywtMTIyLjQxMDczODA5NzMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGNmMjZkZGRhMTM2NDNkYzlhYTY2ZmJjZTQwM2Y2NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTMxMDgzNDMzMjY0LC0xMjIuNDQ0MzE0MDI1MTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTFmNjUwZWZmZjY0YzNlOGI0MTdkMzRmYzdlMDdhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxMzEwODM0MzMyNjQsLTEyMi40NDQzMTQwMjUxODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQxYzE1ODFiYTUzZjRiZjFhNDg0MTA3Yzg1YjM4NGZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGFiNDZhZDI4YWM2NDZiZDlkYmE3MmZlODdkNGZlY2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjYwMTYwMTE0MTAzLC0xMjIuNDAzNjQ0NjIwNDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNGRiNDlhMDA3OWI0Y2ZkOGJjODg4ZDg5MmEwNDQxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NjIzMTA0MDQ3NTgsLTEyMi40MTQ3MTQyOTU1Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjRiOTQxN2VmODgwNGNkNGExMWVhMjI5NDM3NTM3ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzYyMzEwNDA0NzU4LC0xMjIuNDE0NzE0Mjk1NTc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZmE0ZDdmZDZhZDQxYTVhMjE2ZjM3YjdhMzk0NjRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3NTExODg5NTY5NSwtMTIyLjQxODA0NTQ1Mjc2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzVjNTM1N2IxMDdkNDAxY2FhOWZiMWFjZDAxYWJiOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIwMjM4NDc4OTc1LC0xMjIuNDAxMTYxNTU1NjAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNTQ0NmZiYmNmNWQ0MzhlOTg2MmM0OTc2MzA3OWFjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyNzAwNTMxOTYyOTk5NSwtMTIyLjQwMzQwODY2OTE5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI3OGIyM2U5MWRkNDJmZjgwODI1YTRhMTcwNjNmYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM4MzQ0Mzc0MTQxLC0xMjIuNDEyOTMwNTIyMDU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kODJlYjY3ZjU4MDg0M2NlODM4MjE3ZmUxZGZiMDUwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1MzAxODY1Mzc0NDYwNCwtMTIyLjQxODU4NzE3MjIxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTk3MGI4OWFjMDE5NDNiYzkxMTkyMTY2NTk4NzY1YjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQwNDE4Mzg1MDQxLC0xMjIuNDE0MzcwNjI3NDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjZmZWI4NTkzZWE0NWYyOGY2NDcxNTI2MjhlNjEyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5MDUzODk5MzcyNSwtMTIyLjQwMzkxNTY4MTU3MTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGQ1YmJiZTcyMTM0MjMwOTg1NjI4MDFkMGYwNjQwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MzA5OTgyNDQ1OTIxLC0xMjIuNDE5MTgzMDk2MzYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ODhkOGIwYmIyNTI0NTlmYmMzODYwODJmNWU3YTI1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0MDczNjA1NDgzNTc5LC0xMjIuMzg4NzUzMDQ2OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMjMxYzkzMjY4OGM0ZjFmOGFmZTJhMGQ5MTc2Yzc1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NDk5MTI5NDQzNjYsLTEyMi40Mzc3OTk3MDM0NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0ZmNhZGEwMWM1NDQ2ZThiN2Q1OGM1OGIwNzE1YjFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3MDkwMjc0MzY2OSwtMTIyLjQyMTMzMjY4NDYzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWI5MjExNmVjMGZjNDQ4ZDk0MzcxMWYxMDVlNTllNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzcwOTAyNzQzNjY5LC0xMjIuNDIxMzMyNjg0NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZWVkMjZiMDk4YmM0ZjhhYWU5MmM4ZGVkODBmNTU4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjI0NTgyMjM5MTcsLTEyMi40NDY2MTI5Nzg4MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ODA3MjJiOTAyZjRhMWNhNDFjY2E2NDhjMzk3MTA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwMDM3OTk5NTEyNzk1LC0xMjIuNDA0NTk0MTQwNjM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmQ1ZmYyNDMwMmY0ZTE5YTYwMTFiYmNmYmIyYjNlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5NTMzMzgyNjc0MzYsLTEyMi4zOTczNzM3NDAwNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkMWFiMWY1ZGE1NjQ4NjA5YTUwMDE3MjIyNGE1ODhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3NTE1ODc0MTYyMjk1LC0xMjIuNDA3NDM0OTg5NTIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjkyYzg0MmI5NjY0OTBmOGVmYWM5ZDk5NjM0ZDhjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3ODUyMzM3NzYwMzIsLTEyMi40MDM0NjQwODAwMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyNzFlYjllYjEyMTQyNzk5OTA3NmRhNDg3MWU4YzBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTI4ZjQzN2NlZmZlNDZkMGJhNDE0ODU3Y2VmODEzZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzMyOTE4MDY5MDI5OTYsLTEyMi40MzY2MTQxODEzMzEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTg4YTQwMzAzM2MzNDYyYzk5ZjBlMGExZGU5OTY0NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA1Mjc1Nzg1MDksLTEyMi4zOTY4NDkwMTUxNzIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWExMzRiMTgzZGY0NDI0YmJhNGE3MTkzNzQxOGVlMzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA1Mjc1Nzg1MDksLTEyMi4zOTY4NDkwMTUxNzIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzA1MmIyZDA2NzlhNDBmNTkwMzgzZDc0NWIwMmU0NTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjg0MTgwNzA2NjAyMDQsLTEyMi40NTAwMDA3OTA0NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1NTFlNGU2MmM0MzQ4MTliZGI2YmFjZGMxYTFmZjQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI5MjExNDY0NzM1OSwtMTIyLjQwMDgzNDI4MzAzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTdmZTQ2YzYyNzI3NGRjNDg5NjE2ODNiODQ3ZGI2ZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMDY1MzI0MzkyMDUsLTEyMi4zOTk4MDIxNDU3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4OWRkNzAzODVjNzQ5MmJiNGZiZTlmMDBhOWNjOWU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1YWUxYzc2Yzc1YzQ5ODI4YmNlNjZkODZkYTZjYjRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlMzllNTc1NDcyZDQ5ZGM4YTdjNjQyZmQ2N2QyYTZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhODVlMzU2YzJmMDRjZDliOWUzNjI3YjhhN2Y3MWEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MzIzNTQ0OTkwNCwtMTIyLjQxMTg1NzAzMjU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MWU2Mjk3MzNmMDA0NzE2OTUyZmRhNTg5ZGExMjViMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1NTk5NzczMzk4NTYsLTEyMi40MDk0MzU2MTcxMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1MWU2Mzg0MDQ1ZTRhMGY4YTRiMjgwYmYwMjQ2ZDE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3MDc5ODE0NDQ0MywtMTIyLjQyNTg4MzM1ODE0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg5OGMxNGIwZWQ4NDgwZmJmMWYyYmFkZGFiZWE1MmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzYwMzc0NDY2ODYyMDQsLTEyMi40MTUxMjY1NDMwMDEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmY1N2E3N2U1ODgwNDIyOWFhYjczYTU4YmE0Zjg0YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTI3Njc4ODQ4MjEsLTEyMi40MzE5MjgwMTEwODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlNGIyMDQyMjQwOTQxODY4MDYzM2ZhMGExMmRhODQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg5NTcxMDI1NTg2MywtMTIyLjQwMjE2MzcxMzYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDU5YTNkNmE3YTQ4NDM2ZDk5Mjc3OGEwZGEzOWIyYjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzA3NDI5MTY5NTU5LC0xMjIuNDI5MzA2NzI4Mzc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODc4NjYzNGY5MmU0YWEyOTlhMDI5NWFmZmNjMTUxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MzgzNjU1NjUzNDc5NCwtMTIyLjQxMzc5MDk3Mjc4MDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYTBhODA4NDBkY2M0NGQyYmUxMzNkNWFhMWM4MTdkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDc0MjkxNjk1NTksLTEyMi40MjkzMDY3MjgzNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiYWUwNWRhMTZiMjQ5NTZiMWZlN2MzOTgyNmE1YTQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM3MzYyMzYwNTIxMjk2LC0xMjIuNDIyMDY3MTg0OTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MTVmOGRiYzRmOTY0MDQ4ODZlOWFkYTRhMzFiNzk3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNzM2MjM2MDUyMTI5NiwtMTIyLjQyMjA2NzE4NDkzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDMwZTI3NWEwNjQyNDIyMjhmZmUxNDljZjQxYjE1NDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODU5OTg4MzIzNzk3OTYsLTEyMi40MTE3NDczNzE5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxYzZkYTBjOTY0ZDQ1Mzc5ZTQ3MTQ4MGVlMjc0ODFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYzMzc1ODA1ODA1OSwtMTIyLjQyMDQzNDcyNDU1Mjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hODY1MzNhOTc4NDY0NWM5YjhiYjNkYjdkM2RlMzk0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NTAyMjY2MjI3ODYsLTEyMi40MTE5ODc2NDM1OTUwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTU0ZDFiZTEyYTVkNGMzNmI0ZTAyYzAxZjJiY2FmOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ2MjA2NDkxMDY0OTUsLTEyMi41MDAzODA0Mjc5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlMGIxNGI5MDkyNDRlMDM4N2JiYjg3OTE3ZTI0M2Q5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1MTkxODI2NzIxNywtMTIyLjQ2NjU1ODc4MDY4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Y0YTNjNDI1ZjkwNGVjYWFhODUyZjc1MWIyMWE2NWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkwODQxNzI5MDI4LC0xMjIuNDg2OTI1OTYwMTE0MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzN2QyNWYyMDM2YzQyOGRhNzViNDJiOTdmZmQzYTJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY4NTM2MDEyMzU4MywtMTIyLjQxNTYxNjMzODMxOTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZjQwYjJiODRkNTU0NGRiOWMxMmFlODQzMjIzODFmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQyOTc3MTQwNzQsLTEyMi40NDk3NTE2NTI1NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzZjFjODJhMWVlNDQ0OWY4YzBjM2E5ZjMxZGExMjI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NDI5NzcxNDA3NCwtMTIyLjQ0OTc1MTY1MjU2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2M3ZmY1OGFhYTQ4NGY0Mzg5MDIyNDg1NGJhYTQ4NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzUyNjgxNDY5MDgzOTYsLTEyMi40NzI3MTU3NTk2MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGJhYTUxOTA3NWQ0NDI5OGFkMjc0YmQ0MzkzMDY0MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0MjA3MDY3MTEsLTEyMi40MDM0MDQ3OTE0Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlNTZkYmE2YjkzNjQxNjJiMGYxM2VlNDg3MmYyZThhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzU5ODhjMzk5NTM0YTcwOTczNGM0MmIwNGE1MTg4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTk4MDk2NzI5OTU5NiwtMTIyLjM4ODg1NjIwNDI5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkODM0NTg4ZTJjMjQ0YmNhOTQ4NzlhYzNlYTBiOGNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1Nzg4Mzc2Njg4NzksLTEyMi40MTI5NzA1Mzc1OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODVkODNmZTBkOTQ0NDE2ODc2YzNiZmRmYWZiOGY4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTA1MDEyMTQ2NjgsLTEyMi40MTk2NzE3ODAyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYjAwZjdmZTAwM2E0N2I0YTkzZWQ5YjMzMzhlZjA3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODAxODU1NTgyOSwtMTIyLjQyNjA3NzE3NzM3NDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWIwMGZjZGE0MDRiNDQ3NWFhY2EzMmI2YWQyZWE0MzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA4Nzg5MzYwMjE0LC0xMjIuNDA1NzIxNDU0NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjgzMzc5YzY0ODdkNDk5ZWFiNDk2NDg3NWVmM2RjNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM5ODA1NTkyNjM0LC0xMjIuNDExNzc4Mjk1OTkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGJkZWI4Nzg3MmMwNGFiMDhmYWRjOWFiMDRhNDdiOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU3ODc2MjE4MjkyOTUsLTEyMi4zOTMzNTcyNDE0NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOWZjYTQwNTg3NzA0MDExYmYxNzQwYmU0NzA1ZTA1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMDk2Njk2MTU0OTksLTEyMi4zODcxODE2MzU5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjdjMTZhN2JkMTI0M2M0OGRjOWYyZjk4ZDBhMzcwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQ3ODE1Nzg2OTUwNSwtMTIyLjQ3NzM3NjUyNDAwMjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNjY2M3MzI3YjU4NGJlYmJmM2I5ZmVmMmFlMDYwOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDU3Mzg5NDI5NjU0OTUsLTEyMi40Nzc5NjAzMjcyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOTVmYTFjZWU0Y2Q0M2ZmYTdlZTNhMDEwOGNmZmRhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNTY5NzAyNzU0ODIwNiwtMTIyLjM3Njc1NzY1NTUzMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGJlNDljZjBmNDA2NGE2YTg4M2I3YTRhOTBjMDgzOTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyNzA1MTk5NTkyLC0xMjIuNDMyMzI1ODcxMDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDMzN2I3NTYyODhiNGNmYThjNjIxN2IwZTVlZGI4MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTE2NDI5ODIzODQsLTEyMi40MDA5MDg2OTg4ODk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1MWIyYjRiMzdjNTQ3ODBhNWY3N2Y1NWJlNjZmNDFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNzA2OTMwMTU0NSwtMTIyLjQwODU5NTExMDg2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA4NTc2NzVjYzNiYTQzNjE5ZjBhODE4ZTI4ODBiZTM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU3Mjg5NTkwNDU3Nzk1LC0xMjIuNDA2ODcwNDAyMDgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFmYjY0ZTNmODQ4NGNjMDkxNTJjNjFmMjgxZjRmNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDg5MDYzMDUxODI5LC0xMjIuNDIwMzU0NzgwODYwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NmYxNjhjYWFkY2U0MDhmOWJhOGNiNGVlMmI3YWQzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxNTc2NTQyNjk5NSwtMTIyLjQzOTkwOTc2Njc3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjYWY5ZTRhNWFmNjQ0NzY4NTBiMzVhOWI1MzVhN2RjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNTY5OTM4NjkxOCwtMTIyLjQwODQyMTExNjkyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiNjE1NGE5MDA4MTRiZjdhMzE0NDgxNWJkY2ViMzE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczNjE4NjI3NjQ1NjA0LC0xMjIuNDIyMzE1NjcwNzQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE2NzRiMzJiZGFhNGRjZWJlM2IwNmQ3NGJhZTY0OTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTI4NDEyODQwNDQ3MDUsLTEyMi40MjQ1MTk4MzUwMDkwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwZDM0OWE5ZjAzYTRhOWY4MzFiZWY2ZmVjZmUxY2YyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU0MDk4Njg4MjA2Nzk1LC0xMjIuNDE0MjMzODQ5MDM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGEyMzRmNTgxY2Y0YjNmOTc4ZTA5ZWIzZGJkN2Y4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1NDA5ODY4ODIwNjc5NSwtMTIyLjQxNDIzMzg0OTAzNzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWI3Y2Q5NDdhOWJkNGE4YmFhMDE3YjZiZDQxMjJmNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzE0OTM5OTY5NDE2LC0xMjIuNTA3NzUwMTMxMDA0MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMDc0ODJiZDkzODk0NTRkYjkxNDNkYjcxOTM4YmZiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxODMwMjIwNDc2NjAwNSwtMTIyLjQ3NDQ0NDYzOTU5NDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDVlZmU0ZGM3ZWM1NDY5NGE4MTYyYzEwZGU4ZDI5ZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ1NzUyMzE3NjE1LC0xMjIuNDI3NTYyNTk2OTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI3ZTg4NjZmNTc1NGNmZDkxN2UxZGJjZTgwOWEzOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc0Mzc4MzA5MTEyLC0xMjIuNDE5MjAzMDA0MjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzNiNDIxOGM4OTVjNDc4OTk4MGY1M2Y0YjcwMDYxNTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkzNjg4Mjg0NTMyLC0xMjIuNDEyNjkwMTQyMzA4MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYzAzYjUxNGQ5ZjI0ZGU2ODI0ODY3OWM5NWQ2NWJkMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcwOTIwMTA0NjIzNzksLTEyMi40MzQ2MDkyODAzNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTdkNmYxMWU0ZTE0ODEwYjY1NGQ4YzgwNjIzODUxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzkyMDkzNzU1MzI5NSwtMTIyLjQxMDg4MjgyNTU1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlZGUyZGNmY2RkODQ1OGU5OGIyZDkyYmRkMjQ3MzFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuODAwNDU2NjQ3MTAzODksLTEyMi40MDE0MzI3NTQ3MjIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY1YjczMjhiMzY5OTQ5NGY4NDBjZjRmNDNkY2U4N2I5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQzNTU1MDU0MjI2NSwtMTIyLjQyMTEyODAyOTUwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhZmRhMjFiNTA4ZDQ4YWRiY2Q5NzhiMDNlNWFmZDhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg2NTY0NzYwNzY4NSwtMTIyLjQwNzI0NDA4NzAzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0NDBiNmExYjRkYTQxMWU5YzE0ZDMxMzNmMDdjZTMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjk2MzM4NmUyZmVkNDE2NzkzYjJmZDQ2ZTA0OTlkY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNGQ1ZjE3MmFmZmM0ZDEwYjM1YmIwMjgyZTZjNTA4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NDE5Mjc1MDg5MzIwNSwtMTIyLjQ0NDY4NTQ4MjI3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2YmJhZTRkOWQwZTQwZGFiMTdlY2JjMmRiYzRlYjg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDY5MjgyMDA0MSwtMTIyLjQxNTc1NzAzOTE5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhODliNjAyODI3ZjRhMDBiYWJkNjczYjk4Y2RhYjBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NTI4MDYyNzQ2NSwtMTIyLjQ3NTY0NzQ2MDc4NTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjM1ZjU3OWU3NzI2NDE5YmI4NzRkN2QxOWRhOTc5ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDI4NTE3Mzc0NDQ4OTQsLTEyMi40MjA5Njc0NDA1NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NGMxMjkyNjY5OTU0MzQ3ODU1ZWQwOTJkOGIyNjJkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjExOTg0ODg5MzEsLTEyMi40MTU2Njk2NjE0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDJiNDgyZGQ5YWM0YTUyYTM0ZDljMzk5MjI5NGY1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3OTE2NzQyMTg5NjMsLTEyMi40MDYzNDY0MjU2MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNWMwMzQyZmU4ODE0YzE2OWRlNGEzZThiODQzYzE0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTcxODQzOTUyODIsLTEyMi40MDk1Mjk5MTMyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOWQwNmM5NDg1MWY0ZmFjODBjZDg0YTg2YThkZjJlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQyMDcwNjcxMSwtMTIyLjQwMzQwNDc5MTQ3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRjMTEzZDcwN2IwNDc0ODgwNWI1NWRiMTk3MWM3YzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Njc1MjQzMDg3ODMsLTEyMi40MTA3MzgwOTczMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjY3MGM0MDgxNTE0ZGRmYjYwNWQzNDAzYzEwMjM0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NzUyNDMwODc4MywtMTIyLjQxMDczODA5NzMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JhYTYxNzBhZGU1ODQyNmZiMTcxNTg4MTE1MjViZmUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBhYzNkNTIyNzJhOTQ2ZGM5ZTAwN2NhMzBmY2U5NzI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlY2Q4ZjE0N2I0NzQ2MDJiMjQ5ZmIzMmZiYjYxMjk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5MDgwNWMyNWY5YzRkMzI5MDhkNDZmNjhmNDY1ZTFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEyNmYzMzk4NmZlYTRkODdhOWQwODBiYjRjOGI0ZDU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc2MjMxMDQwNDc1OCwtMTIyLjQxNDcxNDI5NTU3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzViZmI1Yjk2NzFlNDAzNjk3ZjI2Njg4M2E0YWEyZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzYyMzEwNDA0NzU4LC0xMjIuNDE0NzE0Mjk1NTc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YzgyZDhiZmZmYzU0YmQ0YjE2MjUwZGU1MDRmNTZhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzUxMTg4OTU2OTUsLTEyMi40MTgwNDU0NTI3NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTNkNTZjNGY4ZDc0ZGIxODBjNTA3MDg4MDg2NDJjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjAyMzg0Nzg5NzUsLTEyMi40MDExNjE1NTU2MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODc0MWVmZGRkYzM0YzE1OGNjMjc5YTg1M2MxOGY1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyNzAwNTMxOTYyOTk5NSwtMTIyLjQwMzQwODY2OTE5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4YmVlMzI2MGJkODQ4ZGU5YzNmNmQ5NWQ3ODJlY2RhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM0NDM3NDE0MSwtMTIyLjQxMjkzMDUyMjA1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1NGNiMDMyYjA4MTQ5NTVhZjFiMDNhZGE5MDI1N2ZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzUzMDE4NjUzNzQ0NjA0LC0xMjIuNDE4NTg3MTcyMjE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQ3ODdiNDFmNWI1NGVlOWIwYWQyOGY4YjhkMjk2ZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQwNDE4Mzg1MDQxLC0xMjIuNDE0MzcwNjI3NDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjU5YmE4OWE4Yzc1NGYyOTk4OGNmZDRiNTZhZGZjMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTA1Mzg5OTM3MjUsLTEyMi40MDM5MTU2ODE1NzEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4NmQwYTNhY2MxMzQ1ODhhMjZlOTUxYzZiYTFiNGFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzMDk5ODI0NDU5MjEsLTEyMi40MTkxODMwOTYzNjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Y2M4NDI5NTdiNTA0NmU3YThlMjM3MTczNzJmYjhiNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0MDczNjA1NDgzNTc5LC0xMjIuMzg4NzUzMDQ2OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTRiMDQ5NzJhODY2NDA4M2E3OTA1MjAxMjA4NWUzMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ5OTEyOTQ0MzY2LC0xMjIuNDM3Nzk5NzAzNDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2NhYzdiZmE3MjZkNDg3MGI3MDg0NDllZDFmOGNkMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzcwOTAyNzQzNjY5LC0xMjIuNDIxMzMyNjg0NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTcwOGY5YmEzMTdhNGExMjgxYjkxNjZlMWJmOWEzMTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzcwOTAyNzQzNjY5LC0xMjIuNDIxMzMyNjg0NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDg2OTFmNmM2NmY4NDE4MzgwMWE3ZjM5NWViOTI3YzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIyNDU4MjIzOTE3LC0xMjIuNDQ2NjEyOTc4ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTkyNDExZGViYjFiNGRiZDg1MThkZjJmOWM1YTc5NjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzAwMzc5OTk1MTI3OTUsLTEyMi40MDQ1OTQxNDA2MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNmRiOWY5MGZjNzE0OWQzYjQ0NzVjMTcxZGRmMGE4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5NTMzMzgyNjc0MzYsLTEyMi4zOTczNzM3NDAwNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMzVhMmExODg1NTY0Yzc2ODRlY2ZkZjg1YTc0ZTVhNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzUxNTg3NDE2MjI5NSwtMTIyLjQwNzQzNDk4OTUyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY1MmFhMmU4ZGY4NjRiM2M4NWZhOGM1YTMxOWUwYWU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4ZmQ3ZTE0MGU2NzQ0NzE5ZmRhMjc4YzAzMWI5YmYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4YmNhMzU2ZTdiMTRmMGNhZGQ1ZTlmMWFiMTZkNTAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczMjkxODA2OTAyOTk2LC0xMjIuNDM2NjE0MTgxMzMxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZmVkZWEwNjM0OTc0OTdkOTA1MzlmYTY1MmFiN2MzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MDUyNzU3ODUwOSwtMTIyLjM5Njg0OTAxNTE3MjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjliMGVlZjI5OTZmNGE2YmJkMGI3ZDE0NjdmN2ZjZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA1Mjc1Nzg1MDksLTEyMi4zOTY4NDkwMTUxNzIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3ZTk2MjVhNWRjMDRiMzM5NGJmMjkxODJmNWM4YTkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NDE4MDcwNjYwMjA0LC0xMjIuNDUwMDAwNzkwNDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRlM2EyYzU1YmMwNDI3ZDlmOTIxZjBkOGE1Y2FlMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyMTE0NjQ3MzU5LC0xMjIuNDAwODM0MjgzMDMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzBmNTZlNGY1MTcxNGIxZGJkMmYzMTBlOThiYTM2NjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMDY1MzI0MzkyMDUsLTEyMi4zOTk4MDIxNDU3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjQwZGU0ZjI2NjQ0NTRlYWRkZDZiOWNlY2YwOTMwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmIxNGJlNWQwNmZkNDZjODg1ODY1OGMyMWYwNTczZjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjM5NzQ4MjQxNjA5LC0xMjIuMzk0OTI4NDc1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyNDY5YjA3NGFlMDQ2N2FiY2E1ZTcxNGM3YzhhMDZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMDEzYTk1ZjllZjA0NmVkODQ3Njc0ODJlZTU2NTE0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODMyMzU0NDk5MDQsLTEyMi40MTE4NTcwMzI1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3NWQ5NTY3YTIxYzQxZWFiM2FjYWEyNDA3OTcyZGEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU1OTk3NzMzOTg1NiwtMTIyLjQwOTQzNTYxNzEwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5OWRhOTI1MThkYzRhZjk5YTFhNjgzOTZjNDA0OGQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3MDc5ODE0NDQ0MywtMTIyLjQyNTg4MzM1ODE0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE5NjM0YzM4N2EwNzRiMzA4YjY4NzQ2ZDM1OTcyNjBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM2MDM3NDQ2Njg2MjA0LC0xMjIuNDE1MTI2NTQzMDAxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzgyNGRlYjdlMWI0ZjQ0ODhiMmIyNDhjMjBlMWEzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxMjc2Nzg4NDgyMSwtMTIyLjQzMTkyODAxMTA4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2MjE0YWNkYzhlMTRmMDliNTNlMmY5YzIwNmQzNmEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg5NTcxMDI1NTg2MywtMTIyLjQwMjE2MzcxMzYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlNTVmZGVlN2MxODQyZTBhMTMzMDRkODZkMjk3YmFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwNzQyOTE2OTU1OSwtMTIyLjQyOTMwNjcyODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkOWY1MzMyZDhhMzQ4YmNhOTVkYWJmY2I3N2IyNTM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM2NTU2NTM0Nzk0LC0xMjIuNDEzNzkwOTcyNzgwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNWFkMGEyMmJiZTc0NjEyODljODU2NmU4NWIzMjM2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDc0MjkxNjk1NTksLTEyMi40MjkzMDY3MjgzNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NTliN2QwY2I4Mjk0MDc3YTM1MGJjYzgyMzQ5MjQxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNzM2MjM2MDUyMTI5NiwtMTIyLjQyMjA2NzE4NDkzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1NDhiZGU3ZjU4ZTQxNGU5YTk3MWYyNDM1ODRhOTNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM3MzYyMzYwNTIxMjk2LC0xMjIuNDIyMDY3MTg0OTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFlYTVmMTQ0MWFiNGQxMjgxNGQ2MDZlNGYwOTJkNTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODU5OTg4MzIzNzk3OTYsLTEyMi40MTE3NDczNzE5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYmVjNzEzYjllYjE0NjIzYTgxMTUyYjQzZDcwM2U0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MzM3NTgwNTgwNTksLTEyMi40MjA0MzQ3MjQ1NTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkZGRhZGMxNTg5OTRiOTdhYmQ1MjM5OWMzOGI2YTJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1MDIyNjYyMjc4NiwtMTIyLjQxMTk4NzY0MzU5NTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWEwNTE0NWNmMjZhNGY0M2JjNjRhYjFmNzE4NWI2ZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ2MjA2NDkxMDY0OTUsLTEyMi41MDAzODA0Mjc5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNTk0ZmUzMDFlOWM0M2VkYmU2ZDgzMjhkY2U4Mjk0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTE5MTgyNjcyMTcsLTEyMi40NjY1NTg3ODA2ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YTNiYTRlMGE1MDU0NTVkODllNTU4ZDI1MTVmY2YzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0OTA4NDE3MjkwMjgsLTEyMi40ODY5MjU5NjAxMTQwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3ZDc2MTg4YTQ5NzRiNWQ4Y2YwODljZjhkNzI3ODQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY4NTM2MDEyMzU4MywtMTIyLjQxNTYxNjMzODMxOTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjc4MGIxZjEzNzA3NGRhMDllNDdhNDQxYmIxNTAxOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjYyNDJjMWNlODU0NDhkZTliMDg1Mjk3Yjc3NDA4ODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjM0NzEwYjk4NWFjNGUzZmJiYWNhMjg3MWRlNWI5NDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzUyNjgxNDY5MDgzOTYsLTEyMi40NzI3MTU3NTk2MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MWU1YTI5NTJmODRjM2U4NTg5NDA2MWE2ZDBhMTM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmMGMzODRlYWQ2YzRmZDU4M2ZhODE5NDFmOWNmNDYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhNDAxMzE4ZGNiYzRhNDBhZWQxNWI2ZDVlZWZlNmIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI5OTgwOTY3Mjk5NTk2LC0xMjIuMzg4ODU2MjA0MjkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MWFkNjFjZTVhNjE0ODY1YmNmMjU3Yjc5OWRmODAxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NTc4ODM3NjY4ODc5LC0xMjIuNDEyOTcwNTM3NTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzJkMThjMzI1OWE0ZjRiYmU4N2I3Mzk3OWUxN2I1NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTA1MDEyMTQ2NjgsLTEyMi40MTk2NzE3ODAyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1NjdiNmFlNGNhMzQ5NzhiMGY5NWE4YmRhMjFlMzdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MDE4NTU1ODI5LC0xMjIuNDI2MDc3MTc3Mzc0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EzNDg4MGQ2NDU0MzQxYTE5Y2Q0ODYyNTk3OTljOGFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgwODc4OTM2MDIxNCwtMTIyLjQwNTcyMTQ1NDU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQwZTQwMjYwZWU0NDM0ZTkyNDgzNDE5ZTQ0MDZiZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM5ODA1NTkyNjM0LC0xMjIuNDExNzc4Mjk1OTkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYmQ1ZGY5YjJmNWE0YTg1YTBmZWViZjk5Nzk1ZGZmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTc4NzYyMTgyOTI5NSwtMTIyLjM5MzM1NzI0MTQ1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDlmMTdkNmM4ODhkNGFkODg5OGM5NDYxNTFkZDE0MWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjA5NjY5NjE1NDk5LC0xMjIuMzg3MTgxNjM1OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MDM2MTVmNjI1YmY0NzdmOWQ4OGQwNmFjYTlmZDRmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQ3ODE1Nzg2OTUwNSwtMTIyLjQ3NzM3NjUyNDAwMjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YmU3YmQ0OWMxOGY0MjFiYTM2ZDRjY2IzYTY5NGM2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NTczODk0Mjk2NTQ5NSwtMTIyLjQ3Nzk2MDMyNzI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmFlYjhmNDY4MTMyNDcxNGFkODVmMzUzODA4OGJhN2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzU2OTcwMjc1NDgyMDYsLTEyMi4zNzY3NTc2NTU1MzAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjY5NDk1ZThiM2VkNDc0NDk2MGQyY2M5NDEzNzAwODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyNzA1MTk5NTkyLC0xMjIuNDMyMzI1ODcxMDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMGU5MWE5NTJhZmM0YTU4OThhMDg2NzgwMmNiMjkyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5MTY0Mjk4MjM4NCwtMTIyLjQwMDkwODY5ODg4OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YzgyNzM3MGVmOWM0ZTIyODhkNGRiMmExMGNlNDJiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MzcwNjkzMDE1NDUsLTEyMi40MDg1OTUxMTA4NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyNzI4ZTcwOGMzZTQyNDNhZTZkZjM3ZmU5NTgxY2Q4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU3Mjg5NTkwNDU3Nzk1LC0xMjIuNDA2ODcwNDAyMDgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZjIxOTUxOTc3YTg0ZmMxODlkYmEzMTRiYjZmY2EzMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0ODkwNjMwNTE4MjksLTEyMi40MjAzNTQ3ODA4NjA5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFjODA5NzQ5OWFhNGI2NWFkYWJmYzY5OGM0NjhhY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTU3NjU0MjY5OTUsLTEyMi40Mzk5MDk3NjY3NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2NTIyNDEyZWI3YTQxOGE5NGNiZjk2Mzk4OTQyMzljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNTY5OTM4NjkxOCwtMTIyLjQwODQyMTExNjkyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmYyYzZkMGQ1OWZkNGMyZDk4NDg0NzIxNTdjZGNhYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzM2MTg2Mjc2NDU2MDQsLTEyMi40MjIzMTU2NzA3NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiMzdjNDg5OWMyMzRiZGI4Zjg4YTg0YmJhZTIzMGZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzkyODQxMjg0MDQ0NzA1LC0xMjIuNDI0NTE5ODM1MDA5MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4OGY0YWY1NDAxZjRhNmU4OTg5ZWM1YTA5MWMwZTQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU0MDk4Njg4MjA2Nzk1LC0xMjIuNDE0MjMzODQ5MDM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyYzk2MGJlYjFhMDQxMGQ5MTAwZmE3NThmNmJjMGI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU0MDk4Njg4MjA2Nzk1LC0xMjIuNDE0MjMzODQ5MDM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhY2YzYzI0ZWYwYjQzMmRhODdkMmY4MDMwZGI3YjMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzcxNDkzOTk2OTQxNiwtMTIyLjUwNzc1MDEzMTAwNDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjExMmFiYjQwOGE0YTM3ODJiNzIyMWE4YTViNWMyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxODMwMjIwNDc2NjAwNSwtMTIyLjQ3NDQ0NDYzOTU5NDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzRlMDc2ZmRmNmY0MWYzODJjMmE4M2FlYWM3OTJmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDU3NTIzMTc2MTUsLTEyMi40Mjc1NjI1OTY5ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwMmY2MjZmYTgyMzQwYWY4M2E2ZjY1NTNlMTg1YzgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3NDM3ODMwOTExMiwtMTIyLjQxOTIwMzAwNDI2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWYwZGEzNjliZTE3NDg1ZDgxZDFiMDA2ODJlMzJkODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkzNjg4Mjg0NTMyLC0xMjIuNDEyNjkwMTQyMzA4MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxZDMyYzExYWYzODRhNmJiY2IwMmZmZTVmNGQ5YTgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzA5MjAxMDQ2MjM3OSwtMTIyLjQzNDYwOTI4MDM1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTI1ZjQ5NmZlMjA0NDY3Zjk1MzIwY2E1Nzk0NzM0MTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc5MjA5Mzc1NTMyOTUsLTEyMi40MTA4ODI4MjU1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0MmZhMTkwMDIxZDRmYTY5ZTdiODcxM2Q3NDY5NGQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuODAwNDU2NjQ3MTAzODksLTEyMi40MDE0MzI3NTQ3MjIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWFiYWE5YmU4OWQzNDA0Mjg0OTliYTc0MDcxMzc2OGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDM1NTUwNTQyMjY1LC0xMjIuNDIxMTI4MDI5NTA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MDAwMDQ1ODUyNWM0ZTgxYWQwZmEwOTc2ZWY2ZTA2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NjU2NDc2MDc2ODUsLTEyMi40MDcyNDQwODcwMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwNjM0NmY2YzllMzQyZjlhNWJlYzYzNzk2MzdiNWFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDhmNjgxYzIzZDI0NTk5OWU5ZDg5YWM3MzJmNTZmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MTU2NTU5MjgwNDUsLTEyMi40MjM4MDMwMDE5MDA5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2YxYWFiNmE5YmMxNDNlOTk2ZDVkODFjZWJkNTIxYmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDQxOTI3NTA4OTMyMDUsLTEyMi40NDQ2ODU0ODIyNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyZmJjNjdjMTEyMTRjZGY4YjMyYjJiMTQ0Y2RjYzAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDY5MjgyMDA0MSwtMTIyLjQxNTc1NzAzOTE5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTJmNzkyZjkzZjM3NDViYjgzOTYyYWM3MWU2ZGE5NDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjg1MjgwNjI3NDY1LC0xMjIuNDc1NjQ3NDYwNzg1OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZDA2NmEzZDU0MDRhMTk5OTIyNGQ0MGVlYWUzZmM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQyODUxNzM3NDQ0ODk0LC0xMjIuNDIwOTY3NDQwNTY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NmY3NGU3NzRjNjA0ZTRmOGE3MjZjN2JjNmZjZWMzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjExOTg0ODg5MzEsLTEyMi40MTU2Njk2NjE0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3MWM3ZTE3YjgwZjQ4OGJhZTUyZGUwNjdiNGQ3M2ZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc5MTY3NDIxODk2MywtMTIyLjQwNjM0NjQyNTYzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGUxMTNhNmFiNjg0NGI2MjljMDRiMDgwOGE2Njc2NzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjU3MTg0Mzk1MjgyLC0xMjIuNDA5NTI5OTEzMjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzM5NWM5MmIxNDM0OGZmYmI0Yzg3ZmI3MTViYWRjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQyMDcwNjcxMSwtMTIyLjQwMzQwNDc5MTQ3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2QxNjU4ZjQ1Njk0OTg3YWQ5MTdkNTY0MWYxZDFiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NzUyNDMwODc4MywtMTIyLjQxMDczODA5NzMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGNjMjcwNDU2NTQxNDJhNmFlYWU5NmMwNmQzN2RjN2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Njc1MjQzMDg3ODMsLTEyMi40MTA3MzgwOTczMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwMmRhOWUwMjNhYTQwODlhMjUyZGFmMzBkZmI0ZTc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNjMWUzMTVhOWRlNDE0ZjlmMGU2ZTM3MmE1NGNlOTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTMxMDgzNDMzMjY0LC0xMjIuNDQ0MzE0MDI1MTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZTY2MGQ2MDc1MTY0NTYzYWYwOTNiMjVhYTMwMzRiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NjAxNjAxMTQxMDMsLTEyMi40MDM2NDQ2MjA0MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2ODg3MWE2Njk5ODQ5NDc5NjJkZjUwNzE1MjE1OWE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI1NmFkYjE2MGEyNGE0ZGExZTdlZDBjMzdjY2Q0NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzYyMzEwNDA0NzU4LC0xMjIuNDE0NzE0Mjk1NTc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1MWMyYmJiNGQyNjRjYjU5N2FiYjhjNjA0ZTg2YWIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc2MjMxMDQwNDc1OCwtMTIyLjQxNDcxNDI5NTU3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZGY2MjFlYWZjOWM0MGZhODQzNTE2NzdlNTY3MDIyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzUxMTg4OTU2OTUsLTEyMi40MTgwNDU0NTI3NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5YTg1NTcxYWIyMTQ2ODE5NDk4MjhlZDVjZTMzYzkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgyMDIzODQ3ODk3NSwtMTIyLjQwMTE2MTU1NTYwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE5ZmE0YmE3YmExNGM4NWI1N2JhMTIyZGNmNTk1Y2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjcwMDUzMTk2Mjk5OTUsLTEyMi40MDM0MDg2NjkxOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhZmNhNDkwODVkYjQxNmI5MmMyYjhkYzIyYjhiNWFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM0NDM3NDE0MSwtMTIyLjQxMjkzMDUyMjA1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjUyZjhmNDQyNzExNDE1N2IzMGI2OGY1ODA0M2Y0NTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTMwMTg2NTM3NDQ2MDQsLTEyMi40MTg1ODcxNzIyMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwNTgwYmM4MGRkMDQwOGJiNjE3MmQxYjQ3NWI5MDU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc0MDQxODM4NTA0MSwtMTIyLjQxNDM3MDYyNzQ5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQ3NDk0MTkyZDc3NDE5MThhNDIzN2ZiMTQxNTZkNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTA1Mzg5OTM3MjUsLTEyMi40MDM5MTU2ODE1NzEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWFhNzljMjQ3ODA5NDZkMzg3ZWEwNjgxY2U0ZjRjYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODMwOTk4MjQ0NTkyMSwtMTIyLjQxOTE4MzA5NjM2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODkzM2E4NzBjMzBmNDYzNjhlZGRlOTZmMmE3ZmViMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDA3MzYwNTQ4MzU3OSwtMTIyLjM4ODc1MzA0Njk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQ3ZGM2MGNkMWY2NDdmMmI4OGM3NTQwMzZiYjk2YzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ5OTEyOTQ0MzY2LC0xMjIuNDM3Nzk5NzAzNDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZWQ5ZTk2YjNlNTU0OWRmYjA1ZDhmMWZmNjlhNzM1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzA5MDI3NDM2NjksLTEyMi40MjEzMzI2ODQ2MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0MzEwMGRmZmY3YzQ2NzZhOTM2YzBmOWQyYjViNWRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3MDkwMjc0MzY2OSwtMTIyLjQyMTMzMjY4NDYzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQyNDJkNTlhZTU2NGJiYjg2M2U5MjNiM2FkNDU0MjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIyNDU4MjIzOTE3LC0xMjIuNDQ2NjEyOTc4ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYWNmNGJlZDg4MDE0NjA2ODBkYzMwOTk3MDViNjY2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDAzNzk5OTUxMjc5NSwtMTIyLjQwNDU5NDE0MDYzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTA5ZTI0MzJhOWU3NDVlOTlmYWI3YjVmNTcxZmVjNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTUzMzM4MjY3NDM2LC0xMjIuMzk3MzczNzQwMDY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMjc3YTA4ZWQ1YjI0N2RhYWQzODM5ZmY5ZWIwNmYxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzUxNTg3NDE2MjI5NSwtMTIyLjQwNzQzNDk4OTUyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjY4ZmZkMjU1OGNlNDhjZmFjZWRjZWY1M2Y0MTdkYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Nzg1MjMzNzc2MDMyLC0xMjIuNDAzNDY0MDgwMDMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDU5NWJlZjExYTY0NWI5OGI1MDE1MDIxYTJlMzBkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3ODUyMzM3NzYwMzIsLTEyMi40MDM0NjQwODAwMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlMjViYzlhMTUyOTRjMmJhZjEzMTg4Nzg2NGY1MDE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczMjkxODA2OTAyOTk2LC0xMjIuNDM2NjE0MTgxMzMxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlNDE1ZTIyN2NkMDQzM2Y5M2I5MGQ4YmZkNjc3OTU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgwNTI3NTc4NTA5LC0xMjIuMzk2ODQ5MDE1MTcyMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5YWY3NWFiYzIwNTQzZDY5ZWJmMTdlMzU2Nzc3ODZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgwNTI3NTc4NTA5LC0xMjIuMzk2ODQ5MDE1MTcyMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlZDc3MjVmNDRjYjQyMjlhOGRjNDJmYTY5NWQxZmE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NDE4MDcwNjYwMjA0LC0xMjIuNDUwMDAwNzkwNDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MmNlOTFjMzk3YTk0Yzg2ODIwZTRjZGEzMzE3NjE3OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTIxMTQ2NDczNTksLTEyMi40MDA4MzQyODMwMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5ZDczZjI4ZjdiMjQ0Yjc4ZmM4NDViYThhZmUzOTBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MDA2NTMyNDM5MjA1LC0xMjIuMzk5ODAyMTQ1Nzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZTcxYzVmMDdhZWI0OWI4OTNkNDc4M2Y2MDhjYjQ3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTQ5MmJhZWMyNTA0NTQyODVjNzYxOGJiYjUwNzdlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNDU3NDM1NjJkOWI0MDYzOTcxM2UwZGU1ZTIyMWI2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZGZlZDJiYWUzMTE0ODdmOWY5M2JiM2EwMWUzMjY2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODMyMzU0NDk5MDQsLTEyMi40MTE4NTcwMzI1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjllNWYzZTBkNjU5NGYyZWJhMDk0MGU4MzZkNjU2YTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTU5OTc3MzM5ODU2LC0xMjIuNDA5NDM1NjE3MTA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzkzNjk2MjYzYTk0NzVkODFiMmQyNTEwMmZmNDdkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzA3OTgxNDQ0NDMsLTEyMi40MjU4ODMzNTgxNDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MzA3N2Y2NDFhMjQzZWM5NDBkMzU1NTJiNDI3NmNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM2MDM3NDQ2Njg2MjA0LC0xMjIuNDE1MTI2NTQzMDAxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlYTNlNTE0MmM0YjRkYWNiOTE0MzdlYTE0ODFhNThmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEyNzY3ODg0ODIxLC0xMjIuNDMxOTI4MDExMDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjAxZGI3YTRkYmY0ZWNjYjUxNjUxMjVjMDhlNjQ0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4OTU3MTAyNTU4NjMsLTEyMi40MDIxNjM3MTM2MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlMDVjNzZkNjI1ZDQ1ODY5NDExYmMwMmNmNWQ0MmZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwNzQyOTE2OTU1OSwtMTIyLjQyOTMwNjcyODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDgxMmFhMWM5MDg4NDlmOGE4MGIwZjMwODNjMmU5YzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM4MzY1NTY1MzQ3OTQsLTEyMi40MTM3OTA5NzI3ODA5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzA0NjRhYmM4YzBiNGY0ODgyNjkzNTUxMTA4NjBlNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzA3NDI5MTY5NTU5LC0xMjIuNDI5MzA2NzI4Mzc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Mjk1MTVkODEwNjA0OGZhYjRkNDQxMmEwYjgwYjMxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNzM2MjM2MDUyMTI5NiwtMTIyLjQyMjA2NzE4NDkzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmI2ZTRkZWM2Nzc3NDk1YTg4MzA5ZTE2MDg1OTdiOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzczNjIzNjA1MjEyOTYsLTEyMi40MjIwNjcxODQ5MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNhZjE5YjA3ZmNkZDQ4OTk5MTk4MTMwZGEwOGY2Yzc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1OTk4ODMyMzc5Nzk2LC0xMjIuNDExNzQ3MzcxOTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTI0NmVjMWM2Yjc0NDQ0YjFjZDEwMTQwMzc2MDNlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MzM3NTgwNTgwNTksLTEyMi40MjA0MzQ3MjQ1NTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTIyYmFiODE3NzAwNDM1NmJjOTYwMzI4MGI4NDQ4MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODUwMjI2NjIyNzg2LC0xMjIuNDExOTg3NjQzNTk1MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkYzZjNDliNzU1MjQxMjFhNmU0YjIzNmRjZDExMzgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc0NjIwNjQ5MTA2NDk1LC0xMjIuNTAwMzgwNDI3OTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMjFkZmU4OWQ4MGY0MDVmYTVlYzczY2E5OTFlNzZiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTE5MTgyNjcyMTcsLTEyMi40NjY1NTg3ODA2ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZWU2Y2EzMWY1ZDQ3NmU4NjZjMzRkOGQ5ZDg2MzVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQ5MDg0MTcyOTAyOCwtMTIyLjQ4NjkyNTk2MDExNDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZWU1NjI5NjlhOWM0ZmU4ODE2ODA5NzRiNDJiMjY5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2ODUzNjAxMjM1ODMsLTEyMi40MTU2MTYzMzgzMTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjdlZmYyNjU5OGVkNDk3ZTk0Mjk5ZGExNDY1MWIwNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTI0OTNmNGU3ZWU0MWYzYTdkODE4N2M4YmExYjlhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQyOTc3MTQwNzQsLTEyMi40NDk3NTE2NTI1NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NGUyNjk2ZDE0MjQzZWZhMzY2MTg2NThlNDI2OGNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM1MjY4MTQ2OTA4Mzk2LC0xMjIuNDcyNzE1NzU5NjMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKPC9zY3JpcHQ+ onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e06e9e8>" | |
] | |
}, | |
"execution_count": 24, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# instantiate a feature group for the incidents in the dataframe\n", | |
"incidents = folium.map.FeatureGroup()\n", | |
"\n", | |
"# loop through the 100 crimes and add each to the incidents feature group\n", | |
"for lat, lng, in zip(df_incidents.Y, df_incidents.X):\n", | |
" incidents.add_child(\n", | |
" folium.features.CircleMarker(\n", | |
" [lat, lng],\n", | |
" radius=5, # define how big you want the circle markers to be\n", | |
" color='red',\n", | |
" fill=True,\n", | |
" fill_color='yellow',\n", | |
" fill_opacity=0.6\n", | |
" )\n", | |
" )\n", | |
"\n", | |
"# add incidents to map\n", | |
"sanfran_map.add_child(incidents)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"You can also add some pop-up text that would get displayed when you hover over a marker. Let's make each marker display the category of the crime when hovered over." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMzcuNzcsLTEyMi40Ml0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfNzYwNzlhNzkzNmJiNDQyOTgxNTcxYTY1ZDM1NjMyOTEgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTlhZjdhMzE4ODBhNGE3Mzk0ZDRkMDkwM2NiMmM3MDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0MjA3MDY3MTEsLTEyMi40MDM0MDQ3OTE0Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTkxMTdiMWQ0YzUzNGNjODkwZTU1MjUzOWVmMjZiMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0MjA3MDY3MTEsLTEyMi40MDM0MDQ3OTE0Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzUwYzk2M2NmMjU0NGViMzgzYzEzOWI2YTVkMjFiMDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjk5ODA5NjcyOTk1OTYsLTEyMi4zODg4NTYyMDQyOTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZTA1ZGY1NTY0MzQxYTk4MmYzNGQ4NWE5ZDhlNmZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1Nzg4Mzc2Njg4NzksLTEyMi40MTI5NzA1Mzc1OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlZmUxM2RhMmM4NzQwMzFhYjhlZDczMTMyZTcyNTUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY1MDUwMTIxNDY2OCwtMTIyLjQxOTY3MTc4MDI5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTYzZWEwZGQ3ZmQyNDkyYWJlMmE4YzYyNDE3YzU1ZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMTg1NTU4MjksLTEyMi40MjYwNzcxNzczNzQ5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNhYThjZmMxNmU5NGU5YWE4ZjJjNzlmZWQ5NTdiZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA4Nzg5MzYwMjE0LC0xMjIuNDA1NzIxNDU0NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MDZmYzNlMWZhYjg0NzkxYTcxYzg3YTcxYzc3ZWVjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4Mzk4MDU1OTI2MzQsLTEyMi40MTE3NzgyOTU5OTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4ZGQyOGU4MjZlMjQ1OTY5ZmE1NWQ4MzZlZDI0ZDQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1Nzg3NjIxODI5Mjk1LC0xMjIuMzkzMzU3MjQxNDUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hN2M4OGFjMmM5Mjc0MjlkYTE1ZjMwOTM0YjAwYTQ3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMDk2Njk2MTU0OTksLTEyMi4zODcxODE2MzU5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA3NTVhN2QxNDI5NDQ0MTZhZmY5NzkwMmYzM2E4MjE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NDc4MTU3ODY5NTA1LC0xMjIuNDc3Mzc2NTI0MDAyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxZDE5NzZmN2VkZjRlZDE5ZjIxNzRjZmI0ODg3NGI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQ1NzM4OTQyOTY1NDk1LC0xMjIuNDc3OTYwMzI3Mjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNWI0MTY5MjBlMzM0NmI0YWMzNjcwZTQzYmM4ZDVkNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNTY5NzAyNzU0ODIwNiwtMTIyLjM3Njc1NzY1NTUzMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTI3NWMyZDhiOGM0YWRiYWVlMTYzODg0NDRlYzY0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTI3MDUxOTk1OTIsLTEyMi40MzIzMjU4NzEwMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiNGI4NGE0YWI0NjQ3NmFiMzliZTU2ZDRkMjdiZTY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzkxNjQyOTgyMzg0LC0xMjIuNDAwOTA4Njk4ODg5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczNzc4NjdhNjczZjQ5MjE4NTRjZmE3MDk3ZDZlZDU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNzA2OTMwMTU0NSwtMTIyLjQwODU5NTExMDg2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzE0NDE0ODg4Zjc4NGViOWE4NTZjN2NkY2YxNDc0YjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTcyODk1OTA0NTc3OTUsLTEyMi40MDY4NzA0MDIwODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyNzA4MjM0ZjJjNjRhYjJhNTU0YWFkNzFhNWRlODVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQ4OTA2MzA1MTgyOSwtMTIyLjQyMDM1NDc4MDg2MDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Mzg4ZTA3ZGU4MGI0ZWRjOTE5NzgwZTU3ZTBmNWRiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxNTc2NTQyNjk5NSwtMTIyLjQzOTkwOTc2Njc3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOThkYzM0OTMwOTJjNDI3NWI0OGM2NjRiNjI0ZjQ4N2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM1Njk5Mzg2OTE4LC0xMjIuNDA4NDIxMTE2OTIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZmMwYjE3MjQ3YmI0M2E0YWE3MGE0OWFlMjAzN2NlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3MzYxODYyNzY0NTYwNCwtMTIyLjQyMjMxNTY3MDc0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDZhNzg3MTFmNmQwNDg2NGFiMWY2ODc0OWYwNWIxYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTI4NDEyODQwNDQ3MDUsLTEyMi40MjQ1MTk4MzUwMDkwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjZlMDAxZmZiODhjNDA4MDkxNmRkNGE3NGMwMzNkNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTQwOTg2ODgyMDY3OTUsLTEyMi40MTQyMzM4NDkwMzc5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjgxNzE2Y2M3NDY1NDQzZDlmYjYzNmU3MDliNDM4MjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTQwOTg2ODgyMDY3OTUsLTEyMi40MTQyMzM4NDkwMzc5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTY4Y2ZlZjA4NzE2NDVhZWEwMDI5YjM4NGQzODZmOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzE0OTM5OTY5NDE2LC0xMjIuNTA3NzUwMTMxMDA0MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViODlkNjgwYzc0YzRiNTM4NzMxNjRiNTY1NGQ3NWY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzE4MzAyMjA0NzY2MDA1LC0xMjIuNDc0NDQ0NjM5NTk0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5YWE0Yjk5NjMxYjRiNGZiOTYwOTQ3MzI2ZmZjMTYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NTc1MjMxNzYxNSwtMTIyLjQyNzU2MjU5Njk4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODllMDhjN2IyY2JjNGFkM2I5M2M2YjY1ZWI0NTczNTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc0Mzc4MzA5MTEyLC0xMjIuNDE5MjAzMDA0MjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmEwZWI3NDhmZWI0OTllYmNiMGM5N2M5ZDE3YTUxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0OTM2ODgyODQ1MzIsLTEyMi40MTI2OTAxNDIzMDgwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDFmYzdlNWY2YzQ2NGMxODlkZWVkNjUzNGNjMjc0MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MDkyMDEwNDYyMzc5LC0xMjIuNDM0NjA5MjgwMzUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjRlMTIzNzY2MmU0YWZkYjU1NzNlMjg0YjIxNjUxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzkyMDkzNzU1MzI5NSwtMTIyLjQxMDg4MjgyNTU1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODI0YzNmODllNDFlNDJiMjkyZGUyYTQwMzcwNThlNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy44MDA0NTY2NDcxMDM4OSwtMTIyLjQwMTQzMjc1NDcyMjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NjQzMGMyMTFiMWU0ZmQ3OTE3YTc4MDAyOTI5NDU1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0MzU1NTA1NDIyNjUsLTEyMi40MjExMjgwMjk1MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwZjk5MGRlMjJlZjQ1M2NhNmIyNmRkYzAxNmYxNWQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg2NTY0NzYwNzY4NSwtMTIyLjQwNzI0NDA4NzAzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTJhNjdhZWUyZWE4NDAwODk0YWU1NzUwZjNhYmQ3NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1YTY5ZTAyOGRlOTQyMTE5MmY1NTRlM2M1Yzk4MzQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDRiNGMzMTEyZDk0N2QxYTI1OWNlZjVmMWM2MmIxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NDE5Mjc1MDg5MzIwNSwtMTIyLjQ0NDY4NTQ4MjI3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODMwY2ExYzlkZTJjNGRiNzg0NTZkZmVkNTVlNWIzOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0NjkyODIwMDQxLC0xMjIuNDE1NzU3MDM5MTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2FjZmUxNWYyNjk0OTBhYTg2ODk1ZDBjYjZhNTZmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyODUyODA2Mjc0NjUsLTEyMi40NzU2NDc0NjA3ODU5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWI5ZGEyNDRiNzczNGY2ZTgxNTI1NDBiMWI0MzAyYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDI4NTE3Mzc0NDQ4OTQsLTEyMi40MjA5Njc0NDA1NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlN2I4ODM5ZjQyYzQxNzc5OGUyNzlhOWRiNDYyNjcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgyMTE5ODQ4ODkzMSwtMTIyLjQxNTY2OTY2MTQ0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGU0MzE2OTFhNzljNDViZTgyMTRjMjYyN2I2NzAxMmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzkxNjc0MjE4OTYzLC0xMjIuNDA2MzQ2NDI1NjMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzBkNjc1NGQ1MWU0ZmQxODU3OWMzZmZjMjJjYWFlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTcxODQzOTUyODIsLTEyMi40MDk1Mjk5MTMyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3ZmJjMWNkMDRkMDQwMjNiZDY1MDRjMTA4M2RiZTdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0N2EyOGY0ZDExZTRkMzQ4NjAyNmM0NzZlYjg0ZjlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY3NTI0MzA4NzgzLC0xMjIuNDEwNzM4MDk3MzE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYzVlNjEyZTFmOWQ0NDBmYTZhZThmYTY3NjBmNzEzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NzUyNDMwODc4MywtMTIyLjQxMDczODA5NzMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGNmMjZkZGRhMTM2NDNkYzlhYTY2ZmJjZTQwM2Y2NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTMxMDgzNDMzMjY0LC0xMjIuNDQ0MzE0MDI1MTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTFmNjUwZWZmZjY0YzNlOGI0MTdkMzRmYzdlMDdhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxMzEwODM0MzMyNjQsLTEyMi40NDQzMTQwMjUxODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQxYzE1ODFiYTUzZjRiZjFhNDg0MTA3Yzg1YjM4NGZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGFiNDZhZDI4YWM2NDZiZDlkYmE3MmZlODdkNGZlY2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjYwMTYwMTE0MTAzLC0xMjIuNDAzNjQ0NjIwNDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNGRiNDlhMDA3OWI0Y2ZkOGJjODg4ZDg5MmEwNDQxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NjIzMTA0MDQ3NTgsLTEyMi40MTQ3MTQyOTU1Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjRiOTQxN2VmODgwNGNkNGExMWVhMjI5NDM3NTM3ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzYyMzEwNDA0NzU4LC0xMjIuNDE0NzE0Mjk1NTc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZmE0ZDdmZDZhZDQxYTVhMjE2ZjM3YjdhMzk0NjRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3NTExODg5NTY5NSwtMTIyLjQxODA0NTQ1Mjc2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzVjNTM1N2IxMDdkNDAxY2FhOWZiMWFjZDAxYWJiOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIwMjM4NDc4OTc1LC0xMjIuNDAxMTYxNTU1NjAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNTQ0NmZiYmNmNWQ0MzhlOTg2MmM0OTc2MzA3OWFjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyNzAwNTMxOTYyOTk5NSwtMTIyLjQwMzQwODY2OTE5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI3OGIyM2U5MWRkNDJmZjgwODI1YTRhMTcwNjNmYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM4MzQ0Mzc0MTQxLC0xMjIuNDEyOTMwNTIyMDU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kODJlYjY3ZjU4MDg0M2NlODM4MjE3ZmUxZGZiMDUwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1MzAxODY1Mzc0NDYwNCwtMTIyLjQxODU4NzE3MjIxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTk3MGI4OWFjMDE5NDNiYzkxMTkyMTY2NTk4NzY1YjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQwNDE4Mzg1MDQxLC0xMjIuNDE0MzcwNjI3NDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjZmZWI4NTkzZWE0NWYyOGY2NDcxNTI2MjhlNjEyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5MDUzODk5MzcyNSwtMTIyLjQwMzkxNTY4MTU3MTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGQ1YmJiZTcyMTM0MjMwOTg1NjI4MDFkMGYwNjQwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MzA5OTgyNDQ1OTIxLC0xMjIuNDE5MTgzMDk2MzYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ODhkOGIwYmIyNTI0NTlmYmMzODYwODJmNWU3YTI1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0MDczNjA1NDgzNTc5LC0xMjIuMzg4NzUzMDQ2OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMjMxYzkzMjY4OGM0ZjFmOGFmZTJhMGQ5MTc2Yzc1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NDk5MTI5NDQzNjYsLTEyMi40Mzc3OTk3MDM0NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0ZmNhZGEwMWM1NDQ2ZThiN2Q1OGM1OGIwNzE1YjFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3MDkwMjc0MzY2OSwtMTIyLjQyMTMzMjY4NDYzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWI5MjExNmVjMGZjNDQ4ZDk0MzcxMWYxMDVlNTllNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzcwOTAyNzQzNjY5LC0xMjIuNDIxMzMyNjg0NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZWVkMjZiMDk4YmM0ZjhhYWU5MmM4ZGVkODBmNTU4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjI0NTgyMjM5MTcsLTEyMi40NDY2MTI5Nzg4MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ODA3MjJiOTAyZjRhMWNhNDFjY2E2NDhjMzk3MTA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwMDM3OTk5NTEyNzk1LC0xMjIuNDA0NTk0MTQwNjM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmQ1ZmYyNDMwMmY0ZTE5YTYwMTFiYmNmYmIyYjNlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5NTMzMzgyNjc0MzYsLTEyMi4zOTczNzM3NDAwNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkMWFiMWY1ZGE1NjQ4NjA5YTUwMDE3MjIyNGE1ODhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3NTE1ODc0MTYyMjk1LC0xMjIuNDA3NDM0OTg5NTIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjkyYzg0MmI5NjY0OTBmOGVmYWM5ZDk5NjM0ZDhjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3ODUyMzM3NzYwMzIsLTEyMi40MDM0NjQwODAwMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyNzFlYjllYjEyMTQyNzk5OTA3NmRhNDg3MWU4YzBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTI4ZjQzN2NlZmZlNDZkMGJhNDE0ODU3Y2VmODEzZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzMyOTE4MDY5MDI5OTYsLTEyMi40MzY2MTQxODEzMzEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTg4YTQwMzAzM2MzNDYyYzk5ZjBlMGExZGU5OTY0NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA1Mjc1Nzg1MDksLTEyMi4zOTY4NDkwMTUxNzIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWExMzRiMTgzZGY0NDI0YmJhNGE3MTkzNzQxOGVlMzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA1Mjc1Nzg1MDksLTEyMi4zOTY4NDkwMTUxNzIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzA1MmIyZDA2NzlhNDBmNTkwMzgzZDc0NWIwMmU0NTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjg0MTgwNzA2NjAyMDQsLTEyMi40NTAwMDA3OTA0NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1NTFlNGU2MmM0MzQ4MTliZGI2YmFjZGMxYTFmZjQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI5MjExNDY0NzM1OSwtMTIyLjQwMDgzNDI4MzAzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTdmZTQ2YzYyNzI3NGRjNDg5NjE2ODNiODQ3ZGI2ZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMDY1MzI0MzkyMDUsLTEyMi4zOTk4MDIxNDU3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4OWRkNzAzODVjNzQ5MmJiNGZiZTlmMDBhOWNjOWU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1YWUxYzc2Yzc1YzQ5ODI4YmNlNjZkODZkYTZjYjRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlMzllNTc1NDcyZDQ5ZGM4YTdjNjQyZmQ2N2QyYTZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhODVlMzU2YzJmMDRjZDliOWUzNjI3YjhhN2Y3MWEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MzIzNTQ0OTkwNCwtMTIyLjQxMTg1NzAzMjU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MWU2Mjk3MzNmMDA0NzE2OTUyZmRhNTg5ZGExMjViMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1NTk5NzczMzk4NTYsLTEyMi40MDk0MzU2MTcxMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1MWU2Mzg0MDQ1ZTRhMGY4YTRiMjgwYmYwMjQ2ZDE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3MDc5ODE0NDQ0MywtMTIyLjQyNTg4MzM1ODE0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg5OGMxNGIwZWQ4NDgwZmJmMWYyYmFkZGFiZWE1MmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzYwMzc0NDY2ODYyMDQsLTEyMi40MTUxMjY1NDMwMDEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmY1N2E3N2U1ODgwNDIyOWFhYjczYTU4YmE0Zjg0YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTI3Njc4ODQ4MjEsLTEyMi40MzE5MjgwMTEwODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlNGIyMDQyMjQwOTQxODY4MDYzM2ZhMGExMmRhODQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg5NTcxMDI1NTg2MywtMTIyLjQwMjE2MzcxMzYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDU5YTNkNmE3YTQ4NDM2ZDk5Mjc3OGEwZGEzOWIyYjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzA3NDI5MTY5NTU5LC0xMjIuNDI5MzA2NzI4Mzc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODc4NjYzNGY5MmU0YWEyOTlhMDI5NWFmZmNjMTUxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MzgzNjU1NjUzNDc5NCwtMTIyLjQxMzc5MDk3Mjc4MDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYTBhODA4NDBkY2M0NGQyYmUxMzNkNWFhMWM4MTdkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDc0MjkxNjk1NTksLTEyMi40MjkzMDY3MjgzNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiYWUwNWRhMTZiMjQ5NTZiMWZlN2MzOTgyNmE1YTQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM3MzYyMzYwNTIxMjk2LC0xMjIuNDIyMDY3MTg0OTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MTVmOGRiYzRmOTY0MDQ4ODZlOWFkYTRhMzFiNzk3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNzM2MjM2MDUyMTI5NiwtMTIyLjQyMjA2NzE4NDkzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDMwZTI3NWEwNjQyNDIyMjhmZmUxNDljZjQxYjE1NDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODU5OTg4MzIzNzk3OTYsLTEyMi40MTE3NDczNzE5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxYzZkYTBjOTY0ZDQ1Mzc5ZTQ3MTQ4MGVlMjc0ODFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYzMzc1ODA1ODA1OSwtMTIyLjQyMDQzNDcyNDU1Mjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hODY1MzNhOTc4NDY0NWM5YjhiYjNkYjdkM2RlMzk0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NTAyMjY2MjI3ODYsLTEyMi40MTE5ODc2NDM1OTUwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTU0ZDFiZTEyYTVkNGMzNmI0ZTAyYzAxZjJiY2FmOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ2MjA2NDkxMDY0OTUsLTEyMi41MDAzODA0Mjc5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlMGIxNGI5MDkyNDRlMDM4N2JiYjg3OTE3ZTI0M2Q5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1MTkxODI2NzIxNywtMTIyLjQ2NjU1ODc4MDY4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Y0YTNjNDI1ZjkwNGVjYWFhODUyZjc1MWIyMWE2NWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkwODQxNzI5MDI4LC0xMjIuNDg2OTI1OTYwMTE0MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzN2QyNWYyMDM2YzQyOGRhNzViNDJiOTdmZmQzYTJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY4NTM2MDEyMzU4MywtMTIyLjQxNTYxNjMzODMxOTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImRhcmtibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTM1ZmUwMzhlZmFhNDhiMjkzZDA0OTM0NzlmZjlkMzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZjQwYjJiODRkNTU0NGRiOWMxMmFlODQzMjIzODFmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQyOTc3MTQwNzQsLTEyMi40NDk3NTE2NTI1NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzZjFjODJhMWVlNDQ0OWY4YzBjM2E5ZjMxZGExMjI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NDI5NzcxNDA3NCwtMTIyLjQ0OTc1MTY1MjU2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJkYXJrYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzUzNWZlMDM4ZWZhYTQ4YjI5M2QwNDkzNDc5ZmY5ZDM2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2M3ZmY1OGFhYTQ4NGY0Mzg5MDIyNDg1NGJhYTQ4NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzUyNjgxNDY5MDgzOTYsLTEyMi40NzI3MTU3NTk2MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZGFya2JsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81MzVmZTAzOGVmYWE0OGIyOTNkMDQ5MzQ3OWZmOWQzNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGJhYTUxOTA3NWQ0NDI5OGFkMjc0YmQ0MzkzMDY0MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0MjA3MDY3MTEsLTEyMi40MDM0MDQ3OTE0Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlNTZkYmE2YjkzNjQxNjJiMGYxM2VlNDg3MmYyZThhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzU5ODhjMzk5NTM0YTcwOTczNGM0MmIwNGE1MTg4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTk4MDk2NzI5OTU5NiwtMTIyLjM4ODg1NjIwNDI5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkODM0NTg4ZTJjMjQ0YmNhOTQ4NzlhYzNlYTBiOGNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1Nzg4Mzc2Njg4NzksLTEyMi40MTI5NzA1Mzc1OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODVkODNmZTBkOTQ0NDE2ODc2YzNiZmRmYWZiOGY4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTA1MDEyMTQ2NjgsLTEyMi40MTk2NzE3ODAyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYjAwZjdmZTAwM2E0N2I0YTkzZWQ5YjMzMzhlZjA3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODAxODU1NTgyOSwtMTIyLjQyNjA3NzE3NzM3NDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWIwMGZjZGE0MDRiNDQ3NWFhY2EzMmI2YWQyZWE0MzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA4Nzg5MzYwMjE0LC0xMjIuNDA1NzIxNDU0NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjgzMzc5YzY0ODdkNDk5ZWFiNDk2NDg3NWVmM2RjNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM5ODA1NTkyNjM0LC0xMjIuNDExNzc4Mjk1OTkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGJkZWI4Nzg3MmMwNGFiMDhmYWRjOWFiMDRhNDdiOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU3ODc2MjE4MjkyOTUsLTEyMi4zOTMzNTcyNDE0NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOWZjYTQwNTg3NzA0MDExYmYxNzQwYmU0NzA1ZTA1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMDk2Njk2MTU0OTksLTEyMi4zODcxODE2MzU5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjdjMTZhN2JkMTI0M2M0OGRjOWYyZjk4ZDBhMzcwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQ3ODE1Nzg2OTUwNSwtMTIyLjQ3NzM3NjUyNDAwMjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNjY2M3MzI3YjU4NGJlYmJmM2I5ZmVmMmFlMDYwOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDU3Mzg5NDI5NjU0OTUsLTEyMi40Nzc5NjAzMjcyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOTVmYTFjZWU0Y2Q0M2ZmYTdlZTNhMDEwOGNmZmRhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNTY5NzAyNzU0ODIwNiwtMTIyLjM3Njc1NzY1NTUzMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGJlNDljZjBmNDA2NGE2YTg4M2I3YTRhOTBjMDgzOTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyNzA1MTk5NTkyLC0xMjIuNDMyMzI1ODcxMDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDMzN2I3NTYyODhiNGNmYThjNjIxN2IwZTVlZGI4MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTE2NDI5ODIzODQsLTEyMi40MDA5MDg2OTg4ODk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1MWIyYjRiMzdjNTQ3ODBhNWY3N2Y1NWJlNjZmNDFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNzA2OTMwMTU0NSwtMTIyLjQwODU5NTExMDg2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA4NTc2NzVjYzNiYTQzNjE5ZjBhODE4ZTI4ODBiZTM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU3Mjg5NTkwNDU3Nzk1LC0xMjIuNDA2ODcwNDAyMDgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFmYjY0ZTNmODQ4NGNjMDkxNTJjNjFmMjgxZjRmNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDg5MDYzMDUxODI5LC0xMjIuNDIwMzU0NzgwODYwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NmYxNjhjYWFkY2U0MDhmOWJhOGNiNGVlMmI3YWQzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxNTc2NTQyNjk5NSwtMTIyLjQzOTkwOTc2Njc3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjYWY5ZTRhNWFmNjQ0NzY4NTBiMzVhOWI1MzVhN2RjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNTY5OTM4NjkxOCwtMTIyLjQwODQyMTExNjkyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiNjE1NGE5MDA4MTRiZjdhMzE0NDgxNWJkY2ViMzE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczNjE4NjI3NjQ1NjA0LC0xMjIuNDIyMzE1NjcwNzQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE2NzRiMzJiZGFhNGRjZWJlM2IwNmQ3NGJhZTY0OTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTI4NDEyODQwNDQ3MDUsLTEyMi40MjQ1MTk4MzUwMDkwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwZDM0OWE5ZjAzYTRhOWY4MzFiZWY2ZmVjZmUxY2YyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU0MDk4Njg4MjA2Nzk1LC0xMjIuNDE0MjMzODQ5MDM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGEyMzRmNTgxY2Y0YjNmOTc4ZTA5ZWIzZGJkN2Y4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1NDA5ODY4ODIwNjc5NSwtMTIyLjQxNDIzMzg0OTAzNzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWI3Y2Q5NDdhOWJkNGE4YmFhMDE3YjZiZDQxMjJmNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzE0OTM5OTY5NDE2LC0xMjIuNTA3NzUwMTMxMDA0MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMDc0ODJiZDkzODk0NTRkYjkxNDNkYjcxOTM4YmZiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxODMwMjIwNDc2NjAwNSwtMTIyLjQ3NDQ0NDYzOTU5NDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDVlZmU0ZGM3ZWM1NDY5NGE4MTYyYzEwZGU4ZDI5ZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ1NzUyMzE3NjE1LC0xMjIuNDI3NTYyNTk2OTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI3ZTg4NjZmNTc1NGNmZDkxN2UxZGJjZTgwOWEzOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc0Mzc4MzA5MTEyLC0xMjIuNDE5MjAzMDA0MjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzNiNDIxOGM4OTVjNDc4OTk4MGY1M2Y0YjcwMDYxNTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkzNjg4Mjg0NTMyLC0xMjIuNDEyNjkwMTQyMzA4MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYzAzYjUxNGQ5ZjI0ZGU2ODI0ODY3OWM5NWQ2NWJkMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcwOTIwMTA0NjIzNzksLTEyMi40MzQ2MDkyODAzNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTdkNmYxMWU0ZTE0ODEwYjY1NGQ4YzgwNjIzODUxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzkyMDkzNzU1MzI5NSwtMTIyLjQxMDg4MjgyNTU1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlZGUyZGNmY2RkODQ1OGU5OGIyZDkyYmRkMjQ3MzFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuODAwNDU2NjQ3MTAzODksLTEyMi40MDE0MzI3NTQ3MjIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY1YjczMjhiMzY5OTQ5NGY4NDBjZjRmNDNkY2U4N2I5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQzNTU1MDU0MjI2NSwtMTIyLjQyMTEyODAyOTUwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhZmRhMjFiNTA4ZDQ4YWRiY2Q5NzhiMDNlNWFmZDhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg2NTY0NzYwNzY4NSwtMTIyLjQwNzI0NDA4NzAzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0NDBiNmExYjRkYTQxMWU5YzE0ZDMxMzNmMDdjZTMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjk2MzM4NmUyZmVkNDE2NzkzYjJmZDQ2ZTA0OTlkY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNGQ1ZjE3MmFmZmM0ZDEwYjM1YmIwMjgyZTZjNTA4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NDE5Mjc1MDg5MzIwNSwtMTIyLjQ0NDY4NTQ4MjI3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2YmJhZTRkOWQwZTQwZGFiMTdlY2JjMmRiYzRlYjg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDY5MjgyMDA0MSwtMTIyLjQxNTc1NzAzOTE5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhODliNjAyODI3ZjRhMDBiYWJkNjczYjk4Y2RhYjBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NTI4MDYyNzQ2NSwtMTIyLjQ3NTY0NzQ2MDc4NTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjM1ZjU3OWU3NzI2NDE5YmI4NzRkN2QxOWRhOTc5ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDI4NTE3Mzc0NDQ4OTQsLTEyMi40MjA5Njc0NDA1NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NGMxMjkyNjY5OTU0MzQ3ODU1ZWQwOTJkOGIyNjJkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjExOTg0ODg5MzEsLTEyMi40MTU2Njk2NjE0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDJiNDgyZGQ5YWM0YTUyYTM0ZDljMzk5MjI5NGY1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3OTE2NzQyMTg5NjMsLTEyMi40MDYzNDY0MjU2MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNWMwMzQyZmU4ODE0YzE2OWRlNGEzZThiODQzYzE0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTcxODQzOTUyODIsLTEyMi40MDk1Mjk5MTMyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOWQwNmM5NDg1MWY0ZmFjODBjZDg0YTg2YThkZjJlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQyMDcwNjcxMSwtMTIyLjQwMzQwNDc5MTQ3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRjMTEzZDcwN2IwNDc0ODgwNWI1NWRiMTk3MWM3YzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Njc1MjQzMDg3ODMsLTEyMi40MTA3MzgwOTczMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjY3MGM0MDgxNTE0ZGRmYjYwNWQzNDAzYzEwMjM0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NzUyNDMwODc4MywtMTIyLjQxMDczODA5NzMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JhYTYxNzBhZGU1ODQyNmZiMTcxNTg4MTE1MjViZmUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBhYzNkNTIyNzJhOTQ2ZGM5ZTAwN2NhMzBmY2U5NzI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlY2Q4ZjE0N2I0NzQ2MDJiMjQ5ZmIzMmZiYjYxMjk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5MDgwNWMyNWY5YzRkMzI5MDhkNDZmNjhmNDY1ZTFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEyNmYzMzk4NmZlYTRkODdhOWQwODBiYjRjOGI0ZDU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc2MjMxMDQwNDc1OCwtMTIyLjQxNDcxNDI5NTU3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzViZmI1Yjk2NzFlNDAzNjk3ZjI2Njg4M2E0YWEyZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzYyMzEwNDA0NzU4LC0xMjIuNDE0NzE0Mjk1NTc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YzgyZDhiZmZmYzU0YmQ0YjE2MjUwZGU1MDRmNTZhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzUxMTg4OTU2OTUsLTEyMi40MTgwNDU0NTI3NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTNkNTZjNGY4ZDc0ZGIxODBjNTA3MDg4MDg2NDJjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjAyMzg0Nzg5NzUsLTEyMi40MDExNjE1NTU2MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODc0MWVmZGRkYzM0YzE1OGNjMjc5YTg1M2MxOGY1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyNzAwNTMxOTYyOTk5NSwtMTIyLjQwMzQwODY2OTE5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4YmVlMzI2MGJkODQ4ZGU5YzNmNmQ5NWQ3ODJlY2RhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM0NDM3NDE0MSwtMTIyLjQxMjkzMDUyMjA1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1NGNiMDMyYjA4MTQ5NTVhZjFiMDNhZGE5MDI1N2ZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzUzMDE4NjUzNzQ0NjA0LC0xMjIuNDE4NTg3MTcyMjE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQ3ODdiNDFmNWI1NGVlOWIwYWQyOGY4YjhkMjk2ZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQwNDE4Mzg1MDQxLC0xMjIuNDE0MzcwNjI3NDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjU5YmE4OWE4Yzc1NGYyOTk4OGNmZDRiNTZhZGZjMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTA1Mzg5OTM3MjUsLTEyMi40MDM5MTU2ODE1NzEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4NmQwYTNhY2MxMzQ1ODhhMjZlOTUxYzZiYTFiNGFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzMDk5ODI0NDU5MjEsLTEyMi40MTkxODMwOTYzNjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Y2M4NDI5NTdiNTA0NmU3YThlMjM3MTczNzJmYjhiNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0MDczNjA1NDgzNTc5LC0xMjIuMzg4NzUzMDQ2OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTRiMDQ5NzJhODY2NDA4M2E3OTA1MjAxMjA4NWUzMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ5OTEyOTQ0MzY2LC0xMjIuNDM3Nzk5NzAzNDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2NhYzdiZmE3MjZkNDg3MGI3MDg0NDllZDFmOGNkMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzcwOTAyNzQzNjY5LC0xMjIuNDIxMzMyNjg0NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTcwOGY5YmEzMTdhNGExMjgxYjkxNjZlMWJmOWEzMTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzcwOTAyNzQzNjY5LC0xMjIuNDIxMzMyNjg0NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDg2OTFmNmM2NmY4NDE4MzgwMWE3ZjM5NWViOTI3YzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIyNDU4MjIzOTE3LC0xMjIuNDQ2NjEyOTc4ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTkyNDExZGViYjFiNGRiZDg1MThkZjJmOWM1YTc5NjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzAwMzc5OTk1MTI3OTUsLTEyMi40MDQ1OTQxNDA2MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNmRiOWY5MGZjNzE0OWQzYjQ0NzVjMTcxZGRmMGE4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5NTMzMzgyNjc0MzYsLTEyMi4zOTczNzM3NDAwNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMzVhMmExODg1NTY0Yzc2ODRlY2ZkZjg1YTc0ZTVhNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzUxNTg3NDE2MjI5NSwtMTIyLjQwNzQzNDk4OTUyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY1MmFhMmU4ZGY4NjRiM2M4NWZhOGM1YTMxOWUwYWU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4ZmQ3ZTE0MGU2NzQ0NzE5ZmRhMjc4YzAzMWI5YmYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4YmNhMzU2ZTdiMTRmMGNhZGQ1ZTlmMWFiMTZkNTAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczMjkxODA2OTAyOTk2LC0xMjIuNDM2NjE0MTgxMzMxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZmVkZWEwNjM0OTc0OTdkOTA1MzlmYTY1MmFiN2MzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MDUyNzU3ODUwOSwtMTIyLjM5Njg0OTAxNTE3MjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjliMGVlZjI5OTZmNGE2YmJkMGI3ZDE0NjdmN2ZjZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA1Mjc1Nzg1MDksLTEyMi4zOTY4NDkwMTUxNzIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3ZTk2MjVhNWRjMDRiMzM5NGJmMjkxODJmNWM4YTkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NDE4MDcwNjYwMjA0LC0xMjIuNDUwMDAwNzkwNDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRlM2EyYzU1YmMwNDI3ZDlmOTIxZjBkOGE1Y2FlMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyMTE0NjQ3MzU5LC0xMjIuNDAwODM0MjgzMDMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzBmNTZlNGY1MTcxNGIxZGJkMmYzMTBlOThiYTM2NjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMDY1MzI0MzkyMDUsLTEyMi4zOTk4MDIxNDU3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjQwZGU0ZjI2NjQ0NTRlYWRkZDZiOWNlY2YwOTMwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmIxNGJlNWQwNmZkNDZjODg1ODY1OGMyMWYwNTczZjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjM5NzQ4MjQxNjA5LC0xMjIuMzk0OTI4NDc1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyNDY5YjA3NGFlMDQ2N2FiY2E1ZTcxNGM3YzhhMDZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMDEzYTk1ZjllZjA0NmVkODQ3Njc0ODJlZTU2NTE0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODMyMzU0NDk5MDQsLTEyMi40MTE4NTcwMzI1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3NWQ5NTY3YTIxYzQxZWFiM2FjYWEyNDA3OTcyZGEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU1OTk3NzMzOTg1NiwtMTIyLjQwOTQzNTYxNzEwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5OWRhOTI1MThkYzRhZjk5YTFhNjgzOTZjNDA0OGQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3MDc5ODE0NDQ0MywtMTIyLjQyNTg4MzM1ODE0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE5NjM0YzM4N2EwNzRiMzA4YjY4NzQ2ZDM1OTcyNjBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM2MDM3NDQ2Njg2MjA0LC0xMjIuNDE1MTI2NTQzMDAxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzgyNGRlYjdlMWI0ZjQ0ODhiMmIyNDhjMjBlMWEzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxMjc2Nzg4NDgyMSwtMTIyLjQzMTkyODAxMTA4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2MjE0YWNkYzhlMTRmMDliNTNlMmY5YzIwNmQzNmEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg5NTcxMDI1NTg2MywtMTIyLjQwMjE2MzcxMzYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlNTVmZGVlN2MxODQyZTBhMTMzMDRkODZkMjk3YmFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwNzQyOTE2OTU1OSwtMTIyLjQyOTMwNjcyODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkOWY1MzMyZDhhMzQ4YmNhOTVkYWJmY2I3N2IyNTM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM2NTU2NTM0Nzk0LC0xMjIuNDEzNzkwOTcyNzgwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNWFkMGEyMmJiZTc0NjEyODljODU2NmU4NWIzMjM2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDc0MjkxNjk1NTksLTEyMi40MjkzMDY3MjgzNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NTliN2QwY2I4Mjk0MDc3YTM1MGJjYzgyMzQ5MjQxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNzM2MjM2MDUyMTI5NiwtMTIyLjQyMjA2NzE4NDkzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1NDhiZGU3ZjU4ZTQxNGU5YTk3MWYyNDM1ODRhOTNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM3MzYyMzYwNTIxMjk2LC0xMjIuNDIyMDY3MTg0OTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFlYTVmMTQ0MWFiNGQxMjgxNGQ2MDZlNGYwOTJkNTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODU5OTg4MzIzNzk3OTYsLTEyMi40MTE3NDczNzE5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYmVjNzEzYjllYjE0NjIzYTgxMTUyYjQzZDcwM2U0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MzM3NTgwNTgwNTksLTEyMi40MjA0MzQ3MjQ1NTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkZGRhZGMxNTg5OTRiOTdhYmQ1MjM5OWMzOGI2YTJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1MDIyNjYyMjc4NiwtMTIyLjQxMTk4NzY0MzU5NTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWEwNTE0NWNmMjZhNGY0M2JjNjRhYjFmNzE4NWI2ZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ2MjA2NDkxMDY0OTUsLTEyMi41MDAzODA0Mjc5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNTk0ZmUzMDFlOWM0M2VkYmU2ZDgzMjhkY2U4Mjk0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTE5MTgyNjcyMTcsLTEyMi40NjY1NTg3ODA2ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YTNiYTRlMGE1MDU0NTVkODllNTU4ZDI1MTVmY2YzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0OTA4NDE3MjkwMjgsLTEyMi40ODY5MjU5NjAxMTQwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF83NWU1ODg2ZWE0NTQ0ZmZhOWZkOTA1MWQ3ZGQzMjc3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3ZDc2MTg4YTQ5NzRiNWQ4Y2YwODljZjhkNzI3ODQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY4NTM2MDEyMzU4MywtMTIyLjQxNTYxNjMzODMxOTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjc4MGIxZjEzNzA3NGRhMDllNDdhNDQxYmIxNTAxOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjYyNDJjMWNlODU0NDhkZTliMDg1Mjk3Yjc3NDA4ODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzc1ZTU4ODZlYTQ1NDRmZmE5ZmQ5MDUxZDdkZDMyNzc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjM0NzEwYjk4NWFjNGUzZmJiYWNhMjg3MWRlNWI5NDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzUyNjgxNDY5MDgzOTYsLTEyMi40NzI3MTU3NTk2MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzVlNTg4NmVhNDU0NGZmYTlmZDkwNTFkN2RkMzI3NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MWU1YTI5NTJmODRjM2U4NTg5NDA2MWE2ZDBhMTM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmMGMzODRlYWQ2YzRmZDU4M2ZhODE5NDFmOWNmNDYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhNDAxMzE4ZGNiYzRhNDBhZWQxNWI2ZDVlZWZlNmIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI5OTgwOTY3Mjk5NTk2LC0xMjIuMzg4ODU2MjA0MjkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MWFkNjFjZTVhNjE0ODY1YmNmMjU3Yjc5OWRmODAxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NTc4ODM3NjY4ODc5LC0xMjIuNDEyOTcwNTM3NTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzJkMThjMzI1OWE0ZjRiYmU4N2I3Mzk3OWUxN2I1NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTA1MDEyMTQ2NjgsLTEyMi40MTk2NzE3ODAyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1NjdiNmFlNGNhMzQ5NzhiMGY5NWE4YmRhMjFlMzdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MDE4NTU1ODI5LC0xMjIuNDI2MDc3MTc3Mzc0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EzNDg4MGQ2NDU0MzQxYTE5Y2Q0ODYyNTk3OTljOGFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgwODc4OTM2MDIxNCwtMTIyLjQwNTcyMTQ1NDU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQwZTQwMjYwZWU0NDM0ZTkyNDgzNDE5ZTQ0MDZiZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM5ODA1NTkyNjM0LC0xMjIuNDExNzc4Mjk1OTkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYmQ1ZGY5YjJmNWE0YTg1YTBmZWViZjk5Nzk1ZGZmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTc4NzYyMTgyOTI5NSwtMTIyLjM5MzM1NzI0MTQ1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDlmMTdkNmM4ODhkNGFkODg5OGM5NDYxNTFkZDE0MWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjA5NjY5NjE1NDk5LC0xMjIuMzg3MTgxNjM1OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MDM2MTVmNjI1YmY0NzdmOWQ4OGQwNmFjYTlmZDRmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQ3ODE1Nzg2OTUwNSwtMTIyLjQ3NzM3NjUyNDAwMjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YmU3YmQ0OWMxOGY0MjFiYTM2ZDRjY2IzYTY5NGM2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NTczODk0Mjk2NTQ5NSwtMTIyLjQ3Nzk2MDMyNzI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmFlYjhmNDY4MTMyNDcxNGFkODVmMzUzODA4OGJhN2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzU2OTcwMjc1NDgyMDYsLTEyMi4zNzY3NTc2NTU1MzAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjY5NDk1ZThiM2VkNDc0NDk2MGQyY2M5NDEzNzAwODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyNzA1MTk5NTkyLC0xMjIuNDMyMzI1ODcxMDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMGU5MWE5NTJhZmM0YTU4OThhMDg2NzgwMmNiMjkyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5MTY0Mjk4MjM4NCwtMTIyLjQwMDkwODY5ODg4OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YzgyNzM3MGVmOWM0ZTIyODhkNGRiMmExMGNlNDJiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MzcwNjkzMDE1NDUsLTEyMi40MDg1OTUxMTA4NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyNzI4ZTcwOGMzZTQyNDNhZTZkZjM3ZmU5NTgxY2Q4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU3Mjg5NTkwNDU3Nzk1LC0xMjIuNDA2ODcwNDAyMDgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZjIxOTUxOTc3YTg0ZmMxODlkYmEzMTRiYjZmY2EzMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0ODkwNjMwNTE4MjksLTEyMi40MjAzNTQ3ODA4NjA5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFjODA5NzQ5OWFhNGI2NWFkYWJmYzY5OGM0NjhhY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTU3NjU0MjY5OTUsLTEyMi40Mzk5MDk3NjY3NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2NTIyNDEyZWI3YTQxOGE5NGNiZjk2Mzk4OTQyMzljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNTY5OTM4NjkxOCwtMTIyLjQwODQyMTExNjkyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmYyYzZkMGQ1OWZkNGMyZDk4NDg0NzIxNTdjZGNhYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzM2MTg2Mjc2NDU2MDQsLTEyMi40MjIzMTU2NzA3NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiMzdjNDg5OWMyMzRiZGI4Zjg4YTg0YmJhZTIzMGZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzkyODQxMjg0MDQ0NzA1LC0xMjIuNDI0NTE5ODM1MDA5MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4OGY0YWY1NDAxZjRhNmU4OTg5ZWM1YTA5MWMwZTQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU0MDk4Njg4MjA2Nzk1LC0xMjIuNDE0MjMzODQ5MDM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyYzk2MGJlYjFhMDQxMGQ5MTAwZmE3NThmNmJjMGI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU0MDk4Njg4MjA2Nzk1LC0xMjIuNDE0MjMzODQ5MDM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhY2YzYzI0ZWYwYjQzMmRhODdkMmY4MDMwZGI3YjMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzcxNDkzOTk2OTQxNiwtMTIyLjUwNzc1MDEzMTAwNDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjExMmFiYjQwOGE0YTM3ODJiNzIyMWE4YTViNWMyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxODMwMjIwNDc2NjAwNSwtMTIyLjQ3NDQ0NDYzOTU5NDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzRlMDc2ZmRmNmY0MWYzODJjMmE4M2FlYWM3OTJmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDU3NTIzMTc2MTUsLTEyMi40Mjc1NjI1OTY5ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwMmY2MjZmYTgyMzQwYWY4M2E2ZjY1NTNlMTg1YzgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3NDM3ODMwOTExMiwtMTIyLjQxOTIwMzAwNDI2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWYwZGEzNjliZTE3NDg1ZDgxZDFiMDA2ODJlMzJkODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkzNjg4Mjg0NTMyLC0xMjIuNDEyNjkwMTQyMzA4MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxZDMyYzExYWYzODRhNmJiY2IwMmZmZTVmNGQ5YTgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzA5MjAxMDQ2MjM3OSwtMTIyLjQzNDYwOTI4MDM1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTI1ZjQ5NmZlMjA0NDY3Zjk1MzIwY2E1Nzk0NzM0MTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc5MjA5Mzc1NTMyOTUsLTEyMi40MTA4ODI4MjU1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0MmZhMTkwMDIxZDRmYTY5ZTdiODcxM2Q3NDY5NGQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuODAwNDU2NjQ3MTAzODksLTEyMi40MDE0MzI3NTQ3MjIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWFiYWE5YmU4OWQzNDA0Mjg0OTliYTc0MDcxMzc2OGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDM1NTUwNTQyMjY1LC0xMjIuNDIxMTI4MDI5NTA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MDAwMDQ1ODUyNWM0ZTgxYWQwZmEwOTc2ZWY2ZTA2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NjU2NDc2MDc2ODUsLTEyMi40MDcyNDQwODcwMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwNjM0NmY2YzllMzQyZjlhNWJlYzYzNzk2MzdiNWFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDhmNjgxYzIzZDI0NTk5OWU5ZDg5YWM3MzJmNTZmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MTU2NTU5MjgwNDUsLTEyMi40MjM4MDMwMDE5MDA5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2YxYWFiNmE5YmMxNDNlOTk2ZDVkODFjZWJkNTIxYmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDQxOTI3NTA4OTMyMDUsLTEyMi40NDQ2ODU0ODIyNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyZmJjNjdjMTEyMTRjZGY4YjMyYjJiMTQ0Y2RjYzAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDY5MjgyMDA0MSwtMTIyLjQxNTc1NzAzOTE5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTJmNzkyZjkzZjM3NDViYjgzOTYyYWM3MWU2ZGE5NDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjg1MjgwNjI3NDY1LC0xMjIuNDc1NjQ3NDYwNzg1OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZDA2NmEzZDU0MDRhMTk5OTIyNGQ0MGVlYWUzZmM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQyODUxNzM3NDQ0ODk0LC0xMjIuNDIwOTY3NDQwNTY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NmY3NGU3NzRjNjA0ZTRmOGE3MjZjN2JjNmZjZWMzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjExOTg0ODg5MzEsLTEyMi40MTU2Njk2NjE0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3MWM3ZTE3YjgwZjQ4OGJhZTUyZGUwNjdiNGQ3M2ZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc5MTY3NDIxODk2MywtMTIyLjQwNjM0NjQyNTYzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGUxMTNhNmFiNjg0NGI2MjljMDRiMDgwOGE2Njc2NzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjU3MTg0Mzk1MjgyLC0xMjIuNDA5NTI5OTEzMjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzM5NWM5MmIxNDM0OGZmYmI0Yzg3ZmI3MTViYWRjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQyMDcwNjcxMSwtMTIyLjQwMzQwNDc5MTQ3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2QxNjU4ZjQ1Njk0OTg3YWQ5MTdkNTY0MWYxZDFiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NzUyNDMwODc4MywtMTIyLjQxMDczODA5NzMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGNjMjcwNDU2NTQxNDJhNmFlYWU5NmMwNmQzN2RjN2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Njc1MjQzMDg3ODMsLTEyMi40MTA3MzgwOTczMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwMmRhOWUwMjNhYTQwODlhMjUyZGFmMzBkZmI0ZTc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNjMWUzMTVhOWRlNDE0ZjlmMGU2ZTM3MmE1NGNlOTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTMxMDgzNDMzMjY0LC0xMjIuNDQ0MzE0MDI1MTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZTY2MGQ2MDc1MTY0NTYzYWYwOTNiMjVhYTMwMzRiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NjAxNjAxMTQxMDMsLTEyMi40MDM2NDQ2MjA0MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2ODg3MWE2Njk5ODQ5NDc5NjJkZjUwNzE1MjE1OWE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI1NmFkYjE2MGEyNGE0ZGExZTdlZDBjMzdjY2Q0NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzYyMzEwNDA0NzU4LC0xMjIuNDE0NzE0Mjk1NTc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1MWMyYmJiNGQyNjRjYjU5N2FiYjhjNjA0ZTg2YWIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc2MjMxMDQwNDc1OCwtMTIyLjQxNDcxNDI5NTU3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZGY2MjFlYWZjOWM0MGZhODQzNTE2NzdlNTY3MDIyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzUxMTg4OTU2OTUsLTEyMi40MTgwNDU0NTI3NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5YTg1NTcxYWIyMTQ2ODE5NDk4MjhlZDVjZTMzYzkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgyMDIzODQ3ODk3NSwtMTIyLjQwMTE2MTU1NTYwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE5ZmE0YmE3YmExNGM4NWI1N2JhMTIyZGNmNTk1Y2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjcwMDUzMTk2Mjk5OTUsLTEyMi40MDM0MDg2NjkxOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhZmNhNDkwODVkYjQxNmI5MmMyYjhkYzIyYjhiNWFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM0NDM3NDE0MSwtMTIyLjQxMjkzMDUyMjA1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjUyZjhmNDQyNzExNDE1N2IzMGI2OGY1ODA0M2Y0NTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTMwMTg2NTM3NDQ2MDQsLTEyMi40MTg1ODcxNzIyMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwNTgwYmM4MGRkMDQwOGJiNjE3MmQxYjQ3NWI5MDU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc0MDQxODM4NTA0MSwtMTIyLjQxNDM3MDYyNzQ5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQ3NDk0MTkyZDc3NDE5MThhNDIzN2ZiMTQxNTZkNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTA1Mzg5OTM3MjUsLTEyMi40MDM5MTU2ODE1NzEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWFhNzljMjQ3ODA5NDZkMzg3ZWEwNjgxY2U0ZjRjYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODMwOTk4MjQ0NTkyMSwtMTIyLjQxOTE4MzA5NjM2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODkzM2E4NzBjMzBmNDYzNjhlZGRlOTZmMmE3ZmViMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDA3MzYwNTQ4MzU3OSwtMTIyLjM4ODc1MzA0Njk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQ3ZGM2MGNkMWY2NDdmMmI4OGM3NTQwMzZiYjk2YzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ5OTEyOTQ0MzY2LC0xMjIuNDM3Nzk5NzAzNDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZWQ5ZTk2YjNlNTU0OWRmYjA1ZDhmMWZmNjlhNzM1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzA5MDI3NDM2NjksLTEyMi40MjEzMzI2ODQ2MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0MzEwMGRmZmY3YzQ2NzZhOTM2YzBmOWQyYjViNWRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3MDkwMjc0MzY2OSwtMTIyLjQyMTMzMjY4NDYzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQyNDJkNTlhZTU2NGJiYjg2M2U5MjNiM2FkNDU0MjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIyNDU4MjIzOTE3LC0xMjIuNDQ2NjEyOTc4ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYWNmNGJlZDg4MDE0NjA2ODBkYzMwOTk3MDViNjY2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDAzNzk5OTUxMjc5NSwtMTIyLjQwNDU5NDE0MDYzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTA5ZTI0MzJhOWU3NDVlOTlmYWI3YjVmNTcxZmVjNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTUzMzM4MjY3NDM2LC0xMjIuMzk3MzczNzQwMDY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMjc3YTA4ZWQ1YjI0N2RhYWQzODM5ZmY5ZWIwNmYxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzUxNTg3NDE2MjI5NSwtMTIyLjQwNzQzNDk4OTUyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjY4ZmZkMjU1OGNlNDhjZmFjZWRjZWY1M2Y0MTdkYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Nzg1MjMzNzc2MDMyLC0xMjIuNDAzNDY0MDgwMDMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDU5NWJlZjExYTY0NWI5OGI1MDE1MDIxYTJlMzBkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3ODUyMzM3NzYwMzIsLTEyMi40MDM0NjQwODAwMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlMjViYzlhMTUyOTRjMmJhZjEzMTg4Nzg2NGY1MDE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczMjkxODA2OTAyOTk2LC0xMjIuNDM2NjE0MTgxMzMxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlNDE1ZTIyN2NkMDQzM2Y5M2I5MGQ4YmZkNjc3OTU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgwNTI3NTc4NTA5LC0xMjIuMzk2ODQ5MDE1MTcyMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5YWY3NWFiYzIwNTQzZDY5ZWJmMTdlMzU2Nzc3ODZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgwNTI3NTc4NTA5LC0xMjIuMzk2ODQ5MDE1MTcyMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlZDc3MjVmNDRjYjQyMjlhOGRjNDJmYTY5NWQxZmE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NDE4MDcwNjYwMjA0LC0xMjIuNDUwMDAwNzkwNDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MmNlOTFjMzk3YTk0Yzg2ODIwZTRjZGEzMzE3NjE3OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTIxMTQ2NDczNTksLTEyMi40MDA4MzQyODMwMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5ZDczZjI4ZjdiMjQ0Yjc4ZmM4NDViYThhZmUzOTBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MDA2NTMyNDM5MjA1LC0xMjIuMzk5ODAyMTQ1Nzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZTcxYzVmMDdhZWI0OWI4OTNkNDc4M2Y2MDhjYjQ3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTQ5MmJhZWMyNTA0NTQyODVjNzYxOGJiYjUwNzdlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNDU3NDM1NjJkOWI0MDYzOTcxM2UwZGU1ZTIyMWI2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZGZlZDJiYWUzMTE0ODdmOWY5M2JiM2EwMWUzMjY2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODMyMzU0NDk5MDQsLTEyMi40MTE4NTcwMzI1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjllNWYzZTBkNjU5NGYyZWJhMDk0MGU4MzZkNjU2YTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTU5OTc3MzM5ODU2LC0xMjIuNDA5NDM1NjE3MTA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzkzNjk2MjYzYTk0NzVkODFiMmQyNTEwMmZmNDdkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzA3OTgxNDQ0NDMsLTEyMi40MjU4ODMzNTgxNDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MzA3N2Y2NDFhMjQzZWM5NDBkMzU1NTJiNDI3NmNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM2MDM3NDQ2Njg2MjA0LC0xMjIuNDE1MTI2NTQzMDAxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlYTNlNTE0MmM0YjRkYWNiOTE0MzdlYTE0ODFhNThmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEyNzY3ODg0ODIxLC0xMjIuNDMxOTI4MDExMDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjAxZGI3YTRkYmY0ZWNjYjUxNjUxMjVjMDhlNjQ0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4OTU3MTAyNTU4NjMsLTEyMi40MDIxNjM3MTM2MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlMDVjNzZkNjI1ZDQ1ODY5NDExYmMwMmNmNWQ0MmZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwNzQyOTE2OTU1OSwtMTIyLjQyOTMwNjcyODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDgxMmFhMWM5MDg4NDlmOGE4MGIwZjMwODNjMmU5YzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM4MzY1NTY1MzQ3OTQsLTEyMi40MTM3OTA5NzI3ODA5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzA0NjRhYmM4YzBiNGY0ODgyNjkzNTUxMTA4NjBlNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzA3NDI5MTY5NTU5LC0xMjIuNDI5MzA2NzI4Mzc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Mjk1MTVkODEwNjA0OGZhYjRkNDQxMmEwYjgwYjMxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNzM2MjM2MDUyMTI5NiwtMTIyLjQyMjA2NzE4NDkzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmI2ZTRkZWM2Nzc3NDk1YTg4MzA5ZTE2MDg1OTdiOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzczNjIzNjA1MjEyOTYsLTEyMi40MjIwNjcxODQ5MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNhZjE5YjA3ZmNkZDQ4OTk5MTk4MTMwZGEwOGY2Yzc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1OTk4ODMyMzc5Nzk2LC0xMjIuNDExNzQ3MzcxOTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTI0NmVjMWM2Yjc0NDQ0YjFjZDEwMTQwMzc2MDNlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MzM3NTgwNTgwNTksLTEyMi40MjA0MzQ3MjQ1NTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTIyYmFiODE3NzAwNDM1NmJjOTYwMzI4MGI4NDQ4MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODUwMjI2NjIyNzg2LC0xMjIuNDExOTg3NjQzNTk1MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkYzZjNDliNzU1MjQxMjFhNmU0YjIzNmRjZDExMzgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc0NjIwNjQ5MTA2NDk1LC0xMjIuNTAwMzgwNDI3OTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMjFkZmU4OWQ4MGY0MDVmYTVlYzczY2E5OTFlNzZiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTE5MTgyNjcyMTcsLTEyMi40NjY1NTg3ODA2ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZWU2Y2EzMWY1ZDQ3NmU4NjZjMzRkOGQ5ZDg2MzVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQ5MDg0MTcyOTAyOCwtMTIyLjQ4NjkyNTk2MDExNDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZWU1NjI5NjlhOWM0ZmU4ODE2ODA5NzRiNDJiMjY5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2ODUzNjAxMjM1ODMsLTEyMi40MTU2MTYzMzgzMTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJ5ZWxsb3ciLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzNkYjkzYTI0ZDEwMjRmN2Q4NmQwYTRjMzBhZGQzZmE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjdlZmYyNjU5OGVkNDk3ZTk0Mjk5ZGExNDY1MWIwNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTI0OTNmNGU3ZWU0MWYzYTdkODE4N2M4YmExYjlhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQyOTc3MTQwNzQsLTEyMi40NDk3NTE2NTI1NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAieWVsbG93IiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8zZGI5M2EyNGQxMDI0ZjdkODZkMGE0YzMwYWRkM2ZhOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NGUyNjk2ZDE0MjQzZWZhMzY2MTg2NThlNDI2OGNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM1MjY4MTQ2OTA4Mzk2LC0xMjIuNDcyNzE1NzU5NjMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogInllbGxvdyIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfM2RiOTNhMjRkMTAyNGY3ZDg2ZDBhNGMzMGFkZDNmYTgpOwogICAgICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNDc0NDVkNDEwMTg0NmE4ODY4NmFjOGE0MmU2YmMyYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQyMDcwNjcxMSwtMTIyLjQwMzQwNDc5MTQ3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2U4MmQ3ZDk1MGNjNDY4NGE3NTVmNTMyNDYyZDRhMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGVlYTY5MzJkOTgwNDQwNWI5ZGE0MDA3M2JkNWRkMWUgPSAkKCc8ZGl2IGlkPSJodG1sXzBlZWE2OTMyZDk4MDQ0MDViOWRhNDAwNzNiZDVkZDFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XRUFQT04gTEFXUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2U4MmQ3ZDk1MGNjNDY4NGE3NTVmNTMyNDYyZDRhMjQuc2V0Q29udGVudChodG1sXzBlZWE2OTMyZDk4MDQ0MDViOWRhNDAwNzNiZDVkZDFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDQ3NDQ1ZDQxMDE4NDZhODg2ODZhYzhhNDJlNmJjMmIuYmluZFBvcHVwKHBvcHVwX2NlODJkN2Q5NTBjYzQ2ODRhNzU1ZjUzMjQ2MmQ0YTI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc4ZGFiY2E3YmM1ZTRjNzc4OWM2OTVhZDY3NjNjNmY5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOGQ1YjYxNTFmYjI0ODRmOWMxYmNhOGNjMTY5NjFkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTRkZjMzOGZjMWQ0MGNkYjdhYjU3ZmY2YWVmMDZmOCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjk0ZGYzMzhmYzFkNDBjZGI3YWI1N2ZmNmFlZjA2ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldFQVBPTiBMQVdTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOGQ1YjYxNTFmYjI0ODRmOWMxYmNhOGNjMTY5NjFkOC5zZXRDb250ZW50KGh0bWxfMjk0ZGYzMzhmYzFkNDBjZGI3YWI1N2ZmNmFlZjA2ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83OGRhYmNhN2JjNWU0Yzc3ODljNjk1YWQ2NzYzYzZmOS5iaW5kUG9wdXAocG9wdXBfMzhkNWI2MTUxZmIyNDg0ZjljMWJjYThjYzE2OTYxZDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTk5NTRhMjVjNjlhNDU5M2IwZmM5MGYxMDI3ZmI1YWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjk5ODA5NjcyOTk1OTYsLTEyMi4zODg4NTYyMDQyOTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80M2FmOGE0ZDFmODE0NWM0YjY2MDg5MThmMjliMDNjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMTc0NjcyZWMwMDE0YjZjYTc1OTQyOTBmOGY2YjRhNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjE3NDY3MmVjMDAxNGI2Y2E3NTk0MjkwZjhmNmI0YTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldBUlJBTlRTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80M2FmOGE0ZDFmODE0NWM0YjY2MDg5MThmMjliMDNjMC5zZXRDb250ZW50KGh0bWxfMjE3NDY3MmVjMDAxNGI2Y2E3NTk0MjkwZjhmNmI0YTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOTk1NGEyNWM2OWE0NTkzYjBmYzkwZjEwMjdmYjVhYi5iaW5kUG9wdXAocG9wdXBfNDNhZjhhNGQxZjgxNDVjNGI2NjA4OTE4ZjI5YjAzYzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmFkMjcwMWQxNDU0NGI3Y2EzMmM1OTc4ODMwMTM1NzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODU3ODgzNzY2ODg3OSwtMTIyLjQxMjk3MDUzNzU5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxYWZmZTRiMWI3NDRmNDZiNGFiZTc0M2M2N2Q0NGJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhMDQyNDQwMjk5MzRkYTdiYjRkODQxYWUwYjk3NDJkID0gJCgnPGRpdiBpZD0iaHRtbF8yYTA0MjQ0MDI5OTM0ZGE3YmI0ZDg0MWFlMGI5NzQyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MWFmZmU0YjFiNzQ0ZjQ2YjRhYmU3NDNjNjdkNDRiYy5zZXRDb250ZW50KGh0bWxfMmEwNDI0NDAyOTkzNGRhN2JiNGQ4NDFhZTBiOTc0MmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYWQyNzAxZDE0NTQ0YjdjYTMyYzU5Nzg4MzAxMzU3NS5iaW5kUG9wdXAocG9wdXBfNDFhZmZlNGIxYjc0NGY0NmI0YWJlNzQzYzY3ZDQ0YmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGYyY2U5N2UxZDJkNGY5YmE2ZDA5OWU2NmI2NjcyYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjUwNTAxMjE0NjY4LC0xMjIuNDE5NjcxNzgwMjk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWIxMWJiMjI1ZDdhNDM1OTg5YmU5YzkwYjA2ODczNzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmZhMmEzZGI2NzQ1NDFmZWIwZTc0MTQ0NGI2NDFkOTAgPSAkKCc8ZGl2IGlkPSJodG1sX2ZmYTJhM2RiNjc0NTQxZmViMGU3NDE0NDRiNjQxZDkwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViMTFiYjIyNWQ3YTQzNTk4OWJlOWM5MGIwNjg3MzcxLnNldENvbnRlbnQoaHRtbF9mZmEyYTNkYjY3NDU0MWZlYjBlNzQxNDQ0YjY0MWQ5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBmMmNlOTdlMWQyZDRmOWJhNmQwOTllNjZiNjY3MmFiLmJpbmRQb3B1cChwb3B1cF9lYjExYmIyMjVkN2E0MzU5ODliZTljOTBiMDY4NzM3MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMDJhZDVlYzQwNjI0ODg1YjZkZTgyNmJlOTkwODIzMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODAxODU1NTgyOSwtMTIyLjQyNjA3NzE3NzM3NDk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzc4YjRiMDgyOGQ3NGM5YjgyZmNiODUwM2E2ZGJhODAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTUyMzU2NzI2ZGU4NDAxNThkOGUwZDk1MTg4Njg5MTUgPSAkKCc8ZGl2IGlkPSJodG1sXzk1MjM1NjcyNmRlODQwMTU4ZDhlMGQ5NTE4ODY4OTE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NzhiNGIwODI4ZDc0YzliODJmY2I4NTAzYTZkYmE4MC5zZXRDb250ZW50KGh0bWxfOTUyMzU2NzI2ZGU4NDAxNThkOGUwZDk1MTg4Njg5MTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMDJhZDVlYzQwNjI0ODg1YjZkZTgyNmJlOTkwODIzMC5iaW5kUG9wdXAocG9wdXBfNzc4YjRiMDgyOGQ3NGM5YjgyZmNiODUwM2E2ZGJhODApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDhjNDQ3ZmYwZDA0NGVlMTgzZWZiZGI5OGJkZGJlYzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA4Nzg5MzYwMjE0LC0xMjIuNDA1NzIxNDU0NTY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZThlYmVkNmUxMWJjNDkwYTllYzFiZTI1Mzc3MGEwOTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDlmNjg5YzA4Y2Y1NGZkZGJhNWMyYWNhMjc3ZjdlZGUgPSAkKCc8ZGl2IGlkPSJodG1sXzQ5ZjY4OWMwOGNmNTRmZGRiYTVjMmFjYTI3N2Y3ZWRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZThlYmVkNmUxMWJjNDkwYTllYzFiZTI1Mzc3MGEwOTYuc2V0Q29udGVudChodG1sXzQ5ZjY4OWMwOGNmNTRmZGRiYTVjMmFjYTI3N2Y3ZWRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDhjNDQ3ZmYwZDA0NGVlMTgzZWZiZGI5OGJkZGJlYzIuYmluZFBvcHVwKHBvcHVwX2U4ZWJlZDZlMTFiYzQ5MGE5ZWMxYmUyNTM3NzBhMDk2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgxY2RiNjdlYWUwYzQ2ZjRhY2MwZTFkN2M2YjZhMGJkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzOTgwNTU5MjYzNCwtMTIyLjQxMTc3ODI5NTk5Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4YjVkMTBjNDE0MTQxZDhiMjc1ODFiM2NhNTAwZjBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyNWRlZWQwYTc4OTQxZTA5ODJlNjNmOGFlMmQyNGY2ID0gJCgnPGRpdiBpZD0iaHRtbF9kMjVkZWVkMGE3ODk0MWUwOTgyZTYzZjhhZTJkMjRmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OGI1ZDEwYzQxNDE0MWQ4YjI3NTgxYjNjYTUwMGYwZi5zZXRDb250ZW50KGh0bWxfZDI1ZGVlZDBhNzg5NDFlMDk4MmU2M2Y4YWUyZDI0ZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MWNkYjY3ZWFlMGM0NmY0YWNjMGUxZDdjNmI2YTBiZC5iaW5kUG9wdXAocG9wdXBfNzhiNWQxMGM0MTQxNDFkOGIyNzU4MWIzY2E1MDBmMGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTc3ZDUwN2NhNDcxNGUwODk0YjA3OWI2MGUxMThhYzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU3ODc2MjE4MjkyOTUsLTEyMi4zOTMzNTcyNDE0NTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NTg2OTE2MWNlNjM0NzM0YjYzMDRmNWIzNjQ2N2ViYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjAwZDE5OTExMjc0YTNhODg4NjIzZjZlN2UwMmRiZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNmYwMGQxOTkxMTI3NGEzYTg4ODYyM2Y2ZTdlMDJkYmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldBUlJBTlRTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NTg2OTE2MWNlNjM0NzM0YjYzMDRmNWIzNjQ2N2ViYy5zZXRDb250ZW50KGh0bWxfNmYwMGQxOTkxMTI3NGEzYTg4ODYyM2Y2ZTdlMDJkYmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNzdkNTA3Y2E0NzE0ZTA4OTRiMDc5YjYwZTExOGFjNC5iaW5kUG9wdXAocG9wdXBfNDU4NjkxNjFjZTYzNDczNGI2MzA0ZjViMzY0NjdlYmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2E4NmM4YjJiYTYyNDQzZmIzNGU1NDU0NzFiNDE2N2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjA5NjY5NjE1NDk5LC0xMjIuMzg3MTgxNjM1OTk1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzQwMzMzYWFhODczNDIzZGFhZDEzY2Q5Njk0Y2I5YTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmEyNGM3NDI3YWI2NGQ1MzhiNDY4ZDU4OWY0NjU0YWQgPSAkKCc8ZGl2IGlkPSJodG1sX2ZhMjRjNzQyN2FiNjRkNTM4YjQ2OGQ1ODlmNDY1NGFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSVNTSU5HIFBFUlNPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzQwMzMzYWFhODczNDIzZGFhZDEzY2Q5Njk0Y2I5YTguc2V0Q29udGVudChodG1sX2ZhMjRjNzQyN2FiNjRkNTM4YjQ2OGQ1ODlmNDY1NGFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2E4NmM4YjJiYTYyNDQzZmIzNGU1NDU0NzFiNDE2N2YuYmluZFBvcHVwKHBvcHVwX2M0MDMzM2FhYTg3MzQyM2RhYWQxM2NkOTY5NGNiOWE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM4Yzc1MGU2OTgzNzQyZjhiMzllN2E5MWMzMzYzODE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NDc4MTU3ODY5NTA1LC0xMjIuNDc3Mzc2NTI0MDAyOTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOGY0MjU4ZDRmMTI0NzA4OWI0MTY1NGU0ZTJhMWI4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMmE0MGUwYmM3NTU0OTIzOGU3YmNmOTQ5YWRjYjVlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTJhNDBlMGJjNzU1NDkyMzhlN2JjZjk0OWFkY2I1ZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBUkNFTlkvVEhFRlQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4ZjQyNThkNGYxMjQ3MDg5YjQxNjU0ZTRlMmExYjg5LnNldENvbnRlbnQoaHRtbF9lMmE0MGUwYmM3NTU0OTIzOGU3YmNmOTQ5YWRjYjVlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM4Yzc1MGU2OTgzNzQyZjhiMzllN2E5MWMzMzYzODE3LmJpbmRQb3B1cChwb3B1cF9iOGY0MjU4ZDRmMTI0NzA4OWI0MTY1NGU0ZTJhMWI4OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hOWUzMjhhMTU1NzQ0NmJhOGY1NGVjMDBmNDMxZjk5YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NTczODk0Mjk2NTQ5NSwtMTIyLjQ3Nzk2MDMyNzI5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5ZjRjNDNkNGJhYjQzN2Q4NDA0MDYwNWQ1ZjQ2NjQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwMmEzNzNiZDFlMTQxNGQ4MTg2ODY4MmEyNjNlZGM4ID0gJCgnPGRpdiBpZD0iaHRtbF8yMDJhMzczYmQxZTE0MTRkODE4Njg2ODJhMjYzZWRjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOWY0YzQzZDRiYWI0MzdkODQwNDA2MDVkNWY0NjY0OC5zZXRDb250ZW50KGh0bWxfMjAyYTM3M2JkMWUxNDE0ZDgxODY4NjgyYTI2M2VkYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOWUzMjhhMTU1NzQ0NmJhOGY1NGVjMDBmNDMxZjk5Yi5iaW5kUG9wdXAocG9wdXBfYjlmNGM0M2Q0YmFiNDM3ZDg0MDQwNjA1ZDVmNDY2NDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODA2OTlmNzMxYmU4NDU4NzhjMzc5NjA3MWNjZTRmYjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzU2OTcwMjc1NDgyMDYsLTEyMi4zNzY3NTc2NTU1MzAwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3YjRjMTJjNGMwZDQ3MTJiMzM2Mzc3M2E0MmZiYmRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5YzJlMjQ4MmRkNzRmZjVhNDc2MzAwMWE2MTQwMWQ2ID0gJCgnPGRpdiBpZD0iaHRtbF84OWMyZTI0ODJkZDc0ZmY1YTQ3NjMwMDFhNjE0MDFkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3YjRjMTJjNGMwZDQ3MTJiMzM2Mzc3M2E0MmZiYmRmLnNldENvbnRlbnQoaHRtbF84OWMyZTI0ODJkZDc0ZmY1YTQ3NjMwMDFhNjE0MDFkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgwNjk5ZjczMWJlODQ1ODc4YzM3OTYwNzFjY2U0ZmIyLmJpbmRQb3B1cChwb3B1cF80N2I0YzEyYzRjMGQ0NzEyYjMzNjM3NzNhNDJmYmJkZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YTE2ZTlkYWIxYjQ0NzE2YTcxMzI2ZDFkNDkyZjJmNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTI3MDUxOTk1OTIsLTEyMi40MzIzMjU4NzEwMjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YjljYWIwNGJmYjQ0ZWVkYjRiMDJhOGRmMmY0Yjg0YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNDU0NWYzNDc1ZDk0MTFjOTFmNjYxZDJmZDQxODM5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTQ1NDVmMzQ3NWQ5NDExYzkxZjY2MWQyZmQ0MTgzOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiOWNhYjA0YmZiNDRlZWRiNGIwMmE4ZGYyZjRiODRiLnNldENvbnRlbnQoaHRtbF8xNDU0NWYzNDc1ZDk0MTFjOTFmNjYxZDJmZDQxODM5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdhMTZlOWRhYjFiNDQ3MTZhNzEzMjZkMWQ0OTJmMmY0LmJpbmRQb3B1cChwb3B1cF80YjljYWIwNGJmYjQ0ZWVkYjRiMDJhOGRmMmY0Yjg0Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83Zjc0YTg5NzlhNDQ0YmRjOTZiNzA3ODIyNWQxMGZiMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5MTY0Mjk4MjM4NCwtMTIyLjQwMDkwODY5ODg4OTk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDYxNDlkYmZiODkwNDM1NDg3M2ExYTRkZDFhNGRlNDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzRlYzI3YmUwYzhlNGNmYzk2MTUwOGNmYTdkMDA1ZTQgPSAkKCc8ZGl2IGlkPSJodG1sXzc0ZWMyN2JlMGM4ZTRjZmM5NjE1MDhjZmE3ZDAwNWU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVVJHTEFSWTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDYxNDlkYmZiODkwNDM1NDg3M2ExYTRkZDFhNGRlNDMuc2V0Q29udGVudChodG1sXzc0ZWMyN2JlMGM4ZTRjZmM5NjE1MDhjZmE3ZDAwNWU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2Y3NGE4OTc5YTQ0NGJkYzk2YjcwNzgyMjVkMTBmYjMuYmluZFBvcHVwKHBvcHVwXzQ2MTQ5ZGJmYjg5MDQzNTQ4NzNhMWE0ZGQxYTRkZTQzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFkYTFkMjFiNTc3NDQ4ZjBiOGM2NDM1Y2UyMzBjOGNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNzA2OTMwMTU0NSwtMTIyLjQwODU5NTExMDg2OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwMDg4YjFkNDc4NTQ3OTlhOTllYzAwZTU1MWM5Y2IzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmOGFiZDU4MjUyZTQyYjdiMjM1NzQ2NmVmNmM0Njg5ID0gJCgnPGRpdiBpZD0iaHRtbF80ZjhhYmQ1ODI1MmU0MmI3YjIzNTc0NjZlZjZjNDY4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U1RPTEVOIFBST1BFUlRZPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMDA4OGIxZDQ3ODU0Nzk5YTk5ZWMwMGU1NTFjOWNiMy5zZXRDb250ZW50KGh0bWxfNGY4YWJkNTgyNTJlNDJiN2IyMzU3NDY2ZWY2YzQ2ODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZGExZDIxYjU3NzQ0OGYwYjhjNjQzNWNlMjMwYzhjZC5iaW5kUG9wdXAocG9wdXBfYzAwODhiMWQ0Nzg1NDc5OWE5OWVjMDBlNTUxYzljYjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2YyZWYyYmY5ZjliNDI2ZjgxYmUxZTUwN2YwZDJhZTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTcyODk1OTA0NTc3OTUsLTEyMi40MDY4NzA0MDIwODJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZmNhYjY1MGQyMzk0ZWE1OWIxZWU2YjA2OTAwNjRlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYmQyYzNhNzg0YzI0NzViOGJmZTEzMDI2Mjg4YzE5ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWJkMmMzYTc4NGMyNDc1YjhiZmUxMzAyNjI4OGMxOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJPQkJFUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZmY2FiNjUwZDIzOTRlYTU5YjFlZTZiMDY5MDA2NGU3LnNldENvbnRlbnQoaHRtbF9hYmQyYzNhNzg0YzI0NzViOGJmZTEzMDI2Mjg4YzE5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNmMmVmMmJmOWY5YjQyNmY4MWJlMWU1MDdmMGQyYWU1LmJpbmRQb3B1cChwb3B1cF9mZmNhYjY1MGQyMzk0ZWE1OWIxZWU2YjA2OTAwNjRlNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNzcyNjg4OWU4YmM0MTA5ODVhMmI5Yjc0M2ZiYWI5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0ODkwNjMwNTE4MjksLTEyMi40MjAzNTQ3ODA4NjA5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxZGM3NmFkZDdmYjQ3ODY5MDYyNDdlZjAzMTljZjA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyZTgxODgxOWVlNDQ1M2I4ZTU5NjE4ZTUzZTY2ZTc5ID0gJCgnPGRpdiBpZD0iaHRtbF8yMmU4MTg4MTllZTQ0NTNiOGU1OTYxOGU1M2U2NmU3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNTQVVMVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjFkYzc2YWRkN2ZiNDc4NjkwNjI0N2VmMDMxOWNmMDguc2V0Q29udGVudChodG1sXzIyZTgxODgxOWVlNDQ1M2I4ZTU5NjE4ZTUzZTY2ZTc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjc3MjY4ODllOGJjNDEwOTg1YTJiOWI3NDNmYmFiOTcuYmluZFBvcHVwKHBvcHVwXzIxZGM3NmFkZDdmYjQ3ODY5MDYyNDdlZjAzMTljZjA4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAzOGYzYTRjNTRhYjRlNzViNTFmYzg3OTk0ZTliODg4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzE1NzY1NDI2OTk1LC0xMjIuNDM5OTA5NzY2NzcyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTNkZWM5NDNiNjg0NGViM2I5Mzk1M2EwNDdhOTE1MTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTcwMjhkNzllMWUwNDkxN2ExYTE5Y2FlZjliOTgyODIgPSAkKCc8ZGl2IGlkPSJodG1sXzE3MDI4ZDc5ZTFlMDQ5MTdhMWExOWNhZWY5Yjk4MjgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xM2RlYzk0M2I2ODQ0ZWIzYjkzOTUzYTA0N2E5MTUxMC5zZXRDb250ZW50KGh0bWxfMTcwMjhkNzllMWUwNDkxN2ExYTE5Y2FlZjliOTgyODIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMzhmM2E0YzU0YWI0ZTc1YjUxZmM4Nzk5NGU5Yjg4OC5iaW5kUG9wdXAocG9wdXBfMTNkZWM5NDNiNjg0NGViM2I5Mzk1M2EwNDdhOTE1MTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDMzZDI0MzE5YTQ4NDdjMjllNzE2ODhlNTM0MGVlZTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM1Njk5Mzg2OTE4LC0xMjIuNDA4NDIxMTE2OTIyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZlOWU5YjVhYjY3NGIxNDkzZGQwMTJhMGYyYzJmZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMThhMTQwYjRhNTVhNDg5Y2I5ZjRlNzVmMWU4Y2NkODEgPSAkKCc8ZGl2IGlkPSJodG1sXzE4YTE0MGI0YTU1YTQ4OWNiOWY0ZTc1ZjFlOGNjZDgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZmU5ZTliNWFiNjc0YjE0OTNkZDAxMmEwZjJjMmZmMS5zZXRDb250ZW50KGh0bWxfMThhMTQwYjRhNTVhNDg5Y2I5ZjRlNzVmMWU4Y2NkODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMzNkMjQzMTlhNDg0N2MyOWU3MTY4OGU1MzQwZWVlMC5iaW5kUG9wdXAocG9wdXBfYWZlOWU5YjVhYjY3NGIxNDkzZGQwMTJhMGYyYzJmZjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTJkYTYyMDA5MGFhNDMwZTgxMDdhMDI0OTllYmM4ZjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzM2MTg2Mjc2NDU2MDQsLTEyMi40MjIzMTU2NzA3NDldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOGQyMjk2ZGM0NDY0ZTNmYTk0ZjU5Y2I1YjIxY2RkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2ZlNzRhYjI0MjQ0Mjc3ODA1MGJjYjBkODAxNTA2ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTNmZTc0YWIyNDI0NDI3NzgwNTBiY2IwZDgwMTUwNmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZSQVVEPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOGQyMjk2ZGM0NDY0ZTNmYTk0ZjU5Y2I1YjIxY2RkNS5zZXRDb250ZW50KGh0bWxfMTNmZTc0YWIyNDI0NDI3NzgwNTBiY2IwZDgwMTUwNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMmRhNjIwMDkwYWE0MzBlODEwN2EwMjQ5OWViYzhmNy5iaW5kUG9wdXAocG9wdXBfMjhkMjI5NmRjNDQ2NGUzZmE5NGY1OWNiNWIyMWNkZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjA5N2E5M2NjNGQ2NDNhZGJhMTIxOTZhNGQ1ZGUxZTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTI4NDEyODQwNDQ3MDUsLTEyMi40MjQ1MTk4MzUwMDkwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyZTFmYWVjN2I0MDRmMDM4M2UxMjQxNDNiM2NlMGZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2MTVhY2U1MDI0NjRmNDk4ZDgwMzEzMGU4MzY4ODU2ID0gJCgnPGRpdiBpZD0iaHRtbF80NjE1YWNlNTAyNDY0ZjQ5OGQ4MDMxMzBlODM2ODg1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V0FSUkFOVFM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyZTFmYWVjN2I0MDRmMDM4M2UxMjQxNDNiM2NlMGZhLnNldENvbnRlbnQoaHRtbF80NjE1YWNlNTAyNDY0ZjQ5OGQ4MDMxMzBlODM2ODg1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIwOTdhOTNjYzRkNjQzYWRiYTEyMTk2YTRkNWRlMWUyLmJpbmRQb3B1cChwb3B1cF80MmUxZmFlYzdiNDA0ZjAzODNlMTI0MTQzYjNjZTBmYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80M2NjYzE3OGY4OTk0MjBiYjIzMDJmMTgzNzI0N2U2OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1NDA5ODY4ODIwNjc5NSwtMTIyLjQxNDIzMzg0OTAzNzk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWIxYjdlM2QxNzAyNDhmYzllMDg2ODVjZDdlYTJmYjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDlhMDA2ODg0ZTU1NDY2ZmIzNGNiZGVmMzJiYWI5YzMgPSAkKCc8ZGl2IGlkPSJodG1sXzQ5YTAwNjg4NGU1NTQ2NmZiMzRjYmRlZjMyYmFiOWMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EUlVHL05BUkNPVElDPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjFiN2UzZDE3MDI0OGZjOWUwODY4NWNkN2VhMmZiNC5zZXRDb250ZW50KGh0bWxfNDlhMDA2ODg0ZTU1NDY2ZmIzNGNiZGVmMzJiYWI5YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80M2NjYzE3OGY4OTk0MjBiYjIzMDJmMTgzNzI0N2U2OC5iaW5kUG9wdXAocG9wdXBfNWIxYjdlM2QxNzAyNDhmYzllMDg2ODVjZDdlYTJmYjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzdmNjc0YTAzZTVlNDg3MTljNmIxY2JiZWNkYjRiMjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTQwOTg2ODgyMDY3OTUsLTEyMi40MTQyMzM4NDkwMzc5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjZDViZTM4YWZlZDQxNTRhOWY0N2E5MWU0MTlhZGE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmMGQwOWVhMjM1ZTQzYzE4ZDUzZmY5Y2VjZDU2MjZhID0gJCgnPGRpdiBpZD0iaHRtbF83ZjBkMDllYTIzNWU0M2MxOGQ1M2ZmOWNlY2Q1NjI2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjZDViZTM4YWZlZDQxNTRhOWY0N2E5MWU0MTlhZGE1LnNldENvbnRlbnQoaHRtbF83ZjBkMDllYTIzNWU0M2MxOGQ1M2ZmOWNlY2Q1NjI2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM3ZjY3NGEwM2U1ZTQ4NzE5YzZiMWNiYmVjZGI0YjIzLmJpbmRQb3B1cChwb3B1cF8zY2Q1YmUzOGFmZWQ0MTU0YTlmNDdhOTFlNDE5YWRhNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NzE3YWQ0NjAyM2I0OTQ5OWVmZWE2NzQ5MWIxZDY4YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3MTQ5Mzk5Njk0MTYsLTEyMi41MDc3NTAxMzEwMDQwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2ODNjYzRhNjA1YzQwYTM5Yzk5ZjY2YjM5OWY2YTJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhOTliYmY2YjM1YjRiZTY5MzBhMjkyNjdiYjBlYzdkID0gJCgnPGRpdiBpZD0iaHRtbF9jYTk5YmJmNmIzNWI0YmU2OTMwYTI5MjY3YmIwZWM3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNTQVVMVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTY4M2NjNGE2MDVjNDBhMzljOTlmNjZiMzk5ZjZhMmQuc2V0Q29udGVudChodG1sX2NhOTliYmY2YjM1YjRiZTY5MzBhMjkyNjdiYjBlYzdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzcxN2FkNDYwMjNiNDk0OTllZmVhNjc0OTFiMWQ2OGIuYmluZFBvcHVwKHBvcHVwXzE2ODNjYzRhNjA1YzQwYTM5Yzk5ZjY2YjM5OWY2YTJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3OTdiZTU4ZmNlZDQzZmQ4NjU5NmIyYWIzYWQxNGFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzE4MzAyMjA0NzY2MDA1LC0xMjIuNDc0NDQ0NjM5NTk0OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZmQ0NjUxODhmMmI0NmVkYjY2YjQyNDgyYzQ2NWY2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTQ3MDI2NWE0YTE0ODZlOTkzYTM4ZGY5YTRjNjQ1YyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTk0NzAyNjVhNGExNDg2ZTk5M2EzOGRmOWE0YzY0NWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZmQ0NjUxODhmMmI0NmVkYjY2YjQyNDgyYzQ2NWY2Yi5zZXRDb250ZW50KGh0bWxfOTk0NzAyNjVhNGExNDg2ZTk5M2EzOGRmOWE0YzY0NWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNzk3YmU1OGZjZWQ0M2ZkODY1OTZiMmFiM2FkMTRhYy5iaW5kUG9wdXAocG9wdXBfOGZkNDY1MTg4ZjJiNDZlZGI2NmI0MjQ4MmM0NjVmNmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmExOTNjYzg4YWFjNDdjM2E0N2U1ZTUyMTI5NGMzZWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ1NzUyMzE3NjE1LC0xMjIuNDI3NTYyNTk2OTg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Y3ZjczZWY3ZDE4NGRiY2E5Y2JlMjBhMzQ5MmEzMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTFiNDUzY2NlMDc1NDZmN2EzZDFmMjg3MTdiYmQ4ZmIgPSAkKCc8ZGl2IGlkPSJodG1sX2UxYjQ1M2NjZTA3NTQ2ZjdhM2QxZjI4NzE3YmJkOGZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Y3ZjczZWY3ZDE4NGRiY2E5Y2JlMjBhMzQ5MmEzMjMuc2V0Q29udGVudChodG1sX2UxYjQ1M2NjZTA3NTQ2ZjdhM2QxZjI4NzE3YmJkOGZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmExOTNjYzg4YWFjNDdjM2E0N2U1ZTUyMTI5NGMzZWEuYmluZFBvcHVwKHBvcHVwXzdmN2Y3M2VmN2QxODRkYmNhOWNiZTIwYTM0OTJhMzIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QwMGY4NDQ5NThkMDQxYmRhZmMyZDEwMDdkNTVkZDE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3NDM3ODMwOTExMiwtMTIyLjQxOTIwMzAwNDI2OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5OGYxMjU0NDRlZDRjNjNiNjA0YjFjZjE2Mjg1OTYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4YTVjMzlmODQxYjRiNjk5NzVlYTgyNjc0OTJhYjVmID0gJCgnPGRpdiBpZD0iaHRtbF83OGE1YzM5Zjg0MWI0YjY5OTc1ZWE4MjY3NDkyYWI1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSR0xBUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5OGYxMjU0NDRlZDRjNjNiNjA0YjFjZjE2Mjg1OTYxLnNldENvbnRlbnQoaHRtbF83OGE1YzM5Zjg0MWI0YjY5OTc1ZWE4MjY3NDkyYWI1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QwMGY4NDQ5NThkMDQxYmRhZmMyZDEwMDdkNTVkZDE0LmJpbmRQb3B1cChwb3B1cF9hOThmMTI1NDQ0ZWQ0YzYzYjYwNGIxY2YxNjI4NTk2MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNDY3YmJiZDY2Y2U0MWFlOTE0NTM3MWMwZmI4ZGVhMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0OTM2ODgyODQ1MzIsLTEyMi40MTI2OTAxNDIzMDgwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0MzAxYWEwOTg5YzRiMDQ4OWMwYmY2MmRiZjY4OGZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiMTcyOGUxZmEzYTRlZDBiMjI1M2UwNDlmN2MzOGEwID0gJCgnPGRpdiBpZD0iaHRtbF9iYjE3MjhlMWZhM2E0ZWQwYjIyNTNlMDQ5ZjdjMzhhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0MzAxYWEwOTg5YzRiMDQ4OWMwYmY2MmRiZjY4OGZmLnNldENvbnRlbnQoaHRtbF9iYjE3MjhlMWZhM2E0ZWQwYjIyNTNlMDQ5ZjdjMzhhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U0NjdiYmJkNjZjZTQxYWU5MTQ1MzcxYzBmYjhkZWEyLmJpbmRQb3B1cChwb3B1cF9lNDMwMWFhMDk4OWM0YjA0ODljMGJmNjJkYmY2ODhmZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYzJmYTkzNDY2YjU0MDQyYmMyYWQ3ZjEyMmVlMGU3NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcwOTIwMTA0NjIzNzksLTEyMi40MzQ2MDkyODAzNTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODZkMzUxMzYxZTY0MTAzODNmZDg1NWRkNmVkZTkwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDhkNTU0MDdiZjY0ODRjYTEyMGYxY2JkMGYzNWQyOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTA4ZDU1NDA3YmY2NDg0Y2ExMjBmMWNiZDBmMzVkMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDg2ZDM1MTM2MWU2NDEwMzgzZmQ4NTVkZDZlZGU5MDkuc2V0Q29udGVudChodG1sX2EwOGQ1NTQwN2JmNjQ4NGNhMTIwZjFjYmQwZjM1ZDI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWMyZmE5MzQ2NmI1NDA0MmJjMmFkN2YxMjJlZTBlNzcuYmluZFBvcHVwKHBvcHVwXzA4NmQzNTEzNjFlNjQxMDM4M2ZkODU1ZGQ2ZWRlOTA5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RiYTZmMTQ3ZmViNDQxNjk5NDgxNWZmODk0YjFiZWE4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3OTIwOTM3NTUzMjk1LC0xMjIuNDEwODgyODI1NTUxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQyZTRkOGM3YmNkNDMzODljM2QwMTUwMzIzMzc5NjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODQ1ZmY5MTEwOTRhNDVkOGFhZWMwZTNiYzBkZTIxYmIgPSAkKCc8ZGl2IGlkPSJodG1sXzg0NWZmOTExMDk0YTQ1ZDhhYWVjMGUzYmMwZGUyMWJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRUhJQ0xFIFRIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDJlNGQ4YzdiY2Q0MzM4OWMzZDAxNTAzMjMzNzk2NS5zZXRDb250ZW50KGh0bWxfODQ1ZmY5MTEwOTRhNDVkOGFhZWMwZTNiYzBkZTIxYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYmE2ZjE0N2ZlYjQ0MTY5OTQ4MTVmZjg5NGIxYmVhOC5iaW5kUG9wdXAocG9wdXBfMzQyZTRkOGM3YmNkNDMzODljM2QwMTUwMzIzMzc5NjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTVhYjE5YzE4NWZkNDgxYWE0MGM2NTgwZTM5ZWRhNDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy44MDA0NTY2NDcxMDM4OSwtMTIyLjQwMTQzMjc1NDcyMjAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmU1MzQwZWIxNDAzNDc3NGFjZGI5M2M3MDhiY2UyMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTE3YzM4YWExYTFlNGZkNmI5ZjNmNjMzMmVkMGY5NWQgPSAkKCc8ZGl2IGlkPSJodG1sX2ExN2MzOGFhMWExZTRmZDZiOWYzZjYzMzJlZDBmOTVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRUhJQ0xFIFRIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZTUzNDBlYjE0MDM0Nzc0YWNkYjkzYzcwOGJjZTIyMy5zZXRDb250ZW50KGh0bWxfYTE3YzM4YWExYTFlNGZkNmI5ZjNmNjMzMmVkMGY5NWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNWFiMTljMTg1ZmQ0ODFhYTQwYzY1ODBlMzllZGE0Mi5iaW5kUG9wdXAocG9wdXBfMmU1MzQwZWIxNDAzNDc3NGFjZGI5M2M3MDhiY2UyMjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjZiMmMyMGVmMGYwNGRmNzkzMDJjNTQ4YmNlZWE2YmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDM1NTUwNTQyMjY1LC0xMjIuNDIxMTI4MDI5NTA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmRhNzc1Njg5ODU5NGUzYzgxNjU4YWJmOTdkYzg3MmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2IyYzc2ZjJmZjg2NGE2NGE0OTQxZTg3ODA3NDJiNzYgPSAkKCc8ZGl2IGlkPSJodG1sX2NiMmM3NmYyZmY4NjRhNjRhNDk0MWU4NzgwNzQyYjc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZGE3NzU2ODk4NTk0ZTNjODE2NThhYmY5N2RjODcyZi5zZXRDb250ZW50KGh0bWxfY2IyYzc2ZjJmZjg2NGE2NGE0OTQxZTg3ODA3NDJiNzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNmIyYzIwZWYwZjA0ZGY3OTMwMmM1NDhiY2VlYTZiZC5iaW5kUG9wdXAocG9wdXBfNmRhNzc1Njg5ODU5NGUzYzgxNjU4YWJmOTdkYzg3MmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2Y4YzRmNDIwNjVlNGRiNjljMzI5M2U5ZWY0ODdjOTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODY1NjQ3NjA3Njg1LC0xMjIuNDA3MjQ0MDg3MDMyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzg3YjQ2NDlhZTdhNDNjYTk5MjNlYTgxZTFlMDdkOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYThmMTIwMzk4MmJjNDhlZThjYzg1ZDBhZWE1N2ZkMDYgPSAkKCc8ZGl2IGlkPSJodG1sX2E4ZjEyMDM5ODJiYzQ4ZWU4Y2M4NWQwYWVhNTdmZDA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zODdiNDY0OWFlN2E0M2NhOTkyM2VhODFlMWUwN2Q5NS5zZXRDb250ZW50KGh0bWxfYThmMTIwMzk4MmJjNDhlZThjYzg1ZDBhZWE1N2ZkMDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZjhjNGY0MjA2NWU0ZGI2OWMzMjkzZTllZjQ4N2M5My5iaW5kUG9wdXAocG9wdXBfMzg3YjQ2NDlhZTdhNDNjYTk5MjNlYTgxZTFlMDdkOTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODEyNzczNTUyMWUyNGY4ZDkzODI3YTE1YzM2MDc1NmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YjhkMzYwYWYxYmI0YTYzYjJjYWUxMjcwZjZhNzEzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZDdmYTI5MGJiYzU0OWI1YmU2ZTdjMmQ5NGFhMjExYiA9ICQoJzxkaXYgaWQ9Imh0bWxfZmQ3ZmEyOTBiYmM1NDliNWJlNmU3YzJkOTRhYTIxMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJFQ09WRVJFRCBWRUhJQ0xFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YjhkMzYwYWYxYmI0YTYzYjJjYWUxMjcwZjZhNzEzOS5zZXRDb250ZW50KGh0bWxfZmQ3ZmEyOTBiYmM1NDliNWJlNmU3YzJkOTRhYTIxMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MTI3NzM1NTIxZTI0ZjhkOTM4MjdhMTVjMzYwNzU2Zi5iaW5kUG9wdXAocG9wdXBfOWI4ZDM2MGFmMWJiNGE2M2IyY2FlMTI3MGY2YTcxMzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDE5ZTI1NWE2NDQ2NDAzZWJhZDMxODliZTlkMzQ4MjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYWJlNTdkMDdlMzU0OTFkYmE0M2M1ZjdkMzgxYThkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjM5NWRlZmQ4MzU0MDk0YjUwMzdhNmM0MGVkODc3NSA9ICQoJzxkaXYgaWQ9Imh0bWxfNmYzOTVkZWZkODM1NDA5NGI1MDM3YTZjNDBlZDg3NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYWJlNTdkMDdlMzU0OTFkYmE0M2M1ZjdkMzgxYThkZS5zZXRDb250ZW50KGh0bWxfNmYzOTVkZWZkODM1NDA5NGI1MDM3YTZjNDBlZDg3NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMTllMjU1YTY0NDY0MDNlYmFkMzE4OWJlOWQzNDgyMi5iaW5kUG9wdXAocG9wdXBfY2FiZTU3ZDA3ZTM1NDkxZGJhNDNjNWY3ZDM4MWE4ZGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWUzMTM4YjQ2M2JjNDA4MDlhODliNzM5N2Y4Y2RlNjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDQxOTI3NTA4OTMyMDUsLTEyMi40NDQ2ODU0ODIyNzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTY3NjY4Njc3ZDM0ZDc3YWZiZjM2YWRhM2M2MmU5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODRjZjM0ZGFlNjY0Mzc5YWU1NjkxYjI0YjNmYmJkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjg0Y2YzNGRhZTY2NDM3OWFlNTY5MWIyNGIzZmJiZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDU2NzY2ODY3N2QzNGQ3N2FmYmYzNmFkYTNjNjJlOTEuc2V0Q29udGVudChodG1sX2Y4NGNmMzRkYWU2NjQzNzlhZTU2OTFiMjRiM2ZiYmRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWUzMTM4YjQ2M2JjNDA4MDlhODliNzM5N2Y4Y2RlNjUuYmluZFBvcHVwKHBvcHVwX2Q1Njc2Njg2NzdkMzRkNzdhZmJmMzZhZGEzYzYyZTkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU4N2ZlZDVmYTFmYjRiYjU4MmFiZWVhYzZkNDQ5MDk5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDY5MjgyMDA0MSwtMTIyLjQxNTc1NzAzOTE5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljMzUzZjc2OTFlYjQyNzQ5ZDAyNTQ0OGViMDkzY2ZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxODVkMTMxZTkzOTRmYTQ4ZGZiZmE1NmVlOGZmY2FhID0gJCgnPGRpdiBpZD0iaHRtbF9jMTg1ZDEzMWU5Mzk0ZmE0OGRmYmZhNTZlZThmZmNhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YzM1M2Y3NjkxZWI0Mjc0OWQwMjU0NDhlYjA5M2NmZS5zZXRDb250ZW50KGh0bWxfYzE4NWQxMzFlOTM5NGZhNDhkZmJmYTU2ZWU4ZmZjYWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ODdmZWQ1ZmExZmI0YmI1ODJhYmVlYWM2ZDQ0OTA5OS5iaW5kUG9wdXAocG9wdXBfOWMzNTNmNzY5MWViNDI3NDlkMDI1NDQ4ZWIwOTNjZmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjFiMGM4NzI4ZjMyNGI0NDg1MzcxMTA4YWU5NzJmMjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjg1MjgwNjI3NDY1LC0xMjIuNDc1NjQ3NDYwNzg1OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2UzYmFhNjY5OTU0NzRlOGYxN2ExOTBiZTNhMzJlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzZkNmNiOWVkYzM0N2E5ODcxMjNjMDAxZmE5NGJjOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWM2ZDZjYjllZGMzNDdhOTg3MTIzYzAwMWZhOTRiYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJPQkJFUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3ZTNiYWE2Njk5NTQ3NGU4ZjE3YTE5MGJlM2EzMmUxLnNldENvbnRlbnQoaHRtbF9lYzZkNmNiOWVkYzM0N2E5ODcxMjNjMDAxZmE5NGJjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzIxYjBjODcyOGYzMjRiNDQ4NTM3MTEwOGFlOTcyZjI1LmJpbmRQb3B1cChwb3B1cF81N2UzYmFhNjY5OTU0NzRlOGYxN2ExOTBiZTNhMzJlMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZWRhZWQwMDQ3ZjE0MDRmYTQ5MmRiNTE4OTQ5ODRiZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0Mjg1MTczNzQ0NDg5NCwtMTIyLjQyMDk2NzQ0MDU2NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E3YjEwMGM3YzJjNTQzODc4NmQ3ODk5ODM3M2Y4ZmJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiMTFkYTYzNzgxODQ0ZGM5ZjcxMGU5MTExNzRjNmZhID0gJCgnPGRpdiBpZD0iaHRtbF9iYjExZGE2Mzc4MTg0NGRjOWY3MTBlOTExMTc0YzZmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3YjEwMGM3YzJjNTQzODc4NmQ3ODk5ODM3M2Y4ZmJhLnNldENvbnRlbnQoaHRtbF9iYjExZGE2Mzc4MTg0NGRjOWY3MTBlOTExMTc0YzZmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJlZGFlZDAwNDdmMTQwNGZhNDkyZGI1MTg5NDk4NGJmLmJpbmRQb3B1cChwb3B1cF9hN2IxMDBjN2MyYzU0Mzg3ODZkNzg5OTgzNzNmOGZiYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xZTQ2NWI4OTk4ZGM0MjY5YWJkMWZlZGJmMjFhYzRkOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjExOTg0ODg5MzEsLTEyMi40MTU2Njk2NjE0NDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWUyNWVjODBlOWY0YTE1OGFhM2JlN2Y1MzA5YTM2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MmU5OGQ4MjNiNjc0MDQ0YTBlNzRlZTA1OTcyNjY1ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTJlOThkODIzYjY3NDA0NGEwZTc0ZWUwNTk3MjY2NWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZBTkRBTElTTTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFlMjVlYzgwZTlmNGExNThhYTNiZTdmNTMwOWEzNmYuc2V0Q29udGVudChodG1sXzUyZTk4ZDgyM2I2NzQwNDRhMGU3NGVlMDU5NzI2NjVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWU0NjViODk5OGRjNDI2OWFiZDFmZWRiZjIxYWM0ZDguYmluZFBvcHVwKHBvcHVwX2ZhZTI1ZWM4MGU5ZjRhMTU4YWEzYmU3ZjUzMDlhMzZmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNkMTQ4YTVlNDNmMjQ3Yzk5MGMyZjY0OWNmNjM0MjhkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc5MTY3NDIxODk2MywtMTIyLjQwNjM0NjQyNTYzMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkNmNkMDg5YTE4YjQ5Y2Y4MmQ3ZTMxM2Q3ZTA0ZGQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4MzcyNzEwMTU4MjQ5Yjc5M2FmNDUzMmYwNWFjMzgwID0gJCgnPGRpdiBpZD0iaHRtbF8yODM3MjcxMDE1ODI0OWI3OTNhZjQ1MzJmMDVhYzM4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNTQVVMVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWQ2Y2QwODlhMThiNDljZjgyZDdlMzEzZDdlMDRkZDcuc2V0Q29udGVudChodG1sXzI4MzcyNzEwMTU4MjQ5Yjc5M2FmNDUzMmYwNWFjMzgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2QxNDhhNWU0M2YyNDdjOTkwYzJmNjQ5Y2Y2MzQyOGQuYmluZFBvcHVwKHBvcHVwX2FkNmNkMDg5YTE4YjQ5Y2Y4MmQ3ZTMxM2Q3ZTA0ZGQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNhODU3MGUzZDBmMzQzMmQ5OTgyMzRmYzZiNDBkNGQ3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY1NzE4NDM5NTI4MiwtMTIyLjQwOTUyOTkxMzI3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1NjFkNDNmNjZjMjQwZjg4N2FmY2I4NDJiNWMxZDhhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhZTI2NGJhNGE1NDQ1YjRiNDRhMDM0OTUxNTZhZTZhID0gJCgnPGRpdiBpZD0iaHRtbF8zYWUyNjRiYTRhNTQ0NWI0YjQ0YTAzNDk1MTU2YWU2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFSQ0VOWS9USEVGVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU2MWQ0M2Y2NmMyNDBmODg3YWZjYjg0MmI1YzFkOGEuc2V0Q29udGVudChodG1sXzNhZTI2NGJhNGE1NDQ1YjRiNDRhMDM0OTUxNTZhZTZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2E4NTcwZTNkMGYzNDMyZDk5ODIzNGZjNmI0MGQ0ZDcuYmluZFBvcHVwKHBvcHVwX2M1NjFkNDNmNjZjMjQwZjg4N2FmY2I4NDJiNWMxZDhhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZkMzkwOTI1MTY4MzRmODQ5ZTlkMjYwZTA3MGEwODdiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NTU1OTk5OGUyYWQ0NTJmODliMTA3OTFkNWEyMmMyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTU0NTBjMzJkYWI0ZTlkYjY5YTBiOTUwMzhjOGMyOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTE1NDUwYzMyZGFiNGU5ZGI2OWEwYjk1MDM4YzhjMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU1NTk5OThlMmFkNDUyZjg5YjEwNzkxZDVhMjJjMjUuc2V0Q29udGVudChodG1sX2ExNTQ1MGMzMmRhYjRlOWRiNjlhMGI5NTAzOGM4YzI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmQzOTA5MjUxNjgzNGY4NDllOWQyNjBlMDcwYTA4N2IuYmluZFBvcHVwKHBvcHVwXzg1NTU5OTk4ZTJhZDQ1MmY4OWIxMDc5MWQ1YTIyYzI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAyOTU5OGEwYzEyMTRhYmU5ZDQ0YTY2OTg0Mzg5MjMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY3NTI0MzA4NzgzLC0xMjIuNDEwNzM4MDk3MzE1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDY5ODI1ZjY1N2I4NGMwNDhjMjUyZTJlOTBiZTIwZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzYxNjMxMDIxNjJiNGY0M2FhMzA3ODBjYWUyY2ZiNWYgPSAkKCc8ZGl2IGlkPSJodG1sXzc2MTYzMTAyMTYyYjRmNDNhYTMwNzgwY2FlMmNmYjVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVVJHTEFSWTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDY5ODI1ZjY1N2I4NGMwNDhjMjUyZTJlOTBiZTIwZDQuc2V0Q29udGVudChodG1sXzc2MTYzMTAyMTYyYjRmNDNhYTMwNzgwY2FlMmNmYjVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDI5NTk4YTBjMTIxNGFiZTlkNDRhNjY5ODQzODkyMzMuYmluZFBvcHVwKHBvcHVwXzQ2OTgyNWY2NTdiODRjMDQ4YzI1MmUyZTkwYmUyMGQ0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE5MTEzYzA4OTRkMTQ0ZjU5MjMxZjQ1NzNkOTM3NDg3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY3NTI0MzA4NzgzLC0xMjIuNDEwNzM4MDk3MzE1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2QwMDI1M2VkMmE2NDA1ZGJjNzQ2OWMxNDc0Y2MxZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODE0NTBhYmM2ZTZlNGFhMTljYWY5Y2IxZWNiZGZiZDkgPSAkKCc8ZGl2IGlkPSJodG1sXzgxNDUwYWJjNmU2ZTRhYTE5Y2FmOWNiMWVjYmRmYmQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BUlNPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2QwMDI1M2VkMmE2NDA1ZGJjNzQ2OWMxNDc0Y2MxZjcuc2V0Q29udGVudChodG1sXzgxNDUwYWJjNmU2ZTRhYTE5Y2FmOWNiMWVjYmRmYmQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTkxMTNjMDg5NGQxNDRmNTkyMzFmNDU3M2Q5Mzc0ODcuYmluZFBvcHVwKHBvcHVwXzNkMDAyNTNlZDJhNjQwNWRiYzc0NjljMTQ3NGNjMWY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FmYmY3ZWRlOTMyYTQxNTBhM2E5MWZiMTQ2ZmFkYTcwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3NTMwYWZiOGY3MDQ5NTg5MWI2YjRmNzIyMDQ2OWUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkZTIwMGY4ZGI3ZjRjNDNhZTkyMTM1OTc4NmZkYzc1ID0gJCgnPGRpdiBpZD0iaHRtbF80ZGUyMDBmOGRiN2Y0YzQzYWU5MjEzNTk3ODZmZGM3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSR0xBUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3NTMwYWZiOGY3MDQ5NTg5MWI2YjRmNzIyMDQ2OWUzLnNldENvbnRlbnQoaHRtbF80ZGUyMDBmOGRiN2Y0YzQzYWU5MjEzNTk3ODZmZGM3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FmYmY3ZWRlOTMyYTQxNTBhM2E5MWZiMTQ2ZmFkYTcwLmJpbmRQb3B1cChwb3B1cF81NzUzMGFmYjhmNzA0OTU4OTFiNmI0ZjcyMjA0NjllMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81YmEyZDYzOTAwYjU0NzQ1ODBmODBjMDRiYjM5YjMyZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxMzEwODM0MzMyNjQsLTEyMi40NDQzMTQwMjUxODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDc1ZDA4YTEwN2M0MjM2OGUxODcwNzVmMGU5ZjUwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzBiNDI0MTk1N2E0NDcxYWViMWIwNDYyZTgwZGYzZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjMwYjQyNDE5NTdhNDQ3MWFlYjFiMDQ2MmU4MGRmM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRSVUcvTkFSQ09USUM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkNzVkMDhhMTA3YzQyMzY4ZTE4NzA3NWYwZTlmNTA2LnNldENvbnRlbnQoaHRtbF9mMzBiNDI0MTk1N2E0NDcxYWViMWIwNDYyZTgwZGYzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzViYTJkNjM5MDBiNTQ3NDU4MGY4MGMwNGJiMzliMzJkLmJpbmRQb3B1cChwb3B1cF9mZDc1ZDA4YTEwN2M0MjM2OGUxODcwNzVmMGU5ZjUwNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMDA2YjllMGUxYTU0ZDFlYTg1YTZmNzljYjY2NThkZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NjAxNjAxMTQxMDMsLTEyMi40MDM2NDQ2MjA0MzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjdiMGIwMjQxMWM0ZDc1OTQwMmVhZjY1MDA3YzcxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMDIyNWFjOTM0MDA0OTM1OWQ1NmE2YWFkNDQ5NDk5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTAyMjVhYzkzNDAwNDkzNTlkNTZhNmFhZDQ0OTQ5OWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JU1NJTkcgUEVSU09OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjdiMGIwMjQxMWM0ZDc1OTQwMmVhZjY1MDA3YzcxNi5zZXRDb250ZW50KGh0bWxfZTAyMjVhYzkzNDAwNDkzNTlkNTZhNmFhZDQ0OTQ5OWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMDA2YjllMGUxYTU0ZDFlYTg1YTZmNzljYjY2NThkZC5iaW5kUG9wdXAocG9wdXBfZGI3YjBiMDI0MTFjNGQ3NTk0MDJlYWY2NTAwN2M3MTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjI3ODFlODI3ZTgzNDUzYjg4MDdiYTJkMjRjY2Y0ZjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjYwMTYwMTE0MTAzLC0xMjIuNDAzNjQ0NjIwNDM5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzBkODJkNWRkMjNmNGM4ZjhmZGMwOTk1N2Y1YzQ5NDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWExNWQ1YWQ0MDZjNDIyZGI3OWM3N2ZiNmVhN2QzNDUgPSAkKCc8ZGl2IGlkPSJodG1sX2VhMTVkNWFkNDA2YzQyMmRiNzljNzdmYjZlYTdkMzQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSVNTSU5HIFBFUlNPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzBkODJkNWRkMjNmNGM4ZjhmZGMwOTk1N2Y1YzQ5NDUuc2V0Q29udGVudChodG1sX2VhMTVkNWFkNDA2YzQyMmRiNzljNzdmYjZlYTdkMzQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjI3ODFlODI3ZTgzNDUzYjg4MDdiYTJkMjRjY2Y0ZjAuYmluZFBvcHVwKHBvcHVwXzcwZDgyZDVkZDIzZjRjOGY4ZmRjMDk5NTdmNWM0OTQ1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3YTFkYmQ3ZGI0MjQxMjRhZTdjYmFlOWJhNTVlNWE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc2MjMxMDQwNDc1OCwtMTIyLjQxNDcxNDI5NTU3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGVjOGU4ZWQzMWU3NGVhMmI3OWU2MTlkN2U4MDMxMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWJkZTkxMjIxMWM4NGU4NzlkMDFmOWJmZWM4OWM2MjcgPSAkKCc8ZGl2IGlkPSJodG1sXzFiZGU5MTIyMTFjODRlODc5ZDAxZjliZmVjODljNjI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWM4ZThlZDMxZTc0ZWEyYjc5ZTYxOWQ3ZTgwMzEwMi5zZXRDb250ZW50KGh0bWxfMWJkZTkxMjIxMWM4NGU4NzlkMDFmOWJmZWM4OWM2MjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wN2ExZGJkN2RiNDI0MTI0YWU3Y2JhZTliYTU1ZTVhOS5iaW5kUG9wdXAocG9wdXBfNGVjOGU4ZWQzMWU3NGVhMmI3OWU2MTlkN2U4MDMxMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWIxYWY0MTEzYTMzNDU3Y2EwMzNiZDVmNTRiMjM5NjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzYyMzEwNDA0NzU4LC0xMjIuNDE0NzE0Mjk1NTc4OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYTZhOWMxYjgxOTI0OWI2OGU0Y2I0ZmNlNDMyODZiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGJhNWNmOTVjODI0ZTViODdlNjE1ZjZkZTI0NGVjNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjhiYTVjZjk1YzgyNGU1Yjg3ZTYxNWY2ZGUyNDRlYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JU1NJTkcgUEVSU09OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYTZhOWMxYjgxOTI0OWI2OGU0Y2I0ZmNlNDMyODZiYy5zZXRDb250ZW50KGh0bWxfNjhiYTVjZjk1YzgyNGU1Yjg3ZTYxNWY2ZGUyNDRlYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YjFhZjQxMTNhMzM0NTdjYTAzM2JkNWY1NGIyMzk2Mi5iaW5kUG9wdXAocG9wdXBfMGE2YTljMWI4MTkyNDliNjhlNGNiNGZjZTQzMjg2YmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzBiYThmZTg3NDRiNDQ4N2FjZTNlODRlNjNhYmY3YzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Nzc1MTE4ODk1Njk1LC0xMjIuNDE4MDQ1NDUyNzY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGQ3NGUxM2QzNDE0NDMwZjhiMzE4MmJlMDMzYWE3ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmI2Y2Q1NmE4ZGU1NDUyYjg4ZWMwYmY3OGFiMGU1MzEgPSAkKCc8ZGl2IGlkPSJodG1sX2ZiNmNkNTZhOGRlNTQ1MmI4OGVjMGJmNzhhYjBlNTMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRUhJQ0xFIFRIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDc0ZTEzZDM0MTQ0MzBmOGIzMTgyYmUwMzNhYTdkZS5zZXRDb250ZW50KGh0bWxfZmI2Y2Q1NmE4ZGU1NDUyYjg4ZWMwYmY3OGFiMGU1MzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMGJhOGZlODc0NGI0NDg3YWNlM2U4NGU2M2FiZjdjNS5iaW5kUG9wdXAocG9wdXBfMGQ3NGUxM2QzNDE0NDMwZjhiMzE4MmJlMDMzYWE3ZGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmZiNTU0Yjc0YzQ5NDFkYmExNDAyNjgyYTIzODdiMjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIwMjM4NDc4OTc1LC0xMjIuNDAxMTYxNTU1NjAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmNhMzA1N2QwYjI5NDNiMWJlZDkxZTRkYmY5NzBjMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2I0ZDJiMGZkMWRmNGZlNGI2ZTVhNzE2ZjJlOWM2YjAgPSAkKCc8ZGl2IGlkPSJodG1sXzdiNGQyYjBmZDFkZjRmZTRiNmU1YTcxNmYyZTljNmIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmNhMzA1N2QwYjI5NDNiMWJlZDkxZTRkYmY5NzBjMWEuc2V0Q29udGVudChodG1sXzdiNGQyYjBmZDFkZjRmZTRiNmU1YTcxNmYyZTljNmIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmZiNTU0Yjc0YzQ5NDFkYmExNDAyNjgyYTIzODdiMjQuYmluZFBvcHVwKHBvcHVwXzZjYTMwNTdkMGIyOTQzYjFiZWQ5MWU0ZGJmOTcwYzFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk4NDZhOGQyMjI5ZTQwNTU4MTllZmE1MTYwNmU2NzBjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI3MDA1MzE5NjI5OTk1LC0xMjIuNDAzNDA4NjY5MTkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODQwMzQ5NzZjNzFkNDdiNjg2NDk3MjdkNzMwODVhOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBmOGQxYmYyYWNmNDU1MGIyMjk2YTg5MTZjNjcxYTcgPSAkKCc8ZGl2IGlkPSJodG1sX2UwZjhkMWJmMmFjZjQ1NTBiMjI5NmE4OTE2YzY3MWE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODQwMzQ5NzZjNzFkNDdiNjg2NDk3MjdkNzMwODVhOTEuc2V0Q29udGVudChodG1sX2UwZjhkMWJmMmFjZjQ1NTBiMjI5NmE4OTE2YzY3MWE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTg0NmE4ZDIyMjllNDA1NTgxOWVmYTUxNjA2ZTY3MGMuYmluZFBvcHVwKHBvcHVwXzg0MDM0OTc2YzcxZDQ3YjY4NjQ5NzI3ZDczMDg1YTkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA4NmY4OTZiYTQ0ZDQxMDY5OGZmZmU1ZGUwZGM1NjE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM0NDM3NDE0MSwtMTIyLjQxMjkzMDUyMjA1OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhMjgxNmVmYWRmZjRlNTk4OGQ5ZmY3YjlhMDBjODJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3OTM2Y2UzZTYwMTRjYzBhODRmNzhmOGE3MTI5ZWMwID0gJCgnPGRpdiBpZD0iaHRtbF8zNzkzNmNlM2U2MDE0Y2MwYTg0Zjc4ZjhhNzEyOWVjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkFOREFMSVNNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTI4MTZlZmFkZmY0ZTU5ODhkOWZmN2I5YTAwYzgyYS5zZXRDb250ZW50KGh0bWxfMzc5MzZjZTNlNjAxNGNjMGE4NGY3OGY4YTcxMjllYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wODZmODk2YmE0NGQ0MTA2OThmZmZlNWRlMGRjNTYxOS5iaW5kUG9wdXAocG9wdXBfYWEyODE2ZWZhZGZmNGU1OTg4ZDlmZjdiOWEwMGM4MmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTdmYThlYjVlMzY1NGQ1YjhjMzVhNTk4ZjdiZjE5YWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTMwMTg2NTM3NDQ2MDQsLTEyMi40MTg1ODcxNzIyMTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zN2MyN2Y3YTMxOTc0Y2ZhOTJlNmJhYmIwMTM1ZmE2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZWJjZjUwYWY3Y2E0NTI1OWY4ZmNkNmE2MGVjOTE1YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGViY2Y1MGFmN2NhNDUyNTlmOGZjZDZhNjBlYzkxNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzdjMjdmN2EzMTk3NGNmYTkyZTZiYWJiMDEzNWZhNmUuc2V0Q29udGVudChodG1sXzBlYmNmNTBhZjdjYTQ1MjU5ZjhmY2Q2YTYwZWM5MTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTdmYThlYjVlMzY1NGQ1YjhjMzVhNTk4ZjdiZjE5YWMuYmluZFBvcHVwKHBvcHVwXzM3YzI3ZjdhMzE5NzRjZmE5MmU2YmFiYjAxMzVmYTZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdhZDZkNTA4NzBkMzQwMTk4NjQ2NTljM2NjZjRiNDQ0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc0MDQxODM4NTA0MSwtMTIyLjQxNDM3MDYyNzQ5NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzMzFiZmZhNTUyNjQxZmY5YThhOGQxNDMzODM1YjViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5OTRkZTQ1OGMxOTQzZWQ4M2E2ZjZjZWY0YjQ1OGQ2ID0gJCgnPGRpdiBpZD0iaHRtbF9lOTk0ZGU0NThjMTk0M2VkODNhNmY2Y2VmNGI0NThkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RlJBVUQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzMzFiZmZhNTUyNjQxZmY5YThhOGQxNDMzODM1YjViLnNldENvbnRlbnQoaHRtbF9lOTk0ZGU0NThjMTk0M2VkODNhNmY2Y2VmNGI0NThkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdhZDZkNTA4NzBkMzQwMTk4NjQ2NTljM2NjZjRiNDQ0LmJpbmRQb3B1cChwb3B1cF80MzMxYmZmYTU1MjY0MWZmOWE4YThkMTQzMzgzNWI1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZDY2YmY0OGViZDc0ZGFjYjY1NmVmM2M0NDA1YTBiNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5MDUzODk5MzcyNSwtMTIyLjQwMzkxNTY4MTU3MTAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYThiMGVlODEyNjk1NDJiMmJhZDQwNjAxNjgwYTU0OTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTE3NDMzOTVjNzQ4NDAzOTkyYTEwYWMzMTlmMDllYWQgPSAkKCc8ZGl2IGlkPSJodG1sXzUxNzQzMzk1Yzc0ODQwMzk5MmExMGFjMzE5ZjA5ZWFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOGIwZWU4MTI2OTU0MmIyYmFkNDA2MDE2ODBhNTQ5Ny5zZXRDb250ZW50KGh0bWxfNTE3NDMzOTVjNzQ4NDAzOTkyYTEwYWMzMTlmMDllYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZDY2YmY0OGViZDc0ZGFjYjY1NmVmM2M0NDA1YTBiNy5iaW5kUG9wdXAocG9wdXBfYThiMGVlODEyNjk1NDJiMmJhZDQwNjAxNjgwYTU0OTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjM3ZjNjODE1YTIyNGY5NWE5ODkzY2RjNWM3MDA2NjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODMwOTk4MjQ0NTkyMSwtMTIyLjQxOTE4MzA5NjM2Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjOWI2ZmY3MzM1YjQ5N2ZhNzI0Mjc0OGRhYTFlZmFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxNDExNjBjMTIxOTRmMjNiZGEyMTI5ZjJjYjgzOWE1ID0gJCgnPGRpdiBpZD0iaHRtbF8zMTQxMTYwYzEyMTk0ZjIzYmRhMjEyOWYyY2I4MzlhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjOWI2ZmY3MzM1YjQ5N2ZhNzI0Mjc0OGRhYTFlZmFmLnNldENvbnRlbnQoaHRtbF8zMTQxMTYwYzEyMTk0ZjIzYmRhMjEyOWYyY2I4MzlhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YzN2YzYzgxNWEyMjRmOTVhOTg5M2NkYzVjNzAwNjY5LmJpbmRQb3B1cChwb3B1cF8xYzliNmZmNzMzNWI0OTdmYTcyNDI3NDhkYWExZWZhZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZGIyZDBkZWQxOGI0NDg5ODZjM2YyZDNiZDc5Njg5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0MDczNjA1NDgzNTc5LC0xMjIuMzg4NzUzMDQ2OTk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjg5NzhiNmYwZjg2NDU1Yzg4N2NhNzZkZGE3ODE2MTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzZiOWE2NTQ2ZTQ4NGJiM2FmOTRlNTlkZmJkYTZjNDIgPSAkKCc8ZGl2IGlkPSJodG1sXzM2YjlhNjU0NmU0ODRiYjNhZjk0ZTU5ZGZiZGE2YzQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjg5NzhiNmYwZjg2NDU1Yzg4N2NhNzZkZGE3ODE2MTcuc2V0Q29udGVudChodG1sXzM2YjlhNjU0NmU0ODRiYjNhZjk0ZTU5ZGZiZGE2YzQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2RiMmQwZGVkMThiNDQ4OTg2YzNmMmQzYmQ3OTY4OTcuYmluZFBvcHVwKHBvcHVwX2I4OTc4YjZmMGY4NjQ1NWM4ODdjYTc2ZGRhNzgxNjE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y2N2VkZDUzNWMwZTQ5MWM4MDhlZTI4YWZmOWU4MjY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc0OTkxMjk0NDM2NiwtMTIyLjQzNzc5OTcwMzQ2OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EwOGUwMzljMDdkOTRmNzY5NmU3NGI1NDMwZDdmMjA5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5MWI2MTYwODQ4MzRiNzA4ZGQwY2E4ZjYzM2M5ODA1ID0gJCgnPGRpdiBpZD0iaHRtbF8yOTFiNjE2MDg0ODM0YjcwOGRkMGNhOGY2MzNjOTgwNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFSQ0VOWS9USEVGVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTA4ZTAzOWMwN2Q5NGY3Njk2ZTc0YjU0MzBkN2YyMDkuc2V0Q29udGVudChodG1sXzI5MWI2MTYwODQ4MzRiNzA4ZGQwY2E4ZjYzM2M5ODA1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjY3ZWRkNTM1YzBlNDkxYzgwOGVlMjhhZmY5ZTgyNjUuYmluZFBvcHVwKHBvcHVwX2EwOGUwMzljMDdkOTRmNzY5NmU3NGI1NDMwZDdmMjA5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdlNTI3Mzg1OWEyNDRkMjk4MmQxN2IyODEzYzAzMWNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3MDkwMjc0MzY2OSwtMTIyLjQyMTMzMjY4NDYzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2Mzk4ZTY5OWFmYTQ3MDZiMzIyYjg1MTc1NjE4MTRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FlYzNlOTE1ZWRjYzQyNjJhZGJhMzg5YzU4YTNlYmYyID0gJCgnPGRpdiBpZD0iaHRtbF9hZWMzZTkxNWVkY2M0MjYyYWRiYTM4OWM1OGEzZWJmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlTU0lORyBQRVJTT048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2Mzk4ZTY5OWFmYTQ3MDZiMzIyYjg1MTc1NjE4MTRhLnNldENvbnRlbnQoaHRtbF9hZWMzZTkxNWVkY2M0MjYyYWRiYTM4OWM1OGEzZWJmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdlNTI3Mzg1OWEyNDRkMjk4MmQxN2IyODEzYzAzMWNkLmJpbmRQb3B1cChwb3B1cF81NjM5OGU2OTlhZmE0NzA2YjMyMmI4NTE3NTYxODE0YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lODI5ZjZhYWJmOGM0YzM4OWZlMTljZWZkNzMyNTdhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzA5MDI3NDM2NjksLTEyMi40MjEzMzI2ODQ2MzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNTI3YjIzZDQ4N2Y0ZGRmYjRhNGQ5NTdmOWI5YjkzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTgwZTQ0N2FlNzU0YmQxYTFmMmM4MWEzYzVjNzg4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjE4MGU0NDdhZTc1NGJkMWExZjJjODFhM2M1Yzc4OGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JU1NJTkcgUEVSU09OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNTI3YjIzZDQ4N2Y0ZGRmYjRhNGQ5NTdmOWI5YjkzZC5zZXRDb250ZW50KGh0bWxfZjE4MGU0NDdhZTc1NGJkMWExZjJjODFhM2M1Yzc4OGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lODI5ZjZhYWJmOGM0YzM4OWZlMTljZWZkNzMyNTdhNS5iaW5kUG9wdXAocG9wdXBfYzUyN2IyM2Q0ODdmNGRkZmI0YTRkOTU3ZjliOWI5M2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2M1NzAzY2RmYTVmNDg5MGFjMzFiYjEzZmQxODFhYmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIyNDU4MjIzOTE3LC0xMjIuNDQ2NjEyOTc4ODM5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA0YTY0ZjExM2FjNDY3MDg1MWFiZTY1NjBlNmNlMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGY2N2QzYTNiYWY1NDMyMGIzMGY0NDZiZmQ1NGU4YzggPSAkKCc8ZGl2IGlkPSJodG1sXzRmNjdkM2EzYmFmNTQzMjBiMzBmNDQ2YmZkNTRlOGM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTA0YTY0ZjExM2FjNDY3MDg1MWFiZTY1NjBlNmNlMzIuc2V0Q29udGVudChodG1sXzRmNjdkM2EzYmFmNTQzMjBiMzBmNDQ2YmZkNTRlOGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2M1NzAzY2RmYTVmNDg5MGFjMzFiYjEzZmQxODFhYmIuYmluZFBvcHVwKHBvcHVwXzkwNGE2NGYxMTNhYzQ2NzA4NTFhYmU2NTYwZTZjZTMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ2MjJjNDEyMTMyNjQ1ZTE4MGE4ZTQxZDRjZTRmNzMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwMDM3OTk5NTEyNzk1LC0xMjIuNDA0NTk0MTQwNjM0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQzYjkwMGUzY2MyNGUwN2JkZmQzYWRjNTBhYjliZjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDY0ZTQ1MzNhZjc0NGUzZWJhMmQyMWU3YzIxNDQ3YTUgPSAkKCc8ZGl2IGlkPSJodG1sXzQ2NGU0NTMzYWY3NDRlM2ViYTJkMjFlN2MyMTQ0N2E1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0M2I5MDBlM2NjMjRlMDdiZGZkM2FkYzUwYWI5YmY5LnNldENvbnRlbnQoaHRtbF80NjRlNDUzM2FmNzQ0ZTNlYmEyZDIxZTdjMjE0NDdhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ2MjJjNDEyMTMyNjQ1ZTE4MGE4ZTQxZDRjZTRmNzMzLmJpbmRQb3B1cChwb3B1cF9lNDNiOTAwZTNjYzI0ZTA3YmRmZDNhZGM1MGFiOWJmOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ODE5M2EzNGEyNTQ0ODFjYWNlZmM5ZTNjYmVkZjA4ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5NTMzMzgyNjc0MzYsLTEyMi4zOTczNzM3NDAwNjZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYmZjNGM2MDk3Njk0ZDc1YjQ0MmRiNjJkNTU4ZDg0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTQ2ZTA0NjhiMDM0YjQ1YjM1NTFhYWI1NGYxMGI1ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2U0NmUwNDY4YjAzNGI0NWIzNTUxYWFiNTRmMTBiNWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGJmYzRjNjA5NzY5NGQ3NWI0NDJkYjYyZDU1OGQ4NDkuc2V0Q29udGVudChodG1sX2NlNDZlMDQ2OGIwMzRiNDViMzU1MWFhYjU0ZjEwYjVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzgxOTNhMzRhMjU0NDgxY2FjZWZjOWUzY2JlZGYwOGQuYmluZFBvcHVwKHBvcHVwXzBiZmM0YzYwOTc2OTRkNzViNDQyZGI2MmQ1NThkODQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZjODQxMjkwNzBlOTRiNmU5NzZkNzQ0YzBmZmJlODQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3NTE1ODc0MTYyMjk1LC0xMjIuNDA3NDM0OTg5NTIzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTA0ZTc1YWNjZmM2NGE1YmI1YmJiMjU4MDUzNjQ5NmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDVlZDIwYzJmMzg5NDlhMGFiMzlhZWNjYjEyOWVkYTMgPSAkKCc8ZGl2IGlkPSJodG1sXzA1ZWQyMGMyZjM4OTQ5YTBhYjM5YWVjY2IxMjllZGEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTA0ZTc1YWNjZmM2NGE1YmI1YmJiMjU4MDUzNjQ5NmEuc2V0Q29udGVudChodG1sXzA1ZWQyMGMyZjM4OTQ5YTBhYjM5YWVjY2IxMjllZGEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmM4NDEyOTA3MGU5NGI2ZTk3NmQ3NDRjMGZmYmU4NDMuYmluZFBvcHVwKHBvcHVwXzUwNGU3NWFjY2ZjNjRhNWJiNWJiYjI1ODA1MzY0OTZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNhNDk3YzBiYTE1MjQ5NzJhYTIxNDIwOWEyNmM0ODZkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhZjBiYWY3NzNhYzRjZmViODZmYjhmZDMyODE2MDU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzOWY2NjY4MzI1NDQxNDdiZWZiZGI5YWI3OWRiMTZiID0gJCgnPGRpdiBpZD0iaHRtbF84MzlmNjY2ODMyNTQ0MTQ3YmVmYmRiOWFiNzlkYjE2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UFJPU1RJVFVUSU9OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYWYwYmFmNzczYWM0Y2ZlYjg2ZmI4ZmQzMjgxNjA1OC5zZXRDb250ZW50KGh0bWxfODM5ZjY2NjgzMjU0NDE0N2JlZmJkYjlhYjc5ZGIxNmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYTQ5N2MwYmExNTI0OTcyYWEyMTQyMDlhMjZjNDg2ZC5iaW5kUG9wdXAocG9wdXBfZGFmMGJhZjc3M2FjNGNmZWI4NmZiOGZkMzI4MTYwNTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2Y4YWVjMGU0NDY2NDZmMDg5MDcxNmNmNzJlYjFlMWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Nzg1MjMzNzc2MDMyLC0xMjIuNDAzNDY0MDgwMDMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2MyZjQ5MmRiMzllNGQ1Yzg4MTYwMDJkNzQ4YWVjOTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI4MDkzMTEyNDYyNGJmYThmMzZiZTE1Yjc3ZDU0NWIgPSAkKCc8ZGl2IGlkPSJodG1sXzkyODA5MzExMjQ2MjRiZmE4ZjM2YmUxNWI3N2Q1NDViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2MyZjQ5MmRiMzllNGQ1Yzg4MTYwMDJkNzQ4YWVjOTYuc2V0Q29udGVudChodG1sXzkyODA5MzExMjQ2MjRiZmE4ZjM2YmUxNWI3N2Q1NDViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2Y4YWVjMGU0NDY2NDZmMDg5MDcxNmNmNzJlYjFlMWEuYmluZFBvcHVwKHBvcHVwX2NjMmY0OTJkYjM5ZTRkNWM4ODE2MDAyZDc0OGFlYzk2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQwOTVlZThjNzhjNTQ4NDZiNjAxODlhZjg3ZTg1NDEyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczMjkxODA2OTAyOTk2LC0xMjIuNDM2NjE0MTgxMzMxMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MjQyNDUyYmI5NmE0NDdjYTY0YjU5NWRhYjgyODY2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZmQzN2U3ODU3NzE0NjQwYjY2YTRiYjk0NGY2MDFjYSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWZkMzdlNzg1NzcxNDY0MGI2NmE0YmI5NDRmNjAxY2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjI0MjQ1MmJiOTZhNDQ3Y2E2NGI1OTVkYWI4Mjg2NjQuc2V0Q29udGVudChodG1sXzlmZDM3ZTc4NTc3MTQ2NDBiNjZhNGJiOTQ0ZjYwMWNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDA5NWVlOGM3OGM1NDg0NmI2MDE4OWFmODdlODU0MTIuYmluZFBvcHVwKHBvcHVwXzYyNDI0NTJiYjk2YTQ0N2NhNjRiNTk1ZGFiODI4NjY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFlMzExNjQ3MTlmMTRiODdiYjE0NjE4ZTg2OGJmZWJjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgwNTI3NTc4NTA5LC0xMjIuMzk2ODQ5MDE1MTcyMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZmQ2OTAxM2I5MGQ0NmZlOTUwMzAxMmVhYjQ5ZjRlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYmZmYzY3MThmNmU0ZTNkODU4ZTg0MTk5MTAwMzNkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYmJmZmM2NzE4ZjZlNGUzZDg1OGU4NDE5OTEwMDMzZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRSVUcvTkFSQ09USUM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmZDY5MDEzYjkwZDQ2ZmU5NTAzMDEyZWFiNDlmNGUzLnNldENvbnRlbnQoaHRtbF9iYmZmYzY3MThmNmU0ZTNkODU4ZTg0MTk5MTAwMzNkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFlMzExNjQ3MTlmMTRiODdiYjE0NjE4ZTg2OGJmZWJjLmJpbmRQb3B1cChwb3B1cF83ZmQ2OTAxM2I5MGQ0NmZlOTUwMzAxMmVhYjQ5ZjRlMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZDFkY2FlNzc0Zjg0NTFhYWRhNmFiZjZmNmIwNDUxMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MDUyNzU3ODUwOSwtMTIyLjM5Njg0OTAxNTE3MjAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzBmMDdkYmY0ZTIxNDk1OGIwYjFiMGM5Y2M0N2EwODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDEyMjgzNzI3OGI1NDBjN2FlMGM0ZDJiODkzYTBlYmMgPSAkKCc8ZGl2IGlkPSJodG1sXzQxMjI4MzcyNzhiNTQwYzdhZTBjNGQyYjg5M2EwZWJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzBmMDdkYmY0ZTIxNDk1OGIwYjFiMGM5Y2M0N2EwODkuc2V0Q29udGVudChodG1sXzQxMjI4MzcyNzhiNTQwYzdhZTBjNGQyYjg5M2EwZWJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmQxZGNhZTc3NGY4NDUxYWFkYTZhYmY2ZjZiMDQ1MTAuYmluZFBvcHVwKHBvcHVwX2MwZjA3ZGJmNGUyMTQ5NThiMGIxYjBjOWNjNDdhMDg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QzOTg2ZjVlMTUyZDRmMGFiNWM1YzNhOGQ2MmJlYTE2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NDE4MDcwNjYwMjA0LC0xMjIuNDUwMDAwNzkwNDQ1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWE3NjZjODQyZThmNDA5ZDkyYmRlN2Y5MWEwYTIzNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGNhOWJiYzU3YTNlNDFlYzhhZDM0MGM3ZjU3MWZjNDAgPSAkKCc8ZGl2IGlkPSJodG1sXzRjYTliYmM1N2EzZTQxZWM4YWQzNDBjN2Y1NzFmYzQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTc2NmM4NDJlOGY0MDlkOTJiZGU3ZjkxYTBhMjM2OC5zZXRDb250ZW50KGh0bWxfNGNhOWJiYzU3YTNlNDFlYzhhZDM0MGM3ZjU3MWZjNDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMzk4NmY1ZTE1MmQ0ZjBhYjVjNWMzYThkNjJiZWExNi5iaW5kUG9wdXAocG9wdXBfYWE3NjZjODQyZThmNDA5ZDkyYmRlN2Y5MWEwYTIzNjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGM3YTY3ODQ3MWY3NGM0NGJjMTQ5Mzk5NWRiYjM2M2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyMTE0NjQ3MzU5LC0xMjIuNDAwODM0MjgzMDMxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTQ2OTA5MTgzYThlNGI4ZGI0ZDI4YmE2MTQ4OGM1YzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2E5NDkzNDMwZTk3NGViMmI1NGFiYWMwNjI4ZjRlOWEgPSAkKCc8ZGl2IGlkPSJodG1sX2NhOTQ5MzQzMGU5NzRlYjJiNTRhYmFjMDYyOGY0ZTlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQ2OTA5MTgzYThlNGI4ZGI0ZDI4YmE2MTQ4OGM1YzYuc2V0Q29udGVudChodG1sX2NhOTQ5MzQzMGU5NzRlYjJiNTRhYmFjMDYyOGY0ZTlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGM3YTY3ODQ3MWY3NGM0NGJjMTQ5Mzk5NWRiYjM2M2IuYmluZFBvcHVwKHBvcHVwXzE0NjkwOTE4M2E4ZTRiOGRiNGQyOGJhNjE0ODhjNWM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE0ODI1ZmEyNzdkMjRhNGJiODlkNjM3MmI3YmZjZDU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MDA2NTMyNDM5MjA1LC0xMjIuMzk5ODAyMTQ1Nzk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmM2MzI2NTlhMGI5NGYzM2E0YTNmYjE1MWY3NGVjYzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBiYTI5MzU1ZjQ0NDlkZTg3YWNiMzRjN2I2ZDc0NzkgPSAkKCc8ZGl2IGlkPSJodG1sXzcwYmEyOTM1NWY0NDQ5ZGU4N2FjYjM0YzdiNmQ3NDc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYzYzMjY1OWEwYjk0ZjMzYTRhM2ZiMTUxZjc0ZWNjNy5zZXRDb250ZW50KGh0bWxfNzBiYTI5MzU1ZjQ0NDlkZTg3YWNiMzRjN2I2ZDc0NzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xNDgyNWZhMjc3ZDI0YTRiYjg5ZDYzNzJiN2JmY2Q1OC5iaW5kUG9wdXAocG9wdXBfZmM2MzI2NTlhMGI5NGYzM2E0YTNmYjE1MWY3NGVjYzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzgyMDU4MGVkODUzNGE0Yzk1ZjkwMTNiOTEwNjM4M2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjM5NzQ4MjQxNjA5LC0xMjIuMzk0OTI4NDc1OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzMDAwNzM3ZmUzYzQzOGE5NjA0MzcwNjY0NGU2MjcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4M2I2NjEyMDc5YjQ2ZDRiNzUxNzYxYzQyMmE5NWQ3ID0gJCgnPGRpdiBpZD0iaHRtbF9iODNiNjYxMjA3OWI0NmQ0Yjc1MTc2MWM0MjJhOTVkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0VDT05EQVJZIENPREVTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMzAwMDczN2ZlM2M0MzhhOTYwNDM3MDY2NDRlNjI3Mi5zZXRDb250ZW50KGh0bWxfYjgzYjY2MTIwNzliNDZkNGI3NTE3NjFjNDIyYTk1ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zODIwNTgwZWQ4NTM0YTRjOTVmOTAxM2I5MTA2MzgzZi5iaW5kUG9wdXAocG9wdXBfZjMwMDA3MzdmZTNjNDM4YTk2MDQzNzA2NjQ0ZTYyNzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGI1ZGIxMDRkODE5NDc5MzgzYjE4ODk2ZjY3ODU0YjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjM5NzQ4MjQxNjA5LC0xMjIuMzk0OTI4NDc1OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhMzFmNjRiYmVmYjRmYWNiMjk2OTZhNmQxNGVhYThiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzOTA5ZTYyZWUyMjRjZDJiYTVkODJkZDJkOThkZTVlID0gJCgnPGRpdiBpZD0iaHRtbF9jMzkwOWU2MmVlMjI0Y2QyYmE1ZDgyZGQyZDk4ZGU1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U1VTUElDSU9VUyBPQ0M8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhMzFmNjRiYmVmYjRmYWNiMjk2OTZhNmQxNGVhYThiLnNldENvbnRlbnQoaHRtbF9jMzkwOWU2MmVlMjI0Y2QyYmE1ZDgyZGQyZDk4ZGU1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhiNWRiMTA0ZDgxOTQ3OTM4M2IxODg5NmY2Nzg1NGI5LmJpbmRQb3B1cChwb3B1cF9kYTMxZjY0YmJlZmI0ZmFjYjI5Njk2YTZkMTRlYWE4Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84OWMyZDQ2NjEyYWE0MTQ1YmVhYmEzMDExZjY3MzZhYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQ3NzY2ZmI4YzM4NDQyNDhjNzk3NGI3MTBhNDcwN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGQyMDJkNjlmYjRlNDEyZGI5ZmEyN2VjZTlhNjM4NDcgPSAkKCc8ZGl2IGlkPSJodG1sXzBkMjAyZDY5ZmI0ZTQxMmRiOWZhMjdlY2U5YTYzODQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ3NzY2ZmI4YzM4NDQyNDhjNzk3NGI3MTBhNDcwN2Muc2V0Q29udGVudChodG1sXzBkMjAyZDY5ZmI0ZTQxMmRiOWZhMjdlY2U5YTYzODQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODljMmQ0NjYxMmFhNDE0NWJlYWJhMzAxMWY2NzM2YWIuYmluZFBvcHVwKHBvcHVwXzc0Nzc2NmZiOGMzODQ0MjQ4Yzc5NzRiNzEwYTQ3MDdjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZkNzVmZDMzMzBmNjQ5MTU5MmI4MDhjOWRkNTVjMzYwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MzIzNTQ0OTkwNCwtMTIyLjQxMTg1NzAzMjU0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTc2ZmZiMTY1YTcxNGJlMTg4YzljZGY2YzM3YmI3YTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjQyZTBlMjA2ZmVjNDFkYmFiN2E5NjFjYjNlMTFmNmYgPSAkKCc8ZGl2IGlkPSJodG1sXzI0MmUwZTIwNmZlYzQxZGJhYjdhOTYxY2IzZTExZjZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNzZmZmIxNjVhNzE0YmUxODhjOWNkZjZjMzdiYjdhOS5zZXRDb250ZW50KGh0bWxfMjQyZTBlMjA2ZmVjNDFkYmFiN2E5NjFjYjNlMTFmNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZDc1ZmQzMzMwZjY0OTE1OTJiODA4YzlkZDU1YzM2MC5iaW5kUG9wdXAocG9wdXBfYTc2ZmZiMTY1YTcxNGJlMTg4YzljZGY2YzM3YmI3YTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWFhYmRiOTViYjRmNGFlMGJiNmM4OGNjYmU5YWFmODYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTU5OTc3MzM5ODU2LC0xMjIuNDA5NDM1NjE3MTA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjlmZTFkZDY2MzZiNDE4NGI2ZjZmYjRiOGNmNjc1MTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjk1YTE4ZjA0MjY4NGJkNzgyNjQwYjA4MDQ1NDI4NzIgPSAkKCc8ZGl2IGlkPSJodG1sX2I5NWExOGYwNDI2ODRiZDc4MjY0MGIwODA0NTQyODcyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjlmZTFkZDY2MzZiNDE4NGI2ZjZmYjRiOGNmNjc1MTIuc2V0Q29udGVudChodG1sX2I5NWExOGYwNDI2ODRiZDc4MjY0MGIwODA0NTQyODcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWFhYmRiOTViYjRmNGFlMGJiNmM4OGNjYmU5YWFmODYuYmluZFBvcHVwKHBvcHVwX2I5ZmUxZGQ2NjM2YjQxODRiNmY2ZmI0YjhjZjY3NTEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EyNzI3MWJmZDg3ZDQ3MjI5MmM1YzhjY2E4ZDc2ODg2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3MDc5ODE0NDQ0MywtMTIyLjQyNTg4MzM1ODE0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhMmY1YmMwYTllYjQ3ZDg5OGFjOGFiZGYwMDllMWQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmODAxNjY2ZTQ3NzQ4NDM4YjM4YWEzNzUwMzAzZWQxID0gJCgnPGRpdiBpZD0iaHRtbF9mZjgwMTY2NmU0Nzc0ODQzOGIzOGFhMzc1MDMwM2VkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YTJmNWJjMGE5ZWI0N2Q4OThhYzhhYmRmMDA5ZTFkNC5zZXRDb250ZW50KGh0bWxfZmY4MDE2NjZlNDc3NDg0MzhiMzhhYTM3NTAzMDNlZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMjcyNzFiZmQ4N2Q0NzIyOTJjNWM4Y2NhOGQ3Njg4Ni5iaW5kUG9wdXAocG9wdXBfOWEyZjViYzBhOWViNDdkODk4YWM4YWJkZjAwOWUxZDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzM0MzUzZWFmZjY1NGI0MTg1MmYwNGVkZjNkMDRjZTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzYwMzc0NDY2ODYyMDQsLTEyMi40MTUxMjY1NDMwMDEwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjYzUzMWYwY2U4NTQzYTk5Yzg2ZTEwYWQ1NjFmODdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1NzE1YjhkNzM3NDQwNzVhZWQwMmM2NDg3MTVmM2M0ID0gJCgnPGRpdiBpZD0iaHRtbF8xNTcxNWI4ZDczNzQ0MDc1YWVkMDJjNjQ4NzE1ZjNjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jY2M1MzFmMGNlODU0M2E5OWM4NmUxMGFkNTYxZjg3Yi5zZXRDb250ZW50KGh0bWxfMTU3MTViOGQ3Mzc0NDA3NWFlZDAyYzY0ODcxNWYzYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMzQzNTNlYWZmNjU0YjQxODUyZjA0ZWRmM2QwNGNlNy5iaW5kUG9wdXAocG9wdXBfY2NjNTMxZjBjZTg1NDNhOTljODZlMTBhZDU2MWY4N2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTkxNTkwMWY4NGM4NGE0MmI1N2MwZmUzNzEwZDMyMTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTI3Njc4ODQ4MjEsLTEyMi40MzE5MjgwMTEwODldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTFiMjVkZjhlNmY0NDU4Yjc5MTIwNjM4NGUxYWExYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zM2JjOWE1YTc1ZDk0YTMyYTNiYjg2MzA1NmYzZmQxMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzNiYzlhNWE3NWQ5NGEzMmEzYmI4NjMwNTZmM2ZkMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MTFiMjVkZjhlNmY0NDU4Yjc5MTIwNjM4NGUxYWExYi5zZXRDb250ZW50KGh0bWxfMzNiYzlhNWE3NWQ5NGEzMmEzYmI4NjMwNTZmM2ZkMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81OTE1OTAxZjg0Yzg0YTQyYjU3YzBmZTM3MTBkMzIxNy5iaW5kUG9wdXAocG9wdXBfNzExYjI1ZGY4ZTZmNDQ1OGI3OTEyMDYzODRlMWFhMWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjQzY2JjYjFmMDQ1NDllYWIzN2JkM2MwNDlmMTlhZDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODk1NzEwMjU1ODYzLC0xMjIuNDAyMTYzNzEzNjE4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGRlYzM1MzQzNGM0NGJhMDhiNzNmZDM0ODUxODk2YzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTU5YjcyMDg4N2U5NDc5Mzk5ZDA2Y2RmY2VhNzI3MjIgPSAkKCc8ZGl2IGlkPSJodG1sXzU1OWI3MjA4ODdlOTQ3OTM5OWQwNmNkZmNlYTcyNzIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EUlVOS0VOTkVTUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGRlYzM1MzQzNGM0NGJhMDhiNzNmZDM0ODUxODk2YzMuc2V0Q29udGVudChodG1sXzU1OWI3MjA4ODdlOTQ3OTM5OWQwNmNkZmNlYTcyNzIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjQzY2JjYjFmMDQ1NDllYWIzN2JkM2MwNDlmMTlhZDUuYmluZFBvcHVwKHBvcHVwX2RkZWMzNTM0MzRjNDRiYTA4YjczZmQzNDg1MTg5NmMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I0MGNhZDUyM2U2MjQxMWM4OWRlNTcxYWE1MDBlZjQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwNzQyOTE2OTU1OSwtMTIyLjQyOTMwNjcyODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1YmY2MGM1YmNkOTQyZThiZDA5NmY3ZDA0Y2UxNmRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllYTNkMGJjN2NiNjQ1Yzc5Y2RjNWQ3N2VkYjZhODQ2ID0gJCgnPGRpdiBpZD0iaHRtbF85ZWEzZDBiYzdjYjY0NWM3OWNkYzVkNzdlZGI2YTg0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1YmY2MGM1YmNkOTQyZThiZDA5NmY3ZDA0Y2UxNmRiLnNldENvbnRlbnQoaHRtbF85ZWEzZDBiYzdjYjY0NWM3OWNkYzVkNzdlZGI2YTg0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I0MGNhZDUyM2U2MjQxMWM4OWRlNTcxYWE1MDBlZjQ1LmJpbmRQb3B1cChwb3B1cF85NWJmNjBjNWJjZDk0MmU4YmQwOTZmN2QwNGNlMTZkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NWRiOTNlN2M3ZjE0ZGEwOTllNTQ2MWQwOGM3ZTA0YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MzgzNjU1NjUzNDc5NCwtMTIyLjQxMzc5MDk3Mjc4MDk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjQ1MDNkMzBjMDhjNDc1NDgwNDY5YjYzM2MxYTRlMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzVjNWU5MDlkYjI0NGIyYjgzODczYmVhODI1YWFmY2IgPSAkKCc8ZGl2IGlkPSJodG1sXzM1YzVlOTA5ZGIyNDRiMmI4Mzg3M2JlYTgyNWFhZmNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WQU5EQUxJU008L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0NTAzZDMwYzA4YzQ3NTQ4MDQ2OWI2MzNjMWE0ZTM1LnNldENvbnRlbnQoaHRtbF8zNWM1ZTkwOWRiMjQ0YjJiODM4NzNiZWE4MjVhYWZjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ1ZGI5M2U3YzdmMTRkYTA5OWU1NDYxZDA4YzdlMDRiLmJpbmRQb3B1cChwb3B1cF9iNDUwM2QzMGMwOGM0NzU0ODA0NjliNjMzYzFhNGUzNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZDhlNzc1NDFiZDg0ODVkYTAzZTQwMGQ3MGRkNWFlNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDc0MjkxNjk1NTksLTEyMi40MjkzMDY3MjgzNzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNzk3YzgyMWM4Y2I0NjlmOTQ5NjBlNDgxMDA0YmU4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZGQ2Y2U5NzIyMjY0YTk2ODYxZTAzNjZkOGU4MDIwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMmRkNmNlOTcyMjI2NGE5Njg2MWUwMzY2ZDhlODAyMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzk3YzgyMWM4Y2I0NjlmOTQ5NjBlNDgxMDA0YmU4ZC5zZXRDb250ZW50KGh0bWxfMmRkNmNlOTcyMjI2NGE5Njg2MWUwMzY2ZDhlODAyMDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZDhlNzc1NDFiZDg0ODVkYTAzZTQwMGQ3MGRkNWFlNC5iaW5kUG9wdXAocG9wdXBfMTc5N2M4MjFjOGNiNDY5Zjk0OTYwZTQ4MTAwNGJlOGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGZlMjU2MWVlYmMwNDQxZWFjNDYxMTQ4MzRiMGZkZTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzczNjIzNjA1MjEyOTYsLTEyMi40MjIwNjcxODQ5MzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMTFmYTBiZWRiYmM0NWRmODg4YTAwZDg1NjhkNjFmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NGU4ODZjNWJlZjI0MGQ2YmJmZWM2ZTM3MTM3OGUwOCA9ICQoJzxkaXYgaWQ9Imh0bWxfODRlODg2YzViZWYyNDBkNmJiZmVjNmUzNzEzNzhlMDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNFQ09OREFSWSBDT0RFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjExZmEwYmVkYmJjNDVkZjg4OGEwMGQ4NTY4ZDYxZjEuc2V0Q29udGVudChodG1sXzg0ZTg4NmM1YmVmMjQwZDZiYmZlYzZlMzcxMzc4ZTA4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGZlMjU2MWVlYmMwNDQxZWFjNDYxMTQ4MzRiMGZkZTMuYmluZFBvcHVwKHBvcHVwXzIxMWZhMGJlZGJiYzQ1ZGY4ODhhMDBkODU2OGQ2MWYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U4NDlmY2EzZTJiNjRjYmQ4MTI4YTNiY2U5M2RiNTJhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM3MzYyMzYwNTIxMjk2LC0xMjIuNDIyMDY3MTg0OTM3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjk1YzIyYjQwM2YwNGEyMTk0YzJiZDlmMGI1OGYwNTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDA1MDAwNDk3YTI0NGE5YjgwZTZjNzQ4YzE1MTdmZTAgPSAkKCc8ZGl2IGlkPSJodG1sX2QwNTAwMDQ5N2EyNDRhOWI4MGU2Yzc0OGMxNTE3ZmUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WQU5EQUxJU008L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5NWMyMmI0MDNmMDRhMjE5NGMyYmQ5ZjBiNThmMDU3LnNldENvbnRlbnQoaHRtbF9kMDUwMDA0OTdhMjQ0YTliODBlNmM3NDhjMTUxN2ZlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U4NDlmY2EzZTJiNjRjYmQ4MTI4YTNiY2U5M2RiNTJhLmJpbmRQb3B1cChwb3B1cF9iOTVjMjJiNDAzZjA0YTIxOTRjMmJkOWYwYjU4ZjA1Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZGZjMjExYjFhZmM0YjVlOGUwNmI1NGExOWVhYjQ5MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NTk5ODgzMjM3OTc5NiwtMTIyLjQxMTc0NzM3MTkyNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhYTVkOTdmNWUyYTQ4YTY4NjU4NWNiYWVjYjFkNjM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiMDMxZjRkZTZkYjQwMDA5YWM2NTk3ODEzMDY5NjIwID0gJCgnPGRpdiBpZD0iaHRtbF8xYjAzMWY0ZGU2ZGI0MDAwOWFjNjU5NzgxMzA2OTYyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U1VTUElDSU9VUyBPQ0M8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhYTVkOTdmNWUyYTQ4YTY4NjU4NWNiYWVjYjFkNjM5LnNldENvbnRlbnQoaHRtbF8xYjAzMWY0ZGU2ZGI0MDAwOWFjNjU5NzgxMzA2OTYyMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RkZmMyMTFiMWFmYzRiNWU4ZTA2YjU0YTE5ZWFiNDkwLmJpbmRQb3B1cChwb3B1cF9jYWE1ZDk3ZjVlMmE0OGE2ODY1ODVjYmFlY2IxZDYzOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNmUyMzI4NTg4MjM0NDdiODViZTRjZDY2NjMzMmI4OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MzM3NTgwNTgwNTksLTEyMi40MjA0MzQ3MjQ1NTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0NmVjZDdiN2VmZjQ3MzI5YTIyMTE3ODM1OTg3NjNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmYzdiNTVmMThhZDQyMGE4YzBjNDg3YzcwMDJiY2QzID0gJCgnPGRpdiBpZD0iaHRtbF9hZmM3YjU1ZjE4YWQ0MjBhOGMwYzQ4N2M3MDAyYmNkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0NmVjZDdiN2VmZjQ3MzI5YTIyMTE3ODM1OTg3NjNkLnNldENvbnRlbnQoaHRtbF9hZmM3YjU1ZjE4YWQ0MjBhOGMwYzQ4N2M3MDAyYmNkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI2ZTIzMjg1ODgyMzQ0N2I4NWJlNGNkNjY2MzMyYjg5LmJpbmRQb3B1cChwb3B1cF81NDZlY2Q3YjdlZmY0NzMyOWEyMjExNzgzNTk4NzYzZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MjhmYWJjNDc4Y2U0ZDI4YTY4M2E0MDAwYjc0MTY3NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NTAyMjY2MjI3ODYsLTEyMi40MTE5ODc2NDM1OTUwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2MWVjNjk5N2ViNDRkYWRiOGVlOGUzNTA0Y2E3ZDZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkYWE4NTA3MTBhYTRkMjM5NGM4MWQyZDk1NDRlYjNlID0gJCgnPGRpdiBpZD0iaHRtbF9mZGFhODUwNzEwYWE0ZDIzOTRjODFkMmQ5NTQ0ZWIzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjFlYzY5OTdlYjQ0ZGFkYjhlZThlMzUwNGNhN2Q2ZC5zZXRDb250ZW50KGh0bWxfZmRhYTg1MDcxMGFhNGQyMzk0YzgxZDJkOTU0NGViM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MjhmYWJjNDc4Y2U0ZDI4YTY4M2E0MDAwYjc0MTY3NS5iaW5kUG9wdXAocG9wdXBfNDYxZWM2OTk3ZWI0NGRhZGI4ZWU4ZTM1MDRjYTdkNmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTIwZDc1Nzg0YTA3NGZlZWExN2ZjMmQ3NDExMDJmOTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ2MjA2NDkxMDY0OTUsLTEyMi41MDAzODA0Mjc5MTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDg3ZjBlOWY0MDE0ZTk0YmRmOGY2MGY5OTQ3ZjVjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZTBlY2EzOTE2YzM0YjBjYTg2MGI1NjgwZGQ0MzJmMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMGUwZWNhMzkxNmMzNGIwY2E4NjBiNTY4MGRkNDMyZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDg3ZjBlOWY0MDE0ZTk0YmRmOGY2MGY5OTQ3ZjVjMy5zZXRDb250ZW50KGh0bWxfMGUwZWNhMzkxNmMzNGIwY2E4NjBiNTY4MGRkNDMyZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MjBkNzU3ODRhMDc0ZmVlYTE3ZmMyZDc0MTEwMmY5OS5iaW5kUG9wdXAocG9wdXBfNGQ4N2YwZTlmNDAxNGU5NGJkZjhmNjBmOTk0N2Y1YzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWZlYjMxYWFjMGUyNGM3ZmE1YmVhZGE3ZDg1YWU1OWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzUxOTE4MjY3MjE3LC0xMjIuNDY2NTU4NzgwNjgzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZTU3OTEwNzZlZThkNDg4NjliZjAwZTljMGQwNzBmYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmJlNjVhYWZhY2U1NGE4NGE2ZTAxZDhlNDAwYmJkMDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjY3NzFlNDE3YWRjNDA3MmE3ZTNiMTNmZDlhMmU3NzUgPSAkKCc8ZGl2IGlkPSJodG1sXzI2NzcxZTQxN2FkYzQwNzJhN2UzYjEzZmQ5YTJlNzc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ST0JCRVJZPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYmU2NWFhZmFjZTU0YTg0YTZlMDFkOGU0MDBiYmQwMS5zZXRDb250ZW50KGh0bWxfMjY3NzFlNDE3YWRjNDA3MmE3ZTNiMTNmZDlhMmU3NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ZmViMzFhYWMwZTI0YzdmYTViZWFkYTdkODVhZTU5ZC5iaW5kUG9wdXAocG9wdXBfMmJlNjVhYWZhY2U1NGE4NGE2ZTAxZDhlNDAwYmJkMDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGE4MzllMjI2ZjQyNDFlMTgxZDZlMWU1NTQzZDA0ZDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkwODQxNzI5MDI4LC0xMjIuNDg2OTI1OTYwMTE0MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTI3MDU0ZmE5NGY0MGY3OTg1ZGNhNGE5YmQ3NWYzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNThlMjUxY2FmOTQ0Y2ExYmY4NTQxYzdhOTMxYjgxOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTU4ZTI1MWNhZjk0NGNhMWJmODU0MWM3YTkzMWI4MTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTI3MDU0ZmE5NGY0MGY3OTg1ZGNhNGE5YmQ3NWYzNS5zZXRDb250ZW50KGh0bWxfMTU4ZTI1MWNhZjk0NGNhMWJmODU0MWM3YTkzMWI4MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80YTgzOWUyMjZmNDI0MWUxODFkNmUxZTU1NDNkMDRkMC5iaW5kUG9wdXAocG9wdXBfNWUyNzA1NGZhOTRmNDBmNzk4NWRjYTRhOWJkNzVmMzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGRjZDRjZWUwOGYyNGMyODliYzk5ZjlkNDg1NzUyZjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Njg1MzYwMTIzNTgzLC0xMjIuNDE1NjE2MzM4MzE5OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NTBjZDlmZDEzZDU0NjY2YjUxOTNmMjZkZGJlMjU0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNzhlMGFlOWY0ZDQ0ODNmYmI1MmI3ZmU4ZjViZmFlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjc4ZTBhZTlmNGQ0NDgzZmJiNTJiN2ZlOGY1YmZhZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODUwY2Q5ZmQxM2Q1NDY2NmI1MTkzZjI2ZGRiZTI1NDIuc2V0Q29udGVudChodG1sX2I3OGUwYWU5ZjRkNDQ4M2ZiYjUyYjdmZThmNWJmYWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGRjZDRjZWUwOGYyNGMyODliYzk5ZjlkNDg1NzUyZjkuYmluZFBvcHVwKHBvcHVwXzg1MGNkOWZkMTNkNTQ2NjZiNTE5M2YyNmRkYmUyNTQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk4ZGI1OGE3MjEwMzQwODZiNDBlMmRmNDM3Y2IzMWNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NDI5NzcxNDA3NCwtMTIyLjQ0OTc1MTY1MjU2M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxODVmZjg4OGYzZDRmMDU4YWUxNTRiMjlhODU0MWVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3NTNjYmJhMGQ2NTRmZTY4NTllZjE5YTEzM2JkY2UxID0gJCgnPGRpdiBpZD0iaHRtbF9jNzUzY2JiYTBkNjU0ZmU2ODU5ZWYxOWExMzNiZGNlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSR0xBUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxODVmZjg4OGYzZDRmMDU4YWUxNTRiMjlhODU0MWVjLnNldENvbnRlbnQoaHRtbF9jNzUzY2JiYTBkNjU0ZmU2ODU5ZWYxOWExMzNiZGNlMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk4ZGI1OGE3MjEwMzQwODZiNDBlMmRmNDM3Y2IzMWNkLmJpbmRQb3B1cChwb3B1cF8wMTg1ZmY4ODhmM2Q0ZjA1OGFlMTU0YjI5YTg1NDFlYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNGIwZTI4OTc3MmI0ZWQ4OGRmYjlmYzQ0MzAzOTNhMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQyOTc3MTQwNzQsLTEyMi40NDk3NTE2NTI1NjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTRkMDhiZDVmZTE0ZTJhYTRiNjZkY2ZjN2U4NmMxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODlkZWNmMmViMjI0MGJmYTA4NWQyMjYwMzAxZTk3YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMTg5ZGVjZjJlYjIyNDBiZmEwODVkMjI2MDMwMWU5N2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBUkNFTlkvVEhFRlQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxNGQwOGJkNWZlMTRlMmFhNGI2NmRjZmM3ZTg2YzFjLnNldENvbnRlbnQoaHRtbF8xODlkZWNmMmViMjI0MGJmYTA4NWQyMjYwMzAxZTk3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U0YjBlMjg5NzcyYjRlZDg4ZGZiOWZjNDQzMDM5M2EwLmJpbmRQb3B1cChwb3B1cF9kMTRkMDhiZDVmZTE0ZTJhYTRiNjZkY2ZjN2U4NmMxYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lZDZkN2I4YmIyZWI0NTA5OTM2NjkzY2ViNmRiY2VhNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNTI2ODE0NjkwODM5NiwtMTIyLjQ3MjcxNTc1OTYzMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2U1NzkxMDc2ZWU4ZDQ4ODY5YmYwMGU5YzBkMDcwZmE1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwZGQ0ZDg5ZjUzNjQ3MjM4YjkyYjJhNmY0YjRlZTIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzY2ZjNWU5YzJhNTRkNzA4NjU2MWZhYTY4ZjU2NDAyID0gJCgnPGRpdiBpZD0iaHRtbF80M2NmYzVlOWMyYTU0ZDcwODY1NjFmYWE2OGY1NjQwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFSQ0VOWS9USEVGVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjBkZDRkODlmNTM2NDcyMzhiOTJiMmE2ZjRiNGVlMjAuc2V0Q29udGVudChodG1sXzQzY2ZjNWU5YzJhNTRkNzA4NjU2MWZhYTY4ZjU2NDAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWQ2ZDdiOGJiMmViNDUwOTkzNjY5M2NlYjZkYmNlYTYuYmluZFBvcHVwKHBvcHVwX2YwZGQ0ZDg5ZjUzNjQ3MjM4YjkyYjJhNmY0YjRlZTIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNTc5MTA3NmVlOGQ0ODg2OWJmMDBlOWMwZDA3MGZhNSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTlhNTRmMzA5OTE5NGEyNTliYzkyOGViZGU3NDk1MmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU0MjA3MDY3MTEsLTEyMi40MDM0MDQ3OTE0Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4ZGVkMDBmNGYyNDQ5YzM5ZTM1OWZjOGE5N2ZjMjRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZGRkYjU1MTBkYWQ0MWVjODlkYWYwNzJhNmRjMjEyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTk4MDk2NzI5OTU5NiwtMTIyLjM4ODg1NjIwNDI5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4MWViNmI1YTQ0YzRlNDk5YTcxZTlmMDEzZWE2YmY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1Nzg4Mzc2Njg4NzksLTEyMi40MTI5NzA1Mzc1OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZmY0NmFkYTVhNDA0M2YzOTA2OTI5ZmVlYjAyMzA4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTA1MDEyMTQ2NjgsLTEyMi40MTk2NzE3ODAyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNzlmYWE0YmY0MTU0NDVmYjg2NzZkNzg1ZTI4NjE5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODAxODU1NTgyOSwtMTIyLjQyNjA3NzE3NzM3NDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGJlYTQzYjI0MTQzNGFkMDg2Y2VjMjRlZGMzNGU0YjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA4Nzg5MzYwMjE0LC0xMjIuNDA1NzIxNDU0NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmQ5NjQ3N2Q5ODcyNDBkYThlMTdhZThkN2EyMjUxZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM5ODA1NTkyNjM0LC0xMjIuNDExNzc4Mjk1OTkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2NiY2YwYTIyMTI0NDVjMzg1ZmQ0MWE1M2IwNTVhNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU3ODc2MjE4MjkyOTUsLTEyMi4zOTMzNTcyNDE0NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDVhZTRjZjY0ZDY0NzYwOTg3YWZkM2MwMzQwMTA1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMDk2Njk2MTU0OTksLTEyMi4zODcxODE2MzU5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNjE1ODI0ODFmOWU0YzE0YWI2MDQzN2RhNmU2NzAzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQ3ODE1Nzg2OTUwNSwtMTIyLjQ3NzM3NjUyNDAwMjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTRjMzBiNDdhMWE5NDhjM2IxMTk5OTZmY2YxMTIxZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDU3Mzg5NDI5NjU0OTUsLTEyMi40Nzc5NjAzMjcyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZjI5N2FiNzI5NmE0MDU4OTZjMDdhYjc2MDcwNDM3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNTY5NzAyNzU0ODIwNiwtMTIyLjM3Njc1NzY1NTUzMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWU3NjZmY2E4NmViNGE1MjlhZjAwM2ZhOThkNjMzYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyNzA1MTk5NTkyLC0xMjIuNDMyMzI1ODcxMDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTQ0MTFkZGE2OGNmNGYzMDgwMjhkMWI0MzNiYTJlZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTE2NDI5ODIzODQsLTEyMi40MDA5MDg2OTg4ODk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg3MzNlM2JjYjBhNDQ4NDliNjdkZDVlYjIxODkxZDI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNzA2OTMwMTU0NSwtMTIyLjQwODU5NTExMDg2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmMDM2YTBhMWFmNzQxMjFhY2FkMTU5MDgzZDQ0MjQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU3Mjg5NTkwNDU3Nzk1LC0xMjIuNDA2ODcwNDAyMDgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDU2NmEyZjhmZGE0NDY0ZWI0OGQxODMzNDJjZjQ1NzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDg5MDYzMDUxODI5LC0xMjIuNDIwMzU0NzgwODYwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzhjOGMxNTVlZmQ0YmU5OTU1YzYzN2E3NzEwMzBiZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxNTc2NTQyNjk5NSwtMTIyLjQzOTkwOTc2Njc3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3YmE4MjliMWQwNjQ1NTA4ZmVlMmFjYzZhZjI3MzE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNTY5OTM4NjkxOCwtMTIyLjQwODQyMTExNjkyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyMzZiODI3OWU0MzRlMWI4MzM2NTllOGU1ODY0ZmI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczNjE4NjI3NjQ1NjA0LC0xMjIuNDIyMzE1NjcwNzQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGM1NjE4ZjMyYjkxNDNmMjhiMDkyZDU3MGI2ZjFkYjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTI4NDEyODQwNDQ3MDUsLTEyMi40MjQ1MTk4MzUwMDkwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVkZmQ2YTVjMzljMjQxOTViMmZjM2FjMDdiY2QzZWYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU0MDk4Njg4MjA2Nzk1LC0xMjIuNDE0MjMzODQ5MDM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NTgzOTZkZTViMDg0OGUxOWM0Y2FkMGU4NjU0Nzg4MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1NDA5ODY4ODIwNjc5NSwtMTIyLjQxNDIzMzg0OTAzNzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTczM2EzM2M2M2M5NDRjNGJiNmNkODI0NzQ3MWJkYmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzE0OTM5OTY5NDE2LC0xMjIuNTA3NzUwMTMxMDA0MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NzRmZjc3ZjVkYjI0MDU1YjJmZjQ0NzViMjYwYTU1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxODMwMjIwNDc2NjAwNSwtMTIyLjQ3NDQ0NDYzOTU5NDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjE3ZGZmNGJkZjllNGY5OGI3OTFjZmUxNzVhYTgyMmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ1NzUyMzE3NjE1LC0xMjIuNDI3NTYyNTk2OTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzM4OWE3MTU3ZTNmNGM4NjhhNjI1ZTYxMzc0N2NiY2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc0Mzc4MzA5MTEyLC0xMjIuNDE5MjAzMDA0MjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjBjMGYzMGQ4ZDhkNDZkMmIzYzU5NDc4OGJlMDE1ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkzNjg4Mjg0NTMyLC0xMjIuNDEyNjkwMTQyMzA4MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNTRmMGVkZjUxMzk0OGYxODJmYmVkOTcxODQ4NWNhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcwOTIwMTA0NjIzNzksLTEyMi40MzQ2MDkyODAzNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNDRjYTgzOTlhZTA0YTUwYTNkNGExMzg3ZjU3ZGI5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzkyMDkzNzU1MzI5NSwtMTIyLjQxMDg4MjgyNTU1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlNzNmYTAyMTY1NTQxMGZhOGU3N2U1YTQ0OGEzMmE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuODAwNDU2NjQ3MTAzODksLTEyMi40MDE0MzI3NTQ3MjIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlMmU0MTNkN2E4YTQ5MWJhNTU0YzlhNmZjMTA4OWE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQzNTU1MDU0MjI2NSwtMTIyLjQyMTEyODAyOTUwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxY2U2NzNlNGFkNzRmZjk5ZDljNjhlYjlmZWI0YjRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg2NTY0NzYwNzY4NSwtMTIyLjQwNzI0NDA4NzAzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlYmIwZDU2MGQ0MTRmYjA5NzZlMzllM2UxMzdhOTRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzk4OGRjYThiNTRlNDQ1YzgwYTY0ZmQwY2U4YTFhOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMGM3NTc2MTM2ZmQ0NmVkYjk5MTZmNDViYzJhOTRkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NDE5Mjc1MDg5MzIwNSwtMTIyLjQ0NDY4NTQ4MjI3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExMzhlMjY2MDM3ZjRiYzNiYmQ3NDgzNWE4NjdmNzVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDY5MjgyMDA0MSwtMTIyLjQxNTc1NzAzOTE5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyZWVjNTc5ZDA1ZjQ1MjY5MDAyMmQzNTMxMjFlYzE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NTI4MDYyNzQ2NSwtMTIyLjQ3NTY0NzQ2MDc4NTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRiNzU1Nzg3YzAwNGI3M2I3MGNmZmU1NDdhMjg4YTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDI4NTE3Mzc0NDQ4OTQsLTEyMi40MjA5Njc0NDA1NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNDUxMmFhNGEzNjQ0M2M4OTdlMjAyYTkwNmI0N2JlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjExOTg0ODg5MzEsLTEyMi40MTU2Njk2NjE0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZDkyOTU3YTA0YjE0YTgxYWVkM2U4N2UyOWMzZWFiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3OTE2NzQyMTg5NjMsLTEyMi40MDYzNDY0MjU2MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYmZiZDM4MmJlYjI0MmM0ODE1NTc5YzYzMTgwM2VhYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NTcxODQzOTUyODIsLTEyMi40MDk1Mjk5MTMyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMWRjYjdlNThiZjc0MDA4YTFkYzE4OWFmODRhNGQ0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQyMDcwNjcxMSwtMTIyLjQwMzQwNDc5MTQ3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODUzNTkzZTAyNTEzNDdmMGE2ZjkzMGM5MDllNDA4N2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Njc1MjQzMDg3ODMsLTEyMi40MTA3MzgwOTczMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYzcxMWM4YjJjNTI0NDc5YjVmZDNjOTVjOTc5ODA3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NzUyNDMwODc4MywtMTIyLjQxMDczODA5NzMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjZjM4MDRhYTVjZjRmYWE5ZWEzZDExYjA1YTg1MjE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlMWJiYTA3MTBmNjQxNjhiZDBhYWI3NWUyZDQ1ZjlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkZjYxOWQ1MDJhNzQ1Zjk4ODQxODY1M2QzZjZmOWJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVkMzAzMDM5OTY5YTQzZDZhYWY4MWE5ZjJlMTllYmFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmZDdmMWJiNzU1YTRjZTFiODk3YTI5MDYwNzg4ODE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc2MjMxMDQwNDc1OCwtMTIyLjQxNDcxNDI5NTU3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzk1OWZhNDE3NjQ5NGM0NGEwN2M3Yzk5ZGJhMzBiNDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzYyMzEwNDA0NzU4LC0xMjIuNDE0NzE0Mjk1NTc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODA2NDgyNDE0NzQ0ZTQ5YWE2MWQ1ZGYxNWMxNmE1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzUxMTg4OTU2OTUsLTEyMi40MTgwNDU0NTI3NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YzJmMmYxMDc2OGE0ZDc5YTgwOGJhZGRhOGQwZjdiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjAyMzg0Nzg5NzUsLTEyMi40MDExNjE1NTU2MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kM2U4ZDI0MzNmYWQ0MTJiOWVhOTY2OGE4ZjY3YjkxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyNzAwNTMxOTYyOTk5NSwtMTIyLjQwMzQwODY2OTE5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4MWFhMzM0OWQ5ZDQ0MWI5MTEyOGQ4ZjE1MGI4ODY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM0NDM3NDE0MSwtMTIyLjQxMjkzMDUyMjA1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwMThjZGZkMmI4OTQ1OGM4M2RlYTFiMTViYmQ5MzZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzUzMDE4NjUzNzQ0NjA0LC0xMjIuNDE4NTg3MTcyMjE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjc0NWJlZGZlOGFmNDJiMzhlNzhiZWYwNmRkZTVjYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQwNDE4Mzg1MDQxLC0xMjIuNDE0MzcwNjI3NDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDBmNjQxZDljM2M5NDJhNDhmYzRhNzQzMDhhMWZmMzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTA1Mzg5OTM3MjUsLTEyMi40MDM5MTU2ODE1NzEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1MTM5NzVkOWM2ZDRhNDE5ZmEzN2NmZWYwNDRhNDE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzMDk5ODI0NDU5MjEsLTEyMi40MTkxODMwOTYzNjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ODliMDQwYzc0Nzg0NzRjYThjNzQ2MjBkNzRkYTk0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0MDczNjA1NDgzNTc5LC0xMjIuMzg4NzUzMDQ2OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmZhNzhkMDljOGVjNDZjNjlkZWJlMTYwYjZiYTQxMmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ5OTEyOTQ0MzY2LC0xMjIuNDM3Nzk5NzAzNDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDcxZWRmNzkwN2MwNGNlMWI4Y2MxZjIzM2ZjMTc3NmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzcwOTAyNzQzNjY5LC0xMjIuNDIxMzMyNjg0NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg3OGFlNTgwODM3NDFkNDhiMzFjNjIxYjI3MzVlNDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzcwOTAyNzQzNjY5LC0xMjIuNDIxMzMyNjg0NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjY1NDg1OTNiYTcyNDQ1NWFlNTRhYzQwNTIyNTViMTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIyNDU4MjIzOTE3LC0xMjIuNDQ2NjEyOTc4ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzNlMGVlM2I4MGNhNDJlMjhhNDAyOWEyNzZhNDk3ZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzAwMzc5OTk1MTI3OTUsLTEyMi40MDQ1OTQxNDA2MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNGUyNTBjNGJlMGM0Y2E5ODVkZDNmZTIzODI1OWFjNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5NTMzMzgyNjc0MzYsLTEyMi4zOTczNzM3NDAwNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTYzMjE0MTUwZjc0ZDc3ODA1NzViYjNlYmRkM2I5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NzUxNTg3NDE2MjI5NSwtMTIyLjQwNzQzNDk4OTUyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0N2JkNzc2MjYyYTQ4ODdhOTMyZjE4ZDcxMzQ3Yjk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmZDc5ODkzOTlkOTRkNTU5NmE5Zjg0NjZhMjJkNDQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc4NTIzMzc3NjAzMiwtMTIyLjQwMzQ2NDA4MDAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0ZGI1Y2FlYmNjYjQ4NDg4NjE3YjA3OGFiYTE4NGVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczMjkxODA2OTAyOTk2LC0xMjIuNDM2NjE0MTgxMzMxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Yzg3YjZjMWRiZDM0YmVmOTEzODRmNTI5YjVkMDA4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MDUyNzU3ODUwOSwtMTIyLjM5Njg0OTAxNTE3MjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTFkM2Y4MDVjOGRjNDA1ZWEyZDU0YWMxNzUxZTIxZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODA1Mjc1Nzg1MDksLTEyMi4zOTY4NDkwMTUxNzIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmNDBhNWViYTNiZDQ4ODZiZDdlOWQyZThjZjYxMzJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NDE4MDcwNjYwMjA0LC0xMjIuNDUwMDAwNzkwNDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjFlYjMyYjk4ZTlmNGYwYmIyN2E0OWJmNDEyODY1MTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyMTE0NjQ3MzU5LC0xMjIuNDAwODM0MjgzMDMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTUzM2RlMTU1MWUzNDA2NjlmNWFmYzFhZWRiYjQ3MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMDY1MzI0MzkyMDUsLTEyMi4zOTk4MDIxNDU3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYzM3MTI3NzU2ZTE0NTE1ODFjNzJkZDIwYzgyODFkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMzk3NDgyNDE2MDksLTEyMi4zOTQ5Mjg0NzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWZkZWNmNGQ3ZDRjNDc3NDk4YTcxOGQzMTJmYTFiNGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjM5NzQ4MjQxNjA5LC0xMjIuMzk0OTI4NDc1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiNTRlYTAwYWFmMTRmMDE4OGIyNDExYmQyMmE4NmZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjM1OWRhZDhmMWQ0NDhkYmM5MTAwNDI0OGY4NDFlNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODMyMzU0NDk5MDQsLTEyMi40MTE4NTcwMzI1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3YzkxNDc5YzIzOTRkNGQ4ZDljNjljZmQ0ZmNlZWM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU1OTk3NzMzOTg1NiwtMTIyLjQwOTQzNTYxNzEwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmN2FjNjljYTQ2YTRhMjg4ZWI3OGQwZDNkNGVmNjhjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3MDc5ODE0NDQ0MywtMTIyLjQyNTg4MzM1ODE0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxNjIwZGQyOTE4MDQxODM4YWNmZjBhYmIzNjJjY2QzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM2MDM3NDQ2Njg2MjA0LC0xMjIuNDE1MTI2NTQzMDAxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NWJmYTMwZjgxZDg0NzQ3YTM3OWE1OTVhNGVlZmIwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxMjc2Nzg4NDgyMSwtMTIyLjQzMTkyODAxMTA4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkNWYwYWJiMWIyNTRiZjc5ZWVmYjczYjc2OGMxZTI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg5NTcxMDI1NTg2MywtMTIyLjQwMjE2MzcxMzYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxYmRjNGQ3NTcxYjRmNjI5NGIyYzM1NzQ3M2YxZjRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwNzQyOTE2OTU1OSwtMTIyLjQyOTMwNjcyODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhkMjc3N2Q2M2I2YjRmMTU5MDc1NmNlYmJmZjViNDZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM2NTU2NTM0Nzk0LC0xMjIuNDEzNzkwOTcyNzgwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYmJmZDZlMmZhOTg0YTI3ODEwZWM4ZTczYTk4NjhjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDc0MjkxNjk1NTksLTEyMi40MjkzMDY3MjgzNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDZkMTliNTFmZmU0MTY2OWE2NTVhYWI4OTZjNGRiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNzM2MjM2MDUyMTI5NiwtMTIyLjQyMjA2NzE4NDkzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2MTJkMzIzOGFlMzQ5ODg4MGU4ZGIwNGIyMDRkMDJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM3MzYyMzYwNTIxMjk2LC0xMjIuNDIyMDY3MTg0OTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDFjYzUxZTcxMDliNDg4M2E2YTcwYjEyZjJhNWY5YjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODU5OTg4MzIzNzk3OTYsLTEyMi40MTE3NDczNzE5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MWJlM2I0NTMyM2E0MWQ5OGQ3MTQxMDQyNGIyZTEwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MzM3NTgwNTgwNTksLTEyMi40MjA0MzQ3MjQ1NTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBmNmMyOWU2ZjhlNzQyYzZhMGJmNGI3ODRhMzMzN2FhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1MDIyNjYyMjc4NiwtMTIyLjQxMTk4NzY0MzU5NTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQ2OTIwOGFjNDg5NDQzZjk1ZGI3MWFiMzkxMWEwNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQ2MjA2NDkxMDY0OTUsLTEyMi41MDAzODA0Mjc5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMWU5MjY1NzcyMTM0ZDZjYmM5ODc1ZjlhN2E5OWNmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTE5MTgyNjcyMTcsLTEyMi40NjY1NTg3ODA2ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZDE4ZjFjNzA4NTM0MTc2OWJiZDc4Zjk3ZGUwNTQzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0OTA4NDE3MjkwMjgsLTEyMi40ODY5MjU5NjAxMTQwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF81ZDVhODY3YTdjNjI0NzVkYWIwOTMxM2M1N2QzZTM3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0NTA2YzllZTM1ZjQ5OWFiNjNkOTgwMGE3NmE0NDZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY4NTM2MDEyMzU4MywtMTIyLjQxNTYxNjMzODMxOTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGViZGRhN2E4NjE1NGVlYThjNjBkOTVhZDNkMGIxOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzk1MzJjYjZjMGYzNDViMWEwMTUyZWNmYmU3YWI2NTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzVkNWE4NjdhN2M2MjQ3NWRhYjA5MzEzYzU3ZDNlMzc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzRhMWRjZWNlMDc5NGM4OWE1ZTRhZjBjMzhkNDE0MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzUyNjgxNDY5MDgzOTYsLTEyMi40NzI3MTU3NTk2MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWQ1YTg2N2E3YzYyNDc1ZGFiMDkzMTNjNTdkM2UzNzQpOwogICAgICAgICAgICAKPC9zY3JpcHQ+ onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e06e9e8>" | |
] | |
}, | |
"execution_count": 25, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# instantiate a feature group for the incidents in the dataframe\n", | |
"incidents = folium.map.FeatureGroup()\n", | |
"\n", | |
"# loop through the 100 crimes and add each to the incidents feature group\n", | |
"for lat, lng, in zip(df_incidents.Y, df_incidents.X):\n", | |
" incidents.add_child(\n", | |
" folium.features.CircleMarker(\n", | |
" [lat, lng],\n", | |
" radius=5, # define how big you want the circle markers to be\n", | |
" color='yellow',\n", | |
" fill=True,\n", | |
" fill_color='blue',\n", | |
" fill_opacity=0.6\n", | |
" )\n", | |
" )\n", | |
"\n", | |
"# add pop-up text to each marker on the map\n", | |
"latitudes = list(df_incidents.Y)\n", | |
"longitudes = list(df_incidents.X)\n", | |
"labels = list(df_incidents.Category)\n", | |
"\n", | |
"for lat, lng, label in zip(latitudes, longitudes, labels):\n", | |
" folium.Marker([lat, lng], popup=label).add_to(sanfran_map) \n", | |
" \n", | |
"# add incidents to map\n", | |
"sanfran_map.add_child(incidents)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"editable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"Isn't this really cool? Now you are able to know what crime category occurred at each marker.\n", | |
"\n", | |
"If you find the map to be so congested will all these markers, there are two remedies to this problem. The simpler solution is to remove these location markers and just add the text to the circle markers themselves as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMzcuNzcsLTEyMi40Ml0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfOGJjYjRmZjdhODI0NDMzOGIzMWY4ZjdkYjI0NTU3NzUgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5NWY4MzAyYWVlMjRkNDhhZDU4YzNmMjUzNDNmNjFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjI3OGY2YmYwNDI0ODY3YTM4OGVjODQzMzcyOTFlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDE2NmQ5ZDgzOWM0OGU2YTljYTg3N2U4MWI1NjBhYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjAxNjZkOWQ4MzljNDhlNmE5Y2E4NzdlODFiNTYwYWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldFQVBPTiBMQVdTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZjI3OGY2YmYwNDI0ODY3YTM4OGVjODQzMzcyOTFlZS5zZXRDb250ZW50KGh0bWxfMjAxNjZkOWQ4MzljNDhlNmE5Y2E4NzdlODFiNTYwYWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTk1ZjgzMDJhZWUyNGQ0OGFkNThjM2YyNTM0M2Y2MWUuYmluZFBvcHVwKHBvcHVwXzBmMjc4ZjZiZjA0MjQ4NjdhMzg4ZWM4NDMzNzI5MWVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViY2FjODQxODExNzQ4ZTBiN2Y2NGIwODRlOTM4NjQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTE5Mjg5MGExZjg0MDA2YWUxYmMwOGM1YWU3NmViNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MDhlOGQ0ZGM2ZTg0YjQ0ODhkYTkzNTFlM2NmYTNkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDA4ZThkNGRjNmU4NGI0NDg4ZGE5MzUxZTNjZmEzZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldFQVBPTiBMQVdTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTE5Mjg5MGExZjg0MDA2YWUxYmMwOGM1YWU3NmViNi5zZXRDb250ZW50KGh0bWxfNDA4ZThkNGRjNmU4NGI0NDg4ZGE5MzUxZTNjZmEzZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWJjYWM4NDE4MTE3NDhlMGI3ZjY0YjA4NGU5Mzg2NDMuYmluZFBvcHVwKHBvcHVwX2QxMTkyODkwYTFmODQwMDZhZTFiYzA4YzVhZTc2ZWI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwYzI1NjNlY2JmMjQ5NjZiNzkyOTFmYzdlMWU4ZjJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI5OTgwOTY3Mjk5NTk2LC0xMjIuMzg4ODU2MjA0MjkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWMxM2UyZjlkOTVjNDRkNDljOGE2YmQ3YmU3MTViMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWEwYWZmYjdlNDUyNDRmYmFlZGRlYzJkZTVjNGQ3NDQgPSAkKCc8ZGl2IGlkPSJodG1sX2VhMGFmZmI3ZTQ1MjQ0ZmJhZWRkZWMyZGU1YzRkNzQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWMxM2UyZjlkOTVjNDRkNDljOGE2YmQ3YmU3MTViMTUuc2V0Q29udGVudChodG1sX2VhMGFmZmI3ZTQ1MjQ0ZmJhZWRkZWMyZGU1YzRkNzQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwYzI1NjNlY2JmMjQ5NjZiNzkyOTFmYzdlMWU4ZjJiLmJpbmRQb3B1cChwb3B1cF81YzEzZTJmOWQ5NWM0NGQ0OWM4YTZiZDdiZTcxNWIxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NmQ1NDgyY2JlMmM0NzFlYTE1ZWRlNGJhMzIzMmQxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NTc4ODM3NjY4ODc5LC0xMjIuNDEyOTcwNTM3NTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE0ZjNkZDM5NTg2NGZkNDhkZjFmMWUwOGY4ZGNmN2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzhiZTM0OTY1YmQyNGQ4Nzg4MmI2YTg2NmViNThkYWQgPSAkKCc8ZGl2IGlkPSJodG1sXzc4YmUzNDk2NWJkMjRkODc4ODJiNmE4NjZlYjU4ZGFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhNGYzZGQzOTU4NjRmZDQ4ZGYxZjFlMDhmOGRjZjdkLnNldENvbnRlbnQoaHRtbF83OGJlMzQ5NjViZDI0ZDg3ODgyYjZhODY2ZWI1OGRhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NmQ1NDgyY2JlMmM0NzFlYTE1ZWRlNGJhMzIzMmQxNi5iaW5kUG9wdXAocG9wdXBfMWE0ZjNkZDM5NTg2NGZkNDhkZjFmMWUwOGY4ZGNmN2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFlOTQ5NDNhMTg4NDc2ZWFkYWI0NjhiYjA1Mzc4MjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjUwNTAxMjE0NjY4LC0xMjIuNDE5NjcxNzgwMjk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGM3ZTQ4OGFiN2NhNGU3MmIxYWM2NmE1MWQ1ZjFkMDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ZlZTY3NjZlMTMyNDljZWExYmM5NjZlM2Y3ODIyYjcgPSAkKCc8ZGl2IGlkPSJodG1sXzdmZWU2NzY2ZTEzMjQ5Y2VhMWJjOTY2ZTNmNzgyMmI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjN2U0ODhhYjdjYTRlNzJiMWFjNjZhNTFkNWYxZDA3LnNldENvbnRlbnQoaHRtbF83ZmVlNjc2NmUxMzI0OWNlYTFiYzk2NmUzZjc4MjJiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYWU5NDk0M2ExODg0NzZlYWRhYjQ2OGJiMDUzNzgyOS5iaW5kUG9wdXAocG9wdXBfZGM3ZTQ4OGFiN2NhNGU3MmIxYWM2NmE1MWQ1ZjFkMDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTcyZDljMDJjMTg1NDU5MDgyMzhmMGFjMzMwYmU3YzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMTg1NTU4MjksLTEyMi40MjYwNzcxNzczNzQ5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjNzNmNjgxYWIxZDRkOTc5MzVlYTc1Y2ExMTlhM2U1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViMzc3NTgyN2ZlYTQ4NjFhYjcyYzFlNTNiNDlkZjZlID0gJCgnPGRpdiBpZD0iaHRtbF81YjM3NzU4MjdmZWE0ODYxYWI3MmMxZTUzYjQ5ZGY2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNTQVVMVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2M3M2Y2ODFhYjFkNGQ5NzkzNWVhNzVjYTExOWEzZTUuc2V0Q29udGVudChodG1sXzViMzc3NTgyN2ZlYTQ4NjFhYjcyYzFlNTNiNDlkZjZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3MmQ5YzAyYzE4NTQ1OTA4MjM4ZjBhYzMzMGJlN2MwLmJpbmRQb3B1cChwb3B1cF9jYzczZjY4MWFiMWQ0ZDk3OTM1ZWE3NWNhMTE5YTNlNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZDNhNzJmM2JmZjA0NTE2OThjZTdlYTA4OWViOWE0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MDg3ODkzNjAyMTQsLTEyMi40MDU3MjE0NTQ1NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YWIxZTk1ZjExNGQ0OTZhYjIyYzljY2Y1YmViNjkzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNmQ4Nzk3ZjdiYzI0MjBmOWQ1MzUzNDlmZDk2YjMzZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjZkODc5N2Y3YmMyNDIwZjlkNTM1MzQ5ZmQ5NmIzM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YWIxZTk1ZjExNGQ0OTZhYjIyYzljY2Y1YmViNjkzNC5zZXRDb250ZW50KGh0bWxfMjZkODc5N2Y3YmMyNDIwZjlkNTM1MzQ5ZmQ5NmIzM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWQzYTcyZjNiZmYwNDUxNjk4Y2U3ZWEwODllYjlhNGYuYmluZFBvcHVwKHBvcHVwXzRhYjFlOTVmMTE0ZDQ5NmFiMjJjOWNjZjViZWI2OTM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiOWU0M2JkYTFkMjQwNjU5YzZlNzJhMTk0YTZkNGRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzOTgwNTU5MjYzNCwtMTIyLjQxMTc3ODI5NTk5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNDU4ZTc0ZDc2MjRjNTQ4YjE3ZWRmYzQ1ZWRhYmJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5MzU3NmM0NjdiYTQ0ZjJiNDU3M2FhMjgwZWMwZGNlID0gJCgnPGRpdiBpZD0iaHRtbF9hOTM1NzZjNDY3YmE0NGYyYjQ1NzNhYTI4MGVjMGRjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzQ1OGU3NGQ3NjI0YzU0OGIxN2VkZmM0NWVkYWJiZi5zZXRDb250ZW50KGh0bWxfYTkzNTc2YzQ2N2JhNDRmMmI0NTczYWEyODBlYzBkY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWI5ZTQzYmRhMWQyNDA2NTljNmU3MmExOTRhNmQ0ZGYuYmluZFBvcHVwKHBvcHVwXzAzNDU4ZTc0ZDc2MjRjNTQ4YjE3ZWRmYzQ1ZWRhYmJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2NDk4YWZhOWM0ZjRmODU5MjFkMjQ4ZWUzNjE1MzExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1Nzg3NjIxODI5Mjk1LC0xMjIuMzkzMzU3MjQxNDUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTUzM2ZjZmJhMjA1NDk0MzhlZGQzNWI2YWUyYjA1MGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGQ2NWE3ZTcwNTcxNDFiOTg0Yzk5OWEwMGU1NGIzZDEgPSAkKCc8ZGl2IGlkPSJodG1sX2RkNjVhN2U3MDU3MTQxYjk4NGM5OTlhMDBlNTRiM2QxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTUzM2ZjZmJhMjA1NDk0MzhlZGQzNWI2YWUyYjA1MGUuc2V0Q29udGVudChodG1sX2RkNjVhN2U3MDU3MTQxYjk4NGM5OTlhMDBlNTRiM2QxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y2NDk4YWZhOWM0ZjRmODU5MjFkMjQ4ZWUzNjE1MzExLmJpbmRQb3B1cChwb3B1cF8xNTMzZmNmYmEyMDU0OTQzOGVkZDM1YjZhZTJiMDUwZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jY2I3N2VlZWE3MDU0YTI5YmIzYWExNDMwOThiZTgzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMDk2Njk2MTU0OTksLTEyMi4zODcxODE2MzU5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZTFhYTk0NTg2ZWU0NTM0YWE0ZmQ2NDFhZjNmNTg2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjk1ZWNjNjZlYzA0YTBhYmIxMjkzY2VhM2MyY2E2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmI5NWVjYzY2ZWMwNGEwYWJiMTI5M2NlYTNjMmNhNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JU1NJTkcgUEVSU09OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZTFhYTk0NTg2ZWU0NTM0YWE0ZmQ2NDFhZjNmNTg2Mi5zZXRDb250ZW50KGh0bWxfZmI5NWVjYzY2ZWMwNGEwYWJiMTI5M2NlYTNjMmNhNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2NiNzdlZWVhNzA1NGEyOWJiM2FhMTQzMDk4YmU4M2QuYmluZFBvcHVwKHBvcHVwX2RlMWFhOTQ1ODZlZTQ1MzRhYTRmZDY0MWFmM2Y1ODYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ0NTIzMzFmYmM4MjRlY2RhNTA5YmFhYjJmOWMyYzU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NDc4MTU3ODY5NTA1LC0xMjIuNDc3Mzc2NTI0MDAyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYmZlZTNhNmM3OTU0YjNkYmI4MTY5NGQ2ODQ2ODhjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZjUzYzQ3MjkwYzE0MDljOWExZGUyMTExMmQxOWIyNiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2Y1M2M0NzI5MGMxNDA5YzlhMWRlMjExMTJkMTliMjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBUkNFTlkvVEhFRlQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiZmVlM2E2Yzc5NTRiM2RiYjgxNjk0ZDY4NDY4OGNhLnNldENvbnRlbnQoaHRtbF9jZjUzYzQ3MjkwYzE0MDljOWExZGUyMTExMmQxOWIyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NDUyMzMxZmJjODI0ZWNkYTUwOWJhYWIyZjljMmM1NC5iaW5kUG9wdXAocG9wdXBfYmJmZWUzYTZjNzk1NGIzZGJiODE2OTRkNjg0Njg4Y2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTNlNDdjNmU0ODFkNDBlM2JmZGQ4MTUzNDZlODFlMWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDU3Mzg5NDI5NjU0OTUsLTEyMi40Nzc5NjAzMjcyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMmFkNWM1MDRlYTQ0ODQ2OGQ4ODllZWFmZWJhZTFmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OGIxZjEzZDViMTg0NTJjYjY4MDZhMmMzNTUzMTIyZCA9ICQoJzxkaXYgaWQ9Imh0bWxfOThiMWYxM2Q1YjE4NDUyY2I2ODA2YTJjMzU1MzEyMmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTJhZDVjNTA0ZWE0NDg0NjhkODg5ZWVhZmViYWUxZjUuc2V0Q29udGVudChodG1sXzk4YjFmMTNkNWIxODQ1MmNiNjgwNmEyYzM1NTMxMjJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzZTQ3YzZlNDgxZDQwZTNiZmRkODE1MzQ2ZTgxZTFjLmJpbmRQb3B1cChwb3B1cF9lMmFkNWM1MDRlYTQ0ODQ2OGQ4ODllZWFmZWJhZTFmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kM2Q2OWVmZDEwMWI0ODc5OTRjN2Q0MzRlYTViMTI1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNTY5NzAyNzU0ODIwNiwtMTIyLjM3Njc1NzY1NTUzMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOThmYThmZmQxMmFlNDg2MDhjOTI1YjkyODVmNzk1MjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWJmMGZjZmEyNGZmNDAyYTllZWY4YjlkZTI2YTVhMTEgPSAkKCc8ZGl2IGlkPSJodG1sX2ViZjBmY2ZhMjRmZjQwMmE5ZWVmOGI5ZGUyNmE1YTExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOThmYThmZmQxMmFlNDg2MDhjOTI1YjkyODVmNzk1MjEuc2V0Q29udGVudChodG1sX2ViZjBmY2ZhMjRmZjQwMmE5ZWVmOGI5ZGUyNmE1YTExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QzZDY5ZWZkMTAxYjQ4Nzk5NGM3ZDQzNGVhNWIxMjVjLmJpbmRQb3B1cChwb3B1cF85OGZhOGZmZDEyYWU0ODYwOGM5MjViOTI4NWY3OTUyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xM2M0Nzk3NWRmOGE0MDcyYmJlMzcxNjdkODdiZTcwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyOTI3MDUxOTk1OTIsLTEyMi40MzIzMjU4NzEwMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODA1NGQ1MDc1Yjc0ZDU2OTUxOGI5NjQyZGY4OWI2YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZGQzZDg1OTY1NWM0NDQ4YTk2MzA3MmYwZDE5NTk3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2RkM2Q4NTk2NTVjNDQ0OGE5NjMwNzJmMGQxOTU5NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4MDU0ZDUwNzViNzRkNTY5NTE4Yjk2NDJkZjg5YjZjLnNldENvbnRlbnQoaHRtbF8zZGQzZDg1OTY1NWM0NDQ4YTk2MzA3MmYwZDE5NTk3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xM2M0Nzk3NWRmOGE0MDcyYmJlMzcxNjdkODdiZTcwMi5iaW5kUG9wdXAocG9wdXBfMTgwNTRkNTA3NWI3NGQ1Njk1MThiOTY0MmRmODliNmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTE5MzMzOTllMTZkNDQ0YTk2MzdlNDgyYjdhYWU4MWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43OTE2NDI5ODIzODQsLTEyMi40MDA5MDg2OTg4ODk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4ZjNlMDc3ZGIyNTQ3NWVhM2E5NjFkZGM1Y2YyYzkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5MTYyYWE2YzlmMTQ0MjU4N2ExODFmMTM4ZmZmYzlhID0gJCgnPGRpdiBpZD0iaHRtbF9kOTE2MmFhNmM5ZjE0NDI1ODdhMTgxZjEzOGZmZmM5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSR0xBUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4ZjNlMDc3ZGIyNTQ3NWVhM2E5NjFkZGM1Y2YyYzkxLnNldENvbnRlbnQoaHRtbF9kOTE2MmFhNmM5ZjE0NDI1ODdhMTgxZjEzOGZmZmM5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMTkzMzM5OWUxNmQ0NDRhOTYzN2U0ODJiN2FhZTgxZS5iaW5kUG9wdXAocG9wdXBfNjhmM2UwNzdkYjI1NDc1ZWEzYTk2MWRkYzVjZjJjOTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTYxOGE3ODBjZWFiNDdiMWI3ZDFmYWNmNWEzZTlkNjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM3MDY5MzAxNTQ1LC0xMjIuNDA4NTk1MTEwODY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDI1MTdlODk2MTM0NGRkOTgyYTkzYmZmMDY4NDVkNDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDc5YTRkMzIwNmRhNDUyMmFiM2E0YWM0ODBiMTVmMGMgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3OWE0ZDMyMDZkYTQ1MjJhYjNhNGFjNDgwYjE1ZjBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TVE9MRU4gUFJPUEVSVFk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyNTE3ZTg5NjEzNDRkZDk4MmE5M2JmZjA2ODQ1ZDQ5LnNldENvbnRlbnQoaHRtbF80NzlhNGQzMjA2ZGE0NTIyYWIzYTRhYzQ4MGIxNWYwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NjE4YTc4MGNlYWI0N2IxYjdkMWZhY2Y1YTNlOWQ2My5iaW5kUG9wdXAocG9wdXBfNDI1MTdlODk2MTM0NGRkOTgyYTkzYmZmMDY4NDVkNDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2M3ZjMwYjc4Zjg2NDhlZTk2MjA3Mjg5OWZjMTlmYjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTcyODk1OTA0NTc3OTUsLTEyMi40MDY4NzA0MDIwODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTRiMDYxZjU5YmU0ZmNhYmE3NWI4ODgzMjJiZTE5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjYwNGY0ODBlZjI0MGU5OTRmMjcyOGNjM2ZmMDNlOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWI2MDRmNDgwZWYyNDBlOTk0ZjI3MjhjYzNmZjAzZTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJPQkJFUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlNGIwNjFmNTliZTRmY2FiYTc1Yjg4ODMyMmJlMTkzLnNldENvbnRlbnQoaHRtbF81YjYwNGY0ODBlZjI0MGU5OTRmMjcyOGNjM2ZmMDNlOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYzdmMzBiNzhmODY0OGVlOTYyMDcyODk5ZmMxOWZiOC5iaW5kUG9wdXAocG9wdXBfMGU0YjA2MWY1OWJlNGZjYWJhNzViODg4MzIyYmUxOTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjI0MzQzNTI5OGU5NGIzM2JkNjQzZDQ4NjMwZjhhN2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDg5MDYzMDUxODI5LC0xMjIuNDIwMzU0NzgwODYwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTIxYjg0YjZiNDI0OGE1OTUxYjg2NjEyMmZlYWZmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZjFhNGE1ZGM3YWY0NGVlYjdkZjAyNTE2N2RhMmFjMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYmYxYTRhNWRjN2FmNDRlZWI3ZGYwMjUxNjdkYTJhYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhMjFiODRiNmI0MjQ4YTU5NTFiODY2MTIyZmVhZmY4LnNldENvbnRlbnQoaHRtbF9iZjFhNGE1ZGM3YWY0NGVlYjdkZjAyNTE2N2RhMmFjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMjQzNDM1Mjk4ZTk0YjMzYmQ2NDNkNDg2MzBmOGE3ZC5iaW5kUG9wdXAocG9wdXBfN2EyMWI4NGI2YjQyNDhhNTk1MWI4NjYxMjJmZWFmZjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQyMjZlZGFjZWEwNGEwZjlmYWUxZWE4ZWU0Yzk5ZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTU3NjU0MjY5OTUsLTEyMi40Mzk5MDk3NjY3NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjIzNmJkNzJiMzg0Yjk3YTQ0Zjc1N2Y2Yjg3N2ZlZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYjc5YzJmMTE1ZGY0NGE1OWI5NjI5ZjhmMmYxNzc2NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmI3OWMyZjExNWRmNDRhNTliOTYyOWY4ZjJmMTc3NjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2MjM2YmQ3MmIzODRiOTdhNDRmNzU3ZjZiODc3ZmVkLnNldENvbnRlbnQoaHRtbF8yYjc5YzJmMTE1ZGY0NGE1OWI5NjI5ZjhmMmYxNzc2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDIyNmVkYWNlYTA0YTBmOWZhZTFlYThlZTRjOTllNy5iaW5kUG9wdXAocG9wdXBfYjYyMzZiZDcyYjM4NGI5N2E0NGY3NTdmNmI4NzdmZWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzBiNjJlZjQ0ODQ0NDAwODhlNmM0OGI4NWVlYzkyNzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM1Njk5Mzg2OTE4LC0xMjIuNDA4NDIxMTE2OTIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQyMDczYWM1MWY1NDAzYzhjNjJhNjgxYzY3Y2QxNmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGE5ZjNlMjI3OGVjNGZmMTliZGI3OGM2MmU4YTUyOWUgPSAkKCc8ZGl2IGlkPSJodG1sXzhhOWYzZTIyNzhlYzRmZjE5YmRiNzhjNjJlOGE1MjllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNDIwNzNhYzUxZjU0MDNjOGM2MmE2ODFjNjdjZDE2Yi5zZXRDb250ZW50KGh0bWxfOGE5ZjNlMjI3OGVjNGZmMTliZGI3OGM2MmU4YTUyOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzBiNjJlZjQ0ODQ0NDAwODhlNmM0OGI4NWVlYzkyNzguYmluZFBvcHVwKHBvcHVwX2U0MjA3M2FjNTFmNTQwM2M4YzYyYTY4MWM2N2NkMTZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0MGIzYjZhNTM2MjQ2ZjI4MWY2NDE4MGY4YmFjYmFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczNjE4NjI3NjQ1NjA0LC0xMjIuNDIyMzE1NjcwNzQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjQ1ZWYxZjc0OTg5NDExMTgzNGU1NzFiNWMzNzI2NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODdmZThlZmFkMjZiNDljYmFhNDlhZGZmZWRiOWY3MWIgPSAkKCc8ZGl2IGlkPSJodG1sXzg3ZmU4ZWZhZDI2YjQ5Y2JhYTQ5YWRmZmVkYjlmNzFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GUkFVRDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjQ1ZWYxZjc0OTg5NDExMTgzNGU1NzFiNWMzNzI2NTUuc2V0Q29udGVudChodG1sXzg3ZmU4ZWZhZDI2YjQ5Y2JhYTQ5YWRmZmVkYjlmNzFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA0MGIzYjZhNTM2MjQ2ZjI4MWY2NDE4MGY4YmFjYmFkLmJpbmRQb3B1cChwb3B1cF8yNDVlZjFmNzQ5ODk0MTExODM0ZTU3MWI1YzM3MjY1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Mjk0OTQ2ZjMzMDQ0MDc0YTI2OGQ5ODgxMTVhMDJhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5Mjg0MTI4NDA0NDcwNSwtMTIyLjQyNDUxOTgzNTAwOTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmEyMTBmM2ZhZWIxNGY2NTk0MzE0ZmU2OGQ5ZTQ0YzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmI4ZGQxMmY2ZGNmNDk2OWEwODQ1ZmZmYzU0OGU1MTMgPSAkKCc8ZGl2IGlkPSJodG1sXzJiOGRkMTJmNmRjZjQ5NjlhMDg0NWZmZmM1NDhlNTEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmEyMTBmM2ZhZWIxNGY2NTk0MzE0ZmU2OGQ5ZTQ0YzAuc2V0Q29udGVudChodG1sXzJiOGRkMTJmNmRjZjQ5NjlhMDg0NWZmZmM1NDhlNTEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyOTQ5NDZmMzMwNDQwNzRhMjY4ZDk4ODExNWEwMmE4LmJpbmRQb3B1cChwb3B1cF9iYTIxMGYzZmFlYjE0ZjY1OTQzMTRmZTY4ZDllNDRjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYWQ5ZDJlY2Y4NDI0YWMwOTRkNGEwNzZkZTg1YjhhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc1NDA5ODY4ODIwNjc5NSwtMTIyLjQxNDIzMzg0OTAzNzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGFhYmQ2YjI3YTc4NGZiOTkyZmNmMDczZDEzNmFiMzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjZmYTUwZjY1NzU0NGEzMWI3YmQyYjdkNWFlNTk5ODggPSAkKCc8ZGl2IGlkPSJodG1sXzY2ZmE1MGY2NTc1NDRhMzFiN2JkMmI3ZDVhZTU5OTg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EUlVHL05BUkNPVElDPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYWFiZDZiMjdhNzg0ZmI5OTJmY2YwNzNkMTM2YWIzNy5zZXRDb250ZW50KGh0bWxfNjZmYTUwZjY1NzU0NGEzMWI3YmQyYjdkNWFlNTk5ODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGFkOWQyZWNmODQyNGFjMDk0ZDRhMDc2ZGU4NWI4YTMuYmluZFBvcHVwKHBvcHVwXzBhYWJkNmIyN2E3ODRmYjk5MmZjZjA3M2QxMzZhYjM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFhNzMxODk1NzI1ZDRkYmFiZDBkYzIzMjlkYWMxMTdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU0MDk4Njg4MjA2Nzk1LC0xMjIuNDE0MjMzODQ5MDM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDdkMjhhYTcyN2U0ZjkwOTM2YzI3ZDdhMGY4MDQ1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MWNmOTA2NDk1ZDg0NDg5YThmNTlmOTMzNTNkMWRkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTFjZjkwNjQ5NWQ4NDQ4OWE4ZjU5ZjkzMzUzZDFkZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NDdkMjhhYTcyN2U0ZjkwOTM2YzI3ZDdhMGY4MDQ1Yy5zZXRDb250ZW50KGh0bWxfOTFjZjkwNjQ5NWQ4NDQ4OWE4ZjU5ZjkzMzUzZDFkZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWE3MzE4OTU3MjVkNGRiYWJkMGRjMjMyOWRhYzExN2EuYmluZFBvcHVwKHBvcHVwXzY0N2QyOGFhNzI3ZTRmOTA5MzZjMjdkN2EwZjgwNDVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkZDI2NmM4MTZjYjQ1NmY4YjJhYjJlZTM1YWE4NmM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzcxNDkzOTk2OTQxNiwtMTIyLjUwNzc1MDEzMTAwNDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODViOTJjZTAxYjNiNGI5MzljMWZjOGNjMWZmNTI1ZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTg5NDMzNjY0OWM3NDhhOWEzY2Y2YjJkYzc1MWQ5NDQgPSAkKCc8ZGl2IGlkPSJodG1sXzk4OTQzMzY2NDljNzQ4YTlhM2NmNmIyZGM3NTFkOTQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NWI5MmNlMDFiM2I0YjkzOWMxZmM4Y2MxZmY1MjVlNi5zZXRDb250ZW50KGh0bWxfOTg5NDMzNjY0OWM3NDhhOWEzY2Y2YjJkYzc1MWQ5NDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmRkMjY2YzgxNmNiNDU2ZjhiMmFiMmVlMzVhYTg2YzUuYmluZFBvcHVwKHBvcHVwXzg1YjkyY2UwMWIzYjRiOTM5YzFmYzhjYzFmZjUyNWU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2YzQ2Nzg3YTQ1ODRjYmY4MzI2Y2MwYjliMDRjODJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzE4MzAyMjA0NzY2MDA1LC0xMjIuNDc0NDQ0NjM5NTk0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTkyNDlkMmMxYjQ0N2M2OTgyYzk0MDZhNDZiNzlmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzE2N2FmODJjZTU0YjBhYWU5ZjkzZTEzMTI0YzA4MiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTMxNjdhZjgyY2U1NGIwYWFlOWY5M2UxMzEyNGMwODIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTkyNDlkMmMxYjQ0N2M2OTgyYzk0MDZhNDZiNzlmZC5zZXRDb250ZW50KGh0bWxfZTMxNjdhZjgyY2U1NGIwYWFlOWY5M2UxMzEyNGMwODIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTZjNDY3ODdhNDU4NGNiZjgzMjZjYzBiOWIwNGM4MmMuYmluZFBvcHVwKHBvcHVwX2U5OTI0OWQyYzFiNDQ3YzY5ODJjOTQwNmE0NmI3OWZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhMjAzY2UwOWExYzQ4OTk5YWUzZmNlYzNmNjNmOGI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NTc1MjMxNzYxNSwtMTIyLjQyNzU2MjU5Njk4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0YTgyMTQzNDdmMDQyMWU5YzQwYTM1MjkwZGJhNTE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiNzE1MWFkNWU2NDRmOTViNTk4NzAyMTlmODhhMTQxID0gJCgnPGRpdiBpZD0iaHRtbF8xYjcxNTFhZDVlNjQ0Zjk1YjU5ODcwMjE5Zjg4YTE0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0YTgyMTQzNDdmMDQyMWU5YzQwYTM1MjkwZGJhNTE4LnNldENvbnRlbnQoaHRtbF8xYjcxNTFhZDVlNjQ0Zjk1YjU5ODcwMjE5Zjg4YTE0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YTIwM2NlMDlhMWM0ODk5OWFlM2ZjZWMzZjYzZjhiOS5iaW5kUG9wdXAocG9wdXBfNjRhODIxNDM0N2YwNDIxZTljNDBhMzUyOTBkYmE1MTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzcyODhiOTNiYzA1NDdmOGExMWRiOTVhMTkzOGIwZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc0Mzc4MzA5MTEyLC0xMjIuNDE5MjAzMDA0MjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTQ3MTM4NmE4M2IxNGUyMzhkMDEzYzZlMjI5ZTQ1YjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmVlMzIwNWJmZWYyNDg2ZWE2OGI2ZWU3MWU1NmZkNDcgPSAkKCc8ZGl2IGlkPSJodG1sXzJlZTMyMDViZmVmMjQ4NmVhNjhiNmVlNzFlNTZmZDQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CVVJHTEFSWTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTQ3MTM4NmE4M2IxNGUyMzhkMDEzYzZlMjI5ZTQ1Yjkuc2V0Q29udGVudChodG1sXzJlZTMyMDViZmVmMjQ4NmVhNjhiNmVlNzFlNTZmZDQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3Mjg4YjkzYmMwNTQ3ZjhhMTFkYjk1YTE5MzhiMGU0LmJpbmRQb3B1cChwb3B1cF9hNDcxMzg2YTgzYjE0ZTIzOGQwMTNjNmUyMjllNDViOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDUxZTczOGZhNWE0OWY5YjlmMmQ3NTZmOWVlOGEyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0OTM2ODgyODQ1MzIsLTEyMi40MTI2OTAxNDIzMDgwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5MTYzNTYzNjY3ZTQ3ODY4MjBjZGU1N2E3MmMyODQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmZjc2NGVkM2IzMDRkZDA4ZTJjMTg4NTA0ODQ3YTEyID0gJCgnPGRpdiBpZD0iaHRtbF81ZmY3NjRlZDNiMzA0ZGQwOGUyYzE4ODUwNDg0N2ExMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5MTYzNTYzNjY3ZTQ3ODY4MjBjZGU1N2E3MmMyODQ1LnNldENvbnRlbnQoaHRtbF81ZmY3NjRlZDNiMzA0ZGQwOGUyYzE4ODUwNDg0N2ExMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMDUxZTczOGZhNWE0OWY5YjlmMmQ3NTZmOWVlOGEyMi5iaW5kUG9wdXAocG9wdXBfZTkxNjM1NjM2NjdlNDc4NjgyMGNkZTU3YTcyYzI4NDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzQ5ZmY2MmZjYmUwNGJkNGJhYWFmNGEyYzYxNjA4OTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MDkyMDEwNDYyMzc5LC0xMjIuNDM0NjA5MjgwMzUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTE0MDMxZjRmYmQ5NDc3ODhmMjU5ZmI3YzJhNGQyYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjkwNzE1YjI4ZWE4NDlhMmFhNmM5YTA2MTIyYWUxZDYgPSAkKCc8ZGl2IGlkPSJodG1sX2Y5MDcxNWIyOGVhODQ5YTJhYTZjOWEwNjEyMmFlMWQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxNDAzMWY0ZmJkOTQ3Nzg4ZjI1OWZiN2MyYTRkMmExLnNldENvbnRlbnQoaHRtbF9mOTA3MTViMjhlYTg0OWEyYWE2YzlhMDYxMjJhZTFkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NDlmZjYyZmNiZTA0YmQ0YmFhYWY0YTJjNjE2MDg5My5iaW5kUG9wdXAocG9wdXBfOTE0MDMxZjRmYmQ5NDc3ODhmMjU5ZmI3YzJhNGQyYTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGFkNWZkZjVkZjg0NGE2OGEzMWRlNTQxODhmYWUzMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc5MjA5Mzc1NTMyOTUsLTEyMi40MTA4ODI4MjU1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZGU4ZjE5NDczMWM0NzE4OGM0NzllYTdmZWFkNDU3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjJhNWQ5MjdkYTU0OThiOTNhMTBkNjAyZmFhZDA1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDYyYTVkOTI3ZGE1NDk4YjkzYTEwZDYwMmZhYWQwNTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZFSElDTEUgVEhFRlQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkZThmMTk0NzMxYzQ3MTg4YzQ3OWVhN2ZlYWQ0NTcxLnNldENvbnRlbnQoaHRtbF8wNjJhNWQ5MjdkYTU0OThiOTNhMTBkNjAyZmFhZDA1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YWQ1ZmRmNWRmODQ0YTY4YTMxZGU1NDE4OGZhZTMxMC5iaW5kUG9wdXAocG9wdXBfM2RlOGYxOTQ3MzFjNDcxODhjNDc5ZWE3ZmVhZDQ1NzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGNmYTc1ZmZhNzc3NDU1Y2E0YWU0MDI0YzA3MzY0MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy44MDA0NTY2NDcxMDM4OSwtMTIyLjQwMTQzMjc1NDcyMjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQzYzFhOGZkMzg4NDhmMzkxNjU1MGFlNzdjMzZmZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDZkMzJhYzVlMjk0NGVmZjhiYTUwYmIyOTQ5YTViNjAgPSAkKCc8ZGl2IGlkPSJodG1sXzA2ZDMyYWM1ZTI5NDRlZmY4YmE1MGJiMjk0OWE1YjYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRUhJQ0xFIFRIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NDNjMWE4ZmQzODg0OGYzOTE2NTUwYWU3N2MzNmZlOC5zZXRDb250ZW50KGh0bWxfMDZkMzJhYzVlMjk0NGVmZjhiYTUwYmIyOTQ5YTViNjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGNmYTc1ZmZhNzc3NDU1Y2E0YWU0MDI0YzA3MzY0MWYuYmluZFBvcHVwKHBvcHVwXzc0M2MxYThmZDM4ODQ4ZjM5MTY1NTBhZTc3YzM2ZmU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3YjBlNzI0ZWEzNDRmZWViNmIwNmMwYWNlYjRhZmIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQzNTU1MDU0MjI2NSwtMTIyLjQyMTEyODAyOTUwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1OWMyMDM1OTliYzQ3NWM5OWE4ZjI1MjVmMDY2NjE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5NDNmOWEwY2YwYjRjNzFhYjJkMzc3ZTM4NWM4NTM3ID0gJCgnPGRpdiBpZD0iaHRtbF80OTQzZjlhMGNmMGI0YzcxYWIyZDM3N2UzODVjODUzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFSQ0VOWS9USEVGVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU5YzIwMzU5OWJjNDc1Yzk5YThmMjUyNWYwNjY2MTkuc2V0Q29udGVudChodG1sXzQ5NDNmOWEwY2YwYjRjNzFhYjJkMzc3ZTM4NWM4NTM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ3YjBlNzI0ZWEzNDRmZWViNmIwNmMwYWNlYjRhZmIxLmJpbmRQb3B1cChwb3B1cF9jNTljMjAzNTk5YmM0NzVjOTlhOGYyNTI1ZjA2NjYxOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMTlkMWJkZGYyMzg0MTQzOGI1MjIwM2ZmMzYxMDc3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NjU2NDc2MDc2ODUsLTEyMi40MDcyNDQwODcwMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYmI0NTI0MTA1N2Q0NWFjODE1YTA5ODI2MmNjMTliYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjU1Y2RhMmRmNTA0M2FmYTExMTM4ODhhYmIyYWI1NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTY1NWNkYTJkZjUwNDNhZmExMTEzODg4YWJiMmFiNTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiYjQ1MjQxMDU3ZDQ1YWM4MTVhMDk4MjYyY2MxOWJjLnNldENvbnRlbnQoaHRtbF8xNjU1Y2RhMmRmNTA0M2FmYTExMTM4ODhhYmIyYWI1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMTlkMWJkZGYyMzg0MTQzOGI1MjIwM2ZmMzYxMDc3MC5iaW5kUG9wdXAocG9wdXBfY2JiNDUyNDEwNTdkNDVhYzgxNWEwOTgyNjJjYzE5YmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWUzMDg2Nzg4NDQ1NGRhNGE0OWRkNjRhZGE3NDc1MTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZDU5MzU0YWNkYjU0NDI1YWNmMDJmNzY4MmU3ODgxNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZWQzMGQ4NThlZDY0NDUyYWMwNTBhODQxNzQzZTkyOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWVkMzBkODU4ZWQ2NDQ1MmFjMDUwYTg0MTc0M2U5MjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJFQ09WRVJFRCBWRUhJQ0xFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZDU5MzU0YWNkYjU0NDI1YWNmMDJmNzY4MmU3ODgxNC5zZXRDb250ZW50KGh0bWxfMWVkMzBkODU4ZWQ2NDQ1MmFjMDUwYTg0MTc0M2U5MjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWUzMDg2Nzg4NDQ1NGRhNGE0OWRkNjRhZGE3NDc1MTcuYmluZFBvcHVwKHBvcHVwX2FkNTkzNTRhY2RiNTQ0MjVhY2YwMmY3NjgyZTc4ODE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4N2Q4OWU3NWE3ZTQ0ZjhhZGIwMjMwMDA2M2ViNmExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDAxZWIyNGM1ZTExNGRkNjhmMmUzZTlkMGZhMzg3ODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQ1YmYxNDA5YTc1NGRkYzhlNjFlYWM0NzZlMzUxNDcgPSAkKCc8ZGl2IGlkPSJodG1sXzVkNWJmMTQwOWE3NTRkZGM4ZTYxZWFjNDc2ZTM1MTQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDAxZWIyNGM1ZTExNGRkNjhmMmUzZTlkMGZhMzg3ODIuc2V0Q29udGVudChodG1sXzVkNWJmMTQwOWE3NTRkZGM4ZTYxZWFjNDc2ZTM1MTQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM4N2Q4OWU3NWE3ZTQ0ZjhhZGIwMjMwMDA2M2ViNmExLmJpbmRQb3B1cChwb3B1cF8wMDFlYjI0YzVlMTE0ZGQ2OGYyZTNlOWQwZmEzODc4Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZGMwMjFlY2JkNzE0ZTA5OTIyYzc0MWVhOThkNDJlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NDE5Mjc1MDg5MzIwNSwtMTIyLjQ0NDY4NTQ4MjI3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3MWVjMzE2NzkwNTQ3ZTQ5MTk1ZDExYTg1MTdkNDUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2OGY1ZTI2Y2ZkNDQ3ZWU5NDIyY2MyYTkzYTE0ODRiID0gJCgnPGRpdiBpZD0iaHRtbF84NjhmNWUyNmNmZDQ0N2VlOTQyMmNjMmE5M2ExNDg0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzFlYzMxNjc5MDU0N2U0OTE5NWQxMWE4NTE3ZDQ1My5zZXRDb250ZW50KGh0bWxfODY4ZjVlMjZjZmQ0NDdlZTk0MjJjYzJhOTNhMTQ4NGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWRjMDIxZWNiZDcxNGUwOTkyMmM3NDFlYTk4ZDQyZTMuYmluZFBvcHVwKHBvcHVwXzE3MWVjMzE2NzkwNTQ3ZTQ5MTk1ZDExYTg1MTdkNDUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3Zjc5YTExYTNmMjQ3ZTU4NDQwYzE5NjVhMTkwZGY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDY5MjgyMDA0MSwtMTIyLjQxNTc1NzAzOTE5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkY2YzNTlhNWMyNzQxNTA4N2FjYTQ2MmE3N2Y2OGMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkNTk1ZDM0OGIzYTRkMjM4MDU3ZDhkMmNkYjgzMjQ2ID0gJCgnPGRpdiBpZD0iaHRtbF9kZDU5NWQzNDhiM2E0ZDIzODA1N2Q4ZDJjZGI4MzI0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZGNmMzU5YTVjMjc0MTUwODdhY2E0NjJhNzdmNjhjMC5zZXRDb250ZW50KGh0bWxfZGQ1OTVkMzQ4YjNhNGQyMzgwNTdkOGQyY2RiODMyNDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDdmNzlhMTFhM2YyNDdlNTg0NDBjMTk2NWExOTBkZjcuYmluZFBvcHVwKHBvcHVwX2RkY2YzNTlhNWMyNzQxNTA4N2FjYTQ2MmE3N2Y2OGMwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5NGQ0ZWRiYjUwNjQ4NzBhMDA3YWUzNThjMWNkMDc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NTI4MDYyNzQ2NSwtMTIyLjQ3NTY0NzQ2MDc4NTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWEzMWQ0MzRlMzU4NGJlYjhiMjc1M2YwNzFhZWQ3M2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWIyNzMwZTgyNzExNGExOWIzYzA3Y2MzN2VhMzFiZmEgPSAkKCc8ZGl2IGlkPSJodG1sX2FiMjczMGU4MjcxMTRhMTliM2MwN2NjMzdlYTMxYmZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ST0JCRVJZPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTMxZDQzNGUzNTg0YmViOGIyNzUzZjA3MWFlZDczZS5zZXRDb250ZW50KGh0bWxfYWIyNzMwZTgyNzExNGExOWIzYzA3Y2MzN2VhMzFiZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzk0ZDRlZGJiNTA2NDg3MGEwMDdhZTM1OGMxY2QwNzkuYmluZFBvcHVwKHBvcHVwX2FhMzFkNDM0ZTM1ODRiZWI4YjI3NTNmMDcxYWVkNzNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwNWMyNzM5NjBjYTQ5MmViNzA2MDQxYjNlYjI3MDRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQyODUxNzM3NDQ0ODk0LC0xMjIuNDIwOTY3NDQwNTY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmI4ZWFhZDliZDFmNDNiYmFkOGUyMTNjOGUxYjI4MTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzk1NGJmYzA2ZGNlNDY2ZGFmOWZiNzViYjFkNTJmNTAgPSAkKCc8ZGl2IGlkPSJodG1sXzc5NTRiZmMwNmRjZTQ2NmRhZjlmYjc1YmIxZDUyZjUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmI4ZWFhZDliZDFmNDNiYmFkOGUyMTNjOGUxYjI4MTAuc2V0Q29udGVudChodG1sXzc5NTRiZmMwNmRjZTQ2NmRhZjlmYjc1YmIxZDUyZjUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwNWMyNzM5NjBjYTQ5MmViNzA2MDQxYjNlYjI3MDRmLmJpbmRQb3B1cChwb3B1cF82YjhlYWFkOWJkMWY0M2JiYWQ4ZTIxM2M4ZTFiMjgxMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGQ4YzZlOTA0NzU0YzEzOWYxMjI2Mjc3YzRlYWE3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MjExOTg0ODg5MzEsLTEyMi40MTU2Njk2NjE0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YzhhZjAzNDlkZWQ0OTg0YjQ4MmJiOTlhMDZmODBmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NjNmMTlkNGRiYjM0NDVhOWQwYTNjZjU5NTYzNGIwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfODYzZjE5ZDRkYmIzNDQ1YTlkMGEzY2Y1OTU2MzRiMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZBTkRBTElTTTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGM4YWYwMzQ5ZGVkNDk4NGI0ODJiYjk5YTA2ZjgwZmQuc2V0Q29udGVudChodG1sXzg2M2YxOWQ0ZGJiMzQ0NWE5ZDBhM2NmNTk1NjM0YjAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q4ZDhjNmU5MDQ3NTRjMTM5ZjEyMjYyNzdjNGVhYTdiLmJpbmRQb3B1cChwb3B1cF80YzhhZjAzNDlkZWQ0OTg0YjQ4MmJiOTlhMDZmODBmZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTlhYWNjODY2NjM0OWU2OTM5NWI4NDRhZDEwMTAzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3OTE2NzQyMTg5NjMsLTEyMi40MDYzNDY0MjU2MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NzQ1ZWM3ZDIxNDA0MTIyOTkwZDJmNWQ0NTllZDg2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjYyNDJhNWE1Yzg0YjQzOTVhMjkzZDhhZjNiNWNlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjI2MjQyYTVhNWM4NGI0Mzk1YTI5M2Q4YWYzYjVjZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3NDVlYzdkMjE0MDQxMjI5OTBkMmY1ZDQ1OWVkODY2LnNldENvbnRlbnQoaHRtbF82MjYyNDJhNWE1Yzg0YjQzOTVhMjkzZDhhZjNiNWNlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMTlhYWNjODY2NjM0OWU2OTM5NWI4NDRhZDEwMTAzMC5iaW5kUG9wdXAocG9wdXBfOTc0NWVjN2QyMTQwNDEyMjk5MGQyZjVkNDU5ZWQ4NjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjc5NjE0ODdhY2Q2NDIyMTliNjZhMGZiZWMyNmFjZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjU3MTg0Mzk1MjgyLC0xMjIuNDA5NTI5OTEzMjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZlZWIwODhjMDcyNDRkNjgwMTZjYjhkYWE4MzQ0ZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGYyNGJhMDVjNDAwNDZhOThmNTc2NzhmODQxNjU2YmUgPSAkKCc8ZGl2IGlkPSJodG1sXzhmMjRiYTA1YzQwMDQ2YTk4ZjU3Njc4Zjg0MTY1NmJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZmVlYjA4OGMwNzI0NGQ2ODAxNmNiOGRhYTgzNDRlNC5zZXRDb250ZW50KGh0bWxfOGYyNGJhMDVjNDAwNDZhOThmNTc2NzhmODQxNjU2YmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjc5NjE0ODdhY2Q2NDIyMTliNjZhMGZiZWMyNmFjZTEuYmluZFBvcHVwKHBvcHVwX2RmZWViMDg4YzA3MjQ0ZDY4MDE2Y2I4ZGFhODM0NGU0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlN2E3NjE0ODE0MjRhN2RhNzlmOWIzY2JlNTI1MTEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTk3YTI3OGExNjI0ODJkOGI4ZWU0YTVjNjBkZTk1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZjU3NmUyMDZhNjQ0MTBjOTllNjhhYWE1MDdiNjUxZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWY1NzZlMjA2YTY0NDEwYzk5ZTY4YWFhNTA3YjY1MWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjE5N2EyNzhhMTYyNDgyZDhiOGVlNGE1YzYwZGU5NTkuc2V0Q29udGVudChodG1sX2VmNTc2ZTIwNmE2NDQxMGM5OWU2OGFhYTUwN2I2NTFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlN2E3NjE0ODE0MjRhN2RhNzlmOWIzY2JlNTI1MTEyLmJpbmRQb3B1cChwb3B1cF9iMTk3YTI3OGExNjI0ODJkOGI4ZWU0YTVjNjBkZTk1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjVlMTgxYzlkNjc0ZjZjODYxNjBhMDAzNDBmOWFiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NzUyNDMwODc4MywtMTIyLjQxMDczODA5NzMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2ZjE4OThkNWE3MjQ5YjE5ZWEwNDdiNTc4YTEzZmQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwNWU5MjRkZWJhOTRiODU5ZWE4NjdlYmIyZWQxYzI3ID0gJCgnPGRpdiBpZD0iaHRtbF9jMDVlOTI0ZGViYTk0Yjg1OWVhODY3ZWJiMmVkMWMyNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSR0xBUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2ZjE4OThkNWE3MjQ5YjE5ZWEwNDdiNTc4YTEzZmQ1LnNldENvbnRlbnQoaHRtbF9jMDVlOTI0ZGViYTk0Yjg1OWVhODY3ZWJiMmVkMWMyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYjVlMTgxYzlkNjc0ZjZjODYxNjBhMDAzNDBmOWFiZC5iaW5kUG9wdXAocG9wdXBfNjZmMTg5OGQ1YTcyNDliMTllYTA0N2I1NzhhMTNmZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzQ4ODNmMDE1YTdlNGY2N2IzNjg0YzhmZmNmZWUyNjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Njc1MjQzMDg3ODMsLTEyMi40MTA3MzgwOTczMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYWMzM2ExNzYwODQ0OWJmOTZjNTIwZDQ3ZGVjYTI0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjYwNjZiZTI3MGU0OWUwOGFiYjgwODllYjI2NmQwZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDY2MDY2YmUyNzBlNDllMDhhYmI4MDg5ZWIyNjZkMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFSU09OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYWMzM2ExNzYwODQ0OWJmOTZjNTIwZDQ3ZGVjYTI0Ni5zZXRDb250ZW50KGh0bWxfZDY2MDY2YmUyNzBlNDllMDhhYmI4MDg5ZWIyNjZkMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzQ4ODNmMDE1YTdlNGY2N2IzNjg0YzhmZmNmZWUyNjEuYmluZFBvcHVwKHBvcHVwXzFhYzMzYTE3NjA4NDQ5YmY5NmM1MjBkNDdkZWNhMjQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1N2EyY2NkZDUxOTRhYjM5ZjU2Y2NjZGI2YmI5NDgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEzMTA4MzQzMzI2NCwtMTIyLjQ0NDMxNDAyNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2MmVlZWYzZjFmNzRiNGQ5OWE3NWU2NjJlZTljMGJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyNjEzYTg3MzQzMDRmN2Y5NjM3ZGI1OWNlMzhkM2QyID0gJCgnPGRpdiBpZD0iaHRtbF9lMjYxM2E4NzM0MzA0ZjdmOTYzN2RiNTljZTM4ZDNkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSR0xBUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2MmVlZWYzZjFmNzRiNGQ5OWE3NWU2NjJlZTljMGJkLnNldENvbnRlbnQoaHRtbF9lMjYxM2E4NzM0MzA0ZjdmOTYzN2RiNTljZTM4ZDNkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNTdhMmNjZGQ1MTk0YWIzOWY1NmNjY2RiNmJiOTQ4MS5iaW5kUG9wdXAocG9wdXBfYTYyZWVlZjNmMWY3NGI0ZDk5YTc1ZTY2MmVlOWMwYmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTM3ZmZiMDVlMzc5NDczMTg5Mjc4NDYyZDczMDY2ODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTMxMDgzNDMzMjY0LC0xMjIuNDQ0MzE0MDI1MTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWUzMjU5Y2YxZDkzNGFjZDlkYjlmODhkYWE5NzNhZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzVlY2YzZGE5ZjEwNDkyMGEzNTVjYWM3ZGQwMWRiYjkgPSAkKCc8ZGl2IGlkPSJodG1sX2M1ZWNmM2RhOWYxMDQ5MjBhMzU1Y2FjN2RkMDFkYmI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EUlVHL05BUkNPVElDPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTMyNTljZjFkOTM0YWNkOWRiOWY4OGRhYTk3M2FkZi5zZXRDb250ZW50KGh0bWxfYzVlY2YzZGE5ZjEwNDkyMGEzNTVjYWM3ZGQwMWRiYjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTM3ZmZiMDVlMzc5NDczMTg5Mjc4NDYyZDczMDY2ODIuYmluZFBvcHVwKHBvcHVwXzllMzI1OWNmMWQ5MzRhY2Q5ZGI5Zjg4ZGFhOTczYWRmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljMWFmOWM3ZjFlOTRkNDRiNTA5YTI5MjllZDcyZGNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3YTAzNWJhMGYzODRkOTFhMDcwYjFjYTY3MzQ3ZDJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmODJkMGEyNDhiZTRlYWZhZWJkNjU3YmZkOGZkMmYzID0gJCgnPGRpdiBpZD0iaHRtbF9kZjgyZDBhMjQ4YmU0ZWFmYWViZDY1N2JmZDhmZDJmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlTU0lORyBQRVJTT048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3YTAzNWJhMGYzODRkOTFhMDcwYjFjYTY3MzQ3ZDJhLnNldENvbnRlbnQoaHRtbF9kZjgyZDBhMjQ4YmU0ZWFmYWViZDY1N2JmZDhmZDJmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YzFhZjljN2YxZTk0ZDQ0YjUwOWEyOTI5ZWQ3MmRjZS5iaW5kUG9wdXAocG9wdXBfYzdhMDM1YmEwZjM4NGQ5MWEwNzBiMWNhNjczNDdkMmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzNlMTdhZTE4N2EwNGZjNmI0MGMyNmJmMDA2NDg2MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjYwMTYwMTE0MTAzLC0xMjIuNDAzNjQ0NjIwNDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTU5NGE0Y2M0NDc2NGM2ZGJjYWE1Mjk3ZDhiNTdhZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmIzNGFiZWE2OWQyNDNmNGI5NTA5YTViYzc0NTMwY2IgPSAkKCc8ZGl2IGlkPSJodG1sXzJiMzRhYmVhNjlkMjQzZjRiOTUwOWE1YmM3NDUzMGNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSVNTSU5HIFBFUlNPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTU5NGE0Y2M0NDc2NGM2ZGJjYWE1Mjk3ZDhiNTdhZWUuc2V0Q29udGVudChodG1sXzJiMzRhYmVhNjlkMjQzZjRiOTUwOWE1YmM3NDUzMGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzZTE3YWUxODdhMDRmYzZiNDBjMjZiZjAwNjQ4NjExLmJpbmRQb3B1cChwb3B1cF85NTk0YTRjYzQ0NzY0YzZkYmNhYTUyOTdkOGI1N2FlZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMmY5ZTg2Y2VlZjU0NzU4YmFkMDIxMjg0YjY2MzM5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NjIzMTA0MDQ3NTgsLTEyMi40MTQ3MTQyOTU1Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4YmNiMzgwNzQ5YTRkYzU4NjQyYzVhNzRhZTNlNDkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhMzcyNGU5YmIwOTQ1NGViZWMyYzgxYmZhMTdhZDg3ID0gJCgnPGRpdiBpZD0iaHRtbF85YTM3MjRlOWJiMDk0NTRlYmVjMmM4MWJmYTE3YWQ4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNTQVVMVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjhiY2IzODA3NDlhNGRjNTg2NDJjNWE3NGFlM2U0OTMuc2V0Q29udGVudChodG1sXzlhMzcyNGU5YmIwOTQ1NGViZWMyYzgxYmZhMTdhZDg3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IyZjllODZjZWVmNTQ3NThiYWQwMjEyODRiNjYzMzljLmJpbmRQb3B1cChwb3B1cF82OGJjYjM4MDc0OWE0ZGM1ODY0MmM1YTc0YWUzZTQ5Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjM4MWNiMWYzNDI0ZjgwYjgyNmU3NzQxOGFjYjRmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NjIzMTA0MDQ3NTgsLTEyMi40MTQ3MTQyOTU1Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3ZDAxZWMwMmU1MDQzMjY4OWJkYzVhYTI1MWNjNWQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjNmU1ZmNiZGMxMTRiMDY5MGU4YjU0MGY1YzIyZWM2ID0gJCgnPGRpdiBpZD0iaHRtbF83YzZlNWZjYmRjMTE0YjA2OTBlOGI1NDBmNWMyMmVjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlTU0lORyBQRVJTT048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3ZDAxZWMwMmU1MDQzMjY4OWJkYzVhYTI1MWNjNWQxLnNldENvbnRlbnQoaHRtbF83YzZlNWZjYmRjMTE0YjA2OTBlOGI1NDBmNWMyMmVjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YjM4MWNiMWYzNDI0ZjgwYjgyNmU3NzQxOGFjYjRmNy5iaW5kUG9wdXAocG9wdXBfMzdkMDFlYzAyZTUwNDMyNjg5YmRjNWFhMjUxY2M1ZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjI5YmZmYWUwNDMzNGZiM2EzODVlNDU1MTBhYjlmMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Nzc1MTE4ODk1Njk1LC0xMjIuNDE4MDQ1NDUyNzY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTkyNTMxZGQ0N2U3NGQyZmI1YmQzN2RkODE5MDdhNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGY5YWNhYWIwZjExNGYxN2FkZTE3NGM4N2YxMjJiNDggPSAkKCc8ZGl2IGlkPSJodG1sXzhmOWFjYWFiMGYxMTRmMTdhZGUxNzRjODdmMTIyYjQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRUhJQ0xFIFRIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTI1MzFkZDQ3ZTc0ZDJmYjViZDM3ZGQ4MTkwN2E3MC5zZXRDb250ZW50KGh0bWxfOGY5YWNhYWIwZjExNGYxN2FkZTE3NGM4N2YxMjJiNDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjI5YmZmYWUwNDMzNGZiM2EzODVlNDU1MTBhYjlmMjAuYmluZFBvcHVwKHBvcHVwXzk5MjUzMWRkNDdlNzRkMmZiNWJkMzdkZDgxOTA3YTcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcyMzQwMTE4MTk1YzRhZWRhYmE2YmVlZmZjMGQ2MzY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgyMDIzODQ3ODk3NSwtMTIyLjQwMTE2MTU1NTYwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmYmMwYzVkYTQyZjQwNThhZTdmNWI5NWI4ZjNmNGNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjZWZiOWY4NDNkMTQ4YzliM2RmMTBjOTU0MzQ3NjQ3ID0gJCgnPGRpdiBpZD0iaHRtbF9iY2VmYjlmODQzZDE0OGM5YjNkZjEwYzk1NDM0NzY0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmYmMwYzVkYTQyZjQwNThhZTdmNWI5NWI4ZjNmNGNiLnNldENvbnRlbnQoaHRtbF9iY2VmYjlmODQzZDE0OGM5YjNkZjEwYzk1NDM0NzY0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MjM0MDExODE5NWM0YWVkYWJhNmJlZWZmYzBkNjM2NS5iaW5kUG9wdXAocG9wdXBfNWZiYzBjNWRhNDJmNDA1OGFlN2Y1Yjk1YjhmM2Y0Y2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmFhMTVmZDJhODIxNGM5Y2E5NmMzYjljMjIwYTc1OWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjcwMDUzMTk2Mjk5OTUsLTEyMi40MDM0MDg2NjkxOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYmQ1YjkyZTFhOWI0NTk5ODc2YWE5M2QzMTY4ZmY4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZGNlY2MyYThjMDE0M2FkYWM3ZDc3NjA1Mjg3N2MxNyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2RjZWNjMmE4YzAxNDNhZGFjN2Q3NzYwNTI4NzdjMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldBUlJBTlRTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYmQ1YjkyZTFhOWI0NTk5ODc2YWE5M2QzMTY4ZmY4MC5zZXRDb250ZW50KGh0bWxfY2RjZWNjMmE4YzAxNDNhZGFjN2Q3NzYwNTI4NzdjMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmFhMTVmZDJhODIxNGM5Y2E5NmMzYjljMjIwYTc1OWYuYmluZFBvcHVwKHBvcHVwX2RiZDViOTJlMWE5YjQ1OTk4NzZhYTkzZDMxNjhmZjgwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjZGFmZjhkYjhiMDQzM2U4NWYxYjNjYjBmOTk3YTY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzODM0NDM3NDE0MSwtMTIyLjQxMjkzMDUyMjA1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4NjNiZGI2NTcyZDQ0ZWE4ZjM1ZTU1NGMwZWJmOWI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0YmJkMGU3YzM4YTRkZDg4MDI3YTdiNTAyM2YxMjZjID0gJCgnPGRpdiBpZD0iaHRtbF85NGJiZDBlN2MzOGE0ZGQ4ODAyN2E3YjUwMjNmMTI2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkFOREFMSVNNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODYzYmRiNjU3MmQ0NGVhOGYzNWU1NTRjMGViZjliNC5zZXRDb250ZW50KGh0bWxfOTRiYmQwZTdjMzhhNGRkODgwMjdhN2I1MDIzZjEyNmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGNkYWZmOGRiOGIwNDMzZTg1ZjFiM2NiMGY5OTdhNjguYmluZFBvcHVwKHBvcHVwXzQ4NjNiZGI2NTcyZDQ0ZWE4ZjM1ZTU1NGMwZWJmOWI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiMDIzNjYyY2ExMTQ1MDY4YmFlZGYxMWFmZGUzMmVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzUzMDE4NjUzNzQ0NjA0LC0xMjIuNDE4NTg3MTcyMjE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjFiMmJiMDU0ODFhNGM3YWFlNzVkM2E2NmY5N2RmMjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzkzNjQ0OWY2MTA0NGNjY2IyZTIwNTAzZjA0ZTE0NmYgPSAkKCc8ZGl2IGlkPSJodG1sX2M5MzY0NDlmNjEwNDRjY2NiMmUyMDUwM2YwNGUxNDZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxYjJiYjA1NDgxYTRjN2FhZTc1ZDNhNjZmOTdkZjIxLnNldENvbnRlbnQoaHRtbF9jOTM2NDQ5ZjYxMDQ0Y2NjYjJlMjA1MDNmMDRlMTQ2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYjAyMzY2MmNhMTE0NTA2OGJhZWRmMTFhZmRlMzJlZi5iaW5kUG9wdXAocG9wdXBfYjFiMmJiMDU0ODFhNGM3YWFlNzVkM2E2NmY5N2RmMjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTZhYjkxMjc1MTY0NDkyOGI3ZWQ0YTZkM2E0ZDBhOTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzQwNDE4Mzg1MDQxLC0xMjIuNDE0MzcwNjI3NDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmEwZjViZWJhMjkzNGM3MmEwOGQ1YzQxNjIzNTJhZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDQzOTMyZTY0ODhiNGVhYzgyZGI0ZmYwMDg1MzlmYjEgPSAkKCc8ZGl2IGlkPSJodG1sXzA0MzkzMmU2NDg4YjRlYWM4MmRiNGZmMDA4NTM5ZmIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GUkFVRDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmEwZjViZWJhMjkzNGM3MmEwOGQ1YzQxNjIzNTJhZGMuc2V0Q29udGVudChodG1sXzA0MzkzMmU2NDg4YjRlYWM4MmRiNGZmMDA4NTM5ZmIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U2YWI5MTI3NTE2NDQ5MjhiN2VkNGE2ZDNhNGQwYTkyLmJpbmRQb3B1cChwb3B1cF9mYTBmNWJlYmEyOTM0YzcyYTA4ZDVjNDE2MjM1MmFkYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYzgwMmNlYmE0ZDI0MmU2ODRjMzBlZjk3NmNhOTUzMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5MDUzODk5MzcyNSwtMTIyLjQwMzkxNTY4MTU3MTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2VmMDBiODViNWQzNDI4ZWE2NTEyNWQxZmZkODJhNTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODc4NDNhYzdhNjQxNDk4Nzk3MmNjNDQxNGE3YjMyODUgPSAkKCc8ZGl2IGlkPSJodG1sXzg3ODQzYWM3YTY0MTQ5ODc5NzJjYzQ0MTRhN2IzMjg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZWYwMGI4NWI1ZDM0MjhlYTY1MTI1ZDFmZmQ4MmE1NC5zZXRDb250ZW50KGh0bWxfODc4NDNhYzdhNjQxNDk4Nzk3MmNjNDQxNGE3YjMyODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2M4MDJjZWJhNGQyNDJlNjg0YzMwZWY5NzZjYTk1MzEuYmluZFBvcHVwKHBvcHVwXzdlZjAwYjg1YjVkMzQyOGVhNjUxMjVkMWZmZDgyYTU0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhYzQ2OTU4OTg4ZDQ5YzlhMDJmYzYwNzVmNDNiODBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzMDk5ODI0NDU5MjEsLTEyMi40MTkxODMwOTYzNjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMmM0MDBkMTMxY2Q0MGU2YjY2N2Y0MmMwYzBjYjBjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZTA1MjM5ZDI2M2E0YTQ0OTZkYTQzNGQzY2YwMzY1MiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWUwNTIzOWQyNjNhNGE0NDk2ZGE0MzRkM2NmMDM2NTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMmM0MDBkMTMxY2Q0MGU2YjY2N2Y0MmMwYzBjYjBjNy5zZXRDb250ZW50KGh0bWxfZWUwNTIzOWQyNjNhNGE0NDk2ZGE0MzRkM2NmMDM2NTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGFjNDY5NTg5ODhkNDljOWEwMmZjNjA3NWY0M2I4MGIuYmluZFBvcHVwKHBvcHVwX2YyYzQwMGQxMzFjZDQwZTZiNjY3ZjQyYzBjMGNiMGM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0ZTA4MDM3YWM4MDQwM2ZiZjI2YjI4NDg2MjlmNzVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQwNzM2MDU0ODM1NzksLTEyMi4zODg3NTMwNDY5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYjk3YjEzYmZmNTQ0YWI0ODUyYTk1ZGFiZWIyYmYwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMDY0NzI3YTQ3MTQ0OTQzYjUzZGE5OTQ5MmRiYjhkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjA2NDcyN2E0NzE0NDk0M2I1M2RhOTk0OTJkYmI4ZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYjk3YjEzYmZmNTQ0YWI0ODUyYTk1ZGFiZWIyYmYwNS5zZXRDb250ZW50KGh0bWxfYjA2NDcyN2E0NzE0NDk0M2I1M2RhOTk0OTJkYmI4ZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzRlMDgwMzdhYzgwNDAzZmJmMjZiMjg0ODYyOWY3NWEuYmluZFBvcHVwKHBvcHVwX2ZiOTdiMTNiZmY1NDRhYjQ4NTJhOTVkYWJlYjJiZjA1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmZjE2NzQ5NDVjMzRiYzc5MjU1N2UwODkxM2Y0MDg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc0OTkxMjk0NDM2NiwtMTIyLjQzNzc5OTcwMzQ2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5MDk5Njc0OGQzYTQyZDc4MDJkZTM1Zjg5YzFjYjhhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkYzVjOTg0ZTU1NzQxNmRhNjI3Yzg2YmVmYjhhZGE1ID0gJCgnPGRpdiBpZD0iaHRtbF81ZGM1Yzk4NGU1NTc0MTZkYTYyN2M4NmJlZmI4YWRhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TEFSQ0VOWS9USEVGVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjkwOTk2NzQ4ZDNhNDJkNzgwMmRlMzVmODljMWNiOGEuc2V0Q29udGVudChodG1sXzVkYzVjOTg0ZTU1NzQxNmRhNjI3Yzg2YmVmYjhhZGE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmZjE2NzQ5NDVjMzRiYzc5MjU1N2UwODkxM2Y0MDg5LmJpbmRQb3B1cChwb3B1cF9mOTA5OTY3NDhkM2E0MmQ3ODAyZGUzNWY4OWMxY2I4YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YmQ2NjI0MTA4ZjY0YjEzODRlOWNlZDYxNjUzMjIyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NzA5MDI3NDM2NjksLTEyMi40MjEzMzI2ODQ2MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWRiMGI2YmYyMWY0MTE5YjRhZDQwYzQ4YmU3YWU5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTZhZDk3OThhNmQ0NzQ3Yjg0MWJiZjZjMDIwMDAwYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTE2YWQ5Nzk4YTZkNDc0N2I4NDFiYmY2YzAyMDAwMGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1JU1NJTkcgUEVSU09OPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YWRiMGI2YmYyMWY0MTE5YjRhZDQwYzQ4YmU3YWU5Yi5zZXRDb250ZW50KGh0bWxfYTE2YWQ5Nzk4YTZkNDc0N2I4NDFiYmY2YzAyMDAwMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmJkNjYyNDEwOGY2NGIxMzg0ZTljZWQ2MTY1MzIyMjQuYmluZFBvcHVwKHBvcHVwXzVhZGIwYjZiZjIxZjQxMTliNGFkNDBjNDhiZTdhZTliKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MzODUyMGI4MTJiYjQ0MmJiZjkxMjE4ZWJjMmNlYzEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3MDkwMjc0MzY2OSwtMTIyLjQyMTMzMjY4NDYzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1MDExZDk1MGZiYzRlYTVhMjNmOGRkOTNkZWE4ZDkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxNGNhMDQ0NjI3NTQ1MWE5OWVhMzkyZmQ2MzAyMmY4ID0gJCgnPGRpdiBpZD0iaHRtbF84MTRjYTA0NDYyNzU0NTFhOTllYTM5MmZkNjMwMjJmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlTU0lORyBQRVJTT048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1MDExZDk1MGZiYzRlYTVhMjNmOGRkOTNkZWE4ZDkyLnNldENvbnRlbnQoaHRtbF84MTRjYTA0NDYyNzU0NTFhOTllYTM5MmZkNjMwMjJmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMzg1MjBiODEyYmI0NDJiYmY5MTIxOGViYzJjZWMxMC5iaW5kUG9wdXAocG9wdXBfZTUwMTFkOTUwZmJjNGVhNWEyM2Y4ZGQ5M2RlYThkOTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzc2NDBiMTJlM2Q5NGQ4OGFhY2NkNzM1MjMxNGEyODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIyNDU4MjIzOTE3LC0xMjIuNDQ2NjEyOTc4ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWFkMTE4ZGFmYTY3NDUxNTg1ZmVkMzAwZWNhZWUxMGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzNlMzQ1YTM2MGIxNDEzODg0ZWM5ZjdlZTQ0YTVjMDkgPSAkKCc8ZGl2IGlkPSJodG1sXzMzZTM0NWEzNjBiMTQxMzg4NGVjOWY3ZWU0NGE1YzA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWFkMTE4ZGFmYTY3NDUxNTg1ZmVkMzAwZWNhZWUxMGIuc2V0Q29udGVudChodG1sXzMzZTM0NWEzNjBiMTQxMzg4NGVjOWY3ZWU0NGE1YzA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M3NjQwYjEyZTNkOTRkODhhYWNjZDczNTIzMTRhMjg2LmJpbmRQb3B1cChwb3B1cF8xYWQxMThkYWZhNjc0NTE1ODVmZWQzMDBlY2FlZTEwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMGQ1NWU1ZjFlNWI0NWY5OWNkMDZlNmI5ZGE4ZTRlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczMDAzNzk5OTUxMjc5NSwtMTIyLjQwNDU5NDE0MDYzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkYWQzMDE4YjVhMjRjNGRhMmM5MTdiOWNjNmE5NzFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxZGU4MjdjNmU5ZjQxOTBhNmI5MWJhMDUyYTE0YmM3ID0gJCgnPGRpdiBpZD0iaHRtbF8zMWRlODI3YzZlOWY0MTkwYTZiOTFiYTA1MmExNGJjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZGFkMzAxOGI1YTI0YzRkYTJjOTE3YjljYzZhOTcxYS5zZXRDb250ZW50KGh0bWxfMzFkZTgyN2M2ZTlmNDE5MGE2YjkxYmEwNTJhMTRiYzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzBkNTVlNWYxZTViNDVmOTljZDA2ZTZiOWRhOGU0ZTAuYmluZFBvcHVwKHBvcHVwXzRkYWQzMDE4YjVhMjRjNGRhMmM5MTdiOWNjNmE5NzFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiYTFhM2E4NDM5ZDQ2Njg5NjZlOGJhNjZkNTc5MzUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzk1MzMzODI2NzQzNiwtMTIyLjM5NzM3Mzc0MDA2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyZTNkMjljYTMyYzRkZmM5MTc4NzJhZGI5Nzc5NGNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2YjFhMDNjYjI2YzRkYzU5ZDczZTk4MmZjNWIwZDg1ID0gJCgnPGRpdiBpZD0iaHRtbF8wNmIxYTAzY2IyNmM0ZGM1OWQ3M2U5ODJmYzViMGQ4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmUzZDI5Y2EzMmM0ZGZjOTE3ODcyYWRiOTc3OTRjYS5zZXRDb250ZW50KGh0bWxfMDZiMWEwM2NiMjZjNGRjNTlkNzNlOTgyZmM1YjBkODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGJhMWEzYTg0MzlkNDY2ODk2NmU4YmE2NmQ1NzkzNTMuYmluZFBvcHVwKHBvcHVwXzQyZTNkMjljYTMyYzRkZmM5MTc4NzJhZGI5Nzc5NGNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5NjFkZmM4NzM2MjQ4MzY5MTc0MGY3ZGFhZDRmYTVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg3NTE1ODc0MTYyMjk1LC0xMjIuNDA3NDM0OTg5NTIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDk4ODcyMWI5Y2YwNGI0Y2IzMjViYjA4NDEwMDdhM2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWMzYWViYmRiMWQ1NDg3MDlkYzRhYWUxNmFlN2FlZjIgPSAkKCc8ZGl2IGlkPSJodG1sXzFjM2FlYmJkYjFkNTQ4NzA5ZGM0YWFlMTZhZTdhZWYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XQVJSQU5UUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDk4ODcyMWI5Y2YwNGI0Y2IzMjViYjA4NDEwMDdhM2Muc2V0Q29udGVudChodG1sXzFjM2FlYmJkYjFkNTQ4NzA5ZGM0YWFlMTZhZTdhZWYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA5NjFkZmM4NzM2MjQ4MzY5MTc0MGY3ZGFhZDRmYTVjLmJpbmRQb3B1cChwb3B1cF9kOTg4NzIxYjljZjA0YjRjYjMyNWJiMDg0MTAwN2EzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTA3NzlmZDIwZDA0ZGQ4OTgyMTQ4ZTQzZjU2ZTc4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3ODUyMzM3NzYwMzIsLTEyMi40MDM0NjQwODAwMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNmMyZTQwYzZlMjY0NzIzOTgyNTgzYWI0ZWI1YWVkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YTZlZDIxZjNiNmE0ZDhhODgxYzQ3NjhlM2FlNzgwZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWE2ZWQyMWYzYjZhNGQ4YTg4MWM0NzY4ZTNhZTc4MGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBST1NUSVRVVElPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDZjMmU0MGM2ZTI2NDcyMzk4MjU4M2FiNGViNWFlZDcuc2V0Q29udGVudChodG1sXzVhNmVkMjFmM2I2YTRkOGE4ODFjNDc2OGUzYWU3ODBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlMDc3OWZkMjBkMDRkZDg5ODIxNDhlNDNmNTZlNzg3LmJpbmRQb3B1cChwb3B1cF8wNmMyZTQwYzZlMjY0NzIzOTgyNTgzYWI0ZWI1YWVkNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTdjMGU0YTc0MzA0ZWMxYTJmNzY5OGFmMWEyMzI0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3ODUyMzM3NzYwMzIsLTEyMi40MDM0NjQwODAwMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZWEyNGEwMjE3MzA0MTgwODc1MjQ2ZTUzODAxZTE1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYWIxNGNhMWU2MjM0MjdkOTY4NWRmZDY4ZWZjNWQyZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYmFiMTRjYTFlNjIzNDI3ZDk2ODVkZmQ2OGVmYzVkMmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZWEyNGEwMjE3MzA0MTgwODc1MjQ2ZTUzODAxZTE1MS5zZXRDb250ZW50KGh0bWxfYmFiMTRjYTFlNjIzNDI3ZDk2ODVkZmQ2OGVmYzVkMmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGU3YzBlNGE3NDMwNGVjMWEyZjc2OThhZjFhMjMyNDEuYmluZFBvcHVwKHBvcHVwXzllYTI0YTAyMTczMDQxODA4NzUyNDZlNTM4MDFlMTUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0MWMwNmIxZDY4NDQ1OTZhODhjMGE2M2QyMTE0YmQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzczMjkxODA2OTAyOTk2LC0xMjIuNDM2NjE0MTgxMzMxMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDQzMzA0ODFmNTA0MjNkYjAzZDI2MjJhMThlYjIyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWE5ZDQxMGQ4Zjg0NzNjOTNkNGEzNmFiMTA3YjM1YiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDlhOWQ0MTBkOGY4NDczYzkzZDRhMzZhYjEwN2IzNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQ0MzMwNDgxZjUwNDIzZGIwM2QyNjIyYTE4ZWIyMjMuc2V0Q29udGVudChodG1sXzA5YTlkNDEwZDhmODQ3M2M5M2Q0YTM2YWIxMDdiMzViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E0MWMwNmIxZDY4NDQ1OTZhODhjMGE2M2QyMTE0YmQ3LmJpbmRQb3B1cChwb3B1cF8zNDQzMzA0ODFmNTA0MjNkYjAzZDI2MjJhMThlYjIyMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YTgyZGUzNTJmYmI0OTE4OGZlZTJiM2RjODcyZTdjOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MDUyNzU3ODUwOSwtMTIyLjM5Njg0OTAxNTE3MjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzY2MWMxOTc0NTlmNDczZWE0ZTFmMDA4YzI1Mzc3MjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODFiZmY0YjNlMzQ1NGM2MDk3M2YyNDdhNjBjMDQzMGUgPSAkKCc8ZGl2IGlkPSJodG1sXzgxYmZmNGIzZTM0NTRjNjA5NzNmMjQ3YTYwYzA0MzBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EUlVHL05BUkNPVElDPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjYxYzE5NzQ1OWY0NzNlYTRlMWYwMDhjMjUzNzcyNC5zZXRDb250ZW50KGh0bWxfODFiZmY0YjNlMzQ1NGM2MDk3M2YyNDdhNjBjMDQzMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWE4MmRlMzUyZmJiNDkxODhmZWUyYjNkYzg3MmU3YzkuYmluZFBvcHVwKHBvcHVwXzc2NjFjMTk3NDU5ZjQ3M2VhNGUxZjAwOGMyNTM3NzI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZiZWQzZDQzNmQwMDRhNTNhNTgyOGY5NzRhNjA4YzY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgwNTI3NTc4NTA5LC0xMjIuMzk2ODQ5MDE1MTcyMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDAzOWY1MWQwOWQ0Yzc3YjhiMzBiYmU3ZTU0NWNlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTM3ZGY0OGY3NWY0ZDNmYTg0NWRkODlmMDUzZTBmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWEzN2RmNDhmNzVmNGQzZmE4NDVkZDg5ZjA1M2UwZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldBUlJBTlRTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDAzOWY1MWQwOWQ0Yzc3YjhiMzBiYmU3ZTU0NWNlYS5zZXRDb250ZW50KGh0bWxfMWEzN2RmNDhmNzVmNGQzZmE4NDVkZDg5ZjA1M2UwZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmJlZDNkNDM2ZDAwNGE1M2E1ODI4Zjk3NGE2MDhjNjcuYmluZFBvcHVwKHBvcHVwXzRkMDM5ZjUxZDA5ZDRjNzdiOGIzMGJiZTdlNTQ1Y2VhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkYTYxNmEyNjE1YTQxMTZhNmIwOGQzOTZkMmMwYzVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI4NDE4MDcwNjYwMjA0LC0xMjIuNDUwMDAwNzkwNDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNkMWY2MGM4MjBjNDVjYmE0ODNhNGVhOWFkOTM2NzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjk1YjA5ZmZkNGFiNGEwYzkwYTRiMmQ3ZjlkZGI2ZTkgPSAkKCc8ZGl2IGlkPSJodG1sX2I5NWIwOWZmZDRhYjRhMGM5MGE0YjJkN2Y5ZGRiNmU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yM2QxZjYwYzgyMGM0NWNiYTQ4M2E0ZWE5YWQ5MzY3MC5zZXRDb250ZW50KGh0bWxfYjk1YjA5ZmZkNGFiNGEwYzkwYTRiMmQ3ZjlkZGI2ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmRhNjE2YTI2MTVhNDExNmE2YjA4ZDM5NmQyYzBjNWEuYmluZFBvcHVwKHBvcHVwXzIzZDFmNjBjODIwYzQ1Y2JhNDgzYTRlYTlhZDkzNjcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0NWZmNmFhZGQyODQwNzJiMmE4MWU0NWU0ZDFkNDQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzI5MjExNDY0NzM1OSwtMTIyLjQwMDgzNDI4MzAzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlMTg1NWQ3M2NkMzQ2ZDU5ZGM0ZTNlZjQ2MTg5M2M3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkOTZiMDRhOTI5MTRmYmRhNjUzZGY4YTZiYzYwYjQxID0gJCgnPGRpdiBpZD0iaHRtbF82ZDk2YjA0YTkyOTE0ZmJkYTY1M2RmOGE2YmM2MGI0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlMTg1NWQ3M2NkMzQ2ZDU5ZGM0ZTNlZjQ2MTg5M2M3LnNldENvbnRlbnQoaHRtbF82ZDk2YjA0YTkyOTE0ZmJkYTY1M2RmOGE2YmM2MGI0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNDVmZjZhYWRkMjg0MDcyYjJhODFlNDVlNGQxZDQ0Mi5iaW5kUG9wdXAocG9wdXBfY2UxODU1ZDczY2QzNDZkNTlkYzRlM2VmNDYxODkzYzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWRjNTc1ZWYxMTQyNDk1Nzg2ZDM0MWQ1MmU5MTU0NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODgwMDY1MzI0MzkyMDUsLTEyMi4zOTk4MDIxNDU3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NjVjMzM0NDMwNTI0ODY1OWI3Yzc4NDA5MGVlNTY0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZWU2ZDExYTUwYTA0NWU1OWU3YjQ2OGNlOWU5ZDQ2NiA9ICQoJzxkaXYgaWQ9Imh0bWxfOWVlNmQxMWE1MGEwNDVlNTllN2I0NjhjZTllOWQ0NjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBUkNFTlkvVEhFRlQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2NWMzMzQ0MzA1MjQ4NjU5YjdjNzg0MDkwZWU1NjQ2LnNldENvbnRlbnQoaHRtbF85ZWU2ZDExYTUwYTA0NWU1OWU3YjQ2OGNlOWU5ZDQ2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZGM1NzVlZjExNDI0OTU3ODZkMzQxZDUyZTkxNTQ3Mi5iaW5kUG9wdXAocG9wdXBfNTY1YzMzNDQzMDUyNDg2NTliN2M3ODQwOTBlZTU2NDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzMyNzUzNTUwYjQ4NGRmNzk1Y2RiNWM2YmE3OWRmMGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjM5NzQ4MjQxNjA5LC0xMjIuMzk0OTI4NDc1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3N2YzYTQ2MDhjYjRmM2VhZGJkODdjZDk2NzQ2OWJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U2NzNiZTE4NzIxZjQyMDE5ODY5ZjdhMzQyZjZkYWNhID0gJCgnPGRpdiBpZD0iaHRtbF9lNjczYmUxODcyMWY0MjAxOTg2OWY3YTM0MmY2ZGFjYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0VDT05EQVJZIENPREVTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzdmM2E0NjA4Y2I0ZjNlYWRiZDg3Y2Q5Njc0NjliYS5zZXRDb250ZW50KGh0bWxfZTY3M2JlMTg3MjFmNDIwMTk4NjlmN2EzNDJmNmRhY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzMyNzUzNTUwYjQ4NGRmNzk1Y2RiNWM2YmE3OWRmMGEuYmluZFBvcHVwKHBvcHVwXzE3N2YzYTQ2MDhjYjRmM2VhZGJkODdjZDk2NzQ2OWJhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViMDdlMmRjNjk2NjRlOTU5MzNmNjhlODIwMWNiOGU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YzFhNTZkODk2OWM0YmIzOTcwODEwZGI0YzQ2MmQ3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNzBmMzFjMjU1NmU0YzBiOTRlYjZhMjI4YmYzYjE2OCA9ICQoJzxkaXYgaWQ9Imh0bWxfZDcwZjMxYzI1NTZlNGMwYjk0ZWI2YTIyOGJmM2IxNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNVU1BJQ0lPVVMgT0NDPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzFhNTZkODk2OWM0YmIzOTcwODEwZGI0YzQ2MmQ3Yy5zZXRDb250ZW50KGh0bWxfZDcwZjMxYzI1NTZlNGMwYjk0ZWI2YTIyOGJmM2IxNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWIwN2UyZGM2OTY2NGU5NTkzM2Y2OGU4MjAxY2I4ZTYuYmluZFBvcHVwKHBvcHVwXzVjMWE1NmQ4OTY5YzRiYjM5NzA4MTBkYjRjNDYyZDdjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0NWRkMGI4MjE3YjQ4MDY4MTI3NjBjZGJkYzU4ZGY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzIzOTc0ODI0MTYwOSwtMTIyLjM5NDkyODQ3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZWM3YmE4Zjg3MDg0YWE4OTUzYWRhNTBlOTc1OTJkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ODEzNWQzMWEyZTY0MzY1ODVlNTc5NWE1ODYzNTVkNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjgxMzVkMzFhMmU2NDM2NTg1ZTU3OTVhNTg2MzU1ZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWM3YmE4Zjg3MDg0YWE4OTUzYWRhNTBlOTc1OTJkYy5zZXRDb250ZW50KGh0bWxfNjgxMzVkMzFhMmU2NDM2NTg1ZTU3OTVhNTg2MzU1ZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjQ1ZGQwYjgyMTdiNDgwNjgxMjc2MGNkYmRjNThkZjYuYmluZFBvcHVwKHBvcHVwXzFlYzdiYThmODcwODRhYTg5NTNhZGE1MGU5NzU5MmRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmN2U3ZDI2NjA5ODRlNGJhM2NiYjljNGNmMzIzZTRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg4MzIzNTQ0OTkwNCwtMTIyLjQxMTg1NzAzMjU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGNiYmEzYTQ0MDkwNGEwZGJmODM2ZGY5Yjc5MzdlMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzY2ZDE3ZjlhNTAxNDU1ZmE3ZjcyZWQ2ZTkxYjg3NDYgPSAkKCc8ZGl2IGlkPSJodG1sXzc2NmQxN2Y5YTUwMTQ1NWZhN2Y3MmVkNmU5MWI4NzQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kY2JiYTNhNDQwOTA0YTBkYmY4MzZkZjliNzkzN2UxYy5zZXRDb250ZW50KGh0bWxfNzY2ZDE3ZjlhNTAxNDU1ZmE3ZjcyZWQ2ZTkxYjg3NDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmY3ZTdkMjY2MDk4NGU0YmEzY2JiOWM0Y2YzMjNlNGIuYmluZFBvcHVwKHBvcHVwX2RjYmJhM2E0NDA5MDRhMGRiZjgzNmRmOWI3OTM3ZTFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5OWYyZjAyNDdiMTRjNGRhNjAyYmQ0ODExMGNhYzE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU1OTk3NzMzOTg1NiwtMTIyLjQwOTQzNTYxNzEwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2ZjhkYTFhNTRlMzQyODVhNTlhNGI0M2E4ZTZjOThjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VkYzI4MGU4ZmUyYjQ1MGFhYzVlMTkwYTYyZjAwMmZhID0gJCgnPGRpdiBpZD0iaHRtbF9lZGMyODBlOGZlMmI0NTBhYWM1ZTE5MGE2MmYwMDJmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2ZjhkYTFhNTRlMzQyODVhNTlhNGI0M2E4ZTZjOThjLnNldENvbnRlbnQoaHRtbF9lZGMyODBlOGZlMmI0NTBhYWM1ZTE5MGE2MmYwMDJmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOTlmMmYwMjQ3YjE0YzRkYTYwMmJkNDgxMTBjYWMxNC5iaW5kUG9wdXAocG9wdXBfNTZmOGRhMWE1NGUzNDI4NWE1OWE0YjQzYThlNmM5OGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmMzZDg3ZjkyMjFlNDdmZTg5MjhkYTA2ODYwNDZmYmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODcwNzk4MTQ0NDQzLC0xMjIuNDI1ODgzMzU4MTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc4YmYzY2Y5MzAwNDVhY2FiNWM4NWRhODU4MTNlMjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM0N2M4NmViNzg4NGRmM2IwYzBkNDJkNzdhOTMzYmEgPSAkKCc8ZGl2IGlkPSJodG1sXzljNDdjODZlYjc4ODRkZjNiMGMwZDQyZDc3YTkzM2JhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3OGJmM2NmOTMwMDQ1YWNhYjVjODVkYTg1ODEzZTIyLnNldENvbnRlbnQoaHRtbF85YzQ3Yzg2ZWI3ODg0ZGYzYjBjMGQ0MmQ3N2E5MzNiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YzNkODdmOTIyMWU0N2ZlODkyOGRhMDY4NjA0NmZiYS5iaW5kUG9wdXAocG9wdXBfNDc4YmYzY2Y5MzAwNDVhY2FiNWM4NWRhODU4MTNlMjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjZmNzA1Njk3OTE5NGQ1ZTkzMjQ5ZTg4Y2Y0MzYwYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzYwMzc0NDY2ODYyMDQsLTEyMi40MTUxMjY1NDMwMDEwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliYWE1N2Y2M2Y0MzRkMmFiMTBhNTVlYTJmMWJlZmQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5MWYwMWVhMjIwOTRmYjZhYmNkNjIxMjZjMGIyN2E0ID0gJCgnPGRpdiBpZD0iaHRtbF9lOTFmMDFlYTIyMDk0ZmI2YWJjZDYyMTI2YzBiMjdhNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YmFhNTdmNjNmNDM0ZDJhYjEwYTU1ZWEyZjFiZWZkNC5zZXRDb250ZW50KGh0bWxfZTkxZjAxZWEyMjA5NGZiNmFiY2Q2MjEyNmMwYjI3YTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjZmNzA1Njk3OTE5NGQ1ZTkzMjQ5ZTg4Y2Y0MzYwYzUuYmluZFBvcHVwKHBvcHVwXzliYWE1N2Y2M2Y0MzRkMmFiMTBhNTVlYTJmMWJlZmQ0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1MjYwNDc0M2MxNjQ2OTBiNDNkMTRlMmI4MTI3MTliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzEyNzY3ODg0ODIxLC0xMjIuNDMxOTI4MDExMDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWFiYzJmZDBhZTE2NGFkMWI1Y2VjNmQ4NmZiODUxNjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWFlYzFlM2IyMmQ3NGNjZTg1YjUzZDgxMjk5ZTUzOGMgPSAkKCc8ZGl2IGlkPSJodG1sXzVhZWMxZTNiMjJkNzRjY2U4NWI1M2Q4MTI5OWU1MzhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWFiYzJmZDBhZTE2NGFkMWI1Y2VjNmQ4NmZiODUxNjUuc2V0Q29udGVudChodG1sXzVhZWMxZTNiMjJkNzRjY2U4NWI1M2Q4MTI5OWU1MzhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q1MjYwNDc0M2MxNjQ2OTBiNDNkMTRlMmI4MTI3MTliLmJpbmRQb3B1cChwb3B1cF9lYWJjMmZkMGFlMTY0YWQxYjVjZWM2ZDg2ZmI4NTE2NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NjlkNDgwYThkZWQ0ZGUxYjA1YmEzMzU4YTFhNjM5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4OTU3MTAyNTU4NjMsLTEyMi40MDIxNjM3MTM2MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOTFkMWVlMzhjMjY0NWQ3YjM2NjQ3MmRhN2EzOTg5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83M2NiODFlZTJjNWM0MWVmYTI5NTI5ODU0MDAyZjNlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzNjYjgxZWUyYzVjNDFlZmEyOTUyOTg1NDAwMmYzZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRSVU5LRU5ORVNTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOTFkMWVlMzhjMjY0NWQ3YjM2NjQ3MmRhN2EzOTg5YS5zZXRDb250ZW50KGh0bWxfNzNjYjgxZWUyYzVjNDFlZmEyOTUyOTg1NDAwMmYzZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDY5ZDQ4MGE4ZGVkNGRlMWIwNWJhMzM1OGExYTYzOWIuYmluZFBvcHVwKHBvcHVwX2M5MWQxZWUzOGMyNjQ1ZDdiMzY2NDcyZGE3YTM5ODlhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4ZWZkNTk2ZGFhYjQ3Mzg4ZGQ0YzFjZWNkMmEzOTJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwNzQyOTE2OTU1OSwtMTIyLjQyOTMwNjcyODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxZDlhODhlM2IzYjQzNjg5ZWVjZWRlMGIzMWIwOTU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiMjNjOTE0NTYzNzQ2NGM5ODEwMTUyZWYwMjg5MGE5ID0gJCgnPGRpdiBpZD0iaHRtbF8zYjIzYzkxNDU2Mzc0NjRjOTgxMDE1MmVmMDI4OTBhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxZDlhODhlM2IzYjQzNjg5ZWVjZWRlMGIzMWIwOTU5LnNldENvbnRlbnQoaHRtbF8zYjIzYzkxNDU2Mzc0NjRjOTgxMDE1MmVmMDI4OTBhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OGVmZDU5NmRhYWI0NzM4OGRkNGMxY2VjZDJhMzkyYi5iaW5kUG9wdXAocG9wdXBfYzFkOWE4OGUzYjNiNDM2ODllZWNlZGUwYjMxYjA5NTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjFiMjI4MDMxNDU1NDBkMGJhZjUyY2FmZGIyMThkZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM4MzY1NTY1MzQ3OTQsLTEyMi40MTM3OTA5NzI3ODA5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3ZTAwZjdkMWY4NTRkNzFiZDkzYWM3MGQxMjhlMWI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4YmMyMjgwYWIyNzQ2YjJhZGJiOTU1NTI3NmRhNWY5ID0gJCgnPGRpdiBpZD0iaHRtbF80OGJjMjI4MGFiMjc0NmIyYWRiYjk1NTUyNzZkYTVmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkFOREFMSVNNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kN2UwMGY3ZDFmODU0ZDcxYmQ5M2FjNzBkMTI4ZTFiNi5zZXRDb250ZW50KGh0bWxfNDhiYzIyODBhYjI3NDZiMmFkYmI5NTU1Mjc2ZGE1ZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjFiMjI4MDMxNDU1NDBkMGJhZjUyY2FmZGIyMThkZDguYmluZFBvcHVwKHBvcHVwX2Q3ZTAwZjdkMWY4NTRkNzFiZDkzYWM3MGQxMjhlMWI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4YmRiMzg3OGUyNDQ5YzBhODhiZjg1NmMzMzg3MDEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzMwNzQyOTE2OTU1OSwtMTIyLjQyOTMwNjcyODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiZTdiODlhYTQ0ZjRjNmNiYjg1MmFlNmZmNGJjMWRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhNjdlOWJlYjI1YjQwZjY5ODdhZDNhNTc3MzIyNTk5ID0gJCgnPGRpdiBpZD0iaHRtbF80YTY3ZTliZWIyNWI0MGY2OTg3YWQzYTU3NzMyMjU5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiZTdiODlhYTQ0ZjRjNmNiYjg1MmFlNmZmNGJjMWRhLnNldENvbnRlbnQoaHRtbF80YTY3ZTliZWIyNWI0MGY2OTg3YWQzYTU3NzMyMjU5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OGJkYjM4NzhlMjQ0OWMwYTg4YmY4NTZjMzM4NzAxMy5iaW5kUG9wdXAocG9wdXBfZmJlN2I4OWFhNDRmNGM2Y2JiODUyYWU2ZmY0YmMxZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTk0MjVkM2JlNDk1NDI4NWExZmM2NDJkZjE4MTIxYWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MzczNjIzNjA1MjEyOTYsLTEyMi40MjIwNjcxODQ5MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNGNlZTkyMTkyMTc0ZWFkOTI4MDkxODYzYjViMjNhNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTI3ZTc0MjU5MmY0YTc2ODNiMjE1ZDljYTIyZTJjZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNmEyN2U3NDI1OTJmNGE3NjgzYjIxNWQ5Y2EyMmUyY2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNFQ09OREFSWSBDT0RFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjRjZWU5MjE5MjE3NGVhZDkyODA5MTg2M2I1YjIzYTUuc2V0Q29udGVudChodG1sXzZhMjdlNzQyNTkyZjRhNzY4M2IyMTVkOWNhMjJlMmNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U5NDI1ZDNiZTQ5NTQyODVhMWZjNjQyZGYxODEyMWFiLmJpbmRQb3B1cChwb3B1cF9iNGNlZTkyMTkyMTc0ZWFkOTI4MDkxODYzYjViMjNhNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmI2M2U4N2NhZjg0MWU2OTBhMGQwYmMyMWEwMTVlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNzM2MjM2MDUyMTI5NiwtMTIyLjQyMjA2NzE4NDkzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjYjlmMjg4M2M4YzQxNTNiYTY1ZWRlNzIyYjZkOTQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyM2UxYWM3ZDA1OTRlOTg4MjU0OWIzYjZkYmEwODRmID0gJCgnPGRpdiBpZD0iaHRtbF8zMjNlMWFjN2QwNTk0ZTk4ODI1NDliM2I2ZGJhMDg0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkFOREFMSVNNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mY2I5ZjI4ODNjOGM0MTUzYmE2NWVkZTcyMmI2ZDk0OC5zZXRDb250ZW50KGh0bWxfMzIzZTFhYzdkMDU5NGU5ODgyNTQ5YjNiNmRiYTA4NGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWZiNjNlODdjYWY4NDFlNjkwYTBkMGJjMjFhMDE1ZTYuYmluZFBvcHVwKHBvcHVwX2ZjYjlmMjg4M2M4YzQxNTNiYTY1ZWRlNzIyYjZkOTQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3Yzg0NGQ0MzRkZTQ4MDhiN2NhY2ViM2FlNzE3OTA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzg1OTk4ODMyMzc5Nzk2LC0xMjIuNDExNzQ3MzcxOTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWMwNzYxNGJkNWUyNDFmNGJhMDc0Yjk4ZDY1YjM0NzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTlhNjZmMDE0NjYzNGI5MGJlNmFiMDgyZjRmYzE3ZjEgPSAkKCc8ZGl2IGlkPSJodG1sXzU5YTY2ZjAxNDY2MzRiOTBiZTZhYjA4MmY0ZmMxN2YxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TVVNQSUNJT1VTIE9DQzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWMwNzYxNGJkNWUyNDFmNGJhMDc0Yjk4ZDY1YjM0NzMuc2V0Q29udGVudChodG1sXzU5YTY2ZjAxNDY2MzRiOTBiZTZhYjA4MmY0ZmMxN2YxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM3Yzg0NGQ0MzRkZTQ4MDhiN2NhY2ViM2FlNzE3OTA2LmJpbmRQb3B1cChwb3B1cF9lYzA3NjE0YmQ1ZTI0MWY0YmEwNzRiOThkNjViMzQ3Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMTQ1MWY1NTRkOTE0YzQ4OTVhMTQ1ZmZkNTFhNmYwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2MzM3NTgwNTgwNTksLTEyMi40MjA0MzQ3MjQ1NTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhhYWM5OGVmNzk1ZjQ4NGJhNjkyMTAwNjUwZDYzMjY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxNmRmOWNhOTk0ZDQ5ZmE4MWVlMDQyNWJiMDU4ZmUzID0gJCgnPGRpdiBpZD0iaHRtbF81MTZkZjljYTk5NGQ0OWZhODFlZTA0MjViYjA1OGZlMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhYWM5OGVmNzk1ZjQ4NGJhNjkyMTAwNjUwZDYzMjY5LnNldENvbnRlbnQoaHRtbF81MTZkZjljYTk5NGQ0OWZhODFlZTA0MjViYjA1OGZlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMTQ1MWY1NTRkOTE0YzQ4OTVhMTQ1ZmZkNTFhNmYwMS5iaW5kUG9wdXAocG9wdXBfOGFhYzk4ZWY3OTVmNDg0YmE2OTIxMDA2NTBkNjMyNjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzFmNmIwOTVjM2UwNDczOGI5MzVkOTU1MTE4NWIzMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODUwMjI2NjIyNzg2LC0xMjIuNDExOTg3NjQzNTk1MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAieWVsbG93IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC42LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xM2RiYmU4OTRhMGE0NzRjOTgyYTc2OTRiMjBmOWQyOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZTdiMDliMGZmNGM0OTQ1YWE2YjRhOGExNDlhNTFhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjc2OTY5ZTAyZDE0YTVjYTMzZjk2NGNmNTEzMGVlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGY3Njk2OWUwMmQxNGE1Y2EzM2Y5NjRjZjUxMzBlZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2U3YjA5YjBmZjRjNDk0NWFhNmI0YThhMTQ5YTUxYTkuc2V0Q29udGVudChodG1sX2RmNzY5NjllMDJkMTRhNWNhMzNmOTY0Y2Y1MTMwZWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcxZjZiMDk1YzNlMDQ3MzhiOTM1ZDk1NTExODViMzI5LmJpbmRQb3B1cChwb3B1cF8zZTdiMDliMGZmNGM0OTQ1YWE2YjRhOGExNDlhNTFhOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTVmYzViOGQ5YTg0NmQ4Yjk4Njk4NjJhYzhhODczYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NDYyMDY0OTEwNjQ5NSwtMTIyLjUwMDM4MDQyNzkxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1ZjllZGExYWI5NTRmMDA5YWI5NmQ5NDJmMmE2ZWYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxNmNlNThlODE3ZDRjZGZiYWE1M2E2MzM3NzZlMTkzID0gJCgnPGRpdiBpZD0iaHRtbF9kMTZjZTU4ZTgxN2Q0Y2RmYmFhNTNhNjMzNzc2ZTE5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1ZjllZGExYWI5NTRmMDA5YWI5NmQ5NDJmMmE2ZWYwLnNldENvbnRlbnQoaHRtbF9kMTZjZTU4ZTgxN2Q0Y2RmYmFhNTNhNjMzNzc2ZTE5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MTVmYzViOGQ5YTg0NmQ4Yjk4Njk4NjJhYzhhODczYS5iaW5kUG9wdXAocG9wdXBfMzVmOWVkYTFhYjk1NGYwMDlhYjk2ZDk0MmYyYTZlZjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWUyYmNkN2VmMGMwNDJlMWJkMmQyNzViMGNmNzZhYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzUxOTE4MjY3MjE3LC0xMjIuNDY2NTU4NzgwNjgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2MxNzEzOTYzOWE4NGRmNTkxNzBlYzI2MDA4NWZjYmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI4ZmFkNmYzYzE5NDU5YTk2MmNiZTdjY2RiMDhkMTggPSAkKCc8ZGl2IGlkPSJodG1sXzRiOGZhZDZmM2MxOTQ1OWE5NjJjYmU3Y2NkYjA4ZDE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ST0JCRVJZPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzE3MTM5NjM5YTg0ZGY1OTE3MGVjMjYwMDg1ZmNiZC5zZXRDb250ZW50KGh0bWxfNGI4ZmFkNmYzYzE5NDU5YTk2MmNiZTdjY2RiMDhkMTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWUyYmNkN2VmMGMwNDJlMWJkMmQyNzViMGNmNzZhYzIuYmluZFBvcHVwKHBvcHVwXzNjMTcxMzk2MzlhODRkZjU5MTcwZWMyNjAwODVmY2JkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiOWNlOGUyNmI1MTQyMzRhODY2NTMwOTVkNTFlOWJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQ5MDg0MTcyOTAyOCwtMTIyLjQ4NjkyNTk2MDExNDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQ3MjdhZWYwZjczNGU5NjhjMTZiMmMzNWQxYzdmMzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzUyMTI0YzRjYzMyNDBkMjk4MDhkNzc1NDdhMDAzZjYgPSAkKCc8ZGl2IGlkPSJodG1sXzM1MjEyNGM0Y2MzMjQwZDI5ODA4ZDc3NTQ3YTAwM2Y2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ3MjdhZWYwZjczNGU5NjhjMTZiMmMzNWQxYzdmMzEuc2V0Q29udGVudChodG1sXzM1MjEyNGM0Y2MzMjQwZDI5ODA4ZDc3NTQ3YTAwM2Y2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiOWNlOGUyNmI1MTQyMzRhODY2NTMwOTVkNTFlOWJjLmJpbmRQb3B1cChwb3B1cF83NDcyN2FlZjBmNzM0ZTk2OGMxNmIyYzM1ZDFjN2YzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjE0YzA4NzFiMWI0ZmQ4ODQyOWMwNjRhY2U3MjNjMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2ODUzNjAxMjM1ODMsLTEyMi40MTU2MTYzMzgzMTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2MWI2MTlmM2NkZjQyZGVhZGMyNjAwMGRlN2Q1YzEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiMGNlNmNhOTczODRiZjY5NTk5OTZkYjc4Zjc4ZGM3ID0gJCgnPGRpdiBpZD0iaHRtbF8zYjBjZTZjYTk3Mzg0YmY2OTU5OTk2ZGI3OGY3OGRjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NjFiNjE5ZjNjZGY0MmRlYWRjMjYwMDBkZTdkNWMxMi5zZXRDb250ZW50KGh0bWxfM2IwY2U2Y2E5NzM4NGJmNjk1OTk5NmRiNzhmNzhkYzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWIxNGMwODcxYjFiNGZkODg0MjljMDY0YWNlNzIzYzEuYmluZFBvcHVwKHBvcHVwXzU2MWI2MTlmM2NkZjQyZGVhZGMyNjAwMGRlN2Q1YzEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkOGYxYjUyMmU0ZjRiMWRiNTc5ZWJmZDViNjM0MzZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY0NDI5NzcxNDA3NCwtMTIyLjQ0OTc1MTY1MjU2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJ5ZWxsb3ciLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjYsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEzZGJiZTg5NGEwYTQ3NGM5ODJhNzY5NGIyMGY5ZDI5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhZTY5MGU3Y2E1YjRjNTRhNTMyNDA0YzIzZDM4ZGRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzMTI2OGM5ZDk4MDQ1YWU4MjNmZGEyYWJkMDk3MGNlID0gJCgnPGRpdiBpZD0iaHRtbF8zMzEyNjhjOWQ5ODA0NWFlODIzZmRhMmFiZDA5NzBjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSR0xBUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhZTY5MGU3Y2E1YjRjNTRhNTMyNDA0YzIzZDM4ZGRhLnNldENvbnRlbnQoaHRtbF8zMzEyNjhjOWQ5ODA0NWFlODIzZmRhMmFiZDA5NzBjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZDhmMWI1MjJlNGY0YjFkYjU3OWViZmQ1YjYzNDM2Zi5iaW5kUG9wdXAocG9wdXBfYWFlNjkwZTdjYTViNGM1NGE1MzI0MDRjMjNkMzhkZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzNkZDBlODkzMWU0NGVkMDgxZmUwYzdjNzVjMDQyNjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ0Mjk3NzE0MDc0LC0xMjIuNDQ5NzUxNjUyNTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjlmYmM1NTgwMzg4NDM2OGI1N2QyOTI4NjJiMmJiNWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE1NWU1MmI4OGZlNGExMzk2YzFkYmQ2OGJiOTIwYWYgPSAkKCc8ZGl2IGlkPSJodG1sXzRhNTVlNTJiODhmZTRhMTM5NmMxZGJkNjhiYjkyMGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOWZiYzU1ODAzODg0MzY4YjU3ZDI5Mjg2MmIyYmI1Zi5zZXRDb250ZW50KGh0bWxfNGE1NWU1MmI4OGZlNGExMzk2YzFkYmQ2OGJiOTIwYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzNkZDBlODkzMWU0NGVkMDgxZmUwYzdjNzVjMDQyNjQuYmluZFBvcHVwKHBvcHVwX2I5ZmJjNTU4MDM4ODQzNjhiNTdkMjkyODYyYjJiYjVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcyNTBkNWVmZTE1YzRmZWQ4NjE2MDFjNTA4NDkyNzQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzM1MjY4MTQ2OTA4Mzk2LC0xMjIuNDcyNzE1NzU5NjMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInllbGxvdyIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNkYmJlODk0YTBhNDc0Yzk4MmE3Njk0YjIwZjlkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2RlMjRjZGY3ODkyNDg1NWE3ZjZkNTNjZTdlYjc4MWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTA5Nzk0OTFkM2U2NDI5MzhmNjZiMTg4ZWNmODYxOTkgPSAkKCc8ZGl2IGlkPSJodG1sXzUwOTc5NDkxZDNlNjQyOTM4ZjY2YjE4OGVjZjg2MTk5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZGUyNGNkZjc4OTI0ODU1YTdmNmQ1M2NlN2ViNzgxYy5zZXRDb250ZW50KGh0bWxfNTA5Nzk0OTFkM2U2NDI5MzhmNjZiMTg4ZWNmODYxOTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzI1MGQ1ZWZlMTVjNGZlZDg2MTYwMWM1MDg0OTI3NDcuYmluZFBvcHVwKHBvcHVwXzNkZTI0Y2RmNzg5MjQ4NTVhN2Y2ZDUzY2U3ZWI3ODFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>" | |
], | |
"text/plain": [ | |
"<folium.folium.Map at 0x7f3b0e2bceb8>" | |
] | |
}, | |
"execution_count": 26, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# create map and display it\n", | |
"sanfran_map = folium.Map(location=[latitude, longitude], zoom_start=12)\n", | |
"\n", | |
"# loop through the 100 crimes and add each to the map\n", | |
"for lat, lng, label in zip(df_incidents.Y, df_incidents.X, df_incidents.Category):\n", | |
" folium.features.CircleMarker(\n", | |
" [lat, lng],\n", | |
" radius=5, # define how big you want the circle markers to be\n", | |
" color='yellow',\n", | |
" fill=True,\n", | |
" popup=label,\n", | |
" fill_color='blue',\n", | |
" fill_opacity=0.6\n", | |
" ).add_to(sanfran_map)\n", | |
"\n", | |
"# show map\n", | |
"sanfran_map" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"button": false, | |
"deletable": true, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"source": [ | |
"The other proper remedy is to group the markers into different clusters. Each cluster is then represented by the number of crimes in each neighborhood. These clusters can be thought of as pockets of San Francisco which you can then analyze separately.\n", | |
"\n", | |
"To implement this, we start off by instantiating a *MarkerCluster* object and adding all the data points in the dataframe to this object." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": { | |
"button": false, | |
"collapsed": false, | |
"deletable": true, | |
"editable": true, | |
"jupyter": { | |
"outputs_hidden": false | |
}, | |
"new_sheet": false, | |
"run_control": { | |
"read_only": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfNGIyNzM0MWUzMzQ0NDQwNmI0NjYwNzE0OTUxMzg4MGUgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQubWFya2VyY2x1c3Rlci8xLjEuMC9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMS4xLjAvTWFya2VyQ2x1c3Rlci5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzEuMS4wL01hcmtlckNsdXN0ZXIuRGVmYXVsdC5jc3MiLz4KPC9oZWFkPgo8Ym9keT4gICAgCiAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF80YjI3MzQxZTMzNDQ0NDA2YjQ2NjA3MTQ5NTEzODgwZSIgPjwvZGl2PgogICAgICAgIAo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXBfNGIyNzM0MWUzMzQ0NDQwNmI0NjYwNzE0OTUxMzg4MGUgPSBMLm1hcCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXBfNGIyNzM0MWUzMzQ0NDQwNmI0NjYwNzE0OTUxMzg4MGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NlbnRlcjogWzM3Ljc3LC0xMjIuNDJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyX2Q2OGJmMjFlZDgxMTRhN2Q4M2M1MTcyNzE4MzNjNDMzID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICJtYXhab29tIjogMTgsCiAgIm1pblpvb20iOiAxLAogICJub1dyYXAiOiBmYWxzZSwKICAic3ViZG9tYWlucyI6ICJhYmMiCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzRiMjczNDFlMzM0NDQ0MDZiNDY2MDcxNDk1MTM4ODBlKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIgPSBMLm1hcmtlckNsdXN0ZXJHcm91cCh7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIG1hcF80YjI3MzQxZTMzNDQ0NDA2YjQ2NjA3MTQ5NTEzODgwZS5hZGRMYXllcihtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M1MDZmYmM2OTkwZTQ3NGQ4ZDFhODExYmU5MzYzZWZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc1NDIwNzA2NzExLC0xMjIuNDAzNDA0NzkxNDc4OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1YmYxYTQ3MDY3MzQ5MTA4YTgyMzNhYzczMmI5MDgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3MTVlZjE1MTk0ODRlNjY5YmZlNDUzZmE4ZjZkNWZhID0gJCgnPGRpdiBpZD0iaHRtbF82NzE1ZWYxNTE5NDg0ZTY2OWJmZTQ1M2ZhOGY2ZDVmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V0VBUE9OIExBV1M8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1YmYxYTQ3MDY3MzQ5MTA4YTgyMzNhYzczMmI5MDgzLnNldENvbnRlbnQoaHRtbF82NzE1ZWYxNTE5NDg0ZTY2OWJmZTQ1M2ZhOGY2ZDVmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M1MDZmYmM2OTkwZTQ3NGQ4ZDFhODExYmU5MzYzZWZlLmJpbmRQb3B1cChwb3B1cF9kNWJmMWE0NzA2NzM0OTEwOGE4MjMzYWM3MzJiOTA4Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOGNkYjlhZTQ1Nzg0ZWY3YTQwNTE0YTM0YzZkY2NlNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQyMDcwNjcxMSwtMTIyLjQwMzQwNDc5MTQ3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWVmNTAzYWQwODg0MDU4YmQ5MDcxNDA1N2M5MmRmMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NjgwZGViZTI5ZjM0MjFiYWRiMWFlM2ZiNDQyZmM4MSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTY4MGRlYmUyOWYzNDIxYmFkYjFhZTNmYjQ0MmZjODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldFQVBPTiBMQVdTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWVmNTAzYWQwODg0MDU4YmQ5MDcxNDA1N2M5MmRmMy5zZXRDb250ZW50KGh0bWxfOTY4MGRlYmUyOWYzNDIxYmFkYjFhZTNmYjQ0MmZjODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wOGNkYjlhZTQ1Nzg0ZWY3YTQwNTE0YTM0YzZkY2NlNi5iaW5kUG9wdXAocG9wdXBfZmFlZjUwM2FkMDg4NDA1OGJkOTA3MTQwNTdjOTJkZjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzdhNDE2NDA0NjRlNDZlNDhlYjg3NWU3YzY5YmMzZDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjk5ODA5NjcyOTk1OTYsLTEyMi4zODg4NTYyMDQyOTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2MmJjMzgwNDM3OTRlNmRiZjk3NTI2NjZhMjNjZmMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkODM4MjZkZmY4ZTRjYjc4MWM3ZjNjM2Q2ZTIyNDIwID0gJCgnPGRpdiBpZD0iaHRtbF81ZDgzODI2ZGZmOGU0Y2I3ODFjN2YzYzNkNmUyMjQyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V0FSUkFOVFM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2MmJjMzgwNDM3OTRlNmRiZjk3NTI2NjZhMjNjZmMwLnNldENvbnRlbnQoaHRtbF81ZDgzODI2ZGZmOGU0Y2I3ODFjN2YzYzNkNmUyMjQyMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc3YTQxNjQwNDY0ZTQ2ZTQ4ZWI4NzVlN2M2OWJjM2QzLmJpbmRQb3B1cChwb3B1cF83NjJiYzM4MDQzNzk0ZTZkYmY5NzUyNjY2YTIzY2ZjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYzczOGRjYmRkMTA0MThiODQ5MmEzMGIxNDliMjMzMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NTc4ODM3NjY4ODc5LC0xMjIuNDEyOTcwNTM3NTkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjhhMTQwMGJkZTA0OGYwODUwZjQyNTQ5ZTlkNTA2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMWFmMTk0MGM4ZTg0NWExOGQ3OTcxZjkyNGVkZDUxZSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjFhZjE5NDBjOGU4NDVhMThkNzk3MWY5MjRlZGQ1MWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWI4YTE0MDBiZGUwNDhmMDg1MGY0MjU0OWU5ZDUwNjUuc2V0Q29udGVudChodG1sX2IxYWYxOTQwYzhlODQ1YTE4ZDc5NzFmOTI0ZWRkNTFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2M3MzhkY2JkZDEwNDE4Yjg0OTJhMzBiMTQ5YjIzMzEuYmluZFBvcHVwKHBvcHVwXzViOGExNDAwYmRlMDQ4ZjA4NTBmNDI1NDllOWQ1MDY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNhYmZmZWE1NGQ4NzRmMWQ5NDI1NzFlY2M1ZDljNTMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY1MDUwMTIxNDY2OCwtMTIyLjQxOTY3MTc4MDI5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzYxOTRkODAzM2JiNDFkZThhODUwZGRmYmM2ZDA0YzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzYxM2ZmNDFkOTY0NDU4ZjhmMzNjNWZmN2JiNzU4NDggPSAkKCc8ZGl2IGlkPSJodG1sXzc2MTNmZjQxZDk2NDQ1OGY4ZjMzYzVmZjdiYjc1ODQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2MTk0ZDgwMzNiYjQxZGU4YTg1MGRkZmJjNmQwNGMxLnNldENvbnRlbnQoaHRtbF83NjEzZmY0MWQ5NjQ0NThmOGYzM2M1ZmY3YmI3NTg0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNhYmZmZWE1NGQ4NzRmMWQ5NDI1NzFlY2M1ZDljNTMyLmJpbmRQb3B1cChwb3B1cF8zNjE5NGQ4MDMzYmI0MWRlOGE4NTBkZGZiYzZkMDRjMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZmRkZDU0YzM2NjY0MzVlYTM2YTI5YmViZTlhZjRlMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4ODAxODU1NTgyOSwtMTIyLjQyNjA3NzE3NzM3NDk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MTY1NDI1ZjdiMTE0YmJiOGZmM2ZjOTlkYzE1M2UyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTlkY2M5YTlkYjQ0MDBmODRkYzAwZWZjNTE0NTE4NiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGE5ZGNjOWE5ZGI0NDAwZjg0ZGMwMGVmYzUxNDUxODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxNjU0MjVmN2IxMTRiYmI4ZmYzZmM5OWRjMTUzZTJmLnNldENvbnRlbnQoaHRtbF84YTlkY2M5YTlkYjQ0MDBmODRkYzAwZWZjNTE0NTE4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JmZGRkNTRjMzY2NjQzNWVhMzZhMjliZWJlOWFmNGUzLmJpbmRQb3B1cChwb3B1cF80MTY1NDI1ZjdiMTE0YmJiOGZmM2ZjOTlkYzE1M2UyZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMjM1NTM1MjhjOGE0Y2NmYWMyZWFkOWFkMDFhNjMyYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MDg3ODkzNjAyMTQsLTEyMi40MDU3MjE0NTQ1NjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4ZDk3ZmYxYTlmMTQwNTI4ZTA3NDIxNzU2ZDBhNmZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmM2VjYzk4Mjc5NDQxNTFiZmEwMzVhNjczZjU1YTdmID0gJCgnPGRpdiBpZD0iaHRtbF8yZjNlY2M5ODI3OTQ0MTUxYmZhMDM1YTY3M2Y1NWE3ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4ZDk3ZmYxYTlmMTQwNTI4ZTA3NDIxNzU2ZDBhNmZlLnNldENvbnRlbnQoaHRtbF8yZjNlY2M5ODI3OTQ0MTUxYmZhMDM1YTY3M2Y1NWE3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YyMzU1MzUyOGM4YTRjY2ZhYzJlYWQ5YWQwMWE2MzJhLmJpbmRQb3B1cChwb3B1cF9iOGQ5N2ZmMWE5ZjE0MDUyOGUwNzQyMTc1NmQwYTZmZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mMGEzNTViZjZkNjk0MWY5OTQ0NzVmY2E2YTNkZWEwYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4Mzk4MDU1OTI2MzQsLTEyMi40MTE3NzgyOTU5OTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwZjE0MGQ2N2RhYzQ5NTZiODY4YWZiMjI4ZjViYmQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjZTYwNGYzZWVhMTQ0YzliYzZiNGEzYTNjOGIzMGZmID0gJCgnPGRpdiBpZD0iaHRtbF8xY2U2MDRmM2VlYTE0NGM5YmM2YjRhM2EzYzhiMzBmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MGYxNDBkNjdkYWM0OTU2Yjg2OGFmYjIyOGY1YmJkNy5zZXRDb250ZW50KGh0bWxfMWNlNjA0ZjNlZWExNDRjOWJjNmI0YTNhM2M4YjMwZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMGEzNTViZjZkNjk0MWY5OTQ0NzVmY2E2YTNkZWEwYi5iaW5kUG9wdXAocG9wdXBfOTBmMTQwZDY3ZGFjNDk1NmI4NjhhZmIyMjhmNWJiZDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTdmZmJhN2MwMDIwNDNiZWI1NzVjNDI2NDEyNDRhYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzU3ODc2MjE4MjkyOTUsLTEyMi4zOTMzNTcyNDE0NTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0ZDg3ZTM1YmZjNzRmMDE4MjUxZTkyOWJmNmI0ZDgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiYTMxZjc2NjJmMzQ0MjU4YmQxZmM0OWEzYmYwNjQ4ID0gJCgnPGRpdiBpZD0iaHRtbF9hYmEzMWY3NjYyZjM0NDI1OGJkMWZjNDlhM2JmMDY0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V0FSUkFOVFM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ0ZDg3ZTM1YmZjNzRmMDE4MjUxZTkyOWJmNmI0ZDgzLnNldENvbnRlbnQoaHRtbF9hYmEzMWY3NjYyZjM0NDI1OGJkMWZjNDlhM2JmMDY0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk3ZmZiYTdjMDAyMDQzYmViNTc1YzQyNjQxMjQ0YWFiLmJpbmRQb3B1cChwb3B1cF80NGQ4N2UzNWJmYzc0ZjAxODI1MWU5MjliZjZiNGQ4Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wODVjYzJmMmUxY2I0ODkwYTlkYzhmZWZkZGUwMGY2ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcyMDk2Njk2MTU0OTksLTEyMi4zODcxODE2MzU5OTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4NzYzNTRlYzUyODRkNmVhZjg1ODZkNDlkNjIxYTRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxMDFjMDkyZmY0YjQxOGU4YjNmYjJiN2QwNzQ1ZjI4ID0gJCgnPGRpdiBpZD0iaHRtbF82MTAxYzA5MmZmNGI0MThlOGIzZmIyYjdkMDc0NWYyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TUlTU0lORyBQRVJTT048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NzYzNTRlYzUyODRkNmVhZjg1ODZkNDlkNjIxYTRiLnNldENvbnRlbnQoaHRtbF82MTAxYzA5MmZmNGI0MThlOGIzZmIyYjdkMDc0NWYyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA4NWNjMmYyZTFjYjQ4OTBhOWRjOGZlZmRkZTAwZjZlLmJpbmRQb3B1cChwb3B1cF83ODc2MzU0ZWM1Mjg0ZDZlYWY4NTg2ZDQ5ZDYyMWE0Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYjllZmFlMjlmZDg0OGVkYWFjYTUxOGJiMjJjYzllOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc2NDQ3ODE1Nzg2OTUwNSwtMTIyLjQ3NzM3NjUyNDAwMjk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjQ1Y2E2Y2IxODY0YmFlYWNkMzg5ZDBjMzg3NDViMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTRlMjE4OTVmM2I0YTBhODliNDg1Zjk4ZDc1OGU0YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWE0ZTIxODk1ZjNiNGEwYTg5YjQ4NWY5OGQ3NThlNGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBUkNFTlkvVEhFRlQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyNDVjYTZjYjE4NjRiYWVhY2QzODlkMGMzODc0NWIwLnNldENvbnRlbnQoaHRtbF8xYTRlMjE4OTVmM2I0YTBhODliNDg1Zjk4ZDc1OGU0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JiOWVmYWUyOWZkODQ4ZWRhYWNhNTE4YmIyMmNjOWU4LmJpbmRQb3B1cChwb3B1cF81MjQ1Y2E2Y2IxODY0YmFlYWNkMzg5ZDBjMzg3NDViMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNmU5ZGY3NDFiNjc0ZTNlOGQ1YThhMmZjNjA0NDkxOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NTczODk0Mjk2NTQ5NSwtMTIyLjQ3Nzk2MDMyNzI5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDAwNGVmZmE2NjU4NGFmY2FiYjBkMzI4ZTFkYjZjYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDc0MTI2OGE4M2Q2NDY2ZTgwNTBkODNhZTE5ZmRlN2EgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3NDEyNjhhODNkNjQ2NmU4MDUwZDgzYWUxOWZkZTdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMDRlZmZhNjY1ODRhZmNhYmIwZDMyOGUxZGI2Y2ExLnNldENvbnRlbnQoaHRtbF80NzQxMjY4YTgzZDY0NjZlODA1MGQ4M2FlMTlmZGU3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2ZTlkZjc0MWI2NzRlM2U4ZDVhOGEyZmM2MDQ0OTE4LmJpbmRQb3B1cChwb3B1cF8wMDA0ZWZmYTY2NTg0YWZjYWJiMGQzMjhlMWRiNmNhMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMGE1NzFlYjE5MTQ0MGRiYTYyN2EwMGI0YWZhNWFmNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjczNTY5NzAyNzU0ODIwNiwtMTIyLjM3Njc1NzY1NTUzMDAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MDFmMWY3ZWJkNmI0OTU0OWQ0MThlNjhlMzM5ZGQ4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZTNjNmM5MTIyYmQ0NGIwYTU0MmM2N2I5MGNhZWUxNyA9ICQoJzxkaXYgaWQ9Imh0bWxfOWUzYzZjOTEyMmJkNDRiMGE1NDJjNjdiOTBjYWVlMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MDFmMWY3ZWJkNmI0OTU0OWQ0MThlNjhlMzM5ZGQ4Ni5zZXRDb250ZW50KGh0bWxfOWUzYzZjOTEyMmJkNDRiMGE1NDJjNjdiOTBjYWVlMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMGE1NzFlYjE5MTQ0MGRiYTYyN2EwMGI0YWZhNWFmNS5iaW5kUG9wdXAocG9wdXBfNjAxZjFmN2ViZDZiNDk1NDlkNDE4ZTY4ZTMzOWRkODYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjllOWU2MGNmZGVkNDMzYWEyNTgzODI5MGIzMGFjODYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjkyNzA1MTk5NTkyLC0xMjIuNDMyMzI1ODcxMDI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODhlZTljMzA5ZDU0NjQ3YTQ5NWNlYjBhNjgzNjU0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZTgwMjNlMDgxYzM0NjZlOGQzOWIzZGFlYjBkNzBmZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNGU4MDIzZTA4MWMzNDY2ZThkMzliM2RhZWIwZDcwZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4OGVlOWMzMDlkNTQ2NDdhNDk1Y2ViMGE2ODM2NTRlLnNldENvbnRlbnQoaHRtbF80ZTgwMjNlMDgxYzM0NjZlOGQzOWIzZGFlYjBkNzBmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y5ZTllNjBjZmRlZDQzM2FhMjU4MzgyOTBiMzBhYzg2LmJpbmRQb3B1cChwb3B1cF85ODhlZTljMzA5ZDU0NjQ3YTQ5NWNlYjBhNjgzNjU0ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zOWZjZTcyOTZlN2Y0YzJkOGQ0N2Y2NDY3YWQ5ZDMyZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5MTY0Mjk4MjM4NCwtMTIyLjQwMDkwODY5ODg4OTk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjlmNTllZmJlYmQ0MjlmYmNmMzVmYjUyNDQ3MmYxYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjcxMjI0ZGQyNTE0MmQzYWU3ZDE2NjM5MmJkMDM2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTI3MTIyNGRkMjUxNDJkM2FlN2QxNjYzOTJiZDAzNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVUkdMQVJZPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjlmNTllZmJlYmQ0MjlmYmNmMzVmYjUyNDQ3MmYxYi5zZXRDb250ZW50KGh0bWxfNTI3MTIyNGRkMjUxNDJkM2FlN2QxNjYzOTJiZDAzNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOWZjZTcyOTZlN2Y0YzJkOGQ0N2Y2NDY3YWQ5ZDMyZC5iaW5kUG9wdXAocG9wdXBfYjI5ZjU5ZWZiZWJkNDI5ZmJjZjM1ZmI1MjQ0NzJmMWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjM3ZTZhMzczYzRmNDZlOGIyODAzZGU5YWE5MDI0OTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODM3MDY5MzAxNTQ1LC0xMjIuNDA4NTk1MTEwODY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yY2Q3OGZlZTM2NGU0ZDQ4YjFlNDUyODk3YmQ0ZGRjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDUxYWQ4MjBiYzU0YTlhOTFjNTg2Yzc3MmZlMDIxMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTA1MWFkODIwYmM1NGE5YTkxYzU4NmM3NzJmZTAyMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNUT0xFTiBQUk9QRVJUWTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmNkNzhmZWUzNjRlNGQ0OGIxZTQ1Mjg5N2JkNGRkYzUuc2V0Q29udGVudChodG1sXzEwNTFhZDgyMGJjNTRhOWE5MWM1ODZjNzcyZmUwMjEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjM3ZTZhMzczYzRmNDZlOGIyODAzZGU5YWE5MDI0OTYuYmluZFBvcHVwKHBvcHVwXzJjZDc4ZmVlMzY0ZTRkNDhiMWU0NTI4OTdiZDRkZGM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E4ZWM0Yzg0N2VhZTRhOWRhOTllNTgyNTQ1OGI4MjY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzU3Mjg5NTkwNDU3Nzk1LC0xMjIuNDA2ODcwNDAyMDgyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZWNmYWFkMTg3NjM0YmQ5YTkyZmRlNDk3N2RiNzc1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjZhZTE1M2FjZjA0MTQwYWY3MWRkOTRkOWY3MWJiNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTY2YWUxNTNhY2YwNDE0MGFmNzFkZDk0ZDlmNzFiYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJPQkJFUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllY2ZhYWQxODc2MzRiZDlhOTJmZGU0OTc3ZGI3NzU0LnNldENvbnRlbnQoaHRtbF9hNjZhZTE1M2FjZjA0MTQwYWY3MWRkOTRkOWY3MWJiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E4ZWM0Yzg0N2VhZTRhOWRhOTllNTgyNTQ1OGI4MjY2LmJpbmRQb3B1cChwb3B1cF85ZWNmYWFkMTg3NjM0YmQ5YTkyZmRlNDk3N2RiNzc1NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYTc1YjVhYmQxOWI0Y2I3OTUyOWMzMzdhZTMyMzZjZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0ODkwNjMwNTE4MjksLTEyMi40MjAzNTQ3ODA4NjA5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWM1YzY5NjQ5OGVhNGUzOWIxMGE3M2VhYTZmMjgwMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDI5NzdjMDVjYTRkNDZmYmEzNjBkZDQwOWIzMzAxOWUgPSAkKCc8ZGl2IGlkPSJodG1sXzQyOTc3YzA1Y2E0ZDQ2ZmJhMzYwZGQ0MDliMzMwMTllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzVjNjk2NDk4ZWE0ZTM5YjEwYTczZWFhNmYyODAwYS5zZXRDb250ZW50KGh0bWxfNDI5NzdjMDVjYTRkNDZmYmEzNjBkZDQwOWIzMzAxOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wYTc1YjVhYmQxOWI0Y2I3OTUyOWMzMzdhZTMyMzZjZi5iaW5kUG9wdXAocG9wdXBfNWM1YzY5NjQ5OGVhNGUzOWIxMGE3M2VhYTZmMjgwMGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjhlODNkMWJhNTVhNDZlZTlmNzc2MTE2MWE5MGY0OGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MTU3NjU0MjY5OTUsLTEyMi40Mzk5MDk3NjY3NzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyOTU2YzkzYmU1OTQ3OWZiZjI3YjYzOTZmN2Q5MmY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzZTY0ZGUxZWUzMzRkOTA5YTQ5NGM4MDVhNGM0ZWI5ID0gJCgnPGRpdiBpZD0iaHRtbF80M2U2NGRlMWVlMzM0ZDkwOWE0OTRjODA1YTRjNGViOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNTQVVMVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjI5NTZjOTNiZTU5NDc5ZmJmMjdiNjM5NmY3ZDkyZjQuc2V0Q29udGVudChodG1sXzQzZTY0ZGUxZWUzMzRkOTA5YTQ5NGM4MDVhNGM0ZWI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjhlODNkMWJhNTVhNDZlZTlmNzc2MTE2MWE5MGY0OGQuYmluZFBvcHVwKHBvcHVwXzYyOTU2YzkzYmU1OTQ3OWZiZjI3YjYzOTZmN2Q5MmY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhjMzg4ODE4OWFlNzRjZTE4ZjA0MzM0NDY4NjZlMjEzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzgzNTY5OTM4NjkxOCwtMTIyLjQwODQyMTExNjkyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzQ3YTBmYTBiMjEzNGE5ZjhlYmY4ZGIyNDkxZmU4OTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGY3MzA2M2E4MGM1NDNmOWEzZjkzYzk1NDQ4NGMyZDggPSAkKCc8ZGl2IGlkPSJodG1sX2RmNzMwNjNhODBjNTQzZjlhM2Y5M2M5NTQ0ODRjMmQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MQVJDRU5ZL1RIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDdhMGZhMGIyMTM0YTlmOGViZjhkYjI0OTFmZTg5NS5zZXRDb250ZW50KGh0bWxfZGY3MzA2M2E4MGM1NDNmOWEzZjkzYzk1NDQ4NGMyZDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YzM4ODgxODlhZTc0Y2UxOGYwNDMzNDQ2ODY2ZTIxMy5iaW5kUG9wdXAocG9wdXBfYzQ3YTBmYTBiMjEzNGE5ZjhlYmY4ZGIyNDkxZmU4OTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjUwZGY5ZjA0MTljNDgzMWIwOGUwZTI4NWFkYzg5YmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NzM2MTg2Mjc2NDU2MDQsLTEyMi40MjIzMTU2NzA3NDldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkN2JiMzJmZTNmNTRkNmZiYmUzY2ZkNzMxNjMyNmY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0ZmQ0ODNlMmU5ZjQwYWZiY2MyZmQ1NzZlOTY1NmNlID0gJCgnPGRpdiBpZD0iaHRtbF9iNGZkNDgzZTJlOWY0MGFmYmNjMmZkNTc2ZTk2NTZjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RlJBVUQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FkN2JiMzJmZTNmNTRkNmZiYmUzY2ZkNzMxNjMyNmY4LnNldENvbnRlbnQoaHRtbF9iNGZkNDgzZTJlOWY0MGFmYmNjMmZkNTc2ZTk2NTZjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI1MGRmOWYwNDE5YzQ4MzFiMDhlMGUyODVhZGM4OWJjLmJpbmRQb3B1cChwb3B1cF9hZDdiYjMyZmUzZjU0ZDZmYmJlM2NmZDczMTYzMjZmOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYmQzNjhkMGIyYjQ0OTZjYWViOGRkODE3YWU4ZmRiNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc5Mjg0MTI4NDA0NDcwNSwtMTIyLjQyNDUxOTgzNTAwOTAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZjAzZDQyOWFjMDE0Y2NkYmFhMDYxMDNlMTA5NTljZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zM2YwOWFkM2UwNDQ0MTcyYWQ3OTUxODFmNzdkNTU0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzNmMDlhZDNlMDQ0NDE3MmFkNzk1MTgxZjc3ZDU1NGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldBUlJBTlRTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZjAzZDQyOWFjMDE0Y2NkYmFhMDYxMDNlMTA5NTljZC5zZXRDb250ZW50KGh0bWxfMzNmMDlhZDNlMDQ0NDE3MmFkNzk1MTgxZjc3ZDU1NGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYmQzNjhkMGIyYjQ0OTZjYWViOGRkODE3YWU4ZmRiNC5iaW5kUG9wdXAocG9wdXBfNWYwM2Q0MjlhYzAxNGNjZGJhYTA2MTAzZTEwOTU5Y2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmM3Y2YzMjNiMTZmNGZlOGE5YzI5ZmUxZTkxZTMwMjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTQwOTg2ODgyMDY3OTUsLTEyMi40MTQyMzM4NDkwMzc5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmE3MTM4ZmU2ZDA0NDA1ODljNTg4NTZkYzc1OGI2NjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmFjMDcwODMyZGU5NDY5NWEyMTNlZWI2ZThjZmM3ZWUgPSAkKCc8ZGl2IGlkPSJodG1sX2ZhYzA3MDgzMmRlOTQ2OTVhMjEzZWViNmU4Y2ZjN2VlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EUlVHL05BUkNPVElDPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTcxMzhmZTZkMDQ0MDU4OWM1ODg1NmRjNzU4YjY2Mi5zZXRDb250ZW50KGh0bWxfZmFjMDcwODMyZGU5NDY5NWEyMTNlZWI2ZThjZmM3ZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yYzdjZjMyM2IxNmY0ZmU4YTljMjlmZTFlOTFlMzAyNC5iaW5kUG9wdXAocG9wdXBfNmE3MTM4ZmU2ZDA0NDA1ODljNTg4NTZkYzc1OGI2NjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2ExN2M1NDdiMGVjNGJmNzk5MjYwOTI1Mjc3Mjk2YzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTQwOTg2ODgyMDY3OTUsLTEyMi40MTQyMzM4NDkwMzc5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWI3ODA0MjIyYzY0NGYxNjgzYWU2OGIwYTkxNWE4NTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDYxMTkxN2M1MGY4NGZiZGE5ZjY4YmRkMmFjMDhhMzAgPSAkKCc8ZGl2IGlkPSJodG1sXzA2MTE5MTdjNTBmODRmYmRhOWY2OGJkZDJhYzA4YTMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PVEhFUiBPRkZFTlNFUzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWI3ODA0MjIyYzY0NGYxNjgzYWU2OGIwYTkxNWE4NTMuc2V0Q29udGVudChodG1sXzA2MTE5MTdjNTBmODRmYmRhOWY2OGJkZDJhYzA4YTMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2ExN2M1NDdiMGVjNGJmNzk5MjYwOTI1Mjc3Mjk2YzQuYmluZFBvcHVwKHBvcHVwXzViNzgwNDIyMmM2NDRmMTY4M2FlNjhiMGE5MTVhODUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVkMjA4ZTczNjdlNDQxNTBhZGQxNzFjMDM0NTgzMWI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzcxNDkzOTk2OTQxNiwtMTIyLjUwNzc1MDEzMTAwNDAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MGNmNDZjYTNlZmQ0NmFjOTA2MGU1YjQ4MzE3MTg0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTczYWZmMjcyZGU0NGM1OGJjY2VmYTY0NDZjZmY2OCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2E3M2FmZjI3MmRlNDRjNThiY2NlZmE2NDQ2Y2ZmNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwY2Y0NmNhM2VmZDQ2YWM5MDYwZTViNDgzMTcxODQ2LnNldENvbnRlbnQoaHRtbF9jYTczYWZmMjcyZGU0NGM1OGJjY2VmYTY0NDZjZmY2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVkMjA4ZTczNjdlNDQxNTBhZGQxNzFjMDM0NTgzMWI1LmJpbmRQb3B1cChwb3B1cF84MGNmNDZjYTNlZmQ0NmFjOTA2MGU1YjQ4MzE3MTg0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNjMzYjU1M2QyNjk0NzRmOTM3OGUzM2M4Nzk4N2U4ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxODMwMjIwNDc2NjAwNSwtMTIyLjQ3NDQ0NDYzOTU5NDk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NmE3MWNjMDk0MDI0ZmQ3ODFhNDRkNThhMmNhNGRhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNDg4NTJiMzI2MDc0ZmE0YTY5Y2VlZWY5MzQxMGQ4ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZDQ4ODUyYjMyNjA3NGZhNGE2OWNlZWVmOTM0MTBkOGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NmE3MWNjMDk0MDI0ZmQ3ODFhNDRkNThhMmNhNGRhNy5zZXRDb250ZW50KGh0bWxfZDQ4ODUyYjMyNjA3NGZhNGE2OWNlZWVmOTM0MTBkOGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNjMzYjU1M2QyNjk0NzRmOTM3OGUzM2M4Nzk4N2U4ZC5iaW5kUG9wdXAocG9wdXBfODZhNzFjYzA5NDAyNGZkNzgxYTQ0ZDU4YTJjYTRkYTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTc2YTAwYTQwNDkyNGNlMWE0ZmY5ZjQzOWZmZjA4NzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjQ1NzUyMzE3NjE1LC0xMjIuNDI3NTYyNTk2OTg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDAyZDAyYmVjYTU0NDE4YmFkZTI1MjY4NzU4YjRmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDQ0MzE0YTg0ZWE0NzliYWNhNTM0ZjI2NjEyZTg2YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjQ0NDMxNGE4NGVhNDc5YmFjYTUzNGYyNjYxMmU4NmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDAyZDAyYmVjYTU0NDE4YmFkZTI1MjY4NzU4YjRmOC5zZXRDb250ZW50KGh0bWxfZjQ0NDMxNGE4NGVhNDc5YmFjYTUzNGYyNjYxMmU4NmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81NzZhMDBhNDA0OTI0Y2UxYTRmZjlmNDM5ZmZmMDg3My5iaW5kUG9wdXAocG9wdXBfZjAwMmQwMmJlY2E1NDQxOGJhZGUyNTI2ODc1OGI0ZjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWJlYmJiNTI1NmNhNDZiOGJlYjI3MjZjZTBjZTExZjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc0Mzc4MzA5MTEyLC0xMjIuNDE5MjAzMDA0MjY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDU5MGY5ZGM3NWY0ZmQ2OTQ5ZjczMTcxMzBkMzU4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTgxZWUxZjUzMzM0ZGNkOTM5NmZjNWU0N2IzYWIxZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGU4MWVlMWY1MzMzNGRjZDkzOTZmYzVlNDdiM2FiMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVUkdMQVJZPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDU5MGY5ZGM3NWY0ZmQ2OTQ5ZjczMTcxMzBkMzU4MS5zZXRDb250ZW50KGh0bWxfZGU4MWVlMWY1MzMzNGRjZDkzOTZmYzVlNDdiM2FiMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYmViYmI1MjU2Y2E0NmI4YmViMjcyNmNlMGNlMTFmMS5iaW5kUG9wdXAocG9wdXBfZjA1OTBmOWRjNzVmNGZkNjk0OWY3MzE3MTMwZDM1ODEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWEzOTdhNzAxZjMxNDVkZjliMzc1NTFlMDMyNzZjNWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDkzNjg4Mjg0NTMyLC0xMjIuNDEyNjkwMTQyMzA4MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0OWQ5NWZmZDI4MzRkZTNiODFkZGIwNmMzYjJhMTY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiNzRlZTc5N2Y4MDQzZDZhZjM4NzQxNGE0MmFhOTY2ID0gJCgnPGRpdiBpZD0iaHRtbF8xYjc0ZWU3OTdmODA0M2Q2YWYzODc0MTRhNDJhYTk2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0OWQ5NWZmZDI4MzRkZTNiODFkZGIwNmMzYjJhMTY1LnNldENvbnRlbnQoaHRtbF8xYjc0ZWU3OTdmODA0M2Q2YWYzODc0MTRhNDJhYTk2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2VhMzk3YTcwMWYzMTQ1ZGY5YjM3NTUxZTAzMjc2YzViLmJpbmRQb3B1cChwb3B1cF81NDlkOTVmZmQyODM0ZGUzYjgxZGRiMDZjM2IyYTE2NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NTVmNWU1ZmJjYjM0YWU5YTk1YjRjNjI4YTUwMmUyNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcwOTIwMTA0NjIzNzksLTEyMi40MzQ2MDkyODAzNTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1M2U5ZDQxMTg5MDRlZDRiMTE5NGMwNWI2ZDk3YjU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwNjUzNThkZTRmNDQ4ODI5ZWJmYThmNDAyYmZkYTA5ID0gJCgnPGRpdiBpZD0iaHRtbF85MDY1MzU4ZGU0ZjQ0ODgyOWViZmE4ZjQwMmJmZGEwOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NTNlOWQ0MTE4OTA0ZWQ0YjExOTRjMDViNmQ5N2I1OC5zZXRDb250ZW50KGh0bWxfOTA2NTM1OGRlNGY0NDg4MjllYmZhOGY0MDJiZmRhMDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NTVmNWU1ZmJjYjM0YWU5YTk1YjRjNjI4YTUwMmUyNC5iaW5kUG9wdXAocG9wdXBfNzUzZTlkNDExODkwNGVkNGIxMTk0YzA1YjZkOTdiNTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjZiOTYxMDM4YjZhNDM4OTkwODNmNjgyYjk1NWFlMGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODc5MjA5Mzc1NTMyOTUsLTEyMi40MTA4ODI4MjU1NTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3M2NlYTUyM2Q2NDQ3OTlhYzNiZjViNDBlYTg0MmFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzNDFkNjYzMTFhNjQwN2JiNWU4NTdlYTE0YzgzOWI3ID0gJCgnPGRpdiBpZD0iaHRtbF9iMzQxZDY2MzExYTY0MDdiYjVlODU3ZWExNGM4MzliNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkVISUNMRSBUSEVGVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzczY2VhNTIzZDY0NDc5OWFjM2JmNWI0MGVhODQyYWUuc2V0Q29udGVudChodG1sX2IzNDFkNjYzMTFhNjQwN2JiNWU4NTdlYTE0YzgzOWI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjZiOTYxMDM4YjZhNDM4OTkwODNmNjgyYjk1NWFlMGMuYmluZFBvcHVwKHBvcHVwX2M3M2NlYTUyM2Q2NDQ3OTlhYzNiZjViNDBlYTg0MmFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U3ZTYwYjk1YzI0ODRiODI4N2JjNWVmODlmNGFmMzIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuODAwNDU2NjQ3MTAzODksLTEyMi40MDE0MzI3NTQ3MjIwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjU2ODBhYmM1ZWU0NGM3NWE1ODVkZTY2ZmVhYjQ2NjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTMxZWM3YWViYjBkNDExYzg2OTBjNTVkYjU3NjJkNzMgPSAkKCc8ZGl2IGlkPSJodG1sXzEzMWVjN2FlYmIwZDQxMWM4NjkwYzU1ZGI1NzYyZDczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRUhJQ0xFIFRIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTY4MGFiYzVlZTQ0Yzc1YTU4NWRlNjZmZWFiNDY2MS5zZXRDb250ZW50KGh0bWxfMTMxZWM3YWViYjBkNDExYzg2OTBjNTVkYjU3NjJkNzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lN2U2MGI5NWMyNDg0YjgyODdiYzVlZjg5ZjRhZjMyMi5iaW5kUG9wdXAocG9wdXBfNjU2ODBhYmM1ZWU0NGM3NWE1ODVkZTY2ZmVhYjQ2NjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZmIyNzFkYTVlYTc4NGM2OGE1ZGRkYTI0MjM1YTdlMjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NDM1NTUwNTQyMjY1LC0xMjIuNDIxMTI4MDI5NTA1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNmI3NDFmZGYzMTE0ZDE2YTMyY2U2Y2NjN2NkNjEyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjgwNzU0MmVkZmI0ZDNiYWEwMzBiM2MxOWI4NmJlNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzY4MDc1NDJlZGZiNGQzYmFhMDMwYjNjMTliODZiZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBUkNFTlkvVEhFRlQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2Yjc0MWZkZjMxMTRkMTZhMzJjZTZjY2M3Y2Q2MTI0LnNldENvbnRlbnQoaHRtbF9jNjgwNzU0MmVkZmI0ZDNiYWEwMzBiM2MxOWI4NmJlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZiMjcxZGE1ZWE3ODRjNjhhNWRkZGEyNDIzNWE3ZTI1LmJpbmRQb3B1cChwb3B1cF8zNmI3NDFmZGYzMTE0ZDE2YTMyY2U2Y2NjN2NkNjEyNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYmVhZjNlNzVhYWM0OTY0OGNmMGU0ZDg5NjUyZGE5NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4NjU2NDc2MDc2ODUsLTEyMi40MDcyNDQwODcwMzJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjZjkyNjE3NzFiYTRiYjJhY2YxODBhYWE4MDI0YWNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiY2UyODQyY2NhMjQ0ZjJiMzg0N2ViMmM5YTNmNjJhID0gJCgnPGRpdiBpZD0iaHRtbF8wYmNlMjg0MmNjYTI0NGYyYjM4NDdlYjJjOWEzZjYyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVNTQVVMVDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNmOTI2MTc3MWJhNGJiMmFjZjE4MGFhYTgwMjRhY2Iuc2V0Q29udGVudChodG1sXzBiY2UyODQyY2NhMjQ0ZjJiMzg0N2ViMmM5YTNmNjJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWJlYWYzZTc1YWFjNDk2NDhjZjBlNGQ4OTY1MmRhOTYuYmluZFBvcHVwKHBvcHVwX2RjZjkyNjE3NzFiYTRiYjJhY2YxODBhYWE4MDI0YWNiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBkNjI0OGFhNzUxZjRlMzJiM2YxMzE5NTQ4MGQ1NGM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzYxNTY1NTkyODA0NSwtMTIyLjQyMzgwMzAwMTkwMDk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTcxMjc3MjE5Y2Y0NTg0ODYxNTM0YzcxNzRmNjg2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzFjODA3ODYwZTY0OTAwODY0Njk4ZGQ4OTdkMmZlZSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTcxYzgwNzg2MGU2NDkwMDg2NDY5OGRkODk3ZDJmZWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJFQ09WRVJFRCBWRUhJQ0xFPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTcxMjc3MjE5Y2Y0NTg0ODYxNTM0YzcxNzRmNjg2My5zZXRDb250ZW50KGh0bWxfYTcxYzgwNzg2MGU2NDkwMDg2NDY5OGRkODk3ZDJmZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZDYyNDhhYTc1MWY0ZTMyYjNmMTMxOTU0ODBkNTRjNy5iaW5kUG9wdXAocG9wdXBfYjU3MTI3NzIxOWNmNDU4NDg2MTUzNGM3MTc0ZjY4NjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjVhYThjMGVjODQ5NDEzYTg5ZWIyZTFmNWU2NjcyY2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjE1NjU1OTI4MDQ1LC0xMjIuNDIzODAzMDAxOTAwOTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxNmIwZmNjN2QyMDQ2NzViZWNmZTQ0NmY1NjMxZDgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU2ZDhlYjBlMTQ5MTQ2OTI5ZmU5MmJmZjQ1YTc3MWJhID0gJCgnPGRpdiBpZD0iaHRtbF81NmQ4ZWIwZTE0OTE0NjkyOWZlOTJiZmY0NWE3NzFiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T1RIRVIgT0ZGRU5TRVM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxNmIwZmNjN2QyMDQ2NzViZWNmZTQ0NmY1NjMxZDgxLnNldENvbnRlbnQoaHRtbF81NmQ4ZWIwZTE0OTE0NjkyOWZlOTJiZmY0NWE3NzFiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I1YWE4YzBlYzg0OTQxM2E4OWViMmUxZjVlNjY3MmNjLmJpbmRQb3B1cChwb3B1cF8yMTZiMGZjYzdkMjA0Njc1YmVjZmU0NDZmNTYzMWQ4MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85Zjk4MTFlYmUzNjI0ZDY5OTFlNTIxOGUwNzc0MzA2MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc0NDE5Mjc1MDg5MzIwNSwtMTIyLjQ0NDY4NTQ4MjI3M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjU4ZDdhNmE1YTdkNDVmYTk3ZGFiZGRjY2VjNjgzNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmY1Y2M1NTIzMTFiNDNhYjk2MzgyMmQzYzM0ZmQ2ZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzZmNWNjNTUyMzExYjQzYWI5NjM4MjJkM2MzNGZkNmQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OT04tQ1JJTUlOQUw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1OGQ3YTZhNWE3ZDQ1ZmE5N2RhYmRkY2NlYzY4Mzc2LnNldENvbnRlbnQoaHRtbF82ZjVjYzU1MjMxMWI0M2FiOTYzODIyZDNjMzRmZDZkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlmOTgxMWViZTM2MjRkNjk5MWU1MjE4ZTA3NzQzMDYxLmJpbmRQb3B1cChwb3B1cF9iNThkN2E2YTVhN2Q0NWZhOTdkYWJkZGNjZWM2ODM3Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84MzM2NzFlYjE5YjE0YmE3OWQzZDNjNzk4YWViNjc0ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQ2OTI4MjAwNDEsLTEyMi40MTU3NTcwMzkxOTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmY2YzMGRjMjc5ZTRhYTVhYTJjNWY2ZDU0NmQ3NWUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmODA0NTZkZDM3ZDRjNmI5NTU2Y2EyNDg5YjE3NzhkID0gJCgnPGRpdiBpZD0iaHRtbF8zZjgwNDU2ZGQzN2Q0YzZiOTU1NmNhMjQ4OWIxNzc4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tk9OLUNSSU1JTkFMPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZmNmMzBkYzI3OWU0YWE1YWEyYzVmNmQ1NDZkNzVlMC5zZXRDb250ZW50KGh0bWxfM2Y4MDQ1NmRkMzdkNGM2Yjk1NTZjYTI0ODliMTc3OGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84MzM2NzFlYjE5YjE0YmE3OWQzZDNjNzk4YWViNjc0ZC5iaW5kUG9wdXAocG9wdXBfYWZjZjMwZGMyNzllNGFhNWFhMmM1ZjZkNTQ2ZDc1ZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGQ2NmI5ODNhNWMxNGU2ZjliMjM1NmM5MjI5NTg2YzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Mjg1MjgwNjI3NDY1LC0xMjIuNDc1NjQ3NDYwNzg1OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5OWExYjMzZWRiMjRlNDhhMTUyOTAzMmNmYWYyMWIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmMDhjMDI2MjJiMDRlNDdhMGQxYmE4YWNiNWIzOTAwID0gJCgnPGRpdiBpZD0iaHRtbF80ZjA4YzAyNjIyYjA0ZTQ3YTBkMWJhOGFjYjViMzkwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Uk9CQkVSWTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzk5YTFiMzNlZGIyNGU0OGExNTI5MDMyY2ZhZjIxYjMuc2V0Q29udGVudChodG1sXzRmMDhjMDI2MjJiMDRlNDdhMGQxYmE4YWNiNWIzOTAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGQ2NmI5ODNhNWMxNGU2ZjliMjM1NmM5MjI5NTg2YzAuYmluZFBvcHVwKHBvcHVwXzM5OWExYjMzZWRiMjRlNDhhMTUyOTAzMmNmYWYyMWIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U0ZmRlYjc5ZTY2MDQyMjM4N2Q1MjRlMTI5MDE0OTczID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzQyODUxNzM3NDQ0ODk0LC0xMjIuNDIwOTY3NDQwNTY0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDRhNDQwNDQ3MjE0ZmI3OTViMGY2ZGNiOWNjYjhjYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNGZkYmFjM2QwN2I0ZWEzOWU2MTEyOWQ1M2IzY2Q1MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzRmZGJhYzNkMDdiNGVhMzllNjExMjlkNTNiM2NkNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDRhNDQwNDQ3MjE0ZmI3OTViMGY2ZGNiOWNjYjhjYy5zZXRDb250ZW50KGh0bWxfYzRmZGJhYzNkMDdiNGVhMzllNjExMjlkNTNiM2NkNTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lNGZkZWI3OWU2NjA0MjIzODdkNTI0ZTEyOTAxNDk3My5iaW5kUG9wdXAocG9wdXBfZTA0YTQ0MDQ0NzIxNGZiNzk1YjBmNmRjYjljY2I4Y2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGFiZDE0ZTc0ZTFkNGUzMTkxZDJkZDA1YTE5M2M3NWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIxMTk4NDg4OTMxLC0xMjIuNDE1NjY5NjYxNDQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDVhYjMxYTE3OTI0YThiYTJiNTI3NzQwMGQ2MmM0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OWQ5M2E4ZmFjMTQ0OGE0ODU2NmQzZGYxZTA0NmQ2MiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTlkOTNhOGZhYzE0NDhhNDg1NjZkM2RmMWUwNDZkNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZBTkRBTElTTTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDQ1YWIzMWExNzkyNGE4YmEyYjUyNzc0MDBkNjJjNGQuc2V0Q29udGVudChodG1sXzk5ZDkzYThmYWMxNDQ4YTQ4NTY2ZDNkZjFlMDQ2ZDYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGFiZDE0ZTc0ZTFkNGUzMTkxZDJkZDA1YTE5M2M3NWIuYmluZFBvcHVwKHBvcHVwX2Q0NWFiMzFhMTc5MjRhOGJhMmI1Mjc3NDAwZDYyYzRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I2ZTM3NTBlOTMyMTQyYmY5YmFiMTBjZmI1MjcxMWEzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc5MTY3NDIxODk2MywtMTIyLjQwNjM0NjQyNTYzMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDNhOTlhMTZhOWQ1NGE1ZDgzMzIxNDNlYWU1OWIzOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDlkOWU1NDliZDliNDM5OWEyODkxNDBkNDRmOWYwZTEgPSAkKCc8ZGl2IGlkPSJodG1sXzQ5ZDllNTQ5YmQ5YjQzOTlhMjg5MTQwZDQ0ZjlmMGUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BU1NBVUxUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kM2E5OWExNmE5ZDU0YTVkODMzMjE0M2VhZTU5YjM5NS5zZXRDb250ZW50KGh0bWxfNDlkOWU1NDliZDliNDM5OWEyODkxNDBkNDRmOWYwZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNmUzNzUwZTkzMjE0MmJmOWJhYjEwY2ZiNTI3MTFhMy5iaW5kUG9wdXAocG9wdXBfZDNhOTlhMTZhOWQ1NGE1ZDgzMzIxNDNlYWU1OWIzOTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzRiOTIxYjEzMzdiNDExNjk0M2EzNTZkZDIwNTIyZmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NjU3MTg0Mzk1MjgyLC0xMjIuNDA5NTI5OTEzMjc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZGQxYjdkNDhhOTA0ZTU1YmJkMTJlYWM4YWRkYjc1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZGJlOTQ0NzdhMTY0OGMxODY5MjU4NDcyNDhhZmUwZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNmRiZTk0NDc3YTE2NDhjMTg2OTI1ODQ3MjQ4YWZlMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBUkNFTlkvVEhFRlQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JkZDFiN2Q0OGE5MDRlNTViYmQxMmVhYzhhZGRiNzU5LnNldENvbnRlbnQoaHRtbF82ZGJlOTQ0NzdhMTY0OGMxODY5MjU4NDcyNDhhZmUwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M0YjkyMWIxMzM3YjQxMTY5NDNhMzU2ZGQyMDUyMmZlLmJpbmRQb3B1cChwb3B1cF9iZGQxYjdkNDhhOTA0ZTU1YmJkMTJlYWM4YWRkYjc1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZDUyNzhlYTZkNTA0MjUyOGZlZjUwMjJmOWQ5OWYwZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NTQyMDcwNjcxMSwtMTIyLjQwMzQwNDc5MTQ3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTM5OWRlYzM0ZTM0MTA0ODY0Njk2ZmVkYTI3OWZiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDZjY2M5MjAwZGQ0YWM5ODM5YmFmM2NiNDMxNzYyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTA2Y2NjOTIwMGRkNGFjOTgzOWJhZjNjYjQzMTc2MjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5PTi1DUklNSU5BTDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjUzOTlkZWMzNGUzNDEwNDg2NDY5NmZlZGEyNzlmYjMuc2V0Q29udGVudChodG1sXzUwNmNjYzkyMDBkZDRhYzk4MzliYWYzY2I0MzE3NjIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmQ1Mjc4ZWE2ZDUwNDI1MjhmZWY1MDIyZjlkOTlmMGYuYmluZFBvcHVwKHBvcHVwX2I1Mzk5ZGVjMzRlMzQxMDQ4NjQ2OTZmZWRhMjc5ZmIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UzZTVjYmEyY2VkNjRmY2U5OTMyZGFmOWVjMTg1YWRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY3NTI0MzA4NzgzLC0xMjIuNDEwNzM4MDk3MzE1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZWVjNjVlODg2OGM0MjQ2YTVmOThjYzE5Y2Y3NDY5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTI4NTA2ZWUwZTg0Yjk1YjA5ZmZmYjc3NDljZjM2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGEyODUwNmVlMGU4NGI5NWIwOWZmZmI3NzQ5Y2YzNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJVUkdMQVJZPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZWVjNjVlODg2OGM0MjQ2YTVmOThjYzE5Y2Y3NDY5MC5zZXRDb250ZW50KGh0bWxfZGEyODUwNmVlMGU4NGI5NWIwOWZmZmI3NzQ5Y2YzNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lM2U1Y2JhMmNlZDY0ZmNlOTkzMmRhZjllYzE4NWFkZC5iaW5kUG9wdXAocG9wdXBfNmVlYzY1ZTg4NjhjNDI0NmE1Zjk4Y2MxOWNmNzQ2OTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTRjMGJkNDliMzYyNDEzNWI4ODdhMWMxYWUyZmYyMTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43Njc1MjQzMDg3ODMsLTEyMi40MTA3MzgwOTczMTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmYzg4NWM4ZmFlMTQyY2Q5MGNkYTEzZDdkYWViNGU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3ZWExMjA2ODQ3OTRhNjdiYTUzNDc3ZWUzNzk2NjM1ID0gJCgnPGRpdiBpZD0iaHRtbF8wN2VhMTIwNjg0Nzk0YTY3YmE1MzQ3N2VlMzc5NjYzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QVJTT048L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmYzg4NWM4ZmFlMTQyY2Q5MGNkYTEzZDdkYWViNGU1LnNldENvbnRlbnQoaHRtbF8wN2VhMTIwNjg0Nzk0YTY3YmE1MzQ3N2VlMzc5NjYzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E0YzBiZDQ5YjM2MjQxMzViODg3YTFjMWFlMmZmMjEzLmJpbmRQb3B1cChwb3B1cF85ZmM4ODVjOGZhZTE0MmNkOTBjZGExM2Q3ZGFlYjRlNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZjczODk3NzI0Njk0YjkxODAwOGJhMDAzMzNkZTE5YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxMzEwODM0MzMyNjQsLTEyMi40NDQzMTQwMjUxODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlZDgxY2RjNWZlNzQ5MTFhMGRhMzg2ZDk3ZWIwY2M5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1NWNhOGVjYzJjOTRhOThiNTNhNmRkNTFiNWZkNGMxID0gJCgnPGRpdiBpZD0iaHRtbF8zNTVjYThlY2MyYzk0YTk4YjUzYTZkZDUxYjVmZDRjMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QlVSR0xBUlk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZlZDgxY2RjNWZlNzQ5MTFhMGRhMzg2ZDk3ZWIwY2M5LnNldENvbnRlbnQoaHRtbF8zNTVjYThlY2MyYzk0YTk4YjUzYTZkZDUxYjVmZDRjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RmNzM4OTc3MjQ2OTRiOTE4MDA4YmEwMDMzM2RlMTliLmJpbmRQb3B1cChwb3B1cF82ZWQ4MWNkYzVmZTc0OTExYTBkYTM4NmQ5N2ViMGNjOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NDY5MDVjMmMyYmQ0NmRiYmVhNjFmOGQ4NDk0ZWM3MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjcxMzEwODM0MzMyNjQsLTEyMi40NDQzMTQwMjUxODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhMTlmY2JjYmI4YTRlYmQ5N2RmNjZmOWNlMjk4MTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxMWE0NWZjYTk2MzQ2ODFhNzBlNzcwYjllZDU4ZTUxID0gJCgnPGRpdiBpZD0iaHRtbF8yMTFhNDVmY2E5NjM0NjgxYTcwZTc3MGI5ZWQ1OGU1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RFJVRy9OQVJDT1RJQzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGExOWZjYmNiYjhhNGViZDk3ZGY2NmY5Y2UyOTgxNTMuc2V0Q29udGVudChodG1sXzIxMWE0NWZjYTk2MzQ2ODFhNzBlNzcwYjllZDU4ZTUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDQ2OTA1YzJjMmJkNDZkYmJlYTYxZjhkODQ5NGVjNzMuYmluZFBvcHVwKHBvcHVwXzRhMTlmY2JjYmI4YTRlYmQ5N2RmNjZmOWNlMjk4MTUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MzOTgzN2MzYTc0MTQ2ZTdhZmQzMTM0NmY1YWM5ZjU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzNkNTY5Mjc1YjE2NDdkMDk5OTFiZWE0NTdkOTIxYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2M3OGQ0YzVmOTVmNGRlYjk3MzNhMmZiMGViNzk4OTEgPSAkKCc8ZGl2IGlkPSJodG1sXzdjNzhkNGM1Zjk1ZjRkZWI5NzMzYTJmYjBlYjc5ODkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSVNTSU5HIFBFUlNPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzNkNTY5Mjc1YjE2NDdkMDk5OTFiZWE0NTdkOTIxYTQuc2V0Q29udGVudChodG1sXzdjNzhkNGM1Zjk1ZjRkZWI5NzMzYTJmYjBlYjc5ODkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzM5ODM3YzNhNzQxNDZlN2FmZDMxMzQ2ZjVhYzlmNTcuYmluZFBvcHVwKHBvcHVwX2MzZDU2OTI3NWIxNjQ3ZDA5OTkxYmVhNDU3ZDkyMWE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FmOGU2ZDA3Y2YwYTQ2MmI5YWU3ODNmNWIwNTRhNWMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzY2MDE2MDExNDEwMywtMTIyLjQwMzY0NDYyMDQzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU1MWUzNjkxNTQ4NDc2MTg5NjYwZmNkYmJlNDExNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjY3OTI0YWYwNDEwNDZjNGI2NzE4N2Y4ODA3NmVlMTIgPSAkKCc8ZGl2IGlkPSJodG1sXzY2NzkyNGFmMDQxMDQ2YzRiNjcxODdmODgwNzZlZTEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSVNTSU5HIFBFUlNPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWU1MWUzNjkxNTQ4NDc2MTg5NjYwZmNkYmJlNDExNzcuc2V0Q29udGVudChodG1sXzY2NzkyNGFmMDQxMDQ2YzRiNjcxODdmODgwNzZlZTEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWY4ZTZkMDdjZjBhNDYyYjlhZTc4M2Y1YjA1NGE1YzIuYmluZFBvcHVwKHBvcHVwXzllNTFlMzY5MTU0ODQ3NjE4OTY2MGZjZGJiZTQxMTc3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZhYjBhNjZmZDk0ZTRmMjE4ZDBjMjY3ZjE2NmRhMTg0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc2MjMxMDQwNDc1OCwtMTIyLjQxNDcxNDI5NTU3ODk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZDJkYzQzNjI3N2I0ODJlYWVmNjliMzg5NDA4ODQwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOGNiMWI2Yjc0ODQ0YmIyOGM5MWQyN2M2ODkxYzdmNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZDhjYjFiNmI3NDg0NGJiMjhjOTFkMjdjNjg5MWM3ZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFTU0FVTFQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkMmRjNDM2Mjc3YjQ4MmVhZWY2OWIzODk0MDg4NDAxLnNldENvbnRlbnQoaHRtbF9kOGNiMWI2Yjc0ODQ0YmIyOGM5MWQyN2M2ODkxYzdmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZhYjBhNjZmZDk0ZTRmMjE4ZDBjMjY3ZjE2NmRhMTg0LmJpbmRQb3B1cChwb3B1cF8yZDJkYzQzNjI3N2I0ODJlYWVmNjliMzg5NDA4ODQwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMzIzNGJiYWJlZDk0YzZhOGI0ZjIwYzk4MTU2NDQ2YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NjIzMTA0MDQ3NTgsLTEyMi40MTQ3MTQyOTU1Nzg5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTExNDBlZTM4YmYxNDIyYmE1MDI2ZTRhOTQ2YWIyNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDc0ODc1NzYwMzhmNGQ0MDgzYzI0MTg2ZDczMGRhOWUgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3NDg3NTc2MDM4ZjRkNDA4M2MyNDE4NmQ3MzBkYTllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NSVNTSU5HIFBFUlNPTjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTExNDBlZTM4YmYxNDIyYmE1MDI2ZTRhOTQ2YWIyNzguc2V0Q29udGVudChodG1sXzQ3NDg3NTc2MDM4ZjRkNDA4M2MyNDE4NmQ3MzBkYTllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzMyMzRiYmFiZWQ5NGM2YThiNGYyMGM5ODE1NjQ0NmIuYmluZFBvcHVwKHBvcHVwX2ExMTQwZWUzOGJmMTQyMmJhNTAyNmU0YTk0NmFiMjc4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFkNGQyNzc0NGQyNTQ4OTE4OTA2YTcwYTI3M2Y2NjdlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNzc3NTExODg5NTY5NSwtMTIyLjQxODA0NTQ1Mjc2OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfNGFkZTllMGE4YzBhNDVkYTg3MDUxMTQ0ZGE5MDZhOGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTU1ZmMxOTU3Mzg2NDY1NTkwNjVkZWRiZGM2NjMyMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZjOWExNzcxYTM1NDZlY2JmN2ZmODkwNzJlZjg2NDIgPSAkKCc8ZGl2IGlkPSJodG1sX2JmYzlhMTc3MWEzNTQ2ZWNiZjdmZjg5MDcyZWY4NjQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WRUhJQ0xFIFRIRUZUPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNTVmYzE5NTczODY0NjU1OTA2NWRlZGJkYzY2MzIzMy5zZXRDb250ZW50KGh0bWxfYmZjOWExNzcxYTM1NDZlY2JmN2ZmODkwNzJlZjg2NDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZDRkMjc3NDRkMjU0ODkxODkwNmE3MGEyNzNmNjY3ZS5iaW5kUG9wdXAocG9wdXBfZTU1ZmMxOTU3Mzg2NDY1NTkwNjVkZWRiZGM2NjMyMzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTg1NTkwOTBkMzA2NDU3NmJlNTk2MmZlMmNlODQ3MmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODIwMjM4NDc4OTc1LC0xMjIuNDAxMTYxNTU1NjAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl80YWRlOWUwYThjMGE0NWRhODcwNTExNDRkYTkwNmE4Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hN2UzYzZiMWVjZTM0MWU5OTRjNjYyMGM0MGQ0ZjhiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YjgwNTcxOTQzMDY0Y2Q3YjBlOGEyMWJmMWY4YzE1NSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGI4MDU3MTk0MzA2NGNkN2IwZThhMjFiZjFmOGMxNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9USEVSIE9GRkVOU0VTPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hN2UzYzZiMWVjZTM0MWU5OTRjNjYyMGM0MGQ0ZjhiZS5zZXRDb250ZW50KGh0bWxfOGI4MDU3MTk0MzA2NGNkN2IwZThhMjFiZjFmOGMxNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hODU1OTA5MGQzMDY0NTc2YmU1OTYyZmUyY2U4NDcyZS5iaW5kUG9wdXAocG9wdXBfYTdlM2M2YjFlY2UzNDFlOTk0YzY2MjBjNDBkNGY4YmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDRlMDI1MDE4YzgxNDYxOTllYmU4MzUxMTkyYzY1ZDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43MjcwMDUzMTk2Mjk5OTUsLTEyMi40MDM0MDg2NjkxOTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2OTJiZmU0MDg1ZjRkZTg5OTI2M2U2OGY2MjM1M2M0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhZTc4MTc5NWVlNDRhYmI4OWUyODUyZjM1OGNlOTdhID0gJCgnPGRpdiBpZD0iaHRtbF8yYWU3ODE3OTVlZTQ0YWJiODllMjg1MmYzNThjZTk3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V0FSUkFOVFM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2OTJiZmU0MDg1ZjRkZTg5OTI2M2U2OGY2MjM1M2M0LnNldENvbnRlbnQoaHRtbF8yYWU3ODE3OTVlZTQ0YWJiODllMjg1MmYzNThjZTk3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q0ZTAyNTAxOGM4MTQ2MTk5ZWJlODM1MTE5MmM2NWQzLmJpbmRQb3B1cChwb3B1cF80NjkyYmZlNDA4NWY0ZGU4OTkyNjNlNjhmNjIzNTNjNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZTU0ODZkMWUxMGY0MmMwOWNkNzQ4NzIyNGY4MWJlMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc4MzgzNDQzNzQxNDEsLTEyMi40MTI5MzA1MjIwNTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiYjIzYzJjZjQ5ODRhNzI5NGQzNDFhNjNjMzVkN2E2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0ZDBjMWU4MWNhMjQzYTc5ODM5NGJhYmUzMWE4YjM2ID0gJCgnPGRpdiBpZD0iaHRtbF9jNGQwYzFlODFjYTI0M2E3OTgzOTRiYWJlMzFhOGIzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VkFOREFMSVNNPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmIyM2MyY2Y0OTg0YTcyOTRkMzQxYTYzYzM1ZDdhNi5zZXRDb250ZW50KGh0bWxfYzRkMGMxZTgxY2EyNDNhNzk4Mzk0YmFiZTMxYThiMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZTU0ODZkMWUxMGY0MmMwOWNkNzQ4NzIyNGY4MWJlMy5iaW5kUG9wdXAocG9wdXBfY2JiMjNjMmNmNDk4NGE3Mjk0ZDM0MWE2M2MzNWQ3YTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTUxMjcwZmQxNmZhNDk0ZGE2NGMxMjkyMzZhNGFiMmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43NTMwMTg2NTM3NDQ2MDQsLTEyMi40MTg1ODcxNzIyMTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzRhZGU5ZTBhOGMwYTQ1ZGE4NzA1MTE0NGRhOTA2YThiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzODQzMmUwMDEzODQxYzFiODM5YzU2Mzk1ZWUxMzAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExNWRiMmZkOWNiNTQwMjBiZDE2Y2Q1NGIwNTY2ZmRiID0gJCgnPGRpdiBpZD0iaHRtbF8xMTVkYjJmZDljYjU0MDIwYmQxNmNkNTRiMDU2NmZk |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment